31. 出牌能量判断

本节目标

当玩家出牌的时候会扣除能量,当能量不够的时候不能出牌。每个玩家回合开始的时候恢复能量。

代码实现

玩家身上的能量

首先创建一个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 需要监听两类事件,它们分别是EnemyTurnBeginPlayerTurnBegin这一类,以及PlayerManaChangedEvent这一类

EnemyTurnBeginPlayerTurnBegin事件产生的时候,分别会进入敌人和玩家的回合。敌人回合时,结束回合按钮是不能点击的,上方的标签要显示红色的敌方回合文字。玩家回合时,结束回合按钮是可以点击的,上方的标签要显示白色的玩家回合文字。

PlayerManaChangedEvent事件产生的时候,就会把当前界面上的数字显示为传过来的Mana数值

打出卡牌的时候要消耗能量

需要定义一个CostEvent

当卡牌被打出的时候,需要广播消耗的能量

Player 会监听这个CostEvent,然后执行扣能量操作

判断卡牌能否被打出

CardDeck 每次抽卡和弃卡之后,都会执行SetCardLayout,因此我们可以在这个方法里面修改每张卡牌的状态

Card 里面需要添加一下这个方法,当前是否可用的条件是cardData.cost <= player.CurrentMana,可用时标为绿色,不可用时标为红色

然后在CardDragHandler里面,判断一下当前卡牌是否可用,如果不可用,那么就不能进行拖拽操作

最终效果

开始游戏,在TurnBaseManager上面点击GameStart

然后可以看到卡牌的数字都是绿色的

当能量不够的时候,卡牌上面的数字就变成红色了,并且也不能被打出了

回合结束之后,能量回到3点

项目相关代码

代码仓库:https://gitee.com/nbda1121440/DreamOfTheKingdom.git

标签:20240307_0916

posted @   hellozjf  阅读(51)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示