2
0
trethaller 7 жил өмнө
parent
commit
407a1e9c2f

+ 3 - 0
bin/defaultProps.json

@@ -70,6 +70,9 @@
 	// l3d config
 	"l3d.groundLayer": "ground",
 	"l3d.cdbLevel": "level",
+	"l3d.colors": {
+		"zones": "#ff0000"
+	},
 
 	// FX editor
 	"fx.shaders": [

+ 1 - 1
hide/prefab/l3d/Layer.hx

@@ -5,7 +5,7 @@ class Layer extends Object3D {
 
 	public var locked = false;
 	public var uniqueNames = false;
-	public var color = 0xffffffff;
+	var color = 0xffffffff;
 
 	public function new(?parent) {
 		super(parent);

+ 9 - 10
hide/prefab/l3d/Polygon.hx

@@ -42,15 +42,14 @@ class Polygon extends Object3D {
 
 		var mat = mesh.material;
 		mat.mainPass.culling = None;
-
-		var layer = getParent(Layer);
-		if(layer != null) {
-			setColor(ctx, layer != null ? (layer.color | 0x40000000) : 0x40ff00ff);
-		}
-		else {
-			mat.props = h3d.mat.MaterialSetup.current.getDefaults("opaque");
-			mat.color.setColor(0xffffffff);
-		}
+		// var layer = getParent(Layer);
+		// if(layer != null) {
+		// 	setColor(ctx, layer != null ? (layer.color | 0x40000000) : 0x40ff00ff);
+		// }
+		// else {
+		// 	mat.props = h3d.mat.MaterialSetup.current.getDefaults("opaque");
+		// 	mat.color.setColor(0xffffffff);
+		// }
 
 		mat.castShadows = false;
 	}
@@ -146,7 +145,7 @@ class Polygon extends Object3D {
 		return ctx;
 	}
 
-	function setColor(ctx: Context, color: Int) {
+	public function setColor(ctx: Context, color: Int) {
 		#if editor
 		if(hide.prefab.Material.hasOverride(this))
 			return;

+ 70 - 41
hide/view/l3d/Level3D.hx

@@ -258,7 +258,7 @@ private class Level3DSceneEditor extends hide.comp.SceneEditor {
 		edit.properties.add(group);
 
 		if(sheet != null) {
-			var props = new hide.Element('<div></div>').appendTo(group.find(".group .content"));
+			var props = new hide.Element('<div></div>').appendTo(group.find(".content"));
 			var editor = new hide.comp.cdb.ObjEditor(sheet, e.props, props);
 			editor.undo = properties.undo;
 			editor.onChange = function(pname) {
@@ -287,6 +287,7 @@ class Level3D extends FileView {
 	var currentVersion : Int = 0;
 	var lastSyncChange : Float = 0.;
 	var currentSign : String;
+	var typeColorMap : Map<String, String>;
 
 	var scene(get, null):  hide.comp.Scene;
 	function get_scene() return sceneEditor.scene;
@@ -300,6 +301,16 @@ class Level3D extends FileView {
 		data.load(haxe.Json.parse(content));
 		currentSign = haxe.crypto.Md5.encode(content);
 
+		// typeColorMap = new Map();
+		// var colors = ide.currentProps.get("l3d.colors");
+		// if(colors != null) {
+		// 	for(f in Reflect.fields(colors)) {
+		// 		var col = Reflect.field(color, f);
+
+		// 	}
+		// }
+		
+
 		element.html('
 			<div class="flex vertical">
 				<div class="toolbar">
@@ -563,28 +574,41 @@ class Level3D extends FileView {
 	}
 
 	function refreshLayerIcon(layer: hide.prefab.l3d.Layer) {
-		var lb = layerButtons[layer];
-		if(lb != null) {
-			var color = "#" + StringTools.hex(layer.color & 0xffffff, 6);
-			if(layer.visible != lb.isDown())
-				lb.toggle(layer.visible);
-			lb.element.find(".icon").css("color", color);
-			var label = lb.element.find("label");
-			if(layer.locked)
-				label.addClass("locked");
-			else
-				label.removeClass("locked");
-		}
+		// var lb = layerButtons[layer];
+		// if(lb != null) {
+		// 	var color = "#" + StringTools.hex(layer.color & 0xffffff, 6);
+		// 	if(layer.visible != lb.isDown())
+		// 		lb.toggle(layer.visible);
+		// 	lb.element.find(".icon").css("color", color);
+		// 	var label = lb.element.find("label");
+		// 	if(layer.locked)
+		// 		label.addClass("locked");
+		// 	else
+		// 		label.removeClass("locked");
+		// }
 	}
 
+
 	function updateTreeStyle(p: PrefabElement, el: Element) {
-		var layer = p.to(hide.prefab.l3d.Layer);
-		if(layer != null) {
-			var color = "#" + StringTools.hex(layer.color & 0xffffff, 6);
-			el.find("i.jstree-themeicon").first().css("color", color);
-			el.find("a").first().toggleClass("locked", layer.locked);
-			refreshLayerIcon(layer);
-		}
+		// var layer = p.to(hide.prefab.l3d.Layer);
+		// if(layer != null) {
+		// 	var color = "#" + StringTools.hex(layer.color & 0xffffff, 6);
+		// 	el.find("i.jstree-themeicon").first().css("color", color);
+		// 	el.find("a").first().toggleClass("locked", layer.locked);
+		// 	refreshLayerIcon(layer);
+		// }
+
+		var dispColor = getDisplayColor(p);
+		var colorStr = dispColor != null ? "#" + StringTools.hex(dispColor & 0xffffff, 6) : "";
+		el.find("a").first().css("color", colorStr);
+		// var type = getCdbTypeId(p);
+		// if(type != null) {
+		// 	var colors = ide.currentProps.get("l3d.colors");
+		// 	var color = Reflect.field(colors, type);
+		// 	if(color != null) {
+		// 		el.find("a").first().css("color", color);
+		// 	}
+		// }
 	}
 
 	function onPrefabChange(p: PrefabElement, ?pname: String) {
@@ -597,19 +621,25 @@ class Level3D extends FileView {
 			updateGrid();
 			return;
 		}
-		var layer = p.to(hide.prefab.l3d.Layer);
-		if(layer != null)
-			applyLayerProps(layer);
+		// var layer = p.to(hide.prefab.l3d.Layer);
+		// if(layer != null)
+		// 	applyLayerProps(layer);
+
+		var color = getDisplayColor(p);
+		if(color == null)
+			color = 0x80ffffff;
+		else
+			color = (color & 0xffffff) | 0x80000000;
 
 		var box = p.to(hide.prefab.Box);
 		if(box != null) {
 			var ctx = sceneEditor.getContext(box);
-			box.setColor(ctx, getDisplayColor(p));
+			box.setColor(ctx, color);
 		}
 		var poly = p.to(hide.prefab.l3d.Polygon);
 		if(poly != null) {
 			var ctx = sceneEditor.getContext(poly);
-			poly.updateInstance(ctx);
+			poly.setColor(ctx, color);
 		}
 	}
 
@@ -629,21 +659,16 @@ class Level3D extends FileView {
 		}
 	}
 
-	static function getDisplayColor(p: PrefabElement) {
-		var color = 0x80ffffff;
-		var layer = p.getParent(Layer);
-		if(layer != null) {
-			color = layer.color;
-		}
-		var kind = Instance.getCdbKind(p);
-		if(kind != null) {
-			var colorCol = kind.sheet.columns.find(c -> c.type == cdb.Data.ColumnType.TColor);
-			if(colorCol != null) {
-				color = cast Reflect.getProperty(kind.idx.obj, colorCol.name);
-				color |= 0x80000000;
+	function getDisplayColor(p: PrefabElement) : Null<Int> {
+		var typeId = getCdbTypeId(p);
+		if(typeId != null) {
+			var colors = ide.currentProps.get("l3d.colors");
+			var color = Reflect.field(colors, typeId);
+			if(color != null) {
+				return Std.parseInt("0x"+color.substr(1)) | 0xff000000;
 			}
 		}
-		return color;
+		return null;
 	}
 
 	public function getLevelSheet() {
@@ -656,10 +681,14 @@ class Level3D extends FileView {
 		return [for(c in levelSheet.columns) if(c.type == TList) levelSheet.getSub(c)];
 	}
 
-	public function getCdbModel(e:hxd.prefab.Prefab):cdb.Sheet {
-		if(e.props == null)
+	function getCdbTypeId(p: PrefabElement) : String {
+		if(p.props == null)
 			return null;
-		var typeName : String = Reflect.getProperty(e.props, "$cdbtype");
+		return Reflect.getProperty(p.props, "$cdbtype");
+	}
+
+	public function getCdbModel(e:hxd.prefab.Prefab):cdb.Sheet {
+		var typeName : String = getCdbTypeId(e);
 		if(typeName == null)
 			return null;
 		var types = getCdbTypes();