work on back and forth calculating grid/world positions from mouse

This commit is contained in:
Xevion
2020-11-25 02:29:15 -06:00
parent 67dd0f0771
commit 592334dbaf
2 changed files with 42 additions and 4 deletions

View File

@@ -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];

View File

@@ -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));
// }
/// <summary>
/// Update the animation progress to the slider's (new) position.
/// </summary>
/// <param name="new">The new position on the slider.</param>
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);
}
/// <summary>
/// Returns the current time multiplier, based on the latest change in the path.