armory/Sources/armory/trait/internal/CanvasScript.hx

83 lines
1.8 KiB
Haxe
Raw Normal View History

2017-05-26 16:05:14 +02:00
package armory.trait.internal;
import iron.Trait;
2017-05-26 16:42:48 +02:00
#if arm_ui
2017-05-26 16:05:14 +02:00
import zui.Zui;
import zui.Canvas;
2017-05-26 16:42:48 +02:00
#end
2017-05-26 16:05:14 +02:00
class CanvasScript extends Trait {
2017-05-26 16:42:48 +02:00
#if arm_ui
2017-05-26 16:05:14 +02:00
var cui: Zui;
var canvas:TCanvas = null;
2018-01-31 00:03:28 +01:00
public var ready(get, null):Bool;
function get_ready():Bool { return canvas != null; }
2017-05-26 16:05:14 +02:00
public function new(canvasName:String) {
super();
2018-05-26 22:54:42 +02:00
iron.data.Data.getBlob(canvasName + '.json', function(blob:kha.Blob) {
2018-11-04 11:02:29 +01:00
iron.data.Data.getFont("font_default.ttf", function(f:kha.Font) {
2018-05-26 22:54:42 +02:00
2018-06-27 18:49:57 +02:00
cui = new Zui({font: f, theme: zui.Themes.light});
2018-05-26 22:54:42 +02:00
var c:TCanvas = haxe.Json.parse(blob.toString());
if (c.assets == null || c.assets.length == 0) canvas = c;
// Load canvas assets
else {
var loaded = 0;
for (asset in c.assets) {
var file = asset.name;
iron.data.Data.getImage(file, function(image:kha.Image) {
Canvas.assetMap.set(asset.id, image);
if (++loaded >= c.assets.length) canvas = c;
});
2017-07-27 11:43:37 +02:00
}
2018-05-26 22:54:42 +02:00
}
2017-05-26 16:05:14 +02:00
});
});
notifyOnRender2D(function(g:kha.graphics2.Graphics) {
if (canvas == null) return;
var events = Canvas.draw(cui, canvas, g);
for (e in events) {
var all = armory.system.Event.get(e);
2017-08-07 10:47:29 +02:00
if (all != null) for (entry in all) entry.onEvent();
2017-05-26 16:05:14 +02:00
}
2018-08-29 23:01:23 +02:00
if (onReady != null) { onReady(); onReady = null; }
2017-05-26 16:05:14 +02:00
});
}
2017-05-26 16:42:48 +02:00
2018-08-29 23:01:23 +02:00
var onReady:Void->Void = null;
public function notifyOnReady(f:Void->Void) {
onReady = f;
}
// Defines layout
2017-09-18 17:02:25 +02:00
public function getElement(name:String):TElement {
for (e in canvas.elements) if (e.name == name) return e;
return null;
}
2018-08-29 23:01:23 +02:00
// Contains data
@:access(zui.Canvas)
@:access(zui.Handle)
public function getHandle(name:String):Handle {
// Consider this a temporary solution
return Canvas.h.children[getElement(name).id];
}
2017-05-26 16:42:48 +02:00
#else
public function new(canvasName:String) { super(); }
#end
2017-05-26 16:05:14 +02:00
}