Context.hx 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package hrt.prefab;
  2. @:final class Context {
  3. public var local2d : h2d.Object;
  4. public var local3d : h3d.scene.Object;
  5. public var shared : ContextShared;
  6. public var cleanup : Void -> Void;
  7. public var custom : Dynamic;
  8. public var isRef : Bool = false;
  9. public function new() {
  10. }
  11. public function init() {
  12. if( shared == null )
  13. shared = new ContextShared();
  14. local2d = shared.root2d;
  15. local3d = shared.root3d;
  16. }
  17. public function clone( p : Prefab ) {
  18. var c = new Context();
  19. c.shared = shared;
  20. c.local2d = local2d;
  21. c.local3d = local3d;
  22. c.custom = custom;
  23. c.isRef = isRef;
  24. if( p != null ) {
  25. if(!isRef)
  26. shared.contexts.set(p, c);
  27. else {
  28. if(!shared.references.exists(p))
  29. shared.references.set(p, [c])
  30. else
  31. shared.references[p].push(c);
  32. }
  33. }
  34. return c;
  35. }
  36. public function loadModel( path : String ) {
  37. return shared.loadModel(path);
  38. }
  39. public function loadAnimation( path : String ) {
  40. return shared.loadAnimation(path);
  41. }
  42. public function loadTexture( path : String ) {
  43. return shared.loadTexture(path);
  44. }
  45. public function loadShader( name : String ) {
  46. return shared.loadShader(name);
  47. }
  48. public function locateObject( path : String ) {
  49. if( path == null )
  50. return null;
  51. var parts = path.split(".");
  52. var root = shared.root3d;
  53. while( parts.length > 0 ) {
  54. var v = null;
  55. var pname = parts.shift();
  56. for( o in root )
  57. if( o.name == pname ) {
  58. v = o;
  59. break;
  60. }
  61. if( v == null ) {
  62. v = root.getObjectByName(pname);
  63. //if( v != null && v.parent != root ) v = null; ??
  64. }
  65. if( v == null ) {
  66. var parts2 = path.split(".");
  67. for( i in 0...parts.length ) parts2.pop();
  68. shared.onError("Object not found " + parts2.join("."));
  69. return null;
  70. }
  71. root = v;
  72. }
  73. return root;
  74. }
  75. }