소스 검색

Fix instances

trethaller 7 년 전
부모
커밋
8a40db39fd
3개의 변경된 파일24개의 추가작업 그리고 15개의 파일을 삭제
  1. 3 0
      hide/prefab/l3d/Instance.hx
  2. 7 0
      hide/prefab/l3d/Level3D.hx
  3. 14 15
      hide/view/l3d/Level3D.hx

+ 3 - 0
hide/prefab/l3d/Instance.hx

@@ -13,6 +13,9 @@ class Instance extends Object3D {
 		#if editor
 		var ctx = super.makeInstance(ctx);
 		var kind = getCdbKind(this);
+		if(kind == null)
+			return ctx;
+	
 		var modelPath = findModelPath(kind.sheet, kind.idx.obj);
 		if(modelPath != null) {
 			try {

+ 7 - 0
hide/prefab/l3d/Level3D.hx

@@ -23,6 +23,13 @@ class Level3D extends hxd.prefab.Library {
 		height = obj.height == null ? 100 : obj.height;
 	}
 
+	override function getCdbModel(?p:hxd.prefab.Prefab):cdb.Sheet {
+		#if (editor && castle)
+		return hide.view.l3d.Level3D.getCdbModel(p);
+		#end 
+		return null;
+	}
+
 	#if editor
 
 	override function edit( ctx : EditContext ) {

+ 14 - 15
hide/view/l3d/Level3D.hx

@@ -217,15 +217,10 @@ private class Level3DSceneEditor extends hide.comp.SceneEditor {
 		return newItems;
 	}
 
-	function resolveCdbType(id: String) {
-		var types = parent.getCdbTypes();
-		return types.find(t -> t.name.split("@").pop() == id);
-	}
-
 	override function fillProps(edit:hide.prefab.EditContext, e:PrefabElement) {
 		super.fillProps(edit, e);
 
-		var sheet = parent.getCdbModel(e);
+		var sheet = Level3D.getCdbModel(e);
 		var group = new hide.Element('
 			<div class="group" name="CDB">
 				<dl><dt>Type</dt><dd><select><option value="">-- Choose --</option></select></dd>
@@ -233,7 +228,7 @@ private class Level3DSceneEditor extends hide.comp.SceneEditor {
 		');
 
 		var select = group.find("select");
-		var cdbTypes = parent.getCdbTypes();
+		var cdbTypes = Level3D.getCdbTypes();
 		for(t in cdbTypes) {
 			var current = sheet != null && sheet.name == t.name;
 			var id = t.name.split("@").pop();
@@ -244,7 +239,7 @@ private class Level3DSceneEditor extends hide.comp.SceneEditor {
 		}
 		select.change(function(v) {
 			var typeId = select.val();
-			var cdbSheet = resolveCdbType(typeId);
+			var cdbSheet = Level3D.resolveCdbType(typeId);
 			if(cdbSheet == null)
 				return;
 
@@ -671,28 +666,32 @@ class Level3D extends FileView {
 		return null;
 	}
 
-	public function getLevelSheet() {
-		return ide.database.getSheet(ide.currentProps.get("l3d.cdbLevel", "level"));
+	public static function getLevelSheet() {
+		return Ide.inst.database.getSheet(Ide.inst.currentProps.get("l3d.cdbLevel", "level"));
+	}
+
+	static function resolveCdbType(id: String) {
+		var types = Level3D.getCdbTypes();
+		return types.find(t -> t.name.split("@").pop() == id);
 	}
 
-	public function getCdbTypes() {
+	public static function getCdbTypes() {
 		var levelSheet = getLevelSheet();
 		if(levelSheet == null) return [];
 		return [for(c in levelSheet.columns) if(c.type == TList) levelSheet.getSub(c)];
 	}
 
-	function getCdbTypeId(p: PrefabElement) : String {
+	public static function getCdbTypeId(p: PrefabElement) : String {
 		if(p.props == null)
 			return null;
 		return Reflect.getProperty(p.props, "$cdbtype");
 	}
 
-	public function getCdbModel(e:hxd.prefab.Prefab):cdb.Sheet {
+	public static function getCdbModel(e:hxd.prefab.Prefab):cdb.Sheet {
 		var typeName : String = getCdbTypeId(e);
 		if(typeName == null)
 			return null;
-		var types = getCdbTypes();
-		return types.find(t -> t.name.split("@").pop() == typeName);
+		return resolveCdbType(typeName);
 	}
 
 	function getGroundPolys() {