//===== Copyright � 1996-2005, Valve Corporation, All rights reserved. ======//
//
// Purpose: Base combat character with no AI
//
// $NoKeywords: $
//===========================================================================//

#ifndef BASECOMBATCHARACTER_H
#define BASECOMBATCHARACTER_H
#include "baseanimatingoverlay.h"

struct WeaponDropInfo
{
	Vector3D weaponPosition;
	char prevDropFrameCounter;
	char dropFrameCounter;
	char gap_e[2];
	Vector3D weaponAngles;
	float weaponPositionTime;
};

/* 1410 */
struct WeaponInventory
{
	char gap_0[8];
	int weapons[9];
	int offhandWeapons[6];
	int activeWeapons[3];
};

struct CTether
{
	char gap_0[8];
	Vector3D pos;
	float health;
	float nextSoundTime;
	float creationTime;
	int scriptID;
};

//-----------------------------------------------------------------------------
// Purpose: This should contain all of the combat entry points / functionality 
// that are common between NPCs and players
//-----------------------------------------------------------------------------
class CBaseCombatCharacter : public CBaseAnimatingOverlay
{
	bool m_bPreventWeaponPickup;
	char gap_15b1[3];
	float m_phaseShiftTimeStart;
	float m_phaseShiftTimeEnd;
	float m_flNextAttack;
	float m_lastFiredTime;
	int m_lastFiredWeapon;
	float m_raiseFromMeleeEndTime;
	float m_nextFlamethrowerStatusEffectUpdateTime;
	int m_lastFlamethrowerStatusEffectInflictor;
	int m_lastFlamethrowerStatusEffectAttacker;
	int m_sharedEnergyCount;
	int m_sharedEnergyTotal;
	int m_sharedEnergyLockoutThreshold;
	float m_lastSharedEnergyRegenTime;
	float m_sharedEnergyRegenRate;
	float m_sharedEnergyRegenDelay;
	float m_lastSharedEnergyTakeTime;
	int m_eHull;
	float m_fieldOfViewCos;
	Vector3D m_HackedGunPos;
	float m_impactEnergyScale;
	WeaponDropInfo m_weaponDropInfo;
	float m_physicsMass;
	float m_flDamageAccumulator;
	int m_prevHealth;
	float m_healthChangeRate;
	float m_healthChangeAmount;
	float m_healthChangeStartTime;
	float m_lastHealthChangeTime;
	int m_lastHitGroup;
	Vector3D m_lastDamageDir;
	Vector3D m_lastDamageForce;
	int m_deathPackage;
	Vector3D m_deathDirection2DInverse;
	int m_CurrentWeaponProficiency;
	float m_flEnemyAccurcyMultiplier;
	int m_npcPriorityOverride;
	int m_healthPerSegment;
	char gap_1684[4];
	WeaponInventory m_inventory;
	char m_selectedWeapons[2];
	char gap_16da[2];
	int m_latestPrimaryWeapons[2];
	int m_latestPrimaryWeaponsIndexZeroOrOne[2];
	char m_latestNonOffhandWeapons[2];
	char m_selectedOffhands[3];
	char m_selectedOffhandsPendingHybridAction[3];
	char m_lastCycleSlot;
	char gap_16f5[3];
	int m_weaponGettingSwitchedOut[2];
	bool m_showActiveWeapon3p[2];
	char gap_1702[2];
	int m_weaponPermission;
	float m_weaponDelayEnableTime;
	char m_weaponDisabledFlags;
	bool m_hudInfo_visibilityTestAlwaysPasses;
	bool m_weaponDisabledInScript;
	char gap_170f[1];
	int m_removeWeaponOnSelectSwitch;
	int m_latestMeleeWeapon;
	bool m_doOffhandAnim;
	bool m_wantInventoryChangedScriptCall;
	bool m_doInventoryChangedScriptCall;
	char gap_171b[1];
	float m_cloakReactEndTime;
	CTether m_tethers[2];
	char gap_1768[8];
	int m_titanSoul;
	Vector3D m_lastFootstepDamagePos;
	bool m_lastFoostepDamageOnGround;
	char gap_1781[3];
	int m_muzzleAttachment[2];
	int m_weaponHandAttachment;
	int m_weaponAltHandAttachment;
	int m_prevNearestNode;
	int m_nearestNode;
	float m_nearestNodeCheckTime;
	Vector3D m_nearestNodeCheckPos;
	int m_nearestPolyRef[5];
	Vector3D m_nearestPolyCheckPos[5];
	int m_contextAction;
	char m_weaponAnimEvents[16648];
	char m_targetInfoIconName[64];
	bool m_titanStepDamage;
	char gap_5949[3];
	int m_latest3pWeaponGettingEquipped[2];
	char gap_5954[12];
	char m_szNetname[256];
	bool m_zoomViewdriftDebounceEnabled;
	bool m_bZooming;
	char gap_5a62[2];
	float m_zoomToggleOnStartTime;
	float m_zoomBaseFrac;
	float m_zoomBaseTime;
	float m_zoomFullStartTime;
	int m_physicsSolidMask;
	int m_rightHandAttachment;
	int m_leftHandAttachment;
	int m_headAttachment;
	int m_chestAttachment;
};

#endif // BASECOMBATCHARACTER_H
