My Project
ParameterBlock.h
1 #pragma once
2 
3 #include <string>
4 #include <vector>
5 #include <list>
6 
7 namespace ParaEngine
8 {
9  using namespace std;
10  struct TextureEntity;
11  class CEffectFile;
12 
17  class CParameter
18  {
19  public:
21 
24  PARAM_UNKNOWN,
25  PARAM_INT,
26  PARAM_FLOAT,
27  PARAM_BOOLEAN,
28  PARAM_VECTOR2,
29  PARAM_VECTOR3,
30  PARAM_VECTOR4,
31  PARAM_MATRIX,
32  PARAM_RAWBYTES,
33  PARAM_TEXTURE_ENTITY,
34  PARAM_LAST,
35  };
36 
37  CParameter() : m_type(PARAM_UNKNOWN){};
38  CParameter(const string& sName):m_sName(sName), m_type(PARAM_UNKNOWN){};
39  ~CParameter(){};
40 
42  string m_sName;
43  vector<char> m_data;
44  PARAMETER_TYPE m_type;
45 
47  const string& GetTypeAsString();
52  PARAMETER_TYPE SetTypeByString(const char* sType);
58  bool SetValueByString(const char* value, int nType = -1);
59 
61  string GetValueByString();
62 
64  const string& GetName() const {return m_sName;};
66  void SetName(const string& sName) {m_sName = sName;};
67 
69  char* GetRawData() { return &(m_data[0]); };
70 
72  int GetRawDataLength() { return (int)(m_data.size());};
73 
75  void SetRawData(const char* data, int nSize){m_data.resize(nSize); memcpy(&(m_data[0]), data, nSize);};
76 
77  operator int() {return *((int*)GetRawData());};
78  operator bool();
79  operator DWORD() {return *((DWORD*)GetRawData());};
80  operator float() {return *((float*)GetRawData());};
81  operator Vector2() {return *((Vector2*)GetRawData());};
82  operator Vector3() {return *((Vector3*)GetRawData());};
83  operator Vector4() {return *((Vector4*)GetRawData());};
84  operator Matrix4() {return *((Matrix4*)GetRawData());};
85  operator LPTextureEntity() {return *((LPTextureEntity*)GetRawData());};
86 
87  //CParameter& operator =(const CParameter& r){m_data = r.m_data;};
88  CParameter& operator =(const int& r) { m_type=PARAM_INT; m_data.resize(sizeof(int)); memcpy(GetRawData(), &r, (int)m_data.size()); return *this;};
89  CParameter& operator =(const bool& r) { m_type=PARAM_BOOLEAN;m_data.resize(sizeof(BOOL)); BOOL p = r; memcpy(GetRawData(), &p, (int)m_data.size()); return *this;};
90  CParameter& operator =(const float& r) { m_type=PARAM_FLOAT;m_data.resize(sizeof(float)); memcpy(GetRawData(), &r, (int)m_data.size()); return *this;};
91 
92  CParameter& operator =(const Vector2& r) { m_type=PARAM_VECTOR2;m_data.resize(sizeof(Vector2)); memcpy(GetRawData(), &r, (int)m_data.size()); return *this;};
93  CParameter& operator =(const Vector3& r) { m_type=PARAM_VECTOR3;m_data.resize(sizeof(Vector3)); memcpy(GetRawData(), &r, (int)m_data.size()); return *this;};
94  CParameter& operator =(const Vector4& r) { m_type=PARAM_VECTOR4;m_data.resize(sizeof(Vector4)); memcpy(GetRawData(), &r, (int)m_data.size()); return *this;};
95  CParameter& operator =(const Matrix4& r) { m_type=PARAM_MATRIX;m_data.resize(sizeof(Matrix4)); memcpy(GetRawData(), &r, (int)m_data.size()); return *this;};
96  CParameter& operator =(const LPTextureEntity& r) { m_type=PARAM_TEXTURE_ENTITY;m_data.resize(sizeof(LPTextureEntity)); memcpy(GetRawData(), &r, (int)m_data.size()); return *this;};
97 
98  };
99 
109  {
110  public:
111  typedef map <string, CParameter>::iterator ParamIterator;
112  map <string, CParameter> m_params;
113 
114  ParamIterator BeginIter() { return m_params.begin();};
115  ParamIterator EndIter() { return m_params.end();};
116  bool IsEmpty() { return m_params.empty();};
117 
119  template <class t>
120  void SetParameter(const string& sName, const t& value)
121  {
122  map <string, CParameter>::iterator it = m_params.find(sName);
123  if(it!=m_params.end())
124  {
125  it->second = value;
126  }
127  else
128  {
129  CParameter p(sName);
130  p = value;
131  m_params[sName] = p;
132  }
133  }
134 
136  bool AddParameter(const CParameter& p);
137 
139  CParameter* GetParameter(const string& sName)
140  {
141  map <string, CParameter>::iterator it = m_params.find(sName);
142  if(it!=m_params.end())
143  {
144  return &(it->second);
145  }
146  else
147  {
148  return NULL;
149  }
150  }
151 
156  void SetParamByStringValue(const char* sParamName, const char* sValue_);
157 
158  // clear all parameters
159  void Clear()
160  {
161  m_params.clear();
162  }
163 
165  bool ApplyToEffect( CEffectFile* pEffectFile );
166  };
167 
170  {
171  private:
173  public:
176 
177  CParameterBlock* GetParamsBlock();
178  private:
179  CParameterBlock* m_pBlock;
180  bool m_bLastZEnabled;
181  };
182 }
Which DXT Compression to Use? Obviously, there are some trade-offs between the different formats whic...
Definition: TextureEntity.h:29
void SetRawData(const char *data, int nSize)
set raw data bytes
Definition: ParameterBlock.h:75
4-dimensional homogeneous vector.
Definition: ParaVector4.h:10
apply object-level params and restore to default value.
Definition: ParameterBlock.h:169
different physics engine has different winding order.
Definition: EventBinding.h:32
Standard 3-dimensional vector.
Definition: ParaVector3.h:16
char * GetRawData()
raw data bytes
Definition: ParameterBlock.h:69
Standard 2-dimensional vector.
Definition: ParaVector2.h:16
const string & GetName() const
get parameter name.
Definition: ParameterBlock.h:64
void SetParameter(const string &sName, const t &value)
if there is already a parameter with the same name, it will be overridden.
Definition: ParameterBlock.h:120
Class encapsulating a standard 4x4 homogeneous matrix.
Definition: ParaMatrix4.h:23
PARAMETER_TYPE
current type of the parameter
Definition: ParameterBlock.h:23
Definition: enum_maker.hpp:46
Definition: effect_file.h:323
a name, value pair.
Definition: ParameterBlock.h:17
int GetRawDataLength()
raw data bytes
Definition: ParameterBlock.h:72
void SetName(const string &sName)
set parameter name.
Definition: ParameterBlock.h:66
string m_sName
string name of the parameter
Definition: ParameterBlock.h:39
CParameter * GetParameter(const string &sName)
get parameter by its name, NULL will be returned if parameter is not found.
Definition: ParameterBlock.h:139
a list of CParameter{name, value} pairs of anything.
Definition: ParameterBlock.h:108