BVB Source Codes

CRYENGINE Show ItemParams.h Source code

Return Download CRYENGINE: download ItemParams.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: Item parameters structure.
  8.  
  9.    -------------------------------------------------------------------------
  10.    History:
  11.    - 7:10:2005   14:20 : Created by M谩rcio Martins
  12.  
  13. *************************************************************************/
  14. #ifndef __ITEMPARAMS_H__
  15. #define __ITEMPARAMS_H__
  16.  
  17. #if _MSC_VER > 1000
  18.         #pragma once
  19. #endif
  20.  
  21. #include "IItemSystem.h"
  22. #include <CryCore/StlUtils.h>
  23.  
  24. template<class F, class T>
  25. struct SItemParamConversion
  26. {
  27.         static ILINE bool ConvertValue(const F& from, T& to)
  28.         {
  29.                 to = (T)from;
  30.                 return true;
  31.         };
  32. };
  33.  
  34. // taken from IFlowSystem.h and adapted...
  35. #define ITEMSYSTEM_STRING_CONVERSION(type, fmt)                   \
  36.   template<>                                                      \
  37.   struct SItemParamConversion<type, string>                       \
  38.   {                                                               \
  39.     static ILINE bool ConvertValue(const type &from, string & to) \
  40.     {                                                             \
  41.       to.Format(fmt, from);                                       \
  42.       return true;                                                \
  43.     }                                                             \
  44.   };                                                              \
  45.   template<>                                                      \
  46.   struct SItemParamConversion<string, type>                       \
  47.   {                                                               \
  48.     static ILINE bool ConvertValue(const string &from, type & to) \
  49.     {                                                             \
  50.       return 1 == sscanf(from.c_str(), fmt, &to);                 \
  51.     }                                                             \
  52.   };
  53.  
  54. ITEMSYSTEM_STRING_CONVERSION(int, "%d");
  55. ITEMSYSTEM_STRING_CONVERSION(float, "%f");
  56.  
  57. #undef ITEMSYSTEM_STRING_CONVERSION
  58.  
  59. template<>
  60. struct SItemParamConversion<Vec3, bool>
  61. {
  62.         static ILINE bool ConvertValue(const Vec3& from, float& to)
  63.         {
  64.                 to = from.GetLengthSquared() > 0;
  65.                 return true;
  66.         }
  67. };
  68.  
  69. template<>
  70. struct SItemParamConversion<bool, Vec3>
  71. {
  72.         static ILINE bool ConvertValue(const float& from, Vec3& to)
  73.         {
  74.                 to = Vec3(from ? 1.f : 0.f, from ? 1.f : 0.f, from ? 1.f : 0.f);
  75.                 return true;
  76.         }
  77. };
  78.  
  79. template<>
  80. struct SItemParamConversion<Vec3, float>
  81. {
  82.         static ILINE bool ConvertValue(const Vec3& from, float& to)
  83.         {
  84.                 to = from.x;
  85.                 return true;
  86.         }
  87. };
  88.  
  89. template<>
  90. struct SItemParamConversion<float, Vec3>
  91. {
  92.         static ILINE bool ConvertValue(const float& from, Vec3& to)
  93.         {
  94.                 to = Vec3(from, from, from);
  95.                 return true;
  96.         }
  97. };
  98.  
  99. template<>
  100. struct SItemParamConversion<Vec3, int>
  101. {
  102.         static ILINE bool ConvertValue(const Vec3& from, int& to)
  103.         {
  104.                 to = (int)from.x;
  105.                 return true;
  106.         }
  107. };
  108.  
  109. template<>
  110. struct SItemParamConversion<int, Vec3>
  111. {
  112.         static ILINE bool ConvertValue(const int& from, Vec3& to)
  113.         {
  114.                 to = Vec3((float)from, (float)from, (float)from);
  115.                 return true;
  116.         }
  117. };
  118.  
  119. template<>
  120. struct SItemParamConversion<Vec3, string>
  121. {
  122.         static ILINE bool ConvertValue(const Vec3& from, string& to)
  123.         {
  124.                 to.Format("%s,%s,%s", from.x, from.y, from.z);
  125.                 return true;
  126.         }
  127. };
  128.  
  129. template<>
  130. struct SItemParamConversion<string, Vec3>
  131. {
  132.         static ILINE bool ConvertValue(const string& from, Vec3& to)
  133.         {
  134.                 return sscanf(from.c_str(), "%f,%f,%f", &to.x, &to.y, &to.z) == 3;
  135.         }
  136. };
  137.  
  138. typedef TFlowInputData TItemParamValue;
  139.  
  140. class CItemParamsNode : public IItemParamsNode
  141. {
  142. public:
  143.  
  144.         enum EXMLFilterType
  145.         {
  146.                 eXMLFT_none   = 0,
  147.                 eXMLFT_add    = 1,
  148.                 eXMLFT_remove = 2
  149.         };
  150.  
  151.         CItemParamsNode();
  152.         virtual ~CItemParamsNode();
  153.  
  154.         virtual void                   AddRef() const      { ++m_refs; };
  155.         virtual uint32                 GetRefCount() const { return m_refs; };
  156.         virtual void                   Release() const     { if (!--m_refs) delete this; };
  157.  
  158.         virtual void                   GetMemoryUsage(ICrySizer* pSizer) const;
  159.  
  160.         virtual int                    GetAttributeCount() const;
  161.         virtual const char*            GetAttributeName(int i) const;
  162.         virtual const char*            GetAttribute(int i) const;
  163.         virtual bool                   GetAttribute(int i, Vec3& attr) const;
  164.         virtual bool                   GetAttribute(int i, Ang3& attr) const;
  165.         virtual bool                   GetAttribute(int i, float& attr) const;
  166.         virtual bool                   GetAttribute(int i, int& attr) const;
  167.         virtual int                    GetAttributeType(int i) const;
  168.  
  169.         virtual const char*            GetAttribute(const char* name) const;
  170.         virtual bool                   GetAttribute(const char* name, Vec3& attr) const;
  171.         virtual bool                   GetAttribute(const char* name, Ang3& attr) const;
  172.         virtual bool                   GetAttribute(const char* name, float& attr) const;
  173.         virtual bool                   GetAttribute(const char* name, int& attr) const;
  174.         virtual int                    GetAttributeType(const char* name) const;
  175.  
  176.         virtual const char*            GetAttributeSafe(const char* name) const;
  177.  
  178.         virtual const char*            GetNameAttribute() const;
  179.  
  180.         virtual int                    GetChildCount() const;
  181.         virtual const char*            GetChildName(int i) const;
  182.         virtual const IItemParamsNode* GetChild(int i) const;
  183.         virtual const IItemParamsNode* GetChild(const char* name) const;
  184.  
  185.         EXMLFilterType                 ShouldConvertNodeFromXML(const XmlNodeRef& xmlNode, const char* keepWithThisAttrValue) const;
  186.  
  187.         virtual void                   SetAttribute(const char* name, const char* attr);
  188.         virtual void                   SetAttribute(const char* name, const Vec3& attr);
  189.         virtual void                   SetAttribute(const char* name, float attr);
  190.         virtual void                   SetAttribute(const char* name, int attr);
  191.  
  192.         virtual void                   SetName(const char* name) { m_name = name; };
  193.         virtual const char*            GetName() const           { return m_name.c_str(); };
  194.  
  195.         virtual IItemParamsNode*       InsertChild(const char* name);
  196.         virtual void                   ConvertFromXML(const XmlNodeRef& root);
  197.         virtual bool                   ConvertFromXMLWithFiltering(const XmlNodeRef& root, const char* keepWithThisAttrValue);
  198.  
  199. private:
  200.         struct SAttribute
  201.         {
  202.                 CCryName        first; // Using CryName to save memory on duplicate strings
  203.                 TItemParamValue second;
  204.  
  205.                 SAttribute() {}
  206.                 SAttribute(const char* key, const TItemParamValue& val)
  207.                         : first(key)
  208.                         , second(val)
  209.                 {
  210.                 }
  211.  
  212.                 void GetMemoryUsage(ICrySizer* pSizer) const
  213.                 {
  214.                         pSizer->AddObject(second);
  215.                 }
  216.         };
  217.  
  218.         typedef DynArray<SAttribute>       TAttributeMap;
  219.         typedef DynArray<CItemParamsNode*> TChildVector;
  220.  
  221.         template<typename MT>
  222.         typename MT::const_iterator GetConstIterator(const MT& m, int i) const
  223.         {
  224.                 typename MT::const_iterator it = m.begin();
  225.                 //std::advance(it, i);
  226.                 it += i;
  227.                 return it;
  228.         };
  229.         TAttributeMap::const_iterator FindAttrIterator(const TAttributeMap& m, const char* name) const
  230.         {
  231.                 TAttributeMap::const_iterator it;
  232.                 for (it = m.begin(); it != m.end(); ++it)
  233.                 {
  234.                         if (stricmp(it->first.c_str(), name) == 0)
  235.                                 return it;
  236.                 }
  237.                 return m.end();
  238.         };
  239.         TAttributeMap::iterator FindAttrIterator(TAttributeMap& m, const char* name) const
  240.         {
  241.                 TAttributeMap::iterator it;
  242.                 for (it = m.begin(); it != m.end(); ++it)
  243.                 {
  244.                         if (stricmp(it->first.c_str(), name) == 0)
  245.                                 return it;
  246.                 }
  247.                 return m.end();
  248.         };
  249.         void AddAttribute(const char* name, const TItemParamValue& val)
  250.         {
  251.                 TAttributeMap::iterator it = FindAttrIterator(m_attributes, name);
  252.                 if (it == m_attributes.end())
  253.                 {
  254.                         m_attributes.push_back(SAttribute(name, val));
  255.                 }
  256.                 else
  257.                         it->second = val;
  258.         }
  259.  
  260.         CCryName       m_name;
  261.         string         m_nameAttribute;
  262.         TAttributeMap  m_attributes;
  263.         TChildVector   m_children;
  264.  
  265.         mutable uint32 m_refs;
  266. };
  267.  
  268. #endif
  269.  
downloadItemParams.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