convert line ends
[canaan.git] / prj / cam / src / sound / schprop.cpp
blob757ed15f3d270c842ba0b7776d5087794bf4dd5d
1 /*
2 @Copyright Looking Glass Studios, Inc.
3 1996,1997,1998,1999,2000 Unpublished Work.
4 */
6 // $Header: r:/t2repos/thief2/src/sound/schprop.cpp,v 1.19 1999/04/24 15:47:56 Justin Exp $
8 #include <property.h>
9 #include <propbase.h>
10 #include <propface.h>
11 #include <propert_.h>
12 #include <dataops_.h>
13 #include <prophash.h>
14 #include <sdesc.h>
15 #include <sdestype.h>
16 #include <sdesbase.h>
18 #include <schbase.h>
19 #include <schprop.h>
21 #include <tag.h>
22 #include <tagbase.h>
24 // Must be last header
25 #include <dbmem.h>
27 ////////////////////////////////
28 // Schema play parameters property
30 // This listener is only being used to try to catch a particular
31 // error, in which the base schema's volume is set to 0x10040.
32 #ifndef SHIP
33 static void LGAPI PlayParamsListener(sPropertyListenMsg * msg,
34 PropListenerData data)
36 if (!msg->value.ptrval)
37 return;
39 sSchemaPlayParams *pParams = (sSchemaPlayParams *) msg->value.ptrval;
41 // creation
42 if (msg->type & kListenPropSet) {
43 AssertMsg1(pParams->volume <= 0,
44 "Schema volume should be negative, but we have one at %d",
45 pParams->volume);
48 #endif // ~SHIP
50 ISchemaPlayParamsProperty *g_schemaPlayParamsProperty;
52 static const char* flag_names[] =
54 "Retrigger",
55 "Pan position",
56 "Pan Range",
57 "No Repeate",
58 "No Cache",
59 "Stream",
60 "Play Once",
61 "No Combat",
62 "Net Ambient",
63 "Local Spatial",
64 "","", // 6 unused bits
65 "","","","",
66 "Noise",
67 "Speech",
68 "Ambient",
69 "Music",
70 "MetaUI",
73 #define NUM_FLAGS (sizeof(flag_names)/sizeof(flag_names[0]))
75 static sFieldDesc SchemaPlayParamsFields[] =
77 {"Flags", kFieldTypeBits, FieldLocation(sSchemaPlayParams, flags), kFieldFlagNone, 0, NUM_FLAGS, NUM_FLAGS, flag_names},
78 {"Volume", kFieldTypeInt, FieldLocation(sSchemaPlayParams, volume),},
79 {"Initial Delay", kFieldTypeShort, FieldLocation(sSchemaPlayParams, initialDelay),},
80 {"Pan", kFieldTypeInt, FieldLocation(sSchemaPlayParams, pan),},
81 {"Fade", kFieldTypeInt, FieldLocation(sSchemaPlayParams, fade),},
84 static sStructDesc SchemaPlayParamsStructDesc =
85 StructDescBuild(sSchemaPlayParams, kStructFlagNone, SchemaPlayParamsFields);
87 class cSchemaPlayOps : public cClassDataOps<sSchemaPlayParams>
92 class cSchemaPlayStore: public cHashPropertyStore<cSchemaPlayOps>
96 class cSchemaPlayProp : public cSpecificProperty<ISchemaPlayParamsProperty,&IID_ISchemaPlayParamsProperty,sSchemaPlayParams*, cSchemaPlayStore>
98 typedef cSpecificProperty<ISchemaPlayParamsProperty,&IID_ISchemaPlayParamsProperty,sSchemaPlayParams*, cSchemaPlayStore> cParent;
100 public:
101 cSchemaPlayProp(const sPropertyDesc* desc)
102 : cParent(desc)
106 STANDARD_DESCRIBE_TYPE(sSchemaPlayParams);
111 static sPropertyDesc schemaPlayParamsDesc =
113 PROP_SCHEMA_PLAY_PARAMS, 0, NULL, 0, 0, { "Schema", "Play Params" },
116 void SchemaPlayParamsPropertyInit()
118 StructDescRegister(&SchemaPlayParamsStructDesc);
120 g_schemaPlayParamsProperty
121 = new cSchemaPlayProp(&schemaPlayParamsDesc);
122 #ifndef SHIP
123 g_schemaPlayParamsProperty->Listen(kListenPropSet,
124 PlayParamsListener, NULL);
125 #endif // ~SHIP
128 sSchemaPlayParams *SchemaPlayParamsGet(ObjID objID)
130 sSchemaPlayParams *pParams;
132 if (g_schemaPlayParamsProperty->Get(objID, &pParams))
133 return pParams;
134 return NULL;
137 ////////////////////////////////
138 // Schema loop parameters property
140 ISchemaLoopParamsProperty *g_schemaLoopParamsProperty;
142 static sFieldDesc SchemaLoopParamsFields[] =
144 {"Flags", kFieldTypeBits, FieldLocation(sSchemaLoopParams, flags),},
145 {"Max Samples", kFieldTypeInt, FieldLocation(sSchemaLoopParams, maxSamples),},
146 {"Interval Min", kFieldTypeInt, FieldLocation(sSchemaLoopParams, intervalMin),},
147 {"Interval Max", kFieldTypeInt, FieldLocation(sSchemaLoopParams, intervalMax),},
150 static sStructDesc SchemaLoopParamsStructDesc =
151 StructDescBuild(sSchemaLoopParams, kStructFlagNone, SchemaLoopParamsFields);
153 class cSchLoopOps : public cClassDataOps<sSchemaLoopParams>
157 class cSchLoopStore : public cHashPropertyStore<cSchLoopOps>
162 class cSchemaLoopProp : public cSpecificProperty<ISchemaLoopParamsProperty,&IID_ISchemaLoopParamsProperty, sSchemaLoopParams*, cSchLoopStore>
164 typedef cSpecificProperty<ISchemaLoopParamsProperty,&IID_ISchemaLoopParamsProperty, sSchemaLoopParams*, cSchLoopStore> cParent;
166 public:
167 cSchemaLoopProp(const sPropertyDesc* desc)
168 : cParent(desc)
172 STANDARD_DESCRIBE_TYPE(sSchemaLoopParams);
176 static sPropertyDesc schemaLoopParamsDesc =
178 PROP_SCHEMA_LOOP_PARAMS, 0, NULL, 0, 0, { "Schema", "Loop Params" },
181 void SchemaLoopParamsPropertyInit()
183 StructDescRegister(&SchemaLoopParamsStructDesc);
185 g_schemaLoopParamsProperty = new cSchemaLoopProp(&schemaLoopParamsDesc);
188 sSchemaLoopParams *SchemaLoopParamsGet(ObjID objID)
190 sSchemaLoopParams *pParams;
192 if (g_schemaLoopParamsProperty->Get(objID, &pParams))
193 return pParams;
194 return NULL;
197 ////////////////////////////////
198 // Schema priority property
199 IIntProperty *g_pPropSchemaPriority;
201 static sPropertyDesc SchemaPriorityDesc =
203 PROP_SCHEMA_PRIORITY, 0, NULL, 0, 0, { "Schema", "Priority" },
206 #define SCHEMA_PRIORITY_IMPL kPropertyImplDense
208 void SchemaPriorityPropertyInit(void)
210 g_pPropSchemaPriority = CreateIntProperty(&SchemaPriorityDesc, SCHEMA_PRIORITY_IMPL);
213 int SchemaPriorityGet(ObjID objID)
215 int pri = SCH_PRIORITY_NORMAL;
216 g_pPropSchemaPriority->Get(objID, &pri);
217 return pri;
220 ////////////////////////////////
221 // Schema messages
223 ILabelProperty *g_pPropSchemaMessage;
225 static sPropertyDesc SchemaMessageDesc =
227 PROP_SCHEMA_MESSAGE, 0, NULL, 0, 0, { "Schema", "Message" },
230 void SchemaMessagePropertyInit(void)
232 g_pPropSchemaMessage = CreateLabelProperty(&SchemaMessageDesc, kPropertyImplDense);
235 // get voice
236 Label *SchemaMessageGet(ObjID objID)
238 Label *pMessage;
240 if (g_pPropSchemaMessage->Get(objID, &pMessage))
241 return pMessage;
242 else
243 return NULL;
246 ////////////////////////////////
247 // Schema "action" sounds
249 ILabelProperty *g_pPropSchemaActionSnd;
251 static sPropertyDesc SchemaActionSndDesc =
253 PROP_SCHEMA_ACTION_SND, 0, NULL, 0, 0, { "Schema", "Action" },
256 void SchemaActionSndPropertyInit(void)
258 g_pPropSchemaActionSnd = CreateLabelProperty(&SchemaActionSndDesc, kPropertyImplDense);
261 Label *SchemaActionSndGet(ObjID objID)
263 Label *pActionSnd;
265 if (g_pPropSchemaActionSnd->Get(objID, &pActionSnd))
266 return pActionSnd;
267 else
268 return NULL;
271 ////////////////////////////////
272 // Schema attenuation factor
273 IFloatProperty *g_pPropSchemaAttFac;
275 static sPropertyDesc SchemaAttenuationDesc =
277 PROP_SCHEMA_ATTFAC, 0, NULL, 0, 0, { "Schema", "Attenuation Factor" },
280 #define SCHEMA_ATTFAC_IMPL kPropertyImplVerySparse
282 void SchemaAttFacPropertyInit(void)
284 g_pPropSchemaAttFac = CreateFloatProperty(&SchemaAttenuationDesc, SCHEMA_PRIORITY_IMPL);
287 float SchemaAttFacGet(ObjID objID)
289 float fac = 1.0;
290 g_pPropSchemaAttFac->Get(objID, &fac);
291 return fac;
294 // Schema LastSample property
295 IIntProperty *g_pPropSchemaLastSample;
297 static sPropertyDesc SchemaLastSampleDesc =
299 PROP_SCHEMA_LAST_SAMPLE, kPropertyTransient,
300 NULL, 0, 0, { "Schema", "Last Sample" },
301 kPropertyChangeLocally,
304 #define SCHEMA_LAST_SAMPLE_IMPL kPropertyImplDense
306 void SchemaLastSamplePropertyInit(void)
308 g_pPropSchemaLastSample = CreateIntProperty(&SchemaLastSampleDesc, SCHEMA_LAST_SAMPLE_IMPL);
311 int SchemaLastSampleGet(ObjID objID)
313 int lastSample = -1;
314 g_pPropSchemaLastSample->Get(objID, &lastSample);
315 return lastSample;
318 // Initialize all schema properties
319 void SchemaPropsInit(void)
321 SchemaLoopParamsPropertyInit();
322 SchemaPlayParamsPropertyInit();
323 SchemaPriorityPropertyInit();
324 SchemaMessagePropertyInit();
325 SchemaActionSndPropertyInit();
326 SchemaLastSamplePropertyInit();
327 SchemaAttFacPropertyInit();
330 void SchemaPropsTerm(void)
332 SafeRelease(g_pPropSchemaAttFac);
333 SafeRelease(g_pPropSchemaLastSample);
334 SafeRelease(g_schemaPlayParamsProperty);
335 SafeRelease(g_schemaLoopParamsProperty);
336 SafeRelease(g_pPropSchemaPriority);
337 SafeRelease(g_pPropSchemaMessage);
338 SafeRelease(g_pPropSchemaActionSnd);