BVB Source Codes

CRYENGINE Show EntitiesInRangeNode.cpp Source code

Return Download CRYENGINE: download EntitiesInRangeNode.cpp Source code - Download CRYENGINE Source code - Type:.cpp
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. ////////////////////////////////////////////////////////////////////////////
  4. //
  5. // -------------------------------------------------------------------------
  6. //  File name:   EntitiesInRange.cpp
  7. //  Version:     v1.00
  8. //  Created:     Oct 24th 2005 by AlexL
  9. //  Compilers:   Visual Studio.NET 2003
  10. //  Description:
  11. // -------------------------------------------------------------------------
  12. //  History:
  13. //    - Sept. 2010      Jens Sch枚bel added Output for square dist and vector
  14. //
  15. ////////////////////////////////////////////////////////////////////////////
  16.  
  17. #include "StdAfx.h"
  18.  
  19. #include <CryFlowGraph/IFlowBaseNode.h>
  20.  
  21. class CFlowNode_EntitiesInRange : public CFlowBaseNode<eNCT_Instanced>
  22. {
  23. public:
  24.         CFlowNode_EntitiesInRange(SActivationInfo* pActInfo)
  25.                 : m_errorLogSent(false)
  26.         {
  27.         }
  28.  
  29.         virtual void GetMemoryUsage(ICrySizer* s) const
  30.         {
  31.                 s->Add(*this);
  32.         }
  33.  
  34.         IFlowNodePtr Clone(SActivationInfo* pActInfo)
  35.         {
  36.                 return new CFlowNode_EntitiesInRange(pActInfo);
  37.         }
  38.  
  39.         virtual void GetConfiguration(SFlowNodeConfig& config)
  40.         {
  41.                 static const SInputPortConfig inputs[] = {
  42.                         InputPortConfig_Void("Trigger",      _HELP("Trigger this port to check if entities are in range")),
  43.                         InputPortConfig<EntityId>("Entity1", _HELP("Entity 1")),
  44.                         InputPortConfig<EntityId>("Entity2", _HELP("Entity 2")),
  45.                         InputPortConfig<float>("Range",      1.0f,                                                         _HELP("Range to check")),
  46.                         { 0 }
  47.                 };
  48.                 static const SOutputPortConfig outputs[] = {
  49.                         OutputPortConfig<bool>("InRange",   _HELP("True if Entities are in Range")),
  50.                         OutputPortConfig_Void("False",      _HELP("Triggered if Entities are not in Range")),
  51.                         OutputPortConfig_Void("True",       _HELP("Triggered if Entities are in Range")),
  52.                         OutputPortConfig<float>("Distance", _HELP("Distance between the two entities.")),
  53.                         OutputPortConfig<Vec3>("DistVec",   _HELP("Vector from the first to the second entity")),
  54.                         { 0 }
  55.                 };
  56.                 config.pInputPorts = inputs;
  57.                 config.pOutputPorts = outputs;
  58.                 config.nFlags |= EFLN_AISEQUENCE_SUPPORTED;
  59.                 config.sDescription = _HELP("Check if two entities are in range, activated by Trigger");
  60.                 config.SetCategory(EFLN_APPROVED);
  61.         }
  62.  
  63.         virtual void ProcessEvent(EFlowEvent event, SActivationInfo* pActInfo)
  64.         {
  65.                 switch (event)
  66.                 {
  67.                 case eFE_Initialize:
  68.                         m_errorLogSent = false;
  69.                         break;
  70.  
  71.                 case eFE_Activate:
  72.                         if (IsPortActive(pActInfo, 0))
  73.                         {
  74.                                 IEntitySystem* pESys = gEnv->pEntitySystem;
  75.                                 EntityId id1 = GetPortEntityId(pActInfo, 1);
  76.                                 EntityId id2 = GetPortEntityId(pActInfo, 2);
  77.                                 IEntity* pEnt1 = pESys->GetEntity(id1);
  78.                                 IEntity* pEnt2 = pESys->GetEntity(id2);
  79.                                 IEntity* pGraphEntity = pESys->GetEntity(pActInfo->pGraph->GetGraphEntity(0));
  80.                                 if (pEnt1 == NULL || pEnt2 == NULL)
  81.                                 {
  82.                                         if (!m_errorLogSent)
  83.                                         {
  84.                                                 GameWarning("[flow] Entity::EntitiesInRange - flowgraph entity: %d:'%s' - at least one of the input entities is invalid!. Entity1: %d:'%s'    Entity2:  %d:'%s'",
  85.                                                             pActInfo->pGraph->GetGraphEntity(0), pGraphEntity ? pGraphEntity->GetName() : "<NULL>",
  86.                                                             id1, pEnt1 ? pEnt1->GetName() : "<NULL>", id2, pEnt2 ? pEnt2->GetName() : "<NULL>");
  87.                                                 m_errorLogSent = true;
  88.                                         }
  89.                                 }
  90.                                 else
  91.                                 {
  92.                                         const float range = GetPortFloat(pActInfo, 3);
  93.                                         const float distance = pEnt1->GetWorldPos().GetDistance(pEnt2->GetWorldPos());
  94.                                         const bool inRange = (distance <= range);
  95.                                         ActivateOutput(pActInfo, 0, inRange);
  96.                                         ActivateOutput(pActInfo, 1 + (inRange ? 1 : 0), true);
  97.                                         ActivateOutput(pActInfo, 3, distance);
  98.  
  99.                                         const Vec3 distVector = pEnt2->GetPos() - pEnt1->GetPos();
  100.                                         ActivateOutput(pActInfo, 4, distVector);
  101.                                         m_errorLogSent = false;
  102.                                 }
  103.                         }
  104.                         break;
  105.                 }
  106.         }
  107.  
  108. private:
  109.         bool m_errorLogSent;
  110. };
  111.  
  112. REGISTER_FLOW_NODE("Entity:EntitiesInRange", CFlowNode_EntitiesInRange);
  113.  
downloadEntitiesInRangeNode.cpp 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