public IEnumerator PlayCard()
{
//还是不正确 应该弹出是否要打牌
EventCallback0 action = () =>
{
IsState = true;
};
PanelManager.Inst.Warn("是否要打牌!", action);
float delayTime = 200f;
while (PanelManager.Inst.GetWarnState() != 0)
{
delayTime -= 0.1f;
yield return new WaitForSeconds(0.1f);
}
if (IsState)
{
PanelManager.Inst.EnterState(0);
float time = 10;
while (time > 0)
{
//关闭界面
//可能出现点数不足的情况
if (cantSelect)
{
PanelManager.Inst.Warn($"点数不足,无法打出该牌,请重新选择");
cantSelect = false;
yield return new WaitForSeconds(1);
}
PanelManager.Inst.Warn($"请选择现有的牌打出一张!\n倒计时{(int)(time -= 0.1f)}s");
yield return new WaitForSeconds(0.1f);
if (!IsState)
{
CurrentPoint -= selectCard.costPoint;
PanelManager.Inst.CloseWarn();
currHandCardNum--;
PanelManager.Inst.ExitState();
yield break;
}
}
//没有打牌
IsState = false;
PanelManager.Inst.CloseWarn();
PanelManager.Inst.ExitState();
yield break;
}
}
public IEnumerator AutoSendCard()
{
if (libraryModel == null)
{
yield break;
}
ReGetLib();
while (UnityRandom.Inst.GetWeightedIndex(weights) != -1)
{
RoundCount++;
PanelManager.Inst.Warn($"当前回合数{RoundCount}");
yield return new WaitForSeconds(1f);
PanelManager.Inst.CloseWarn();
yield return StartCoroutine(DiscardCard(DataManager.Inst.autoSendCardNum));
if (CurrentPoint >= DataManager.Inst.allPoint)
{
CurrentPoint = DataManager.Inst.allPoint;
}
else
{
int add = CurrentPoint >= DataManager.Inst.limit ? DataManager.Inst.limitAfterAdd : DataManager.Inst.limitBeforeAdd;
CurrentPoint += add;
//判断是否超过
if (CurrentPoint >= DataManager.Inst.limit)
{
yield return StartCoroutine(PlayCard());
}
}
//yield return new WaitForSeconds(timer);
}
}
public IEnumerator DiscardCard(int num)
{
int overFlow = (currHandCardNum + DataManager.Inst.autoSendCardNum) - DataManager.Inst.maxHandCard;
if (overFlow > 0)
{
DiscardState = true;
PanelManager.Inst.EnterState(1);
float time = 1000;
while (time > 0)
{
PanelManager.Inst.Warn($"必须要丢弃{overFlow}张卡!");
yield return new WaitForSeconds(0.1f);
if (!IsState)
{
overFlow--;
currHandCardNum--;
if (overFlow <= 0)
{
DiscardState = false;
PanelManager.Inst.ExitState();
SendCard(num);
yield break;
}
else
{
IsState = true; //需要继续丢弃
}
}
}
}
else
{
SendCard(num);
}
}
用unity协程写的发牌程序
最新推荐文章于 2021-12-13 14:09:05 发布