50 lines
1.6 KiB
C
50 lines
1.6 KiB
C
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
// $NoKeywords: $
|
||
|
//=============================================================================//
|
||
|
|
||
|
#ifndef PHYSICS_SHADOW_H
|
||
|
#define PHYSICS_SHADOW_H
|
||
|
#pragma once
|
||
|
|
||
|
class CPhysicsObject;
|
||
|
class IPhysicsShadowController;
|
||
|
class IPhysicsPlayerController;
|
||
|
|
||
|
extern IPhysicsShadowController *CreateShadowController( CPhysicsObject *pObject, bool allowTranslation, bool allowRotation );
|
||
|
extern IPhysicsPlayerController *CreatePlayerController( CPhysicsObject *pObject );
|
||
|
extern void DestroyPlayerController( IPhysicsPlayerController *pController );
|
||
|
|
||
|
|
||
|
extern void ComputeController( IVP_U_Float_Point ¤tSpeed, const IVP_U_Float_Point &delta, const IVP_U_Float_Point &maxSpeed, float scaleDelta, float damping );
|
||
|
|
||
|
#include "ivp_physics.hxx"
|
||
|
|
||
|
struct shadowcontrol_params_t
|
||
|
{
|
||
|
shadowcontrol_params_t()
|
||
|
{
|
||
|
lastPosition.set_to_zero();
|
||
|
lastImpulse.set_to_zero();
|
||
|
}
|
||
|
|
||
|
IVP_U_Point targetPosition;
|
||
|
IVP_U_Quat targetRotation;
|
||
|
IVP_U_Point lastPosition; // estimate for where the object should be, used to compute error for teleport
|
||
|
IVP_U_Float_Point lastImpulse; // Impulse applied last frame
|
||
|
float maxAngular;
|
||
|
float maxDampAngular;
|
||
|
float maxSpeed;
|
||
|
float maxDampSpeed;
|
||
|
float dampFactor;
|
||
|
float teleportDistance;
|
||
|
};
|
||
|
|
||
|
|
||
|
float ComputeShadowControllerHL( CPhysicsObject *pObject, const hlshadowcontrol_params_t ¶ms, float secondsToArrival, float dt );
|
||
|
float ComputeShadowControllerIVP( IVP_Real_Object *pivp, shadowcontrol_params_t ¶ms, float secondsToArrival, float dt );
|
||
|
|
||
|
#endif // PHYSICS_SHADOW_H
|