ezEngine  Milestone 7
CVar.h
1 #pragma once
2 
4 #include <Foundation/Strings/String.h>
6 #include <Foundation/Communication/Event.h>
8 
10 struct ezCVarType
11 {
12  enum Enum
13  {
14  Int,
16  Bool,
18  ENUM_COUNT
19  };
20 };
21 
24 {
25  typedef ezUInt8 StorageType;
26 
27  enum Enum
28  {
29  None = 0,
30 
33  Save = EZ_BIT(0),
34 
39 
41  Default = None
42  };
43 
44  struct Bits
45  {
46  StorageType Save : 1;
47  StorageType RequiresRestart : 1;
48  };
49 };
50 
52 
76 class EZ_FOUNDATION_DLL ezCVar : public ezEnumerable<ezCVar>
77 {
79 
80 public:
81 
88  static void SetStorageFolder(const char* szFolder); // [tested]
89 
91  static ezCVar* FindCVarByName(const char* szName); // [tested]
92 
98  static void SaveCVars(); // [tested]
99 
111  static void LoadCVars(bool bOnlyNewOnes = true, bool bSetAsCurrentValue = true); // [tested]
112 
113 
114 
120  virtual void SetToRestartValue() = 0; // [tested]
121 
123  const char* GetName() const { return m_szName; } // [tested]
124 
126  virtual ezCVarType::Enum GetType() const = 0; // [tested]
127 
129  const char* GetDescription() const { return m_szDescription; } // [tested]
130 
132  ezBitflags<ezCVarFlags> GetFlags() const { return m_Flags; } // [tested]
133 
135  struct CVarEvent
136  {
137  CVarEvent(ezCVar* pCVar) : m_EventType(ValueChanged), m_pCVar(pCVar) { }
138 
139  enum Type
140  {
143  };
144 
147 
150  };
151 
154 
157 
159  const char* GetPluginName() const { return m_szPluginName; }
160 
161 protected:
162  ezCVar(const char* szName, ezBitflags<ezCVarFlags> Flags, const char* szDescription);
163 
164  void RegisterCVarTelemetryChangeCB();
165 
166  static void TelemetryMessage(void* pPassThrough);
167 
168 private:
169  EZ_MAKE_SUBSYSTEM_STARTUP_FRIEND(Foundation, CVars);
170 
171  static void AssignSubSystemPlugin(const char* szPluginName);
172  static void PluginEventHandler(const ezPlugin::PluginEvent& EventData);
173 
174 
175  bool m_bHasNeverBeenLoaded;
176  const char* m_szName;
177  const char* m_szDescription;
178  const char* m_szPluginName;
179  ezBitflags<ezCVarFlags> m_Flags;
180 
181  static ezString s_StorageFolder;
182 };
183 
186 {
187  enum Enum
188  {
193  ENUM_COUNT
194  };
195 };
196 
198 template<typename Type, ezCVarType::Enum CVarType>
199 class ezTypedCVar : public ezCVar
200 {
201 public:
202  ezTypedCVar(const char* szName, const Type& Value, ezBitflags<ezCVarFlags> Flags, const char* szDescription);
203 
205  operator const Type&() const; // [tested]
206 
208  const Type& GetValue(ezCVarValue::Enum val = ezCVarValue::Current) const; // [tested]
209 
214  void operator= (const Type& value); // [tested]
215 
216  virtual ezCVarType::Enum GetType() const override;
217  virtual void SetToRestartValue() override;
218 
219 private:
220  friend class ezCVar;
221 
222  Type m_Values[ezCVarValue::ENUM_COUNT];
223 };
224 
227 
230 
233 
236 
237 
238 
239 #include <Foundation/Configuration/Implementation/CVar_inl.h>
240