BVB Source Codes

CRYENGINE Show ObjectSelector.h Source code

Return Download CRYENGINE: download ObjectSelector.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. /*************************************************************************
  4.    -------------------------------------------------------------------------
  5.    $Id$
  6.    $DateTime$
  7.    Description:  helper for refering to either entities or statobj physical entities
  8.    -------------------------------------------------------------------------
  9.    History:
  10.    - 22/01/2007   10:34 : Created by Craig Tiller
  11. *************************************************************************/
  12. #ifndef __OBJECTSELECTOR_H__
  13. #define __OBJECTSELECTOR_H__
  14.  
  15. #pragma once
  16.  
  17. #include "DebugBreakage.h"
  18.  
  19. static const float CObjectSelector_Eps = 1.0f;
  20.  
  21. class CObjectSelector
  22. {
  23. public:
  24.         CObjectSelector();
  25.         CObjectSelector(const Vec3& eventpos, uint32 hash = 0)
  26.         {
  27.                 m_selType = eST_StatObj;
  28.                 m_eventPos = eventpos;
  29.                 m_drawDistance = 0;
  30.                 m_hash = hash;
  31.         }
  32.         CObjectSelector(EntityId ent)
  33.         {
  34.                 if (ent)
  35.                 {
  36.                         m_selType = eST_Entity;
  37.                         m_entity = ent;
  38.                         m_drawDistance = 0;
  39.                 }
  40.                 else
  41.                 {
  42.                         m_selType = eST_Null;
  43.                         m_eventPos = ZERO;
  44.                 }
  45.                 m_hash = 0;
  46.         }
  47.         CObjectSelector(IEntity* pEnt)
  48.         {
  49.                 m_drawDistance = 0;
  50.                 if (!pEnt)
  51.                 {
  52.                         m_selType = eST_Null;
  53.                         m_eventPos = ZERO;
  54.                 }
  55.                 else
  56.                 {
  57.                         m_selType = eST_Entity;
  58.                         m_entity = pEnt->GetId();
  59.                         FillDrawDistance(pEnt);
  60.                 }
  61.         }
  62.         void             GetPositionInfo(SMessagePositionInfo& pos);
  63.         IPhysicalEntity* Find() const;
  64.  
  65.         static string    GetDescription(IPhysicalEntity* pent);
  66.         static string    GetDescription(EntityId entId);
  67.  
  68.         bool             operator==(const CObjectSelector& sel) const
  69.         {
  70.                 if (m_selType == eST_Entity)
  71.                 {
  72.                         return m_entity == sel.m_entity;
  73.                 }
  74.                 else if (m_selType == eST_StatObj)
  75.                 {
  76.                         return m_hash == sel.m_hash;
  77.                 }
  78.                 else
  79.                 {
  80.                         return false;
  81.                 }
  82.         }
  83.  
  84.         static uint32 CalculateHash(const char* str, uint32 hashIn /*=0*/)
  85.         {
  86.                 uint32 hash = hashIn;
  87.                 const uint8* b = (const uint8*)str;
  88.                 for (; *b; b++)
  89.                 {
  90.                         hash = hash ^ ((hash << 5) + (hash >> 2) + (*b));
  91.                 }
  92.                 return hash;
  93.         }
  94.         static uint32 CalculateHash(const int* buf, int len, uint32 hashIn /*=0*/)
  95.         {
  96.                 uint32 hash = hashIn;
  97.                 for (int i = 0; i < len; i++, buf++)
  98.                 {
  99.                         hash = hash ^ ((hash << 5) + (hash >> 2) + (*buf));
  100.                 }
  101.                 return hash;
  102.         }
  103.         static uint32 CalculateHash(IRenderNode* pNode, bool debug = false)
  104.         {
  105.                 (void)debug;
  106.                 if (pNode)
  107.                 {
  108.                         uint32 hash;
  109.                         const char* name = pNode->GetName();
  110.                         const char* ename = pNode->GetEntityClassName();
  111.                         Matrix34A matrix;
  112.                         pNode->GetEntityStatObj(0, 0, &matrix);
  113.                         hash = CalculateHash(name, 0);
  114.                         hash = CalculateHash(ename, hash);
  115.                         hash = CalculateHash(alias_cast<int*>(&matrix), sizeof(Matrix34A) / sizeof(int), hash);
  116. #if DEBUG_NET_BREAKAGE
  117.                         if (debug)
  118.                         {
  119.                                 Vec3 p = matrix.GetColumn3();
  120.                                 LOGBREAK("name=%s, ename=%s, pos=%f, %f, %f, hash=0x%x", name, ename, p.x, p.y, p.z, hash);
  121.                         }
  122. #endif
  123.                         return hash;
  124.                 }
  125.                 return 0;
  126.         }
  127.  
  128.         static IPhysicalEntity* FindPhysicalEntity(const Vec3& centre, uint32 objHash, float eps)
  129.         {
  130.                 IPhysicalEntity** pents;
  131.                 IRenderNode* pRenderNode;
  132.                 const Vec3 epsV = Vec3(eps);
  133.                 int j = gEnv->pPhysicalWorld->GetEntitiesInBox(centre - epsV, centre + epsV, pents, ent_static);
  134.                 for (--j; j >= 0; j--)
  135.                 {
  136.                         if (pRenderNode = (IRenderNode*)pents[j]->GetForeignData(PHYS_FOREIGN_ID_STATIC))
  137.                         {
  138.                                 if (objHash == CObjectSelector::CalculateHash(pRenderNode, DEBUG_NET_BREAKAGE))
  139.                                 {
  140.                                         IPhysicalEntity* pent = pRenderNode->GetPhysics();
  141.                                         return pent;
  142.                                 }
  143.                         }
  144.                 }
  145.                 return NULL;
  146.         }
  147.  
  148. private:
  149.         enum ESelType
  150.         {
  151.                 eST_Null, // must be first
  152.                 eST_Entity,
  153.                 eST_StatObj,
  154.                 eST_NUM_TYPES // must be last
  155.         };
  156.         ESelType m_selType;
  157.  
  158.         EntityId m_entity;
  159.         float    m_drawDistance;
  160.  
  161.         // Static Objects
  162.         Vec3   m_eventPos;
  163.         uint32 m_hash;
  164.  
  165.         void FillDrawDistance(IEntity* pEnt)
  166.         {
  167.                 if (IEntityRender* pRP = pEnt->GetRenderInterface())
  168.                         if (IRenderNode* pRN = pRP->GetRenderNode())
  169.                                 m_drawDistance = pRN->GetMaxViewDist();
  170.         }
  171. };
  172.  
  173. #endif
  174.  
downloadObjectSelector.h Source code - Download CRYENGINE Source code
Related Source Codes/Software:
postal - 2017-06-11
reactide - Reactide is the first dedicated IDE for React web ... 2017-06-11
rkt - rkt is a pod-native container engine for Linux. It... 2017-06-11
uWebSockets - Tiny WebSockets https://for... 2017-06-11
realworld - TodoMVC for the RealWorld - Exemplary fullstack Me... 2017-06-11
CRYENGINE - CRYENGINE is a powerful real-time game development... 2017-06-11
goreplay - GoReplay is an open-source tool for capturing and ... 2017-06-10
pyenv - Simple Python version management 2017-06-10
redux-saga - An alternative side effect model for Redux apps ... 2017-06-10
angular-starter - 2017-06-10

 Back to top