Răsfoiți Sursa

various fixes

Nicolas Cannasse 5 ani în urmă
părinte
comite
a15e1201e4
3 a modificat fișierele cu 46 adăugiri și 8 ștergeri
  1. 10 1
      hide/comp/SceneEditor.hx
  2. 27 2
      hrt/prefab/l3d/GameController.hx
  3. 9 5
      hrt/prefab/l3d/HeightMap.hx

+ 10 - 1
hide/comp/SceneEditor.hx

@@ -184,7 +184,7 @@ class SceneEditor {
 		scene.editor = this;
 		scene.onReady = onSceneReady;
 		scene.onResize = function() {
-			cameraController2D.toTarget();
+			if( cameraController2D != null ) cameraController2D.toTarget();
 			onResize();
 		};
 
@@ -324,6 +324,15 @@ class SceneEditor {
 		return c;
 	}
 
+	public function setFullScreen( b : Bool ) {
+		view.fullScreen = b;
+		if( b ) {
+			view.element.find(".tabs").hide();
+		} else {
+			view.element.find(".tabs").show();
+		}
+	}
+
 	function makeCamController2D() {
 		return new hide.view.l3d.CameraController2D(context.shared.root2d);
 	}

+ 27 - 2
hrt/prefab/l3d/GameController.hx

@@ -5,12 +5,14 @@ class GameController extends Object3D {
 	public var moveSpeed : Float = 1.;
 	public var followGround : Bool = true;
 	public var cameraFollowGround : Bool = true;
+	public var startFullScreen : Bool = true;
 
 	override function load(obj:Dynamic) {
 		super.load(obj);
 		moveSpeed = obj.moveSpeed;
 		followGround = obj.followGround;
 		cameraFollowGround = obj.cameraFollowGround;
+		startFullScreen = obj.startFullScreen;
 	}
 
 	override function save():{} {
@@ -18,6 +20,7 @@ class GameController extends Object3D {
 		obj.moveSpeed = moveSpeed;
 		obj.followGround = followGround;
 		obj.cameraFollowGround = cameraFollowGround;
+		obj.startFullScreen = startFullScreen;
 		return obj;
 	}
 
@@ -38,25 +41,38 @@ class GameController extends Object3D {
 					<dt>Move Speed</dt><dd><input type="range" min="0" max="10" field="moveSpeed"/></dd>
 					<dt>Follow Ground</dt><dd><input type="checkbox" field="followGround"/></dd>
 					<dt>Camera Follow Ground</dt><dd><input type="checkbox" field="cameraFollowGround"/></dd>
+					<dt>Start Full Screen</dt><dd><input type="checkbox" field="startFullScreen"/></dd>
 				</dl>
 			</div>
 		'),this);
 
 		var active = false;
-		var obj = ctx.getContext(this).local3d;
+		var lctx = ctx.getContext(this);
+		var obj = lctx.local3d;
 		var camSave = null;
 		var dummy : h3d.scene.Object = null;
 		var cam = ctx.scene.s3d.camera;
 
+		function selectRec( p : Prefab, b : Bool ) {
+			if( !p.setSelected(ctx.getContext(p), b) )
+				return;
+			for( c in p.children )
+				selectRec(c, b);
+		}
+
 		function restore() {
 			// restore position
 			obj.setTransform(getTransform());
 			// restore camera
 			cam.pos.load(camSave.pos);
 			cam.target.load(camSave.target);
+			cam.zFar = camSave.zFar;
+			cam.fovY = camSave.fovY;
 			ctx.scene.editor.cameraController.loadFromCamera();
 			@:privateAccess ctx.scene.editor.showGizmo = true;
 			if( dummy != null ) dummy.remove();
+			if( startFullScreen ) ctx.scene.editor.setFullScreen(false);
+			selectRec(this, true);
 		}
 
 		function onUpdate( dt : Float ) {
@@ -68,10 +84,16 @@ class GameController extends Object3D {
 					restore();
 				} else {
 					@:privateAccess ctx.scene.editor.showGizmo = false;
-					camSave = { pos : cam.pos.clone(), target : cam.target.clone() };
+					camSave = { pos : cam.pos.clone(), target : cam.target.clone(), fovY : cam.fovY, zFar : cam.zFar };
+					var camView = @:privateAccess ctx.scene.editor.sceneData.get(Camera);
+					if( camView != null )
+						camView.applyTo(cam);
 					if( obj.numChildren == 0 )
 						dummy = new h3d.scene.Box(obj);
+					if( startFullScreen )
+						ctx.scene.editor.setFullScreen(true);
 					force = true;
+					selectRec(this, false);
 				}
 			}
 			if( !active )
@@ -80,6 +102,8 @@ class GameController extends Object3D {
 			if( !force && pad.xAxis == 0 && pad.yAxis == 0 )
 				return;
 
+			if( pad.isDown(pad.config.A) ) dt *= 10;
+
 
 			var delta = cam.pos.sub(cam.target);
 			var ax = cam.getViewDirection(1,0,0);
@@ -87,6 +111,7 @@ class GameController extends Object3D {
 			ax.normalize();
 			obj.x += (pad.xAxis * ax.x - pad.yAxis * ax.y) * dt * moveSpeed;
 			obj.y += (pad.xAxis * ax.y + pad.yAxis * ax.x) * dt * moveSpeed;
+			obj.setRotation(0, 0, Math.atan2(pad.yAxis, pad.xAxis));
 
 			var gz = ctx.scene.editor.getZ(obj.x, obj.y);
 			if( followGround )

+ 9 - 5
hrt/prefab/l3d/HeightMap.hx

@@ -47,17 +47,21 @@ class HeightMapShader extends hxsl.Shader {
 					var px1 = getPoint(1, 0);
 					var py1 = getPoint(0, 1);
 					var n = px1.cross(py1) + py1.cross(px0) + px0.cross(py0) + py0.cross(px1);
-					n.z *= normalScale;
-					transformedNormal = (n.normalize() * global.modelView.mat3()).normalize();
+					setNormal(n);
 				}
 			}
 		}
 
+		function setNormal(n:Vec3) {
+			transformedNormal = (n.normalize() * global.modelView.mat3()).normalize();
+		}
+
 		function __init__fragment() {
 			if( hasNormal ) {
 				var n = unpackNormal(normalMap.get(calculatedUV));
-				n.z *= normalScale;
-				transformedNormal = (n * global.modelView.mat3()).normalize();
+				n = n.normalize();
+				n.xy *= normalScale;
+				setNormal(n);
 			}
 			if( SplatCount > 0 ) {
 				var color = pixelColor;
@@ -284,7 +288,7 @@ class HeightMap extends Object3D {
 		shader.hasNormal = normal != null;
 		shader.normalMap = normal;
 		shader.heightScale = getHScale();
-		shader.normalScale = 1 / normalScale;
+		shader.normalScale = heightScale * normalScale;
 		shader.cellSize.set(prim.cellWidth,prim.cellHeight);
 		if( hmap != null ) shader.heightOffset.set(1 / hmap.width,1 / hmap.height);