| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- /*
- ** Command & Conquer Renegade(tm)
- ** Copyright 2025 Electronic Arts Inc.
- **
- ** This program is free software: you can redistribute it and/or modify
- ** it under the terms of the GNU General Public License as published by
- ** the Free Software Foundation, either version 3 of the License, or
- ** (at your option) any later version.
- **
- ** This program is distributed in the hope that it will be useful,
- ** but WITHOUT ANY WARRANTY; without even the implied warranty of
- ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- ** GNU General Public License for more details.
- **
- ** You should have received a copy of the GNU General Public License
- ** along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- /***********************************************************************************************
- *** Confidential - Westwood Studios ***
- ***********************************************************************************************
- * *
- * Project Name : Commando *
- * *
- * $Archive:: /Commando/Code/Combat/scriptzone.h $*
- * *
- * $Author:: Patrick $*
- * *
- * $Modtime:: 11/27/01 4:46p $*
- * *
- * $Revision:: 14 $*
- * *
- *---------------------------------------------------------------------------------------------*
- * Functions: *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
- #ifndef SCRIPTZONEOBJ_H
- #define SCRIPTZONEOBJ_H
- #ifndef ALWAYS_H
- #include "always.h"
- #endif
- #ifndef SCRIPTABLEGAMEOBJ_H
- #include "scriptablegameobj.h"
- #endif
- #ifndef OBBOX_H
- #include "obbox.h"
- #endif
- #ifndef SLIST_H
- #include "slist.h"
- #endif
- /*
- ** ZoneConstants
- ** Convienent namespace declaration for the constants used with zones
- */
- namespace ZoneConstants
- {
- typedef enum
- {
- TYPE_DEFAULT = 0,
- TYPE_CTF,
- TYPE_VEHICLE_CONSTRUCTION,
- TYPE_VEHICLE_REPAIR,
- TYPE_TIBERIUM_FIELD,
- TYPE_BEACON,
- TYPE_GDI_TIB_FIELD,
- TYPE_NOD_TIB_FIELD,
- TYPE_COUNT
- } ZoneType;
- }
- /*
- ** ZoneGameObjDef - Defintion class for a ZoneGameObj
- */
- class ScriptZoneGameObjDef : public ScriptableGameObjDef
- {
- public:
- ScriptZoneGameObjDef( void );
- virtual uint32 Get_Class_ID( void ) const;
- virtual PersistClass * Create( void ) const ;
- virtual bool Save( ChunkSaveClass &csave );
- virtual bool Load( ChunkLoadClass &cload );
- virtual bool Is_Valid_Config (StringClass &message) { return true; }
- virtual const PersistFactoryClass & Get_Factory( void ) const;
- DECLARE_EDITABLE( ScriptZoneGameObjDef, ScriptableGameObjDef );
- const Vector3 & Get_Color (void) const { return Color; }
- ZoneConstants::ZoneType Get_Type (void) const { return ZoneType; }
- protected:
- ZoneConstants::ZoneType ZoneType;
- Vector3 Color;
- bool IsCTFZone;
- bool CheckStarsOnly;
- bool IsEnvironmentZone;
- friend class ScriptZoneGameObj;
- };
- /*
- **
- */
- class ScriptZoneGameObj : public ScriptableGameObj {
- public:
- ScriptZoneGameObj();
- virtual ~ScriptZoneGameObj();
- // Definitions
- virtual void Init( void );
- void Init( const ScriptZoneGameObjDef & definition );
- const ScriptZoneGameObjDef & Get_Definition( void ) const;
-
- // RTTI
- ScriptZoneGameObj *As_ScriptZoneGameObj( void ) { return this; };
- // Save / Load / Construction Factory
- virtual bool Save( ChunkSaveClass & csave );
- virtual bool Load( ChunkLoadClass & cload );
- virtual const PersistFactoryClass & Get_Factory( void ) const;
- // Thinking
- virtual void Think();
- virtual void Get_Position(Vector3 * set_pos) const { *set_pos = BoundingBox.Center; }
- // Bounding Box
- void Set_Bounding_Box( OBBoxClass & box ) { BoundingBox = box; }
- const OBBoxClass & Get_Bounding_Box(void) { return BoundingBox; }
- // PlayerType (a simple copy of what's used in PhyiscalGameObj, needed for CTF
- int Get_Player_Type( void) const { return PlayerType; }
- void Set_Player_Type( int type ) { PlayerType = type; }
- int Count_Team_Members_Inside( int player_type );
- static ScriptZoneGameObj * Find_Closest_Zone (const Vector3 &pos, ZoneConstants::ZoneType type);
- // Network support
- //virtual bool Exists_On_Client( void ) const;
- bool Is_Environment_Zone( void ) { return Get_Definition().IsEnvironmentZone; }
- protected:
- OBBoxClass BoundingBox;
- int PlayerType;
- // a list of all SMART objects currently inside me and a checking function
- SList<GameObjReference> InsideList;
- void Entered( SmartGameObj * obj );
- bool In_List( SmartGameObj * obj );
- bool Inside_Me( const SmartGameObj * obj );
- };
- #endif
- #if 0
- // New Zone System
- // We need zones for script triggering, transitions, doors, elevators, spawners
- // Can Zones trigger from Soldier / smart / physical?
- /*
- **
- */
- class ZoneObserverClass {
- typedef enum {
- ENTERED,
- EXITED,
- TRIGGER,
- VEHICLE_KEY,
- };
- void Trigger( SmartGameObj * obj, int trigger_type ) = 0;
- void Object_Entered( SmartGameObj * obj ) = 0;
- void Object_Exited( SmartGameObj * obj ) = 0;
- void Object_Inside_Actioned( SmartGameObj * obj, int action_type ) = 0;
- };
- /*
- ** Abstract Base ZoneClass
- */
- class ZoneClass {
- public:
- void Set_Zone( const OBBoxClass & zone );
- void Set_Observer( ZoneObserverClass * observer );
- void Trigger_Check( const DynamicVectorClass<SmartGameObj *> & obj_list ) = 0;
- protected:
- OBBoxClass ZoneBox;
- ZoneObserverClass * Observer;
- }
- /*
- ** EnterExitZoneClass maintains a list of SmartGameObject inside it
- ** and notifies observer of enter and exit changes.
- */
- class EnterExitZoneClass : public ZoneClass {
- public:
- void Trigger_Check( const DynamicVectorClass<SmartGameObj *> & obj_list );
- protected:
- DynamicVectorClass<SmartGameObj *> Contents; // Must be a gameobjreference
- };
- /*
- ** TransitionZoneClass
- */
- class TransitionZoneClass : public ZoneClass {
- public:
- void Set_Trigger_Movement_Vector( const Vector3 & trigger_move );
- void Set_Trigger_Movement_Threshhold( float threshold );
- void Set_TM( const Matrix3D & tm );
- void Trigger_Check( const DynamicVectorClass<SmartGameObj *> & obj_list );
- protected:
- Matrix3D TM;
- };
- /*
- **
- */
- class ZoneManager {
- void Update( void );
- // Add a zone
- void Add_Zone( ZoneClass * zone );
- void Remove_Zone( ZoneClass * zone );
- };
- #endif // SCRIPTZONEOBJ
|