首页 > 其他分享 >30. 回合转换

30. 回合转换

时间:2024-03-06 20:58:34浏览次数:26  
标签:转换 timeCounter isPlayerTurn 30 回合 事件 TurnBaseManager public

本节目标

当我点击右下角回合切换按钮的时候,会从我的回合切换到敌人回合,然后敌人回合经过几秒后回到我的回合

代码实现

TurnBaseManager 广播 playerTurnBegin 事件

首先我们需要一个TurnBaseManager类,用于管理当前是哪个回合

using UnityEngine;

public class TurnBaseManager : MonoBehaviour
{
    private bool isPlayerTurn = false;
    private bool isEnemyTurn = false;
    public bool battleEnd = true;

    private float timeCounter;
    public float enemyTurnDuration;
    public float playerTurnDuration;

    [Header("事件广播")]
    public ObjectEventSO playerTurnBegin;
    public ObjectEventSO enemyTurnBegin;
    public ObjectEventSO enemyTurnEnd;

    private void Update() 
    {
        if (battleEnd)    
        {
            return;
        }

        if (isEnemyTurn)
        {
            timeCounter += Time.deltaTime;
            if (timeCounter >= enemyTurnDuration)
            {
                timeCounter = 0;
                // 敌人回合结束
                EnemyTurnEnd();
                // 玩家回合开始
                isPlayerTurn = true;
            }
        }

        if (isPlayerTurn)
        {
            timeCounter += Time.deltaTime;
            if (timeCounter >= playerTurnDuration)
            {
                timeCounter = 0f;
                // 玩家回合开始
                PlayerTurnBegin();
                isPlayerTurn = false;
            }
        }
    }

    [ContextMenu("Game Start")]
    public void GameStart()
    {
        isPlayerTurn = true;
        isEnemyTurn = false;
        battleEnd = false;
        timeCounter = 0;
    }

    public void PlayerTurnBegin()
    {
        playerTurnBegin.RaiseEvent(null, this);
    }

    public void EnemyTurnBegin()
    {
        isEnemyTurn = true;
        enemyTurnBegin.RaiseEvent(null, this);
    }

    public void EnemyTurnEnd()
    {
        isEnemyTurn = false;
        enemyTurnEnd.RaiseEvent(null, this);
    }
}

这段代码的运行逻辑如下,最一开始,我们执行GameStart,然后isPlayerTurn=ture,然后在Update中就会调用PlayerTurnBegin(),然后广播playerTurnBegin事件

CardDeck 监听 playerTurnBegin 事件

当 CardDeck 收到 PlayerTurnBegin 事件之后,会调用CardDeck.NewTurnDrawCards方法

GameplayPanel 广播 PlayerTurnEnd 事件

当玩家打完牌之后,就会点击右下角的回合结束按钮。回合结束按钮绑定了OnEndTurnButtonClicked方法,会广播playerTurnEndEvent事件

CardDeck 监听 PlayerTurnEnd 事件

OnPlayerTurnEnd方法中,首先将手牌里面的牌都添加到弃牌堆中,然后丢弃这些牌,同时发送事件更新弃牌堆数量

TurnBaseManager 监听 PlayerTurnEnd 事件

当 TurnBaseManager 收到PlayerTurnEnd事件之后,就会调用方法TurnBaseManager.EnemyTurnBegin,然后就会广播enemyTurnBegin事件

好像暂时没有地方接收enemyTurnBegin事件

EnemyTurnBegin方法中,isEnemyTurn=true,然后在Update里面就会等待一段实现,然后执行EnemyTurnEnd(这里会广播enemyTurnEnd事件),然后让isPlayerTurn=true,最后回到玩家回合

界面数据

项目相关代码

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

标签:20240306_1948

标签:转换,timeCounter,isPlayerTurn,30,回合,事件,TurnBaseManager,public
From: https://www.cnblogs.com/hellozjf/p/18057549

相关文章

  • 20240306打卡
    第二周第一天第二天第三天第四天第五天第六天第七天所花时间1h5h1h代码量(行)7011662博客量(篇)111知识点了解学会详细地全局路由配置有关动态规划算法python基础知识使用今天打卡主要是对于昨天建民老师讲课的回顾总结。首......
  • 为电子工程师量身定制:PW2052芯片,实现5V到3.3V/2.5V/1.2V的精确转换,低功耗首选
    描述在现代电子设备日益普及的今天,电源管理成为了一个不可忽视的关键环节。PW2052高效同步直流降压转换器正是为了满足这一需求而诞生的。它以其高效率和高频特性,为便携式系统带来了革命性的电池寿命延长方案。PW2052转换器拥有100%占空比特性,这意味着在电源转换过程中能量损失......
  • qgis 3.30 python开发环境搭建
     1.使用mamba加速conda下载qgiscondainstall-cconda-forge-nbasemamba2.创建qgis虚拟环境condacreate-nqgispython=3.11condaactivateqgis(管理员CMD)mambainstall-cconda-forgeqgis=3.30.0mambainstall-cconda-forgerasteriomambainstall-cco......
  • React jsx 语法解析 & 转换原理
    jsx介绍jsx是一种JavaScript的语法扩展(eXtension),也在很多地方称之为JavaScriptXML,因为看起就是一段XML语法,用于描述UI界面,并且可以和JavaScript代码结合使用。比起vue中的模板语法,更加灵活,且不需要学习模板语法中的特定标签,比如:v-if、v-for、v-bind等,而是直接使用JavaScript语......
  • LY1154 [ 20230320 CQYC省选模拟赛 T1 ] 选拔士兵
    题意P和T各有\(n\)个课程。P的课程类型由\(a_i\)表示,价值为\(x_i\)。T的课程类型由\(b_i\)表示,价值为\(y_i\)。同样的课程不能上两遍。需要满足P和T的课程各在同一区间内。不选输出\([0,0]\),问使得价值最大的方案。Sol非常好数据结构题,使我的大脑旋转......
  • 530. 二叉搜索树的最小绝对差c
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*/voidinorder(structTreeNode*root,int*t,int*pre){if(!root)return;inorder(root->left,t,pr......
  • mysql cpu 1300% 耗尽服务器cpu资源 系统变慢问题排查解决
    每到下午用户使用高峰期发现16核的服务器mysql的cpu经常占用超过1300% 总cpu占用95%以上,以前0.1秒的查询居然要查询10几秒用showprocesslist  命令查看mysql发现很多 select*frome_task_assignment_odmwheretask_code='xxx'看了下这个表有400多万数据,task_code没......
  • 弧长角度相互转换
    弧长角度转换推理圆的周长公式C=2πr角度-》弧长弧长为角度对应的周长部分/半径,即假设半径r=1,则周长为2π;360度对应的弧度为2π,1°=2π/360=π/180≈0.0175;所以1°对应的弧度为0.0175。弧长-》角度因为弧长=角度π/180,所以角度=弧长180/π,1弧长对应的角度为180/π≈57.2958°......
  • 230626
    hackxor渗透平台的环境配置也可看视频https://www.bilibili.com/video/BV13t4y1C7dr/1、解压hackxor11.7z文件,用vmvare虚拟机打开hackxor.vmx,可发现是fedora14,口令root|hackxorFedora是一个基于RPM的Linux发行版,只包含自由、开源软件2、/usr/share/tomcat6可看到所有......
  • 20240305-日记(补-含0303-0304)
    我今天要是再不补,我这个目标可能就戛然而止了。这三天过得就跟三明治一样,搬家-加班-搬家。虽然想象中能搬到新家,会很开心,但是怎么说呢,还是没有一种很踏实的归属感。而且有时候我说话就是很绝,断自己和他人后路的想法。这几天也不算一点时间都挤不出来,看完了《降世神通3》,《致命游......