Tiberian Technologies Scripts Reference Revision: 9000
Loading...
Searching...
No Matches
Parameter.h
1/* Renegade Scripts.dll
2 Copyright 2013 Tiberian Technologies
3
4 This file is part of the Renegade scripts.dll
5 The Renegade scripts.dll is free software; you can redistribute it and/or modify it under
6 the terms of the GNU General Public License as published by the Free
7 Software Foundation; either version 2, or (at your option) any later
8 version. See the file COPYING for more details.
9 In addition, an exemption is given to allow Run Time Dynamic Linking of this code with any closed source module that does not contain code covered by this licence.
10 Only the source code to the module(s) containing the licenced code has to be released.
11*/
12#ifndef TT_INCLUDE_PARAMETER_H
13#define TT_INCLUDE_PARAMETER_H
14#include "Engine_String.h"
15#include "Engine_Vector.h"
16class DefParameterClass;
17class FileClass;
18class ParameterClass
19{
20public:
21 typedef enum
22 {
23 TYPE_INT = 0,
24 TYPE_FLOAT,
25 TYPE_STRING,
26 TYPE_VECTOR3,
27 TYPE_MATRIX3D,
28 TYPE_BOOL,
29 TYPE_TRANSITION,
30 TYPE_MODELDEFINITIONID,
31 TYPE_FILENAME,
32 TYPE_ENUM,
33 TYPE_GAMEOBJDEFINITIONID,
34 TYPE_SCRIPT,
35 TYPE_SOUND_FILENAME,
36 TYPE_ANGLE,
37 TYPE_WEAPONOBJDEFINITIONID,
38 TYPE_AMMOOBJDEFINITIONID,
39 TYPE_SOUNDDEFINITIONID,
40 TYPE_COLOR,
41 TYPE_PHYSDEFINITIONID,
42 TYPE_EXPLOSIONDEFINITIONID,
43 TYPE_DEFINITIONIDLIST,
44 TYPE_ZONE,
45 TYPE_FILENAMELIST,
46 TYPE_SEPARATOR,
47 TYPE_GENERICDEFINITIONID,
48 TYPE_SCRIPTLIST,
49 TYPE_VECTOR2,
50 TYPE_RECT,
51 TYPE_STRINGSDB_ID
52 } Type;
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) { };
68#ifdef DDBEDIT
69 virtual void Dump(FileClass &file) = 0;
70#endif
71 static ParameterClass * Construct (ParameterClass::Type type, void *data, const char *param_name);
72private:
73 bool IsModified;
74 const char * m_Name;
75 StringClass m_UnitsName;
76};
77inline
78ParameterClass::ParameterClass (void)
79 : m_Name (NULL),
80 IsModified (false)
81{
82 return ;
83}
84inline
85ParameterClass::ParameterClass (const ParameterClass &src)
86 : m_Name (NULL),
87 IsModified (false)
88{
89 (*this) = src;
90 return ;
91}
92inline
93ParameterClass::~ParameterClass (void)
94{
95 Set_Name (NULL);
96 return ;
97}
98inline const ParameterClass &
99ParameterClass::operator= (const ParameterClass &src)
100{
101 IsModified = src.IsModified;
102 Set_Name (src.m_Name);
103 return *this;
104}
105inline const char *
106ParameterClass::Get_Name (void) const
107{
108 return m_Name;
109}
110inline void
111ParameterClass::Set_Name (const char *new_name)
112{
113 if (m_Name != NULL) {
114 free ((void *)m_Name);
115 m_Name = NULL;
116 }
117
118 if (new_name != NULL) {
119 m_Name = _strdup (new_name);
120 }
121
122 return ;
123}
124inline const char *
125ParameterClass::Get_Units_Name (void) const
126{
127 return m_UnitsName;
128}
129inline void
130ParameterClass::Set_Units_Name (const char *new_name)
131{
132 m_UnitsName = new_name;
133 return ;
134}
135class ParameterListClass : public DynamicVectorClass<ParameterClass *>
136{
137public:
138 ~ParameterListClass (void);
139 void Add (void *data, const char *param_name, ParameterClass::Type type);
140 void Add (ParameterClass *parameter);
141protected:
142 void Free_Parameters (void);
143private:
144 DynamicVectorClass<ParameterClass *> m_Parameters;
145};
146inline
147ParameterListClass::~ParameterListClass (void)
148{
149 Free_Parameters ();
150 return ;
151}
152inline void
153ParameterListClass::Add (void *data, const char *param_name, ParameterClass::Type type)
154{
155 ParameterClass *new_param = ParameterClass::Construct (type, data, param_name);
156 if (new_param != NULL) {
157 DynamicVectorClass<ParameterClass *>::Add (new_param);
158 }
159}
160inline void
161ParameterListClass::Add (ParameterClass *new_param)
162{
163 if (new_param != NULL) {
164 DynamicVectorClass<ParameterClass *>::Add (new_param);
165 }
166}
167inline void
168ParameterListClass::Free_Parameters (void)
169{
170 for (int index = 0; index < Count (); index ++) {
171 ParameterClass *param = Vector[index];
172 if (param != NULL) {
173 delete param;
174 }
175 }
176 m_Parameters.Delete_All ();
177}
178#ifdef PARAM_EDITING_ON
179 #define DECLARE_EDITABLE(_class, _parent) \
180 ParameterListClass plist_##_class; \
181 virtual int _class::Get_Parameter_Count(void) const \
182 { \
183 return plist_##_class.Count () + _parent::Get_Parameter_Count (); \
184 } \
185 virtual ParameterClass *_class::Lock_Parameter(int i) \
186 { \
187 if (i < _parent::Get_Parameter_Count()) { \
188 return _parent::Lock_Parameter (i); \
189 } \
190 return plist_##_class[i - _parent::Get_Parameter_Count()]; \
191 }
192#else
193 #define DECLARE_EDITABLE(_class, _parent)
194#endif //PARAM_EDITING_ON
195
196#endif