You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
3.1 KiB
143 lines
3.1 KiB
/*** |
|
* |
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved. |
|
* |
|
* This product contains software technology licensed from Id |
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc. |
|
* All Rights Reserved. |
|
* |
|
* Use, distribution, and modification of this source code and/or resulting |
|
* object code is restricted to non-commercial enhancements to products from |
|
* Valve LLC. All other use, distribution, or modification is prohibited |
|
* without written permission from Valve LLC. |
|
* |
|
****/ |
|
// |
|
// ammohistory.h |
|
// |
|
#pragma once |
|
#if !defined(AMMOHISTORY_H) |
|
#define AMMOHISTORY_H |
|
|
|
// this is the max number of items in each bucket |
|
#define MAX_WEAPON_POSITIONS MAX_WEAPON_SLOTS |
|
|
|
class WeaponsResource |
|
{ |
|
private: |
|
// Information about weapons & ammo |
|
WEAPON rgWeapons[MAX_WEAPONS]; // Weapons Array |
|
|
|
// counts of weapons * ammo |
|
WEAPON* rgSlots[MAX_WEAPON_SLOTS + 1][MAX_WEAPON_POSITIONS + 1]; // The slots currently in use by weapons. The value is a pointer to the weapon; if it's NULL, no weapon is there |
|
int riAmmo[MAX_AMMO_TYPES]; // count of each ammo type |
|
|
|
public: |
|
void Init( void ) |
|
{ |
|
memset( rgWeapons, 0, sizeof rgWeapons ); |
|
Reset(); |
|
} |
|
|
|
void Reset( void ) |
|
{ |
|
iOldWeaponBits = 0; |
|
memset( rgSlots, 0, sizeof rgSlots ); |
|
memset( riAmmo, 0, sizeof riAmmo ); |
|
} |
|
|
|
///// WEAPON ///// |
|
int iOldWeaponBits; |
|
|
|
WEAPON *GetWeapon( int iId ) { return &rgWeapons[iId]; } |
|
void AddWeapon( WEAPON *wp ) |
|
{ |
|
rgWeapons[wp->iId] = *wp; |
|
LoadWeaponSprites( &rgWeapons[wp->iId] ); |
|
} |
|
|
|
void PickupWeapon( WEAPON *wp ) |
|
{ |
|
rgSlots[wp->iSlot][wp->iSlotPos] = wp; |
|
} |
|
|
|
void DropWeapon( WEAPON *wp ) |
|
{ |
|
rgSlots[wp->iSlot][wp->iSlotPos] = NULL; |
|
} |
|
|
|
void DropAllWeapons( void ) |
|
{ |
|
for( int i = 0; i < MAX_WEAPONS; i++ ) |
|
{ |
|
if( rgWeapons[i].iId ) |
|
DropWeapon( &rgWeapons[i] ); |
|
} |
|
} |
|
|
|
WEAPON* GetWeaponSlot( int slot, int pos ) { return rgSlots[slot][pos]; } |
|
|
|
void LoadWeaponSprites( WEAPON* wp ); |
|
void LoadAllWeaponSprites( void ); |
|
WEAPON* GetFirstPos( int iSlot ); |
|
void SelectSlot( int iSlot, int fAdvance, int iDirection ); |
|
WEAPON* GetNextActivePos( int iSlot, int iSlotPos ); |
|
|
|
int HasAmmo( WEAPON *p ); |
|
|
|
///// AMMO ///// |
|
AMMO GetAmmo( int iId ) { return iId; } |
|
|
|
void SetAmmo( int iId, int iCount ) { riAmmo[ iId ] = iCount; } |
|
|
|
int CountAmmo( int iId ); |
|
|
|
HSPRITE* GetAmmoPicFromWeapon( int iAmmoId, wrect_t& rect ); |
|
}; |
|
|
|
extern WeaponsResource gWR; |
|
|
|
#define MAX_HISTORY 12 |
|
enum { |
|
HISTSLOT_EMPTY, |
|
HISTSLOT_AMMO, |
|
HISTSLOT_WEAP, |
|
HISTSLOT_ITEM |
|
}; |
|
|
|
class HistoryResource |
|
{ |
|
private: |
|
struct HIST_ITEM { |
|
int type; |
|
float DisplayTime; // the time at which this item should be removed from the history |
|
int iCount; |
|
int iId; |
|
}; |
|
|
|
HIST_ITEM rgAmmoHistory[MAX_HISTORY]; |
|
|
|
public: |
|
|
|
void Init( void ) |
|
{ |
|
Reset(); |
|
} |
|
|
|
void Reset( void ) |
|
{ |
|
memset( rgAmmoHistory, 0, sizeof rgAmmoHistory ); |
|
} |
|
|
|
int iHistoryGap; |
|
int iCurrentHistorySlot; |
|
|
|
void AddToHistory( int iType, int iId, int iCount = 0 ); |
|
void AddToHistory( int iType, const char *szName, int iCount = 0 ); |
|
|
|
void CheckClearHistory( void ); |
|
int DrawAmmoHistory( float flTime ); |
|
}; |
|
|
|
extern HistoryResource gHR; |
|
#endif // AMMOHISTORY_H
|
|
|