1
0
KF2-Dev-Scripts/UDKBase/classes/SimplePawn.uc
2020-12-13 18:01:13 +03:00

206 lines
4.6 KiB
Ucode

/**
* Copyright 1998-2013 Epic Games, Inc. All Rights Reserved.
*/
class SimplePawn extends GamePawn;
var bool bFixedView;
var vector FixedViewLoc;
var rotator FixedViewRot;
/** view bob properties */
var float Bob;
var float AppliedBob;
var float BobTime;
var vector WalkBob;
var float OldZ;
/** Speed modifier for castle pawn */
var config float CastlePawnSpeed;
var config float CastlePawnAccel;
simulated function PostBeginPlay()
{
Super.PostBeginPlay();
OldZ = Location.Z;
}
exec function FixedView()
{
if (!bFixedView)
{
FixedViewLoc = Location;
FixedViewRot = Controller.Rotation;
}
bFixedView = !bFixedView;
}
simulated function bool CalcCamera( float fDeltaTime, out vector out_CamLoc, out rotator out_CamRot, out float out_FOV )
{
local float Radius, Height;
// Override camera FOV for first person castle player
out_FOV = 65.0;
// Handle the fixed camera
if (bFixedView)
{
out_CamLoc = FixedViewLoc;
out_CamRot = FixedViewRot;
return true;
}
GetBoundingCylinder(Radius, Height);
out_CamLoc = Location - vector(out_CamRot) * Radius * 20;
return false;
}
/**
* Updates the player's eye height using BaseEyeHeight and (head) Bob settings; called every tick
*/
event TickSpecial( float DeltaTime )
{
// NOTE: The following was pulled from UT's head bobbing features
local bool bAllowBob;
local float smooth, Speed2D;
local vector X, Y, Z;
// Set ground speed
GroundSpeed = CastlePawnSpeed;
AccelRate = CastlePawnAccel;
bAllowBob = true;
if ( abs(Location.Z - OldZ) > 15 )
{
// if position difference too great, don't do head bob
bAllowBob = false;
BobTime = 0;
WalkBob = Vect(0,0,0);
}
if ( bAllowBob )
{
// normal walking around
// smooth eye position changes while going up/down stairs
smooth = FMin(0.9, 10.0 * DeltaTime/CustomTimeDilation);
if( Physics == PHYS_Walking || Controller.IsInState('PlayerClickToMove') )
{
EyeHeight = FMax((EyeHeight - Location.Z + OldZ) * (1 - smooth) + BaseEyeHeight * smooth,
-0.5 * CylinderComponent.CollisionHeight);
}
else
{
EyeHeight = EyeHeight * ( 1 - smooth) + BaseEyeHeight * smooth;
}
// Add walk bob to movement
Bob = FClamp(Bob, -0.15, 0.15);
if (Physics == PHYS_Walking )
{
GetAxes(Rotation,X,Y,Z);
Speed2D = VSize(Velocity);
if ( Speed2D < 10 )
{
BobTime += 0.2 * DeltaTime;
}
else
{
BobTime += DeltaTime * (0.3 + 0.7 * Speed2D/GroundSpeed);
}
WalkBob = Y * Bob * Speed2D * sin(8 * BobTime);
AppliedBob = AppliedBob * (1 - FMin(1, 16 * deltatime));
WalkBob.Z = AppliedBob;
if ( Speed2D > 10 )
{
WalkBob.Z = WalkBob.Z + 0.75 * Bob * Speed2D * sin(16 * BobTime);
}
}
else if ( Physics == PHYS_Swimming )
{
GetAxes(Rotation,X,Y,Z);
BobTime += DeltaTime;
Speed2D = Sqrt(Velocity.X * Velocity.X + Velocity.Y * Velocity.Y);
WalkBob = Y * Bob * 0.5 * Speed2D * sin(4.0 * BobTime);
WalkBob.Z = Bob * 1.5 * Speed2D * sin(8.0 * BobTime);
}
else
{
BobTime = 0;
WalkBob = WalkBob * (1 - FMin(1, 8 * deltatime));
}
WalkBob *= 0.1;
}
OldZ = Location.Z;
}
/**
* GetPawnViewLocation()
*
* Called by PlayerController to determine camera position in first person view. Returns
* the location at which to place the camera
*/
simulated function Vector GetPawnViewLocation()
{
return Location + EyeHeight * vect(0,0,1) + WalkBob;
}
defaultproperties
{
Components.Remove(Sprite)
Begin Object Name=CollisionCylinder
CollisionRadius=+0021.000000
CollisionHeight=+0044.000000
End Object
CylinderComponent=CollisionCylinder
ViewPitchMin=-10000
ViewPitchMax=12000
// How much to bob the camera when walking
Bob=0.12
// @todo: When touching to move while already moving, walking physics may be applied for a single frame.
// This means that if WalkingPct is not 1.0, brakes will be applied and movement will appear to stutter.
// Until we can figure out how to avoid the state transition glitch, we're forcing WalkingPct to 1.0
WalkingPct=+1.0
CrouchedPct=+0.4
BaseEyeHeight=60.0 // 38.0
EyeHeight=60.0 // 38.0
GroundSpeed=440.0
AirSpeed=440.0
WaterSpeed=220.0
AccelRate=2048.0
JumpZ=322.0
CrouchHeight=29.0
CrouchRadius=21.0
WalkableFloorZ=0.78
AlwaysRelevantDistanceSquared=+1960000.0
RotationRate=(Pitch=20000,Yaw=20000,Roll=20000)
AirControl=+0.35
bCanCrouch=true
bCanClimbLadders=True
bCanPickupInventory=True
SightRadius=+12000.0
MaxStepHeight=26.0
MaxJumpHeight=49.0
bScriptTickSpecial=true
}