[asciilib] White cell in Death Trap
This commit is contained in:
@@ -2,6 +2,8 @@ package;
|
||||
|
||||
import asciilib.GameLogic;
|
||||
import asciilib.Graphics;
|
||||
import asciilib.Colors;
|
||||
import kiss.Prelude;
|
||||
|
||||
@:build(kiss.Kiss.build())
|
||||
class DeathTrapLogic implements GameLogic {}
|
||||
|
@@ -1,4 +1,9 @@
|
||||
(defnew [] [:Int a 5])
|
||||
(defprop &mut firstDraw true)
|
||||
|
||||
(defmethod new [] 0)
|
||||
|
||||
(defmethod :Void update [:Float deltaSeconds] 0)
|
||||
(defmethod :Void draw [:Void->Graphics graphics] 0)
|
||||
(defmethod :Void draw [:Void->Graphics graphics]
|
||||
(when firstDraw
|
||||
(set firstDraw false)
|
||||
(.setBackgroundColor (graphics) 5 5 Colors.White)))
|
@@ -11,7 +11,7 @@ class PlayState extends FlxState
|
||||
override public function create()
|
||||
{
|
||||
super.create();
|
||||
game = new Game("Beware Yon Death Trap", 100, 40, 8, 12, new DeathTrapLogic(), new FlxGraphicsBackend());
|
||||
game = new Game("Beware Yon Death Trap", 40, 24, 8, 12, new DeathTrapLogic(), new FlxGraphicsBackend(this));
|
||||
}
|
||||
|
||||
override public function update(elapsed:Float)
|
||||
|
@@ -13,5 +13,25 @@
|
||||
(green.fill 0 area color.g)
|
||||
(blue.fill 0 area color.b))
|
||||
|
||||
(defmethod _index [x y]
|
||||
(+ x (* y width)))
|
||||
|
||||
(defmacro withIndex [idxName xName yName &rest body]
|
||||
`(let [,idxName (_index ,xName ,yName)]
|
||||
,@body))
|
||||
|
||||
(defmethod getPixel [x y]
|
||||
(withIndex idx x y
|
||||
(object r (red.get idx) g (green.get idx) b (blue.get idx))))
|
||||
|
||||
(defmethod setPixel [x y color]
|
||||
(withIndex idx x y
|
||||
(red.set idx color.r)
|
||||
(green.set idx color.g)
|
||||
(blue.set idx color.b)))
|
||||
|
||||
(defun equal [c1 c2]
|
||||
(and (= c1.r c2.r) (= c1.g c2.g) (= c1.b c2.b)))
|
||||
|
||||
(defvar Black (object r 0 g 0 b 0))
|
||||
(defvar White (object r 255 g 255 b 255))
|
@@ -1,4 +1,4 @@
|
||||
package asciilib;
|
||||
|
||||
@:build(kiss.Kiss.build())
|
||||
class Graphics {}
|
||||
class Graphics extends Surface {}
|
||||
|
@@ -1,2 +1,2 @@
|
||||
(defnew [width height]
|
||||
[:Surface surface (new Surface width height)])
|
||||
(defmethod new [width height]
|
||||
(super width height))
|
@@ -2,3 +2,6 @@
|
||||
[:Int width _width
|
||||
:Int height _height
|
||||
:Array<String> rows (for _ (range height) (* (or letter " ") width))])
|
||||
|
||||
(defmethod getChar [x y]
|
||||
(.charAt (nth rows y) x))
|
@@ -2,5 +2,10 @@ package asciilib;
|
||||
|
||||
import asciilib.Colors;
|
||||
|
||||
typedef Letter = {
|
||||
char:String,
|
||||
color:Color
|
||||
};
|
||||
|
||||
@:build(kiss.Kiss.build())
|
||||
class Surface {}
|
||||
|
@@ -6,3 +6,12 @@
|
||||
:Colors letterColors (new Colors width height (or letterColor Colors.White))
|
||||
:Grid<Bool> opacity (new Grid width height true)
|
||||
:Grid<String> specialInfo (new Grid width height "")])
|
||||
|
||||
(defmethod getBackgroundColor [x y]
|
||||
(backgroundColors.getPixel x y))
|
||||
|
||||
(defmethod setBackgroundColor [x y color]
|
||||
(backgroundColors.setPixel x y color))
|
||||
|
||||
(defmethod getLetter [x y]
|
||||
(object char (letters.getChar x y) color (letterColors.getPixel x y)))
|
@@ -2,6 +2,10 @@ package asciilib.backends.flixel;
|
||||
|
||||
import asciilib.GraphicsBackend;
|
||||
import asciilib.Graphics;
|
||||
import flixel.FlxState;
|
||||
import flixel.group.FlxGroup;
|
||||
import flixel.FlxSprite;
|
||||
import flixel.util.FlxColor;
|
||||
|
||||
@:build(kiss.Kiss.build())
|
||||
class FlxGraphicsBackend implements GraphicsBackend {}
|
||||
|
@@ -1,3 +1,20 @@
|
||||
(defnew [] [:Int a 5])
|
||||
(defmethod :Void initialize [:String title :Int width :Int height :Int letterWidth :Int letterHeight] 0)
|
||||
(defmethod :Void draw [:Graphics graphics] 0)
|
||||
(defprop &mut :FlxGroup backgroundColors null)
|
||||
(defprop &mut :Int letterWidth 0)
|
||||
(defprop &mut :Int letterHeight 0)
|
||||
(defnew [_state]
|
||||
[:FlxState state _state])
|
||||
|
||||
(defmethod :Void initialize [:String title :Int width :Int height :Int _letterWidth :Int _letterHeight]
|
||||
(set letterWidth _letterWidth)
|
||||
(set letterHeight _letterHeight))
|
||||
|
||||
(defmethod :Void draw [:Graphics graphics]
|
||||
(when backgroundColors (backgroundColors.kill))
|
||||
(set backgroundColors (new FlxGroup))
|
||||
(for x (range graphics.width)
|
||||
(for y (range graphics.height)
|
||||
(let [bgc (graphics.getBackgroundColor x y)]
|
||||
(unless (Colors.equal bgc Colors.Black)
|
||||
(let [sprite (new FlxSprite (* letterWidth x) (* letterHeight y))]
|
||||
(backgroundColors.add (sprite.makeGraphic letterWidth letterHeight (FlxColor.fromRGB bgc.r bgc.g bgc.b))))))))
|
||||
(state.add backgroundColors))
|
Reference in New Issue
Block a user