iso engine handle blades spritesheet properly
This commit is contained in:
@@ -2,48 +2,32 @@
|
|||||||
(var FLOOR_WIDTH 46)
|
(var FLOOR_WIDTH 46)
|
||||||
(var FLOOR_HEIGHT 32)
|
(var FLOOR_HEIGHT 32)
|
||||||
(var SPRITE_HEIGHT 55)
|
(var SPRITE_HEIGHT 55)
|
||||||
(var SPRITE_PADDING 1)
|
|
||||||
|
|
||||||
(prop :Array<FlxSprite> floorTiles [])
|
(prop :Array<FlxSprite> floorTiles [])
|
||||||
|
|
||||||
(method &override :Void create []
|
(method &override :Void create []
|
||||||
(super.create)
|
(super.create)
|
||||||
// TODO load from a more accessible path
|
// TODO load from a more accessible path
|
||||||
(let [bitmapData (Bmp.loadBitmapData "Data/Terrain Graphics/G796.bmp")
|
(let [spriteSheet (data.blades.SpriteSheet.fromSimpleBmp "Data/Terrain Graphics/G796.bmp" FLOOR_WIDTH SPRITE_HEIGHT)]
|
||||||
spriteSheet (.loadGraphic (new FlxSprite) (FlxGraphic.fromBitmapData bitmapData))]
|
(addSpriteLayer (for row (range 5) (collect (range 5))) spriteSheet)))
|
||||||
(spriteSheet.replaceColor FlxColor.WHITE FlxColor.TRANSPARENT)
|
|
||||||
(let [sheetWidth (/ (- spriteSheet.frameWidth SPRITE_PADDING) (+ SPRITE_PADDING FLOOR_WIDTH))
|
|
||||||
sheetHeight (/ (- spriteSheet.frameHeight SPRITE_PADDING) (+ SPRITE_PADDING SPRITE_HEIGHT))]
|
|
||||||
(doFor row (range sheetHeight)
|
|
||||||
(doFor col (range sheetWidth)
|
|
||||||
(floorTiles.push (let [tile (spriteSheet.clone)]
|
|
||||||
(set tile.clipRect (new FlxRect
|
|
||||||
(+ SPRITE_PADDING (* col (+ SPRITE_PADDING FLOOR_WIDTH)))
|
|
||||||
(+ SPRITE_PADDING (* row (+ SPRITE_PADDING SPRITE_HEIGHT)))
|
|
||||||
FLOOR_WIDTH
|
|
||||||
SPRITE_HEIGHT))
|
|
||||||
tile))))))
|
|
||||||
|
|
||||||
(addSpriteLayer (for row (range 5) (collect (range 5)))))
|
|
||||||
|
|
||||||
(method :Void addSpriteLayer [:Array<Array<Int>> tiles]
|
(method :Void addSpriteLayer [:Array<Array<Int>> tiles :FlxSprite spriteSheet]
|
||||||
(let [&mut rowStartX 0
|
(let [&mut rowStartX 0
|
||||||
&mut rowStartY 0]
|
&mut rowStartY 0]
|
||||||
(doFor row tiles
|
(doFor row tiles
|
||||||
(let [&mut x rowStartX
|
(let [&mut x rowStartX
|
||||||
&mut y rowStartY]
|
&mut y rowStartY]
|
||||||
(doFor tile row
|
(doFor tile row
|
||||||
(let [tileSprite (.clone (nth floorTiles tile))]
|
(let [tileSprite (.clone spriteSheet)]
|
||||||
(set tileSprite.x (- x tileSprite.clipRect.x))
|
(set tileSprite.animation.frameIndex tile)
|
||||||
(set tileSprite.y (- y tileSprite.clipRect.y))
|
(set tileSprite.x x)
|
||||||
|
(set tileSprite.y y)
|
||||||
(add tileSprite))
|
(add tileSprite))
|
||||||
(+= x (/ FLOOR_WIDTH 2))
|
(+= x (/ FLOOR_WIDTH 2))
|
||||||
(+= y (/ FLOOR_HEIGHT 2))))
|
(+= y (/ FLOOR_HEIGHT 2))))
|
||||||
|
|
||||||
(-= rowStartX (/ FLOOR_WIDTH 2))
|
(-= rowStartX (/ FLOOR_WIDTH 2))
|
||||||
(+= rowStartY (/ FLOOR_HEIGHT 2)))))
|
(+= rowStartY (/ FLOOR_HEIGHT 2)))))
|
||||||
|
|
||||||
(var CAMERA_SPEED 100)
|
(var CAMERA_SPEED 500)
|
||||||
|
|
||||||
(method &override :Void update [:Float elapsed]
|
(method &override :Void update [:Float elapsed]
|
||||||
(super.update elapsed)
|
(super.update elapsed)
|
||||||
|
13
projects/iso-rpg-engine/source/data/blades/SpriteSheet.hx
Normal file
13
projects/iso-rpg-engine/source/data/blades/SpriteSheet.hx
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
package data.blades;
|
||||||
|
|
||||||
|
import flixel.FlxSprite;
|
||||||
|
|
||||||
|
import kiss.Prelude;
|
||||||
|
import flash.display.BitmapData;
|
||||||
|
import flash.geom.Rectangle;
|
||||||
|
import flash.geom.Point;
|
||||||
|
import flixel.graphics.FlxGraphic;
|
||||||
|
import flixel.util.FlxColor;
|
||||||
|
|
||||||
|
@:build(kiss.Kiss.build())
|
||||||
|
class SpriteSheet {}
|
24
projects/iso-rpg-engine/source/data/blades/SpriteSheet.kiss
Normal file
24
projects/iso-rpg-engine/source/data/blades/SpriteSheet.kiss
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
// make a clean spritesheet the way Flixel wants it (no borders)
|
||||||
|
(function :FlxSprite fromSimpleBmp [file :Int frameWidth :Int frameHeight]
|
||||||
|
(let [oBmp (Bmp.loadBitmapData file)
|
||||||
|
oWidth oBmp.width
|
||||||
|
oHeight oBmp.height
|
||||||
|
columns (/ (- oWidth 1) (+ frameWidth 1))
|
||||||
|
rows (/ (- oHeight 1) (+ frameHeight 1))
|
||||||
|
width (* frameWidth columns)
|
||||||
|
height (* frameHeight rows)
|
||||||
|
bmp (new BitmapData (Std.int width) (Std.int height))
|
||||||
|
spriteSheet (new FlxSprite)]
|
||||||
|
(doFor row (range rows)
|
||||||
|
(doFor col (range columns)
|
||||||
|
(bmp.copyPixels oBmp (new Rectangle
|
||||||
|
(+ 1 (* col (+ 1 frameWidth)))
|
||||||
|
(+ 1 (* row (+ 1 frameHeight)))
|
||||||
|
frameWidth
|
||||||
|
frameHeight)
|
||||||
|
(new Point (* col frameWidth) (* row frameHeight)))))
|
||||||
|
(spriteSheet.loadGraphic (FlxGraphic.fromBitmapData bmp) true frameWidth frameHeight)
|
||||||
|
(spriteSheet.replaceColor FlxColor.WHITE FlxColor.TRANSPARENT)
|
||||||
|
spriteSheet))
|
||||||
|
|
||||||
|
// TODO some of the sprite sheets mix multiple frame sizes (i.e. character sheets)
|
Reference in New Issue
Block a user