Pārlūkot izejas kodu

prefabs are now proper resources, added registered extensions

ncannasse 7 gadi atpakaļ
vecāks
revīzija
50143b503b
4 mainītis faili ar 26 papildinājumiem un 4 dzēšanām
  1. 3 1
      hxd/prefab/Library.hx
  2. 1 3
      hxd/res/Any.hx
  3. 1 0
      hxd/res/Config.hx
  4. 21 0
      hxd/res/Prefab.hx

+ 3 - 1
hxd/prefab/Library.hx

@@ -45,6 +45,7 @@ class Library extends Prefab {
 	}
 
 	static var registeredElements = new Map<String,{ cl : Class<Prefab> #if editor, inf : hide.prefab.HideProps #end }>();
+	static var registeredExtensions = new Map<String,String>();
 
 	public static function getRegistered() {
 		return registeredElements;
@@ -61,8 +62,9 @@ class Library extends Prefab {
 		return false;
 	}
 
-	public static function register( type : String, cl : Class<Prefab> ) {
+	public static function register( type : String, cl : Class<Prefab>, ?extension : String ) {
 		registeredElements.set(type, { cl : cl #if editor, inf : Type.createEmptyInstance(cl).getHideProps() #end });
+		if( extension != null ) registeredExtensions.set(extension, type);
 		return true;
 	}
 

+ 1 - 3
hxd/res/Any.hx

@@ -51,11 +51,9 @@ class Any extends Resource {
 		return loader.loadCache(entry.path, hxd.res.Sound);
 	}
 
-	#if hide
 	public function toPrefab() {
-		return loader.loadCache(entry.path, hide.prefab.Resource);
+		return loader.loadCache(entry.path, hxd.res.Prefab);
 	}
-	#end
 
 	public function to<T:hxd.res.Resource>( c : Class<T> ) : T {
 		return loader.loadCache(entry.path, c);

+ 1 - 0
hxd/res/Config.hx

@@ -26,6 +26,7 @@ class Config {
 		"tmx" => "hxd.res.TiledMap",
 		"atlas" => "hxd.res.Atlas",
 		"grd" => "hxd.res.Gradients",
+		"prefab" => "hxd.res.Prefab"
 	];
 
 	/**

+ 21 - 0
hxd/res/Prefab.hx

@@ -0,0 +1,21 @@
+package hxd.res;
+
+class Prefab extends hxd.res.Resource {
+
+	var lib : hxd.prefab.Prefab;
+
+	public function load() : hxd.prefab.Prefab {
+		if( lib != null )
+			return lib;
+		var data = haxe.Json.parse(entry.getText());
+		var type = @:privateAccess hxd.prefab.Library.registeredExtensions.get(entry.extension);
+		if( type == null )
+			lib = new hxd.prefab.Library();
+		else
+			lib = Type.createInstance(hxd.prefab.Library.getRegistered().get(type).cl,[]);
+		lib.load(data);
+		watch(function() lib.reload(haxe.Json.parse(entry.getText())));
+		return lib;
+	}
+
+}