NAT playground rectangle selection

This commit is contained in:
2022-06-20 16:20:48 +00:00
parent b2a5d36075
commit ca6a03cbeb
3 changed files with 54 additions and 3 deletions

View File

@@ -21,7 +21,7 @@
(enableMouseDrag) (enableMouseDrag)
})) }))
(set mousePressedCallback **(set mousePressedCallback
->[self _x _y] ->[self _x _y]
{ {
(controller.ToggleSelectEntry e) (controller.ToggleSelectEntry e)

View File

@@ -12,10 +12,12 @@ import flixel.addons.ui.FlxInputText;
import flixel.addons.ui.FlxUIPopup; import flixel.addons.ui.FlxUIPopup;
import flixel.text.FlxText; import flixel.text.FlxText;
import flixel.util.FlxColor; import flixel.util.FlxColor;
using flixel.util.FlxSpriteUtil;
import flixel.FlxCamera; import flixel.FlxCamera;
import flixel.math.FlxVector; import flixel.math.FlxVector;
import flixel.math.FlxRect;
import flixel.addons.plugin.FlxMouseControl; import flixel.addons.plugin.FlxMouseControl;
import flixel.input.mouse.FlxMouseEventManager;
using StringTools; using StringTools;
@:build(kiss.Kiss.build()) @:build(kiss.Kiss.build())

View File

@@ -26,7 +26,7 @@
(prop &mut :FlxGroup uiGroup (new FlxGroup)) (prop &mut :FlxGroup uiGroup (new FlxGroup))
(add uiGroup) (add uiGroup)
(prop :FlxGroup entryGroup (new FlxGroup)) (prop :FlxTypedGroup<EntrySprite> entryGroup (new FlxTypedGroup<EntrySprite>))
(add entryGroup) (add entryGroup)
(prop uiCamera (new FlxCamera 0 0 FlxG.width FlxG.height)) (prop uiCamera (new FlxCamera 0 0 FlxG.width FlxG.height))
@@ -35,6 +35,55 @@
(set uiGroup.cameras [uiCamera]) (set uiGroup.cameras [uiCamera])
(prop mouseDragCamera (new FlxCamera 0 0 FlxG.width FlxG.height))
(set mouseDragCamera.bgColor FlxColor.TRANSPARENT)
(FlxG.cameras.add mouseDragCamera false)
(prop mouseDragSprite (new FlxSprite 0 0))
(prop &mut :FlxPoint mouseDown null)
(mouseDragSprite.makeGraphic FlxG.width FlxG.height FlxColor.TRANSPARENT)
(set mouseDragSprite.cameras [mouseDragCamera])
(add mouseDragSprite)
(FlxMouseEventManager.add mouseDragSprite
// mouseDown
->s {
(set mouseDown (FlxG.mouse.getScreenPosition))
(controller.SelectEntries [])
(entryGroup.forEach
->entrySprite
(when (.containsPoint (entrySprite.getScreenBounds) (FlxG.mouse.getScreenPosition))
(controller.SelectEntry entrySprite.e)))
}
// mouseUp
->s {
(set mouseDown null)
(mouseDragSprite.makeGraphic FlxG.width FlxG.height FlxColor.TRANSPARENT true)
}
// mouseOver
->s {}
// mouseOut
->s {}
true
true
false)
(FlxMouseEventManager.setMouseMoveCallback mouseDragSprite
->s (when mouseDown (unless FlxMouseControl.isDragging
// draw the selection rectangle
(mouseDragSprite.makeGraphic FlxG.width FlxG.height FlxColor.TRANSPARENT true)
(let [curPos (FlxG.mouse.getScreenPosition)
x1 (min curPos.x mouseDown.x)
y1 (min curPos.y mouseDown.y)
x2 (max curPos.x mouseDown.x)
y2 (max curPos.y mouseDown.y)
selectWidth (- x2 x1)
selectHeight (- y2 y1)
rectangle (new FlxRect x1 y1 selectWidth selectHeight)]
(mouseDragSprite.drawRect x1 y1 selectWidth selectHeight FlxColor.TRANSPARENT (object color FlxColor.LIME))
// Handle entry selection
(entryGroup.forEach ->entrySprite
(let [overlaps (rectangle.overlaps (entrySprite.getScreenBounds))]
(when !(= overlaps (controller.isSelected entrySprite.e))
(controller.ToggleSelectEntry entrySprite.e))))))))
// make text-only sprites for entries that have no images: // make text-only sprites for entries that have no images:
(archive.addSystem (new TextSpriteSystem)) (archive.addSystem (new TextSpriteSystem))