113 lines
3.7 KiB
Ucode
113 lines
3.7 KiB
Ucode
//=============================================================================
|
|
// KFAnimNotify_Decal
|
|
//=============================================================================
|
|
// Based on GOW3 GearAnimNotify_GearDecal
|
|
//=============================================================================
|
|
// Killing Floor 2
|
|
// Copyright (C) 2015 Tripwire Interactive LLC
|
|
//=============================================================================
|
|
class KFAnimNotify_Decal extends AnimNotify
|
|
native(Anim);
|
|
|
|
struct native DecalData
|
|
{
|
|
/** Used internally for validate the struct contains useful data */
|
|
var bool bIsValid;
|
|
/** Material and any other properties that are needed for impact decals */
|
|
var() MaterialInterface DecalMaterial;
|
|
/** Width of the decal **/
|
|
var() float Width;
|
|
/** Height of the decal **/
|
|
var() float Height;
|
|
/** Thickness of the decal (used to calculate the nearplane/farplane values) **/
|
|
var() float Thickness;
|
|
|
|
/** Whether to skip this decal entirely when perf is slow */
|
|
var() bool bSkip_ForSlowPerf;
|
|
|
|
structdefaultproperties
|
|
{
|
|
Width=6.0f
|
|
Height=6.0f
|
|
Thickness=10.0f
|
|
}
|
|
};
|
|
|
|
// Optimization
|
|
var() bool bIgnoreIfActorHidden;
|
|
/** BoneName or SocketName to use */
|
|
var() Name BoneOrSocketName;
|
|
/** Relative Location for Trace Direction */
|
|
var() Vector RelativeLocation;
|
|
/** Relative Rotation for Trace Direction */
|
|
var() Rotator RelativeRotation;
|
|
/** How far to trace in the specified direction */
|
|
var() float TraceDistance;
|
|
/** The material to use for the decal */
|
|
var() DecalData Decal;
|
|
/** Will only trace straight down regardless of bone or socket orientation */
|
|
var() bool bOnlyTraceDown;
|
|
|
|
/** Arrow Component to visualize in editor */
|
|
var editoronly ArrowComponent MyArrowComponent;
|
|
|
|
cpptext
|
|
{
|
|
// AnimNotify interface.
|
|
virtual void Notify( class UAnimNodeSequence* NodeSeq );
|
|
virtual FString GetEditorComment() { return TEXT("Decal"); }
|
|
}
|
|
|
|
event SpawnDecal( Actor Owner, vector TraceLocation, vector TraceDir )
|
|
{
|
|
local Actor HitActor;
|
|
local vector HitLocation, HitNormal;
|
|
local TraceHitInfo HitInfo;
|
|
|
|
//Owner.DrawDebugLine( TraceLocation, TraceLocation + TraceDir * TraceDistance, 0, 255, 0, TRUE );
|
|
if( Owner.WorldInfo.MyDecalManager != none && (!Owner.WorldInfo.bDropDetail || !Decal.bSkip_ForSlowPerf) )
|
|
{
|
|
//Owner.DrawDebugSphere( TraceLocation, 24, 8, 0, 255, 0, TRUE );
|
|
if( bOnlyTraceDown )
|
|
{
|
|
TraceDir.X = 0;
|
|
TraceDir.Y = 0;
|
|
TraceDir.Z = -1;
|
|
|
|
}
|
|
//Owner.DrawDebugSphere( TraceLocation, 32, 8, 255, 0, 0, true );
|
|
//Owner.DrawDebugLine( TraceLocation, TraceLocation + TraceDir * TraceDistance, 0, 255, 0, true );
|
|
HitActor = Owner.Trace(HitLocation, HitNormal, TraceLocation + TraceDir * TraceDistance, TraceLocation, false,, HitInfo);
|
|
if( HitActor != None )
|
|
{
|
|
CreateDecal( Owner, Decal, HitActor, HitLocation, HitNormal, HitInfo );
|
|
}
|
|
}
|
|
}
|
|
|
|
/** Helper for SpawnExplosionDecal() to perform the actual creation of the object */
|
|
simulated function DecalComponent CreateDecal(Actor Owner, const out DecalData outDecalData, Actor HitActor, vector HitLocation, vector HitNormal, const out TraceHitInfo HitInfo)
|
|
{
|
|
local DecalComponent DC;
|
|
|
|
if( Owner.WorldInfo.MyDecalManager != none )
|
|
{
|
|
DC = Owner.WorldInfo.MyDecalManager.SpawnDecal( outDecalData.DecalMaterial, HitLocation, rotator(-HitNormal), outDecalData.Width, outDecalData.Height, outDecalData.Thickness, true);
|
|
}
|
|
|
|
return DC;
|
|
}
|
|
|
|
defaultproperties
|
|
{
|
|
bIgnoreIfActorHidden=true
|
|
TraceDistance=128.f
|
|
bOnlyTraceDown=true
|
|
// To visualize in editor
|
|
Begin Object Class=ArrowComponent Name=ArrowComponent0
|
|
bTreatAsASprite=True
|
|
HiddenGame=true
|
|
End Object
|
|
MyArrowComponent=ArrowComponent0
|
|
}
|