99 lines
3.9 KiB
Plaintext
99 lines
3.9 KiB
Plaintext
// TODO make these variables
|
|
(var FLOOR_WIDTH 46)
|
|
(var FLOOR_HEIGHT 32)
|
|
(var SPRITE_HEIGHT 55)
|
|
(prop :Array<FlxSprite> floorTiles [])
|
|
(prop &mut :ScenData data null)
|
|
|
|
(method &override :Void create []
|
|
(super.create)
|
|
(set data (ScenData.coreData))
|
|
|
|
(Scenario.test)
|
|
|
|
(let [valleydy (Scenario.fromBasFile "Blades of Avernum Scenarios/Valley of Dying Things/valleydy.bas")]
|
|
~valleydy)
|
|
|
|
(addFloorLayer (groups (collect (range 255)) 32 Keep))
|
|
(addTerrainLayer (groups (concat
|
|
(for _ (range 255) -1)
|
|
(collect (range 512)))
|
|
32 Keep)))
|
|
|
|
(var SELECTED_COLOR FlxColor.LIME)
|
|
(var NORMAL_COLOR FlxColor.WHITE)
|
|
|
|
(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 (data.floorSprite tile)]
|
|
(set tileSprite.x x)
|
|
(set tileSprite.y y)
|
|
(FlxMouseEventManager.add tileSprite
|
|
// handle click on floor:
|
|
->downTS {}
|
|
->upTS {}
|
|
->overTS (set overTS.color SELECTED_COLOR)
|
|
->outTS (set outTS.color NORMAL_COLOR))
|
|
(add tileSprite))
|
|
(+= x (/ FLOOR_WIDTH 2))
|
|
(+= y (/ FLOOR_HEIGHT 2))))
|
|
(-= rowStartX (/ FLOOR_WIDTH 2))
|
|
(+= rowStartY (/ FLOOR_HEIGHT 2)))))
|
|
|
|
// TODO creatures and items need to be added when their floor and terrain tiles are
|
|
// added, to preserve Z order
|
|
(method :Void addTerrainLayer [: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 (data.terrainSprite tile)]
|
|
(set tileSprite.x x)
|
|
(set tileSprite.y y)
|
|
(when (> tileSprite.height SPRITE_HEIGHT)
|
|
(-= tileSprite.y SPRITE_HEIGHT))
|
|
(FlxMouseEventManager.add tileSprite
|
|
// Handle click on terrain:
|
|
->downTS {}
|
|
->upTS {}
|
|
->overTS (set overTS.color SELECTED_COLOR)
|
|
->outTS (set outTS.color NORMAL_COLOR))
|
|
(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:
|
|
#{
|
|
if (FlxG.mouse.wheel != 0) {
|
|
FlxG.camera.zoom += (FlxG.mouse.wheel / 10);
|
|
}
|
|
}#
|
|
// F1 to toggle fullscreen:
|
|
(when FlxG.keys.justPressed.F1
|
|
(set FlxG.fullscreen !FlxG.fullscreen))
|
|
|
|
(let [&mut cameraMovement (new FlxVector 0 0)]
|
|
(when (or (= 0 FlxG.mouse.screenX) FlxG.keys.pressed.LEFT)
|
|
(set cameraMovement.x -1))
|
|
(when (or (= 0 FlxG.mouse.screenY) FlxG.keys.pressed.UP)
|
|
(set cameraMovement.y -1))
|
|
(when (or (= (- FlxG.width 1) FlxG.mouse.screenX) FlxG.keys.pressed.RIGHT)
|
|
(set cameraMovement.x 1))
|
|
(when (or (= (- FlxG.height 1) FlxG.mouse.screenY) FlxG.keys.pressed.DOWN)
|
|
(set cameraMovement.y 1))
|
|
(set cameraMovement (cameraMovement.truncate 1))
|
|
(set cameraMovement (cameraMovement.scale (* elapsed CAMERA_SPEED)))
|
|
(set FlxG.camera.scroll (FlxG.camera.scroll.add cameraMovement.x cameraMovement.y)))) |