diff --git a/Pathfinding Visualizer/Assets/Scenes/MainScene.unity b/Pathfinding Visualizer/Assets/Scenes/MainScene.unity index 646f2d2..15c0cb6 100644 --- a/Pathfinding Visualizer/Assets/Scenes/MainScene.unity +++ b/Pathfinding Visualizer/Assets/Scenes/MainScene.unity @@ -123,29 +123,6 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} ---- !u!33 &45376068 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 480666364} - m_Mesh: {fileID: 0} ---- !u!4 &45376070 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 480666364} - serializedVersion: 2 - 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_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &144141393 GameObject: m_ObjectHideFlags: 0 @@ -175,6 +152,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 240ade3f16cf736479449e5fca9a29e1, type: 3} m_Name: m_EditorClassIdentifier: + cellMesh: {fileID: 1473159509} --- !u!4 &144141395 Transform: m_ObjectHideFlags: 0 @@ -184,85 +162,12 @@ Transform: m_GameObject: {fileID: 144141393} serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 6.1189265, y: 0.17161107, z: -7.555224} + m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &480666364 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 45376070} - - component: {fileID: 45376068} - - component: {fileID: 480666365} - - component: {fileID: 480666366} - m_Layer: 0 - m_Name: MeshTesting - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!23 &480666365 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 480666364} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 6ab99349792397f45a20efcb8c623941, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &480666366 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 480666364} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 2f03132b374e88b42a1e696cdfdf2a5c, type: 3} - m_Name: - m_EditorClassIdentifier: --- !u!1 &519420028 GameObject: m_ObjectHideFlags: 0 @@ -355,10 +260,106 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1473159508 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1473159510} + - component: {fileID: 1473159509} + - component: {fileID: 1473159511} + - component: {fileID: 1473159512} + m_Layer: 0 + m_Name: CellMesh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1473159509 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1473159508} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2f03132b374e88b42a1e696cdfdf2a5c, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &1473159510 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1473159508} + serializedVersion: 2 + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1473159511 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1473159508} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 6ab99349792397f45a20efcb8c623941, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1473159512 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1473159508} + m_Mesh: {fileID: 0} --- !u!1660057539 &9223372036854775807 SceneRoots: m_ObjectHideFlags: 0 m_Roots: - - {fileID: 45376070} - {fileID: 144141395} - {fileID: 519420032} + - {fileID: 1473159510} diff --git a/Pathfinding Visualizer/Assets/Scripts/CellMesh.cs b/Pathfinding Visualizer/Assets/Scripts/CellMesh.cs new file mode 100644 index 0000000..4e3840e --- /dev/null +++ b/Pathfinding Visualizer/Assets/Scripts/CellMesh.cs @@ -0,0 +1,176 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class CellMesh : MonoBehaviour +{ + + Material m_Material; + + private LogicGrid grid; + private Mesh mesh; + + private void Awake() + { + mesh = new Mesh(); + GetComponent().mesh = mesh; + } + + public void SetGrid(LogicGrid grid) + { + this.grid = grid; + UpdateCellVisual(); + } + + private void UpdateCellVisual() + { + CreateEmptyMeshArrays(grid.GetWidth() * grid.GetHeight(), out Vector3[] vertices, out Vector2[] uv, out int[] triangles); + + for(int x = 0; x < grid.GetWidth(); x++) + for(int y = 0; y < grid.GetHeight(); y++) + { + int index = x * grid.GetHeight() + y; + + Vector3 quadSize = new Vector3(1, 1) * grid.GetCellSize(); + + AddQuad(vertices, uv, triangles, index, grid.GetWorldPosition(x, y), quadSize, Vector2.zero); + } + + mesh.vertices = vertices; + mesh.uv = uv; + mesh.triangles = triangles; + } + + void Start() + { + /** + m_Material = GetComponent().material; + + Debug.Log("Mesh Testing"); + + Mesh mesh = new Mesh(); + + + // Build required data-structures for square mesh + Vector3[] vertices = new Vector3[4]; + Vector2[] uv = new Vector2[4]; + int[] triangles = new int[6]; + + // Set vertices of polygon (2 triangles -> 1 quad) + vertices[0] = new Vector3(0, 0); + vertices[1] = new Vector3(0, 10); + vertices[2] = new Vector3(10, 10); + vertices[3] = new Vector3(10, 0); + + // UV index contains texture position that should match to vertex with same index + uv[0] = new Vector2(0, 0); + uv[1] = new Vector2(0, 1); + uv[2] = new Vector2(1, 1); + uv[3] = new Vector2(1, 0); + + + // Set order of indexes of vertices to draw polygon (v1 -> v2 -> v3 -> v1) + // Note: always set clockwise, otherwise mesh will be facing backwards + triangles[0] = 0; + triangles[1] = 1; + triangles[2] = 2; + + triangles[3] = 0; + triangles[4] = 2; + triangles[5] = 3; + + mesh.vertices = vertices; + mesh.uv = uv; + mesh.triangles = triangles; + + GetComponent().mesh = mesh; + */ + } + + + + private void Update() + { + if(Input.GetKeyDown("1")) + { + Debug.Log("1"); + m_Material.color = Color.white; + //m_Material.SetColor("_Color", Color.white); + } + + if (Input.GetKeyDown("2")) + { + Debug.Log("2"); + m_Material.color = Color.black; + //m_Material.SetColor("_Color", Color.white); + } + + if (Input.GetKeyDown("3")) + { + Debug.Log("3"); + m_Material.color = Color.green; + //m_Material.SetColor("_Color", Color.white); + } + } + + + // CREDIT FOR BELOW FUNCTIONS: CODEMONKEY + // https://www.youtube.com/watch?v=mZzZXfySeFQ + public static void CreateEmptyMeshArrays(int quadCount, out Vector3[] vertices, out Vector2[] uvs, out int[] triangles) + { + vertices = new Vector3[4 * quadCount]; + uvs = new Vector2[4 * quadCount]; + triangles = new int[6 * quadCount]; + } + + + private void AddQuad(Vector3[] vertices, Vector2[] uvs, int[] triangles, int index, Vector3 GridPos, Vector3 QuadSize, Vector2 Uv) + { + vertices[index * 4] = new Vector3((-0.5f + GridPos.x) * QuadSize.x, (-0.5f + GridPos.y) * QuadSize.y); + vertices[(index * 4) + 1] = new Vector3((-0.5f + GridPos.x) * QuadSize.x, (+0.5f + GridPos.y) * QuadSize.y); + vertices[(index * 4) + 2] = new Vector3((+0.5f + GridPos.x) * QuadSize.x, (+0.5f + GridPos.y) * QuadSize.y); + vertices[(index * 4) + 3] = new Vector3((+0.5f + GridPos.x) * QuadSize.x, (-0.5f + GridPos.y) * QuadSize.y); + + Debug.Log(vertices[0]); + Debug.Log(vertices[1]); + Debug.Log(vertices[2]); + Debug.Log(vertices[3]); + + uvs[(index * 4)] = Uv; + uvs[(index * 4) + 1] = Uv; + uvs[(index * 4) + 2] = Uv; + uvs[(index * 4) + 3] = Uv; + + triangles[(index * 6) + 0] = (index * 4) + 0; + triangles[(index * 6) + 1] = (index * 4) + 1; + triangles[(index * 6) + 2] = (index * 4) + 2; + triangles[(index * 6) + 3] = (index * 4) + 2; + triangles[(index * 6) + 4] = (index * 4) + 3; + triangles[(index * 6) + 5] = (index * 4) + 0; + } + + /* private void AddQuad(Vector3[] vertices, Vector2[] uvs, int[] triangles, int index, Vector3 GridPos, Vector3 QuadSize, Vector2 Uv) + { + vertices[index * 4] = new Vector3((-0.5f + GridPos.x) * QuadSize.x, (-0.5f + GridPos.y) * QuadSize.y); + vertices[(index * 4) + 1] = new Vector3((-0.5f + GridPos.x) * QuadSize.x, (+0.5f + GridPos.y) * QuadSize.y); + vertices[(index * 4) + 2] = new Vector3((+0.5f + GridPos.x) * QuadSize.x, (+0.5f + GridPos.y) * QuadSize.y); + vertices[(index * 4) + 3] = new Vector3((+0.5f + GridPos.x) * QuadSize.x, (-0.5f + GridPos.y) * QuadSize.y); + + Debug.Log(vertices[0]); + Debug.Log(vertices[1]); + Debug.Log(vertices[2]); + Debug.Log(vertices[3]); + + uvs[(index * 4)] = Uv; + uvs[(index * 4) + 1] = Uv; + uvs[(index * 4) + 2] = Uv; + uvs[(index * 4) + 3] = Uv; + + triangles[(index * 6) + 0] = (index * 4) + 0; + triangles[(index * 6) + 1] = (index * 4) + 1; + triangles[(index * 6) + 2] = (index * 4) + 2; + triangles[(index * 6) + 3] = (index * 4) + 2; + triangles[(index * 6) + 4] = (index * 4) + 3; + triangles[(index * 6) + 5] = (index * 4) + 0; + }*/ +} diff --git a/Pathfinding Visualizer/Assets/Scripts/MeshTesting.cs.meta b/Pathfinding Visualizer/Assets/Scripts/CellMesh.cs.meta similarity index 100% rename from Pathfinding Visualizer/Assets/Scripts/MeshTesting.cs.meta rename to Pathfinding Visualizer/Assets/Scripts/CellMesh.cs.meta diff --git a/Pathfinding Visualizer/Assets/Scripts/LogicGrid.cs b/Pathfinding Visualizer/Assets/Scripts/LogicGrid.cs index e9dc790..873822a 100644 --- a/Pathfinding Visualizer/Assets/Scripts/LogicGrid.cs +++ b/Pathfinding Visualizer/Assets/Scripts/LogicGrid.cs @@ -53,9 +53,9 @@ public class LogicGrid // Enables us to convert the array's (x,y) pair into the user's world-space (also used to scale grid in constructor) - private Vector3 GetWorldPosition(int x, int y) + public Vector3 GetWorldPosition(int x, int y) { - return new Vector3(x, y) * this.cellSize + originPosition; + return new Vector3(x, y) * this.cellSize + this.originPosition; } private void getXY(Vector3 worldPosition, out int x, out int y) @@ -104,4 +104,18 @@ public class LogicGrid return GetValue(x, y); } + public int GetHeight() + { + return this.height; + } + + public int GetWidth() + { + return this.width; + } + + public float GetCellSize() + { + return this.cellSize; + } } diff --git a/Pathfinding Visualizer/Assets/Scripts/Main.cs b/Pathfinding Visualizer/Assets/Scripts/Main.cs index 44e2212..30f2671 100644 --- a/Pathfinding Visualizer/Assets/Scripts/Main.cs +++ b/Pathfinding Visualizer/Assets/Scripts/Main.cs @@ -5,10 +5,13 @@ using UnityEngine; public class Main : MonoBehaviour { + [SerializeField] private CellMesh cellMesh; + private LogicGrid world; char placementMode; int placementValue; + // Start is called before the first frame update void Start() { @@ -18,6 +21,9 @@ public class Main : MonoBehaviour // Set default placement to Obstacle placementValue = -1; placementMode = 'o'; + + cellMesh.SetGrid(world); + Debug.Log("Loaded. Placing Mode: Obstacle"); } diff --git a/Pathfinding Visualizer/Assets/Scripts/MeshTesting.cs b/Pathfinding Visualizer/Assets/Scripts/MeshTesting.cs deleted file mode 100644 index 5baba56..0000000 --- a/Pathfinding Visualizer/Assets/Scripts/MeshTesting.cs +++ /dev/null @@ -1,80 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class MeshTesting : MonoBehaviour -{ - - Material m_Material; - - void Start() - { - m_Material = GetComponent().material; - - Debug.Log("Mesh Testing"); - - Mesh mesh = new Mesh(); - - - // Build required data-structures for triangle mesh - Vector3[] vertices = new Vector3[4]; - Vector2[] uv = new Vector2[4]; - int[] triangles = new int[6]; - - // Set vertices of polygon (2 triangles -> 1 quad) - vertices[0] = new Vector3( 0, 0); - vertices[1] = new Vector3( 0, 10); - vertices[2] = new Vector3(10, 10); - vertices[3] = new Vector3(10, 0); - - - - // UV index contains texture position that should match to vertex with same index - uv[0] = new Vector2(0, 0); - uv[1] = new Vector2(0, 1); - uv[2] = new Vector2(1, 1); - uv[3] = new Vector2(1, 0); - - - // Set order of indexes of vertices to draw polygon (v1 -> v2 -> v3 -> v1) - // Note: always set clockwise, otherwise mesh will be facing backwards - triangles[0] = 0; - triangles[1] = 1; - triangles[2] = 2; - - triangles[3] = 0; - triangles[4] = 2; - triangles[5] = 3; - - mesh.vertices = vertices; - mesh.uv = uv; - mesh.triangles = triangles; - - GetComponent().mesh = mesh; - - } - - private void Update() - { - if(Input.GetKeyDown("1")) - { - Debug.Log("1"); - m_Material.color = Color.white; - //m_Material.SetColor("_Color", Color.white); - } - - if (Input.GetKeyDown("2")) - { - Debug.Log("2"); - m_Material.color = Color.black; - //m_Material.SetColor("_Color", Color.white); - } - - if (Input.GetKeyDown("3")) - { - Debug.Log("3"); - m_Material.color = Color.green; - //m_Material.SetColor("_Color", Color.white); - } - } -}