etqw-sdk/source/game/Item.h

112 lines
3.5 KiB
C++

// Copyright (C) 2007 Id Software, Inc.
//
#ifndef __GAME_ITEM_H__
#define __GAME_ITEM_H__
#include "proficiency/ProficiencyManager.h"
#include "physics/Physics_SimpleRigidBody.h"
class idAnimatedEntity;
/*
===============================================================================
Items the player can pick up or use.
===============================================================================
*/
class idItem : public idEntity {
public:
CLASS_PROTOTYPE( idItem );
idItem();
virtual ~idItem();
void Spawn( void );
virtual bool GiveToPlayer( idPlayer *player );
virtual bool Pickup( idPlayer *player );
virtual bool WantsTouch( void ) const { return true; }
const sdDeclItemPackage* GetItemPackage( void ) { return package; }
virtual bool StartSynced( void ) const { return true; }
enum {
EVENT_PICKUP = idEntity::EVENT_MAXEVENTS,
EVENT_MAXEVENTS
};
virtual void OnPickup( idPlayer *player );
virtual bool ShouldConstructScriptObjectAtSpawn( void ) const { return true; }
virtual bool ClientReceiveEvent( int event, int time, const idBitMsg &msg );
virtual sdTeamInfo* GetGameTeam( void ) const { return team; }
virtual void SetGameTeam( sdTeamInfo* _team ) { team = _team; }
void SetDropper( idEntity* _dropper ) { dropper = _dropper; }
void SetPickupTime( int time ) { pickUpTime = time; }
virtual void OnTouch( idEntity *other, const trace_t& trace );
void Event_GetOwner( void );
protected:
const sdDeclItemPackage* package;
private:
int pickUpTime;
sdTeamInfo* team;
idEntityPtr< idEntity > dropper;
const sdProgram::sdFunction* onPrePickupFunction;
const sdProgram::sdFunction* onPickupFunction;
sdRequirementContainer requirements;
};
class sdMoveableItemNetworkData : public sdEntityStateNetworkData {
public:
sdMoveableItemNetworkData( void ) : physicsData( NULL ) { ; }
virtual ~sdMoveableItemNetworkData( void );
virtual void MakeDefault( void );
virtual void Write( idFile* file ) const;
virtual void Read( idFile* file );
sdEntityStateNetworkData* physicsData;
};
class idMoveableItem : public idItem {
public:
CLASS_PROTOTYPE( idMoveableItem );
idMoveableItem();
virtual ~idMoveableItem();
virtual void OnPickup( idPlayer *player );
void Spawn( void );
virtual void Think( void );
virtual bool Collide( const trace_t& collision, const idVec3& velocity, int bodyId );
virtual bool CanCollide( const idEntity* other, int traceId ) const;
virtual void ApplyNetworkState( networkStateMode_t mode, const sdEntityStateNetworkData& newState );
virtual void ReadNetworkState( networkStateMode_t mode, const sdEntityStateNetworkData& baseState, sdEntityStateNetworkData& newState, const idBitMsg& msg ) const;
virtual void WriteNetworkState( networkStateMode_t mode, const sdEntityStateNetworkData& baseState, sdEntityStateNetworkData& newState, idBitMsg& msg ) const;
virtual bool CheckNetworkStateChanges( networkStateMode_t mode, const sdEntityStateNetworkData& baseState ) const;
virtual sdEntityStateNetworkData* CreateNetworkStructure( networkStateMode_t mode ) const;
virtual void CheckWater( const idVec3& waterBodyOrg, const idMat3& waterBodyAxis, idCollisionModel* waterBodyModel );
private:
sdPhysics_SimpleRigidBody physicsObj;
idClipModel * trigger;
class sdWaterEffects *waterEffects;
};
#endif /* !__GAME_ITEM_H__ */