BVB Source Codes

CRYENGINE Show SelectionSignalVariables.cpp Source code

Return Download CRYENGINE: download SelectionSignalVariables.cpp Source code - Download CRYENGINE Source code - Type:.cpp
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. #include "StdAfx.h"
  4. #include "SelectionSignalVariables.h"
  5.  
  6. #include <CryCore/CryCrc32.h>
  7.  
  8. bool SelectionSignalVariables::LoadFromXML(const BlockyXmlBlocks::Ptr& blocks,
  9.                                            const SelectionVariableDeclarations& variableDecls, const XmlNodeRef& rootNode,
  10.                                            const char* scopeName, const char* fileName)
  11. {
  12.         BlockyXmlNodeRef blockyNode(blocks, scopeName, rootNode, fileName);
  13.         while (XmlNodeRef childNode = blockyNode.next())
  14.         {
  15.                 if (!stricmp(childNode->getTag(), "Signal"))
  16.                 {
  17.                         const char* signalName = 0;
  18.                         if (childNode->haveAttr("name"))
  19.                                 childNode->getAttr("name", &signalName);
  20.                         else
  21.                         {
  22.                                 AIWarning("Missing 'name' attribute for tag '%s' in file '%s' at line %d.",
  23.                                           childNode->getTag(), fileName, childNode->getLine());
  24.  
  25.                                 return false;
  26.                         }
  27.  
  28.                         const char* variableName = 0;
  29.                         if (childNode->haveAttr("variable"))
  30.                                 childNode->getAttr("variable", &variableName);
  31.                         else
  32.                         {
  33.                                 AIWarning("Missing 'variable' attribute for tag '%s' in file '%s' at line %d.",
  34.                                           childNode->getTag(), fileName, childNode->getLine());
  35.  
  36.                                 return false;
  37.                         }
  38.  
  39.                         const char* value = 0;
  40.                         if (childNode->haveAttr("value"))
  41.                                 childNode->getAttr("value", &value);
  42.                         else
  43.                         {
  44.                                 AIWarning("Missing 'value' attribute for tag '%s' in file '%s' at line %d.",
  45.                                           childNode->getTag(), fileName, childNode->getLine());
  46.  
  47.                                 return false;
  48.                         }
  49.  
  50.                         SelectionVariableID variableID = variableDecls.GetVariableID(variableName);
  51.                         if (variableDecls.IsDeclared(variableID))
  52.                         {
  53.                                 SignalVariables::iterator it = m_signalVariables.insert(
  54.                                   SignalVariables::value_type(CCrc32::Compute(signalName), SignalVariable()));
  55.  
  56.                                 SignalVariable& signalVariable = it->second;
  57.  
  58.                                 signalVariable.valueExpr = SelectionCondition(value, variableDecls);
  59.                                 signalVariable.variableID = variableID;
  60.  
  61.                                 if (!signalVariable.valueExpr.Valid())
  62.                                 {
  63.                                         AIWarning("Failed to compile expression '%s' in file '%s' at line %d.",
  64.                                                   value, fileName, childNode->getLine());
  65.  
  66.                                         return false;
  67.                                 }
  68.                         }
  69.                         else
  70.                         {
  71.                                 AIWarning("Unknown variable '%s' used for signal variable in file '%s' at line '%d'.",
  72.                                           variableName, fileName, childNode->getLine());
  73.  
  74.                                 return false;
  75.                         }
  76.                 }
  77.                 else
  78.                 {
  79.                         AIWarning("Unexpected tag '%s' in file '%s' at line %d. 'Signal' expected.",
  80.                                   childNode->getTag(), fileName, childNode->getLine());
  81.  
  82.                         return false;
  83.                 }
  84.         }
  85.  
  86.         return true;
  87. }
  88.  
  89. bool SelectionSignalVariables::ProcessSignal(const char* signalName, uint32 signalCRC, SelectionVariables& variables) const
  90. {
  91.         SignalVariables::const_iterator it = m_signalVariables.find(signalCRC);
  92.         if (it == m_signalVariables.end())
  93.                 return false;
  94.  
  95.         while ((it != m_signalVariables.end()) && (it->first == signalCRC))
  96.         {
  97.                 const SignalVariable& signalVariable = it->second;
  98.                 variables.SetVariable(signalVariable.variableID, signalVariable.valueExpr.Evaluate(variables));
  99.  
  100.                 ++it;
  101.         }
  102.  
  103.         return true;
  104. }
  105.  
downloadSelectionSignalVariables.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