From d6f6631de876f38b991079db1055f21319998853 Mon Sep 17 00:00:00 2001 From: Gabriel Ksawery Skowron-Rodriguez Date: Mon, 16 May 2022 15:22:02 +0200 Subject: [PATCH] clicking on tile wip + Added PlayerClickSystem ++ raycasts and tries to hit the grid +TilemapManager ++ some access level changes to get stuff out of it ++ GetTIleFromWorldCoords() +++ to get the tile that was clicked --- TO DO: FIGURE OUT HOW TO MAKE IT POSISBLE TO CLICK ON A TILE WITH NO SOLDIER --- The project/Assets/Scenes/SpartaqS.unity | 369 +++++++++++++++--- The project/Assets/Scripts/Player.meta | 8 + .../Scripts/Player/PlayerClickSystem.cs | 44 +++ .../Scripts/Player/PlayerClickSystem.cs.meta | 11 + The project/Assets/Scripts/TilemapManager.cs | 20 +- 5 files changed, 393 insertions(+), 59 deletions(-) create mode 100644 The project/Assets/Scripts/Player.meta create mode 100644 The project/Assets/Scripts/Player/PlayerClickSystem.cs create mode 100644 The project/Assets/Scripts/Player/PlayerClickSystem.cs.meta diff --git a/The project/Assets/Scenes/SpartaqS.unity b/The project/Assets/Scenes/SpartaqS.unity index 465027f0..28cffb63 100644 --- a/The project/Assets/Scenes/SpartaqS.unity +++ b/The project/Assets/Scenes/SpartaqS.unity @@ -238,6 +238,101 @@ MonoBehaviour: m_ShadowLayerMask: 1 m_LightCookieSize: {x: 1, y: 1} m_LightCookieOffset: {x: 0, y: 0} +--- !u!1 &274649401 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 274649403} + - component: {fileID: 274649402} + m_Layer: 0 + m_Name: Grid + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!156049354 &274649402 +Grid: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 274649401} + m_Enabled: 1 + m_CellSize: {x: 1, y: 1, z: 0} + m_CellGap: {x: 0, y: 0, z: 0} + m_CellLayout: 0 + m_CellSwizzle: 1 +--- !u!4 &274649403 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 274649401} + 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: + - {fileID: 2046204563} + m_Father: {fileID: 0} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &406016162 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 406016164} + - component: {fileID: 406016163} + m_Layer: 0 + m_Name: Managers + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &406016163 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 406016162} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2c5c3a8b933d60d48a4d66bd1e0d3489, type: 3} + m_Name: + m_EditorClassIdentifier: + mapSize: {x: 10, y: 5} + soldierStartingPosition: {x: 0, y: 0} + enemyStartingPosition: {x: 1, y: 0} + tilemap: {fileID: 2046204565} + soldierPrefab: {fileID: 7329575924073430320, guid: 0cea408c577cfdf4fa0c7295d22ba421, + type: 3} +--- !u!4 &406016164 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 406016162} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.9636345, y: 6.377094, z: 3.499856} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &574213518 GameObject: m_ObjectHideFlags: 0 @@ -322,7 +417,7 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &619856669 +--- !u!1 &816363136 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -330,85 +425,41 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 619856671} - - component: {fileID: 619856670} + - component: {fileID: 816363138} + - component: {fileID: 816363137} m_Layer: 0 - m_Name: DebugSoldier1 + m_Name: Player m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &619856670 +--- !u!114 &816363137 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 619856669} + m_GameObject: {fileID: 816363136} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d34caf35d0ce610f8bc87cf815ba1915, type: 3} + m_Script: {fileID: 11500000, guid: 6be2da178228f6e4790d99beae504bba, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!4 &619856671 +--- !u!4 &816363138 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 619856669} + m_GameObject: {fileID: 816363136} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: 0} + m_LocalPosition: {x: 2.9636345, y: 6.377094, z: 3.499856} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &728282086 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 728282088} - - component: {fileID: 728282087} - m_Layer: 0 - m_Name: DebugSoldier2 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &728282087 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 728282086} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d34caf35d0ce610f8bc87cf815ba1915, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &728282088 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 728282086} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 5 + m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &1051848805 PrefabInstance: @@ -477,6 +528,11 @@ PrefabInstance: propertyPath: m_Name value: TickSystem objectReference: {fileID: 0} + - target: {fileID: 8737336274644796263, guid: 519502c6f18d5e44eb800aefd848a6e6, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 519502c6f18d5e44eb800aefd848a6e6, type: 3} --- !u!1 &1440849007 @@ -523,6 +579,203 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: eeef7310a48872043b4089979ec88b42, type: 3} m_Name: m_EditorClassIdentifier: - soldiers: - - {fileID: 619856670} - - {fileID: 728282087} + soldiers: [] +--- !u!1 &1834673983 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1834673984} + m_Layer: 0 + m_Name: ------- Other + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1834673984 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1834673983} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.9636345, y: 6.377094, z: 3.499856} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2046204562 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2046204563} + - component: {fileID: 2046204565} + - component: {fileID: 2046204564} + - component: {fileID: 2046204566} + m_Layer: 0 + m_Name: Soldier Map + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2046204563 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2046204562} + 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: 274649403} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!483693784 &2046204564 +TilemapRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2046204562} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + 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: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_ChunkSize: {x: 32, y: 32, z: 32} + m_ChunkCullingBounds: {x: 0, y: 0, z: 0} + m_MaxChunkCount: 16 + m_MaxFrameAge: 16 + m_SortOrder: 0 + m_Mode: 0 + m_DetectChunkCullingBounds: 0 + m_MaskInteraction: 0 +--- !u!1839735485 &2046204565 +Tilemap: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2046204562} + m_Enabled: 1 + m_Tiles: {} + m_AnimatedTiles: {} + m_TileAssetArray: [] + m_TileSpriteArray: [] + m_TileMatrixArray: [] + m_TileColorArray: [] + m_TileObjectToInstantiateArray: [] + m_AnimationFrameRate: 1 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Origin: {x: 0, y: 0, z: 0} + m_Size: {x: 0, y: 0, z: 1} + m_TileAnchor: {x: 0.5, y: 0.5, z: 0} + m_TileOrientation: 0 + m_TileOrientationMatrix: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 +--- !u!19719996 &2046204566 +TilemapCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2046204562} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0} + m_MaximumTileChangeCount: 1000 + m_ExtrusionFactor: 0.00001 +--- !u!1 &2114096516 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2114096517} + m_Layer: 0 + m_Name: ------- Managers + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2114096517 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2114096516} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.9636345, y: 6.377094, z: 3.499856} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/The project/Assets/Scripts/Player.meta b/The project/Assets/Scripts/Player.meta new file mode 100644 index 00000000..4a7d959e --- /dev/null +++ b/The project/Assets/Scripts/Player.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1fef36cf98a08cd4393bcb0efb0b00ba +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/The project/Assets/Scripts/Player/PlayerClickSystem.cs b/The project/Assets/Scripts/Player/PlayerClickSystem.cs new file mode 100644 index 00000000..95012922 --- /dev/null +++ b/The project/Assets/Scripts/Player/PlayerClickSystem.cs @@ -0,0 +1,44 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class PlayerClickSystem : MonoBehaviour +{ + TilemapManager tilemapManager; + private void Awake() + { + tilemapManager = FindObjectOfType(); + if(tilemapManager == null) + { + Debug.LogError("Tilemap Manager not found"); + } + } + // Update is called once per frame + void Update() + { + if(Input.GetMouseButton(0)) + { + Camera camera = Camera.main; + RaycastHit hit; + Ray ray = camera.ScreenPointToRay(Input.mousePosition); + + if (Physics.Raycast(ray, out hit)) + { + Transform objectHit = hit.transform; + + TilemapManager.Tile selectedTile; + int x, y; + TilemapManager.TileState tileState = tilemapManager.GetTileFromWorldCoords(objectHit.position, out selectedTile, out x, out y); + + if(tileState == TilemapManager.TileState.outOfBounds) + { + Debug.Log($"No tile was hit (hit \"coords\" {x},{y})"); + return; // for now do nothing if a tile was not selected + } + // a tile was hit + Debug.Log($"Tile {x},{y} was selected - DO MOVEMENT ORDER"); + + } + } + } +} diff --git a/The project/Assets/Scripts/Player/PlayerClickSystem.cs.meta b/The project/Assets/Scripts/Player/PlayerClickSystem.cs.meta new file mode 100644 index 00000000..3e6f382a --- /dev/null +++ b/The project/Assets/Scripts/Player/PlayerClickSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6be2da178228f6e4790d99beae504bba +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/The project/Assets/Scripts/TilemapManager.cs b/The project/Assets/Scripts/TilemapManager.cs index fe6c55c0..b2826b6d 100644 --- a/The project/Assets/Scripts/TilemapManager.cs +++ b/The project/Assets/Scripts/TilemapManager.cs @@ -5,7 +5,7 @@ using UnityEngine.Tilemaps; public class TilemapManager : MonoBehaviour { - private enum TileState + public enum TileState { free, taken, @@ -136,4 +136,22 @@ public class TilemapManager : MonoBehaviour return TileState.taken; } + + public TileState GetTileFromWorldCoords(Vector3 worldCoords, out Tile selectedTile, out int x, out int y) + { + Vector3Int tilemapCoords = tilemap.WorldToCell(worldCoords); + TileState tileState = GetTileState(tilemapCoords.x, tilemapCoords.y); + x = tilemapCoords.x; + y = tilemapCoords.y; + + if (tileState == TileState.outOfBounds) + { + selectedTile = new Tile(); + return TileState.outOfBounds; + } + // valid tile selected + selectedTile = tiles[tilemapCoords.x, tilemapCoords.y]; + return tileState; + + } }