From 4ac45a1d9d849d54f76e3a9ffbc7c9962755a2d3 Mon Sep 17 00:00:00 2001 From: Janis Date: Tue, 31 May 2022 18:15:35 +0200 Subject: [PATCH] conveyor placement rework --- .../Scripts/GridSystem/GridBuildingSystem.cs | 13 ++++- Assets/Scripts/GridSystem/VectorDrawing.cs | 58 +++++++++++++++++++ .../Scripts/GridSystem/VectorDrawing.cs.meta | 11 ++++ Assets/Scripts/Pathfinding/Pathfinding.cs | 10 +++- 4 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 Assets/Scripts/GridSystem/VectorDrawing.cs create mode 100644 Assets/Scripts/GridSystem/VectorDrawing.cs.meta diff --git a/Assets/Scripts/GridSystem/GridBuildingSystem.cs b/Assets/Scripts/GridSystem/GridBuildingSystem.cs index 914d979..aeaf4a8 100644 --- a/Assets/Scripts/GridSystem/GridBuildingSystem.cs +++ b/Assets/Scripts/GridSystem/GridBuildingSystem.cs @@ -199,13 +199,24 @@ public class GridBuildingSystem : MonoBehaviour ClearConveyorPath(); + List pathPoints = VectorDrawing.FindVectorPath(conveyorStartPosition, endPosition); + Debug.Log(pathPoints.Count); + foreach (Vector2Int position in pathPoints) + { + Debug.Log("TEST"); + Debug.Log(position); + GameObject conveyorBlueprint = Instantiate(selectedPlacedObjectTypeSO.prefab.gameObject, new Vector3(position.x, position.y), Quaternion.identity); + placingConveyorBlueprints.Add(conveyorBlueprint); + } + + /* foreach (Vector3 position in Pathfinding.instance.FindPath(conveyorStartPosition, endPosition, true)) { buildingGrid.GetXY(position, out x, out y); GameObject conveyorBlueprint = Instantiate(selectedPlacedObjectTypeSO.prefab.gameObject, new Vector3(x, y), Quaternion.identity); placingConveyorBlueprints.Add(conveyorBlueprint); - } + }*/ } } diff --git a/Assets/Scripts/GridSystem/VectorDrawing.cs b/Assets/Scripts/GridSystem/VectorDrawing.cs new file mode 100644 index 0000000..a662b12 --- /dev/null +++ b/Assets/Scripts/GridSystem/VectorDrawing.cs @@ -0,0 +1,58 @@ +using System.Collections.Generic; +using UnityEngine; + +public class VectorDrawing : MonoBehaviour +{ + public static float DiagonalDistance(Vector3 startWorldPosition, Vector3 endWorldPosition) + { + float dx = endWorldPosition.x - startWorldPosition.x; + float dy = endWorldPosition.y - startWorldPosition.y; + + return Mathf.Sqrt(dx * dx + dy * dy); + } + + public static List FindVectorPath(Vector3 startWorldPosition, Vector3 endWorldPosition) + { + List points = new List(); + Grid grid = Pathfinding.instance.GetGrid(); + float N = DiagonalDistance(startWorldPosition, endWorldPosition); + + grid.GetXY(startWorldPosition, out int startX, out int startY); + grid.GetXY(endWorldPosition, out int endX, out int endY); + + points.Add(new Vector2Int(startX, startY)); + + for (int i = 0; i < N + 1; i++) // N+1 for endWorldPosition + { + int x; + int y; + + if (i < N) + { + float t = (float)i / N; + Vector3 point = Vector3.Lerp(startWorldPosition, endWorldPosition, t); + + grid.GetXY(point, out x, out y); + } + else // is endWorldPosition + { + x = endX; + y = endY; + } + + + + // Sample points -> no diagonal connection + if (i != 0) + { + if (x != points[points.Count - 1].x && y != points[points.Count - 1].y) + { + points.Add(new Vector2Int(x, points[points.Count - 1].y)); + } + } + points.Add(new Vector2Int(x, y)); + } + + return points; + } +} diff --git a/Assets/Scripts/GridSystem/VectorDrawing.cs.meta b/Assets/Scripts/GridSystem/VectorDrawing.cs.meta new file mode 100644 index 0000000..4249c6d --- /dev/null +++ b/Assets/Scripts/GridSystem/VectorDrawing.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 474b4c8675764eb4bba214bf41695edd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Pathfinding/Pathfinding.cs b/Assets/Scripts/Pathfinding/Pathfinding.cs index 0c07a44..7515d26 100644 --- a/Assets/Scripts/Pathfinding/Pathfinding.cs +++ b/Assets/Scripts/Pathfinding/Pathfinding.cs @@ -126,7 +126,7 @@ public class Pathfinding return null; } - private List GetNeighbourList(PathNode currentNode) + public List GetNeighbourList(PathNode currentNode) { List neighbourList = new List(); @@ -175,6 +175,14 @@ public class Pathfinding return path; } + public int CalculateDistance(PathNode a, PathNode b) + { + int xDistance = Mathf.Abs(a.x - b.x); + int yDistance = Mathf.Abs(a.y - b.y); + int remaining = Mathf.Abs(xDistance - yDistance); + return Mathf.Min(xDistance, yDistance) + remaining; + } + private int CalculateDistanceCost(PathNode a, PathNode b) { int xDistance = Mathf.Abs(a.x - b.x);