NAT playground rectangle selection
This commit is contained in:
@@ -21,7 +21,7 @@
|
|||||||
(enableMouseDrag)
|
(enableMouseDrag)
|
||||||
}))
|
}))
|
||||||
|
|
||||||
(set mousePressedCallback
|
**(set mousePressedCallback
|
||||||
->[self _x _y]
|
->[self _x _y]
|
||||||
{
|
{
|
||||||
(controller.ToggleSelectEntry e)
|
(controller.ToggleSelectEntry e)
|
||||||
|
@@ -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())
|
||||||
|
@@ -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))
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user