#pragma once

// Reconstructed C++ declarations from IDA Local Types and PDB/DIA metadata.
// Original PDB header: w:\tech5\engine\gamelib\physics\physics_player.h
// Recovered logical types: 1
// Signatures retain Xbox 360 ABI evidence and may still require manual review.


// IDA Local Type ordinal 15364; PDB kind: class.
class __declspec(align(8)) idPhysics_Player : public idPhysics_Actor
{
public:
  // Recovered virtual interface; IDA vtable ordinal 15365.
  virtual ~idPhysics_Player();
  virtual void SetClipModel(idClipModel *, float, int, bool);
  virtual idClipModel *GetClipModel(int);
  virtual int GetNumClipModels();
  virtual void SetMass(float, int);
  virtual float GetMass(int);
  virtual void SetContents(int, int);
  virtual int GetContents(int);
  virtual void SetClipMask(int, int);
  virtual int GetClipMask(int);
  virtual const idBounds *GetBounds(int);
  virtual const idBounds *GetAbsBounds(int);
  virtual void SetOrigin(const idVec3 *, int);
  virtual void SetAxis(const idMat3 *, int);
  virtual void Translate(const idVec3 *, int);
  virtual void Rotate(const idRotation *, int);
  virtual const idVec3 *GetOrigin(int);
  virtual const idMat3 *GetAxis(int);
  virtual const idVec3 *GetLocalOrigin(int);
  virtual const idMat3 *GetLocalAxis(int);
  virtual void SetLinearVelocity(const idVec3 *, int);
  virtual void SetAngularVelocity(const idVec3 *, int);
  virtual idVec3 *GetLinearVelocity(idVec3 *result, int);
  virtual idVec3 *GetAngularVelocity(idVec3 *result, int);
  virtual void SetGravity(const idVec3 *);
  virtual const idVec3 *GetGravity();
  virtual const idVec3 *GetGravityNormal();
  virtual void SetWaterLevel(float, int);
  virtual float GetWaterLevel(int);
  virtual void SetWaterViscosity(float, int);
  virtual float GetWaterViscosity(int);
  virtual void SetWaterEntNum(int);
  virtual int GetWaterEntNum();
  virtual void SetWaterSurfaceWrldHeight(float);
  virtual float GetWaterSurfaceWrldHeight();
  virtual void GetImpactInfo(const int, const idVec3 *, impactInfo_t *);
  virtual void ApplyImpulse(const int, const idVec3 *, const idVec3 *);
  virtual void ApplyForce(const int, const idVec3 *, const idVec3 *);
  virtual void Activate();
  virtual void PutToRest();
  virtual bool IsAtRest();
  virtual bool IsPushable(int);
  virtual void SaveState();
  virtual void RestoreState();
  virtual bool Evaluate(int, int);
  virtual void UpdateTime(int);
  virtual void ClipTranslation(trace_t *, const idVec3 *, const idClipModel *);
  virtual void ClipRotation(trace_t *, const idRotation *, const idClipModel *);
  virtual int ClipContents(const idClipModel *, int);
  virtual void DisableClip();
  virtual void EnableClip();
  virtual void UnlinkClip();
  virtual void LinkClip();
  virtual bool EvaluateContacts();
  virtual int GetNumContacts();
  virtual const contactInfo_t *GetContact(int);
  virtual void ClearContacts();
  virtual void AddContactPhysics(idPhysics *);
  virtual void RemoveContactPhysics(idPhysics *);
  virtual int GetNumContactPhysics();
  virtual idPhysics *GetContactPhysics(int);
  virtual void ActivateContactPhysics();
  virtual bool HasGroundContacts();
  virtual bool IsGroundEntity(int);
  virtual bool IsGroundClipModel(int, int);
  virtual void SetPushed(int);
  virtual idVec3 *GetPushedLinearVelocity(idVec3 *result, const int);
  virtual idVec3 *GetPushedAngularVelocity(idVec3 *result, const int);
  virtual void SetMaster(bool, const idVec3 *, const idMat3 *, const bindFlags_t);
  virtual void SetLocalOrigin(const idVec3 *, int);
  virtual void SetLocalAxis(const idMat3 *, int);
  virtual int GetBlockingEntityNum();
  virtual int GetLinearEndTime();
  virtual int GetAngularEndTime();
  virtual bool IsInNonResidentCollisionArea(bool);
  virtual bool IsOutsideWorld();
  virtual const idMat3 *GetGravityAxis();
  virtual void DisableClip_2(const idPhysics_Actor::actorClipModel_t);
  virtual void EnableClip_2(const idPhysics_Actor::actorClipModel_t);
  virtual void LinkClip_2(const idVec3 *, const idMat3 *);
  virtual void RestoreStateFromState(playerPState_t *);
  virtual void ClearPushedVelocity();
  virtual void Serialize(idSerializer *, playerPState_t *);
  virtual void SerializeNonPredictiveState(idSerializer *);

  playerExplicitMove_t explicitMove;
  playerExplicitMove_t explicitMove2;
  playerPState_t current;
  playerPState_t previous;
  playerPState_t saved;
  idClipModel *clipModel_standing;
  idClipModel *clipModel_crouched;
  idClipModel *clipModel_sprintSlide;
  idClipModel *clipModel_dead;
  const idMaterial *overrideClipMaterial;
  idPush *pusher;
  idClipQuery slideMoveQuery;
  idClipQuery ladderQuery1;
  idClipQuery ladderQuery2;
  idClipQuery contentsQuery;
  int lastContents;
  float walkSpeed;
  float crouchSpeed;
  float maxStepHeight;
  float maxJumpHeight;
  int debugLevel;
  float walkAccelerate;
  float airAccelerate;
  float flyAccelerate;
  float waterAccelerate;
  float walkFriction;
  float airFriction;
  float flyFriction;
  float waterFriction;
  float slideFriction;
  usercmd_t command;
  usercmd_t prevcmd;
  idAngles viewAngles;
  int framemsec;
  float frametime;
  float playerSpeed;
  idVec3 viewForward;
  idVec3 viewRight;
  bool walking;
  bool startedOnGround;
  bool groundPlane;
  trace_t groundTrace;
  int groundSurfaceFlags;
  bool inhibitSprint;
  bool inhibitJump;
  bool toggleCrouch;
  bool ladder;
  idVec3 ladderNormal;
  bool canLadder;
  swimdepthstate_t currentSwimDepthState;
  idVec3 swimStrokeVelocity;
  int swimStrokeTimeLeft;
  int swimStrokeTime;
  bool swimStrokeAltCurve;
  bool swimStrokeIgnoreInput;
  int currentWaterEnt;
  float currentWaterSurfaceHeight;
  float blockedAccelerationPercent;
  idVec3 blockedAccelerationVec;
  float modifiedMovementMaxPercent;
  float modifiedMovementAngle;
  idVec3 modifiedAccelerationVec;
  bool canCrouchSprint;
  int lastJumpChance;
  idVec3 perfectOriginPosition;
  int perfectOriginDuration;
  int perfectOriginTime;
  idVec3 externalVelocity;
  bool clientOriginSet;
  idVec3 nextClientOrigin;
  bool forcedClientCrouchState;
  bool clientPusherLocked;
  float pushDeltaZ;
  bool (__fastcall *ownerJumpHandler)(int, const idVec3 *, const idVec3 *, const idVec3 *, const idVec3 *, const usercmd_t *);
  bool (__fastcall *ownerCrouchHandler)(int, const idVec3 *, const idVec3 *, const idVec3 *, const idVec3 *, const usercmd_t *);
  bool (__fastcall *ownerCrouchJumpHandler)(int, const idVec3 *, const idVec3 *, const idVec3 *, const idVec3 *, const usercmd_t *);
};
