Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package
- {
- import flash.display.*;
- import flash.display.BlendModeShader;
- import flash.display.shaders.BlendModeSoftlight;
- import flash.geom.Matrix;
- import flash.geom.Rectangle;
- import org.flixel.*;
- /**
- * ...
- * @author Lordn
- */
- public class LightOverlay extends FlxGroup
- {
- private var light:Shape;
- private var darkness:BitmapData;
- private var fog:Sprite;
- private var _lightList:Array;
- private var _debug:FlxText;
- public function LightOverlay()
- {
- _lightList = new Array();
- _debug = new FlxText(0, 0, FlxG.width);
- add(_debug);
- _debug.scrollFactor.x = _debug.scrollFactor.y = 0;
- light = new Shape();
- light.blendMode = BlendMode.NORMAL;
- //light.blendShader = new BlendModeSoftlight();
- darkness = new BitmapData((320 / 16) + 1, (240 / 16) + 1, true, 0xff000000);
- //fog = new Sprite();
- //fog.blendMode = BlendMode.MULTIPLY;
- //fog.graphics.beginFill(0x000000, 0.5);
- //fog.graphics.drawRect(0, 0, 320 / 16, 240 / 16);
- //fog.addChild(light);
- }
- public function addLight(light:Light):void
- {
- _lightList.push(light);
- }
- override public function draw():void
- {
- super.draw();
- light.graphics.clear();
- darkness.fillRect( new Rectangle(0, 0, (320 / 16) + 1, (240 / 16) + 1), 0x00000000);
- var xShift:Number = 0;
- var yShift:Number = 0;
- //Shift this to be world-aligned (this makes life weird)
- xShift = FlxG.camera.scroll.x % 16;
- yShift = FlxG.camera.scroll.y % 16;
- //xShift = Math.abs(xShift);
- _debug.text = "xShift: " + xShift + ", yShift: " + yShift + "\n";
- _debug.text += "camScrollX: " + FlxG.camera.scroll.x + ", camScrollY: " + FlxG.camera.scroll.y;
- var lightNum:int = 0;
- for each( var l:Light in _lightList)
- {
- lightNum++;
- //Let's transform the worldspace positions into screenspace
- var screenPos:FlxPoint = l.getScreenXY();
- //Ofset by half a Y coordinate to make us re-align with the grid.
- screenPos.y += 8;
- screenPos.x += 8;
- //var screenX:int =
- light.graphics.beginFill(0xFFFFFF, 0.2);
- light.graphics.drawCircle(screenPos.x / 16, screenPos.y / 16, l.radius / 16);
- light.graphics.endFill();
- _debug.text += "L#: " + lightNum + "sPos.x: " + screenPos.x / 16 + "sPos.y: " + screenPos.y / 16 + "\n";
- }
- darkness.draw(light);
- var scaleMatrix:Matrix = new Matrix(16, 0, 0, 16, xShift, yShift);
- FlxG.camera.buffer.draw(darkness, scaleMatrix, null, BlendMode.NORMAL);
- }
- }
- }
Add Comment
Please, Sign In to add comment