103 lines
2.6 KiB
Ucode
103 lines
2.6 KiB
Ucode
/**
|
|
* Copyright 1998-2013 Epic Games, Inc. All Rights Reserved.
|
|
*/
|
|
class AnimNotify_ViewShake extends AnimNotify_Scripted
|
|
native(Anim);
|
|
|
|
/**
|
|
* Note: these shake-defining params are deprecated. Use ShakeParams.
|
|
* Leaving them here for now for compatibility with existing content (which will be
|
|
* upgraded via PostLoad()).
|
|
*/
|
|
/** Duration in seconds of shake */
|
|
var private editconst float Duration;
|
|
/** view rotation amplitude (pitch,yaw,roll) */
|
|
var private editconst vector RotAmplitude;
|
|
/** frequency of rotation shake */
|
|
var private editconst vector RotFrequency;
|
|
/** relative view offset amplitude (x,y,z) */
|
|
var private editconst vector LocAmplitude;
|
|
/** frequency of view offset shake */
|
|
var private editconst vector LocFrequency;
|
|
/** fov shake amplitude */
|
|
var private editconst float FOVAmplitude;
|
|
/** fov shake frequency */
|
|
var private editconst float FOVFrequency;
|
|
|
|
var() bool bDoControllerVibration;
|
|
|
|
/** Radius within which to shake player views. If 0 only plays on the animated player */
|
|
var() float ShakeRadius;
|
|
|
|
/** Should use a bone location as the shake's epicenter? */
|
|
var() bool bUseBoneLocation;
|
|
/** if so, bone name to use */
|
|
var() name BoneName;
|
|
|
|
var() export editinline CameraShake ShakeParams;
|
|
|
|
cpptext
|
|
{
|
|
virtual void PostLoad();
|
|
virtual FString GetEditorComment() { return TEXT("CameraShake"); }
|
|
};
|
|
|
|
/**
|
|
* Trigger the view shake
|
|
*
|
|
* @param Owner - the actor that is playing this animation
|
|
*
|
|
* @param AnimSeqInstigator - the anim sequence that triggered the notify
|
|
*/
|
|
event Notify(Actor Owner, AnimNodeSequence AnimSeqInstigator)
|
|
{
|
|
local vector ViewShakeOrigin;
|
|
local Pawn P;
|
|
local PlayerController PC;
|
|
|
|
if (ShakeRadius == 0)
|
|
{
|
|
P = Pawn(Owner);
|
|
if (P != None && P.IsLocallyControlled())
|
|
{
|
|
PC = PlayerController(P.Controller);
|
|
if (PC != None)
|
|
{
|
|
PC.ClientPlayCameraShake(ShakeParams);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// Figure out world origin of view shake
|
|
if( bUseBoneLocation &&
|
|
AnimSeqInstigator != None &&
|
|
AnimSeqInstigator.SkelComponent != None )
|
|
{
|
|
ViewShakeOrigin = AnimSeqInstigator.SkelComponent.GetBoneLocation( BoneName );
|
|
}
|
|
else
|
|
{
|
|
ViewShakeOrigin = Owner.Location;
|
|
}
|
|
|
|
// propagate to all player controllers
|
|
if (Owner != None)
|
|
{
|
|
class'Camera'.static.PlayWorldCameraShake(ShakeParams, Owner, ViewShakeOrigin, 0.f, ShakeRadius, 1.f, bDoControllerVibration);
|
|
}
|
|
}
|
|
}
|
|
|
|
defaultproperties
|
|
{
|
|
ShakeRadius=4096.0
|
|
Duration=1.f
|
|
RotAmplitude=(X=100,Y=100,Z=200)
|
|
RotFrequency=(X=10,Y=10,Z=25)
|
|
LocAmplitude=(X=0,Y=3,Z=6)
|
|
LocFrequency=(X=1,Y=10,Z=20)
|
|
FOVAmplitude=2
|
|
FOVFrequency=5
|
|
}
|