/*** * * Copyright (c) 1999, 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. * * Modified by Charles G. Cleveland * * $Workfile: ammohistory.h $ * $Date: 2002/06/25 17:05:31 $ * *------------------------------------------------------------------------------- * $Log: ammohistory.h,v $ * Revision 1.3 2002/06/25 17:05:31 Flayra * - Weapon enabling/disabling works differently now * *=============================================================================== ****/ // // ammohistory.h // // this is the max number of items in each bucket //#define MAX_WEAPON_POSITIONS MAX_WEAPON_SLOTS #define MAX_WEAPON_POSITIONS 10 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 //client-side lastinv WEAPON* lastWeapon; public: void Init(void); void Reset( void ) { iOldWeaponBits = 0; memset( rgSlots, 0, sizeof rgSlots ); memset( riAmmo, 0, sizeof riAmmo ); lastWeapon = NULL; } ///// 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; if(lastWeapon == wp) //dropped last weapon, remove it from the list { lastWeapon = 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 ); void UserCmd_LastInv(void); void SetValidWeapon(void); void SetCurrentWeapon(WEAPON* wp); int IsEnabled( WEAPON *p ); int IsSelectable(WEAPON *p); int HasAmmo( WEAPON *p ); ///// AMMO ///// AMMO GetAmmo( int iId ) { return riAmmo[ 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;