/* ** 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 . */ /*********************************************************************************************** *** Confidential - Westwood Studios *** *********************************************************************************************** * * * Project Name : Commando * * * * $Archive:: /Commando/Code/Combat/beacongameobj.h $* * * * $Author:: Byon_g $* * * * $Modtime:: 1/04/02 2:58p $* * * * $Revision:: 16 $* * * *---------------------------------------------------------------------------------------------* * Functions: * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ #if defined(_MSC_VER) #pragma once #endif #ifndef __BEACONGAMEOBJ_H #define __BEACONGAMEOBJ_H #include "always.h" #include "simplegameobj.h" #include "timemgr.h" //////////////////////////////////////////////////////////////// // Forward delcarations //////////////////////////////////////////////////////////////// class BaseControllerClass; class WeaponDefinitionClass; class AudibleSoundClass; //////////////////////////////////////////////////////////////// // // BeaconGameObjDef // //////////////////////////////////////////////////////////////// class BeaconGameObjDef : public SimpleGameObjDef { public: //////////////////////////////////////////////////////////////// // Public constructors/destructors //////////////////////////////////////////////////////////////// BeaconGameObjDef (void); ~BeaconGameObjDef (void); //////////////////////////////////////////////////////////////// // Public methods //////////////////////////////////////////////////////////////// virtual uint32 Get_Class_ID (void) const; virtual PersistClass * Create (void) const; virtual bool Save (ChunkSaveClass &csave); virtual bool Load (ChunkLoadClass &cload); virtual const PersistFactoryClass & Get_Factory (void) const; bool Is_Nuke(void) const {return (IsNuke != 0);} DECLARE_EDITABLE (BeaconGameObjDef, SimpleGameObjDef); protected: //////////////////////////////////////////////////////////////// // Protected methods //////////////////////////////////////////////////////////////// void Load_Variables (ChunkLoadClass &cload); //////////////////////////////////////////////////////////////// // Protected friends //////////////////////////////////////////////////////////////// friend class BeaconGameObj; //////////////////////////////////////////////////////////////// // Protected member data //////////////////////////////////////////////////////////////// float BroadcastToAllTime; float ArmTime; float DisarmTime; float PreDetonateCinematicDelay; float DetonateTime; float PostDetonateTime; int ArmedSoundDefID; int DisarmingTextID; int DisarmedTextID; int ArmingTextID; int ArmingInterruptedTextID; int DisarmingInterruptedTextID; int PreDetonateCinematicDefID; int PostDetonateCinematicDefID; int ExplosionDefID; int IsNuke; StringClass ArmingAnimationName; }; //////////////////////////////////////////////////////////////// // // BeaconGameObj // //////////////////////////////////////////////////////////////// class BeaconGameObj : public SimpleGameObj { public: //////////////////////////////////////////////////////////////// // Public constructors/destructors //////////////////////////////////////////////////////////////// BeaconGameObj (void); virtual ~BeaconGameObj (void); //////////////////////////////////////////////////////////////// // Public methods //////////////////////////////////////////////////////////////// // // Definition support // virtual void Init( void ); void Init (const BeaconGameObjDef & definition); const BeaconGameObjDef & Get_Definition (void) const; // // RTTI // virtual BeaconGameObj * As_BeaconGameObj (void) { return this; } // // Save / Load / Construction Factory // bool Save (ChunkSaveClass & csave); bool Load (ChunkLoadClass & cload); const PersistFactoryClass & Get_Factory (void) const; // // GameObj methods // void Think (void); void Get_Information (StringClass &string); // // Beacon initialization // void Init_Beacon (const WeaponDefinitionClass *definiton, SoldierGameObj *owner, const Vector3 &position); // // Beacon stuff // bool Can_Place_Here (const Vector3 &position); void On_Arming_Interrupted (void); void Begin_Arming (void); void On_Poked (ScriptableGameObj *poker); virtual void Completely_Damaged( const OffenseObjectClass & damager ); virtual void Export_Rare( BitStreamClass &packet ); virtual void Import_Rare( BitStreamClass &packet ); SoldierGameObj * Get_Owner (void); private: //////////////////////////////////////////////////////////////// // Private methods //////////////////////////////////////////////////////////////// void Load_Variables (ChunkLoadClass &cload); void Stop_Armed_Sound (void); void Stop_Current_Message_Sound (void); void Display_Message (int text_id); void Start_Owner_Animation (void); void Stop_Owner_Animation (void); bool Was_Owner_Interrupted (void); void Start_Cinematic (int id); bool Is_In_Enemy_Base( void ); void Create_Explosion (void); // // State support // void Set_State (int state); void Update_State (void); BaseControllerClass * Get_Enemy_Base (void); //////////////////////////////////////////////////////////////// // Private constants //////////////////////////////////////////////////////////////// enum { STATE_NULL = 0, STATE_ARMING, STATE_ARMED, STATE_DISARMED, STATE_DETONATING }; //////////////////////////////////////////////////////////////// // Private member data //////////////////////////////////////////////////////////////// GameObjReference Owner; int State; float StateTimer; float PreDetonateTimer; float DetonateTimer; float WarningTimer; AudibleSoundClass * ArmedSound; AudibleSoundClass * MessageSound; bool IsArmed; const WeaponDefinitionClass * WeaponDefinition; GameObjReference CinematicObject; void * OwnerBackup; void Restore_Owner( void ); }; #endif // __BEACONGAMEOBJ_H