77 lines
2.3 KiB
Haxe
77 lines
2.3 KiB
Haxe
package funkin.desktop.windows;
|
|
|
|
import flixel.math.FlxMath;
|
|
import flixel.math.FlxPoint;
|
|
import flixel.FlxObject;
|
|
import flixel.group.FlxGroup.FlxTypedGroup;
|
|
import flixel.FlxBasic;
|
|
import flixel.FlxCamera;
|
|
|
|
class WindowGroup<T:FlxBasic> extends FlxTypedGroup<T> {
|
|
public var x:Float = 0;
|
|
public var y:Float = 0;
|
|
public var scrollFactor:FlxPoint = FlxPoint.get(0, 0);
|
|
public var updateScrolls:Bool = true;
|
|
|
|
public override function add(obj:T) {
|
|
super.add(obj);
|
|
|
|
if (!updateScrolls) return obj;
|
|
if (obj is FlxObject) {
|
|
var o = cast(obj, FlxObject);
|
|
o.x += x;
|
|
o.y += y;
|
|
} else if (obj is WindowGroup) {
|
|
var o:WindowGroup<FlxBasic> = cast obj;
|
|
o.x += x;
|
|
o.y += y;
|
|
}
|
|
__updateObjScrollFactor(obj);
|
|
|
|
return obj;
|
|
}
|
|
|
|
|
|
|
|
public function updateAnchor(x:Float, y:Float, ?cameras:Array<FlxCamera>) {
|
|
scrollFactor.set(x, y);
|
|
if (cameras != null) this.cameras = cameras;
|
|
if (!updateScrolls) return;
|
|
for(obj in members)
|
|
__updateObjScrollFactor(obj, cameras);
|
|
}
|
|
|
|
private function __updateObjScrollFactor(obj:FlxBasic, ?cameras:Array<FlxCamera>) {
|
|
if (obj is FlxObject) {
|
|
var o = cast(obj, FlxObject);
|
|
if (cameras != null) o.cameras = cameras;
|
|
o.scrollFactor.set(scrollFactor.x, scrollFactor.y);
|
|
} else if (obj is WindowGroup) {
|
|
var o:WindowGroup<FlxBasic> = cast obj;
|
|
o.updateAnchor(scrollFactor.x, scrollFactor.y, cameras);
|
|
}
|
|
}
|
|
|
|
public override function update(elapsed:Float) {
|
|
// update them backwards, so that the top most window gets the priority
|
|
var i = length;
|
|
|
|
@:privateAccess var oldDefaultCameras = FlxCamera._defaultCameras;
|
|
@:privateAccess if (cameras != null) FlxCamera._defaultCameras = cameras;
|
|
|
|
while(i > 0) {
|
|
i--;
|
|
var window = members[i];
|
|
if (window == null || !window.exists)
|
|
continue;
|
|
window.update(elapsed);
|
|
}
|
|
|
|
@:privateAccess FlxCamera._defaultCameras = oldDefaultCameras;
|
|
}
|
|
|
|
public override function destroy() {
|
|
super.destroy();
|
|
scrollFactor.put();
|
|
}
|
|
} |