Class KFShadowProject extends ShadowProjector; var KFPlayerController BaseController; var array MiscShadows; var bool bInitDir; function Tick(float DeltaTime) { local coords C; local int i,l,j,m; local float DotDir,Dist; local KFMiscShadowProject Sh; DetachProjector(true); if( BaseController==None ) { BaseController = KFPlayerController(Level.GetLocalPlayerController()); if( BaseController==None ) return; } if( (ShadowActor != None) && !ShadowActor.bHidden && (Level.TimeSeconds - ShadowActor.LastRenderTime < 4) && (ShadowTexture != None) && bShadowActive ) { if( ShadowTexture.Invalid ) Destroy(); else { if(RootMotion && ShadowActor.DrawType == DT_Mesh && ShadowActor.Mesh != None) { C = ShadowActor.GetBoneCoords(''); SetLocation(C.Origin); } else SetLocation(ShadowActor.Location + vect(0,0,5)); l = BaseController.LightSources.Length; m = MiscShadows.Length; LightDistance = Default.LightDistance; if( l>0 ) { for( i=0; iBaseController.LightSources[i].LightRadius ) continue; Dist = (Dist/BaseController.LightSources[i].LightRadius); C.XAxis = Normal(C.XAxis); DotDir = C.XAxis Dot vector(BaseController.LightSources[i].Rotation); if( DotDir>0.5 ) { LightDistance*=FMin(1.75-DotDir,1.f)*(1.f-Dist); for( j=0; j