Library.hx 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package hrt.prefab;
  2. class Library extends Prefab {
  3. public function new() {
  4. super(null);
  5. type = "prefab";
  6. }
  7. override function load( obj : Dynamic ) {
  8. }
  9. override function save() {
  10. return {};
  11. }
  12. /**
  13. Returns the prefab within children that matches the given absolute path
  14. **/
  15. public function getFromPath( path : String ) : Prefab {
  16. var parts = path.split(".");
  17. var cur : Prefab = this;
  18. for( p in parts ) {
  19. var found = false;
  20. for( c in cur.children )
  21. if( c.name == p ) {
  22. found = true;
  23. cur = c;
  24. break;
  25. }
  26. if( !found ) return null;
  27. }
  28. return cur;
  29. }
  30. static var registeredElements = new Map<String,{ cl : Class<Prefab> #if editor, inf : hide.prefab.HideProps #end }>();
  31. static var registeredExtensions = new Map<String,String>();
  32. public static function getRegistered() {
  33. return registeredElements;
  34. }
  35. public static function isOfType( prefabKind : String, cl : Class<Prefab> ) {
  36. var inf = registeredElements.get(prefabKind);
  37. if( inf == null ) return false;
  38. var c : Class<Dynamic> = inf.cl;
  39. while( c != null ) {
  40. if( c == cl ) return true;
  41. c = Type.getSuperClass(c);
  42. }
  43. return false;
  44. }
  45. public static function register( type : String, cl : Class<Prefab>, ?extension : String ) {
  46. registeredElements.set(type, { cl : cl #if editor, inf : Type.createEmptyInstance(cl).getHideProps() #end });
  47. if( extension != null ) registeredExtensions.set(extension, type);
  48. return true;
  49. }
  50. public static function create( extension : String ) {
  51. var type = getPrefabType(extension);
  52. var p : hrt.prefab.Prefab;
  53. if( type == null )
  54. p = new Library();
  55. else
  56. p = Type.createInstance(registeredElements.get(type).cl,[]);
  57. return p;
  58. }
  59. public static function getPrefabType(path: String) {
  60. var extension = path.split(".").pop().toLowerCase();
  61. return registeredExtensions.get(extension);
  62. }
  63. static var _ = Library.register("prefab", Library, "prefab");
  64. }