Advertisement
Guest User

LEd in Flixel

a guest
Sep 29th, 2020
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Haxe 2.22 KB | None | 0 0
  1. import flixel.FlxG;
  2. import flixel.FlxObject;
  3. import flixel.tile.FlxTilemap;
  4.  
  5. class TilemapManager extends FlxObject {
  6.     private var playState:PlayState;
  7.     private var map:Dynamic;
  8.     private var levelNumber:Int;
  9.     private var autoLoad:Bool;
  10.  
  11.     public function new(playState:PlayState, map:Dynamic, autoLoad:Bool = true, ?x:Float = 0, ?y:Float = 0) {
  12.         super(x, y);
  13.         this.playState = playState;
  14.  
  15.         this.tilemaps = new Array<Tilemap>();
  16.  
  17.         this.map = map;
  18.  
  19.         if (autoLoad) {
  20.             this.loadLevel(1);
  21.         }
  22.     }
  23.  
  24.     public function goToLevel(levelNumber:Int) {
  25.         this.loadLevel(levelNumber);
  26.     }
  27.  
  28.     private function loadLevel(levelNumber:Int) {
  29.         var level = this.map.levels[levelNumber - 1];
  30.  
  31.         if (level == null) {
  32.             return;
  33.         }
  34.  
  35.         FlxG.worldBounds.set(0, 0, level.pxWid, level.pxHei);
  36.  
  37.         this.levelNumber = levelNumber;
  38.  
  39.         var layers:Array<led.Layer> = @:privateAccess level._layers;
  40.  
  41.         for (layer in layers) {
  42.             switch (layer.type) {
  43.                 case Tiles:
  44.                     this.loadTiles(cast layer);
  45.                 case Entities:
  46.                     this.loadEntities(cast layer);
  47.                 default:
  48.             }
  49.         }
  50.     }
  51.  
  52.     private function loadTiles(layer:Dynamic) {
  53.         var tilemap = new Tilemap(this.x, this.y, layer);
  54.         this.playState.add(tilemap);
  55.     }
  56.  
  57.     private function loadEntities(entityLayer:led.Layer_Entities) {
  58.         var entities:Array<led.Entity> = @:privateAccess entityLayer._entities;
  59.         for (entity in entities) {
  60.             var resolved = Type.resolveClass(entity.identifier);
  61.             var instance = Type.createInstance(resolved, [entity.pixelX, entity.pixelY]);
  62.             this.playState.add(instance);
  63.         }
  64.     }
  65. }
  66.  
  67. class Tilemap extends FlxTilemap {
  68.     public function new(?x:Float, ?y:Float, tileLayer:Dynamic) {
  69.         super();
  70.         this.loadMapFromArray(this.getTilesArray(tileLayer), tileLayer.cWid, tileLayer.cHei, this.getConvertedPath(tileLayer.tileset.relPath),
  71.             tileLayer.gridSize, tileLayer.gridSize, OFF, 1);
  72.     }
  73.  
  74.     private function getConvertedPath(path:String):String {
  75.         return StringTools.replace(path, '../', 'assets/');
  76.     }
  77.  
  78.     private function getTilesArray(tileLayer:Dynamic):Array<Int> {
  79.         var arr = new Array<Int>();
  80.  
  81.         for (i in 0...tileLayer.cHei) {
  82.             for (j in 0...tileLayer.cWid) {
  83.                 arr.push(tileLayer.getTileIdAt(j, i) + 1);
  84.             }
  85.         }
  86.  
  87.         return arr;
  88.     }
  89. }
  90.  
  91.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement