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/playerdata.h

213 lines
8.6 KiB
C++

/*
** 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/playerdata.h $*
* *
* $Author:: Byon_g $*
* *
* $Modtime:: 3/29/02 3:42p $*
* *
* $Revision:: 25 $*
* *
*---------------------------------------------------------------------------------------------*
* Functions: *
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
#ifndef PLAYERDATA_H
#define PLAYERDATA_H
#ifndef ALWAYS_H
#include "always.h"
#endif
#ifndef GAMEOBJREF_H
#include "gameobjref.h"
#endif
#ifndef _DATASAFE_H
#include "..\commando\datasafe.h"
#endif //_DATASAFE_H
#ifndef SIMPLEVEC_H
#include "simplevec.h"
#endif
class ChunkSaveClass;
class ChunkLoadClass;
class DamageableGameObj;
class SmartGameObj;
class BitStreamClass;
/*
** PlayerDataClass
**
** This class maintains the score and statistics for human player.
** It is intended that the Commando code will derive a custom version,
** and install it into each Human Player controlled SoldierGameObj.
** When the SoldierGameObj dies, a new one should be created and the
** same PlayerDataClass should be plugged into the new SoldierGameObj
**
** It is the creators responsibility to save and restore these classes,
** and to re-install into the GameObjs after load.
*/
class PlayerDataClass
{
public:
PlayerDataClass( void );
~PlayerDataClass( void );
virtual void Reset_Player(void);
bool Save(ChunkSaveClass & csave);
bool Load(ChunkLoadClass & cload);
void Set_GameObj( SmartGameObj * soldier ) { GameObj = (ScriptableGameObj*)soldier; }
SmartGameObj * Get_GameObj( void ) { return (SmartGameObj*)(GameObj.Get_Ptr()); }
// Score access
float Get_Score( void ) const { return (float)Score; }
virtual void Set_Score( float score ) { Score = score; }
virtual void Increment_Score( float add );
// Money access
float Get_Money( void ) const { return (float)Money; }
virtual void Set_Money( float money ) { Money = money; }
virtual void Increment_Money( float add );
virtual bool Purchase_Item( int cost );
// Damage Notification
virtual void Apply_Damage_Points( float points, DamageableGameObj * victim );
virtual void Apply_Death_Points( float points, DamageableGameObj * victim );
// Network support
void Import_Occasional( BitStreamClass & packet );
void Export_Occasional( BitStreamClass & packet );
// Stats
void Stats_Reset( void );
void Stats_Add_Game_Time( float time ) { StatTimeInGame += time; StatTimeInSession+=time; }
void Stats_Add_Enemy_Killed( void ) { StatEnemiesKilled++; }
void Stats_Add_Ally_Killed( void ) { StatAlliesKilled++; }
void Stats_Add_Shot_Fired( void ) { StatShotsFired++; }
void Stats_Add_Head_Shot( void ) { StatHeadShots++; }
void Stats_Add_Torso_Shot( void ) { StatTorsoShots++; }
void Stats_Add_Arm_Shot( void ) { StatArmShots++; }
void Stats_Add_Leg_Shot( void ) { StatLegShots++; }
void Stats_Add_Crotch_Shot( void ) { StatCrotchShots++; }
void Stats_Set_Final_Health( float health ) { StatFinalHealth = health; }
void Stats_Add_Powerup( void ) { StatPowerups++; }
void Stats_Add_Vehicle_Destroyed( void ) { StatVehiclesDestroyed++; }
void Stats_Add_Vehicle_Time( float time ) { StatTimeInVehicles += time; }
void Stats_Add_Kill_From_Vehicle( void ) { StatKillsFromVehicles++; }
void Stats_Add_Squish( void ) { StatSquishes++; }
void Stats_Add_Credit_Grant( float grant ) { StatCreditsGranted += grant; }
void Stats_Add_Building_Destroyed( void ) { StatBuildingsDestroyed++; }
void Stats_Add_Head_Hit( void ) { StatHeadHits++; }
void Stats_Add_Torso_Hit( void ) { StatTorsoHits++; }
void Stats_Add_Arm_Hit( void ) { StatArmHits++; }
void Stats_Add_Leg_Hit( void ) { StatLegHits++; }
void Stats_Add_Crotch_Hit( void ) { StatCrotchHits++; }
void Stats_Add_Weapon_Fired( int weapon_id );
float Get_Game_Time(void) const {return StatTimeInGame;}
float Get_Session_Time(void) const {return StatTimeInSession;} // Note: This is per-session, it is not saved or loaded!
int Get_Enemies_Killed(void) const {return StatEnemiesKilled;}
int Get_Allies_Killed(void) const {return StatAlliesKilled;}
int Get_Shots_Fired(void) const {return StatShotsFired;}
int Get_Head_Shots(void) const {return StatHeadShots;}
int Get_Torso_Shots(void) const {return StatTorsoShots;}
int Get_Arm_Shots(void) const {return StatArmShots;}
int Get_Leg_Shots(void) const {return StatLegShots;}
int Get_Crotch_Shots(void) const {return StatCrotchShots;}
float Get_Final_Health(void) const {return StatFinalHealth;}
int Get_Powerups_Collected(void) const {return StatPowerups;}
int Get_Vehiclies_Destroyed(void) const {return StatVehiclesDestroyed;}
float Get_Vehicle_Time(void) const {return StatTimeInVehicles;}
int Get_Kills_From_Vehicle(void) const {return StatKillsFromVehicles;}
int Get_Squishes(void) const {return StatSquishes;}
float Get_Credit_Grant(void) const {return StatCreditsGranted;}
int Get_Building_Destroyed(void) const {return StatBuildingsDestroyed;}
int Get_Head_Hit(void) const {return StatHeadHits;}
int Get_Torso_Hit(void) const {return StatTorsoHits;}
int Get_Arm_Hit(void) const {return StatArmHits;}
int Get_Leg_Hit(void) const {return StatLegHits;}
int Get_Crotch_Hit(void) const {return StatCrotchHits;}
int Get_Weapon_Fired_Count( void ) const;
bool Get_Weapon_Fired( int index, unsigned long& weaponID, unsigned long& firedCount) const;
float Get_Punish_Timer( void ) {return PunishTimer;}
void Inc_Punish_Timer( float amount ) {PunishTimer += amount;}
private:
safe_float Score;
safe_float Money;
GameObjReference GameObj;
float PunishTimer;
protected:
float StatTimeInGame;
float StatTimeInSession;
int StatEnemiesKilled;
int StatAlliesKilled;
int StatShotsFired;
int StatHeadShots;
int StatTorsoShots;
int StatArmShots;
int StatLegShots;
int StatCrotchShots;
float StatFinalHealth;
int StatPowerups;
int StatVehiclesDestroyed;
float StatTimeInVehicles;
int StatKillsFromVehicles;
int StatSquishes;
float StatCreditsGranted;
int StatBuildingsDestroyed;
int StatHeadHits;
int StatTorsoHits;
int StatArmHits;
int StatLegHits;
int StatCrotchHits;
int StatLastWeaponIndex;
SimpleDynVecClass<int> StatWeaponIDFired;
SimpleDynVecClass<int> StatWeaponFireCount;
};
#endif // PLAYERDATA_H
//safe_int Score;
//virtual bool Purchase_Item( int cost );
//virtual void On_Kill( int victim_id ) {}
//virtual void On_Kill( int victim_id, int victim_team ) {}