12#ifndef TT_INCLUDE_PARAMETER_H
13#define TT_INCLUDE_PARAMETER_H
14#include "Engine_String.h"
15#include "Engine_Vector.h"
16class DefParameterClass;
30 TYPE_MODELDEFINITIONID,
33 TYPE_GAMEOBJDEFINITIONID,
37 TYPE_WEAPONOBJDEFINITIONID,
38 TYPE_AMMOOBJDEFINITIONID,
39 TYPE_SOUNDDEFINITIONID,
41 TYPE_PHYSDEFINITIONID,
42 TYPE_EXPLOSIONDEFINITIONID,
43 TYPE_DEFINITIONIDLIST,
47 TYPE_GENERICDEFINITIONID,
53 ParameterClass (
void);
54 ParameterClass (
const ParameterClass &src);
55 virtual ~ParameterClass (
void);
56 const ParameterClass & operator= (
const ParameterClass &src);
57 virtual bool operator== (
const ParameterClass &src) = 0;
58 virtual DefParameterClass * As_DefParameterClass (
void) {
return NULL; }
59 virtual Type Get_Type (
void)
const = 0;
60 virtual bool Is_Type (Type type)
const {
return false; }
61 virtual bool Is_Modifed (
void)
const {
return IsModified; }
62 virtual void Set_Modified (
bool onoff =
true) { IsModified = onoff; }
63 virtual const char * Get_Name (
void)
const;
64 virtual void Set_Name (
const char *new_name);
65 virtual const char * Get_Units_Name (
void)
const;
66 virtual void Set_Units_Name (
const char *units_name);
67 virtual void Copy_Value (
const ParameterClass &src) { };
69 virtual void Dump(FileClass &file) = 0;
71 static ParameterClass * Construct (ParameterClass::Type type,
void *data,
const char *param_name);
75 StringClass m_UnitsName;
78ParameterClass::ParameterClass (
void)
85ParameterClass::ParameterClass (
const ParameterClass &src)
93ParameterClass::~ParameterClass (
void)
98inline const ParameterClass &
99ParameterClass::operator= (
const ParameterClass &src)
101 IsModified = src.IsModified;
102 Set_Name (src.m_Name);
106ParameterClass::Get_Name (
void)
const
111ParameterClass::Set_Name (
const char *new_name)
113 if (m_Name != NULL) {
114 free ((
void *)m_Name);
118 if (new_name != NULL) {
119 m_Name = _strdup (new_name);
125ParameterClass::Get_Units_Name (
void)
const
130ParameterClass::Set_Units_Name (
const char *new_name)
132 m_UnitsName = new_name;
135class ParameterListClass :
public DynamicVectorClass<ParameterClass *>
138 ~ParameterListClass (
void);
139 void Add (
void *data,
const char *param_name, ParameterClass::Type type);
140 void Add (ParameterClass *parameter);
142 void Free_Parameters (
void);
144 DynamicVectorClass<ParameterClass *> m_Parameters;
147ParameterListClass::~ParameterListClass (
void)
153ParameterListClass::Add (
void *data,
const char *param_name, ParameterClass::Type type)
155 ParameterClass *new_param = ParameterClass::Construct (type, data, param_name);
156 if (new_param != NULL) {
157 DynamicVectorClass<ParameterClass *>::Add (new_param);
161ParameterListClass::Add (ParameterClass *new_param)
163 if (new_param != NULL) {
164 DynamicVectorClass<ParameterClass *>::Add (new_param);
168ParameterListClass::Free_Parameters (
void)
170 for (
int index = 0; index < Count (); index ++) {
171 ParameterClass *param = Vector[index];
176 m_Parameters.Delete_All ();
178#ifdef PARAM_EDITING_ON
179 #define DECLARE_EDITABLE(_class, _parent) \
180 ParameterListClass plist_##_class; \
181 virtual int _class::Get_Parameter_Count(void) const \
183 return plist_##_class.Count () + _parent::Get_Parameter_Count (); \
185 virtual ParameterClass *_class::Lock_Parameter(int i) \
187 if (i < _parent::Get_Parameter_Count()) { \
188 return _parent::Lock_Parameter (i); \
190 return plist_##_class[i - _parent::Get_Parameter_Count()]; \
193 #define DECLARE_EDITABLE(_class, _parent)