Files
kiss-vscode/projects/iso-rpg-engine/source/BladesMapState.kiss

97 lines
4.0 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)
(prop :FlxCamera worldCamera (new FlxCamera))
(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 >:)
(nth valleydy.outdoorSections 0 2))
(prop &mut :FlxSprite border (new FlxSprite))
(set border (SpriteSheet.fromWholeBmp "${data.data}/Game Graphics/G801.bmp"))
(worldCamera.addBorder border)
(let [testRed (.makeGraphic (new FlxSprite 0 0) 16 16 FlxColor.RED)]
(set testRed.cameras [worldCamera])
(add testRed))))
(var SELECTED_COLOR FlxColor.LIME)
(var NORMAL_COLOR FlxColor.WHITE)
(var CLIFF_HEIGHT 22)
(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))
(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))
(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.15))