166 lines
3.3 KiB
JavaScript
166 lines
3.3 KiB
JavaScript
$_.unneeded(_ => {
|
|
}, Infinity)
|
|
|
|
var subscribers = []
|
|
|
|
var windows = []
|
|
var renderers = []
|
|
|
|
var os = use('os')
|
|
|
|
$_.receiver(e => {
|
|
if (e.type === "subscribe") {
|
|
if (!e.actor) throw Error('Got a subscribe message with no actor.');
|
|
console.log('subscribing: ' + json.encode(e.actor))
|
|
subscribers.push(e.actor)
|
|
return;
|
|
}
|
|
|
|
if (e.type === "window") {
|
|
var window = windows[e.id]
|
|
|
|
switch (e.fn) {
|
|
case "create":
|
|
window = os.engine_start(e.config)
|
|
windows[e.id] = window
|
|
break;
|
|
|
|
case "fullscreen":
|
|
window.fullscreen()
|
|
break;
|
|
|
|
case "make_renderer":
|
|
var renderer = window.make_renderer(e.config || {})
|
|
renderers[e.renderer_id] = renderer
|
|
break;
|
|
|
|
case "keyboard_shown":
|
|
return window.keyboard_shown()
|
|
|
|
case "theme":
|
|
return window.theme()
|
|
|
|
case "safe_area":
|
|
return window.safe_area()
|
|
|
|
case "bordered":
|
|
window.bordered(e.value)
|
|
break;
|
|
|
|
case "set_icon":
|
|
window.set_icon(e.icon)
|
|
break;
|
|
|
|
case "set_title":
|
|
window.title = e.title
|
|
break;
|
|
|
|
case "get_title":
|
|
return window.title
|
|
|
|
case "set_size":
|
|
window.size = e.size
|
|
break;
|
|
|
|
case "get_size":
|
|
return window.size
|
|
|
|
case "mouse_grab":
|
|
window.mouse_grab(e.value)
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (e.type === "render") {
|
|
var renderer = renderers[e.id]
|
|
|
|
switch (e.fn) {
|
|
case "draw_color":
|
|
renderer.draw_color(e.color)
|
|
break;
|
|
|
|
case "present":
|
|
renderer.present()
|
|
break;
|
|
|
|
case "clear":
|
|
renderer.clear()
|
|
break;
|
|
|
|
case "line":
|
|
renderer.line(e.config)
|
|
break;
|
|
|
|
case "point":
|
|
renderer.point(e.config)
|
|
break;
|
|
|
|
case "texture":
|
|
renderer.texture(e.texture, e.src_rect, e.dst_rect, e.angle, e.center)
|
|
break;
|
|
|
|
case "rects":
|
|
renderer.rects(e.rects)
|
|
break;
|
|
|
|
case "geometry":
|
|
renderer.geometry(e.vertices, e.indices)
|
|
break;
|
|
|
|
case "geometry2":
|
|
renderer.geometry2(e.vertices, e.indices)
|
|
break;
|
|
|
|
case "sprite":
|
|
renderer.sprite(e.config)
|
|
break;
|
|
|
|
case "load_texture":
|
|
renderer.load_texture(e.path)
|
|
break;
|
|
|
|
case "get_image":
|
|
renderer.get_image(e.config)
|
|
break;
|
|
|
|
case "scale":
|
|
renderer.scale(e.scale)
|
|
break;
|
|
|
|
case "logical_size":
|
|
renderer.logical_size(e.size)
|
|
break;
|
|
|
|
case "viewport":
|
|
renderer.viewport(e.viewport)
|
|
break;
|
|
|
|
case "clip":
|
|
renderer.clip(e.rect)
|
|
break;
|
|
|
|
case "vsync":
|
|
renderer.vsync(e.enable)
|
|
break;
|
|
|
|
case "coords":
|
|
renderer.coords(e.config)
|
|
break;
|
|
|
|
case "camera":
|
|
renderer.camera(e.cam, e.layer)
|
|
break;
|
|
|
|
case "screen2world":
|
|
return renderer.screen2world(e.point)
|
|
|
|
case "target":
|
|
renderer.target(e.target)
|
|
break;
|
|
}
|
|
}
|
|
|
|
for (var a of subscribers)
|
|
$_.send(a, e);
|
|
});
|