Files
CodenameEngine/source/funkin/desktop/sprites/Button.hx
T
2022-10-24 01:23:00 +02:00

96 lines
3.2 KiB
Haxe

package funkin.desktop.sprites;
import flixel.FlxObject;
import flixel.addons.ui.FlxUIText;
import flixel.FlxSprite;
import flixel.math.FlxPoint;
import funkin.desktop.windows.WindowGroup;
class Button extends FlxObject {
public var callback:Void->Void;
public var disabled:Bool = false;
public var frame:Int = 0;
public var normalSprite:SpliceSprite;
public var hoverSprite:SpliceSprite;
public var pressedSprite:SpliceSprite;
public var disabledSprite:SpliceSprite;
public var label:FlxUIText;
public function new(x:Float, y:Float, text:String = "", callback:Void->Void) {
super();
this.x = x;
this.y = y;
this.width = 75;
this.height = 24;
this.callback = callback;
var normalButton = DesktopMain.theme.normalButton;
var hoverButton = DesktopMain.theme.hoverButton;
var pressedButton = DesktopMain.theme.pressedButton;
var disabledButton = DesktopMain.theme.disabledButton;
normalSprite = new SpliceSprite(normalButton.sprite, x, y, 75, 24, normalButton.left, normalButton.top, normalButton.bottom, normalButton.right);
hoverSprite = new SpliceSprite(hoverButton.sprite, x, y, 75, 24, hoverButton.left, hoverButton.top, hoverButton.bottom, hoverButton.right);
pressedSprite = new SpliceSprite(pressedButton.sprite, x, y, 75, 24, pressedButton.left, pressedButton.top, pressedButton.bottom, pressedButton.right);
disabledSprite = new SpliceSprite(disabledButton.sprite, x, y, 75, 24, disabledButton.left, disabledButton.top, disabledButton.bottom, disabledButton.right);
label = new FlxUIText(0, 0, 75, text);
}
public override function update(elapsed:Float) {
super.update(elapsed);
var mouseInput = DesktopMain.instance.mouseInput;
if (mouseInput.overlaps(normalSprite, camera)) {
if (mouseInput.justReleased) {
callback();
return;
}
if (mouseInput.justPressed || mouseInput.pressed)
frame = 2;
else
frame = 1;
mouseInput.cancel();
} else
frame = 0;
if (disabled) frame = 3;
for(e in [normalSprite, hoverSprite, pressedSprite, disabledSprite])
e.update(elapsed);
}
public override function destroy() {
for(e in [normalSprite, hoverSprite, pressedSprite, disabledSprite])
e.destroy();
scrollFactor.put();
super.destroy();
}
public function resize(width:Float, height:Float) {
this.width = width;
this.height = height;
normalSprite.resize(width, height);
label.fieldWidth = width;
}
public override function draw() {
super.draw();
var spr = switch(frame) {
case 1: hoverSprite;
case 2: pressedSprite;
case 3: disabledSprite;
default: normalSprite;
};
spr.resize(width, height);
for(sprite in [spr, label]) {
sprite.cameras = cameras;
sprite.setPosition(x, y);
sprite.scrollFactor.set(scrollFactor.x, scrollFactor.y);
sprite.draw();
}
}
}