PO/Assets/Scripts/DeckManager.cs

183 lines
5.3 KiB
C#
Raw Normal View History

2022-01-12 10:06:03 +03:00
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class DeckManager : MonoBehaviour
{
2022-01-13 12:07:16 +03:00
public static DeckManager main;
2022-01-12 10:06:03 +03:00
[SerializeField] private List<GameObject> deck = new List<GameObject>();
[SerializeField] private List<Transform> cardsPosition = new List<Transform>();
private List<GameObject> currentDeck = new List<GameObject>();
//private List<CardConfig> passedDeck = new List<CardConfig>();
[HideInInspector] public List<GameObject> CardInTable = new List<GameObject>();
public int numberCurrentCard;
public CardConfig currentCard;
[Header("Stamina")]
[SerializeField] private List<Image> staminaCells = new List<Image>();
[HideInInspector] public int stamina;
public bool waitingEnemyTurn = false;
2022-01-13 12:07:16 +03:00
private void Awake()
{
if (main != null && main != this)
{
Debug.LogWarning("2 base enemy turn on the scene");
Destroy(this);
return;
}
main = this;
}
2022-01-12 10:06:03 +03:00
private void Start()
{
stamina = 3;
CompletionDeck();
HandingOut();
}
public void HandingOut()
{
2022-01-12 10:06:03 +03:00
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<Card>().number = i;
CardInTable.Add(_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;
for (int i = 0; i < 3; i++)
{
if (i < stamina)
{
staminaCells[i].enabled = true;
}
else
{
staminaCells[i].enabled = false;
}
}
}
public void EndTurn(bool enemyTurn)
2022-01-12 10:06:03 +03:00
{
if (waitingEnemyTurn || Session.main.waitingEndingRound) return;
currentCard = null;
MarkersRegulator();
2022-01-12 10:06:03 +03:00
for (int i = 0; i < 5; i++)
{
if (CardInTable[i] != null)
{
CardInTable[i].GetComponent<Card>().DestroyObject();
}
}
CardInTable.Clear();
if (stamina < 3)
NewStaminaQuantity(stamina + 1);
//нужна корутина для вражеского хода
if (enemyTurn)
StartCoroutine(EnemyStep());
//а, вот же она
}
public void MarkersRegulator()
{
List<GameObject> _enemies = Session.main.currentEnemies;
for (int i = 0; i < _enemies.Count; i++)
{
if (_enemies[i] != null)
{
_enemies[i].GetComponent<Enemy>().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<Enemy>().OnMarker();
return;
}
else if (_specializationCard == Specialization.longAttack)
{
_enemies[i].GetComponent<Enemy>().OnMarker();
}
}
}
if (_specializationCard == Specialization.healing)
{
Player.main.OnMarker();
}
2022-01-12 10:06:03 +03:00
}
public void ActionInEnemy(Enemy enemy)
{
if (waitingEnemyTurn || currentCard == null || !enemy.CheckMarker()) return;
if (currentCard.CardCharacteristics.damage > 0)
2022-01-12 10:06:03 +03:00
{
2022-01-12 10:06:03 +03:00
enemy.ChangeHp(currentCard.CardCharacteristics.damage);
}
else if (currentCard.CardCharacteristics.healing > 0)
2022-01-12 10:06:03 +03:00
{
//enemy.ChangeHp(-currentCard.CardCharacteristics.healing);
2022-01-12 10:06:03 +03:00
}
NewStaminaQuantity(stamina - currentCard.CardCharacteristics.quantityStamina);
CardInTable[numberCurrentCard].GetComponent<Card>().DestroyObject();
currentCard = null;
MarkersRegulator();
2022-01-12 10:06:03 +03:00
}
public void ActionInPlayer()
{
if (waitingEnemyTurn || currentCard == null || !Player.main.CheckMarker()) return;
if (currentCard.CardCharacteristics.damage > 0)
{
Player.main.ChangeHp(currentCard.CardCharacteristics.damage);
}
else if (currentCard.CardCharacteristics.healing > 0)
{
Player.main.ChangeHp(-currentCard.CardCharacteristics.healing);
}
NewStaminaQuantity(stamina - currentCard.CardCharacteristics.quantityStamina);
CardInTable[numberCurrentCard].GetComponent<Card>().DestroyObject();
currentCard = null;
MarkersRegulator();
}
IEnumerator EnemyStep()
{
waitingEnemyTurn = true;
Session.main.EnemiesStep();
yield return new WaitForSeconds(0.5f);
waitingEnemyTurn = false;
HandingOut();
2022-01-12 10:06:03 +03:00
}
}