Plugin.hx 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. package arm;
  2. @:keep
  3. class Plugin {
  4. public static var plugins: Map<String, Plugin> = [];
  5. static var pluginName: String;
  6. public var drawUI: zui.Zui->Void = null;
  7. public var draw: Void->Void = null;
  8. public var update: Void->Void = null;
  9. public var delete: Void->Void = null;
  10. public var version = "0.1";
  11. public var apiversion = "0.1";
  12. var name: String;
  13. public function new() {
  14. name = pluginName;
  15. plugins.set(name, this);
  16. }
  17. public static function init() {
  18. var api = js.Syntax.code("arm");
  19. #if (is_paint || is_sculpt)
  20. api.MaterialParser = arm.shader.MaterialParser;
  21. api.NodesMaterial = arm.shader.NodesMaterial;
  22. api.UIView2D = arm.ui.UIView2D;
  23. api.RenderUtil = arm.util.RenderUtil;
  24. #end
  25. #if is_paint
  26. api.UVUtil = arm.util.UVUtil;
  27. #end
  28. #if is_lab
  29. api.BrushOutputNode = arm.logic.BrushOutputNode;
  30. #end
  31. }
  32. public static function start(plugin: String) {
  33. try {
  34. iron.data.Data.getBlob("plugins/" + plugin, function(blob: kha.Blob) {
  35. pluginName = plugin;
  36. #if js
  37. // js.Syntax.code("(1, eval)({0})", blob.toString()); // Global scope
  38. js.Syntax.code("eval({0})", blob.toString()); // Local scope
  39. #end
  40. iron.data.Data.deleteBlob("plugins/" + plugin);
  41. });
  42. }
  43. catch (e: Dynamic) {
  44. Console.error(tr("Failed to load plugin") + " '" + plugin + "'");
  45. trace(e);
  46. }
  47. }
  48. public static function stop(plugin: String) {
  49. var p = plugins.get(plugin);
  50. if (p != null && p.delete != null) p.delete();
  51. plugins.remove(plugin);
  52. }
  53. }
  54. @:keep
  55. class Keep {
  56. public static function keep() {
  57. return untyped [
  58. iron.system.ArmPack.decode,
  59. iron.system.ArmPack.encode,
  60. arm.ui.UIBox.showMessage
  61. ];
  62. }
  63. }
  64. #if is_lab
  65. @:keep
  66. class KeepLab {
  67. public static function keep() {
  68. var a = App.uiBox.panel;
  69. return [a];
  70. }
  71. }
  72. #end
  73. @:expose("core")
  74. class CoreBridge {
  75. public static var Json = haxe.Json;
  76. public static var ReflectFields = Reflect.fields;
  77. public static var ReflectField = Reflect.field;
  78. public static var ReflectSetField = Reflect.setField;
  79. public static var StdIs = Std.isOfType;
  80. public static var Bytes = haxe.io.Bytes;
  81. public static var BytesInput = haxe.io.BytesInput;
  82. public static var BytesOutput = haxe.io.BytesOutput;
  83. public static var Blob = kha.Blob;
  84. public static var Image = kha.Image;
  85. public static var Scheduler = kha.Scheduler;
  86. public static function colorFromFloats(r: Float, g: Float, b: Float, a: Float): kha.Color {
  87. return kha.Color.fromFloats(r, g, b, a);
  88. }
  89. }
  90. @:expose("iron")
  91. class IronBridge {
  92. public static var App = iron.App;
  93. public static var Scene = iron.Scene;
  94. public static var RenderPath = iron.RenderPath;
  95. public static var Time = iron.system.Time;
  96. public static var Input = iron.system.Input;
  97. public static var ArmPack = iron.system.ArmPack;
  98. public static var Object = iron.object.Object;
  99. public static var Data = iron.data.Data;
  100. }
  101. @:expose("zui")
  102. class ZuiBridge {
  103. public static var Handle = zui.Zui.Handle;
  104. public static var Zui = zui.Zui;
  105. public static var Ext = zui.Ext;
  106. }
  107. @:expose("console")
  108. class ConsoleBridge {
  109. public static var log = arm.Console.log;
  110. public static var error = arm.Console.error;
  111. }
  112. @:expose("arm")
  113. class ArmBridge {
  114. public static var App = arm.App;
  115. public static var Config = arm.Config;
  116. public static var Context = arm.Context;
  117. public static var History = arm.History;
  118. public static var Operator = arm.Operator;
  119. public static var Plugin = arm.Plugin;
  120. public static var Project = arm.Project;
  121. public static var Res = arm.Res;
  122. public static var Path = arm.sys.Path;
  123. public static var File = arm.sys.File;
  124. public static var NodesBrush = arm.logic.NodesBrush;
  125. public static var LogicParser = arm.logic.LogicParser;
  126. public static var UIBase = arm.ui.UIBase;
  127. public static var UINodes = arm.ui.UINodes;
  128. public static var UIFiles = arm.ui.UIFiles;
  129. public static var UIMenu = arm.ui.UIMenu;
  130. public static var UIBox = arm.ui.UIBox;
  131. public static var MeshUtil = arm.util.MeshUtil;
  132. public static var Viewport = arm.Viewport;
  133. }