From 7cc823a53ffc7b32b53ce80136b811e0bf1eaa91 Mon Sep 17 00:00:00 2001
From: chrisgregan <chris@fungusgames.com>
Date: Mon, 21 Dec 2015 17:06:37 +0000
Subject: [PATCH 1/2] Added camera property to camera controller commands #307

Also fixed:
Camera z is always forced with View commands #319
---
 .../Fungus/Camera/Scripts/CameraController.cs | 194 ++++++++++--------
 .../Camera/Scripts/Commands/FadeToView.cs     |  20 +-
 .../Camera/Scripts/Commands/MoveToView.cs     |  24 ++-
 .../Camera/Scripts/Commands/StartSwipe.cs     |  25 ++-
 4 files changed, 175 insertions(+), 88 deletions(-)

diff --git a/Assets/Fungus/Camera/Scripts/CameraController.cs b/Assets/Fungus/Camera/Scripts/CameraController.cs
index e89e0ea9..a679435c 100644
--- a/Assets/Fungus/Camera/Scripts/CameraController.cs
+++ b/Assets/Fungus/Camera/Scripts/CameraController.cs
@@ -27,7 +27,12 @@ namespace Fungus
 		 * (0,0) = top left, (1,1) = bottom right
 		 */
 		public Vector2 swipeIconPosition = new Vector2(1,0);
-		
+
+		/**
+		 * Set the camera z coordinate to a fixed value every frame.
+		 */
+		public bool setCameraZ = true;
+
 		/**
 		 * Fixed Z coordinate of main camera.
 		 */
@@ -41,6 +46,8 @@ namespace Fungus
 		// Swipe panning control
 		[HideInInspector]
 		public bool swipePanActive;
+		public Camera swipeCamera;
+
 		[HideInInspector]
 		public float swipeSpeedMultiplier = 1f;
 		protected View swipePanViewA;
@@ -132,7 +139,7 @@ namespace Fungus
 		/**
 		 * Fade out, move camera to view and then fade back in.
 		 */
-		public virtual void FadeToView(View view, float fadeDuration, bool fadeOut, Action fadeAction)
+		public virtual void FadeToView(Camera camera, View view, float fadeDuration, bool fadeOut, Action fadeAction)
 		{
 			swipePanActive = false;
 			fadeAlpha = 0f;
@@ -155,7 +162,7 @@ namespace Fungus
 			Fade(1f, outDuration, delegate {
 				
 				// Snap to new view
-				PanToPosition(view.transform.position, view.transform.rotation, view.viewSize, 0f, null);
+				PanToPosition(camera, view.transform.position, view.transform.rotation, view.viewSize, 0f, null);
 				
 				// Fade in
 				Fade(0f, inDuration, delegate {
@@ -203,34 +210,49 @@ namespace Fungus
 		 * Positions camera so sprite is centered and fills the screen.
 		 * @param spriteRenderer The sprite to center the camera on
 		 */
-		public virtual void CenterOnSprite(SpriteRenderer spriteRenderer)
+		public virtual void CenterOnSprite(Camera camera, SpriteRenderer spriteRenderer)
 		{
+			if (camera == null)
+			{
+				Debug.LogWarning("Camera is null");
+				return;
+			}
+
+			if (spriteRenderer == null)
+			{
+				Debug.LogWarning("Sprite renderer is null");
+				return;
+			}
+
 			swipePanActive = false;
 			
 			Sprite sprite = spriteRenderer.sprite;
 			Vector3 extents = sprite.bounds.extents;
 			float localScaleY = spriteRenderer.transform.localScale.y;
 
-			Camera camera = GetCamera();
-			if (camera != null)
-			{
-				camera.orthographicSize = extents.y * localScaleY;
-				Vector3 pos = spriteRenderer.transform.position;
-				camera.transform.position = new Vector3(pos.x, pos.y, 0);
-				SetCameraZ();
-			}
+			camera.orthographicSize = extents.y * localScaleY;
+			Vector3 pos = spriteRenderer.transform.position;
+			camera.transform.position = new Vector3(pos.x, pos.y, 0);
+	
+			SetCameraZ(camera);
 		}
 		
-		public virtual void PanToView(View view, float duration, Action arriveAction)
+		public virtual void PanToView(Camera camera, View view, float duration, Action arriveAction)
 		{
-			PanToPosition(view.transform.position, view.transform.rotation, view.viewSize, duration, arriveAction);
+			PanToPosition(camera, view.transform.position, view.transform.rotation, view.viewSize, duration, arriveAction);
 		}
 		
 		/**
 		 * Moves camera from current position to a target position over a period of time.
 		 */
-		public virtual void PanToPosition(Vector3 targetPosition, Quaternion targetRotation, float targetSize, float duration, Action arriveAction)
+		public virtual void PanToPosition(Camera camera, Vector3 targetPosition, Quaternion targetRotation, float targetSize, float duration, Action arriveAction)
 		{
+			if (camera == null)
+			{
+				Debug.LogWarning("Camera is null");
+				return;
+			}
+
 			// Stop any pan that is currently active
 			StopAllCoroutines();
 			
@@ -239,14 +261,12 @@ namespace Fungus
 			if (duration == 0f)
 			{
 				// Move immediately
-				Camera camera = GetCamera();
-				if (camera != null)
-				{
-					camera.orthographicSize = targetSize;
-					camera.transform.position = targetPosition;
-					camera.transform.rotation = targetRotation;
-				}
-				SetCameraZ();
+				camera.orthographicSize = targetSize;
+				camera.transform.position = targetPosition;
+				camera.transform.rotation = targetRotation;
+
+				SetCameraZ(camera);
+
 				if (arriveAction != null)
 				{
 					arriveAction();
@@ -254,31 +274,39 @@ namespace Fungus
 			}
 			else
 			{
-				StartCoroutine(PanInternal(targetPosition, targetRotation, targetSize, duration, arriveAction));
+				StartCoroutine(PanInternal(camera, targetPosition, targetRotation, targetSize, duration, arriveAction));
 			}
 		}
 		
 		/**
 		 * Stores the current camera view using a name.
 		 */
-		public virtual void StoreView(string viewName)
+		public virtual void StoreView(Camera camera, string viewName)
 		{
-			Camera camera = GetCamera();
 			if (camera != null)
 			{
-				CameraView currentView = new CameraView();
-				currentView.cameraPos = camera.transform.position;
-				currentView.cameraRot = camera.transform.rotation;
-				currentView.cameraSize = camera.orthographicSize;
-				storedViews[viewName] = currentView;
+				Debug.LogWarning("Camera is null");
+				return;
 			}
+
+			CameraView currentView = new CameraView();
+			currentView.cameraPos = camera.transform.position;
+			currentView.cameraRot = camera.transform.rotation;
+			currentView.cameraSize = camera.orthographicSize;
+			storedViews[viewName] = currentView;
 		}
 		
 		/**
 		 * Moves the camera to a previously stored camera view over a period of time.
 		 */
-		public virtual void PanToStoredView(string viewName, float duration, Action arriveAction)
+		public virtual void PanToStoredView(Camera camera, string viewName, float duration, Action arriveAction)
 		{
+			if (camera == null)
+			{
+				Debug.LogWarning("Camera is null");
+				return;
+			}
+
 			if (!storedViews.ContainsKey(viewName))
 			{
 				// View has not previously been stored
@@ -294,15 +322,12 @@ namespace Fungus
 			if (duration == 0f)
 			{
 				// Move immediately
-				Camera camera = GetCamera();
-				if (camera != null)
-				{
-					camera.transform.position = cameraView.cameraPos;
-					camera.transform.rotation = cameraView.cameraRot;
-					camera.orthographicSize = cameraView.cameraSize;
-				}
+				camera.transform.position = cameraView.cameraPos;
+				camera.transform.rotation = cameraView.cameraRot;
+				camera.orthographicSize = cameraView.cameraSize;
+
+				SetCameraZ(camera);
 
-				SetCameraZ();
 				if (arriveAction != null)
 				{
 					arriveAction();
@@ -310,15 +335,15 @@ namespace Fungus
 			}
 			else
 			{
-				StartCoroutine(PanInternal(cameraView.cameraPos, cameraView.cameraRot, cameraView.cameraSize, duration, arriveAction));
+				StartCoroutine(PanInternal(camera, cameraView.cameraPos, cameraView.cameraRot, cameraView.cameraSize, duration, arriveAction));
 			}
 		}
 		
-		protected virtual IEnumerator PanInternal(Vector3 targetPos, Quaternion targetRot, float targetSize, float duration, Action arriveAction)
+		protected virtual IEnumerator PanInternal(Camera camera, Vector3 targetPos, Quaternion targetRot, float targetSize, float duration, Action arriveAction)
 		{
-			Camera camera = GetCamera();
 			if (camera == null)
 			{
+				Debug.LogWarning("Camera is null");
 				yield break;
 			}
 
@@ -354,7 +379,7 @@ namespace Fungus
 					camera.transform.rotation = Quaternion.Lerp(startRot, endRot, Mathf.SmoothStep(0f, 1f, t));
 				}
 
-				SetCameraZ();
+				SetCameraZ(camera);
 				
 				if (arrived &&
 				    arriveAction != null)
@@ -369,11 +394,11 @@ namespace Fungus
 		/**
 		 * Moves camera smoothly through a sequence of Views over a period of time
 		 */
-		public virtual void PanToPath(View[] viewList, float duration, Action arriveAction)
+		public virtual void PanToPath(Camera camera, View[] viewList, float duration, Action arriveAction)
 		{
-			Camera camera = GetCamera();
 			if (camera == null)
 			{
+				Debug.LogWarning("Camera is null");
 				return;
 			}
 
@@ -398,14 +423,14 @@ namespace Fungus
 				pathList.Add(viewPos);
 			}
 			
-			StartCoroutine(PanToPathInternal(duration, arriveAction, pathList.ToArray()));
+			StartCoroutine(PanToPathInternal(camera, duration, arriveAction, pathList.ToArray()));
 		}
 		
-		protected virtual IEnumerator PanToPathInternal(float duration, Action arriveAction, Vector3[] path)
+		protected virtual IEnumerator PanToPathInternal(Camera camera, float duration, Action arriveAction, Vector3[] path)
 		{
-			Camera camera = GetCamera();
 			if (camera == null)
 			{
+				Debug.LogWarning("Camera is null");
 				yield break;
 			}
 
@@ -421,7 +446,8 @@ namespace Fungus
 				
 				camera.transform.position = new Vector3(point.x, point.y, 0);
 				camera.orthographicSize = point.z;
-				SetCameraZ();
+
+				SetCameraZ(camera);
 				
 				yield return null;
 			}
@@ -436,11 +462,11 @@ namespace Fungus
 		 * Activates swipe panning mode.
 		 * The player can pan the camera within the area between viewA & viewB.
 		 */
-		public virtual void StartSwipePan(View viewA, View viewB, float duration, float speedMultiplier, Action arriveAction)
+		public virtual void StartSwipePan(Camera camera, View viewA, View viewB, float duration, float speedMultiplier, Action arriveAction)
 		{
-			Camera camera = GetCamera();
 			if (camera == null)
 			{
+				Debug.LogWarning("Camera is null");
 				return;
 			}
 
@@ -453,9 +479,10 @@ namespace Fungus
 			Vector3 targetPosition = CalcCameraPosition(cameraPos, swipePanViewA, swipePanViewB);
 			float targetSize = CalcCameraSize(cameraPos, swipePanViewA, swipePanViewB); 
 			
-			PanToPosition(targetPosition, Quaternion.identity, targetSize, duration, delegate {
+			PanToPosition(camera, targetPosition, Quaternion.identity, targetSize, duration, delegate {
 				
 				swipePanActive = true;
+				swipeCamera = camera;
 				
 				if (arriveAction != null)
 				{
@@ -472,15 +499,23 @@ namespace Fungus
 			swipePanActive = false;
 			swipePanViewA = null;
 			swipePanViewB = null;
+			swipeCamera = null;
 		}
 		
-		protected virtual void SetCameraZ()
+		protected virtual void SetCameraZ(Camera camera)
 		{
-			Camera camera = GetCamera();
-			if (camera != null)
+			if (!setCameraZ)
+			{
+				return;
+			}
+
+			if (camera == null)
 			{
-				camera.transform.position = new Vector3(camera.transform.position.x, camera.transform.position.y, cameraZ);
+				Debug.LogWarning("Camera is null");
+				return;
 			}
+
+			camera.transform.position = new Vector3(camera.transform.position.x, camera.transform.position.y, cameraZ);
 		}
 		
 		protected virtual void Update()	
@@ -489,7 +524,13 @@ namespace Fungus
 			{
 				return;
 			}
-			
+
+			if (swipeCamera == null)
+			{
+				Debug.LogWarning("Camera is null");
+				return;
+			}
+
 			Vector3 delta = Vector3.zero;
 			
 			if (Input.touchCount > 0)
@@ -510,21 +551,17 @@ namespace Fungus
 				previousMousePos = Input.mousePosition;
 			}
 
-			Camera camera = GetCamera();
-			if (camera != null)
-			{
-				Vector3 cameraDelta = camera.ScreenToViewportPoint(delta);
-				cameraDelta.x *= -2f * swipeSpeedMultiplier;
-				cameraDelta.y *= -2f * swipeSpeedMultiplier;
-				cameraDelta.z = 0f;
-				
-				Vector3 cameraPos = camera.transform.position;
-				
-				cameraPos += cameraDelta;
-				
-				camera.transform.position = CalcCameraPosition(cameraPos, swipePanViewA, swipePanViewB);
-				camera.orthographicSize = CalcCameraSize(cameraPos, swipePanViewA, swipePanViewB); 
-			}
+			Vector3 cameraDelta = swipeCamera.ScreenToViewportPoint(delta);
+			cameraDelta.x *= -2f * swipeSpeedMultiplier;
+			cameraDelta.y *= -2f * swipeSpeedMultiplier;
+			cameraDelta.z = 0f;
+			
+			Vector3 cameraPos = swipeCamera.transform.position;
+			
+			cameraPos += cameraDelta;
+			
+			swipeCamera.transform.position = CalcCameraPosition(cameraPos, swipePanViewA, swipePanViewB);
+			swipeCamera.orthographicSize = CalcCameraSize(cameraPos, swipePanViewA, swipePanViewB); 
 		}
 		
 		// Clamp camera position to region defined by the two views
@@ -561,16 +598,5 @@ namespace Fungus
 			
 			return cameraSize;
 		}
-
-		protected Camera GetCamera()
-		{
-			Camera camera = Camera.main;
-			if (camera == null)
-			{
-				camera = GameObject.FindObjectOfType<Camera>() as Camera;
-			}
-
-			return camera;
-		}
 	}
 }
\ No newline at end of file
diff --git a/Assets/Fungus/Camera/Scripts/Commands/FadeToView.cs b/Assets/Fungus/Camera/Scripts/Commands/FadeToView.cs
index 89e4ffdc..dbe8200f 100644
--- a/Assets/Fungus/Camera/Scripts/Commands/FadeToView.cs
+++ b/Assets/Fungus/Camera/Scripts/Commands/FadeToView.cs
@@ -28,9 +28,25 @@ namespace Fungus
 		[Tooltip("Optional texture to use when rendering the fullscreen fade effect.")]
 		public Texture2D fadeTexture;
 
+		[Tooltip("Camera to use for the fade. Will use main camera if set to none.")]
+		public Camera targetCamera;
+
+		public virtual void Start()
+		{
+			if (targetCamera == null)
+			{
+				targetCamera = Camera.main;
+			}
+			if (targetCamera == null)
+			{
+				targetCamera = GameObject.FindObjectOfType<Camera>();
+			}
+		}
+
 		public override void OnEnter()
 		{
-			if (targetView == null)
+			if (targetCamera == null ||
+			    targetView == null)
 			{
 				Continue();
 				return;
@@ -52,7 +68,7 @@ namespace Fungus
 				cameraController.screenFadeTexture = CameraController.CreateColorTexture(fadeColor, 32, 32);
 			}
 
-			cameraController.FadeToView(targetView, duration, fadeOut, delegate {	
+			cameraController.FadeToView(targetCamera, targetView, duration, fadeOut, delegate {	
 				if (waitUntilFinished)
 				{
 					cameraController.waiting = false;
diff --git a/Assets/Fungus/Camera/Scripts/Commands/MoveToView.cs b/Assets/Fungus/Camera/Scripts/Commands/MoveToView.cs
index ab2d95e5..39818479 100644
--- a/Assets/Fungus/Camera/Scripts/Commands/MoveToView.cs
+++ b/Assets/Fungus/Camera/Scripts/Commands/MoveToView.cs
@@ -19,8 +19,30 @@ namespace Fungus
 		[Tooltip("Wait until the fade has finished before executing next command")]
 		public bool waitUntilFinished = true;
 
+		[Tooltip("Camera to use for the pan. Will use main camera if set to none.")]
+		public Camera targetCamera;
+		
+		public virtual void Start()
+		{
+			if (targetCamera == null)
+			{
+				targetCamera = Camera.main;
+			}
+			if (targetCamera == null)
+			{
+				targetCamera = GameObject.FindObjectOfType<Camera>();
+			}
+		}
+
 		public override void OnEnter()
 		{
+			if (targetCamera == null ||
+			    targetView == null)
+			{
+				Continue();
+				return;
+			}
+
 			CameraController cameraController = CameraController.GetInstance();
 
 			if (waitUntilFinished)
@@ -32,7 +54,7 @@ namespace Fungus
 			Quaternion targetRotation = targetView.transform.rotation;
 			float targetSize = targetView.viewSize;
 
-			cameraController.PanToPosition(targetPosition, targetRotation, targetSize, duration, delegate {
+			cameraController.PanToPosition(targetCamera, targetPosition, targetRotation, targetSize, duration, delegate {
 				if (waitUntilFinished)
 				{
 					cameraController.waiting = false;
diff --git a/Assets/Fungus/Camera/Scripts/Commands/StartSwipe.cs b/Assets/Fungus/Camera/Scripts/Commands/StartSwipe.cs
index 7ef2549c..fefb9b41 100644
--- a/Assets/Fungus/Camera/Scripts/Commands/StartSwipe.cs
+++ b/Assets/Fungus/Camera/Scripts/Commands/StartSwipe.cs
@@ -22,11 +22,34 @@ namespace Fungus
 		[Tooltip("Multiplier factor for speed of swipe pan")]
 		public float speedMultiplier = 1f;
 
+		[Tooltip("Camera to use for the pan. Will use main camera if set to none.")]
+		public Camera targetCamera;
+		
+		public virtual void Start()
+		{
+			if (targetCamera == null)
+			{
+				targetCamera = Camera.main;
+			}
+			if (targetCamera == null)
+			{
+				targetCamera = GameObject.FindObjectOfType<Camera>();
+			}
+		}
+
 		public override void OnEnter()
 		{
+			if (targetCamera == null ||
+			    viewA == null ||
+			    viewB == null)
+			{
+				Continue();
+				return;
+			}
+
 			CameraController cameraController = CameraController.GetInstance();
 
-			cameraController.StartSwipePan(viewA, viewB, duration, speedMultiplier, () => Continue() );
+			cameraController.StartSwipePan(targetCamera, viewA, viewB, duration, speedMultiplier, () => Continue() );
 		}
 
 		public override string GetSummary()

From 67e18293901825a8d7733387f8f8445ad890838c Mon Sep 17 00:00:00 2001
From: chrisgregan <chris@fungusgames.com>
Date: Mon, 21 Dec 2015 17:07:41 +0000
Subject: [PATCH 2/2] Added multi camera test

---
 Assets/Tests/Camera/CameraTests.unity | 576 ++++++++++++++++++++++++--
 ProjectSettings/ProjectSettings.asset |  58 +--
 2 files changed, 559 insertions(+), 75 deletions(-)

diff --git a/Assets/Tests/Camera/CameraTests.unity b/Assets/Tests/Camera/CameraTests.unity
index 06f297f2..4eea487c 100644
--- a/Assets/Tests/Camera/CameraTests.unity
+++ b/Assets/Tests/Camera/CameraTests.unity
@@ -8,25 +8,25 @@ SceneSettings:
   m_PVSPortalsArray: []
   m_OcclusionBakeSettings:
     smallestOccluder: 5
-    smallestHole: .25
+    smallestHole: 0.25
     backfaceThreshold: 100
 --- !u!104 &2
 RenderSettings:
   m_ObjectHideFlags: 0
   serializedVersion: 6
   m_Fog: 0
-  m_FogColor: {r: .5, g: .5, b: .5, a: 1}
+  m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
   m_FogMode: 3
-  m_FogDensity: .00999999978
+  m_FogDensity: 0.01
   m_LinearFogStart: 0
   m_LinearFogEnd: 300
-  m_AmbientSkyColor: {r: .211999997, g: .226999998, b: .259000003, a: 1}
-  m_AmbientEquatorColor: {r: .114, g: .125, b: .133000001, a: 1}
-  m_AmbientGroundColor: {r: .0469999984, g: .0430000015, b: .0350000001, a: 1}
+  m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
+  m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
+  m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
   m_AmbientIntensity: 1
   m_AmbientMode: 3
   m_SkyboxMaterial: {fileID: 0}
-  m_HaloStrength: .5
+  m_HaloStrength: 0.5
   m_FlareStrength: 1
   m_FlareFadeSpeed: 3
   m_HaloTexture: {fileID: 0}
@@ -40,7 +40,7 @@ RenderSettings:
 --- !u!157 &3
 LightmapSettings:
   m_ObjectHideFlags: 0
-  serializedVersion: 5
+  serializedVersion: 6
   m_GIWorkflowMode: 1
   m_LightmapsMode: 1
   m_GISettings:
@@ -66,7 +66,7 @@ LightmapSettings:
     m_FinalGather: 0
     m_FinalGatherRayCount: 1024
     m_ReflectionCompression: 2
-  m_LightmapSnapshot: {fileID: 0}
+  m_LightingDataAsset: {fileID: 0}
   m_RuntimeCPUUsage: 25
 --- !u!196 &4
 NavMeshSettings:
@@ -74,15 +74,15 @@ NavMeshSettings:
   m_ObjectHideFlags: 0
   m_BuildSettings:
     serializedVersion: 2
-    agentRadius: .5
+    agentRadius: 0.5
     agentHeight: 2
     agentSlope: 45
-    agentClimb: .400000006
+    agentClimb: 0.4
     ledgeDropHeight: 0
     maxJumpAcrossDistance: 0
     accuratePlacement: 0
     minRegionArea: 2
-    cellSize: .166666672
+    cellSize: 0.16666667
     manualCellSize: 0
   m_NavMeshData: {fileID: 0}
 --- !u!1 &116319153
@@ -100,7 +100,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 1
+  m_IsActive: 0
 --- !u!114 &116319154
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -137,7 +137,7 @@ Transform:
   - {fileID: 169490923}
   - {fileID: 763909869}
   m_Father: {fileID: 0}
-  m_RootOrder: 2
+  m_RootOrder: 3
 --- !u!1 &169490921
 GameObject:
   m_ObjectHideFlags: 0
@@ -166,7 +166,7 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 95c387d3e32404bcc91c60318d766bb1, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  viewSize: .68452996
+  viewSize: 0.68452996
   primaryAspectRatio: {x: 4, y: 3}
   secondaryAspectRatio: {x: 2, y: 1}
 --- !u!4 &169490923
@@ -176,11 +176,230 @@ Transform:
   m_PrefabInternal: {fileID: 0}
   m_GameObject: {fileID: 169490921}
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
-  m_LocalPosition: {x: 547.064575, y: 362.109894, z: 0}
+  m_LocalPosition: {x: 547.0646, y: 362.1099, z: 0}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children: []
   m_Father: {fileID: 116319155}
   m_RootOrder: 2
+--- !u!1 &297082796
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 142980, guid: 5e7fbc8d4eb714b279eeeef2262c1e1a, type: 2}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 4
+  m_Component:
+  - 4: {fileID: 297082797}
+  - 114: {fileID: 297082802}
+  - 114: {fileID: 297082801}
+  - 114: {fileID: 297082800}
+  - 114: {fileID: 297082799}
+  - 114: {fileID: 297082798}
+  m_Layer: 0
+  m_Name: Flowchart
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &297082797
+Transform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 467082, guid: 5e7fbc8d4eb714b279eeeef2262c1e1a, type: 2}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 297082796}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1658645685}
+  m_RootOrder: 2
+--- !u!114 &297082798
+MonoBehaviour:
+  m_ObjectHideFlags: 2
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 297082796}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 45c952ea1ad444e479b570fa242679c5, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  itemId: 2
+  errorMessage: 
+  indentLevel: 0
+  duration: 1
+  targetView: {fileID: 1636512974}
+  waitUntilFinished: 1
+  targetCamera: {fileID: 344576094}
+--- !u!114 &297082799
+MonoBehaviour:
+  m_ObjectHideFlags: 2
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 297082796}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 45c952ea1ad444e479b570fa242679c5, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  itemId: 1
+  errorMessage: 
+  indentLevel: 0
+  duration: 1
+  targetView: {fileID: 1132242836}
+  waitUntilFinished: 1
+  targetCamera: {fileID: 740080469}
+--- !u!114 &297082800
+MonoBehaviour:
+  m_ObjectHideFlags: 2
+  m_PrefabParentObject: {fileID: 11462346, guid: 5e7fbc8d4eb714b279eeeef2262c1e1a,
+    type: 2}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 297082796}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: d2f6487d21a03404cb21b245f0242e79, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  parentBlock: {fileID: 297082801}
+--- !u!114 &297082801
+MonoBehaviour:
+  m_ObjectHideFlags: 2
+  m_PrefabParentObject: {fileID: 11433304, guid: 5e7fbc8d4eb714b279eeeef2262c1e1a,
+    type: 2}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 297082796}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 3d3d73aef2cfc4f51abf34ac00241f60, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  nodeRect:
+    serializedVersion: 2
+    x: 67
+    y: 70
+    width: 120
+    height: 40
+  itemId: 0
+  blockName: Do Test
+  description: 
+  eventHandler: {fileID: 297082800}
+  commandList:
+  - {fileID: 297082799}
+  - {fileID: 297082798}
+--- !u!114 &297082802
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 11430050, guid: 5e7fbc8d4eb714b279eeeef2262c1e1a,
+    type: 2}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 297082796}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 7a334fe2ffb574b3583ff3b18b4792d3, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  version: 1.0
+  scrollPos: {x: 0, y: 0}
+  variablesScrollPos: {x: 0, y: 0}
+  variablesExpanded: 1
+  blockViewHeight: 400
+  zoom: 1
+  scrollViewRect:
+    serializedVersion: 2
+    x: -343
+    y: -340
+    width: 1114
+    height: 859
+  selectedBlock: {fileID: 297082801}
+  selectedCommands:
+  - {fileID: 297082799}
+  variables: []
+  description: 
+  stepPause: 0
+  colorCommands: 1
+  hideComponents: 1
+  saveSelection: 1
+  localizationId: 
+  hideCommands: []
+--- !u!1 &344576093
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 4
+  m_Component:
+  - 4: {fileID: 344576098}
+  - 20: {fileID: 344576094}
+  - 124: {fileID: 344576097}
+  - 92: {fileID: 344576096}
+  m_Layer: 0
+  m_Name: CameraB
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!20 &344576094
+Camera:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 344576093}
+  m_Enabled: 1
+  serializedVersion: 2
+  m_ClearFlags: 1
+  m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844}
+  m_NormalizedViewPortRect:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 1
+    height: 1
+  near clip plane: 0.3
+  far clip plane: 1000
+  field of view: 60
+  orthographic: 1
+  orthographic size: 5
+  m_Depth: 0
+  m_CullingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+  m_RenderingPath: -1
+  m_TargetTexture: {fileID: 0}
+  m_TargetDisplay: 0
+  m_TargetEye: 3
+  m_HDR: 0
+  m_OcclusionCulling: 1
+  m_StereoConvergence: 10
+  m_StereoSeparation: 0.022
+  m_StereoMirrorMode: 0
+--- !u!92 &344576096
+Behaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 344576093}
+  m_Enabled: 1
+--- !u!124 &344576097
+Behaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 344576093}
+  m_Enabled: 1
+--- !u!4 &344576098
+Transform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 344576093}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1658645685}
+  m_RootOrder: 1
 --- !u!1 &638988957
 GameObject:
   m_ObjectHideFlags: 0
@@ -227,7 +446,7 @@ MonoBehaviour:
   m_SubmitButton: Submit
   m_CancelButton: Cancel
   m_InputActionsPerSecond: 10
-  m_RepeatDelay: .5
+  m_RepeatDelay: 0.5
   m_ForceModuleActive: 0
 --- !u!114 &638988960
 MonoBehaviour:
@@ -254,7 +473,85 @@ Transform:
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children: []
   m_Father: {fileID: 0}
-  m_RootOrder: 1
+  m_RootOrder: 2
+--- !u!1 &740080468
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 4
+  m_Component:
+  - 4: {fileID: 740080473}
+  - 20: {fileID: 740080469}
+  - 124: {fileID: 740080472}
+  - 92: {fileID: 740080471}
+  m_Layer: 0
+  m_Name: CameraA
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!20 &740080469
+Camera:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 740080468}
+  m_Enabled: 1
+  serializedVersion: 2
+  m_ClearFlags: 1
+  m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844}
+  m_NormalizedViewPortRect:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 1
+    height: 1
+  near clip plane: 0.3
+  far clip plane: 1000
+  field of view: 60
+  orthographic: 1
+  orthographic size: 5
+  m_Depth: 0
+  m_CullingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+  m_RenderingPath: -1
+  m_TargetTexture: {fileID: 0}
+  m_TargetDisplay: 0
+  m_TargetEye: 3
+  m_HDR: 0
+  m_OcclusionCulling: 1
+  m_StereoConvergence: 10
+  m_StereoSeparation: 0.022
+  m_StereoMirrorMode: 0
+--- !u!92 &740080471
+Behaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 740080468}
+  m_Enabled: 1
+--- !u!124 &740080472
+Behaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 740080468}
+  m_Enabled: 1
+--- !u!4 &740080473
+Transform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 740080468}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1658645685}
+  m_RootOrder: 0
 --- !u!1 &763909865
 GameObject:
   m_ObjectHideFlags: 0
@@ -389,6 +686,7 @@ MonoBehaviour:
   waitUntilFinished: 1
   fadeColor: {r: 0, g: 0, b: 0, a: 1}
   fadeTexture: {fileID: 0}
+  targetCamera: {fileID: 0}
 --- !u!114 &763909871
 MonoBehaviour:
   m_ObjectHideFlags: 2
@@ -406,6 +704,7 @@ MonoBehaviour:
   duration: 5
   targetView: {fileID: 169490922}
   waitUntilFinished: 0
+  targetCamera: {fileID: 0}
 --- !u!114 &763909872
 MonoBehaviour:
   m_ObjectHideFlags: 2
@@ -489,7 +788,56 @@ Transform:
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children: []
   m_Father: {fileID: 0}
-  m_RootOrder: 3
+  m_RootOrder: 4
+--- !u!1 &858416965
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 4
+  m_Component:
+  - 4: {fileID: 858416966}
+  - 114: {fileID: 858416967}
+  m_Layer: 0
+  m_Name: TestAssertions
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &858416966
+Transform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 858416965}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1658645685}
+  m_RootOrder: 5
+--- !u!114 &858416967
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 858416965}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 8bafa54482a87ac4cbd7ff1bfd1ac93a, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  checkAfterTime: 3
+  repeatCheckTime: 0
+  repeatEveryTime: 1
+  checkAfterFrames: 1
+  repeatCheckFrame: 1
+  repeatEveryFrame: 1
+  hasFailed: 0
+  checkMethods: 1
+  m_ActionBase: {fileID: 910458486}
+  checksPerformed: 0
 --- !u!1 &883282118
 GameObject:
   m_ObjectHideFlags: 0
@@ -525,14 +873,18 @@ SpriteRenderer:
   m_ProbeAnchor: {fileID: 0}
   m_ScaleInLightmap: 1
   m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
   m_ImportantGI: 0
-  m_AutoUVMaxDistance: .5
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
   m_AutoUVMaxAngle: 89
   m_LightmapParameters: {fileID: 0}
   m_SortingLayerID: 0
   m_SortingOrder: 0
   m_Sprite: {fileID: 21300000, guid: 7adcbbe62d6554d81affcab2c56ad5ac, type: 3}
   m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
 --- !u!4 &883282120
 Transform:
   m_ObjectHideFlags: 0
@@ -540,11 +892,73 @@ Transform:
   m_PrefabInternal: {fileID: 0}
   m_GameObject: {fileID: 883282118}
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
-  m_LocalPosition: {x: .479999989, y: 2.01999998, z: 0}
+  m_LocalPosition: {x: 0.48, y: 2.02, z: 0}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children: []
   m_Father: {fileID: 1911312608}
   m_RootOrder: 0
+--- !u!114 &910458486
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 6febd2d5046657040b3da98b7010ee29, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  go: {fileID: 740080468}
+  thisPropertyPath: Transform.position
+  compareToType: 0
+  other: {fileID: 1132242834}
+  otherPropertyPath: Transform.position
+  constantValueGeneric: {x: 0, y: 0, z: 0}
+  compareType: 0
+  floatingPointError: 0.00009999999747378752
+--- !u!1 &1132242834
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 100000, guid: e0d427add844a4d9faf970a3afa07583, type: 2}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 4
+  m_Component:
+  - 4: {fileID: 1132242835}
+  - 114: {fileID: 1132242836}
+  m_Layer: 0
+  m_Name: ViewA
+  m_TagString: Untagged
+  m_Icon: {fileID: 5721338939258241955, guid: 0000000000000000d000000000000000, type: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &1132242835
+Transform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 400000, guid: e0d427add844a4d9faf970a3afa07583, type: 2}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1132242834}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: -5.16, y: 2.25, z: -10}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1658645685}
+  m_RootOrder: 3
+--- !u!114 &1132242836
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 11400000, guid: e0d427add844a4d9faf970a3afa07583,
+    type: 2}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1132242834}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 95c387d3e32404bcc91c60318d766bb1, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  viewSize: 1
+  primaryAspectRatio: {x: 4, y: 3}
+  secondaryAspectRatio: {x: 2, y: 1}
 --- !u!1 &1455563666
 GameObject:
   m_ObjectHideFlags: 0
@@ -594,14 +1008,14 @@ Camera:
   m_Enabled: 1
   serializedVersion: 2
   m_ClearFlags: 1
-  m_BackGroundColor: {r: .192156866, g: .301960796, b: .474509805, a: .0196078438}
+  m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844}
   m_NormalizedViewPortRect:
     serializedVersion: 2
     x: 0
     y: 0
     width: 1
     height: 1
-  near clip plane: .300000012
+  near clip plane: 0.3
   far clip plane: 1000
   field of view: 60
   orthographic: 1
@@ -617,7 +1031,7 @@ Camera:
   m_HDR: 0
   m_OcclusionCulling: 1
   m_StereoConvergence: 10
-  m_StereoSeparation: .0219999999
+  m_StereoSeparation: 0.022
   m_StereoMirrorMode: 0
 --- !u!4 &1455563671
 Transform:
@@ -658,7 +1072,7 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 61dddfdc5e0e44ca298d8f46f7f5a915, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  selectedFlowchart: {fileID: 763909866}
+  selectedFlowchart: {fileID: 297082802}
 --- !u!4 &1537635168
 Transform:
   m_ObjectHideFlags: 1
@@ -670,7 +1084,105 @@ Transform:
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children: []
   m_Father: {fileID: 0}
-  m_RootOrder: 0
+  m_RootOrder: 1
+--- !u!1 &1636512972
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 100000, guid: e0d427add844a4d9faf970a3afa07583, type: 2}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 4
+  m_Component:
+  - 4: {fileID: 1636512973}
+  - 114: {fileID: 1636512974}
+  m_Layer: 0
+  m_Name: ViewB
+  m_TagString: Untagged
+  m_Icon: {fileID: 5721338939258241955, guid: 0000000000000000d000000000000000, type: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &1636512973
+Transform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 400000, guid: e0d427add844a4d9faf970a3afa07583, type: 2}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1636512972}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 3.98, y: 2.35, z: -10}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1658645685}
+  m_RootOrder: 4
+--- !u!114 &1636512974
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 11400000, guid: e0d427add844a4d9faf970a3afa07583,
+    type: 2}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1636512972}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 95c387d3e32404bcc91c60318d766bb1, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  viewSize: 1
+  primaryAspectRatio: {x: 4, y: 3}
+  secondaryAspectRatio: {x: 2, y: 1}
+--- !u!1 &1658645683
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 4
+  m_Component:
+  - 4: {fileID: 1658645685}
+  - 114: {fileID: 1658645684}
+  m_Layer: 0
+  m_Name: MultiCameraTest
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &1658645684
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1658645683}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: b1dba0b27b0864740a8720e920aa88c0, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  timeout: 5
+  ignored: 0
+  succeedAfterAllAssertionsAreExecuted: 1
+  expectException: 0
+  expectedExceptionList: 
+  succeedWhenExceptionIsThrown: 0
+  includedPlatforms: -1
+  platformsToIgnore: []
+  dynamic: 0
+  dynamicTypeName: 
+--- !u!4 &1658645685
+Transform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1658645683}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 740080473}
+  - {fileID: 344576098}
+  - {fileID: 297082797}
+  - {fileID: 1132242835}
+  - {fileID: 1636512973}
+  - {fileID: 858416966}
+  m_Father: {fileID: 0}
+  m_RootOrder: 5
 --- !u!1 &1911312607
 GameObject:
   m_ObjectHideFlags: 0
@@ -694,8 +1206,8 @@ Transform:
   m_PrefabInternal: {fileID: 0}
   m_GameObject: {fileID: 1911312607}
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
-  m_LocalPosition: {x: 547.01001, y: 362.119995, z: 0}
-  m_LocalScale: {x: .155383497, y: .155383497, z: .155383497}
+  m_LocalPosition: {x: 547.01, y: 362.12, z: 0}
+  m_LocalScale: {x: 0.1553835, y: 0.1553835, z: 0.1553835}
   m_Children:
   - {fileID: 883282120}
   m_Father: {fileID: 116319155}
@@ -719,14 +1231,18 @@ SpriteRenderer:
   m_ProbeAnchor: {fileID: 0}
   m_ScaleInLightmap: 1
   m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
   m_ImportantGI: 0
-  m_AutoUVMaxDistance: .5
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
   m_AutoUVMaxAngle: 89
   m_LightmapParameters: {fileID: 0}
   m_SortingLayerID: 0
   m_SortingOrder: 0
   m_Sprite: {fileID: 21300000, guid: 1b656a189e6154422a74e05a56c3f245, type: 3}
   m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
 --- !u!1 &1927666620
 GameObject:
   m_ObjectHideFlags: 0
@@ -765,7 +1281,7 @@ Transform:
   m_PrefabInternal: {fileID: 0}
   m_GameObject: {fileID: 1927666620}
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
-  m_LocalPosition: {x: 547.064575, y: 362.109894, z: 0}
+  m_LocalPosition: {x: 547.0646, y: 362.1099, z: 0}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children: []
   m_Father: {fileID: 116319155}
diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset
index 8dbca4a0..3950311b 100644
--- a/ProjectSettings/ProjectSettings.asset
+++ b/ProjectSettings/ProjectSettings.asset
@@ -3,11 +3,10 @@
 --- !u!129 &1
 PlayerSettings:
   m_ObjectHideFlags: 0
-  serializedVersion: 7
+  serializedVersion: 8
   AndroidProfiler: 0
   defaultScreenOrientation: 2
   targetDevice: 2
-  targetResolution: 0
   useOnDemandResources: 0
   accelerometerFrequency: 60
   companyName: Fungus
@@ -15,6 +14,7 @@ PlayerSettings:
   defaultCursor: {fileID: 0}
   cursorHotspot: {x: 0, y: 0}
   m_ShowUnitySplashScreen: 1
+  m_VirtualRealitySplashScreen: {fileID: 0}
   defaultScreenWidth: 2000
   defaultScreenHeight: 2000
   defaultScreenWidthWeb: 960
@@ -56,15 +56,18 @@ PlayerSettings:
   xboxEnableKinectAutoTracking: 0
   xboxEnableFitness: 0
   visibleInBackground: 0
+  allowFullscreenSwitch: 1
   macFullscreenMode: 2
   d3d9FullscreenMode: 1
   d3d11FullscreenMode: 1
   xboxSpeechDB: 0
   xboxEnableHeadOrientation: 0
   xboxEnableGuest: 0
+  xboxEnablePIXSampling: 0
   n3dsDisableStereoscopicView: 0
   n3dsEnableSharedListOpt: 1
   n3dsEnableVSync: 0
+  uiUse16BitDepthBuffer: 0
   xboxOneResolution: 0
   ps3SplashScreen: {fileID: 0}
   videoMemoryForVertexBuffers: 0
@@ -115,6 +118,7 @@ PlayerSettings:
   iPhoneTargetOSVersion: 22
   uIPrerenderedIcon: 0
   uIRequiresPersistentWiFi: 0
+  uIRequiresFullScreen: 1
   uIStatusBarHidden: 1
   uIExitOnSuspend: 0
   uIStatusBarStyle: 0
@@ -128,6 +132,7 @@ PlayerSettings:
   iPadHighResPortraitSplashScreen: {fileID: 0}
   iPadLandscapeSplashScreen: {fileID: 0}
   iPadHighResLandscapeSplashScreen: {fileID: 0}
+  appleTVSplashScreen: {fileID: 0}
   iOSLaunchScreenType: 0
   iOSLaunchScreenPortrait: {fileID: 0}
   iOSLaunchScreenLandscape: {fileID: 0}
@@ -264,7 +269,12 @@ PlayerSettings:
   playerPrefsSupport: 0
   ps4ReprojectionSupport: 0
   ps4UseAudio3dBackend: 0
+  ps4SocialScreenEnabled: 0
   ps4Audio3dVirtualSpeakerCount: 14
+  ps4attribCpuUsage: 0
+  ps4PatchPkgPath: 
+  ps4PatchLatestPkgPath: 
+  ps4PatchChangeinfoPath: 
   ps4attribUserManagement: 0
   ps4attribMoveSupport: 0
   ps4attrib3DSupport: 0
@@ -321,10 +331,6 @@ PlayerSettings:
   spritePackerPolicy: 
   scriptingDefineSymbols: {}
   metroPackageName: Fungus
-  metroPackageLogo: 
-  metroPackageLogo140: 
-  metroPackageLogo180: 
-  metroPackageLogo240: 
   metroPackageVersion: 
   metroCertificatePath: 
   metroCertificatePassword: 
@@ -332,44 +338,7 @@ PlayerSettings:
   metroCertificateIssuer: 
   metroCertificateNotAfter: 0000000000000000
   metroApplicationDescription: Fungus
-  metroStoreTileLogo80: 
-  metroStoreTileLogo: 
-  metroStoreTileLogo140: 
-  metroStoreTileLogo180: 
-  metroStoreTileWideLogo80: 
-  metroStoreTileWideLogo: 
-  metroStoreTileWideLogo140: 
-  metroStoreTileWideLogo180: 
-  metroStoreTileSmallLogo80: 
-  metroStoreTileSmallLogo: 
-  metroStoreTileSmallLogo140: 
-  metroStoreTileSmallLogo180: 
-  metroStoreSmallTile80: 
-  metroStoreSmallTile: 
-  metroStoreSmallTile140: 
-  metroStoreSmallTile180: 
-  metroStoreLargeTile80: 
-  metroStoreLargeTile: 
-  metroStoreLargeTile140: 
-  metroStoreLargeTile180: 
-  metroStoreSplashScreenImage: 
-  metroStoreSplashScreenImage140: 
-  metroStoreSplashScreenImage180: 
-  metroPhoneAppIcon: 
-  metroPhoneAppIcon140: 
-  metroPhoneAppIcon240: 
-  metroPhoneSmallTile: 
-  metroPhoneSmallTile140: 
-  metroPhoneSmallTile240: 
-  metroPhoneMediumTile: 
-  metroPhoneMediumTile140: 
-  metroPhoneMediumTile240: 
-  metroPhoneWideTile: 
-  metroPhoneWideTile140: 
-  metroPhoneWideTile240: 
-  metroPhoneSplashScreenImage: 
-  metroPhoneSplashScreenImage140: 
-  metroPhoneSplashScreenImage240: 
+  wsaImages: {}
   metroTileShortName: 
   metroCommandLineArgsFile: 
   metroTileShowName: 1
@@ -477,7 +446,6 @@ PlayerSettings:
   WebGL::emscriptenArgs: 
   WebGL::template: APPLICATION:Default
   additionalIl2CppArgs::additionalIl2CppArgs: 
-  firstStreamedSceneWithResources: 0
   cloudProjectId: 
   projectName: 
   organizationId: