/// <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); }
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; }
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(); }
/// <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; } }
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); }