瀏覽代碼

refactor view out of EditContext

ncannasse 7 年之前
父節點
當前提交
165b21cffa
共有 7 個文件被更改,包括 33 次插入27 次删除
  1. 1 0
      hide.hxml
  2. 1 1
      hide.hxproj
  3. 1 2
      hide/prefab/EditContext.hx
  4. 1 1
      hide/prefab/Settings.hx
  5. 9 4
      hide/view/Prefab.hx
  6. 15 15
      hide/view/l3d/Level3D.hx
  7. 5 4
      hide/view/l3d/LevelEditContext.hx

+ 1 - 0
hide.hxml

@@ -7,6 +7,7 @@
 -js bin/hide.js
 -main hide.Ide
 -D hscriptPos
+-D old-error-format
 -D multidriver
 -D editor
 -dce no

+ 1 - 1
hide.hxproj

@@ -22,7 +22,7 @@
     <option directives="" />
     <option flashStrict="False" />
     <option noInlineOnDebug="False" />
-    <option mainClass="hide.ui.Ide" />
+    <option mainClass="hide.Ide" />
     <option enabledebug="False" />
     <option additional="-D hscriptPos&#xA;-D old-error-format&#xA;-D multidriver&#xA;-D editor&#xA;-dce no" />
   </build>

+ 1 - 2
hide/prefab/EditContext.hx

@@ -8,9 +8,8 @@ class EditContext {
 	public var prefabPath : String;
 	public var ide(get,never) : hide.Ide;
 	public var scene : hide.comp.Scene;
-	public var view : hide.view.FileView;
-	public var cleanups : Array<Void->Void>;
 	public var properties : hide.comp.PropsEditor;
+	public var cleanups : Array<Void->Void>;
 	function get_ide() return hide.Ide.inst;
 	public function onChange(p : Prefab, propName : String) { }
 	#end

+ 1 - 1
hide/prefab/Settings.hx

@@ -99,7 +99,7 @@ class Settings extends Prefab {
 			Reflect.deleteField(data, f);
 		}
 		if( changed )
-			ctx.view.modified = true;
+			ctx.onChange(this, null);
 
 		ctx.properties.addProps(modelDef.fields, this.data);
 		var rebuild = ctx.rebuild;

+ 9 - 4
hide/view/Prefab.hx

@@ -4,11 +4,13 @@ import hide.prefab.Prefab in PrefabElement;
 
 class EditContext extends hide.prefab.EditContext {
 
+	var view : FileView;
 	public var elt : PrefabElement;
 
-	public function new(ctx, elt) {
+	public function new(ctx, elt, view) {
 		super(ctx);
 		this.elt = elt;
+		this.view = view;
 	}
 
 	override function rebuild() {
@@ -23,6 +25,10 @@ class EditContext extends hide.prefab.EditContext {
 		cleanups = [];
 	}
 
+	override function onChange(p:hide.prefab.Prefab, propName:String) {
+		view.modified = true;
+	}
+
 }
 
 class Prefab extends FileView {
@@ -124,11 +130,10 @@ class Prefab extends FileView {
 	function selectObject( elt : PrefabElement ) {
 		if( curEdit != null )
 			curEdit.cleanup();
-		var edit = new EditContext(context, elt);
+		var edit = new EditContext(context, elt, this);
 		edit.prefabPath = state.path;
 		edit.properties = properties;
 		edit.scene = scene;
-		edit.view = this;
 		edit.cleanups = [];
 		edit.rebuild();
 		curEdit = edit;
@@ -296,7 +301,7 @@ class Prefab extends FileView {
 									}
 									else {
 										roots.remove(o);
-										contexts.remove(o);										
+										contexts.remove(o);
 									}
 									refresh();
 								}));

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

@@ -159,10 +159,10 @@ class Level3D extends FileView {
 		}
 
 		prefix += "_";
-		var id = 0;		
+		var id = 0;
 		while( data.getPrefabByName(prefix + id) != null )
 			id++;
-			
+
 		p.name = prefix + id;
 
 		for(c in p.children) {
@@ -173,7 +173,7 @@ class Level3D extends FileView {
 	function selectObjects( elts : Array<PrefabElement>, ?includeTree=true) {
 		if( curEdit != null )
 			curEdit.cleanup();
-		var edit = new LevelEditContext(context, elts);
+		var edit = new LevelEditContext(context, elts, this);
 		edit.prefabPath = state.path;
 		edit.properties = properties;
 		edit.scene = scene;
@@ -219,7 +219,7 @@ class Level3D extends FileView {
 			}];
 
 			var objects3d = [for(e in curEdit.elements) e.to(Object3D)];
-			var prevState = [for(o in objects3d) o.save()];			
+			var prevState = [for(o in objects3d) o.save()];
 			var snapGround = mode == MoveXY;
 			gizmo.onMove = function(translate: h3d.Vector, rot: h3d.Quat, scale: h3d.Vector) {
 				var transf = new h3d.Matrix();
@@ -318,7 +318,7 @@ class Level3D extends FileView {
 		if(curEdit != null && curEdit.rootObjects.length > 0) {
 			targetPt = curEdit.rootObjects[0].getAbsPos().pos().toPoint();
 		}
-		if(top) 
+		if(top)
 			cameraController.set(200, Math.PI/2, 0.001, targetPt);
 		else
 			cameraController.set(200, -4.7, 0.8, targetPt);
@@ -361,7 +361,7 @@ class Level3D extends FileView {
 		if( light == null ) {
 			light = new h3d.scene.DirLight(new h3d.Vector(), scene.s3d);
 			light.enableSpecular = true;
-		} else	
+		} else
 			light = null;
 
 
@@ -390,7 +390,7 @@ class Level3D extends FileView {
 		tools.saveDisplayKey = "SceneTools";
 
 		{
-			var edit = new LevelEditContext(context, []);
+			var edit = new LevelEditContext(context, [], this);
 			edit.prefabPath = state.path;
 			edit.properties = levelProps;
 			edit.scene = scene;
@@ -681,7 +681,7 @@ class Level3D extends FileView {
 		var elements = curEdit.rootElements;
 		if(elements == null || elements.length == 0)
 			return;
-		var contexts = context.shared.contexts;		
+		var contexts = context.shared.contexts;
 		var oldContexts = contexts.copy();
 		var newElements = [for(elt in elements) {
 			var clone = hide.prefab.Prefab.loadRec(elt.saveRec());
@@ -741,7 +741,7 @@ class Level3D extends FileView {
 			else {
 				for(o in list)
 					o.parent.children.remove(o.elt);
-				context.shared.contexts = newContexts;				
+				context.shared.contexts = newContexts;
 			}
 			deselect();
 			refresh();
@@ -859,7 +859,7 @@ class Level3D extends FileView {
 		for(e in elts)
 			if(e.parent != parent)
 				return false;
-		
+
 		return true;
 	}
 
@@ -1016,7 +1016,7 @@ class Level3D extends FileView {
 				int.ignoreParentTransform = true;
 				int.preciseShape = meshCollider;
 				int.propagateEvents = true;
-				var startDrag = null;			
+				var startDrag = null;
 				int.onPush = function(e) {
 					startDrag = [scene.s2d.mouseX, scene.s2d.mouseY];
 					e.propagate = false;
@@ -1062,7 +1062,7 @@ class Level3D extends FileView {
 		if(layer != null) {
 			var color = "#" + StringTools.hex(layer.color, 6);
 			el.find("i.jstree-themeicon").first().css("color", color);
-			if(layer.locked) 
+			if(layer.locked)
 				el.find("a").first().addClass("jstree-locked");
 			else
 				el.find("a").first().removeClass("jstree-locked");
@@ -1073,9 +1073,9 @@ class Level3D extends FileView {
 					lb.toggle(layer.visible);
 				lb.element.find(".icon").css("color", color);
 				var label = lb.element.find("label");
-				if(layer.locked) 
+				if(layer.locked)
 					label.addClass("locked");
-				else 
+				else
 					label.removeClass("locked");
 			}
 		}
@@ -1116,7 +1116,7 @@ class Level3D extends FileView {
 		var gname = props.get("l3d.groundLayer");
 		var groundLayer = data.get(Layer, gname);
 		var polygons = groundLayer.getAll(hide.prefab.l3d.Polygon);
-		return polygons;		
+		return polygons;
 	}
 
 	function projectToGround(ray: h3d.col.Ray) {

+ 5 - 4
hide/view/l3d/LevelEditContext.hx

@@ -4,12 +4,14 @@ import h3d.scene.Object;
 
 class LevelEditContext extends hide.prefab.EditContext {
 
+	public var view : Level3D;
 	public var elements : Array<PrefabElement>;
 	public var rootObjects(default, null): Array<Object>;
 	public var rootElements(default, null): Array<PrefabElement>;
 
-	public function new(ctx, elts) {
+	public function new(ctx, elts, view) {
 		super(ctx);
+		this.view = view;
 		this.elements = elts;
 		rootObjects = [];
 		rootElements = [];
@@ -24,7 +26,7 @@ class LevelEditContext extends hide.prefab.EditContext {
 	override function rebuild() {
 		properties.clear();
 		cleanup();
-		if(elements.length > 0) 
+		if(elements.length > 0)
 			elements[0].edit(this);
 	}
 
@@ -35,7 +37,6 @@ class LevelEditContext extends hide.prefab.EditContext {
 	}
 
 	override function onChange(p : PrefabElement, pname: String) {
-		var level3D : Level3D = cast view;
-		level3D.onPrefabChange(p, pname);
+		view.onPrefabChange(p, pname);
 	}
 }