From 6097819465158a188db66ab55daed83fa9f47b85 Mon Sep 17 00:00:00 2001 From: "j.mei7" Date: Tue, 8 Mar 2022 20:02:28 +0100 Subject: [PATCH] placing ways --- Assets/Objects/way_normal.asset | 18 +++++ Assets/Objects/way_normal.asset.meta | 8 +++ Assets/Scenes/GridScene.unity | 2 +- Assets/Scripts/Grid/GridBuildingSystem.cs | 27 +++++-- Assets/Scripts/Grid/PlacedObjectTypeSO.cs | 86 +++++++++++++++++++++-- 5 files changed, 128 insertions(+), 13 deletions(-) create mode 100644 Assets/Objects/way_normal.asset create mode 100644 Assets/Objects/way_normal.asset.meta diff --git a/Assets/Objects/way_normal.asset b/Assets/Objects/way_normal.asset new file mode 100644 index 0000000..e03c06c --- /dev/null +++ b/Assets/Objects/way_normal.asset @@ -0,0 +1,18 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ed4c766e9f0dd454da548c672fa99b65, type: 3} + m_Name: way_normal + m_EditorClassIdentifier: + nameString: Way + prefab: {fileID: 3420327930372171566, guid: 1b0d9211d89253549b71b121b268c59b, type: 3} + width: 1 + height: 1 diff --git a/Assets/Objects/way_normal.asset.meta b/Assets/Objects/way_normal.asset.meta new file mode 100644 index 0000000..82e17c6 --- /dev/null +++ b/Assets/Objects/way_normal.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b08e32832db84ca489b3dd705df7eff7 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/GridScene.unity b/Assets/Scenes/GridScene.unity index ab1844e..9a31356 100644 --- a/Assets/Scenes/GridScene.unity +++ b/Assets/Scenes/GridScene.unity @@ -223,7 +223,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: a9e8b2a885476754e9652c90137f91bc, type: 3} m_Name: m_EditorClassIdentifier: - testTransform: {fileID: 3420327930372171566, guid: 1b0d9211d89253549b71b121b268c59b, type: 3} + placedObjectTypeSO: {fileID: 11400000, guid: b08e32832db84ca489b3dd705df7eff7, type: 2} --- !u!4 &1522634446 Transform: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/Grid/GridBuildingSystem.cs b/Assets/Scripts/Grid/GridBuildingSystem.cs index 00e515e..1818672 100644 --- a/Assets/Scripts/Grid/GridBuildingSystem.cs +++ b/Assets/Scripts/Grid/GridBuildingSystem.cs @@ -4,7 +4,7 @@ using UnityEngine; public class GridBuildingSystem : MonoBehaviour { - [SerializeField] Transform testTransform; + [SerializeField] PlacedObjectTypeSO placedObjectTypeSO; Grid grid; void Awake() @@ -42,11 +42,28 @@ public class GridBuildingSystem : MonoBehaviour Vector3 mousePosition = new Vector3(Camera.main.ScreenToWorldPoint(Input.mousePosition).x, Camera.main.ScreenToWorldPoint(Input.mousePosition).y); grid.GetXY(mousePosition, out int x, out int y); - GridObject gridObject = grid.GetGridObject(x, y); - if (gridObject.CanBuild()) + List gridPositionList = placedObjectTypeSO.GetGridPositionList(new Vector2Int(x, y), PlacedObjectTypeSO.Dir.Down); + + bool canBuild = true; + foreach (Vector2Int gridPosition in gridPositionList) { - Transform builtTransform = Instantiate(testTransform, grid.GetWorldPosition(x, y), Quaternion.identity); - gridObject.SetTransform(builtTransform); + if(!grid.GetGridObject(gridPosition.x, gridPosition.y).CanBuild()) + { + // Cannot build here + canBuild = false; + break; + } + } + + if (canBuild) + { + Transform builtTransform = Instantiate(placedObjectTypeSO.prefab, grid.GetWorldPosition(x, y), Quaternion.identity); + + foreach(Vector2Int gridPosition in gridPositionList) + { + grid.GetGridObject(gridPosition.x, gridPosition.y).SetTransform(builtTransform); + } + } else { diff --git a/Assets/Scripts/Grid/PlacedObjectTypeSO.cs b/Assets/Scripts/Grid/PlacedObjectTypeSO.cs index 821bee6..aee8ff7 100644 --- a/Assets/Scripts/Grid/PlacedObjectTypeSO.cs +++ b/Assets/Scripts/Grid/PlacedObjectTypeSO.cs @@ -2,17 +2,89 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; -public class PlacedObjectTypeSO : MonoBehaviour +[CreateAssetMenu()] +public class PlacedObjectTypeSO : ScriptableObject { - // Start is called before the first frame update - void Start() + + public static Dir GetNextDir(Dir dir) { - + switch (dir) + { + default: + case Dir.Down: return Dir.Left; + case Dir.Left: return Dir.Up; + case Dir.Up: return Dir.Right; + case Dir.Right: return Dir.Down; + } } - // Update is called once per frame - void Update() + public enum Dir { - + Down, + Left, + Up, + Right, } + + public string nameString; + public Transform prefab; + //public Transform visual; + public int width; + public int height; + + + public int GetRotationAngle(Dir dir) + { + switch (dir) + { + default: + case Dir.Down: return 0; + case Dir.Left: return 90; + case Dir.Up: return 180; + case Dir.Right: return 270; + } + } + + public Vector2Int GetRotationOffset(Dir dir) + { + switch (dir) + { + default: + case Dir.Down: return new Vector2Int(0, 0); + case Dir.Left: return new Vector2Int(0, width); + case Dir.Up: return new Vector2Int(width, height); + case Dir.Right: return new Vector2Int(height, 0); + } + } + + public List GetGridPositionList(Vector2Int offset, Dir dir) + { + List gridPositionList = new List(); + switch (dir) + { + default: + case Dir.Down: + case Dir.Up: + for (int x = 0; x < width; x++) + { + for (int y = 0; y < height; y++) + { + gridPositionList.Add(offset + new Vector2Int(x, y)); + } + } + break; + case Dir.Left: + case Dir.Right: + for (int x = 0; x < height; x++) + { + for (int y = 0; y < width; y++) + { + gridPositionList.Add(offset + new Vector2Int(x, y)); + } + } + break; + } + return gridPositionList; + } + }