#include "mungal4.h" #pragma hdrstop #include "l4audwtr.h" #include "..\munga\objstrm.h" #include "..\munga\namelist.h" //############################################################################# //######################## L4AudioCollisionTrigger ###################### //############################################################################# #if 0 L4AudioCollisionTrigger::L4AudioCollisionTrigger( StateIndicator *state_attribute_ptr, Normal *normal_attribute_ptr, Static3DPatchSource *audio_source, Enumeration trigger_state, AudioControlID control_ID, AudioControlValue control_value, Logical dump_value ): AudioStateWatcher( state_attribute_ptr, audio_source, L4AudioCollisionTriggerClassID, dump_value ) { Check(normal_attribute_ptr); normalAttributePtr = normal_attribute_ptr; triggerState = trigger_state; controlID = control_ID; controlValue = control_value; PrimeWatcher(); } #endif // //############################################################################# //############################################################################# // L4AudioCollisionTrigger::~L4AudioCollisionTrigger() { } // //############################################################################# //############################################################################# // L4AudioCollisionTrigger::L4AudioCollisionTrigger( PlugStream *stream, Entity *entity ): AudioStateWatcher(stream, entity) { // // HACK - Get "normal" attribute pointer with names // CString attribute_name; void *attribute_ptr; MemoryStream_Read(stream, &attribute_name); Check(entity); attribute_ptr = entity->GetAttributePointer(attribute_name); normalAttributePtr = Cast_Object(Normal*, attribute_ptr); // // Get other fields // MemoryStream_Read(stream, &triggerState); MemoryStream_Read(stream, &controlID); MemoryStream_Read(stream, &controlValue); PrimeWatcher(); } // //############################################################################# //############################################################################# // void L4AudioCollisionTrigger::BuildFromPage( PlugStream *stream, NameList *name_list, ClassID class_ID, ObjectID object_ID ) { AudioStateWatcher::BuildFromPage(stream, name_list, class_ID, object_ID); // // HACK - Store "normal" attribute pointer with names // MEM_STRM_WRITE_ENTRY(*stream, name_list, CString, normal_attribute); // // Store fields // MEM_STRM_WRITE_ENTRY(*stream, name_list, Enumeration, trigger_state); MEM_STRM_WRITE_ENTRY(*stream, name_list, Enumeration, control_ID); MEM_STRM_WRITE_ENTRY(*stream, name_list, AudioControlValue, control_value); } // //############################################################################# //############################################################################# // Logical L4AudioCollisionTrigger::TestInstance() const { AudioStateWatcher::TestInstance(); Check(normalAttributePtr); return True; } // //############################################################################# //############################################################################# // void L4AudioCollisionTrigger::StateChanged( Enumeration, Enumeration new_state ) { if (new_state == triggerState) { // // Get static 3D source // AudioComponent *audio_component; Static3DPatchSource *audio_source; Check(&audioComponentSocket); audio_component = audioComponentSocket.GetCurrent(); Check(audio_component); audio_source = Cast_Object(Static3DPatchSource*, audio_component); Check(audio_source); // // Get collision direction // Vector3D collision_direction(0.0f, 0.0f, 0.0f); Check(normalAttributePtr); collision_direction -= *normalAttributePtr; Check(&collision_direction); audio_source->SetPosition(collision_direction); // // Send control value // #if 1 audio_component->ReceiveControl(controlID, controlValue); #else audio_component->PostReceiveControl(controlID, controlValue); #endif } } // //############################################################################# //############################################################################# // #if DEBUG_LEVEL>0 void L4AudioCollisionTrigger::DumpValue(const StateIndicator *state_attribute_ptr) #else void L4AudioCollisionTrigger::DumpValue(const StateIndicator*) #endif { // // Get collision direction // Vector3D collision_direction(0.0f, 0.0f, 0.0f); Check(normalAttributePtr); collision_direction -= *normalAttributePtr; Check(&collision_direction); Tell( "*state_attribute_ptr = " << *state_attribute_ptr << " : " << "collision_direction = " << collision_direction << "\n" ); }