/// <summary>
        /// Request to use players skill
        /// </summary>
        /// <param name="skillID"></param>
        public void OnPlayerUseSkill(int skillID)
        {
            UseSkillRequest request = new UseSkillRequest();

            request.SkillID = skillID;

            NetworkManager.Instance.SendUseSkillData(request);
        }
示例#2
0
    private void CreateSyncRequest()
    {
        GameObject playerSyncRequest = new GameObject("PlayerSyncRequest");

        moveRequest = playerSyncRequest.AddComponent <MoveRequest>();
        moveRequest.PlayerManager     = this;
        useSkillRequest               = playerSyncRequest.AddComponent <UseSkillRequest>();
        useSkillRequest.PlayerManager = this;
        useItemRequest = playerSyncRequest.AddComponent <UseItemRequest>();
        useItemRequest.PlayerManager = this;
        attackRequest = playerSyncRequest.AddComponent <AttackRequest>();
        attackRequest.PlayerManager = this;
    }
示例#3
0
        void Start()
        {
            // 释放资源
            UIManager.Instance.ClearAll();
            ResourcesManager.Instance.ReleaseAll();

            // 获取请求
            m_InitComplete        = GetComponent <InitCompleteRequest>();
            m_DamageRequest       = GetComponent <DamageRequest>();
            m_HeroMoveRequest     = GetComponent <HeroMoveRequest>();
            m_BuyRequest          = GetComponent <BuyItemRequest>();
            m_UpgradeSkillRequest = GetComponent <UpgradeSkillRequest>();
            m_UseSkillRequest     = GetComponent <UseSkillRequest>();
            m_EffectEndRequest    = GetComponent <EffectEndRequest>();

            // 加载资源
            ResourcesManager.Instance.Load(Paths.UI_BUY, typeof(AudioClip));

            // 发送进入游戏的请求
            GetComponent <EnterBattleRequest>().SendRequest();
        }
示例#4
0
        /// <summary>
        /// Players skill using request processing
        /// </summary>
        /// <param name="clientID"></param>
        /// <param name="request"></param>
        public void ProcessUseSkillRequest(int clientID, UseSkillRequest request)
        {
            Player player = PlayersManager.GetPlayer(clientID);

            if (player == null)
            {
                Console.WriteLine($"Can't find player {clientID}");
                return;
            }

            if (player.CurrentMatch == null)
            {
                Console.WriteLine($"Player {player.ClientID} is not in the game");
                return;
            }

            GameMatch         match       = player.CurrentMatch;
            Field             playerField = match.Player1 == player ? match.Field1 : match.Field2;
            Field             enemyField  = match.Player1 == player ? match.Field2 : match.Field1;
            Player            enemy       = match.Player1 == player ? match.Player2 : match.Player1;
            List <EffectData> effectsData = new List <EffectData>();

            FieldManager.RefreshGlobalEffects(playerField, player);
            FieldManager.RefreshGlobalEffects(enemyField, enemy);

            FieldManager.RefreshDurationEffects(playerField);
            FieldManager.RefreshDurationEffects(enemyField);

            if (request.SkillID != 0 && request.SkillID != 1)
            {
                SendError(player, ErrorType.ImpossibleTurn);
                return;
            }

            int   playerUserIndex = match.Player1 == player ? 1 : 2;
            Skill skill           = player.ActiveSkills[request.SkillID];

            if (!player.TrySpendEnergy(skill.Cost))
            {
                SendError(player, ErrorType.NotEnoughEnergy);
                return;
            }
            else
            {
                EffectData hData = new EffectData();
                hData.EffectType     = EffectType.EnergyChanged;
                hData.Data           = new Dictionary <string, object>();
                hData.Data["Target"] = player.InGameID;
                hData.Data["Value"]  = -skill.Cost;
                effectsData.Add(hData);
            }

            effectsData.AddRange(SkillsManager.ApplySkillEffect(match, playerUserIndex, skill.Name));

            GameStateResponse response = new GameStateResponse
            {
                GameState = GetPlayer1MatchStateData(match),
                Effects   = effectsData.ToArray(),
            };

            Server.SendDataToClient(match.Player1.ClientID, (int)DataTypes.GameStateResponse, response);

            if (match.GameMode == GameMode.Practice)
            {
                FieldManager.SetDefaultState(playerField);
                FieldManager.SetDefaultState(enemyField);

                if (CheckForGameEnd(match, out GameEndResponse gameEndResponseDebug))
                {
                    GiveMatchReward(match, gameEndResponseDebug.PlayerWon);
                    RecalculateRating(match, gameEndResponseDebug.PlayerWon);
                    PlayersManager.UpdatePlayer(match.Player1);

                    MatchManager.DropMatch(player.CurrentMatch);

                    gameEndResponseDebug.PlayerStats = match.Player1.GetStatsData();
                    Server.SendDataToClient(match.Player1.ClientID, (int)DataTypes.GameEndResponse, gameEndResponseDebug);
                }
                return;
            }

            response = new GameStateResponse
            {
                GameState = GetPlayer2MatchStateData(match),
                Effects   = effectsData.ToArray(),
            };
            Server.SendDataToClient(match.Player2.ClientID, (int)DataTypes.GameStateResponse, response);

            FieldManager.SetDefaultState(playerField);
            effectsData.AddRange(FieldManager.ClearDestroyedBlocks(playerField, match, player));
            FieldManager.SetDefaultState(enemyField);
            effectsData.AddRange(FieldManager.ClearDestroyedBlocks(enemyField, match, enemy));

            if (CheckForGameEnd(match, out GameEndResponse gameEndResponse))
            {
                GiveMatchReward(match, gameEndResponse.PlayerWon);
                RecalculateRating(match, gameEndResponse.PlayerWon);
                PlayersManager.UpdatePlayer(match.Player1);
                PlayersManager.UpdatePlayer(match.Player2);

                MatchManager.DropMatch(player.CurrentMatch);

                gameEndResponse.PlayerStats = match.Player1.GetStatsData();
                Server.SendDataToClient(match.Player1.ClientID, (int)DataTypes.GameEndResponse, gameEndResponse);

                gameEndResponse.PlayerStats = match.Player2.GetStatsData();
                Server.SendDataToClient(match.Player2.ClientID, (int)DataTypes.GameEndResponse, gameEndResponse);

                return;
            }
        }
示例#5
0
    void Start()
    {
        facade.PlayBGM("pk");
        //初始化各种请求
        ActionPointIcon_Finish         = Resources.Load <Sprite>("Image/Icon/actionFinish");
        ActionPointIcon_Origin         = Resources.Load <Sprite>("Image/Icon/actionOrigin");
        showTimeRequest                = transform.GetComponent <ShowTimerRequest>();
        startGameRequest               = transform.GetComponent <StartGameRequest>();
        outCardRequest                 = transform.GetComponent <OutCardRequest>();
        gameOverRequest                = transform.GetComponent <GameOverRequest>();
        effectOverRequest              = transform.GetComponent <EffectOverRequest>();
        useSkillRequest                = transform.GetComponent <UseSkillRequest>();
        showTimeRequest.pvpFightPanel  = this;
        startGameRequest.pvpFightPanel = this;
        outCardRequest.pvpFightPanel   = this;
        gameOverRequest.pvpFightPanel  = this;
        useSkillRequest.pvpFightPanel  = this;
        //初始化信息表
        pvpPlayerInfo   = facade.GetPVPPlayerInfo();
        buff_info_dict  = facade.GetBuffInfoDict();
        card_info_dict  = facade.GetCardEffectDict();
        skill_info_dict = facade.GetAllSkillInfoDict();
        //初始化出牌信息字典
        OutCardInfoDict.Add(ElementType.Fire, 0);
        OutCardInfoDict.Add(ElementType.Water, 0);
        OutCardInfoDict.Add(ElementType.Earth, 0);
        OutCardInfoDict.Add(ElementType.Wind, 0);
        OutCardInfoDict.Add(ElementType.Thunder, 0);
        OutCardInfoDict.Add(ElementType.Dark, 0);
        SetGameInfo(facade.GetPVPInfo());
        //SynchroPlayerCard(playerCardInfo);
        //初始化显示卡牌列表
        cardInfoDict.Add(ElementType.Fire, 0);
        cardInfoDict.Add(ElementType.Water, 0);
        cardInfoDict.Add(ElementType.Earth, 0);
        cardInfoDict.Add(ElementType.Wind, 0);
        cardInfoDict.Add(ElementType.Thunder, 0);
        cardInfoDict.Add(ElementType.Dark, 0);

        //创建人物模型,设置技能
        string[] strs = pvpPlayerInfo.Split(',');
        player_hero = facade.getCardInfoDict()[playerHeroCardID];
        if (strs[2] != "00000")
        {
            staff_hero        = facade.getCardInfoDict()[int.Parse(strs[2])];
            StaffSkillTrigger = staff_hero.Staff_skill_self.isActionSkill ?
                                GameObject.Instantiate(Resources.Load <GameObject>("Prefab/AssistSkill"), transform.Find("PanelFight/PanelPlayerSkill/AssistSkill").transform).transform :
                                GameObject.Instantiate(Resources.Load <GameObject>("Prefab/AssistPassiveSkill"), transform.Find("PanelFight/PanelPlayerSkill/AssistSkill").transform).transform;
            StaffSkillTrigger.transform.localPosition = new Vector3(0, 0, 0);
            transform.Find("PanelFight/PanelPlayerSkill/AssistSkill").GetComponent <Image>().sprite = Resources.Load <Sprite>(staff_hero.SkillIcon_path);
            player_hero.Staff_skill_other = staff_hero.Staff_skill_self;
        }
        else
        {
            transform.Find("PanelFight/PanelPlayerSkill/AssistSkill").gameObject.SetActive(false);
        }
        ActionSkillTrigger = GameObject.Instantiate(Resources.Load <GameObject>("Prefab/ActionSkill"), transform.Find("PanelFight/PanelPlayerSkill/ActiveSkill").transform).transform;
        transform.Find("PanelFight/PanelPlayerSkill/ActiveSkill").GetComponent <Image>().sprite = Resources.Load <Sprite>(player_hero.SkillIcon_path);

        transform.Find("PanelFight/PanelPlayerSkill/PassiveSkillFirst").GetComponent <SkillCtrl>().skill  = player_hero.Prossive_skill_1;
        transform.Find("PanelFight/PanelPlayerSkill/PassiveSkillSecond").GetComponent <SkillCtrl>().skill = player_hero.Prossive_skill_2;
        transform.Find("PanelFight/PanelPlayerSkill/PassiveSkillThird").GetComponent <SkillCtrl>().skill  = player_hero.Prossive_skill_3;
        transform.Find("PanelFight/PanelPlayerSkill/ActiveSkill").GetComponent <SkillCtrl>().skill        = player_hero.Action_skill;
        transform.Find("PanelFight/PanelPlayerSkill/AssistSkill").GetComponent <SkillCtrl>().skill        = player_hero.Staff_skill_other;
        transform.Find("PanelFight/PanelPlayerSkill/AssistSkill").GetComponent <AssistSkillCtrl>().skill  = player_hero.Staff_skill_other;

        enemy_hero    = facade.getCardInfoDict()[enemyHeroCardID];
        player_heroGO = GameObject.Instantiate(Resources.Load <GameObject>(player_hero.FightModel_path), transform.Find("PanelFight/PanelFightInfo/player").transform);
        player_heroGO.GetComponent <AnimationCtrl>().isPVP = true;
        enemy_heroGO = GameObject.Instantiate(Resources.Load <GameObject>(enemy_hero.FightModel_path), transform.Find("PanelFight/PanelFightInfo/enemy").transform);
        enemy_heroGO.GetComponent <AnimationCtrl>().isPVP = true;
        enemy_heroGO.tag = "Enemy";


        //获取玩家信息面板
        playerInfo = transform.Find("PanelFight/PanelPlayerInfo").transform;
        //获取血量UI
        playerHpSlider = playerInfo.transform.Find("SliderPlayerHp").GetComponent <Slider>();
        //获取行动点UI
        playerActionPointSlider = playerInfo.transform.Find("SliderPlayer").GetComponent <Slider>();
        playerActionScrollView  = playerInfo.transform.Find("ScrollViewPlayer/Viewport/Content").transform;
        //获取BUFF列表UI
        playerBuffScrollView = playerInfo.Find("ScrollViewPlayerBuff/Viewport/Content").transform;


        //获取敌人信息面板
        enemyInfo = transform.Find("PanelFight/PanelEnemyInfo").transform;
        //获取血量UI
        enemyHpSlider = enemyInfo.transform.Find("SliderEnemyHp").GetComponent <Slider>();
        //获取行动点UI
        enemyActionPointSlider = enemyInfo.transform.Find("SliderEnemy").GetComponent <Slider>();
        enemyActionScrollView  = enemyInfo.transform.Find("ScrollViewEnemy/Viewport/Content").transform;
        //获取BUFF列表UI
        enemyBuffScrollView = enemyInfo.Find("ScrollViewEnemyBuff/Viewport/Content").transform;

        maskPanel      = transform.Find("MaskPanel").transform;
        maskLeftPanel  = maskPanel.transform.Find("LeftMask").transform;
        maskRightPanel = maskPanel.transform.Find("RightMask").transform;
        showTimePanel  = maskPanel.transform.Find("showtime").transform;
        vsPanel        = maskPanel.transform.Find("VS").transform;



        //播放卡牌动画
        transform.Find("white_image").transform.GetComponent <Animation>().Play();
        transform.Find("DrawCard").transform.GetComponent <Animation>().Play();
        transform.Find("PanelFight/PanelCardInfo/ScrollViewCard").transform.GetComponent <Animation>().Play();

        //出牌按钮事件
        transform.Find("DrawCard").GetComponent <Button>().onClick.AddListener(OnOutCardClick);
        transform.Find("white_image").GetComponent <Button>().onClick.AddListener(OnDownCardClick);


        //获取战斗结算面板
        PanelLost = transform.Find("PanelLost").transform;
        PanelWin  = transform.Find("PanelWin").transform;
        //战斗结算跳转事件
        PanelLost.Find("Button (1)").GetComponent <Button>().onClick.AddListener(OnGameOverClick);
        PanelWin.Find("Button").GetComponent <Button>().onClick.AddListener(OnGameOverClick);

        //技能使用事件
        transform.Find("PanelFight/PanelPlayerSkill/ActiveSkill").GetComponent <Button>().onClick.AddListener(delegate() { OnSkillBtnClick(player_hero.Active_skill_id.ToString()); });
        transform.Find("PanelFight/PanelPlayerSkill/AssistSkill").GetComponent <Button>().onClick.AddListener(delegate() { OnSkillBtnClick(player_hero.Staff_skill_other.Skill_id.ToString()); });

        fightInfoPanel    = transform.Find("PanelFight/PanelFightInfo").transform;
        cardPreview_Panel = transform.Find("CardPreview_Panel").transform;

        playerAnimator = player_heroGO.GetComponent <Animator>();
        enemyAnimator  = enemy_heroGO.GetComponent <Animator>();


        transform.Find("Preview_Button").GetComponent <Button>().onClick.AddListener(OnCardPreviewClick);

        if (PlayerPrefs.GetInt("PreviewTopControlBool_Save") == 0)
        {
            useCardPreview = true;
            cardPreview_Panel.gameObject.SetActive(true);
            transform.Find("Preview_Button").GetComponent <Image>().sprite = Resources.Load <Sprite>("Image/Icon/previewWait");
        }
        else
        {
            useCardPreview = false;
            transform.Find("Preview_Button").GetComponent <Image>().sprite = Resources.Load <Sprite>("Image/Icon/preview");
        }

        playerBlackHole = transform.Find("PanelFight/PanelCardEffect/PlayerCard").gameObject;
        enemyBlackHole  = transform.Find("PanelFight/PanelCardEffect/EnemyCard").gameObject;

        SetStartInfo();


        if (facade.GetPVPState())
        {
            maskPanel.gameObject.SetActive(false);
        }
    }
 public void SendUseSkillData(UseSkillRequest request)
 {
     client.SendData((int)DataTypes.UseSkillRequest, request);
 }