This repository has been archived on 2025-02-27. You can view files and clone it, but cannot push or open issues or pull requests.
CnC_Renegade/Code/Combat/weaponmanager.h

223 lines
7.1 KiB
C
Raw Permalink Normal View History

/*
** 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/weaponmanager.h $*
* *
* $Author:: Byon_g $*
* *
* $Modtime:: 1/02/02 3:05p $*
* *
* $Revision:: 64 $*
* *
*---------------------------------------------------------------------------------------------*
* Functions: *
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
#ifndef WEAPONMANAGER_H
#define WEAPONMANAGER_H
#ifndef ALWAYS_H
#include "always.h"
#endif
#ifndef WWSTRING_H
#include "wwstring.h"
#endif
#ifndef DEFINITION_H
#include "definition.h"
#endif
#ifndef _DATASAFE_H
#include "..\commando\datasafe.h"
#endif //_DATASAFE_H
class WeaponClass;
/*
** Weapon Definition Structure - These describe the basic functionality of
** a weapon, and CANNOT be modified by instances
*/
class WeaponDefinitionClass : public DefinitionClass {
public:
WeaponDefinitionClass( void );
virtual uint32 Get_Class_ID( void ) const;
virtual PersistClass * Create( void ) const { WWASSERT( 0 ); return NULL; }
virtual bool Save( ChunkSaveClass &csave );
virtual bool Load( ChunkLoadClass &cload );
virtual const PersistFactoryClass & Get_Factory( void ) const;
DECLARE_EDITABLE( WeaponDefinitionClass, DefinitionClass );
bool operator == ( const WeaponDefinitionClass & vector) const { return false; }
bool operator != ( const WeaponDefinitionClass & vector) const { return true; }
int Style;
StringClass Model;
StringClass IdleAnim;
StringClass FireAnim;
StringClass BackModel;
// int LegacyFireSoundDefID;
float SwitchTime;
safe_float ReloadTime;
float KeyNumber;
bool CanSnipe;
bool CanReceiveGenericCnCAmmo;
float Rating;
int EjectPhysDefID;
int MuzzleFlashPhysDefID;
StringClass FirstPersonModel;
Vector3 FirstPersonOffset;
float RecoilImpulse;
StringClass HUDIconTextureName;
int ReloadSoundDefID;
int EmptySoundDefID;
int PrimaryAmmoDefID;
int SecondaryAmmoDefID;
safe_int ClipSize;
float RecoilTime;
float RecoilScale;
bool AGiveWeaponsWeapon;
safe_int MaxInventoryRounds;
int IconNameID;
StringClass IconTextureName;
RectClass IconTextureUV;
Vector2 IconOffset;
StringClass HumanFiringAnimation;
};
/*
**
*/
class AmmoDefinitionClass : public DefinitionClass {
public:
enum {
AMMO_TYPE_NORMAL,
AMMO_TYPE_C4_REMOTE,
AMMO_TYPE_C4_TIMED,
AMMO_TYPE_C4_PROXIMITY,
};
AmmoDefinitionClass( void );
virtual uint32 Get_Class_ID( void ) const;
virtual PersistClass * Create( void ) const { WWASSERT( 0 ); return NULL; }
virtual bool Save( ChunkSaveClass &csave );
virtual bool Load( ChunkLoadClass &cload );
virtual const PersistFactoryClass & Get_Factory( void ) const;
DECLARE_EDITABLE( AmmoDefinitionClass, DefinitionClass );
bool operator == ( const AmmoDefinitionClass & vector) const { return false; }
bool operator != ( const AmmoDefinitionClass & vector) const { return true; }
StringClass ModelFilename;
StringClass ModelName;
safe_int Warhead;
safe_float Damage;
safe_float Range;
safe_float Velocity;
float Gravity;
float Elasticity;
float RateOfFire;
float SprayAngle;
safe_int SprayCount;
StringClass TrailEmitter;
float AquireTime;
float BurstDelayTime;
safe_int BurstMax;
int SoftPierceLimit;
float TurnRate;
bool TimeActivated;
bool TerrainActivated;
bool IsTracking;
safe_float EffectiveRange;
int ExplosionDefID;
float RandomTrackingScale;
bool DisplayLaser;
safe_float ChargeTime;
int ContinuousSoundDefID;
int FireSoundDefID;
StringClass ContinuousEmitterName;
int MaxBounces;
int SprayBulletCost;
safe_int AmmoType;
float C4TriggerTime1;
float C4TriggerTime2;
float C4TriggerTime3;
float C4TriggerRange1;
float C4TriggerRange2;
float C4TriggerRange3;
int C4TimingSound1ID;
int C4TimingSound2ID;
int C4TimingSound3ID;
float AliasedSpeed;
int HitterType;
int BeaconDefID;
bool BeamEnabled; // enable/disable usage of beam for instant bullets
Vector3 BeamColor;
float BeamTime; // seconds
float BeamWidth; // meters
bool BeamEndCaps; // put end-caps on the beam?
StringClass BeamTexture; // texture filename
bool BeamSubdivisionEnabled; // boolean; we use fixed subdivision count
float BeamSubdivisionScale; // normalized amplitude.
bool BeamSubdivisionFrozen; // animated or frozen subdivision
int IconNameID;
StringClass IconTextureName;
RectClass IconTextureUV;
Vector2 IconOffset;
float GrenadeSafetyTime;
};
/*
** Weapon Manager
*/
class WeaponManager {
public:
static const WeaponDefinitionClass *Find_Weapon_Definition( const char *name );
static const WeaponDefinitionClass *Find_Weapon_Definition( int id );
static const AmmoDefinitionClass *Find_Ammo_Definition( const char *ammo_name );
static const AmmoDefinitionClass *Find_Ammo_Definition( int id );
static bool Is_Weapon_Help_Disabled( void ) { return IsWeaponHelpDisabled; }
static void Set_Weapon_Help_Disabled( bool state ) { IsWeaponHelpDisabled = state; }
private:
static bool IsWeaponHelpDisabled;
};
#endif // WEAPONMANAGER_H