Advertisement
jewalky

Untitled

Mar 18th, 2017
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.85 KB | None | 0 0
  1. class DukeShadowSprite : Actor
  2. {
  3.     Default
  4.     {
  5.         Radius 0;
  6.         Height 0;
  7.    
  8.         +NOINTERACTION;
  9.        
  10.         RenderStyle "Stencil";
  11.         StencilColor "00 00 00";
  12.     }
  13.    
  14.     override void Tick()
  15.     {
  16.         if (!master)
  17.         {
  18.             // die
  19.             Destroy();
  20.             return;
  21.         }
  22.        
  23.         if (!master.bCorpse)
  24.         {
  25.             vector3 offsets = (0,0,0);
  26.             // note: this is a hack. gross hack. it works, except portals. in portals the shadow will still be random.
  27.             Actor consoleCamera = (consoleplayer>=0) ? players[consoleplayer].camera : null;
  28.             if (consoleCamera)
  29.             {
  30.                 vector3 awayFromCamera = (pos-consoleCamera.pos).Unit()/8;
  31.                 offsets = awayFromCamera;
  32.             }
  33.            
  34.             A_Warp(AAPTR_MASTER, offsets.x, offsets.y, offsets.z, 0, WARPF_ABSOLUTEOFFSET|WARPF_NOCHECKPOSITION|WARPF_TOFLOOR|WARPF_WARPINTERPOLATION|WARPF_COPYVELOCITY);
  35.            
  36.             sprite = master.sprite;
  37.             frame = master.frame;
  38.             A_SetScale(master.scale.x, master.scale.y/16);
  39.             alpha = master.alpha/2;
  40.             angle = master.angle;
  41.             A_SetSize(master.radius, 0, false);
  42.         }
  43.         else
  44.         {
  45.             alpha = 0;
  46.         }
  47.            
  48.         Super.Tick();
  49.        
  50.     }
  51.    
  52.     States
  53.     {
  54.     Spawn:
  55.         TNT1 A 1;
  56.         loop;
  57.     }
  58. }
  59.  
  60. class ShadowHandler : EventHandler
  61. {
  62.     override void WorldThingSpawned(WorldEvent ev)
  63.     {
  64.         // attach shadow to every monster (for now)
  65.         if (ev.Thing.bIsMonster)
  66.         {
  67.             DukeShadowSprite shadow = DukeShadowSprite(Actor.Spawn('DukeShadowSprite', ev.Thing.pos));
  68.             shadow.alpha = 0;
  69.             shadow.master = ev.Thing;
  70.         }
  71.     }
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement