| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351 |
- /*
- ** 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/combat.h $*
- * *
- * $Author:: Bhayes $*
- * *
- * $Modtime:: 2/17/02 10:27a $*
- * *
- * $Revision:: 130 $*
- * *
- *---------------------------------------------------------------------------------------------*
- * Functions: *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
- #ifndef COMBAT_H
- #define COMBAT_H
- #ifndef ALWAYS_H
- #include "always.h"
- #endif
- #ifndef GAMEOBJREF_H
- #include "gameobjref.h"
- #endif
- #ifndef VECTOR3_H
- #include "vector3.h"
- #endif
- #ifndef WWSTRING_H
- #include "wwstring.h"
- #endif
- /*
- **
- */
- class PhysicsSceneClass;
- class CameraClass;
- class CCameraClass;
- class SmartGameObj;
- class ArmedGameObj;
- class PhysicalGameObj;
- class SimpleSceneClass;
- class BaseGameObj;
- class VehicleGameObj;
- class SoldierGameObj;
- class DazzleLayerClass;
- class MessageWindowClass;
- class SoundEnvironmentClass;
- /*
- **
- */
- #define COMBAT_CAMERA CombatManager::Get_Camera()
- #define COMBAT_STAR CombatManager::Get_The_Star()
- #define COMBAT_SCENE CombatManager::Get_Scene()
- #define COMBAT_DAZZLE_LAYER CombatManager::Get_Dazzle_Layer()
- /*
- ** Collision Groups
- */
- typedef enum {
- DEFAULT_COLLISION_GROUP = 0, // collides with everything
- UNCOLLIDEABLE_GROUP, // collides with nothing
- TERRAIN_ONLY_COLLISION_GROUP, // collides only with terrain
- BULLET_COLLISION_GROUP, // collides with everything but itself
- TERRAIN_AND_BULLET_COLLISION_GROUP, // collides with terrain and bullets
- BULLET_ONLY_COLLISION_GROUP, // collides only with bullets
- SOLDIER_COLLISION_GROUP, // collides with everything (but only soldiers use it)
- SOLDIER_GHOST_COLLISION_GROUP, // collides with everything but soldiers
- TERRAIN_COLLISION_GROUP = 15, // Terrain must be 15
- } Collision_Group_Type;
- /*
- **
- */
- class CombatNetworkHandlerClass {
- public:
- virtual bool Can_Damage(ArmedGameObj * p_armed_damager, PhysicalGameObj * p_phys_victim) = 0;
- virtual float Get_Damage_Factor(ArmedGameObj * p_armed_damager, PhysicalGameObj * p_phys_victim) = 0;
- virtual void On_Soldier_Kill(SoldierGameObj * p_soldier, SoldierGameObj * p_victim) = 0;
- virtual void On_Soldier_Death(SoldierGameObj * p_soldier) = 0;
- virtual bool Is_Gameplay_Permitted(void) = 0;
- };
- /*
- **
- */
- class CombatMiscHandlerClass {
- public:
- virtual void Mission_Complete( bool success ) = 0;
- virtual void Star_Killed( void ) = 0;
- };
- /*
- **
- */
- class CombatManager {
- public:
- // Init and Shutdown should be called once per program execution
- static void Init( bool render_available = true );
- static void Shutdown( void );
- // Scene_Init is called by the game, but not the editor
- static void Scene_Init( void );
- // Level Loading functions get called for each level loaded.
- static void Pre_Load_Level( bool render_available = true );
- static void Load_Level_Threaded( const char * map_name, bool preload_assets );
- static bool Is_Load_Level_Complete( void );
- static bool Is_Loading_Level( void );
- static void Post_Load_Level( void );
- static void Unload_Level( void );
- // Main Loop functions
- static void Generate_Control( void );
- static void Think( void );
- static void Render( void );
- static void Handle_Input( void );
- // Save/Load
- static bool Save( ChunkSaveClass &csave );
- static bool Load( ChunkLoadClass &cload );
- // Client/Server Settings
- static void Set_I_Am_Server( bool yes ) { IAmServer = yes; }
- static void Set_I_Am_Client( bool yes ) { IAmClient = yes; }
- static bool I_Am_Server( void ) { return IAmServer; }
- static bool I_Am_Client( void ) { return IAmClient; }
- static bool I_Am_Only_Client( void ) { return IAmClient && !IAmServer; }
- static bool I_Am_Only_Server( void ) { return IAmServer && !IAmClient; }
- static bool I_Am_Client_Server(void) { return IAmClient && IAmServer;}
- static void Set_Friendly_Fire_Permitted( bool yes ) { FriendlyFirePermitted = yes; }
- static bool Is_Friendly_Fire_Permitted( void ) { return FriendlyFirePermitted; }
- static void Set_Beacon_Placement_Ends_Game( bool yes ){ BeaconPlacementEndsGame = yes; }
- static bool Does_Beacon_Placement_Ends_Game( void ) { return BeaconPlacementEndsGame; }
- static void Set_My_Id( int id ) { MyId = id; }
- static int Get_My_Id( void ) { return MyId; }
- // Latency support
- static void Set_Last_Round_Trip_Ping_Ms( DWORD ping ) { LastRoundTripPingMs = ping; }
- static DWORD Get_Last_Round_Trip_Ping_Ms( void ) { return LastRoundTripPingMs; }
- static void Set_Avg_Round_Trip_Ping_Ms( DWORD ping ) { AvgRoundTripPingMs = ping; }
- static DWORD Get_Avg_Round_Trip_Ping_Ms( void ) { return AvgRoundTripPingMs; }
- // Network Handler Functions
- static void Set_Combat_Network_Handler( CombatNetworkHandlerClass * handler ) { NetworkHandler = handler; }
- static bool Can_Damage(ArmedGameObj * p_armed_damager, PhysicalGameObj * p_phys_victim);
- static float Get_Damage_Factor(ArmedGameObj * p_armed_damager, PhysicalGameObj * p_phys_victim);
- static void On_Soldier_Kill(SoldierGameObj * p_soldier, SoldierGameObj * p_victim);
- static void On_Soldier_Death(SoldierGameObj * p_soldier);
- static bool Is_Gameplay_Permitted(void);
- // Misc Handler
- static void Set_Combat_Misc_Handler( CombatMiscHandlerClass * handler ) { MiscHandler = handler; }
- static void Mission_Complete( bool success );
- static void Star_Killed( void );
- // The Star
- static void Set_The_Star( SoldierGameObj *target, bool is_star_determining_target = true );
- static SoldierGameObj * Get_The_Star( void ) { return (SoldierGameObj *)TheStar.Get_Ptr(); }
- static void Update_Star( void );
- static void Update_Star_Targeting( void );
- static bool Is_Star_Determining_Target(void) {return IsStarDeterminingTarget;}
- static void Set_Is_Star_Determining_Target(bool flag) {IsStarDeterminingTarget = flag;}
- // The Scene
- static PhysicsSceneClass *Get_Scene( void );
- static SimpleSceneClass *Get_Background_Scene( void ) { return BackgroundScene; }
- static CCameraClass *Get_Camera( void ) { return MainCamera; }
- static SoundEnvironmentClass *Get_Sound_Environment( void ) { return SoundEnvironment; }
- static void Set_Camera_Profile( const char * profile_name );
- static void Set_Camera_Vehicle( VehicleGameObj * obj, int seat = 0 );
- static bool Is_In_Camera_Frustrum(Vector3 & position);
- static bool Are_Observers_Active( void ) { return AreObserversActive; }
- static void Set_Observers_Active( bool onoff ) { AreObserversActive = onoff; }
- static bool Is_First_Load( void ) { return IsFirstLoad; }
- static void Set_First_Load( bool onoff ) { IsFirstLoad = onoff; }
- static void Do_Skeleton_Slider_Demo( void );
- static void Toggle_Skeleton_Slider_Demo( void ) { EnableSkeletonSliderDemo = !EnableSkeletonSliderDemo; }
- static bool Is_Skeleton_Slider_Demo_Enabled( void ) { return EnableSkeletonSliderDemo; }
- static DazzleLayerClass * Get_Dazzle_Layer(void) { return DazzleLayer; }
- // First Person
- static void Set_First_Person( bool on_off ) { FirstPerson = on_off; }
- static bool Is_First_Person( void ) { return FirstPerson; }
- static void Set_First_Person_Default( bool on_off ) { FirstPersonDefault = on_off; }
- static bool Get_First_Person_Default( void ) { return FirstPersonDefault; }
- // Difficulty
- static void Set_Difficulty_Level( int level ) { DifficultyLevel = level; }
- static int Get_Difficulty_Level( void ) { return DifficultyLevel; }
- static bool Are_Transitions_Automatic( void ) { return AutoTransitions; }
- static void Set_Transitions_Automatic( bool state ) { AutoTransitions = state; }
- // Message window
- static MessageWindowClass * Get_Message_Window (void) { return MessageWindow; }
- static void Show_Star_Damage_Direction( int direction ) { StarDamageDirection |= 1 << (direction&7); }
- static int Get_Star_Damage_Direction( void ) { return StarDamageDirection; }
- static void Clear_Star_Damage_Direction( void ) { StarDamageDirection = 0; }
- static int Get_Sync_Time( void ) { return SyncTime; }
- static bool Is_Game_Paused( void ) { return IsGamePaused; }
- static void Register_Star_Killer( ArmedGameObj * killer );
- static const char * Get_Start_Script( void ) { return StartScript; }
- static const char * Get_Respawn_Script( void ) { return RespawnScript; }
- static void Set_Start_Script( const char * string ) { StartScript = string; }
- static void Set_Respawn_Script( const char * string ) { RespawnScript = string; }
- static void Request_Autosave( bool state = true ) { AutosaveRequested = state; }
- static bool Is_Autosave_Requested( void ) { return AutosaveRequested; }
- static int Get_Reload_Count( void ) { return ReloadCount; }
- static bool Is_Hit_Reticle_Enabled( void ) { return HitReticleEnabled; }
- static void Toggle_Hit_Reticle_Enabled( void ) { HitReticleEnabled = !HitReticleEnabled; }
- static const char * Get_Last_LSD_Name( void ) { return LastLSDName; };
- static void Set_Last_LSD_Name( const char * name ) { LastLSDName = name; };
- static int Get_Load_Progress( void ) { return LoadProgress; };
- static void Inc_Load_Progress( void ) { LoadProgress++; };
- static void Set_Load_Progress( int set ) { LoadProgress = set; };
- private:
- static bool IAmServer;
- static bool IAmClient;
- static bool IAmOnlyClient;
- static bool IAmOnlyServer;
- static int MyId;
- static int SyncTime;
- static bool IsGamePaused;
- static bool IsLevelInitialized;
- static bool FriendlyFirePermitted;
- static bool BeaconPlacementEndsGame;
- static bool FirstPerson;
- static bool FirstPersonDefault;
- static CCameraClass * MainCamera;
- static SimpleSceneClass * BackgroundScene;
- static SoundEnvironmentClass * SoundEnvironment;
- static DazzleLayerClass * DazzleLayer;
- static MessageWindowClass * MessageWindow;
- static GameObjReference TheStar;
- static bool IsStarDeterminingTarget;
- static bool IsFirstLoad;
- static bool AreObserversActive;
- static bool EnableSkeletonSliderDemo;
- static int DifficultyLevel;
- static bool AutoTransitions;
- static int StarDamageDirection;
- static int StarKillerID;
- static CombatNetworkHandlerClass * NetworkHandler;
- static CombatMiscHandlerClass * MiscHandler;
- static StringClass StartScript;
- static StringClass RespawnScript;
- static int ReloadCount;
- static bool HitReticleEnabled;
- static bool IsGameplayPermitted;
- /*
- ** Combat Mode Management
- */
- typedef enum {
- COMBAT_MODE_NONE,
- COMBAT_MODE_FIRST_PERSON,
- COMBAT_MODE_THIRD_PERSON,
- COMBAT_MODE_SNIPING,
- COMBAT_MODE_IN_VEHICLE,
- COMBAT_MODE_ON_LADDER,
- COMBAT_MODE_DIEING,
- COMBAT_MODE_CORPSE,
- COMBAT_MODE_SNAP_SHOT,
- };
- static int CombatMode;
- static bool AutosaveRequested;
- static void Set_Combat_Mode( int mode );
- static void Update_Combat_Mode( void );
- /*
- ** Latency Support
- */
- static DWORD LastRoundTripPingMs;
- static DWORD AvgRoundTripPingMs;
- static StringClass LastLSDName;
- static int LoadProgress;
- static bool MultiplayRenderingAllowed;
- };
- #endif
|