1
0
KF2-Dev-Scripts/KFGame/Classes/KFCharacterInfo_ScriptedPawn.uc
2020-12-13 18:01:13 +03:00

162 lines
6.5 KiB
Ucode

//=============================================================================
// KFCharacterInfo_ScriptedPawn
//=============================================================================
// Character info for scripted pawns
//=============================================================================
// Killing Floor 2
// Copyright (C) 2018 Tripwire Interactive LLC
//=============================================================================
class KFCharacterInfo_ScriptedPawn extends KFCharacterInfoBase;
enum FXTransitionType
{
/** Always play regardless of the previous state */
FXTransitionType_PlayAlways,
/** In EnterState FROM a greater numbered state or in ExitState TO a greater numbered state */
FXTransitionType_PlayGreaterStateTransition,
/** In EnterState FROM a lower numbered state or in ExitState TO a lower numbered state */
FXTransitionType_PlayLesserStateTransition
};
struct ScriptedPawnStateFX
{
/** Particles to play */
var() ParticleSystem VFX;
/** Sound event to play */
var() AkEvent SFX;
/** Socket to attach particles or sounds to, if desired (otherwise plays at root) */
var() name SocketName;
/** Whether to play this FX based on the previous state
FXTransitionType_PlayAlways - Always play regardless of the previous state
FXTransitionType_PlayGreaterStateTransition - In EnterState FROM a greater (health) state or in ExitState TO a greater (health) state
FXTransitionType_PlayLesserStateTransition - In EnterState FROM a lower (health) state or in ExitState TO a lower (health) state */
var() FXTransitionType TransitionType;
};
struct ScriptedPawnStateInfo
{
// Percentage of health at which to activate this state
var() float HealthPctThreshold<ClampMin=0.0 | ClampMax=1.0>;
// How much to scale the speed by for this state
var() float SpeedScalar<ClampMin=0.0 | ClampMax=1.0>;
// Whether the pawn can be targeted by zeds in this state
var() bool bCanBeTargetedByZeds;
// FX to play upon entering state
var() array<ScriptedPawnStateFX> EnterFX;
// FX to play upon exiting state
var() array<ScriptedPawnStateFX> ExitFX;
// Anim to play upon entering state
var() name EnterAnim;
// Anim to play upon exiting state
var() name ExitAnim;
// Icon that represents this state and gets displayed above pawn
var() Texture2D Icon;
// Material for this state, None will set to default material
var() MaterialInstance DefaultStateMaterial;
// Material for this state when highlighted, Non will set to default StateMaterial
var() MaterialInstance HighlightedStateMaterial;
// Color of the scripted pawn health bar during this state
var() Color PawnHealthBarColor;
structdefaultproperties
{
HealthPctThreshold=1.0
SpeedScalar=1.0
bCanBeTargetedByZeds=true
}
};
var() array<ScriptedPawnStateInfo> States;
// events to play when the scripted pawn reaches the finish (including stop events)
var() array<AkEvent> FinishSoundEvents;
// How fast the pawn should move
var() float PawnSpeed;
// Whether pawn should fly or walk
var() bool bIsFlyingPawn;
// Whether pawn can be bumped or pushed
var() bool bPawnHandlesMomentum;
// How hard pawn bumps other pawns
var() float PawnBumpImpulse;
// Whether pawn can be grabbed by zeds
var() bool bPawnCanBeGrabbed;
// Whether to enable weldable options below
var() bool bEnableWeldOptions;
// Whether pawn can be welded
var() bool bPawnCanBeWelded<EditCondition=bEnableWeldOptions>;
// Whether pawn can be unwelded
var() bool bPawnCanBeUnwelded<EditCondition=bEnableWeldOptions>;
// How much pawn can be welded
var() float PawnMaxWeldIntegrityPerPlayer[6]<EditCondition=bEnableWeldOptions>;
// How much to scale the pawn's weldable collision component (default radius is 1m/100uu)
var() float PawnWeldableComponentScale<EditCondition=bEnableWeldOptions>;
// Whether pawn can be healed
var() bool bPawnCanBeHealed;
// Whether the pawn can die and be cleaned-up in code when health reaches zero
var() bool bPawnCanBeKilled;
// Whether proximity options are enabled
var() bool bEnableProximityOptions;
// How much to scale the pawn's proximity trigger for zeds (default radius is 1m/100uu)
var() float ZedProximityTriggerScale<EditCondition=bEnableProximityOptions>;
// How much to scale the pawn's proximity trigger for players (default radius is 1m/100uu)
var() float PlayerProximityTriggerScale<EditCondition=bEnableProximityOptions>;
// Whether pawn/zed behavior changes when zeds are close
var() bool bUseZedProximityTrigger<EditCondition=bEnableProximityOptions>;
// How pawn's speed should scale when zeds are close
var() float SpeedScalarForZedProximity<EditCondition=bUseZedProximityTrigger>;
// Whether pawn/player behavior changes when players are close
var() bool bUsePlayerProximityTrigger<EditCondition=bEnableProximityOptions>;
// How pawn's speed should scale when players are close
var() float SpeedScalarForPlayerProximity<EditCondition=bUsePlayerProximityTrigger>;
// Whether the pawn should remove collision when reaching the goal and then become hidden when finished
var() bool bHideOnFinish;
// Whether pawn should have no collision until it hits the start point
var() bool bDisableCollisionOnStart;
/** Character mesh to use */
var(ThirdPerson) SkeletalMesh CharacterMesh<DisplayName=Body Mesh>;
/** Aggressively optimized mesh for the server with minimal bones */
var(Server) SkeletalMesh ServerMesh;
/** Sets the pawns character mesh from it's CharacterInfo, and updates instance of player in map if there is one. */
simulated function SetCharacterMeshFromArch( KFPawn KFP, optional KFPlayerReplicationInfo KFPRI )
{
super.SetCharacterMeshFromArch( KFP, KFPRI );
if( CharacterMesh != none )
{
// Assign the body mesh to the pawn
if ( KFP.WorldInfo.NetMode == NM_DedicatedServer && ServerMesh != None )
{
KFP.Mesh.SetSkeletalMesh(ServerMesh);
}
else
{
KFP.Mesh.SetSkeletalMesh(CharacterMesh);
}
KFP.Mesh.SetScale(DefaultMeshScale);
KFP.PitchAudio(DefaultMeshScale);
}
}
defaultproperties
{
PawnSpeed=150
PawnBumpImpulse=100
PawnWeldableComponentScale=2.f
PawnMaxWeldIntegrityPerPlayer(0)=1500
PawnMaxWeldIntegrityPerPlayer(1)=1500
PawnMaxWeldIntegrityPerPlayer(2)=1500
PawnMaxWeldIntegrityPerPlayer(3)=1500
PawnMaxWeldIntegrityPerPlayer(4)=1500
PawnMaxWeldIntegrityPerPlayer(5)=1500
ZedProximityTriggerScale=2.f
PlayerProximityTriggerScale=2.f
SpeedScalarForZedProximity=1.f
SpeedScalarForPlayerProximity=1.f
bHideOnFinish=true
bDisableCollisionOnStart=true
}