Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import flixel.FlxG;
- import flixel.FlxObject;
- import flixel.tile.FlxTilemap;
- class TilemapManager extends FlxObject {
- private var playState:PlayState;
- private var map:Dynamic;
- private var levelNumber:Int;
- private var autoLoad:Bool;
- public function new(playState:PlayState, map:Dynamic, autoLoad:Bool = true, ?x:Float = 0, ?y:Float = 0) {
- super(x, y);
- this.playState = playState;
- this.tilemaps = new Array<Tilemap>();
- this.map = map;
- if (autoLoad) {
- this.loadLevel(1);
- }
- }
- public function goToLevel(levelNumber:Int) {
- this.loadLevel(levelNumber);
- }
- private function loadLevel(levelNumber:Int) {
- var level = this.map.levels[levelNumber - 1];
- if (level == null) {
- return;
- }
- FlxG.worldBounds.set(0, 0, level.pxWid, level.pxHei);
- this.levelNumber = levelNumber;
- var layers:Array<led.Layer> = @:privateAccess level._layers;
- for (layer in layers) {
- switch (layer.type) {
- case Tiles:
- this.loadTiles(cast layer);
- case Entities:
- this.loadEntities(cast layer);
- default:
- }
- }
- }
- private function loadTiles(layer:Dynamic) {
- var tilemap = new Tilemap(this.x, this.y, layer);
- this.playState.add(tilemap);
- }
- private function loadEntities(entityLayer:led.Layer_Entities) {
- var entities:Array<led.Entity> = @:privateAccess entityLayer._entities;
- for (entity in entities) {
- var resolved = Type.resolveClass(entity.identifier);
- var instance = Type.createInstance(resolved, [entity.pixelX, entity.pixelY]);
- this.playState.add(instance);
- }
- }
- }
- class Tilemap extends FlxTilemap {
- public function new(?x:Float, ?y:Float, tileLayer:Dynamic) {
- super();
- this.loadMapFromArray(this.getTilesArray(tileLayer), tileLayer.cWid, tileLayer.cHei, this.getConvertedPath(tileLayer.tileset.relPath),
- tileLayer.gridSize, tileLayer.gridSize, OFF, 1);
- }
- private function getConvertedPath(path:String):String {
- return StringTools.replace(path, '../', 'assets/');
- }
- private function getTilesArray(tileLayer:Dynamic):Array<Int> {
- var arr = new Array<Int>();
- for (i in 0...tileLayer.cHei) {
- for (j in 0...tileLayer.cWid) {
- arr.push(tileLayer.getTileIdAt(j, i) + 1);
- }
- }
- return arr;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement