From daa0c9f06e52fa470ef5172b2055ad3b5d46398a Mon Sep 17 00:00:00 2001 From: NTG_Lenovo Date: Wed, 23 Aug 2023 16:24:31 +0900 Subject: [PATCH] =?UTF-8?q?#25=20=EC=B9=B4=EB=93=9C=20=EC=8B=9C=EC=8A=A4?= =?UTF-8?q?=ED=85=9C=20=EC=9E=91=EC=97=85=20=EC=A4=91=20=EC=9C=A0=EB=8B=88?= =?UTF-8?q?=ED=8B=B0=20=EB=B2=84=EC=A0=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BlueWater/Assets/02.Scripts/Ai/Unit/Unit.cs | 73 +++++++++++++++ .../Assets/02.Scripts/Ai/Unit/Unit.cs.meta | 11 +++ .../02.Scripts/Ai/Unit/UnitController.cs | 90 +++---------------- .../Assets/02.Scripts/Ai/Unit/UnitManager.cs | 21 +++-- BlueWater/Assets/02.Scripts/Data.meta | 8 ++ .../Assets/02.Scripts/Data/CardDataSo.cs | 14 +++ .../Assets/02.Scripts/Data/CardDataSo.cs.meta | 11 +++ BlueWater/Assets/02.Scripts/Data/So.meta | 8 ++ .../02.Scripts/Data/So/CardDataSo.asset | 78 ++++++++++++++++ .../02.Scripts/Data/So/CardDataSo.asset.meta | 8 ++ BlueWater/Assets/02.Scripts/DataManager.cs | 2 + BlueWater/Assets/02.Scripts/Player/Card.cs | 6 +- .../Assets/02.Scripts/Utility/GlobalValue.cs | 2 + 13 files changed, 244 insertions(+), 88 deletions(-) create mode 100644 BlueWater/Assets/02.Scripts/Ai/Unit/Unit.cs create mode 100644 BlueWater/Assets/02.Scripts/Ai/Unit/Unit.cs.meta create mode 100644 BlueWater/Assets/02.Scripts/Data.meta create mode 100644 BlueWater/Assets/02.Scripts/Data/CardDataSo.cs create mode 100644 BlueWater/Assets/02.Scripts/Data/CardDataSo.cs.meta create mode 100644 BlueWater/Assets/02.Scripts/Data/So.meta create mode 100644 BlueWater/Assets/02.Scripts/Data/So/CardDataSo.asset create mode 100644 BlueWater/Assets/02.Scripts/Data/So/CardDataSo.asset.meta diff --git a/BlueWater/Assets/02.Scripts/Ai/Unit/Unit.cs b/BlueWater/Assets/02.Scripts/Ai/Unit/Unit.cs new file mode 100644 index 000000000..6217796b2 --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Ai/Unit/Unit.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections.Generic; +using Sirenix.OdinInspector; +using UnityEngine; + +// ReSharper disable once CheckNamespace +namespace BlueWaterProject +{ + [Serializable] + public class Unit + { + [field: Tooltip("부대의 이름 또는 영웅의 이름")] + [field: SerializeField] public string UnitName { get; set; } + + [field: Tooltip("부대의 종류")] + [field: OnValueChanged("AttackerTypeAutoSetting")] + [field: SerializeField] public GlobalValue.UnitType UnitType { get; set; } + + [field: Tooltip("부대의 병력 수")] + [field: SerializeField] public int SoliderCount { get; set; } + + [field: DisableInEditorMode] + [field: EnumToggleButtons] + [field: SerializeField] public AttackerType AttackerType { get; set; } + + [field: ShowIf("AttackerType", AttackerType.OFFENSE)] + [field: SerializeField] public OffenseType OffenseType { get; set; } + + [field: ShowIf("AttackerType", AttackerType.DEFENSE)] + [field: SerializeField] public DefenseType DefenseType { get; set; } + + [field: Tooltip("부대 병력 리스트")] + public List soldierList; + + public Unit() + { + UnitName = null; + UnitType = GlobalValue.UnitType.NONE; + SoliderCount = 0; + soldierList = new List(); + } + + public Unit(string unitName, GlobalValue.UnitType unitType, int soliderCount, List soldierList) + { + this.UnitName = unitName; + this.UnitType = unitType; + this.SoliderCount = soliderCount; + + this.soldierList = new List(this.SoliderCount); + this.soldierList = soldierList; + } + + public void AttackerTypeAutoSetting() + { + if (UnitType.ToString().Contains("_E")) + { + AttackerType = AttackerType.DEFENSE; + } + else if (UnitType.ToString().Contains("_P")) + { + AttackerType = AttackerType.OFFENSE; + } + else + { + AttackerType = AttackerType.NONE; + } + } + + public void SetAttackerType(AttackerType type) => AttackerType = type; + public void SetOffenseType(OffenseType type) => OffenseType = type; + public void SetDefenseType(DefenseType type) => DefenseType = type; + } +} \ No newline at end of file diff --git a/BlueWater/Assets/02.Scripts/Ai/Unit/Unit.cs.meta b/BlueWater/Assets/02.Scripts/Ai/Unit/Unit.cs.meta new file mode 100644 index 000000000..2b50da826 --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Ai/Unit/Unit.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0d1e5af44c71b4443885b72e1b19ddd2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/02.Scripts/Ai/Unit/UnitController.cs b/BlueWater/Assets/02.Scripts/Ai/Unit/UnitController.cs index 9e7876522..74e2d64bf 100644 --- a/BlueWater/Assets/02.Scripts/Ai/Unit/UnitController.cs +++ b/BlueWater/Assets/02.Scripts/Ai/Unit/UnitController.cs @@ -1,72 +1,22 @@ using System; -using System.Collections.Generic; using Sirenix.OdinInspector; using UnityEngine; // ReSharper disable once CheckNamespace namespace BlueWaterProject { - [Serializable] - public class Unit - { - [Tooltip("부대의 이름")] - public string unitName; - - [Tooltip("부대의 종류")] - public GlobalValue.UnitType unitType; - - [Tooltip("부대의 병력 수")] - public int soliderCount; - - [Tooltip("부대 병력 리스트")] - public List soldierList; - - public Unit() - { - unitName = null; - unitType = GlobalValue.UnitType.NONE; - soliderCount = 0; - soldierList = new List(); - } - - public Unit(string unitName, GlobalValue.UnitType unitType, int soliderCount, List soldierList) - { - this.unitName = unitName; - this.unitType = unitType; - this.soliderCount = soliderCount; - - this.soldierList = new List(this.soliderCount); - this.soldierList = soldierList; - } - } - public class UnitController : MonoBehaviour { #region Property and variable [PropertyOrder(-11)] - [EnableIf("@attackerType == AttackerType.OFFENSE")] + [EnableIf("@unit.AttackerType == AttackerType.OFFENSE")] [InlineButton("SetIslandInfoTest", "테스트 설정")] [SerializeField] private IslandInfo attackIslandInfo; [PropertyOrder(-10)] public Unit unit; - private bool alwaysFalse; - - [EnableIf("alwaysFalse")] - [EnumToggleButtons] - [OnValueChanged("OnTypeChanged")] - [SerializeField] private AttackerType attackerType; - - [ShowIf("attackerType", AttackerType.OFFENSE)] - [OnValueChanged("OnTypeChanged")] - [SerializeField] private OffenseType offenseType; - - [ShowIf("attackerType", AttackerType.DEFENSE)] - [OnValueChanged("OnTypeChanged")] - [SerializeField] private DefenseType defenseType; - private bool isClickedTypeAllButton; #endregion @@ -75,13 +25,13 @@ namespace BlueWaterProject private void OnDrawGizmosSelected() { - if (unit == null || unit.soliderCount <= 0) return; + if (unit == null || unit.SoliderCount <= 0) return; var unitManager = UnitManager.Inst != null ? UnitManager.Inst : FindObjectOfType(); - var matrix = unitManager.UnitMatrices.Find(um => um.soldiers == unit.soliderCount); + var matrix = unitManager.UnitMatrices.Find(um => um.soldiers == unit.SoliderCount); if (matrix == null) return; - for (var i = 0; i < unit.soliderCount; i++) + for (var i = 0; i < unit.SoliderCount; i++) { var row = i / matrix.columns; var column = i % matrix.columns; @@ -111,16 +61,7 @@ namespace BlueWaterProject [Button("유닛 생성")] public void CreateUnit() { - if (!Application.isPlaying) - { - var unitManager = FindObjectOfType(); - unitManager.CreateUnit(this); - } - else - { - UnitManager.Inst.CreateUnit(this); - } - + UnitManager.Inst.CreateUnit(this); } [PropertyOrder(-8)] @@ -161,9 +102,6 @@ namespace BlueWaterProject { unit = new Unit(); attackIslandInfo = null; - attackerType = AttackerType.NONE; - offenseType = OffenseType.NONE; - defenseType = DefenseType.NONE; isClickedTypeAllButton = false; } @@ -175,9 +113,9 @@ namespace BlueWaterProject { foreach (var soldier in unit.soldierList) { - soldier.SetAttackerType(attackerType); - soldier.SetOffenseType(offenseType); - soldier.SetDefenseType(defenseType); + soldier.SetAttackerType(unit.AttackerType); + soldier.SetOffenseType(unit.OffenseType); + soldier.SetDefenseType(unit.DefenseType); } isClickedTypeAllButton = true; @@ -193,7 +131,7 @@ namespace BlueWaterProject private void SetIslandInfoTest() { - if (attackerType != AttackerType.OFFENSE) return; + if (unit.AttackerType != AttackerType.OFFENSE) return; var islandInfo = FindObjectOfType(); attackIslandInfo = islandInfo; @@ -206,18 +144,18 @@ namespace BlueWaterProject private bool ShowTypeAllButton() { - switch (attackerType) + switch (unit.AttackerType) { case AttackerType.NONE: return false; case AttackerType.OFFENSE: - if (offenseType == OffenseType.NONE) + if (unit.OffenseType == OffenseType.NONE) { return false; } break; case AttackerType.DEFENSE: - if (defenseType == DefenseType.NONE) + if (unit.DefenseType == DefenseType.NONE) { return false; } @@ -233,14 +171,14 @@ namespace BlueWaterProject { if (unit.soldierList.Count > 0) { - return attackerType == AttackerType.NONE ? Color.green : Color.white; + return unit.AttackerType == AttackerType.NONE ? Color.green : Color.white; } return Color.white; } private Color GetTypeAllButtonColor() => isClickedTypeAllButton ? Color.white : Color.green; private void OnTypeChanged() => isClickedTypeAllButton = false; - public void SetAttackerType(AttackerType value) => attackerType = value; + public void SetAttackerType(AttackerType value) => unit.AttackerType = value; #endregion } diff --git a/BlueWater/Assets/02.Scripts/Ai/Unit/UnitManager.cs b/BlueWater/Assets/02.Scripts/Ai/Unit/UnitManager.cs index 38f49bae7..8ce91fe56 100644 --- a/BlueWater/Assets/02.Scripts/Ai/Unit/UnitManager.cs +++ b/BlueWater/Assets/02.Scripts/Ai/Unit/UnitManager.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Linq; using Sirenix.OdinInspector; using UnityEngine; @@ -162,9 +161,9 @@ namespace BlueWaterProject { DestroyDeployedSoldiers(unitController); - var baseName = soldierPrefabList[(int)unitController.unit.unitType - 1].name; + var baseName = soldierPrefabList[(int)unitController.unit.UnitType - 1].name; - if (string.IsNullOrEmpty(unitController.unit.unitName)) + if (string.IsNullOrEmpty(unitController.unit.UnitName)) { const int maxIterations = 100; var namingNum = 0; @@ -186,13 +185,13 @@ namespace BlueWaterProject } else { - unitController.gameObject.name = unitController.unit.unitName; + unitController.gameObject.name = unitController.unit.UnitName; } unitController.gameObject.layer = LayerMask.NameToLayer("Unit"); - unitController.unit.soldierList = new List(unitController.unit.soliderCount); + unitController.unit.soldierList = new List(unitController.unit.SoliderCount); - var matrix = UnitMatrices.Find(um => um.soldiers == unitController.unit.soliderCount); + var matrix = UnitMatrices.Find(um => um.soldiers == unitController.unit.SoliderCount); if (matrix == null) { Debug.LogError("사용할 수 없는 병력의 숫자입니다. UnitManager의 UnitMatrices를 확인해주세요."); @@ -203,7 +202,7 @@ namespace BlueWaterProject var unitControllerRotation = unitControllerTransform.rotation; unitControllerTransform.rotation = Quaternion.identity; - for (var i = 0; i < unitController.unit.soliderCount; i++) + for (var i = 0; i < unitController.unit.SoliderCount; i++) { var row = i / matrix.columns; var column = i % matrix.columns; @@ -212,7 +211,7 @@ namespace BlueWaterProject var zOffset = (row - (matrix.rows - 1) / 2.0f) * SoldierSpacing; var spawnPosition = unitControllerTransform.position + new Vector3(xOffset, 0, zOffset); - var soldierObject = Instantiate(soldierPrefabList[(int)unitController.unit.unitType - 1], spawnPosition, + var soldierObject = Instantiate(soldierPrefabList[(int)unitController.unit.UnitType - 1], spawnPosition, Quaternion.identity, unitController.transform).GetComponent(); var newSoldierName = $"{baseName}_{i + 1:00}"; @@ -223,7 +222,7 @@ namespace BlueWaterProject } unitController.transform.rotation *= unitControllerRotation; - if (unitController.unit.unitType.ToString().Contains("_E")) + if (unitController.unit.UnitType.ToString().Contains("_E")) { unitController.SetAttackerType(AttackerType.DEFENSE); foreach (var soldier in unitController.unit.soldierList) @@ -231,7 +230,7 @@ namespace BlueWaterProject soldier.SetAttackerType(AttackerType.DEFENSE); } } - else if (unitController.unit.unitType.ToString().Contains("_P")) + else if (unitController.unit.UnitType.ToString().Contains("_P")) { unitController.SetAttackerType(AttackerType.OFFENSE); foreach (var soldier in unitController.unit.soldierList) @@ -250,7 +249,7 @@ namespace BlueWaterProject unitController.transform.position = assignPos; - for (var i = 0; i < unitController.unit.soliderCount; i++) + for (var i = 0; i < unitController.unit.SoliderCount; i++) { var soldierPos = unitController.unit.soldierList[i].transform.position; var ray = new Ray(soldierPos, Vector3.down); diff --git a/BlueWater/Assets/02.Scripts/Data.meta b/BlueWater/Assets/02.Scripts/Data.meta new file mode 100644 index 000000000..b604ba20b --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Data.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d7fff6957b3e19f4e8877add5442e28f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/02.Scripts/Data/CardDataSo.cs b/BlueWater/Assets/02.Scripts/Data/CardDataSo.cs new file mode 100644 index 000000000..026a94af5 --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Data/CardDataSo.cs @@ -0,0 +1,14 @@ +using System.Collections; +using System.Collections.Generic; +using _02.Scripts.WaterAndShip; +using UnityEngine; + +// ReSharper disable once CheckNamespace +namespace BlueWaterProject +{ + [CreateAssetMenu(fileName = "CardDataSo", menuName = "ScriptableObjects/CardData", order = 0)] + public class CardDataSo : ScriptableObject + { + public List cardDataList = new(GlobalValue.CARD_DATA_CAPACITY); + } +} \ No newline at end of file diff --git a/BlueWater/Assets/02.Scripts/Data/CardDataSo.cs.meta b/BlueWater/Assets/02.Scripts/Data/CardDataSo.cs.meta new file mode 100644 index 000000000..89feab75e --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Data/CardDataSo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 420d288b4d553b64ca505f318acd0c60 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/02.Scripts/Data/So.meta b/BlueWater/Assets/02.Scripts/Data/So.meta new file mode 100644 index 000000000..12ef39f78 --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Data/So.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e46d3012f59195a469a056244872da07 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/02.Scripts/Data/So/CardDataSo.asset b/BlueWater/Assets/02.Scripts/Data/So/CardDataSo.asset new file mode 100644 index 000000000..b7a89ca86 --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Data/So/CardDataSo.asset @@ -0,0 +1,78 @@ +%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: 420d288b4d553b64ca505f318acd0c60, type: 3} + m_Name: CardDataSo + m_EditorClassIdentifier: + cardDataList: + - k__BackingField: card_001 + k__BackingField: + k__BackingField: Legolas + k__BackingField: 6 + k__BackingField: 6 + k__BackingField: 1 + k__BackingField: 1 + k__BackingField: 0 + soldierList: [] + - k__BackingField: card_002 + k__BackingField: + k__BackingField: Robin Hood + k__BackingField: 6 + k__BackingField: 4 + k__BackingField: 1 + k__BackingField: 1 + k__BackingField: 0 + soldierList: [] + - k__BackingField: card_003 + k__BackingField: + k__BackingField: Olaf + k__BackingField: 7 + k__BackingField: 6 + k__BackingField: 1 + k__BackingField: 1 + k__BackingField: 0 + soldierList: [] + - k__BackingField: card_004 + k__BackingField: + k__BackingField: Lancer + k__BackingField: 8 + k__BackingField: 8 + k__BackingField: 1 + k__BackingField: 1 + k__BackingField: 0 + soldierList: [] + - k__BackingField: card_005 + k__BackingField: + k__BackingField: + k__BackingField: 9 + k__BackingField: 0 + k__BackingField: 1 + k__BackingField: 1 + k__BackingField: 0 + soldierList: [] + - k__BackingField: card_006 + k__BackingField: + k__BackingField: Aragorn + k__BackingField: 10 + k__BackingField: 9 + k__BackingField: 1 + k__BackingField: 1 + k__BackingField: 0 + soldierList: [] + - k__BackingField: card_007 + k__BackingField: + k__BackingField: King Arthur + k__BackingField: 10 + k__BackingField: 6 + k__BackingField: 1 + k__BackingField: 2 + k__BackingField: 0 + soldierList: [] diff --git a/BlueWater/Assets/02.Scripts/Data/So/CardDataSo.asset.meta b/BlueWater/Assets/02.Scripts/Data/So/CardDataSo.asset.meta new file mode 100644 index 000000000..877ddfafd --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Data/So/CardDataSo.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0db3b35c9121e9e4bbe8559a0922145f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/02.Scripts/DataManager.cs b/BlueWater/Assets/02.Scripts/DataManager.cs index 87d1c11cf..da2913fe6 100644 --- a/BlueWater/Assets/02.Scripts/DataManager.cs +++ b/BlueWater/Assets/02.Scripts/DataManager.cs @@ -7,6 +7,8 @@ using UnityEngine; public class DataManager : Singleton { + [field: SerializeField] public CardDataSo CardDataSo { get; private set; } + public List CardList = new List(10); public GameObject mouseSpot; diff --git a/BlueWater/Assets/02.Scripts/Player/Card.cs b/BlueWater/Assets/02.Scripts/Player/Card.cs index 2a20f8915..4d0df7fe2 100644 --- a/BlueWater/Assets/02.Scripts/Player/Card.cs +++ b/BlueWater/Assets/02.Scripts/Player/Card.cs @@ -1,9 +1,13 @@ +using System; using BlueWaterProject; +using UnityEngine; namespace _02.Scripts.WaterAndShip { + [Serializable] public class Card { - public Unit Unit { get; set; } + [field: SerializeField] public string Idx { get; set; } + [field: SerializeField] public Unit Unit { get; set; } } } \ No newline at end of file diff --git a/BlueWater/Assets/02.Scripts/Utility/GlobalValue.cs b/BlueWater/Assets/02.Scripts/Utility/GlobalValue.cs index 96883f365..7a965867e 100644 --- a/BlueWater/Assets/02.Scripts/Utility/GlobalValue.cs +++ b/BlueWater/Assets/02.Scripts/Utility/GlobalValue.cs @@ -1,5 +1,7 @@ public class GlobalValue { + public const int CARD_DATA_CAPACITY = 50; + public enum UnitType { NONE = 0,