rott/kf_sources/Engine/Classes/SavedMove.uc
2026-07-14 20:27:09 +07:00

98 lines
2.9 KiB
Ucode

//=============================================================================
// SavedMove is used during network play to buffer recent client moves,
// for use when the server modifies the clients actual position, etc.
// This is a built-in Unreal class and it shouldn't be modified.
//
// Aren't we rebels - modified to support Red Orchestra movement - Ramm 7/13/05
//=============================================================================
class SavedMove extends Info;
// also stores info in Acceleration attribute
var SavedMove NextMove; // Next move in linked list.
var float TimeStamp; // Time of this move.
var float Delta; // amount of time for this move
var bool bRun;
var bool bDuck;
var bool bPressedJump;
var bool bSprint;
var bool bCrawl;
var EDoubleClickDir DoubleClickMove; // Double click info.
var EPhysics SavedPhysics;
var vector StartLocation, StartRelativeLocation, StartVelocity, StartFloor, SavedLocation, SavedVelocity, SavedRelativeLocation;
var Actor StartBase, EndBase;
var rotator WeaponBufferRotation;
final function Clear()
{
TimeStamp = 0;
Delta = 0;
DoubleClickMove = DCLICK_None;
Acceleration = vect(0,0,0);
StartVelocity = vect(0,0,0);
bRun = false;
bDuck = false;
bPressedJump = false;
bSprint = false;
bCrawl = false;
}
final function PostUpdate(PlayerController P)
{
if ( P.Pawn != None )
{
SavedLocation = P.Pawn.Location;
SavedVelocity = P.Pawn.Velocity;
EndBase = P.Pawn.Base;
if ( (EndBase != None) && !EndBase.bWorldGeometry )
SavedRelativeLocation = P.Pawn.Location - EndBase.Location;
}
SetRotation(P.Rotation);
WeaponBufferRotation = P.WeaponBufferRotation;
}
final function bool IsJumpMove()
{
return ( bPressedJump || ((DoubleClickMove != DCLICK_None) && (DoubleClickMove != DCLICK_Active) && (DoubleClickMove != DCLICK_Done)) );
}
function vector GetStartLocation()
{
if ( (Vehicle(StartBase) != None) || (Mover(StartBase) != None) )
return StartBase.Location + StartRelativeLocation;
return StartLocation;
}
final function SetInitialPosition(Pawn P)
{
SavedPhysics = P.Physics;
StartLocation = P.Location;
StartVelocity = P.Velocity;
StartBase = P.Base;
StartFloor = P.Floor;
if ( (StartBase != None) && !StartBase.bWorldGeometry )
StartRelativeLocation = P.Location - StartBase.Location;
}
final function SetMoveFor(PlayerController P, float DeltaTime, vector NewAccel, EDoubleClickDir InDoubleClick)
{
Delta = DeltaTime;
if ( VSize(NewAccel) > 3072 )
NewAccel = 3072 * Normal(NewAccel);
if ( P.Pawn != None )
SetInitialPosition(P.Pawn);
Acceleration = NewAccel;
DoubleClickMove = InDoubleClick;
bRun = (P.bRun > 0);
bDuck = (P.bDuck > 0);
bPressedJump = P.bPressedJump;
bSprint = (P.bSprint > 0);
bCrawl = (P.bCrawl > 0);
TimeStamp = Level.TimeSeconds;
}
defaultproperties
{
bHidden=True
}