101 lines
2.3 KiB
Ucode
101 lines
2.3 KiB
Ucode
/**
|
|
* Copyright 1998-2013 Epic Games, Inc. All Rights Reserved.
|
|
*/
|
|
|
|
/**
|
|
* This is a movable blocking volume. It can be moved by matinee, being based on
|
|
* dynamic objects, etc.
|
|
*/
|
|
class DynamicBlockingVolume extends BlockingVolume
|
|
native
|
|
showcategories(Movement)
|
|
placeable;
|
|
|
|
/** Is the volume enabled by default? */
|
|
var() bool bEnabled;
|
|
|
|
cpptext
|
|
{
|
|
#if WITH_EDITOR
|
|
virtual void CheckForErrors();
|
|
#endif
|
|
|
|
/**
|
|
* Force TRACE_LevelGeometry to still work with us even though bWorldGeometry is cleared
|
|
* bWorldGeometry is cleared so that actors can base properly on moving volumes
|
|
*
|
|
* @param Primitive - the primitive to trace against
|
|
*
|
|
* @param SourceActor - the actor doing the trace
|
|
*
|
|
* @param TraceFlags - misc flags describing the trace
|
|
*/
|
|
virtual UBOOL ShouldTrace(UPrimitiveComponent* Primitive, AActor *SourceActor, DWORD TraceFlags);
|
|
}
|
|
|
|
struct CheckpointRecord
|
|
{
|
|
var vector Location;
|
|
var rotator Rotation;
|
|
var bool bCollideActors;
|
|
var bool bBlockActors;
|
|
var bool bNeedsReplication;
|
|
};
|
|
|
|
/**
|
|
* Overriden to set the default collision state.
|
|
*/
|
|
simulated event PostBeginPlay()
|
|
{
|
|
Super.PostBeginPlay();
|
|
|
|
SetCollision(bEnabled, bBlockActors);
|
|
}
|
|
|
|
function CreateCheckpointRecord(out CheckpointRecord Record)
|
|
{
|
|
Record.Location = Location;
|
|
Record.Rotation = Rotation;
|
|
Record.bCollideActors = bCollideActors;
|
|
Record.bBlockActors = bBlockActors;
|
|
Record.bNeedsReplication = (RemoteRole != ROLE_None);
|
|
}
|
|
|
|
function ApplyCheckpointRecord(const out CheckpointRecord Record)
|
|
{
|
|
if (!bHardAttach)
|
|
{
|
|
SetLocation(Record.Location);
|
|
SetRotation(Record.Rotation);
|
|
}
|
|
// always leave component colliding and just use the Actor flags
|
|
CollisionComponent.SetActorCollision(true, true);
|
|
CollisionComponent.SetTraceBlocking(false, true);
|
|
CollisionComponent.SetBlockRigidBody(Record.bCollideActors);
|
|
SetCollision(Record.bCollideActors, Record.bBlockActors);
|
|
|
|
if (Record.bNeedsReplication)
|
|
{
|
|
ForceNetRelevant();
|
|
}
|
|
}
|
|
|
|
defaultproperties
|
|
{
|
|
//@todo - Change back to PHYS_None
|
|
Physics=PHYS_Interpolating
|
|
|
|
bStatic=false
|
|
|
|
bMovable=true
|
|
bAlwaysRelevant=true
|
|
bReplicateMovement=true
|
|
bOnlyDirtyReplication=true
|
|
RemoteRole=ROLE_None
|
|
bWorldGeometry=false
|
|
|
|
BrushColor=(R=255,G=255,B=100,A=255)
|
|
|
|
bEnabled=true
|
|
}
|