TurnManager
TurnManager에서는 턴을 관리하고, 코스트를 관리한다.
1.턴
게임 시작 code
WaitForSeconds delay05 = new WaitForSeconds(0.5f);
public IEnumerator StartGameCo() //게임을 시작
{
Gamesetup(); // 코스트 설정
isLoading =true;
for(int i=0;i<startCardCount;i++)
{
yield return delay05; //0.5초 간격으로 카드 뽑는다.
OnAddCard?.Invoke(true);
}
StartCoroutine(StartTurnCo());
}
턴 시작 code
IEnumerator StartTurnCo()
{
isLoading =true;
SetGauge(myTurn);
if(myTurn) // 나의 턴일 때는 알림이 뜬다.
{
GameManager.Inst.Notification("나의 턴!");
AbilityManager.Inst.eTurnState=AbilityManager.ETurnState.turnStart;
AbilityManager.Inst.stateTrigger =true;
}
yield return delay07;
if(myTurn)
OnAddCard?.Invoke(myTurn);
yield return delay07;
isLoading =false;
OnTurnStarted?.Invoke(myTurn);
}
2.코스트
코스트는 게임을 하면서 매턴 1개의 최대 용량이 증가하고 시작 시에는 2개로 시작된다. 몬스터를 소환하거나 마법을 사용할 때 코스트를 사용한다.
void Gamesetup() //최초의 코스트는 2씩 지급
{
myGaugeCnt =2;
otherGaugeCnt=2;
myTurn = FirstTurn();
}
public bool FirstTurn() // 카드의 코드를 비교하여 우선 순위를 정하고, 내가 선이면 true 상대가 선이면 false를 반환
{
for(int i =0;i<50;i++)
{
if(CardManager.Inst.itemBuffer[i].code>CardManager.Inst.otherItemBuffer[i].code)
{
return true;
}
else if(CardManager.Inst.itemBuffer[i].code<CardManager.Inst.otherItemBuffer[i].code)
{
return false;
}
}
return true;
}
버튼을 통해 턴을 종료할 때마다 내가 종료하면 상대의 최대 코스트 한개가 증가, 상대가 종료하면 내 코스트가 증가
public void EndTurn()
{
if(myTurn)
{
otherGaugeCnt++;
AbilityManager.Inst.eTurnState=AbilityManager.ETurnState.turnEnd;
AbilityManager.Inst.stateTrigger =true;
byte[] send = new byte[1] {Convert.ToByte(106)};
Backend.Match.SendDataToInGameRoom(send);
}
else
{
myGaugeCnt++;
}
myTurn = !myTurn;
Debug.Log("End Turn");
StartCoroutine(StartTurnCo());
}
턴 시작 코루틴이 진행될 때 호출되며, 코스트의 값에 따라 코스트 오브젝트를 화면에 표시한다.
< 코스트 >
public void SetGauge(bool myTurn)
{
if(myTurn)
{
for(int i=0;i<myGaugeCnt;i++)
{
myGauge.transform.GetChild(i).gameObject.SetActive(true);
}
myNowGaugeCnt=myGaugeCnt;
}
else
{
for(int i=0;i<otherGaugeCnt;i++)
{
otherGauge.transform.GetChild(i).gameObject.SetActive(true);
}
otherNowGaugeCnt = otherGaugeCnt;
}
}
코스트를 소모할 때마다 호출되며, 인자로 나인지 상대인지, 사용되는 코스트의 값을 갖는다.
public void ConsumeCost(bool isMine, int cost)
{
int cnt = isMine ? myNowGaugeCnt : otherNowGaugeCnt;
GameObject Gauge = isMine ? myGauge : otherGauge;
cnt = cnt -cost;
if(isMine)
myNowGaugeCnt -=cost;
else
otherNowGaugeCnt -=cost;
for(int i=0; i<22;i++)
{
Gauge.transform.GetChild(i).gameObject.SetActive(false);
}
for(int i=0;i<cnt;i++)
{
Gauge.transform.GetChild(i).gameObject.SetActive(true);
}
}