CameraTools.addBorder
This commit is contained in:
@@ -3,6 +3,7 @@ package;
|
|||||||
import flixel.FlxState;
|
import flixel.FlxState;
|
||||||
import flixel.FlxSprite;
|
import flixel.FlxSprite;
|
||||||
import flixel.util.FlxColor;
|
import flixel.util.FlxColor;
|
||||||
|
import flixel.FlxCamera;
|
||||||
import flixel.math.FlxRect;
|
import flixel.math.FlxRect;
|
||||||
import flixel.math.FlxVector;
|
import flixel.math.FlxVector;
|
||||||
import flixel.graphics.FlxGraphic;
|
import flixel.graphics.FlxGraphic;
|
||||||
@@ -14,6 +15,7 @@ import flash.display.BitmapData;
|
|||||||
import kiss.Prelude;
|
import kiss.Prelude;
|
||||||
import data.blades.ScenData;
|
import data.blades.ScenData;
|
||||||
import data.blades.Scenario;
|
import data.blades.Scenario;
|
||||||
|
import data.blades.SpriteSheet;
|
||||||
import data.blades.TileMap;
|
import data.blades.TileMap;
|
||||||
|
|
||||||
using kiss_flixel.CameraTools;
|
using kiss_flixel.CameraTools;
|
||||||
|
@@ -4,6 +4,7 @@
|
|||||||
(var SPRITE_HEIGHT 55)
|
(var SPRITE_HEIGHT 55)
|
||||||
(prop :Array<FlxSprite> floorTiles [])
|
(prop :Array<FlxSprite> floorTiles [])
|
||||||
(prop &mut :ScenData data null)
|
(prop &mut :ScenData data null)
|
||||||
|
(prop :FlxCamera worldCamera (new FlxCamera))
|
||||||
|
|
||||||
(method &override :Void create []
|
(method &override :Void create []
|
||||||
(super.create)
|
(super.create)
|
||||||
@@ -11,10 +12,20 @@
|
|||||||
|
|
||||||
(Scenario.test)
|
(Scenario.test)
|
||||||
|
|
||||||
|
(worldCamera.copyFrom FlxG.camera)
|
||||||
|
(FlxG.cameras.add worldCamera)
|
||||||
|
|
||||||
(let [valleydy (Scenario.fromBasFile "Blades of Avernum Scenarios/Valley of Dying Things/valleydy.bas")]
|
(let [valleydy (Scenario.fromBasFile "Blades of Avernum Scenarios/Valley of Dying Things/valleydy.bas")]
|
||||||
(addSprites
|
(addSprites
|
||||||
// 2D nth >:)
|
// 2D nth >:)
|
||||||
(nth valleydy.outdoorSections 0 2))))
|
(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 SELECTED_COLOR FlxColor.LIME)
|
||||||
(var NORMAL_COLOR FlxColor.WHITE)
|
(var NORMAL_COLOR FlxColor.WHITE)
|
||||||
@@ -37,6 +48,7 @@
|
|||||||
(when tileSprite
|
(when tileSprite
|
||||||
(set tileSprite.x x)
|
(set tileSprite.x x)
|
||||||
(set tileSprite.y (- y yOffset))
|
(set tileSprite.y (- y yOffset))
|
||||||
|
(set tileSprite.cameras [worldCamera])
|
||||||
(FlxMouseEventManager.add tileSprite
|
(FlxMouseEventManager.add tileSprite
|
||||||
// handle click on floor:
|
// handle click on floor:
|
||||||
->downTS {}
|
->downTS {}
|
||||||
@@ -53,6 +65,7 @@
|
|||||||
(when tileSprite
|
(when tileSprite
|
||||||
(+= tileSprite.x x)
|
(+= tileSprite.x x)
|
||||||
(+= tileSprite.y (- y yOffset))
|
(+= tileSprite.y (- y yOffset))
|
||||||
|
(set tileSprite.cameras [worldCamera])
|
||||||
(FlxMouseEventManager.add tileSprite
|
(FlxMouseEventManager.add tileSprite
|
||||||
// Handle click on terrain:
|
// Handle click on terrain:
|
||||||
->downTS {}
|
->downTS {}
|
||||||
@@ -78,7 +91,7 @@
|
|||||||
// F1 to toggle fullscreen:
|
// F1 to toggle fullscreen:
|
||||||
(when FlxG.keys.justPressed.F1
|
(when FlxG.keys.justPressed.F1
|
||||||
(set FlxG.fullscreen !FlxG.fullscreen))
|
(set FlxG.fullscreen !FlxG.fullscreen))
|
||||||
(FlxG.camera.updateKeyControl
|
(worldCamera.updateKeyControl
|
||||||
elapsed
|
elapsed
|
||||||
CAMERA_SPEED
|
CAMERA_SPEED
|
||||||
->{FlxG.keys.pressed.LEFT}
|
->{FlxG.keys.pressed.LEFT}
|
||||||
|
@@ -22,7 +22,7 @@ class ScenData {
|
|||||||
|
|
||||||
private var spriteSheets:Map<Int, FlxSprite> = [];
|
private var spriteSheets:Map<Int, FlxSprite> = [];
|
||||||
|
|
||||||
private var data = "";
|
public var data = "";
|
||||||
|
|
||||||
public static function coreData() {
|
public static function coreData() {
|
||||||
var d = new ScenData();
|
var d = new ScenData();
|
||||||
|
@@ -21,4 +21,12 @@
|
|||||||
(spriteSheet.replaceColor FlxColor.WHITE FlxColor.TRANSPARENT)
|
(spriteSheet.replaceColor FlxColor.WHITE FlxColor.TRANSPARENT)
|
||||||
spriteSheet))
|
spriteSheet))
|
||||||
|
|
||||||
|
// Grab a whole BMP and add transparency
|
||||||
|
(function :FlxSprite fromWholeBmp [file]
|
||||||
|
(let [oBmp (Bmp.loadBitmapData file)
|
||||||
|
sprite (new FlxSprite)]
|
||||||
|
(sprite.loadGraphic (FlxGraphic.fromBitmapData oBmp))
|
||||||
|
(sprite.replaceColor FlxColor.WHITE FlxColor.TRANSPARENT)
|
||||||
|
sprite))
|
||||||
|
|
||||||
// TODO some of the sprite sheets mix multiple frame sizes (i.e. character sheets)
|
// TODO some of the sprite sheets mix multiple frame sizes (i.e. character sheets)
|
@@ -2,9 +2,16 @@ package kiss_flixel;
|
|||||||
|
|
||||||
import kiss.Prelude;
|
import kiss.Prelude;
|
||||||
import kiss.List;
|
import kiss.List;
|
||||||
|
import flash.geom.Rectangle;
|
||||||
|
import flash.display.BitmapData;
|
||||||
import flixel.FlxCamera;
|
import flixel.FlxCamera;
|
||||||
import flixel.math.FlxVector;
|
import flixel.math.FlxVector;
|
||||||
import flixel.math.FlxPoint;
|
import flixel.math.FlxPoint;
|
||||||
|
import flixel.FlxSprite;
|
||||||
|
import flixel.FlxG;
|
||||||
|
import flixel.util.FlxColor;
|
||||||
|
|
||||||
|
using Lambda;
|
||||||
|
|
||||||
@:build(kiss.Kiss.build())
|
@:build(kiss.Kiss.build())
|
||||||
class CameraTools {}
|
class CameraTools {}
|
||||||
|
@@ -11,4 +11,40 @@
|
|||||||
(+= camera.scroll.x movement.x)
|
(+= camera.scroll.x movement.x)
|
||||||
(+= camera.scroll.y movement.y)))
|
(+= camera.scroll.y movement.y)))
|
||||||
|
|
||||||
(function updateKeyControl [:FlxCamera camera :Float elapsed :Float speed :Void->Bool leftKey :Void->Bool rightKey :Void->Bool upKey :Void->Bool downKey]
|
// 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]
|
||||||
|
(let [borderCamera
|
||||||
|
(new FlxCamera (Std.int camera.x) (Std.int camera.y) camera.width camera.height)
|
||||||
|
:BitmapData borderPixels
|
||||||
|
(border.updateFramePixels)
|
||||||
|
isTransparent
|
||||||
|
->c (= c FlxColor.TRANSPARENT)
|
||||||
|
borderHorizontal
|
||||||
|
(borderPixels.getVector (new Rectangle 0 (iHalf border.height) border.width 1))
|
||||||
|
borderVertical
|
||||||
|
(borderPixels.getVector (new Rectangle (iHalf border.width) 0 1 border.height))
|
||||||
|
borderSizeLeft
|
||||||
|
(borderHorizontal.findIndex isTransparent)
|
||||||
|
borderSizeTop
|
||||||
|
(borderVertical.findIndex isTransparent)
|
||||||
|
borderSizeRight
|
||||||
|
(.findIndex (borderHorizontal.reverse) isTransparent)
|
||||||
|
borderSizeBottom
|
||||||
|
(.findIndex (borderVertical.reverse) isTransparent)]
|
||||||
|
(set border.x 0) // It will be 0,0 relative to its own camera
|
||||||
|
(set border.y 0)
|
||||||
|
(border.setGraphicSize camera.width camera.height)
|
||||||
|
(border.updateHitbox)
|
||||||
|
(FlxG.cameras.add borderCamera false)
|
||||||
|
(set border.cameras [borderCamera])
|
||||||
|
(set borderCamera.bgColor FlxColor.TRANSPARENT)
|
||||||
|
(FlxG.state.add border)
|
||||||
|
(let [dx (* border.scale.x borderSizeLeft)
|
||||||
|
dy (* border.scale.y borderSizeTop)]
|
||||||
|
(+= camera.x dx)
|
||||||
|
(+= camera.y dy)
|
||||||
|
(-= camera.width dx (* border.scale.x borderSizeRight))
|
||||||
|
(-= camera.height dx (* border.scale.y borderSizeBottom)))))
|
||||||
|
|
||||||
|
// TODO updateMouseBorderControl
|
Reference in New Issue
Block a user