// TODO make these variables (var FLOOR_WIDTH 46) (var FLOOR_HEIGHT 32) (var SPRITE_HEIGHT 55) (prop :Array floorTiles []) (prop &mut :ScenData data null) (prop :FlxCamera worldCamera (new FlxCamera)) (var SCROLL_BOUND_MARGIN 200) (method &override :Void create [] (super.create) (set data (ScenData.coreData)) (Scenario.test) (worldCamera.copyFrom FlxG.camera) (FlxG.cameras.add worldCamera) (let [valleydy (Scenario.fromBasFile "Blades of Avernum Scenarios/Valley of Dying Things/valleydy.bas")] (addSprites // 2D nth -- pretty cool (nth valleydy.outdoorSections 0 2))) (prop &mut :FlxSprite border (new FlxSprite)) (set border (SpriteSheet.fromWholeBmp "${data.data}/Game Graphics/G801.bmp")) (worldCamera.addBorder border) (add tileSprites) (worldCamera.calculateScrollBounds tileSprites SCROLL_BOUND_MARGIN)) (var SELECTED_COLOR FlxColor.LIME) (var NORMAL_COLOR FlxColor.WHITE) (var CLIFF_HEIGHT 22) (var :FlxTypedGroup tileSprites (new FlxTypedGroup)) (method :Void addSprites [:TileMap map] (let [&mut rowStartX 0 &mut rowStartY 0] (doFor tileY (range map.height) (let [&mut x rowStartX &mut y rowStartY] (doFor tileX (range map.width) (let [height (nth map.floorHeights tileX tileY) floor (nth map.floorCodes tileX tileY) terrain (nth map.terrainCodes tileX tileY) yOffset (* CLIFF_HEIGHT height)] // First add the floor (let [tileSprite (data.floorSprite floor)] // TODO add cliffs if it's higher than the one in front of it (when tileSprite (set tileSprite.x x) (set tileSprite.y (- y yOffset)) (set tileSprite.cameras [worldCamera]) (FlxMouseEventManager.add tileSprite // handle click on floor: ->downTS {} ->upTS {} ->overTS (set overTS.color SELECTED_COLOR) ->outTS (set outTS.color NORMAL_COLOR)) (tileSprites.add tileSprite))) // TODO add any items // TODO add any characters (let [tileSprite (data.terrainSprite terrain (map.wallSheet 1) (map.wallSheet 2))] (when tileSprite (+= tileSprite.x x) (+= tileSprite.y (- y yOffset)) (set tileSprite.cameras [worldCamera]) (FlxMouseEventManager.add tileSprite // Handle click on terrain: ->downTS {} ->upTS {} ->overTS (set overTS.color SELECTED_COLOR) ->outTS (set outTS.color NORMAL_COLOR)) (tileSprites.add tileSprite)))) (+= x (/ FLOOR_WIDTH 2)) (+= y (/ FLOOR_HEIGHT 2)))) (-= rowStartX (/ FLOOR_WIDTH 2)) (+= rowStartY (/ FLOOR_HEIGHT 2))))) (var CAMERA_SPEED 500) (method &override :Void update [:Float elapsed] (super.update elapsed) // scroll to zoom: (worldCamera.updateScrollWheelZoom elapsed 1) // F1 to toggle fullscreen: (when FlxG.keys.justPressed.F1 (set FlxG.fullscreen !FlxG.fullscreen)) (worldCamera.updateKeyControl elapsed CAMERA_SPEED ->{FlxG.keys.pressed.LEFT} ->{FlxG.keys.pressed.RIGHT} ->{FlxG.keys.pressed.UP} ->{FlxG.keys.pressed.DOWN}) (worldCamera.updateMouseBorderControl elapsed CAMERA_SPEED 0.02 FlxG.camera))