Plugin.hx 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package arm;
  2. import arm.PluginAPI; // Keep included
  3. @:keep
  4. class Plugin {
  5. public static var plugins: Map<String, Plugin> = [];
  6. static var pluginName: String;
  7. public var drawUI: zui.Zui->Void = null;
  8. public var draw: Void->Void = null;
  9. public var update: Void->Void = null;
  10. public var delete: Void->Void = null;
  11. public var version = "0.1";
  12. public var apiversion = "0.1";
  13. var name: String;
  14. public function new() {
  15. name = pluginName;
  16. plugins.set(name, this);
  17. }
  18. public static function start(plugin: String) {
  19. try {
  20. iron.data.Data.getBlob("plugins/" + plugin, function(blob: kha.Blob) {
  21. pluginName = plugin;
  22. #if js
  23. // js.Syntax.code("(1, eval)({0})", blob.toString()); // Global scope
  24. js.Syntax.code("eval({0})", blob.toString()); // Local scope
  25. #end
  26. iron.data.Data.deleteBlob("plugins/" + plugin);
  27. });
  28. }
  29. catch (e: Dynamic) {
  30. trace("Failed to load plugin '" + plugin + "'");
  31. trace(e);
  32. }
  33. }
  34. public static function stop(plugin: String) {
  35. var p = plugins.get(plugin);
  36. if (p != null && p.delete != null) p.delete();
  37. plugins.remove(plugin);
  38. }
  39. }
  40. @:keep
  41. class Keep {
  42. public static function keep() {
  43. return untyped [
  44. iron.system.ArmPack.decode,
  45. iron.system.ArmPack.encode,
  46. arm.ui.UIBox.showMessage
  47. ];
  48. }
  49. }
  50. @:expose("core")
  51. class CoreBridge {
  52. public static var Json = haxe.Json;
  53. public static var ReflectFields = Reflect.fields;
  54. public static var ReflectField = Reflect.field;
  55. public static var ReflectSetField = Reflect.setField;
  56. public static var StdIs = Std.isOfType;
  57. public static var Bytes = haxe.io.Bytes;
  58. public static var BytesInput = haxe.io.BytesInput;
  59. public static var BytesOutput = haxe.io.BytesOutput;
  60. public static var Blob = kha.Blob;
  61. public static var Image = kha.Image;
  62. public static var Scheduler = kha.Scheduler;
  63. public static function colorFromFloats(r: Float, g: Float, b: Float, a: Float): kha.Color {
  64. return kha.Color.fromFloats(r, g, b, a);
  65. }
  66. }
  67. @:expose("iron")
  68. class IronBridge {
  69. public static var App = iron.App;
  70. public static var Scene = iron.Scene;
  71. public static var RenderPath = iron.RenderPath;
  72. public static var Time = iron.system.Time;
  73. public static var Input = iron.system.Input;
  74. public static var ArmPack = iron.system.ArmPack;
  75. public static var Object = iron.object.Object;
  76. public static var Data = iron.data.Data;
  77. }
  78. @:expose("zui")
  79. class ZuiBridge {
  80. public static var Handle = zui.Zui.Handle;
  81. public static var Zui = zui.Zui;
  82. public static var Ext = zui.Ext;
  83. }
  84. @:expose("console")
  85. class ConsoleBridge {
  86. public static var log = arm.Console.log;
  87. public static var error = arm.Console.error;
  88. }