Выбор сущности мышкой
Материал из CryWiki Russia
Версия от 17:29, 10 июня 2011; DCamer (Обсуждение | вклад)
Пошаговое руководств по примеру C++
Эта функция возвращает EntityId текущей сущности под курсором мыши. Чтобы использовать её, сначала нужно отобразить курсор.
|
C++ (main.cpp)
EntityId GetMouseEntityID() { static ray_hit hit; float x, y, xMouse, yMouse, zMouse = 0.0f; if(!gEnv->pHardwareMouse || !gEnv->pRenderer || !gEnv->p3DEngine || !gEnv->pSystem || !gEnv->pEntitySystem || !g_pGame->GetIGameFramework()) return 0; IActor *pClientActor = g_pGame->GetIGameFramework()->GetClientActor(); if (!pClientActor) return 0; gEnv->pHardwareMouse->GetHardwareMouseClientPosition(&x,&y); y = gEnv->pRenderer->GetHeight() - y; gEnv->pRenderer->UnProjectFromScreen(x, y, 0.0f,&xMouse,&yMouse,&zMouse); static const unsigned int flags = rwi_stop_at_pierceable|rwi_colltype_any; float fRange = gEnv->p3DEngine->GetMaxViewDistance(); Vec3 vCamPos = gEnv->pSystem->GetViewCamera().GetPosition(); Vec3 vDir = (Vec3(xMouse,yMouse,zMouse) - vCamPos).GetNormalizedSafe(); IPhysicalEntity *pPhysicalEnt = pClientActor->GetEntity() ? pClientActor->GetEntity()->GetPhysics() : NULL; if(!pPhysicalEnt) return 0; if (gEnv->pPhysicalWorld && gEnv->pPhysicalWorld->RayWorldIntersection(vCamPos, vDir * fRange, ent_all, flags, &hit, 1, pPhysicalEnt)) { if (gEnv->p3DEngine->RefineRayHit(&hit, vDir * fRange)) { if (IEntity *pEntity = gEnv->pEntitySystem->GetEntityFromPhysics(hit.pCollider)) { return pEntity->GetId(); } } } return 0; }
Об этом примере
Название
- Выбор сущности мышкой
Создатель
- Alex626\James-Ryan
Описание
- Данный код позволяет получать сущности, находящиеся под курсором мыши. Полезно для разработки системы выбора юнитов в стратегии реального времени.