This repository has been archived on 2024-06-13. You can view files and clone it, but cannot push or open issues or pull requests.
2020-08-04 13:13:01 -04:00

105 lines
2.9 KiB
C++

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef ITEMS_H
#define ITEMS_H
#ifdef _WIN32
#pragma once
#endif
#include "entityoutput.h"
#include "player_pickup.h"
#include "vphysics/constraints.h"
// Armor given by a battery
#define MAX_NORMAL_BATTERY 100
// Ammo counts given by ammo items
#define SIZE_AMMO_PISTOL 20
#define SIZE_AMMO_PISTOL_LARGE 100
#define SIZE_AMMO_SMG1 45
#define SIZE_AMMO_SMG1_LARGE 225
#define SIZE_AMMO_AR2 20
#define SIZE_AMMO_AR2_LARGE 100
#define SIZE_AMMO_RPG_ROUND 1
#define SIZE_AMMO_SMG1_GRENADE 1
#define SIZE_AMMO_BUCKSHOT 20
#define SIZE_AMMO_357 6
#define SIZE_AMMO_357_LARGE 20
#define SIZE_AMMO_CROSSBOW 6
#define SIZE_AMMO_AR2_ALTFIRE 1
#define SF_ITEM_START_CONSTRAINED 0x00000001
class CItem : public CBaseAnimating, public CDefaultPlayerPickupVPhysics {
public:
DECLARE_CLASS(CItem, CBaseAnimating);
CItem();
virtual void Spawn(void);
virtual void Precache();
unsigned int PhysicsSolidMaskForEntity(void) const;
virtual CBaseEntity *Respawn(void);
virtual void ItemTouch(CBaseEntity *pOther);
virtual void Materialize(void);
virtual bool MyTouch(CBasePlayer *pPlayer) { return false; };
// Become touchable when we are at rest
virtual void OnEntityEvent(EntityEvent_t event, void *pEventData);
// Activate when at rest, but don't allow pickup until then
void ActivateWhenAtRest(float flTime = 0.5f);
// IPlayerPickupVPhysics
virtual void OnPhysGunPickup(CBasePlayer *pPhysGunUser,
PhysGunPickup_t reason = PICKED_UP_BY_CANNON);
virtual void OnPhysGunDrop(CBasePlayer *pPhysGunUser, PhysGunDrop_t reason);
virtual int ObjectCaps() {
return BaseClass::ObjectCaps() | FCAP_IMPULSE_USE |
FCAP_WCEDIT_POSITION;
};
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller,
USE_TYPE useType, float value);
Vector GetOriginalSpawnOrigin(void) { return m_vOriginalSpawnOrigin; }
QAngle GetOriginalSpawnAngles(void) { return m_vOriginalSpawnAngles; }
void SetOriginalSpawnOrigin(const Vector &origin) {
m_vOriginalSpawnOrigin = origin;
}
void SetOriginalSpawnAngles(const QAngle &angles) {
m_vOriginalSpawnAngles = angles;
}
bool CreateItemVPhysicsObject(void);
virtual bool ItemCanBeTouchedByPlayer(CBasePlayer *pPlayer);
#if defined(HL2MP) || defined(TF_DLL)
void FallThink(void);
float m_flNextResetCheckTime;
#endif
DECLARE_DATADESC();
protected:
virtual void ComeToRest(void);
bool m_bActivateWhenAtRest;
private:
COutputEvent m_OnPlayerTouch;
COutputEvent m_OnCacheInteraction;
Vector m_vOriginalSpawnOrigin;
QAngle m_vOriginalSpawnAngles;
IPhysicsConstraint *m_pConstraint;
};
#endif // ITEMS_H