Added selecting sprites
This commit is contained in:
@@ -2,7 +2,9 @@ package funkin.editors.stage;
|
||||
|
||||
import flixel.math.FlxAngle;
|
||||
import flixel.math.FlxPoint;
|
||||
import flixel.math.FlxRect;
|
||||
import flixel.util.FlxColor;
|
||||
import flixel.util.FlxSort;
|
||||
import funkin.backend.system.framerate.Framerate;
|
||||
import funkin.backend.utils.XMLUtil.AnimData;
|
||||
import funkin.editors.stage.elements.*;
|
||||
@@ -18,6 +20,8 @@ class StageEditor extends UIState {
|
||||
static var __stage:String;
|
||||
public var stage:Stage;
|
||||
|
||||
private var _point:FlxPoint = new FlxPoint();
|
||||
|
||||
public static var instance(get, null):StageEditor;
|
||||
|
||||
private static inline function get_instance()
|
||||
@@ -255,7 +259,9 @@ class StageEditor extends UIState {
|
||||
if(xml != null) {
|
||||
if(sprite is FunkinSprite) {
|
||||
var type = sprite.extra.get(exID("type"));
|
||||
stageSpritesWindow.add((type == "box" || type == "solid") ? new StageSolidButton(0,0, sprite, xml) : new StageSpriteButton(0,0, sprite, xml));
|
||||
var button:StageElementButton = (type == "box" || type == "solid") ? new StageSolidButton(0,0, sprite, xml) : new StageSpriteButton(0,0, sprite, xml);
|
||||
sprite.extra.set(exID("button"), button);
|
||||
stageSpritesWindow.add(button);
|
||||
}
|
||||
else if(sprite is StageCharPos) {
|
||||
var char = charMap[sprite.name];
|
||||
@@ -311,6 +317,59 @@ class StageEditor extends UIState {
|
||||
updateZoom();
|
||||
}
|
||||
|
||||
/*if(FlxG.mouse.justPressed) {
|
||||
var bounds:Array<FlxRect> = [];
|
||||
var sprites = stageSpritesWindow.buttons.members.map((o) -> o.getSprite()).filter((o) -> o != null && o.animateAtlas == null);
|
||||
for(sprite in sprites) {
|
||||
if(sprite is FunkinSprite) {
|
||||
var sprite:FunkinSprite = cast sprite;
|
||||
if(sprite.extra.exists(exID("bounds"))) {
|
||||
bounds.push(cast(sprite.extra.get(exID("bounds")), FlxRect));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// sort by area
|
||||
bounds.sort((a, b) -> FlxSort.byValues(FlxSort.ASCENDING, a.width * a.height, b.width * b.height));
|
||||
|
||||
Logs.trace("------------------------");
|
||||
for(bounds in bounds) {
|
||||
Logs.trace(bounds.width + "x" + bounds.height);
|
||||
}
|
||||
}*/
|
||||
|
||||
/*if(FlxG.mouse.justPressed) {
|
||||
//var sprites = Lambda.array(stage.stageSprites);
|
||||
var sprites = stageSpritesWindow.buttons.members.map((o) -> o.getSprite()).filter((o) -> o != null && o.animateAtlas == null);
|
||||
trace(sprites.map((o) -> cast(o, FunkinSprite).name));
|
||||
var length = sprites.length;
|
||||
// Reset selected sprites
|
||||
for(i in 0...length) {
|
||||
var sprite = sprites[i];
|
||||
if(sprite is FunkinSprite) {
|
||||
var sprite:FunkinSprite = cast sprite;
|
||||
sprite.extra.set(exID("selected"), false);
|
||||
}
|
||||
}
|
||||
for(i in 0...length) {
|
||||
var idx = length - i - 1;
|
||||
var sprite = sprites[idx];
|
||||
if(sprite is FunkinSprite) {
|
||||
var sprite:FunkinSprite = cast sprite;
|
||||
if(!sprite.extra.exists(exID("bounds"))) continue;
|
||||
trace(idx, sprite.name);
|
||||
var bounds = cast(sprite.extra.get(exID("bounds")), FlxRect);
|
||||
var pos = FlxG.mouse.getWorldPosition(stageCamera, _point);
|
||||
trace(sprite.name, bounds, pos);
|
||||
if(bounds.containsPoint(pos)) {
|
||||
sprite.extra.set(exID("selected"), true);
|
||||
trace("Selected " + sprite.name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
//if (FlxG.mouse.justReleasedRight) {
|
||||
// closeCurrentContextMenu();
|
||||
// openContextMenu(topMenu[2].childs);
|
||||
@@ -334,6 +393,22 @@ class StageEditor extends UIState {
|
||||
SaveWarning.showWarning = undos.unsaved;
|
||||
}
|
||||
|
||||
public function selectSprite(_sprite:FunkinSprite) {
|
||||
var sprites = stageSpritesWindow.buttons.members.map((o) -> o.getSprite()).filter((o) -> o != null);// && o.animateAtlas == null);
|
||||
for(sprite in sprites) {
|
||||
if(sprite is FunkinSprite) {
|
||||
var sprite:FunkinSprite = cast sprite;
|
||||
sprite.extra.set(exID("selected"), false);
|
||||
sprite.extra.get(exID("button")).selected = false;
|
||||
}
|
||||
}
|
||||
if(_sprite is FunkinSprite) {
|
||||
var sprite:FunkinSprite = cast _sprite;
|
||||
sprite.extra.set(exID("selected"), true);
|
||||
sprite.extra.get(exID("button")).selected = true;
|
||||
}
|
||||
}
|
||||
|
||||
// TOP MENU OPTIONS
|
||||
#if REGION
|
||||
function _file_exit(_) {
|
||||
@@ -519,7 +594,7 @@ class StageEditor extends UIState {
|
||||
if(!showOutlines) return;
|
||||
|
||||
if(dot == null) {
|
||||
dot = new FlxSprite().makeGraphic(10, 10, FlxColor.RED);
|
||||
dot = new FlxSprite().makeGraphic(10, 10, FlxColor.WHITE);
|
||||
dot.camera = stageCamera;
|
||||
dot.forceIsOnScreen = true;
|
||||
}
|
||||
@@ -565,6 +640,27 @@ class StageEditor extends UIState {
|
||||
|
||||
//Logs.trace("Guide at " + corners[0].x + ", " + corners[0].y + " sprite at " + sprite.x + ", " + sprite.y);
|
||||
|
||||
if(sprite is FunkinSprite) {
|
||||
var sprite:FunkinSprite = cast sprite;
|
||||
var maxX = Math.max(Math.max(corners[0].x, corners[1].x), Math.max(corners[2].x, corners[3].x));
|
||||
var maxY = Math.max(Math.max(corners[0].y, corners[1].y), Math.max(corners[2].y, corners[3].y));
|
||||
var minX = Math.min(Math.min(corners[0].x, corners[1].x), Math.min(corners[2].x, corners[3].x));
|
||||
var minY = Math.min(Math.min(corners[0].y, corners[1].y), Math.min(corners[2].y, corners[3].y));
|
||||
|
||||
if(!sprite.extra.exists(exID("bounds"))) {
|
||||
sprite.extra.set(exID("bounds"), new FlxRect());
|
||||
}
|
||||
cast(sprite.extra.get(exID("bounds")), FlxRect).set(minX, minY, maxX - minX, maxY - minY);
|
||||
}
|
||||
|
||||
dot.color = FlxColor.RED;
|
||||
if(sprite is FunkinSprite) {
|
||||
var sprite:FunkinSprite = cast sprite;
|
||||
if(sprite.extra.get(exID("selected")) == true) {
|
||||
dot.color = FlxColor.GREEN;
|
||||
}
|
||||
}
|
||||
|
||||
for(corner in corners) {
|
||||
drawDot(corner.x, corner.y);
|
||||
corner.put();
|
||||
|
||||
@@ -3,6 +3,8 @@ package funkin.editors.stage.elements;
|
||||
import haxe.xml.Access;
|
||||
import flixel.util.FlxColor;
|
||||
|
||||
using flixel.util.FlxColorTransformUtil;
|
||||
|
||||
class StageElementButton extends UIButton {
|
||||
public var xml:Access;
|
||||
|
||||
@@ -17,6 +19,8 @@ class StageElementButton extends UIButton {
|
||||
|
||||
public var isHidden:Bool = false;
|
||||
|
||||
public var selected:Bool = false;
|
||||
|
||||
public function new(x:Float,y:Float, xml:Access) {
|
||||
this.xml = xml;
|
||||
super(x,y, getInfoText(), function () {
|
||||
@@ -64,6 +68,8 @@ class StageElementButton extends UIButton {
|
||||
members.push(deleteIcon);
|
||||
}
|
||||
|
||||
var _lastSelected:Bool = false;
|
||||
|
||||
public override function update(elapsed:Float) {
|
||||
editButton.selectable = ghostButton.selectable = deleteButton.selectable = selectable;
|
||||
editButton.shouldPress = ghostButton.shouldPress = deleteButton.shouldPress = shouldPress;
|
||||
@@ -71,6 +77,22 @@ class StageElementButton extends UIButton {
|
||||
hovered = !deleteButton.hovered;
|
||||
updatePos();
|
||||
super.update(elapsed);
|
||||
|
||||
if(selected != _lastSelected) {
|
||||
_lastSelected = selected;
|
||||
updateColorTransform();
|
||||
}
|
||||
}
|
||||
|
||||
public override function updateColorTransform() {
|
||||
super.updateColorTransform();
|
||||
|
||||
if (selected) {
|
||||
useColorTransform = true;
|
||||
colorTransform.setOffsets(70, 70, 70, 0);
|
||||
} else {
|
||||
colorTransform.setOffsets(0, 0, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
public function updateInfo(sprite:Dynamic) {
|
||||
|
||||
@@ -33,6 +33,10 @@ class StageSpriteButton extends StageElementButton {
|
||||
return sprite;
|
||||
}
|
||||
|
||||
public override function onSelect() {
|
||||
StageEditor.instance.selectSprite(sprite);
|
||||
}
|
||||
|
||||
public override function onGhostClick() {
|
||||
isHidden = !isHidden;
|
||||
updateInfo(this.sprite);
|
||||
|
||||
Reference in New Issue
Block a user