mirror of
https://github.com/UberGames/EF2GameSource.git
synced 2024-11-30 15:10:51 +00:00
128 lines
3.1 KiB
C++
128 lines
3.1 KiB
C++
//-----------------------------------------------------------------------------
|
|
//
|
|
// $Logfile:: /Code/DLLs/game/misc.cpp $
|
|
// $Revision:: 13 $
|
|
// $Author:: Steven $
|
|
// $Date:: 2/18/02 1:35p $
|
|
//
|
|
// Copyright (C) 2002 by Ritual Entertainment, Inc.
|
|
// All rights reserved.
|
|
//
|
|
// This source is may not be distributed and/or modified without
|
|
// expressly written permission by Ritual Entertainment, Inc.
|
|
//
|
|
// DESCRIPTION:
|
|
// This is all the dispensing type objects in the world. They basically work
|
|
// by the player using them. As the player uses them they give the player
|
|
// something (health/ammo/etc.).
|
|
//
|
|
|
|
#ifndef __DISPENSER_HPP__
|
|
#define __DISPENSER_HPP__
|
|
|
|
//#include "g_local.h"
|
|
#include "entity.h"
|
|
|
|
//------------------------- CLASS ------------------------------
|
|
//
|
|
// Name: Dispenser
|
|
// Base Class: Entity
|
|
//
|
|
// Description: This is an entity that dispenses stuff (health, ammo, etc)
|
|
// to anything that uses it
|
|
//
|
|
// Method of Use: Just like any entity.
|
|
//
|
|
//--------------------------------------------------------------
|
|
|
|
class Dispenser : public Entity
|
|
{
|
|
typedef enum
|
|
{
|
|
DISPENSE_TYPE_NONE,
|
|
DISPENSE_TYPE_HEALTH,
|
|
DISPENSE_TYPE_AMMO,
|
|
DISPENSE_TYPE_ARMOR
|
|
} DispenseType;
|
|
|
|
typedef enum
|
|
{
|
|
DISPENSER_STATE_CLOSED,
|
|
DISPENSER_STATE_CLOSING,
|
|
DISPENSER_STATE_OPEN,
|
|
DISPENSER_STATE_OPENING,
|
|
DISPENSER_STATE_EMPTY,
|
|
DISPENSER_STATE_EMPTYING
|
|
} DispenserState;
|
|
|
|
private:
|
|
float _maxAmount;
|
|
float _amount;
|
|
float _dispenseRate;
|
|
float _regenRate;
|
|
DispenseType _dispenseType;
|
|
str _dispenseSubtype;
|
|
float _lastTimeUsed;
|
|
DispenserState _state;
|
|
float _openDistance;
|
|
bool _instant;
|
|
SentientPtr _entityDispensingTo;
|
|
str _useSoundName;
|
|
bool _playingSound;
|
|
float _lastSoundTime;
|
|
|
|
protected:
|
|
void setDispenserAlpha( void );
|
|
bool dispenseStuff( Sentient *sent );
|
|
|
|
public:
|
|
|
|
CLASS_PROTOTYPE( Dispenser );
|
|
|
|
Dispenser();
|
|
|
|
/* virtual */ void Think( void );
|
|
void useEvent( Event *ev );
|
|
|
|
void setMaxAmount( Event *ev );
|
|
void setDispenseRate( Event *ev );
|
|
void setRegenRate( Event *ev );
|
|
void setType( Event *ev );
|
|
void setSubtype( Event *ev );
|
|
void setOpenDistance( Event *ev );
|
|
void setInstant( Event *ev );
|
|
void setSoundName( Event *ev );
|
|
|
|
void animDone( Event * );
|
|
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void Dispenser::Archive( Archiver &arc )
|
|
{
|
|
Entity::Archive( arc );
|
|
|
|
arc.ArchiveFloat( &_maxAmount );
|
|
arc.ArchiveFloat( &_amount );
|
|
arc.ArchiveFloat( &_dispenseRate );
|
|
arc.ArchiveFloat( &_regenRate );
|
|
|
|
ArchiveEnum( _dispenseType, DispenseType );
|
|
|
|
arc.ArchiveString( &_dispenseSubtype );
|
|
arc.ArchiveFloat( &_lastTimeUsed );
|
|
|
|
ArchiveEnum( _state, DispenserState );
|
|
|
|
arc.ArchiveFloat( &_openDistance );
|
|
|
|
arc.ArchiveBool( &_instant );
|
|
|
|
arc.ArchiveSafePointer( &_entityDispensingTo );
|
|
|
|
arc.ArchiveString( &_useSoundName );
|
|
arc.ArchiveBool( &_playingSound );
|
|
arc.ArchiveFloat( &_lastSoundTime );
|
|
}
|
|
|
|
#endif /* Dispenser.h */
|