本节目标
当玩家出牌的时候会扣除能量,当能量不够的时候不能出牌。每个玩家回合开始的时候恢复能量。
代码实现
玩家身上的能量
首先创建一个IntVariable
来表示玩家当前的能量,其中该值发生变化的时候会产生PlayerManaChangedEvent
事件
然后再写代码,使用这个IntVariable
变量
using UnityEngine;
public class Player : CharacterBase
{
public IntVariable playerMana;
public int maxMana;
public int CurrentMana
{
get => playerMana.currentValue;
set => playerMana.SetValue(value);
}
private void OnEnable()
{
playerMana.maxValue = maxMana;
CurrentMana = playerMana.maxValue;
}
/// <summary>
/// 监听事件函数
/// </summary>
public void newTurn()
{
CurrentMana = maxMana;
}
public void UpdateMana(int cost)
{
CurrentMana -= cost;
if (CurrentMana <= 0)
{
CurrentMana = 0;
}
}
}
如上面代码所示,我们在玩家身上增加了一个最大能量,以及当前能量。在OnEnable
的时候赋值最大能量
然后监听PlayerTurnBegin
事件,当它发生的时候调用Player.newTurn
开始新的回合,也就是说将当前mana值设置为最大mana值
然后监听CostEvent
事件,当它发生的时候调用Player.UpdateMana
,从当前的Mana值扣去CostEvent
传递的Mana值。当玩家当前的Mana值发生变化的时候,就会触发playerMana.ValueChangeEvent
GameplayPanel 监听事件
GameplayPanel 需要监听两类事件,它们分别是EnemyTurnBegin
、PlayerTurnBegin
这一类,以及PlayerManaChangedEvent
这一类
当EnemyTurnBegin
和PlayerTurnBegin
事件产生的时候,分别会进入敌人和玩家的回合。敌人回合时,结束回合按钮是不能点击的,上方的标签要显示红色的敌方回合文字。玩家回合时,结束回合按钮是可以点击的,上方的标签要显示白色的玩家回合文字。
当PlayerManaChangedEvent
事件产生的时候,就会把当前界面上的数字显示为传过来的Mana数值
打出卡牌的时候要消耗能量
需要定义一个CostEvent
当卡牌被打出的时候,需要广播消耗的能量
Player 会监听这个CostEvent
,然后执行扣能量操作
判断卡牌能否被打出
CardDeck 每次抽卡和弃卡之后,都会执行SetCardLayout
,因此我们可以在这个方法里面修改每张卡牌的状态
Card 里面需要添加一下这个方法,当前是否可用的条件是cardData.cost <= player.CurrentMana
,可用时标为绿色,不可用时标为红色
然后在CardDragHandler
里面,判断一下当前卡牌是否可用,如果不可用,那么就不能进行拖拽操作
最终效果
开始游戏,在TurnBaseManager
上面点击GameStart
然后可以看到卡牌的数字都是绿色的
当能量不够的时候,卡牌上面的数字就变成红色了,并且也不能被打出了
回合结束之后,能量回到3点
项目相关代码
代码仓库:https://gitee.com/nbda1121440/DreamOfTheKingdom.git
标签:判断,playerMana,31,卡牌,玩家,回合,能量,public From: https://www.cnblogs.com/hellozjf/p/18058229