Среда, 11 Декабря 2024, 02:26

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Выбор сущности мышкой
pro100denverДата: Суббота, 08 Октября 2011, 23:35 | Сообщение # 1
участник
Сейчас нет на сайте
Данный код позволяет получать сущности, находящиеся под курсором мыши. Полезно для разработки системы выбора юнитов в стратегии реального времени.

Code
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;
}




Мой блог.DENVER


Сообщение отредактировал pro100denver - Суббота, 08 Октября 2011, 23:35
TimKruzДата: Суббота, 08 Октября 2011, 23:53 | Сообщение # 2
старожил
Сейчас нет на сайте
Эээ... Сущности?.. blink Может, ты имеешь в виду "объект"?.. (3D или отдельный полигон)

pro100denverДата: Воскресенье, 09 Октября 2011, 00:15 | Сообщение # 3
участник
Сейчас нет на сайте
Сущъность = Enity = Нпс , партиклы, физ объекты и т.д.



Мой блог.DENVER
TimKruzДата: Воскресенье, 09 Октября 2011, 00:22 | Сообщение # 4
старожил
Сейчас нет на сайте
А, понятно. Только "entity", а не enity. biggrin

pro100denverДата: Воскресенье, 09 Октября 2011, 00:38 | Сообщение # 5
участник
Сейчас нет на сайте
Ошибся =(



Мой блог.DENVER
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг