//============================================================================= // Copyright (C) 2002 Radical Entertainment Ltd. All rights reserved. // // File: .h // // Description: Blahblahblah // // History: 13/05/2002 + Created -- NAME // //============================================================================= #ifndef TRIGGERVOLUMETRACKER_H #define TRIGGERVOLUMETRACKER_H //======================================== // Nested Includes //======================================== #include #include #include #ifndef WORLD_BUILDER #include #include #include #else #include "../constants/maxplayers.h" #include "../events/eventlistener.h" #include "locatortypes.h" #endif #include //======================================== // Forward References //======================================== class Vehicle; namespace sim { enum CollisionVolumeTypeEnum; } //============================================================================= // // Synopsis: Blahblahblah // //============================================================================= class TriggerVolumeTracker : public EventListener { public: // Static Methods for accessing this singleton. static void CreateInstance(); static TriggerVolumeTracker* GetInstance(); static void DestroyInstance(); void Cleanup(); void Update( int elapsedTime ); void AddTrigger( TriggerVolume* triggerVolume ); void RemoveTrigger( TriggerVolume* triggerVolume ); void UnregisterFromInventory( tInventory* inv ); virtual void HandleEvent( EventEnum id, void* pEventData ); void Render(); unsigned int GetNumTriggers() { return( mTriggerCount ); } TriggerVolume* GetTrigger( unsigned int index ) { return( mTriggerVolumes[ index ] ); } TriggerVolume* GetTriggerByName( const char* name ); void RegisterAI( Vehicle* ai, int locatorTypes = ( 1 << LocatorType::EVENT ) ); void UnregisterAI( Vehicle* ai ); Vehicle* GetAI( int id ); void RegisterLocatorTypeForAI( LocatorType::Type type, Vehicle* ai ); void UnregisterLocatorTypeForAI( LocatorType::Type type, Vehicle* ai ); void IgnoreTriggers( bool on ); void ActivateNearestInteriorLoadZone(int iPlayerID, rmt::Vector& irPosnRef, float iMaxDistance); // MS9: yadda yadda void SetTriggerSphere( tDrawable* triggersphere ); void ResetDynaloadZones(); #ifndef RAD_RELEASE #ifndef WORLD_BUILDER pddiShader* GetMaterial(void); #endif #endif tDrawable* mpTriggerSphere; protected: private: TriggerVolumeTracker(); virtual ~TriggerVolumeTracker(); //Prevent wasteful constructor creation. TriggerVolumeTracker( const TriggerVolumeTracker& triggerVolumeTracker ); TriggerVolumeTracker& operator=( const TriggerVolumeTracker& triggerVolumeTracker ); // Pointer to the one and only instance of this singleton. static TriggerVolumeTracker* spInstance; void AddActive( int playerID, TriggerVolume* triggerVolume ); void RemoveActive( int playerID, int index ); void CheckForActiveVolumes( int playerID, rmt::Vector& center, float radius ); void AddAIActive( int playerID, TriggerVolume* triggerVolume ); void RemoveAIActive( int playerID, int index ); void TestVolume( TriggerVolume* vol, rmt::Vector& center, float radius, int playerID, unsigned int time ); enum { MAX_VOLUMES = 500, MAX_ACTIVE = 20, MAX_AI = 10, MAX_AI_VOLUMES = 100 }; unsigned int mTriggerCount; TriggerVolume* mTriggerVolumes[ MAX_VOLUMES ]; unsigned int mActiveCount[ MAX_PLAYERS ]; TriggerVolume* mActiveVolumes[ MAX_PLAYERS ][ MAX_ACTIVE ]; unsigned int mAICount[ MAX_AI ]; TriggerVolume* mActiveAIVolumes[ MAX_AI ][ MAX_AI_VOLUMES ]; unsigned int mNumRegisteredAI; struct RegisteredAI { RegisteredAI() : mTriggerTypes( 0 ), mVehicle( NULL ) {}; int mTriggerTypes; Vehicle* mVehicle; }; RegisteredAI mRegisteredVehicles[ MAX_AI ]; bool mIgnoreTriggers; static rmt::Vector sP1, sP2, sP3, sP4; static sim::CollisionVolumeTypeEnum sColType; #ifndef RAD_RELEASE bool mDisplayEnable[ LocatorType::NUM_TYPES ]; bool mDisplayAmbients; bool mDisplayActive; bool mDisplayInactive; bool mDisplayAll; pddiShader* material; #endif }; #ifndef WORLD_BUILDER // A little syntactic sugar for getting at this singleton. inline TriggerVolumeTracker* GetTriggerVolumeTracker() { return( TriggerVolumeTracker::GetInstance() ); } #endif //============================================================================= // TriggerVolumeTracker::SetTriggerSphere //============================================================================= // Description: Comment // // Parameters: ( tDrawable* triggersphere ) // // Return: void // //============================================================================= inline void TriggerVolumeTracker::SetTriggerSphere( tDrawable* triggersphere ) { //rAssert( triggersphere != NULL ); mpTriggerSphere = triggersphere; } //============================================================================= // TriggerVolumeTracker::IgnoreTriggers //============================================================================= // Description: Comment // // Parameters: ( bool on ) // // Return: void // //============================================================================= inline void TriggerVolumeTracker::IgnoreTriggers( bool on ) { mIgnoreTriggers = on; } #endif //TRIGGERVOLUMETRACKER_H