2024-03-09 14:52:33 +01:00
|
|
|
|
|
|
|
|
class PluginRaw {
|
|
|
|
|
draw_ui: (ui: zui_t)=>void = null;
|
|
|
|
|
draw: ()=>void = null;
|
|
|
|
|
update: ()=>void = null;
|
|
|
|
|
delete: ()=>void = null;
|
|
|
|
|
version: string = "0.1";
|
|
|
|
|
name: string;
|
|
|
|
|
}
|
|
|
|
|
|
2024-03-11 15:10:18 +01:00
|
|
|
let plugin_map: map_t<string, PluginRaw> = map_create();
|
2024-03-09 14:52:33 +01:00
|
|
|
let _plugin_name: string;
|
|
|
|
|
|
|
|
|
|
function plugin_create(): PluginRaw {
|
|
|
|
|
let p: PluginRaw = new PluginRaw();
|
|
|
|
|
p.name = _plugin_name;
|
2024-03-20 16:13:54 +01:00
|
|
|
map_set(plugin_map, p.name, p);
|
2024-03-09 14:52:33 +01:00
|
|
|
return p;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function plugin_start(plugin: string) {
|
|
|
|
|
try {
|
2024-03-20 16:13:54 +01:00
|
|
|
let blob: buffer_t = data_get_blob("plugins/" + plugin);
|
2024-03-09 14:52:33 +01:00
|
|
|
_plugin_name = plugin;
|
|
|
|
|
// (1, eval)(sys_buffer_to_string(blob)); // Global scope
|
|
|
|
|
eval(sys_buffer_to_string(blob)); // Local scope
|
|
|
|
|
data_delete_blob("plugins/" + plugin);
|
|
|
|
|
}
|
|
|
|
|
catch (e: any) {
|
|
|
|
|
console_error(tr("Failed to load plugin") + " '" + plugin + "'");
|
|
|
|
|
krom_log(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function plugin_stop(plugin: string) {
|
2024-03-20 16:13:54 +01:00
|
|
|
let p: PluginRaw = map_get(plugin_map, plugin);
|
2024-03-09 14:52:33 +01:00
|
|
|
if (p != null && p.delete != null) {
|
|
|
|
|
p.delete();
|
|
|
|
|
}
|
2024-03-20 16:13:54 +01:00
|
|
|
map_delete(plugin_map, plugin);
|
2024-03-09 14:52:33 +01:00
|
|
|
}
|