From 736a1982b40e958055570003a68caa7133e71017 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Wed, 22 Jun 2022 00:08:14 +0000 Subject: [PATCH] updateMouseBorderControl --- .../iso-rpg-engine/source/BladesMapState.kiss | 3 +- .../source/data/blades/Scenario.hx | 6 +++- .../source/data/blades/TileMap.hx | 2 +- .../src/kiss_flixel/CameraTools.kiss | 30 +++++++++++++++++-- .../source/PlayState.kiss | 2 +- 5 files changed, 37 insertions(+), 6 deletions(-) diff --git a/projects/iso-rpg-engine/source/BladesMapState.kiss b/projects/iso-rpg-engine/source/BladesMapState.kiss index 8c81767a..cec67f32 100644 --- a/projects/iso-rpg-engine/source/BladesMapState.kiss +++ b/projects/iso-rpg-engine/source/BladesMapState.kiss @@ -97,4 +97,5 @@ ->{FlxG.keys.pressed.LEFT} ->{FlxG.keys.pressed.RIGHT} ->{FlxG.keys.pressed.UP} - ->{FlxG.keys.pressed.DOWN})) \ No newline at end of file + ->{FlxG.keys.pressed.DOWN}) + (worldCamera.updateMouseBorderControl elapsed CAMERA_SPEED 0.15)) \ No newline at end of file diff --git a/projects/iso-rpg-engine/source/data/blades/Scenario.hx b/projects/iso-rpg-engine/source/data/blades/Scenario.hx index 231a08e6..d075110e 100644 --- a/projects/iso-rpg-engine/source/data/blades/Scenario.hx +++ b/projects/iso-rpg-engine/source/data/blades/Scenario.hx @@ -159,6 +159,7 @@ class Scenario { stream.tracePosition(); var townIdx = 0; + // TODO find an end condition for this loop while (true) { var name = stream.readCString(); @@ -170,7 +171,10 @@ class Scenario { - towns[townIdx++] = map; + scen.towns[townIdx++] = map; + + // TODO don't + break; } // 1E274: Fort Talrus (name of town 0) diff --git a/projects/iso-rpg-engine/source/data/blades/TileMap.hx b/projects/iso-rpg-engine/source/data/blades/TileMap.hx index 8c720aa4..aea618fc 100644 --- a/projects/iso-rpg-engine/source/data/blades/TileMap.hx +++ b/projects/iso-rpg-engine/source/data/blades/TileMap.hx @@ -29,7 +29,7 @@ class TileMap { public function wallSheet(num:Int) { return switch (type) { - case Town(det): + case Town(underground, det): if (num == 1) det.wallSheet1; else diff --git a/projects/kiss-flixel/src/kiss_flixel/CameraTools.kiss b/projects/kiss-flixel/src/kiss_flixel/CameraTools.kiss index 49d6b19d..9369f1ed 100644 --- a/projects/kiss-flixel/src/kiss_flixel/CameraTools.kiss +++ b/projects/kiss-flixel/src/kiss_flixel/CameraTools.kiss @@ -11,6 +11,8 @@ (+= camera.scroll.x movement.x) (+= camera.scroll.y movement.y))) +(var :Map borderCameras (new Map)) + // Add a border sprite on top of this camera's viewport, scaling the border to frame the viewport, // and downsizing and shifting the viewport to fit within the border's opaque frame (function addBorder [:FlxCamera camera :FlxSprite border] @@ -37,6 +39,7 @@ (border.setGraphicSize camera.width camera.height) (border.updateHitbox) (FlxG.cameras.add borderCamera false) + (dictSet borderCameras camera borderCamera) (set border.cameras [borderCamera]) (set borderCamera.bgColor FlxColor.TRANSPARENT) (FlxG.state.add border) @@ -45,6 +48,29 @@ (+= camera.x dx) (+= camera.y dy) (-= camera.width dx (* border.scale.x borderSizeRight)) - (-= camera.height dx (* border.scale.y borderSizeBottom))))) + (-= camera.height dy (* border.scale.y borderSizeBottom))))) -// TODO updateMouseBorderControl \ No newline at end of file +(function updateMouseBorderControl [:FlxCamera camera :Float elapsed :Float speed :Float heightFraction] + (let [viewport (ifLet [bc (dictGet borderCameras camera)] bc camera) + left viewport.x + top viewport.y + right (+ viewport.x viewport.width) + bottom (+ viewport.y viewport.height) + // Use the same margin size for x and y, and calculate it based on height + // (in a landscape view, this just makes more sense to me) + margin (* viewport.height heightFraction) + mPos (FlxG.mouse.getScreenPosition)] + (updateKeyControl camera elapsed speed + // when the camera takes the whole screen, count the letterbox zones as margin + ->(if (= left 0) + (<= mPos.x (+ left margin)) + (<= left mPos.x (+ left margin))) + ->(if (= right FlxG.width) + (<= (- right margin) mPos.x) + (<= (- right margin) mPos.x right)) + ->(if (= top 0) + (<= mPos.y (+ top margin)) + (<= top mPos.y (+ top margin))) + ->(if (= bottom FlxG.height) + (<= (- bottom margin) mPos.y) + (<= (- bottom margin) mPos.y bottom))))) \ No newline at end of file diff --git a/projects/nat-flixel-desktop-playground/source/PlayState.kiss b/projects/nat-flixel-desktop-playground/source/PlayState.kiss index a22b05b1..fcd35b17 100644 --- a/projects/nat-flixel-desktop-playground/source/PlayState.kiss +++ b/projects/nat-flixel-desktop-playground/source/PlayState.kiss @@ -127,7 +127,7 @@ ->{FlxG.keys.pressed.RIGHT} ->{FlxG.keys.pressed.UP} ->{FlxG.keys.pressed.DOWN}) - + (FlxG.camera.updateMouseBorderControl elapsed KEYBOARD_SCROLL_SPEED 0.15) // don't move the ui camera before ui has been placed -- new UI elements could appear offscreen (when (> uiGroup.length 0) (unless (and textInput textInput.hasFocus)