sof-sdk/Source/Game/player/w_equip_misc.cpp
2000-06-15 00:00:00 +00:00

118 lines
2.7 KiB
C++

#include "q_shared.h"
#include "..\ghoul\ighoul.h"
#include "w_public.h"
#include "w_types.h"
#include "w_weapons.h"
#include "w_utils.h"
#include "player.h"
#include "../gamecpp/game.h"
#include "w_equipment.h"
extern player_com_import_t picom;
extern player_cl_import_t picl;
extern player_sv_import_t pisv;
extern int isClient;
//------------------------------------------------------------------------------------
#define GOGGLE_MAX_POWER 100
#define GOGGLE_DRAIN_TIME 0.3
#define GOGGLE_CHARGE_TIME 0.5
lightGogglesInfo::lightGogglesInfo(void):itemInfo_c(){}
void lightGogglesInfo::frameUpdate(sharedEdict_t &ent, itemSlot_c &slot)
{
int power;
float nextupdate;
// Obviously we only care if the client has the goggles on. If it isn't the client, it doesn't matter much.
if (!isClient)
{
if (slot.getSlotStatus())
{ // If the goggles are on.
nextupdate = slot.getSlotUpdateTime();
if (*(pisv.levelTime) > nextupdate)
{
power = slot.getSlotCount();
power--;
if (power<=0)
{ // Out of power, turn the goggles off.
slot.setSlotStatus(0);
slot.setSlotCount(0);
pisv.goggleuse(*(ent.edict), slot);
return; // Don't keep draining energy.
}
slot.setSlotCount(power);
nextupdate = *(pisv.levelTime) + GOGGLE_DRAIN_TIME;
slot.setSlotUpdateTime(nextupdate);
}
}
else
{ // The goggles are off.
nextupdate = slot.getSlotUpdateTime();
while (*(pisv.levelTime) > nextupdate)
{
power = slot.getSlotCount();
if (power<GOGGLE_MAX_POWER)
{
power++;
slot.setSlotCount(power);
}
nextupdate = *(pisv.levelTime) + GOGGLE_CHARGE_TIME;
slot.setSlotUpdateTime(nextupdate);
}
}
}
}
bool lightGogglesInfo::use(edict_t &ent, itemSlot_c &slot)
{
if(!isClient)
{
if (slot.getSlotStatus())
{
slot.setSlotStatus(0);
slot.setSlotUpdateTime(*(pisv.levelTime) + GOGGLE_CHARGE_TIME);
}
else
{
slot.setSlotStatus(1);
slot.setSlotUpdateTime(*(pisv.levelTime) + GOGGLE_DRAIN_TIME);
}
// Let the server know that the goggles changed.
pisv.goggleuse(ent, slot);
}
else
;
return true;
}
void lightGogglesInfo::deactivate(edict_t &ent, itemSlot_c &slot)
{
if (!isClient)
{
slot.setSlotStatus(0);
pisv.goggleuse(ent, slot);
}
}
//------------------------------------------------------------------------------------
medkitInfo::medkitInfo(void):itemInfo_c(){}
void medkitInfo::frameUpdate(sharedEdict_t &ent, itemSlot_c &slot)
{
}
bool medkitInfo::use(edict_t &ent, itemSlot_c &slot)
{
if(!isClient)
return pisv.medkituse(ent, slot);
else
return true;
}