class SHumanGlobalSettings
{
	private void SHumanGlobalSettings() {}
	private void ~SHumanGlobalSettings() {}
	
	float		m_fPhysMoveMaxTracedDistance;		//!<	when actual phys step is lower than this -> distance is traced, otherwise it's just set 	
}


class SHumanCommandMoveSettings 
{
	private void SHumanCommandMoveSettings() {}
	private void ~SHumanCommandMoveSettings() {}
	
	float 		m_fRunSpringTimeout;				//!< filter span value		[s]
	float		m_fRunSpringMaxChange;				//!< filter speed value		[val/s]
	float		m_fDirFilterTimeout;				//!< direction filter timeout [s]
	float		m_fDirFilterSprintTimeout;			//!< sprint direction filter timeout [s]
	float		m_fDirFilterSpeed;					//!< direction filter max rot speed [rad/s]
	float		m_fMaxSprintAngle;					//!< max sprint angle [rad]

	float 		m_fTurnAngle;						//!< when character starts to turn (45 deg default)
	float 		m_fTurnEndUpdateNTime;				//!< when turn values are not updated anymore (normalized time)
	float 		m_fTurnNextNTime;					//!< when next turn is started from previous turn

	float		m_fSlidingPoseAngle;				//!< angle (0.707 * PI)	- when angle is bigger - sliding pose is done (rad)
	float		m_fSlidingPoseTrackTime;			//!< time change of angle is tracked in the past (sec)
	float		m_fSlidingPoseRepTime;				//!< not to do sliding pose after another sliding pose (sec)

	float		m_fHeadingChangeLimiterIdle;
	float		m_fHeadingChangeLimiterWalk;
	float		m_fHeadingChangeLimiterRun;
	
	float		m_fLeaningSpeed;

	float		m_fWaterLevelSpeedRectrictionLow;	//!< Water level (in meters) - m_iMaxSpeedNormal_WaterLevelLow and m_iMaxSpeedFast_WaterLevelLow are applied when character is deeper
	float		m_fWaterLevelSpeedRectrictionHigh;	//!< Water level (in meters) - m_iMaxSpeedNormal_WaterLevelHigh and m_iMaxSpeedFast_WaterLevelHigh are applied when character is deeper
	
	int			m_iMaxSpeedNormal_WaterLevelLow;	//!< Max movement speed for m_fWaterLevelSpeedRectrictionLow when character doesn't want to sprint (-1 means no change)
	int			m_iMaxSpeedFast_WaterLevelLow;		//!< Max movement speed for m_fWaterLevelSpeedRectrictionLow when character wants to sprint (-1 means no change)
	int			m_iMaxSpeedNormal_WaterLevelHigh;	//!< Max movement speed for m_fWaterLevelSpeedRectrictionHigh when character doesn't want to sprint (-1 means no change)
	int			m_iMaxSpeedFast_WaterLevelHigh;		//!< Max movement speed for m_fWaterLevelSpeedRectrictionHigh when character wants to sprint (-1 means no change)
}

class SHumanCommandSwimSettings 
{
	private void SHumanCommandSwimSettings() {}
	private void ~SHumanCommandSwimSettings() {}	
	
	float 		m_fAlignIdleTimeout;				//! align filters in idle, slow, fast
	float 		m_fAlignIdleMaxChanged;	
	float 		m_fAlignSlowTimeout;		
	float 		m_fAlignSlowMaxChanged;	
	float 		m_fAlignFastTimeout;		
	float 		m_fAlignFastMaxChanged;	

	float		m_fMovementSpeed;			
	float		m_fMovementSpeedFltTime;
	float		m_fMovementSpeedFltMaxChange;

	float		m_fWaterLevelSwim;					//!< when swimming - entity position depth (1.4 m)
	float		m_fWaterLevelIn;					//!< when entering water - what level cases swimming (1.5m)
	float		m_fWaterLevelOut;					//!< what water level causes to stop swimming (1.2m)


	float 		m_fToCrouchLevel;					//!< when to crouch
	float 		m_fToErectLevel;					//!< when to stand
}



class SHumanCommandClimbSettings 
{
	private void SHumanCommandClimbSettings() {}
	private void ~SHumanCommandClimbSettings() {}	
	
	//! generic settings
	float		m_fCharHeight;

	//! forward pass
	float 		m_fCharWidth;

	float		m_fFwMinHeight;
	float		m_fFwMaxHeight;
	float		m_fFwMaxDistance;

	//! forward step
	float		m_fStepFreeSpace;		//! must be a space to step there 
	float		m_fStepPositionAfterEdge;
	float		m_fStepDownRadius;
	float		m_fStepMinNormal;
	float		m_fStepVariation;
	float		m_fStepMinWidth;

	float		m_fClimbOverMaxWidth;
	float		m_fClimbOverMinHeight;
	
	//! absolute distance for backwards check if necessary
	float		m_fBackwardsCheckDist;
};
