/* ** 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/armedgameobj.h $* * * * $Author:: Tom_s $* * * * $Modtime:: 9/17/01 4:18p $* * * * $Revision:: 23 $* * * *---------------------------------------------------------------------------------------------* * Functions: * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ #ifndef ARMEDGAMEOBJ_H #define ARMEDGAMEOBJ_H #ifndef ALWAYS_H #include "always.h" #endif #ifndef PHYSICALGAMEOBJ_H #include "physicalgameobj.h" #endif #ifndef MUZZLERECOIL_H #include "muzzlerecoil.h" #endif /* ** */ class WeaponClass; class WeaponBagClass; /* ** ArmedGameObjDef - Defintion class for a ArmedGameObj */ class ArmedGameObjDef : public PhysicalGameObjDef { public: ArmedGameObjDef( void ); // 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; DECLARE_EDITABLE( ArmedGameObjDef, PhysicalGameObjDef ); protected: float WeaponTiltRate; float WeaponTiltMin; float WeaponTiltMax; float WeaponTurnRate; float WeaponTurnMin; float WeaponTurnMax; float WeaponError; int WeaponDefID; int SecondaryWeaponDefID; safe_int WeaponRounds; friend class ArmedGameObj; }; /* ** */ class ArmedGameObj : public PhysicalGameObj { public: // Constructor and Destructor ArmedGameObj( void ); virtual ~ArmedGameObj( void ); // Definitions void Init( const ArmedGameObjDef & definition ); void Copy_Settings( const ArmedGameObjDef & definition ); void Re_Init( const ArmedGameObjDef & definition ); const ArmedGameObjDef & Get_Definition( void ) const ; // Save / Load virtual bool Save( ChunkSaveClass & csave ); virtual bool Load( ChunkLoadClass & cload ); virtual void On_Post_Load( void ); // State import/export virtual void Import_Frequent( BitStreamClass & packet ); virtual void Export_Frequent( BitStreamClass & packet ); virtual void Import_State_Cs( BitStreamClass & packet ); virtual void Export_State_Cs( BitStreamClass & packet ); // Thinking virtual void Post_Think(); // Weapon WeaponClass * Get_Weapon( void ); WeaponBagClass * Get_Weapon_Bag( void ) { return WeaponBag; } bool Muzzle_Exists( int index = 0 ); virtual const Matrix3D &Get_Muzzle( int index = 0 ); void Start_Recoil( int muzzle_index,float recoil_scale,float recoil_time ); float Get_Weapon_Error( void ) { return Get_Definition().WeaponError; } // Targeting Vector3 Get_Targeting_Pos( void ) { return TargetingPos; } virtual bool Set_Targeting( const Vector3 & pos, bool do_tilt = true ); // Type identification virtual ArmedGameObj *As_ArmedGameObj( void ) { return this; } protected: WeaponBagClass * WeaponBag; // Weapon & Ammo collection private: Vector3 TargetingPos; int MuzzleA0Bone; // YUCK!!! int MuzzleA1Bone; int MuzzleB0Bone; int MuzzleB1Bone; enum { MAX_MUZZLES = 4 }; MuzzleRecoilClass MuzzleRecoilController[MAX_MUZZLES]; void Init_Muzzle_Bones( void ); }; #endif // ARMEDGAMEOBJ_H