diff --git a/Assets/Scripts/CheatMenu.cs b/Assets/Scripts/CheatMenu.cs index 73bc5e22..33fa9495 100644 --- a/Assets/Scripts/CheatMenu.cs +++ b/Assets/Scripts/CheatMenu.cs @@ -20,10 +20,10 @@ public class CheatMenu : MonoBehaviour private GameObject _itemsPrefab; private List _buttons; - public void SetPlayerNData(Unit player, Data.Data data) + public void SetPlayerNData(Data.Data data) { _buttons = new List(); - _player = player; + _player = (Unit)(HexManager.UnitCurrentCell.FirstOrDefault(unit => ((Unit)unit.Value.unit).IsPlayer).Value.unit); _itemsPrefab = new GameObject("CheatedItems"); showButton.onClick.AddListener(() => scrollRect.SetActive(!scrollRect.activeSelf)); @@ -56,11 +56,17 @@ public class CheatMenu : MonoBehaviour _buttons.Add(playerGridGO); var playerGrid = playerGridGO.GetComponentInChildren(); playerGridGO.GetComponentInChildren().text = "Player"; - AddButton(() => + + + for (var i = 0; i < HexManager.UnitCurrentCell.Count; i++) { - _player.BaseView.OnHit.Invoke(_player.UnitData.maxHP); - scrollRect.SetActive(false); - }, "Kill Player", playerGrid.gameObject); + var unit = HexManager.UnitCurrentCell.ElementAt(i).Value.unit; + AddButton(() => + { + unit.BaseView.OnHit.Invoke(unit.maxHP); + scrollRect.SetActive(false); + }, $"Kill {unit.Color} unit", playerGrid.gameObject); + } _buttons.Add(AddButton(() => scrollRect.SetActive(false), "CLOSE", grid).gameObject); } @@ -79,4 +85,10 @@ public class CheatMenu : MonoBehaviour scrollRect.SetActive(false); _buttons.ForEach(Destroy); } + + public void OnEnemyDeath() + { + _buttons.ForEach(Destroy); + AddAllButtons(); + } } \ No newline at end of file diff --git a/Assets/Scripts/CheatMenu.cs.bak b/Assets/Scripts/CheatMenu.cs.bak new file mode 100644 index 00000000..a967f68c --- /dev/null +++ b/Assets/Scripts/CheatMenu.cs.bak @@ -0,0 +1,94 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using HexFiled; +using Items; +using TMPro; +using Units; +using UnityEngine; +using UnityEngine.UI; + +public class CheatMenu : MonoBehaviour +{ + [SerializeField] private Button showButton; + [SerializeField] private GameObject scrollRect; + [SerializeField] private GameObject grid; + [SerializeField] private Button buttonPrefab; + [SerializeField] private GameObject gridPrefab; + private Unit _player; + private Data.Data _data; + private GameObject _itemsPrefab; + private List _buttons; + + public void SetPlayerNData(Data.Data data) + { + _buttons = new List(); + _player = (Unit)(HexManager.UnitCurrentCell.FirstOrDefault(unit => ((Unit)unit.Value.unit).IsPlayer).Value.unit); + _itemsPrefab = new GameObject("CheatedItems"); + + showButton.onClick.AddListener(() => scrollRect.SetActive(!scrollRect.activeSelf)); + _data = data; + AddAllButtons(); + scrollRect.SetActive(false); + + } + + private void AddAllButtons() + { + + var itemGridGo = Instantiate(gridPrefab, grid.transform); + _buttons.Add(itemGridGo); + var itemGrid = itemGridGo.GetComponentInChildren(); + itemGridGo.GetComponentInChildren().text = "Items"; + _data.ItemsData.ItemInfos.ForEach(x => + { + AddButton(() => + { + var cell = HexManager.UnitCurrentCell[_player.Color].cell.GetListNeighbours() + .First(hexCell => hexCell != null); + + x.Item.Spawn(cell, _itemsPrefab, ItemFabric.itemIcon[x.Item.Type]); + scrollRect.SetActive(false); + }, "Spawn " + x.Item.name, itemGrid.gameObject); + }); + + var playerGridGO = Instantiate(gridPrefab, grid.transform); + _buttons.Add(playerGridGO); + var playerGrid = playerGridGO.GetComponentInChildren(); + playerGridGO.GetComponentInChildren().text = "Player"; + + + for (var i = 0; i < HexManager.UnitCurrentCell.Count; i++) + { + var unit = HexManager.UnitCurrentCell.ElementAt(i).Value.unit; + AddButton(() => + { + unit.UnitView.OnHit.Invoke(unit.maxHP); + scrollRect.SetActive(false); + }, $"Kill {unit.Color} unit", playerGrid.gameObject); + } + + _buttons.Add(AddButton(() => scrollRect.SetActive(false), "CLOSE", grid).gameObject); + } + + private Button AddButton(Action onClickAction, string buttonText, GameObject parent) + { + var button = Instantiate(buttonPrefab, parent.transform); + button.onClick.AddListener(onClickAction.Invoke); + button.GetComponentInChildren().text = buttonText; + return button; + } + + public void OnPlayerDeath() + { + showButton.onClick.RemoveAllListeners(); + scrollRect.SetActive(false); + _buttons.ForEach(Destroy); + } + + public void OnEnemyDeath() + { + _buttons.ForEach(Destroy); + AddAllButtons(); + } +} \ No newline at end of file diff --git a/Assets/Scripts/CheatMenu.cs.bak.meta b/Assets/Scripts/CheatMenu.cs.bak.meta new file mode 100644 index 00000000..672cbbb0 --- /dev/null +++ b/Assets/Scripts/CheatMenu.cs.bak.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ebf1fa13c69086a4e80bfda71dec1285 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Units/UnitFactory.cs b/Assets/Scripts/Units/UnitFactory.cs index ad9b503d..f0d73add 100644 --- a/Assets/Scripts/Units/UnitFactory.cs +++ b/Assets/Scripts/Units/UnitFactory.cs @@ -1,8 +1,10 @@ using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using CamControl; using Controller; using Data; +using DefaultNamespace; using DefaultNamespace.AI; using GameUI; using HexFiled; @@ -35,6 +37,7 @@ namespace Chars public void SpawnList(List units) { units.ForEach(x => Spawn(x)); + _uiController.CheatMenu.SetPlayerNData(_data); } public void Spawn(UnitInfo unitInfo, HexCell spawnHex = null) @@ -66,16 +69,16 @@ namespace Chars _uiController.PlayerInventoryView); _controllers.Add(playerControl); }; + + - - player.OnSpawned += unit => _uiController.CheatMenu.SetPlayerNData((Unit)unit, _data); player.OnDeath += unit1 => _controllers.Remove(playerControl); player.OnDeath += u => playerControl.Dispose(); player.OnSpawned += unit => cameraControl.InitCameraControl(unit.Instance); player.OnDeath += unit => _uiController.CheatMenu.OnPlayerDeath(); - + player.OnDeath += p => _uiController.AdsMob.ShowCanvas(unitInfo, this); - + player.Spawn(spawnPos.coordinates, spawnPos); spawnPos.isSpawnPos = false; player.BaseView.SetBar(_data.UnitData.PlayerBarCanvas, _data.UnitData.AttackAimCanvas); @@ -86,6 +89,9 @@ namespace Chars var enemy = new Unit(unitInfo, _data.WeaponsData.WeaponsList[Random.Range(0, _data.WeaponsData.WeaponsList.Count - 1)], _hexGrid, _data); + + enemy.OnDeath += unit => RandomSpawn(unitInfo); + if (unitInfo.isAI) { AIAgent agent = new AIAgent(enemy); @@ -93,11 +99,29 @@ namespace Chars enemy.OnDeath += x => { _controllers.Remove(agent); }; } + enemy.OnDeath += x => _uiController.CheatMenu.OnEnemyDeath(); + enemy.Spawn(spawnPos.coordinates, spawnPos); spawnPos.isSpawnPos = false; - enemy.BaseView.SetBar(_data.UnitData.BotBarCanvas, _data.UnitData.AttackAimCanvas); } } + + private void RandomSpawn(UnitInfo info) + { + TimerHelper.Instance.StartTimer(() => + { + var cellToSpawn = HexManager.CellByColor[UnitColor.Grey].Where(cell => cell != null && + cell.GetListNeighbours().TrueForAll(neighbour => neighbour == null || neighbour.Color == UnitColor.Grey)).ToList(); + if (cellToSpawn.Count == 0) + { + RandomSpawn(info); + return; + } + + Spawn(info, cellToSpawn[Random.Range(0, cellToSpawn.Count - 1)]); + _uiController.CheatMenu.OnEnemyDeath(); + }, 1f); + } } } \ No newline at end of file diff --git a/Assets/Scripts/Units/UnitFactory.cs.bak b/Assets/Scripts/Units/UnitFactory.cs.bak new file mode 100644 index 00000000..8a57cb37 --- /dev/null +++ b/Assets/Scripts/Units/UnitFactory.cs.bak @@ -0,0 +1,133 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using CamControl; +using Controller; +using Data; +using DefaultNamespace; +using DefaultNamespace.AI; +using GameUI; +using HexFiled; +using Runtime.Controller; +using Units; +using UnityEngine; +using Weapons; + +namespace Chars +{ + public class UnitFactory + { + private readonly HexGrid _hexGrid; + private readonly Weapon _chosenWeapon; + private readonly Data.Data _data; + private readonly Controllers _controllers; + private readonly UIController _uiController; + public Unit Player { get; private set; } + + public UnitFactory(HexGrid grid, Data.Data data, UIController uiController, PaintedController paintedController, + Controllers controllers) + { + _hexGrid = grid; + _data = data; + _chosenWeapon = data.ChosenWeapon; + _uiController = uiController; + _controllers = controllers; + } + + public void SpawnList(List units) + { + units.ForEach(x => Spawn(x)); + _uiController.CheatMenu.SetPlayerNData(_data); + } + + public void Spawn(UnitInfo unitInfo, HexCell spawnHex = null) + { + HexCell spawnPos; + if (spawnHex == null) + { + spawnPos = _hexGrid.spawnPoses.ToList().FirstOrDefault(x => x.isSpawnPos); + if (spawnPos == null) + return; + } + else + { + spawnPos = spawnHex; + } + + if (unitInfo.isPlayer) + { + var player = new Unit(unitInfo, _chosenWeapon, _hexGrid, _data); + PlayerControl playerControl = null; + + CameraControl cameraControl = + new CameraControl(Camera.main, _data.CameraData); + _controllers.Add(cameraControl); + + player.OnSpawned += p => + { + playerControl = new PlayerControl(player, _uiController.PlayerControlView, + _uiController.PlayerInventoryView); + _controllers.Add(playerControl); + }; + + + + player.OnDeath += unit1 => _controllers.Remove(playerControl); + player.OnDeath += u => playerControl.Dispose(); + player.OnSpawned += unit => cameraControl.InitCameraControl(unit.Instance); + player.OnDeath += unit => _uiController.CheatMenu.OnPlayerDeath(); + + player.OnDeath += p => _uiController.AdsMob.ShowCanvas(unitInfo, this); + + player.Spawn(spawnPos.coordinates, spawnPos); + spawnPos.isSpawnPos = false; + player.BaseView.SetBar(_data.UnitData.PlayerBarCanvas, _data.UnitData.AttackAimCanvas); + Player = player; + } + else + { + var enemy = new Unit(unitInfo, + _data.WeaponsData.WeaponsList[Random.Range(0, _data.WeaponsData.WeaponsList.Count - 1)], _hexGrid, _data); + + + enemy.OnDeath += unit => RandomSpawn(unitInfo); + + if (unitInfo.isAI) + { + AIAgent agent = new AIAgent(enemy); + enemy.OnSpawned += x => _controllers.Add(agent); + enemy.OnDeath += x => { _controllers.Remove(agent); }; + } + + enemy.OnDeath += x => _uiController.CheatMenu.OnEnemyDeath(); + + enemy.Spawn(spawnPos.coordinates, spawnPos); + spawnPos.isSpawnPos = false; +<<<<<<< HEAD + + enemy.BaseView.SetBar(_data.UnitData.BotBarCanvas, _data.UnitData.AttackAimCanvas); +======= + + enemy.UnitView.SetBar(_data.UnitData.BotBarCanvas, _data.UnitData.AttackAimCanvas); +>>>>>>> abaf11d23750589a662b4fd2daa471f53d864cf7 + } + } + + private void RandomSpawn(UnitInfo info) + { + TimerHelper.Instance.StartTimer(() => + { + var cellToSpawn = HexManager.CellByColor[UnitColor.Grey].Where(cell => cell != null && + cell.GetListNeighbours().TrueForAll(neighbour => neighbour == null || neighbour.Color == UnitColor.Grey)).ToList(); + if (cellToSpawn.Count == 0) + { + RandomSpawn(info); + return; + } + + Spawn(info, cellToSpawn[Random.Range(0, cellToSpawn.Count - 1)]); + _uiController.CheatMenu.OnEnemyDeath(); + }, 1f); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Units/UnitFactory.cs.bak.meta b/Assets/Scripts/Units/UnitFactory.cs.bak.meta new file mode 100644 index 00000000..d5f5dbda --- /dev/null +++ b/Assets/Scripts/Units/UnitFactory.cs.bak.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 83e52267c67416347a2e7e372e8ae0e4 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: