Guest User

Untitled

a guest
Aug 1st, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package  
  2. {
  3.     import flash.display.*;
  4.     import flash.display.BlendModeShader;
  5.     import flash.display.shaders.BlendModeSoftlight;
  6.     import flash.geom.Matrix;
  7.     import flash.geom.Rectangle;
  8.     import org.flixel.*;
  9.    
  10.     /**
  11.      * ...
  12.      * @author Lordn
  13.      */
  14.     public class LightOverlay extends FlxGroup
  15.     {
  16.         private var light:Shape;
  17.         private var darkness:BitmapData;
  18.         private var fog:Sprite;
  19.        
  20.         private var _lightList:Array;
  21.        
  22.         private var _debug:FlxText;
  23.         public function LightOverlay()
  24.         {
  25.             _lightList = new Array();
  26.             _debug = new FlxText(0, 0, FlxG.width);
  27.             add(_debug);
  28.             _debug.scrollFactor.x = _debug.scrollFactor.y = 0;
  29.            
  30.             light = new Shape();
  31.             light.blendMode = BlendMode.NORMAL;
  32.             //light.blendShader = new BlendModeSoftlight();
  33.            
  34.             darkness = new BitmapData((320 / 16) + 1, (240 / 16) + 1, true, 0xff000000);
  35.            
  36.             //fog = new Sprite();
  37.             //fog.blendMode = BlendMode.MULTIPLY;
  38.             //fog.graphics.beginFill(0x000000, 0.5);
  39.             //fog.graphics.drawRect(0, 0, 320 / 16, 240 / 16);
  40.             //fog.addChild(light);
  41.            
  42.         }
  43.        
  44.         public function addLight(light:Light):void
  45.         {
  46.             _lightList.push(light);
  47.         }
  48.        
  49.         override public function draw():void
  50.         {
  51.             super.draw();
  52.            
  53.             light.graphics.clear();
  54.             darkness.fillRect( new Rectangle(0, 0, (320 / 16) + 1, (240 / 16) + 1), 0x00000000);
  55.            
  56.             var xShift:Number = 0;
  57.             var yShift:Number = 0;
  58.            
  59.             //Shift this to be world-aligned (this makes life weird)
  60.             xShift = FlxG.camera.scroll.x % 16;
  61.             yShift = FlxG.camera.scroll.y % 16;
  62.             //xShift = Math.abs(xShift);
  63.            
  64.             _debug.text = "xShift: " + xShift + ", yShift: " + yShift + "\n";
  65.             _debug.text += "camScrollX: " + FlxG.camera.scroll.x + ", camScrollY: " + FlxG.camera.scroll.y;
  66.             var lightNum:int = 0;
  67.             for each( var l:Light in _lightList)
  68.             {
  69.                 lightNum++;
  70.                 //Let's transform the worldspace positions into screenspace
  71.                 var screenPos:FlxPoint = l.getScreenXY();
  72.                
  73.                 //Ofset by half a Y coordinate to make us re-align with the grid.
  74.                 screenPos.y += 8;
  75.                 screenPos.x += 8;
  76.                
  77.                 //var screenX:int =
  78.                 light.graphics.beginFill(0xFFFFFF, 0.2);
  79.                 light.graphics.drawCircle(screenPos.x / 16, screenPos.y / 16, l.radius / 16);
  80.                 light.graphics.endFill();
  81.                
  82.                 _debug.text += "L#: " + lightNum + "sPos.x: " + screenPos.x / 16 + "sPos.y: " + screenPos.y / 16 + "\n";
  83.             }
  84.            
  85.             darkness.draw(light);
  86.             var scaleMatrix:Matrix = new Matrix(16, 0, 0, 16, xShift, yShift);
  87.             FlxG.camera.buffer.draw(darkness, scaleMatrix, null, BlendMode.NORMAL);
  88.         }
  89.        
  90.     }
  91.  
  92. }
Add Comment
Please, Sign In to add comment