iso engine sampling of blades floor sprites

This commit is contained in:
2022-06-07 22:20:07 +00:00
parent 3ee0fa4626
commit b32792d802
4 changed files with 71 additions and 15 deletions

View File

@@ -11,6 +11,7 @@ import flixel.FlxG;
import flash.display.BitmapData;
import kiss.Prelude;
import data.blades.ScenData;
@:build(kiss.Kiss.build())
class IsometricMapState extends FlxState {}
class IsometricMapState<FloorData, TerrainData, EntityData, ItemData> extends FlxState {}

View File

@@ -3,22 +3,21 @@
(var FLOOR_HEIGHT 32)
(var SPRITE_HEIGHT 55)
(prop :Array<FlxSprite> floorTiles [])
(prop &mut :ScenData data null)
(method &override :Void create []
(super.create)
// TODO load from a more accessible path
(let [spriteSheet (data.blades.SpriteSheet.fromSimpleBmp "Data/Terrain Graphics/G796.bmp" FLOOR_WIDTH SPRITE_HEIGHT)]
(addSpriteLayer (for row (range 5) (collect (range 5))) spriteSheet)))
(set data (ScenData.coreData))
(addFloorLayer (groups (collect (range 255)) 32)))
(method :Void addSpriteLayer [:Array<Array<Int>> tiles :FlxSprite spriteSheet]
(method :Void addFloorLayer [:Array<Array<Int>> tiles]
(let [&mut rowStartX 0
&mut rowStartY 0]
(doFor row tiles
(let [&mut x rowStartX
&mut y rowStartY]
(doFor tile row
(let [tileSprite (.clone spriteSheet)]
(set tileSprite.animation.frameIndex tile)
(let [tileSprite (data.floorSprite tile)]
(set tileSprite.x x)
(set tileSprite.y y)
(add tileSprite))

View File

@@ -8,13 +8,6 @@ class Main extends Sprite
{
public function new()
{
var scenData = new ScenData();
scenData.load("Data/corescendata.txt");
scenData.load("Data/corescendata2.txt");
scenData.test();
super();
addChild(new FlxGame(0, 0, IsometricMapState));
}

View File

@@ -4,18 +4,81 @@ import haxe.iterators.DynamicAccessIterator;
import hscript.Parser;
import hscript.Interp;
import sys.io.File;
import sys.FileSystem;
import flixel.FlxSprite;
import flixel.util.FlxColor;
using Reflect;
using StringTools;
using haxe.io.Path;
class ScenData {
public function new() {}
private function new() {}
public var floorData:Map<Int, FloorData> = [];
public var terrainData:Map<Int, TerrainData> = [];
public var creatureData:Map<Int, CreatureData> = [];
public var itemData:Map<Int, ItemData> = [];
private var spriteSheets:Map<Int, FlxSprite> = [];
private var data = "";
public static function coreData() {
var d = new ScenData();
// TODO find the proper data path with the currently installed BoA depending on mac/windows
d.data = "Data";
// load core data:
d.load('${d.data}/corescendata.txt');
d.load('${d.data}/corescendata2.txt');
d.test();
return d;
}
private function floorOrTerrainSpriteSheet(num:Int) {
if (spriteSheets.exists(num)) {
return spriteSheets[num];
}
var path = '$data/Terrain Graphics/G$num.bmp';
spriteSheets[num] = SpriteSheet.fromSimpleBmp(path, 46, 55);
return spriteSheets[num];
}
public function floorSprite(floorId:Int) {
if (!floorData.exists(floorId)) {
var s = new FlxSprite(0, 0);
s.makeGraphic(46, 55, FlxColor.TRANSPARENT);
return s;
}
var fd = floorData[floorId];
var sprite = floorOrTerrainSpriteSheet(fd.which_sheet).clone();
sprite.animation.frameIndex = fd.which_icon;
// TODO if it's animated add the animations
return sprite;
}
public function terrainSprite(terrainId:Int) {
var td = terrainData[terrainId];
var sprite = floorOrTerrainSpriteSheet(td.which_sheet).clone();
sprite.animation.frameIndex = td.which_icon;
// TODO if it's a tall terrain combine it with the upper sprite and set its origin to offset y
// TODO if it's animated add the animations
return sprite;
}
static var failed:Array<String> = [];
static var passed = 0;
static function assert(e:Bool, msg="") {