Advertisement
Guest User

DecoShadowStatic.uc

a guest
Apr 12th, 2018
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. class DecoShadowStatic extends Projector
  2.     NoUserCreate;
  3.  
  4. var bool bOptionalUpdate;
  5. var transient ShadowBitMap PLShadow;
  6.  
  7. simulated function PostBeginPlay();
  8.  
  9. simulated function Tick( float Delta )
  10. {
  11.     UpdateShadow();
  12.     if (bOptionalUpdate && !bDeleteMe)
  13.         Disable('Tick');
  14. }
  15.  
  16. event PostLoadGame()
  17. {
  18.     UpdateShadow();
  19. }
  20.  
  21. simulated function UpdateShadow()
  22. {
  23.     local Actor HitActor;
  24.     local vector HitNormal, HitLocation, ShadowStart;
  25.     local float Distance;
  26.     local bool bInvisible;
  27.  
  28.     if ( Owner==None || Owner.bDeleteMe)
  29.     {
  30.         Destroy();
  31.         Return;
  32.     }
  33.  
  34.     DeattachPrjDecal();
  35.     if (!class'GameInfo'.default.bDecoShadows)
  36.         return;
  37.  
  38.     SetRotation(rot(-16384,0,0));
  39.     ShadowStart = Owner.Location;
  40.     ShadowStart.Z-=(Owner.CollisionHeight-5);
  41.     HitActor = Trace(HitLocation, HitNormal, ShadowStart - vect(0, 0, 200), Location, false, vect(0.8,0.8,0)*Owner.CollisionRadius);
  42.  
  43.     if (HitActor == none)
  44.     {
  45.         Destroy();
  46.         return;
  47.     }
  48.  
  49.     if (class'GameInfo'.default.bUseRealtimeShadow && PLShadow == none)
  50.     {
  51.         PLShadow = ShadowBitMap(Level.AllocateObj(Class'ShadowBitMap'));
  52.         if( PLShadow==None )
  53.             PLShadow = new(Outer)Class'ShadowBitMap';
  54.         PLShadow.ProjectingActor = Owner;
  55.         PLShadow.ProjectDirection = rot(16384,0,0);
  56.         ProjectTexture = PLShadow;
  57.         if( PLShadow.USize!=Class'DecoShadow'.Default.ShadowDetailRes )
  58.             PLShadow.SetShadowRes(Class'DecoShadow'.Default.ShadowDetailRes,Class'DecoShadow'.Default.ShadowDetailRes);
  59.         PLShadow.Softness = Class'DecoShadow'.Static.GetShadowSoftness();
  60.         PLShadow.StaticLevel = 1;
  61.         ProjectStyle = STY_AlphaBlend;
  62.     }
  63.     else if (!class'GameInfo'.default.bUseRealtimeShadow && PLShadow != none)
  64.     {
  65.         PLShadow.ProjectingActor = none;
  66.         Level.FreeObject(PLShadow);
  67.         PLShadow = none;
  68.         ProjectTexture = default.ProjectTexture;
  69.         ProjectStyle = default.ProjectStyle;
  70.     }
  71.  
  72.     Distance = FMax(Owner.Location.Z - Owner.CollisionHeight - HitLocation.Z, 0.f);
  73.  
  74.     if (PLShadow != none)
  75.     {
  76.         ProjectorScale = FMax(Owner.CollisionRadius, 18.f) * (16.f / class'DecoShadow'.default.ShadowDetailRes);
  77.         PLShadow.ShadowScale = 0.8f / ProjectorScale;
  78.         PLShadow.Gradience = Min(Distance + 100, 255);
  79.         if (PLShadow.Gradience == 255)
  80.             bInvisible = true;
  81.     }
  82.     else
  83.     {
  84.         ProjectorScale = Owner.CollisionRadius/70.f * class'DecoShadow'.default.ShadowScaling *
  85.             (1.f - Distance / FMin(2 * Owner.CollisionRadius, 155.0));
  86.         if (ProjectorScale <= 0)
  87.             bInvisible = true;
  88.     }
  89.  
  90.     bOptionalUpdate =
  91.         bOptionalUpdate &&
  92.         class'DecoShadow'.default.bOptimizeTracing &&
  93.         (!HitActor.bIsMover || HitActor.Brush == none);
  94.  
  95.     SetLocation(HitLocation + vect(0, 0, 20));
  96.     if (!bInvisible)
  97.         AttachPrjDecal();
  98. }
  99.  
  100. simulated function Destroyed()
  101. {
  102.     if( PLShadow!=None )
  103.     {
  104.         PLShadow.ProjectingActor = None;
  105.         Level.FreeObject(PLShadow);
  106.         PLShadow = None;
  107.     }
  108.     Super.Destroyed();
  109. }
  110.  
  111. simulated function Touch( Actor Other )
  112. {
  113.     if( bProjectActors && !Other.bHidden && Other.DrawType==DT_Mesh && Other.Mesh!=None && Other!=Owner )
  114.         AttachActor(Other);
  115. }
  116.  
  117. defaultproperties
  118. {
  119.     ProjectTexture=Texture'BlobShadow'
  120.     ProjectorScale=0.50
  121.     ProjectStyle=STY_Modulated
  122.     bCollideActors=false
  123.     bOptionalUpdate=true
  124. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement