diff --git a/haxelib.json b/haxelib.json index 5cc47bf..0a802f5 100644 --- a/haxelib.json +++ b/haxelib.json @@ -4,6 +4,7 @@ "classPath": "src/", "dependencies": { "kiss": "", + "kiss-flixel": "", "hollywoo": "" }, "url": "https://github.com/NQNStudios/kisslang", diff --git a/src/hollywoo_flixel/FlxDirector.hx b/src/hollywoo_flixel/FlxDirector.hx index 311b051..77c4dce 100644 --- a/src/hollywoo_flixel/FlxDirector.hx +++ b/src/hollywoo_flixel/FlxDirector.hx @@ -12,13 +12,12 @@ import hollywoo.Movie; import hollywoo.Scene; import hollywoo.Director; import hollywoo_flixel.FlxMovie; -import hollywoo_flixel.SpriteTools; import flixel.util.FlxColor; import flixel.text.FlxText; import flixel.system.FlxSound; import flixel.util.FlxTimer; import haxe.Constraints; - +import kiss_flixel.SpriteTools; @:build(kiss.Kiss.build()) class FlxDirector implements Director {} diff --git a/src/hollywoo_flixel/FlxMovie.hx b/src/hollywoo_flixel/FlxMovie.hx index 7c6a7ae..0c93c79 100644 --- a/src/hollywoo_flixel/FlxMovie.hx +++ b/src/hollywoo_flixel/FlxMovie.hx @@ -6,7 +6,7 @@ import flixel.system.FlxSound; import hollywoo.Movie; import hollywoo_flixel.ActorFlxSprite; import hollywoo_flixel.SceneFlxState; -import hollywoo_flixel.SpriteTools; +import kiss_flixel.SpriteTools; import openfl.Assets; enum FlxStagePosition { diff --git a/src/hollywoo_flixel/SpriteTools.hx b/src/hollywoo_flixel/SpriteTools.hx deleted file mode 100644 index e0830bf..0000000 --- a/src/hollywoo_flixel/SpriteTools.hx +++ /dev/null @@ -1,28 +0,0 @@ -package hollywoo_flixel; - -import kiss.Prelude; -import kiss.List; -import flixel.FlxSprite; -import flixel.util.FlxColor; -import flixel.text.FlxText; -import flixel.math.FlxPoint; - -enum RelativeCoordinate { - // Negative means to count back from the far edge - Pixels(p:Int); // Pixels from an edge. - Percent(p:Float); // Percent from an edge. -1 to 1 -} - -typedef RelativePosition = { - x:RelativeCoordinate, - y:RelativeCoordinate, - ?anchorX:RelativeCoordinate, // default Percent(0.5) - ?anchorY:RelativeCoordinate, // default Percent(0.5) - ?sizeX:RelativeCoordinate, - ?sizeY:RelativeCoordinate, - ?offsetX:Int, - ?offsetY:Int -}; - -@:build(kiss.Kiss.build()) -class SpriteTools {} diff --git a/src/hollywoo_flixel/SpriteTools.kiss b/src/hollywoo_flixel/SpriteTools.kiss deleted file mode 100644 index 9f4e3bc..0000000 --- a/src/hollywoo_flixel/SpriteTools.kiss +++ /dev/null @@ -1,53 +0,0 @@ -// Calculate where to draw the given stamp sprite on the given canvas sprite, as percentages or pixels from edge -(function :Array positionOn [:FlxSprite stamp :FlxSprite canvas :RelativePosition pos] - (unless pos.anchorX (set pos.anchorX (Percent 0.5))) - (unless pos.anchorY (set pos.anchorY (Percent 0.5))) - (let [&mut x (coordIn pos.x (/ canvas.width canvas.scale.x) pos.offsetX) - &mut y (coordIn pos.y (/ canvas.height canvas.scale.y) pos.offsetY)] - (-= x (coordIn pos.anchorX stamp.width)) - (-= y (coordIn pos.anchorY stamp.height)) - [x y])) - -(function :Int coordIn [:RelativeCoordinate coord :Float range &opt :Int offset] - (+ (or offset 0) - (Math.round - (case coord - ((when (and (>= p -1) (< p 0)) (Percent p)) - (+ range (* p range))) - ((when (and (>= p -range) (< p 0)) (Pixels p)) - (+ range p)) - ((when (<= p 1) (Percent p)) - (* range p)) - ((when (<= p range) (Pixels p)) - p) - (otherwise (throw "$coord is out of range $range")))))) - -(function :Void scaleStampOn [:FlxSprite stamp :FlxSprite canvas :RelativePosition pos] - (let [&mut x 0 &mut y 0] - (when pos.sizeX - (set x (coordIn pos.sizeX canvas.frameWidth))) - (when pos.sizeY - (set y (coordIn pos.sizeY canvas.frameHeight))) - (stamp.setGraphicSize x y) - (stamp.updateHitbox))) - -(function :Void drawOnSprite [:FlxSprite stamp :FlxSprite canvas :RelativePosition pos] - (scaleStampOn stamp canvas pos) - (let [[x y] (positionOn stamp canvas pos)] - (let [oX stamp.origin.x - oY stamp.origin.y] - (stamp.origin.set 0 0) - (canvas.stamp stamp x y) - (stamp.origin.set oX oY)))) - -// TODO allow specifying size relative to canvas -(function :Void writeOnSprite [:String text :Int size :FlxSprite canvas :RelativePosition pos &opt :FlxColor color] - (let [lines (text.split "\n") - &mut offsetY (/ (* size lines.length) -2)] - (doFor text lines - (set pos.offsetY offsetY) - (+= offsetY size) - (let [text (new FlxText 0 0 0 text size)] - (when color - (set text.color color)) - (drawOnSprite text canvas pos))))) \ No newline at end of file