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;
|
2022-01-13 11:00:37 +03:00
|
|
|
|
|
|
|
|
|
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-13 11:00:37 +03:00
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-01-13 11:00:37 +03:00
|
|
|
|
public void EndTurn(bool enemyTurn)
|
2022-01-12 10:06:03 +03:00
|
|
|
|
{
|
2022-01-13 11:00:37 +03:00
|
|
|
|
if (waitingEnemyTurn) return;
|
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);
|
|
|
|
|
//нужна корутина для вражеского хода
|
2022-01-13 11:00:37 +03:00
|
|
|
|
if (enemyTurn)
|
|
|
|
|
StartCoroutine(EnemyStep());
|
|
|
|
|
//а, вот же она
|
|
|
|
|
|
2022-01-12 10:06:03 +03:00
|
|
|
|
}
|
|
|
|
|
public void ActionInEnemy(Enemy enemy)
|
|
|
|
|
{
|
2022-01-13 11:00:37 +03:00
|
|
|
|
if (waitingEnemyTurn) return;
|
2022-01-12 10:06:03 +03:00
|
|
|
|
if (currentCard == null) return;
|
2022-01-13 11:00:37 +03:00
|
|
|
|
if (currentCard.CardCharacteristics.damage > 0)
|
2022-01-12 10:06:03 +03:00
|
|
|
|
{
|
|
|
|
|
enemy.ChangeHp(currentCard.CardCharacteristics.damage);
|
2022-01-13 11:00:37 +03:00
|
|
|
|
}
|
|
|
|
|
else if (currentCard.CardCharacteristics.healing > 0)
|
2022-01-12 10:06:03 +03:00
|
|
|
|
{
|
|
|
|
|
enemy.ChangeHp(-currentCard.CardCharacteristics.healing);
|
|
|
|
|
}
|
|
|
|
|
NewStaminaQuantity(stamina - currentCard.CardCharacteristics.quantityStamina);
|
|
|
|
|
CardInTable[numberCurrentCard].GetComponent<Card>().DestroyObject();
|
|
|
|
|
currentCard = null;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
public void ActionInPlayer()
|
|
|
|
|
{
|
2022-01-13 11:00:37 +03:00
|
|
|
|
if (waitingEnemyTurn) return;
|
|
|
|
|
if (currentCard == null) 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;
|
|
|
|
|
}
|
|
|
|
|
IEnumerator EnemyStep()
|
|
|
|
|
{
|
|
|
|
|
waitingEnemyTurn = true;
|
|
|
|
|
Session.instance.EnemiesStep();
|
|
|
|
|
yield return new WaitForSeconds(0.5f);
|
|
|
|
|
waitingEnemyTurn = false;
|
|
|
|
|
HandingOut();
|
2022-01-12 10:06:03 +03:00
|
|
|
|
}
|
|
|
|
|
}
|