131 lines
3.2 KiB
Ucode
131 lines
3.2 KiB
Ucode
class Projector extends Actor
|
|
placeable
|
|
native;
|
|
|
|
#exec Texture Import File=Textures\Proj_IconMasked.pcx Name=Proj_Icon Mips=Off MASKED=1
|
|
#exec Texture Import file=Textures\GRADIENT_Fade.tga Name=GRADIENT_Fade Mips=Off UCLAMPMODE=CLAMP VCLAMPMODE=CLAMP DXT=3
|
|
#exec Texture Import file=Textures\GRADIENT_Clip.tga Name=GRADIENT_Clip Mips=Off UCLAMPMODE=CLAMP VCLAMPMODE=CLAMP DXT=3
|
|
|
|
|
|
// Projector blending operation.
|
|
|
|
enum EProjectorBlending
|
|
{
|
|
PB_None,
|
|
PB_Modulate,
|
|
PB_AlphaBlend,
|
|
PB_Add
|
|
};
|
|
|
|
var() EProjectorBlending MaterialBlendingOp, // The blending operation between the material being projected onto and ProjTexture.
|
|
FrameBufferBlendingOp; // The blending operation between the framebuffer and the result of the base material blend.
|
|
|
|
// Projector properties.
|
|
|
|
var() Material ProjTexture;
|
|
var() int FOV;
|
|
var() int MaxTraceDistance;
|
|
var() bool bProjectBSP;
|
|
var() bool bProjectTerrain;
|
|
var() bool bProjectStaticMesh;
|
|
var() bool bProjectParticles;
|
|
var() bool bProjectActor;
|
|
var() bool bLevelStatic;
|
|
var() bool bClipBSP;
|
|
var() bool bClipStaticMesh;
|
|
var() bool bProjectOnUnlit;
|
|
var() bool bGradient;
|
|
var() bool bProjectOnBackfaces;
|
|
var() bool bProjectOnAlpha;
|
|
var() bool bProjectOnParallelBSP;
|
|
var() name ProjectTag;
|
|
var() bool bDynamicAttach;
|
|
var() bool bNoProjectOnOwner; // Only for dynamic projectors
|
|
var float FadeInTime;
|
|
|
|
// Internal state.
|
|
|
|
var const transient plane FrustumPlanes[6];
|
|
var const transient vector FrustumVertices[8];
|
|
var const transient Box Box;
|
|
var const transient ProjectorRenderInfoPtr RenderInfo;
|
|
var Texture GradientTexture;
|
|
var transient Matrix GradientMatrix;
|
|
var transient Matrix Matrix;
|
|
var transient Vector OldLocation;
|
|
|
|
// Native interface.
|
|
|
|
native function AttachProjector(optional float FadeInTime);
|
|
native function DetachProjector(optional bool Force);
|
|
native function AbandonProjector(optional float Lifetime);
|
|
|
|
native function AttachActor( Actor A );
|
|
native function DetachActor( Actor A );
|
|
|
|
simulated event PostBeginPlay()
|
|
{
|
|
if ( Level.NetMode == NM_DedicatedServer )
|
|
{
|
|
GotoState('NoProjection');
|
|
return;
|
|
}
|
|
|
|
AttachProjector( FadeInTime );
|
|
if( bLevelStatic )
|
|
{
|
|
AbandonProjector();
|
|
Destroy();
|
|
}
|
|
if( bProjectActor )
|
|
SetCollision(True, False, False);
|
|
}
|
|
|
|
simulated event Touch( Actor Other )
|
|
{
|
|
if( Other==None ) // sjs - rockets into projector
|
|
return;
|
|
if( Other.bAcceptsProjectors
|
|
&& (ProjectTag=='' || Other.Tag==ProjectTag)
|
|
&& (bProjectStaticMesh || Other.StaticMesh==None)
|
|
&& !(Other.bStatic && bStatic && Other.StaticMesh!=None)
|
|
)
|
|
AttachActor(Other);
|
|
}
|
|
simulated event Untouch( Actor Other )
|
|
{
|
|
DetachActor(Other);
|
|
}
|
|
|
|
state NoProjection
|
|
{
|
|
function BeginState()
|
|
{
|
|
Disable('Tick');
|
|
}
|
|
}
|
|
|
|
defaultproperties
|
|
{
|
|
MaterialBlendingOp=PB_None
|
|
FrameBufferBlendingOp=PB_Modulate
|
|
FOV=0
|
|
bDirectional=True
|
|
Texture=Proj_Icon
|
|
MaxTraceDistance=1000
|
|
bProjectBSP=True
|
|
bProjectTerrain=True
|
|
bProjectStaticMesh=True
|
|
bProjectParticles=True
|
|
bProjectActor=True
|
|
bClipBSP=False
|
|
bClipStaticMesh=False
|
|
bLevelStatic=False
|
|
bProjectOnUnlit=False
|
|
bHidden=True
|
|
bStatic=True
|
|
GradientTexture=GRADIENT_Fade
|
|
bProjectOnBackfaces=False
|
|
bDynamicAttach=False
|
|
RemoteRole=ROLE_None
|
|
} |