public override void Enter(CardAbilityData abilityData) { iFrame = 0; base.Enter(abilityData); suteCard = null; // [1216] ゴリ 効果がモンスターかイベントか知りたい // Ability列車 仲間と共に発動した瞬間 ActionEffectUVInfo UVInfo = new ActionEffectUVInfo(); UVInfo.iEffectType = (int)UV_EFFECT_TYPE.SKILL_WIN; UVInfo.fPosX = abilityData.GetFieldEventPosition().x; UVInfo.fPosY = abilityData.GetFieldEventPosition().y; UVInfo.fPosZ = abilityData.GetFieldEventPosition().z; MessageManager.DispatchOffline(CardAbilityData.playerManager.GetPlayerID(abilityData.isMyPlayer), MessageType.ActionEffectUV, UVInfo); // 効果発動SE oulAudio.PlaySE("action_ability"); // (TODO)手札からドローする番号を決定(無造作) if (abilityData.isMyPlayer || !SelectData.isNetworkBattle) { var deckManager = abilityData.myPlayer.deckManager; var numHand = deckManager.GetNumHand(); var selectHandIndex = (int)IDType.NONE; for (int i = 0; i < numHand; i++) { var card = deckManager.GetHandCard(i); if (card.isEventCard()) { continue; } // 条件満たしたら if (CheckRange((PowerRange)abilityData.c_value1, card.power, abilityData.c_value0)) { selectHandIndex = i; break; } } if (selectHandIndex == (int)IDType.NONE) { Debug.LogWarning("炎の剣の捨て札で意図しない値"); // 終了 abilityData.isJoukenOK = true; endFlag = true; } SelectCardIndexInfo info = new SelectCardIndexInfo(); info.index = selectHandIndex; // メッセージ送信 MessageManager.Dispatch(abilityData.myPlayer.playerID, MessageType.SelectHand, info); return; } }
void SendSetCard(int handNo, MessageType messageType) { // ex構造体作成 SelectCardIndexInfo exInfo = new SelectCardIndexInfo(); exInfo.index = handNo; // メッセージ送信 MessageManager.Dispatch(myPlayer.playerID, messageType, exInfo); }
void SetStrikerUpdate() { if (myPlayer.isSetStriker()) { // サポートパス復活対策 if (!myPlayer.isPushedJunbiKanryo) { myPlayer.JunbiKanryoON(); } return; } // 手札にセットできるやつがいなかったらパス if (!myPlayer.isHaveStrikerCard()) { // セット完了 myPlayer.JunbiKanryoON(); return; } // 出てる点数カードに応じて、出すカードのグレードを設定する AI_CARD_GRADE grade; int currentPoint = pointManager.GetCurrentPoint(); if (currentPoint <= 30) { grade = AI_CARD_GRADE.LOW; } else if (currentPoint <= 70) { grade = AI_CARD_GRADE.MIDDLE; } else if (currentPoint <= 100) { grade = AI_CARD_GRADE.HIGH; } else { grade = AI_CARD_GRADE.RANDOM; } // 手札からグレードに対応するカードを取得 int r = myPlayer.cardObjectManager.GetHandNoRandomStriker(grade); // ex構造体作成 SelectCardIndexInfo exInfo = new SelectCardIndexInfo(); exInfo.index = r; // メッセージ送信 MessageManager.Dispatch(myPlayer.playerID, MessageType.SetStriker, exInfo); Debug.Log("CPU:" + r + "番目のカードをセットしました"); // セット完了 myPlayer.JunbiKanryoON(); }
public override bool OnMessage(CardAbilityData abilityData, MessageInfo message) { switch (message.messageType) { case MessageType.SelectHand: { SelectCardIndexInfo info = new SelectCardIndexInfo(); message.GetExtraInfo <SelectCardIndexInfo>(ref info); suteCard = abilityData.myPlayer.deckManager.DequeueHand(info.index); suteCard.ShowDraw(0.75f, false); step++; } return(true); } return(false); }
public override void Enter(CardAbilityData abilityData) { iWaitFrame = 0; base.Enter(abilityData); timer = 0; step = 0; drawCard = null; // 墓地からドローする番号を決定(無造作) if (abilityData.isMyPlayer || !SelectData.isNetworkBattle) { SelectCardIndexInfo info = new SelectCardIndexInfo(); info.index = abilityData.myPlayer.deckManager.GetCemeteryRandomNumberStriker(); if (info.index == (int)IDType.NONE) { Debug.LogWarning("墓地にストライカーがいないのに引こうとしている。事前にその効果を発動しないようにしましょう。"); // 終了 endFlag = true; return; } // メッセージ送信 MessageManager.Dispatch(abilityData.myPlayer.playerID, MessageType.SelectCemetery, info); } // Ability列車 仲間と共に発動した瞬間 ActionEffectUVInfo UVInfo = new ActionEffectUVInfo(); UVInfo.iEffectType = (int)UV_EFFECT_TYPE.SKILL_WIN; UVInfo.fPosX = abilityData.GetFieldEventPosition().x; UVInfo.fPosY = abilityData.GetFieldEventPosition().y; UVInfo.fPosZ = abilityData.GetFieldEventPosition().z; MessageManager.DispatchOffline(CardAbilityData.playerManager.GetPlayerID(abilityData.isMyPlayer), MessageType.ActionEffectUV, UVInfo); // 効果発動SE oulAudio.PlaySE("action_ability"); int a = 0; a++; }
public override bool OnMessage(CardAbilityData abilityData, MessageInfo message) { switch (message.messageType) { case MessageType.SelectCemetery: { SelectCardIndexInfo selectCardIndexInfo = new SelectCardIndexInfo(); message.GetExtraInfo <SelectCardIndexInfo>(ref selectCardIndexInfo); // 墓地から無造作にストライカーを引く drawCard = abilityData.myPlayer.deckManager.DequeCemetery(selectCardIndexInfo.index); // 次のステップへ step++; } break; } return(false); }
//+------------------------------------------------------------- // インターセプト //+------------------------------------------------------------- void SetInterceptUpdate() { // マウスクリック放したら if (oulInput.GetTouchState() == oulInput.TouchState.Ended) { // インフォメーション非表示 myPlayer.playerManager.uiManager.DisAppearBattleCardInfomation(); } if (myPlayer.isPushedJunbiKanryo) { return; } if (holdHandNo != noHoldCard) { var currentPosition = oulInput.GetPosition(0, false); if (cardSetOK) { // 手札に戻る判定 if (currentPosition.y <= setFieldBorderY) { cardSetOK = false; // カードの座標を手札に戻す holdCard.cacheTransform.localPosition = orgHoldCardPosition; // 描画順 holdCard.SetOrder(holdHandNo); return; } // こ↑こ↓でカード動かしている isCardHold = true; // カード位置更新 var newPosition = RaypickHand(currentPosition); holdCard.cacheTransform.localPosition = newPosition; // マウスクリック放したら if (oulInput.GetTouchState() == oulInput.TouchState.Ended) { // ex構造体作成 SelectCardIndexInfo exInfo = new SelectCardIndexInfo(); exInfo.index = holdHandNo; // メッセージ送信 MessageManager.Dispatch(myPlayer.playerID, MessageType.SetIntercept, exInfo); // 掴んでるカードを離す holdHandNo = noHoldCard; } } // 手札から動かないモード else { // マウスクリック放したら if (oulInput.GetTouchState() == oulInput.TouchState.Ended) { // 掴んでるカードを離す holdHandNo = noHoldCard; // インフォメーション非表示 myPlayer.playerManager.uiManager.DisAppearBattleCardInfomation(); return; } // 選択不可のカードなら情報は出すけどセットはできない if (holdCard.notSelectFlag) { return; } // 移動量を計算 if (currentPosition.y > 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 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.fieldEventCard; if (fieldCard != null /*.gameObject.activeInHierarchy*/) { return; } // 裏になってるカードは見れない if (!card.uraomoteFlag) { return; } for (int i = 0; i < hand.Length; i++) { if (card.cardData.id == hand[i].cardData.id) { holdCard = card; isFieldCardHold = false; holdHandNo = i; // 掴んでる座標 orgHoldCardPosition = card.transform.localPosition; return; } } } } } }
public void SetIntercept(SelectCardIndexInfo info) { deckManager.SetIntercept(info.index); }
public void SetSupport(SelectCardIndexInfo info) { deckManager.SetSupport(info.index); }
//public void Draw() //{ // // 1枚ドロー // deckManager.Draw(1); // // UI更新 // playerManager.uiManager.UpdateDeckUI(deckManager, isMyPlayer); //} public void SetCard(SelectCardIndexInfo info) { deckManager.FieldSet(info.index); }
//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); }