142 lines
2.9 KiB
C++
142 lines
2.9 KiB
C++
/***
|
|
*
|
|
* 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
|
|
|
|
// 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()
|
|
{
|
|
memset(rgWeapons, 0, sizeof rgWeapons);
|
|
Reset();
|
|
}
|
|
|
|
void Reset()
|
|
{
|
|
iOldWeaponBits = 0;
|
|
memset(rgSlots, 0, sizeof rgSlots);
|
|
memset(riAmmo, 0, sizeof riAmmo);
|
|
}
|
|
|
|
///// WEAPON /////
|
|
std::uint64_t 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()
|
|
{
|
|
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();
|
|
WEAPON* GetFirstPos(int iSlot);
|
|
void SelectSlot(int iSlot, bool fAdvance, int iDirection);
|
|
WEAPON* GetNextActivePos(int iSlot, int iSlotPos);
|
|
|
|
bool HasAmmo(WEAPON* p);
|
|
|
|
///// AMMO /////
|
|
void SetAmmo(int iId, int iCount) { riAmmo[iId] = iCount; }
|
|
|
|
int CountAmmo(int iId);
|
|
|
|
HSPRITE* GetAmmoPicFromWeapon(int iAmmoId, Rect& 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()
|
|
{
|
|
Reset();
|
|
}
|
|
|
|
void Reset()
|
|
{
|
|
memset(rgAmmoHistory, 0, sizeof rgAmmoHistory);
|
|
iCurrentHistorySlot = 0;
|
|
}
|
|
|
|
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();
|
|
bool DrawAmmoHistory(float flTime);
|
|
};
|
|
|
|
extern HistoryResource gHR;
|