2 @Copyright Looking Glass Studios, Inc.
3 1996,1997,1998,1999,2000 Unpublished Work.
6 // $Header: r:/t2repos/thief2/src/sound/schprop.cpp,v 1.19 1999/04/24 15:47:56 Justin Exp $
24 // Must be last header
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.
33 static void LGAPI
PlayParamsListener(sPropertyListenMsg
* msg
,
34 PropListenerData data
)
36 if (!msg
->value
.ptrval
)
39 sSchemaPlayParams
*pParams
= (sSchemaPlayParams
*) msg
->value
.ptrval
;
42 if (msg
->type
& kListenPropSet
) {
43 AssertMsg1(pParams
->volume
<= 0,
44 "Schema volume should be negative, but we have one at %d",
50 ISchemaPlayParamsProperty
*g_schemaPlayParamsProperty
;
52 static const char* flag_names
[] =
64 "","", // 6 unused bits
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
;
101 cSchemaPlayProp(const sPropertyDesc
* 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
);
123 g_schemaPlayParamsProperty
->Listen(kListenPropSet
,
124 PlayParamsListener
, NULL
);
128 sSchemaPlayParams
*SchemaPlayParamsGet(ObjID objID
)
130 sSchemaPlayParams
*pParams
;
132 if (g_schemaPlayParamsProperty
->Get(objID
, &pParams
))
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
;
167 cSchemaLoopProp(const sPropertyDesc
* 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
))
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
);
220 ////////////////////////////////
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
);
236 Label
*SchemaMessageGet(ObjID objID
)
240 if (g_pPropSchemaMessage
->Get(objID
, &pMessage
))
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
)
265 if (g_pPropSchemaActionSnd
->Get(objID
, &pActionSnd
))
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
)
290 g_pPropSchemaAttFac
->Get(objID
, &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
)
314 g_pPropSchemaLastSample
->Get(objID
, &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
);