예제 #1
0
        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;
            }
        }
예제 #2
0
    void SendSetCard(int handNo, MessageType messageType)
    {
        // ex構造体作成
        SelectCardIndexInfo exInfo = new SelectCardIndexInfo();

        exInfo.index = handNo;
        // メッセージ送信
        MessageManager.Dispatch(myPlayer.playerID, messageType, exInfo);
    }
예제 #3
0
    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();
    }
예제 #4
0
 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);
 }
예제 #5
0
        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++;
        }
예제 #6
0
        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);
        }
예제 #7
0
    //+-------------------------------------------------------------
    //  インターセプト
    //+-------------------------------------------------------------
    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;
                        }
                    }
                }
            }
        }
    }
예제 #8
0
파일: Player.cs 프로젝트: WassyoiTCG/TCG
 public void SetIntercept(SelectCardIndexInfo info)
 {
     deckManager.SetIntercept(info.index);
 }
예제 #9
0
파일: Player.cs 프로젝트: WassyoiTCG/TCG
 public void SetSupport(SelectCardIndexInfo info)
 {
     deckManager.SetSupport(info.index);
 }
예제 #10
0
파일: Player.cs 프로젝트: WassyoiTCG/TCG
    //public void Draw()
    //{
    //    // 1枚ドロー
    //    deckManager.Draw(1);

    //    // UI更新
    //    playerManager.uiManager.UpdateDeckUI(deckManager, isMyPlayer);
    //}

    public void SetCard(SelectCardIndexInfo info)
    {
        deckManager.FieldSet(info.index);
    }
예제 #11
0
    //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);
    }