From 592334dbaf019ef52597e630b84404ed366b3eba Mon Sep 17 00:00:00 2001 From: Xevion Date: Wed, 25 Nov 2020 02:29:15 -0600 Subject: [PATCH] work on back and forth calculating grid/world positions from mouse --- Paths/Assets/Scripts/GridController.cs | 1 + Paths/Assets/Scripts/Manager.cs | 45 +++++++++++++++++++++++--- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/Paths/Assets/Scripts/GridController.cs b/Paths/Assets/Scripts/GridController.cs index 60558e3..8b7ac18 100644 --- a/Paths/Assets/Scripts/GridController.cs +++ b/Paths/Assets/Scripts/GridController.cs @@ -25,6 +25,7 @@ public class GridController : MonoBehaviour { private static readonly int Values = Shader.PropertyToID("_values"); private static readonly int GridWidth = Shader.PropertyToID("_GridWidth"); private static readonly int GridHeight = Shader.PropertyToID("_GridHeight"); + public Vector2 Size => new Vector2Int(width, height); private void Start() { _values = new int[width * height]; diff --git a/Paths/Assets/Scripts/Manager.cs b/Paths/Assets/Scripts/Manager.cs index c1e3407..4f49426 100644 --- a/Paths/Assets/Scripts/Manager.cs +++ b/Paths/Assets/Scripts/Manager.cs @@ -41,10 +41,47 @@ public class Manager : MonoBehaviour { progressSlider.onValueChanged.AddListener((value) => MoveToSlider(value)); } - // public void OnDrawGizmos() { - // float size = (float) (10.0 / gridController.size); - // Gizmos.DrawWireCube(transform.position, new Vector3(size, size, size)); - // } + /// + /// Update the animation progress to the slider's (new) position. + /// + /// The new position on the slider. + private void MoveToSlider(float @new) { + _runtime = @new * _state.Count; + } + + Vector2 GetGridPosition(Vector3 worldPosition, Vector3 scale) { + Vector2 gridPosition = (worldPosition + (scale / 2f)) / new Vector2(scale.x, scale.y); + gridPosition = new Vector2Int( + (int) (gridPosition.x * gridController.width), + (int) (gridPosition.y * gridController.height)); + return gridPosition; + } + + Vector3 GetWorldPosition(Vector2 gridPosition, Vector3 scale) { + Vector2 bottomLeft = gridObject.transform.position - (scale / 2f); + Vector2 singleSquare = new Vector2(scale.x / gridController.width, scale.y / gridController.height); + Vector2 worldPosition = bottomLeft + (singleSquare * gridPosition) + (singleSquare / 2f); + return worldPosition; + } + + public void OnDrawGizmos() { + Vector3 mouse = mainCamera.ScreenToWorldPoint(Input.mousePosition); + var localScale = gridObject.transform.localScale; + Vector2 gridPosition = GetGridPosition(mouse, localScale); + + var style = new GUIStyle(); + style.normal.textColor = Color.blue; + Gizmos.color = Color.blue; + + var mouseWorldPosition = new Vector3( + (gridPosition.x / gridController.width * 10) - (localScale.x / 2f), + (gridPosition.y / gridController.height * 10) - (localScale.y / 2f), + mouse.z + ); + // Gizmos.DrawCube(GetWorldPosition(gridPosition, localScale), Vector3.one / 5f); + Gizmos.DrawWireCube(GetWorldPosition(gridPosition, localScale), localScale / gridController.Size); + Handles.Label(mouse, $"({gridPosition.x} {gridPosition.y})\n{mouse.x:F} {mouse.y:F}", style); + } /// /// Returns the current time multiplier, based on the latest change in the path.