public void BackToHand(BackToHandInfo info) { switch ((CardType)info.iCardType) { case CardType.Fighter: case CardType.AbilityFighter: case CardType.Joker: // 一番後ろに hand.Add(fieldStrikerCard); fieldStrikerCard = null; break; case CardType.Support: case CardType.Connect: case CardType.Intercept: break; } cardObjectManager.BackToHand(); }
//+------------------------------------------------------------- // ストライカー //+------------------------------------------------------------- void SetStrikerUpdate() { if (myPlayer.isPushedJunbiKanryo) { // マウスクリック放したら if (oulInput.GetTouchState() == oulInput.TouchState.Ended) { // インフォメーション非表示 myPlayer.playerManager.uiManager.DisAppearBattleCardInfomation(); } // 1秒待ってまだ相手が設置してないのでUIをだす if ((myPlayer.waitTimer += Time.deltaTime) > 0.5f) { myPlayer.playerManager.uiManager.AppearWaitYouUI(); } return; } // カード掴んでたら if (holdHandNo != noHoldCard) { var currentPosition = oulInput.GetPosition(0, false); if (cardSetOK) { // 手札に戻る判定(フィールドセットボーダーより上めで戻るようにする) if (currentPosition.y <= ((isFieldCardHold) ? backToHandBorderY : setFieldBorderY)) { cardSetOK = false; // カードの座標を手札に戻す // フィールドから掴んでたら if (isFieldCardHold) { holdCard.cacheTransform.localPosition = orgHoldCardPosition; // 描画順 holdCard.SetOrder(myPlayer.deckManager.GetNumHand()); // UVエフェクト発動 //holdCard.ActiveUseCard(); } // 手札から掴んでたら else { holdCard.cacheTransform.localPosition = orgHoldCardPosition; // 描画順 holdCard.SetOrder(holdHandNo); } return; } // ここが真にカードを掴んでいる所さん。 isCardHold = true; // カード位置更新 var newPosition = RaypickHand(currentPosition); holdCard.cacheTransform.localPosition = newPosition; // マウスクリック放したら if (oulInput.GetTouchState() == oulInput.TouchState.Ended) { // SE oulAudio.PlaySE("card_draw0"); // ★サポートカード処理はメッセージ受信時に行う if (holdCard.cardData.cardType == CardType.Support) { SendSetCard(holdHandNo, MessageType.SetSupport); } // フィールドをセット else if (isFieldCardHold) { myPlayer.cardObjectManager.ReFieldSetStriker(true); } // すでにフィールドにセットされているなら else if (myPlayer.deckManager.isSetStriker()) { // ex構造体作成 BackToHandInfo exInfo = new BackToHandInfo(); exInfo.iCardType = (int)myPlayer.deckManager.fieldStrikerCard.cardType; // メッセージ送信 MessageManager.Dispatch(myPlayer.playerID, MessageType.BackToHand, exInfo); // カードセット SendSetCard(holdHandNo, MessageType.SetStriker); } else { SendSetCard(holdHandNo, MessageType.SetStriker); } // 掴んでるカードを離す holdHandNo = noHoldCard; // インフォメーション非表示 myPlayer.playerManager.uiManager.DisAppearBattleCardInfomation(); } } // 手札から動かないモード else { // マウスクリック放したら if (oulInput.GetTouchState() == oulInput.TouchState.Ended) { // ここでデッキデータを更新しよう(フィールド→手札考慮) if (isFieldCardHold) { // ex構造体作成 BackToHandInfo exInfo = new BackToHandInfo(); exInfo.iCardType = (int)holdCard.cardData.cardType; // メッセージ送信 MessageManager.Dispatch(myPlayer.playerID, MessageType.BackToHand, exInfo); } // 掴んでるカードを離す holdHandNo = noHoldCard; // インフォメーション非表示 myPlayer.playerManager.uiManager.DisAppearBattleCardInfomation(); return; } // 選択不可のカードなら情報は出すけどセットはできない if (holdCard.notSelectFlag) { return; } // 移動量を計算 if (currentPosition.y > ((isFieldCardHold) ? backToHandBorderY : setFieldBorderY)) { cardSetOK = true; // 一番前 holdCard.SetOrder(114); // インフォメーション非表示 myPlayer.playerManager.uiManager.DisAppearBattleCardInfomation(); } } } else { isCardHold = false; //// マウスがUIにポイントしていたら //if (UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject()) //{ // return; //} // マウスクリックした瞬間 if (oulInput.GetTouchState() == oulInput.TouchState.Began) { // 手札のカードとあたり判定を取る //var hand = myPlayer.cardObjectManager.GetHandCardObject(); //for (int i = 0; i < hand.Length; i++) //{ // var card = hand[i]; // // 空だったら終了 // if (!card.gameObject.activeInHierarchy) break; // var camera = Camera.main; // // レイ情報作成(マウス位置からレイを飛ばす) // Ray ray = camera.ScreenPointToRay(oulInput.GetPosition(0, false)); // // レイ(マウス)とBox(カード)で判定を取る // var cardBoxCollider = card.GetComponent<BoxCollider>(); // var intersectionPoint = Vector3.zero; // if(oulMath.LineVsBox(cardBoxCollider, camera.transform.localPosition, ray.direction, out intersectionPoint)) // { // holdHandNo = i; // card.isHold = true; // // 掴んでる座標 // cardHoldPosition = oulInput.GetPosition(0, false); // } //} var tapObject = oulInput.Collision3D(); if (!tapObject) { return; } // レイに触れたオブジェクトがカードかどうかチェック if (tapObject.tag == "Card") { var card = tapObject.GetComponent <Card>(); // 相手サイドは見れない if (!card.isMyPlayerSide) { return; } var hand = myPlayer.cardObjectManager.GetHandCardObject(); var fieldCard = myPlayer.cardObjectManager.fieldStrikerCard; if (fieldCard != null /*.gameObject.activeInHierarchy*/) { if (card.cardData.id == fieldCard.cardData.id)//←[1210]なんかエラー出てた。 { // 戻す //myPlayer.cardObjectManager.ActiveUseCard(); //+------------------------------------------------------- // SE oulAudio.PlaySE("card_hold"); holdCard = card; holdCard.SetUraomote(true); // ゴリ // 手札の一番後ろ var numHand = myPlayer.deckManager.GetNumHand(); myPlayer.cardObjectManager.MakeHandTransform(numHand, numHand + 1, holdCard); orgHoldCardPosition = holdCard.cacheTransform.localPosition; // ここでレイピックでの座標更新 holdCard.cacheTransform.localPosition = RaypickHand(oulInput.GetPosition(0, false)); //holdCard.cacheTransform.localPosition = orgHoldCardPosition; isFieldCardHold = true; holdHandNo = fieldStrikerHoldNo; // 描画順をめっちゃ前にする holdCard.SetOrder(114); // めり込みバグ修正 holdCard.ChangeState(CardObjectState.None.GetInstance()); return; } } // 裏になってるカードは見れない if (!card.uraomoteFlag) { return; } for (int i = 0; i < hand.Length; i++) { if (card.cardData.id == hand[i].cardData.id) { // カード押した // SE oulAudio.PlaySE("card_hold"); holdCard = card; isFieldCardHold = false; holdHandNo = i; // 掴んでる座標 orgHoldCardPosition = card.transform.localPosition; return; } } } } } }
public void BackToHand(BackToHandInfo info) { deckManager.BackToHand(info); }
//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); }