using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class DeckManager : MonoBehaviour { public static DeckManager main; [SerializeField] private List deck = new List(); [SerializeField] private List cardsPosition = new List(); private List currentDeck = new List(); //private List passedDeck = new List(); [HideInInspector] public List CardInTable = new List(); public int numberCurrentCard; public CardConfig currentCard; [Header("Stamina")] [SerializeField] private List staminaCells = new List(); [HideInInspector] public int stamina; [SerializeField] private GameObject firstCard; [SerializeField] private GameObject firstEquip; [SerializeField] private GameObject secondCard; [SerializeField] private GameObject secondEquip; public bool waitingEnemyTurn = false; private void Awake() { if (main != null && main != this) { Debug.LogWarning("2 base enemy turn on the scene"); Destroy(this); return; } main = this; } private void Start() { stamina = 3; CompletionDeck(); HandingOut(); for (int i = 0; i < DataHolder.main.PlayerEquipment.Count; i++) { var _equipmentCharacter = DataHolder.main.PlayerEquipment[i].GetComponent().equipmentConfig.equipmentCharacteristics; if (_equipmentCharacter.equipmentCards.Length != 0) { for (int j = 0; j < _equipmentCharacter.equipmentCards.Length; j++) { AddCard(_equipmentCharacter.equipmentCards[i]); } } } } public void CheckLevel(GameObject _card) { // Мне за это стыдно, но в голову иных варинтов не приходит var _cardCharacteristics = _card.GetComponent().cardConfig.CardCharacteristics; if (((int)_cardCharacteristics.level) == 1) { _cardCharacteristics.quantityStamina = _cardCharacteristics.quantityStamina2; _cardCharacteristics.quantityHealth = _cardCharacteristics.quantityHealth2; _cardCharacteristics.damage = _cardCharacteristics.damage2; _cardCharacteristics.addHealth = _cardCharacteristics.addHealth2; _cardCharacteristics.addStamina = _cardCharacteristics.addStamina2; _cardCharacteristics.addArmor = _cardCharacteristics.addArmor2; } } public void AddCard(GameObject card) { deck.Add(card); } public void DeletedCard(GameObject card) { for (int i = 0; i < deck.Count; i++) { if (deck[i] == card) { deck.RemoveAt(i); return; } } Debug.LogWarning("No card found to delete"); } public void HandingOut() { for (int i = 0; i < 5; i++) { if (currentDeck.Count > 0) { CompletionDeck(); } int _number = Random.Range(0, currentDeck.Count); GameObject _card = Instantiate(currentDeck[_number], cardsPosition[i]); _card.GetComponent().number = i; CardInTable.Add(_card); CheckLevel(_card); currentDeck.RemoveAt(_number); } } public void CompletionDeck() { for (int i = 0; i < deck.Count; i++) { currentDeck.Add(deck[i]); } } public void NewStaminaQuantity(int q) { stamina = q; if (stamina > 3) stamina = 3; for (int i = 0; i < 3; i++) { if (i < stamina) { staminaCells[i].enabled = true; } else { staminaCells[i].enabled = false; } } } public void EndTurn(bool enemyTurn) { if (waitingEnemyTurn || Session.main.waitingEndingRound) return; currentCard = null; MarkersRegulator(); for (int i = 0; i < 5; i++) { if (CardInTable[i] != null) { CardInTable[i].GetComponent().DestroyObject(); } } CardInTable.Clear(); HandingOut(); if (stamina < 3) NewStaminaQuantity(stamina + 1); //нужна корутина для вражеского хода if (enemyTurn) StartCoroutine(EnemyStep()); //а, вот же она } public void MarkersRegulator() { List _enemies = Session.main.currentEnemies; for (int i = 0; i < _enemies.Count; i++) { if (_enemies[i] != null) { _enemies[i].GetComponent().OffMarker(); } } Player.main.OffMarker(); if (currentCard == null) { return; } var _specializationCard = currentCard.CardCharacteristics.specialization; for (int i = 0; i < _enemies.Count; i++) { if (_enemies[i] != null) { if (_specializationCard == Specialization.meleeAtack) { _enemies[i].GetComponent().OnMarker(); return; } else if (_specializationCard == Specialization.longAttack) { _enemies[i].GetComponent().OnMarker(); } } } if (_specializationCard == Specialization.healing) { Player.main.OnMarker(); } } public void ActionInEnemy(Enemy enemy) { if (waitingEnemyTurn || currentCard == null || !enemy.CheckMarker()) return; var _local = (int)currentCard.CardCharacteristics.enemyCount; if (_local != 0) { MassiveAttack(_local); } else { if (currentCard.CardCharacteristics.damage > 0) { enemy.ChangeHp(currentCard.CardCharacteristics.damage); } else if (currentCard.CardCharacteristics.addHealth > 0) { enemy.ChangeHp(-currentCard.CardCharacteristics.addHealth); } } NewStaminaQuantity(stamina - currentCard.CardCharacteristics.quantityStamina); CardInTable[numberCurrentCard].GetComponent().DestroyObject(); currentCard = null; MarkersRegulator(); } IEnumerator EnemyStep() { waitingEnemyTurn = true; Session.main.EnemiesStep(); yield return new WaitForSeconds(0.5f); waitingEnemyTurn = false; } public void MassiveAttack(int _targetCount) { if(Session.main.currentEnemies.Count < _targetCount) { _targetCount = Session.main.currentEnemies.Count; } for (int i = 0; i < _targetCount; i++) { Session.main.currentEnemies[i].GetComponent().ChangeHp(currentCard.CardCharacteristics.damage); } } }