// 手札や山札の情報のセット public void SyncDeck(SyncDeckInfo syncData) { // 相手から送られてくる前提のコード、 // 手札・山札etc情報同期 deckManager.Sync(syncData); }
public SyncDeckInfo GetSyncDeckInfo() { // ex構造体作成 SyncDeckInfo info = new SyncDeckInfo(); int num; //exInfo.hand = new int[9]; //exInfo.bochi = new int[15]; //exInfo.tuihou = new int[15]; //// 手札同期 //if (num == 0) exInfo.hand[0] = -1; //else if (num < 9) exInfo.hand[num] = -1; //for (int i = 0; i < num; i++) //{ // exInfo.hand[i] = deckManager.GetHandCard(i).id; //} // 山札同期 info.yamahuda = new int[15]; num = deckManager.GetNumYamahuda(); if (num == 0) { info.yamahuda[0] = -1; } else if (num < 15) { info.yamahuda[num] = -1; } for (int i = 0; i < num; i++) { info.yamahuda[i] = deckManager.GetYamahudaCard(i).id; } //// 墓地同期 //num = deckManager.GetNumBochi(); //if (num == 0) exInfo.bochi[0] = -1; //else if (num < 15) exInfo.bochi[num] = -1; //for (int i = 0; i < num; i++) //{ // exInfo.bochi[i] = deckManager.GetCemeteryCard(i).id; //} //// 追放同期 //num = deckManager.GetNumTsuihou(); //if (num == 0) exInfo.tuihou[0] = -1; //else if (num < 15) exInfo.tuihou[num] = -1; //for (int i = 0; i < num; i++) //{ // exInfo.tuihou[i] = deckManager.GetExpulsionCard(i).id; //} //Info1 exInfo; //exInfo.a = 114; //exInfo.b = 514; //exInfo.pos = new Vector3(810, 19, 19); return(info); }
public void Marigan(SyncDeckInfo info) { // 手札とか山札リセット //deckManager.SetDeckData(deckData); deckManager.Marigan(info); isMarigan = true; // 手札・デッキ情報送信 //SendSyncDeckInfo(); }
public void Marigan(SyncDeckInfo syncData) { Clear(); foreach (int yamahudaID in syncData.yamahuda) { if (yamahudaID == -1) { break; } yamahuda.Add(CardDataBase.GetCardData(yamahudaID)); } cardObjectManager.Marigan(yamahuda.ToArray()); }
public void Sync(SyncDeckInfo syncData) { Clear(); //foreach (int handID in syncData.hand) //{ // if (handID == -1) break; // hand.Add(CardDataBase.GetCardData(handID)); //} foreach (int yamahudaID in syncData.yamahuda) { if (yamahudaID == -1) { break; } // ★★★嫌な予感がする…(参照) //var cardData = new CardData(); //cardData = CardDataBase.GetCardData(yamahudaID); //var abilityData = cardData.GetAbilityData(); //if(abilityData != null) //{ // abilityData.SetMyPlayerFlag(player.isMyPlayer); //} var cardData = CardDataBase.GetCardData(yamahudaID); yamahuda.Add(cardData); } //foreach (int bochiID in syncData.bochi) //{ // if (bochiID == -1) break; // bochi.Add(CardDataBase.GetCardData(bochiID)); //} //foreach (int tuihouID in syncData.tuihou) //{ // if (tuihouID == -1) break; // tsuihou.Enqueue(CardDataBase.GetCardData(tuihouID)); //} // 向こうから来るやつにつかう cardObjectManager.SetDeckData(yamahuda.ToArray(), player.isMyPlayer); // その情報をもとにカードオブジェクト更新 //cardObjectManager.UpdateHand(hand, player); //cardObjectManager.UpdateYamahuda(yamahuda, player); }
//public bool isHaveInterceptCard() //{ // foreach (Player player in players) // if (player.isHaveInterceptCard()) return true; // return false; //} public bool HandleMessage(MessageInfo message) { // switchにすると構造体受け取りでバグる if (message.messageType == MessageType.Marigan) { // byte[]→構造体 SyncDeckInfo syncDeckInfo = new SyncDeckInfo(); message.GetExtraInfo <SyncDeckInfo>(ref syncDeckInfo); players[message.fromPlayerID].Marigan(syncDeckInfo); return(true); } if (message.messageType == MessageType.NoMarigan) { players[message.fromPlayerID].NoMarigan(); return(true); } if (message.messageType == MessageType.SetStrikerOK) { players[message.fromPlayerID].JunbiKanryoON(); // ボタン非表示 if (players[message.fromPlayerID].isMyPlayer) { uiManager.DisableSetStrikerButton(); } return(true); } if (message.messageType == MessageType.SetStrikerPass) { players[message.fromPlayerID].JunbiKanryoON(); players[message.fromPlayerID].PushedNextButtonON(); // ボタン非表示 if (players[message.fromPlayerID].isMyPlayer) { uiManager.DisableSetStrikerButton(); } return(true); } // もう一回NEXT押してどうぞ if (message.messageType == MessageType.AgainNextButton) { players[message.fromPlayerID].JunbiKanryoOFF(); players[message.fromPlayerID].PushedNextButtonOFF(); return(true); } if (message.messageType == MessageType.SetStrikerOK) { players[message.fromPlayerID].JunbiKanryoON(); return(true); } if (message.messageType == MessageType.SetStriker) { if (message.exInfo == null) { return(false); } // byte[]→構造体 SelectCardIndexInfo setCardInfo = new SelectCardIndexInfo(); message.GetExtraInfo <SelectCardIndexInfo>(ref setCardInfo); //IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(setCardInfo)); //Marshal.Copy(message.exInfo, 0, ptr, Marshal.SizeOf(setCardInfo)); //setCardInfo = (SetCardInfo)Marshal.PtrToStructure(ptr, setCardInfo.GetType()); //Marshal.FreeHGlobal(ptr); Debug.Log("受信: プレイヤー" + message.fromPlayerID + "が手札" + setCardInfo.index + "のカードをセットしました"); players[message.fromPlayerID].SetCard(setCardInfo); // ボタン表示 if (players[message.fromPlayerID].isMyPlayer) { uiManager.EnableSetStrikerButton(); } return(true); } if (message.messageType == MessageType.SetSupport) { if (message.exInfo == null) { return(false); } // byte[]→構造体 SelectCardIndexInfo setCardInfo = new SelectCardIndexInfo(); message.GetExtraInfo <SelectCardIndexInfo>(ref setCardInfo); Debug.Log("受信: プレイヤー" + message.fromPlayerID + "が手札" + setCardInfo.index + "のサポートカードを発動"); players[message.fromPlayerID].SetSupport(setCardInfo); // ★シーンメインのステートをサポート待ちのステートに変更 Debug.Assert(sceneMain, "PlayerManagerがscemeMainアタッチされてない"); sceneMain.ChangeState(SceneMainState.SupportExcusionState.GetInstance()); // ★相手プレイヤーがすでにOKボタンを押していたら、もう一度表示させる。 var youPlayer = GetCPUPlayerByID(message.fromPlayerID); if (youPlayer.isPushedJunbiKanryo) { // もう一回NEXT押してどうぞ youPlayer.JunbiKanryoOFF(); // ボタン表示 if (youPlayer.isMyPlayer) { uiManager.EnableSetStrikerButton(); } } return(true); } if (message.messageType == MessageType.SetIntercept) { if (message.exInfo == null) { return(false); } // byte[]→構造体 SelectCardIndexInfo setCardInfo = new SelectCardIndexInfo(); message.GetExtraInfo <SelectCardIndexInfo>(ref setCardInfo); Debug.Log("受信: プレイヤー" + message.fromPlayerID + "が手札" + setCardInfo.index + "のインターセプトカードを発動"); players[message.fromPlayerID].SetIntercept(setCardInfo); // ステート終了 //players[message.fromPlayerID].isStateEnd = true; players[message.fromPlayerID].isPushedJunbiKanryo = true; //+--------------------------------------------------- // ★★送られてきた方じゃないプレイヤーのステートが // 操作しているやつならもう一回操作できるように int iID = (message.fromPlayerID == 0) ? 1 : 0; if (iID == GetMyPlayerID()) { AgainSetIntercept(iID); } //players[iID].stateMachine.currentState // [1212] インターセプトカードを伏せた後も押さす用に // ボタン非表示 //if (players[message.fromPlayerID].isMyPlayer) // uiManager.DisableSetStrikerButton(); return(true); } if (message.messageType == MessageType.BackToHand) { if (message.exInfo == null) { return(false); } // byte[]→構造体 BackToHandInfo backToHandInfo = new BackToHandInfo(); message.GetExtraInfo <BackToHandInfo>(ref backToHandInfo); //IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(backToHandInfo)); //Marshal.Copy(message.exInfo, 0, ptr, Marshal.SizeOf(backToHandInfo)); //backToHandInfo = (BackToHandInfo)Marshal.PtrToStructure(ptr, backToHandInfo.GetType()); //Marshal.FreeHGlobal(ptr); players[message.fromPlayerID].BackToHand(backToHandInfo); // ボタン非表示 if (players[message.fromPlayerID].isMyPlayer) { uiManager.DisableSetStrikerButton(); } return(true); } //if(message.messageType == MessageType.SyncName) //{ // if (message.exInfo == null) // return false; // // 自分の名前なら同期する必要なし // //if (players[message.fromPlayerID].isMyPlayer) return true; // SyncNameInfo syncNameInfo = new SyncNameInfo(); // //syncNameInfo.cName = new char[64]; // message.GetExtraInfo<SyncNameInfo>(ref syncNameInfo); // // プレイヤーの名前設定 // players[message.fromPlayerID].playerName = syncNameInfo.playerName;//new string(syncNameInfo.cName); //} if (message.messageType == MessageType.SyncDeck) { if (message.exInfo == null) { return(false); } // byte[]→構造体 SyncDeckInfo syncDeckInfo = new SyncDeckInfo(); message.GetExtraInfo <SyncDeckInfo>(ref syncDeckInfo); //IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(syncDeckInfo)); //Marshal.Copy(message.exInfo, 0, ptr, Marshal.SizeOf(syncDeckInfo)); //syncDeckInfo = (SyncDeckInfo)Marshal.PtrToStructure(ptr, syncDeckInfo.GetType()); //Marshal.FreeHGlobal(ptr); //Debug.Log("受信: プレイヤー" + message.fromPlayerID + "の手札情報:" + // syncDeckInfo.yamahuda[0] + "," + // syncDeckInfo.yamahuda[1] + "," + // syncDeckInfo.yamahuda[2] + "," + // syncDeckInfo.yamahuda[3] + "," + // syncDeckInfo.yamahuda[4] + "," + // syncDeckInfo.yamahuda[5] + "," + // syncDeckInfo.yamahuda[6] + "," + // syncDeckInfo.yamahuda[7] + "," + // syncDeckInfo.yamahuda[8]); var isMyPlayer = players[message.fromPlayerID].isMyPlayer; // 発信元は同期する必要なし if (!isMyPlayer) { // 手札山札同期 players[message.fromPlayerID].SyncDeck(syncDeckInfo); } // UIテキストの変更 uiManager.UpdateDeckUI(players[message.fromPlayerID].deckManager, isMyPlayer); // 同期フラグ players[message.fromPlayerID].isSyncDeck = true; return(true); } return(false); }