Beispiel #1
0
        public override void Execute(CardAbilityData abilityData)
        {
            switch (step)
            {
            case 0:
                // 数字選択中
                break;

            case 1:
                if (true)
                {
                    step++;
                }
                break;

            case 2:
                // プレイヤーの選択した数字と相手のストライカーのパワーが同じなら
                if (true)
                {
                    // 成功時の効果に移行
                    abilityData.skillNumber = abilityData.c_value0;
                }
                // 残念
                else
                {
                    // 失敗時の効果に移行
                    //abilityData.skillNumber = abilityData.c_value1;
                }

                // コスト処理終了
                endFlag = true;
                abilityData.isJoukenOK = true;
                break;
            }
        }
Beispiel #2
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;
            }
        }
Beispiel #3
0
        public override void Execute(CardAbilityData abilityData)
        {
            const int iMaxFrame = 40;

            iFrame++;
            if (iFrame >= iMaxFrame)
            {
                switch (step)
                {
                case 0:     // カード選択中
                    break;

                case 1:     // 捨てカード移動中
                    if (!suteCard.isInMovingState())
                    {
                        // 墓地に送る
                        abilityData.myPlayer.deckManager.AddBochi(suteCard);
                        // 墓地に行く動き
                        //suteCard.MoveToCemetery();
                        step++;
                    }
                    break;

                case 2:     // 墓地に行くカードの動きが終わったら
                    if (!suteCard.isInMovingState())
                    {
                        // 終了
                        abilityData.isJoukenOK = true;
                        endFlag = true;
                    }
                    break;
                }
            }
        }
Beispiel #4
0
    // 参照型はアウトなのでClone関数を自前で実装する
    public CardAbilityData Clone()
    {
        CardAbilityData work = new CardAbilityData();

        work.state       = state;
        work.cost        = cost;
        work.skillNumber = skillNumber;               // 発動する効果の番号(分岐用に作成)
        work.numSkill    = numSkill;                  // 効果の個数

        work.isJoukenOK = isJoukenOK;                 // Costを抜けた後にこれがtrueだったら効果を発動する(主にストライカーの爪痕とかに使う)
        work.endFlag    = endFlag;                    // 効果が終了したフラグ

        work.isMyPlayer = isMyPlayer;                 // この効果を発動しようとしているプレイヤーが画面的に自分かどうか
        work.myPlayer   = myPlayer;
        work.youPlayer  = youPlayer;                  // 自分と相手のプレイヤーの実体

        work.abilityTriggerType = abilityTriggerType; // 発動トリガー
        work.lifeCost           = lifeCost;           // 支払うライフの値
        work.costType           = costType;           // 条件(コスト)
        work.c_value0           = c_value0;
        work.c_value1           = c_value1;
        work.c_value2           = c_value2;
        work.c_value3           = c_value3;

        work.skillDatas = skillDatas;

        work.delvValue0 = delvValue0;
        work.delvValue1 = delvValue1;
        work.delvValue2 = delvValue2;
        work.delvValue3 = delvValue3;

        return(work);
    }
Beispiel #5
0
        public override bool OnMessage(CardAbilityData abilityData, MessageInfo message)
        {
            switch (message.messageType)
            {
            case MessageType.SelectNumber:
            {
                // ★(2回選択しても入ってこれないようにする)
                if (step > 0)
                {
                    return(true);
                }

                SelectNumberInfo selectNumberInfo = new SelectNumberInfo();
                message.GetExtraInfo <SelectNumberInfo>(ref selectNumberInfo);

                // 選択した番号保存
                selectNumber = selectNumberInfo.selectNumber;

                // UI非表示
                CardAbilityData.uiManager.DisAppearSelectNumberUI(selectNumber);
                CardAbilityData.uiManager.DisAppearSelectNumberWaitUI();

                // 次のステップへ
                step++;
            }
                return(true);
            }

            return(false);
        }
Beispiel #6
0
        public override void Enter(CardAbilityData abilityData)
        {
            step     = 0;
            drawCard = null;

            // Ability列車 バースト発動した瞬間
        }
Beispiel #7
0
    void Update()
    {
        if (excutionAbility != null)
        {
            // 効果が終了するまで処理する
            if (excutionAbility.endFlag)
            {
                excutionAbility = null;
                return;
            }
            excutionAbility.Update(this);
            if (messageQueue.Count > 0)
            {
                excutionAbility.HandleMessage(messageQueue.Dequeue());
            }
        }

        else if (abilityQueue.Count > 0)
        {
            excutionAbility = abilityQueue.Dequeue();
            // 効果実行
            excutionAbility.Action();
            //Debug.Log("効果発動: " + excutionAbility.abilityType.ToString() + ", values: " +
            //    excutionAbility.s_iValue0 + ", " + excutionAbility.s_iValue1 + ", " + excutionAbility.s_iValue2 + ", " + excutionAbility.s_iValue3 + ", " +
            //    excutionAbility.s_iValue4 + ", " + excutionAbility.s_iValue5 + ", " + excutionAbility.s_iValue6 + ", " + excutionAbility.s_iValue7 + ", " +
            //    excutionAbility.s_iValue8 + ", " + excutionAbility.s_iValue9);
        }

        // ここにexcutionAbility.を書いてはいけない
    }
Beispiel #8
0
 public override bool HatsudouCheck(CardAbilityData abilityData, Player player)
 {
     // 山札が1以上のときに発動可能
     // 墓地にジョーカーがいたら発動OK
     return(
         player.deckManager.isExistBochiCardType(CardType.Joker) &&
         player.deckManager.GetNumYamahuda() > 0);
 }
Beispiel #9
0
        //int selectNumber;   // プレイヤーの選択した番号

        public override void Enter(CardAbilityData abilityData)
        {
            base.Enter(abilityData);

            step = 0;

            // 数字選択UI表示
            //CardAbilityData.uiManager.DisAppearSelectNumberUI();
        }
Beispiel #10
0
    public void PushAbility(CardAbilityData ability, bool isMyPlayer)
    {
        // ★★★嫌な予感がする…(参照)
        var abilityData = ability.Clone();

        //abilityData = ability;
        abilityData.isMyPlayer = isMyPlayer;
        abilityQueue.Enqueue(abilityData);
    }
Beispiel #11
0
        void JoukenNG(CardAbilityData abilityData)
        {
            // 失敗時の効果に移行
            abilityData.skillNumber = abilityData.c_value3;

            // Ability列車 パワー条件失敗時
            // 終了
            endFlag = true;
            abilityData.isJoukenOK = true;
        }
Beispiel #12
0
        public override void Execute(CardAbilityData abilityData)
        {
            const int iMaxFrame = 40;

            iWaitFrame++;
            // Ability列車 爪痕の演出終了判定
            if (iWaitFrame >= iMaxFrame)
            {
                endFlag = true;
            }
        }
Beispiel #13
0
        public override void Execute(CardAbilityData abilityData)
        {
            base.Enter(abilityData);

            switch (step)
            {
            case 0:
                // ドロー!
                drawCard = abilityData.myPlayer.deckManager.DequeueYamahuda();
                drawCard.ShowDraw(0.75f, true);

                //// データ上で引いたカードを墓地に送る
                //abilityData.myPlayer.deckManager.AddBochi(drawCard.cardData);

                step++;
                break;

            case 1:
                // カードの動き終わったら
                if (!drawCard.isInMovingState())
                {
                    // 引いたカードを墓地に送る動き
                    abilityData.myPlayer.deckManager.AddBochi(drawCard);

                    // モンスターカード!なら次のステート(isStrikerはジョーカーがfalseになるのでこの書き方)
                    if (!drawCard.cardData.isEventCard())
                    {
                        step++;
                    }
                    else
                    {
                        step--;
                    }
                }
                break;

            case 2:
                if (drawCard != null)
                {
                    // パワーを足す用の変数に格納
                    abilityData.delvValue0 = drawCard.cardData.power;
                }
                else
                {
                    Debug.LogWarning("バースト: 引いたカードがnullクマ");
                }

                // コスト処理終了
                endFlag = true;
                abilityData.isJoukenOK = true;
                break;
            }
        }
Beispiel #14
0
        public override void Execute(CardAbilityData abilityData)
        {
            const int iMaxFrame = 50;

            iWaitFrame++;
            // Ability列車 ターン条件効果終了時
            if (iWaitFrame >= iMaxFrame)
            {
                // 終了
                abilityData.isJoukenOK = true;
                endFlag = true;
            }
        }
Beispiel #15
0
        public override void Execute(CardAbilityData abilityData)
        {
            const int iMaxFrame = 40;

            iWaitFrame++;
            if (iWaitFrame >= iMaxFrame)
            {
                // 即終了
                endFlag = true;
                // 条件OK
                abilityData.isJoukenOK = true;
            }
        }
Beispiel #16
0
        public override void Execute(CardAbilityData abilityData)
        {
            const int MaxFrame = 40;

            iWaitFrame++;

            // Ability列車 パワー判定の演出終わったら
            if (iWaitFrame >= MaxFrame)
            {
                // 終了
                endFlag = true;
                abilityData.isJoukenOK = true;
            }
        }
Beispiel #17
0
        public override bool HatsudouCheck(CardAbilityData abilityData, Player player)
        {
            // 山札が1以上で、ストライカーカードが存在するときに発動可能
            for (int i = 0; i < player.deckManager.GetNumYamahuda(); i++)
            {
                // イベントじゃないカードがあるのでOK
                if (player.deckManager.GetYamahudaCard(i).isEventCard() == false)
                {
                    return(true);
                }
            }

            return(false);
            //return (player.deckManager.GetNumYamahuda() > 0);
        }
Beispiel #18
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);
 }
Beispiel #19
0
        public override void Enter(CardAbilityData abilityData)
        {
            base.Enter(abilityData);

            step     = 0;
            drawCard = null;

            // 数字選択UI表示
            CardAbilityData.uiManager.AppearSelectNumberUI(abilityData.myPlayer.deckManager, abilityData.isMyPlayer);
            // 相手がが選択中ですのUI
            if (!abilityData.isMyPlayer)
            {
                CardAbilityData.uiManager.AppearSelectNumberWaitUI();
            }

            // Ability列車 宝箱発動した瞬間
        }
Beispiel #20
0
        public override void Enter(CardAbilityData abilityData)
        {
            iWaitFrame = 0;

            base.Enter(abilityData);

            // 現在のターンを取得
            int        turn       = GameObject.Find("GameMain").GetComponent <SceneMain>().turn;
            int        joukenTurn = abilityData.c_value0;
            PowerRange range      = (PowerRange)abilityData.c_value1;

            Debug.Log("ターン条件チェックするクマ");

            // 条件チェック
            bool isOK = CheckRange(range, turn, joukenTurn);

            if (isOK)
            {
                Debug.Log("条件満たしてる");

                // 成功時の効果に移行
                abilityData.skillNumber = abilityData.c_value2;

                // Ability列車 ターン条件効果発動(条件成功時)
                ActionEffectUVInfo info = new ActionEffectUVInfo();
                info.iEffectType = (int)UV_EFFECT_TYPE.SKILL_WIN;
                info.fPosX       = abilityData.GetFieldStrikerPosition().x;
                info.fPosY       = abilityData.GetFieldStrikerPosition().y;
                info.fPosZ       = abilityData.GetFieldStrikerPosition().z;

                MessageManager.DispatchOffline(CardAbilityData.playerManager.GetPlayerID(abilityData.isMyPlayer), MessageType.ActionEffectUV, info);

                // 効果発動SE
                oulAudio.PlaySE("action_ability");
            }
            else
            {
                Debug.Log("条件満たしていない");

                // 失敗時の効果に移行
                abilityData.skillNumber = abilityData.c_value3;

                // Ability列車 ターン条件効果発動(条件満たしてない時)
            }
        }
Beispiel #21
0
        public override void Enter(CardAbilityData abilityData)
        {
            iWaitFrame = 0;

            base.Enter(abilityData);

            var striker = abilityData.youPlayer.GetFieldStrikerCard();

            if (!striker)
            {
                JoukenNG(abilityData);
                return;
            }

            var power = abilityData.c_value0;

            //var hantei = false;
            //switch ((PowerRange)abilityData.c_value1)
            //{
            //    case PowerRange.Pinpoint:
            //        hantei = (striker.cardData.power == power);
            //        break;

            //    case PowerRange.Ijou:
            //        hantei = (striker.cardData.power >= power);
            //        break;

            //    case PowerRange.Ika:
            //        hantei = (striker.cardData.power <= power);
            //        break;

            //    default:
            //        Debug.LogWarning("パワーレンジの値おかしいクマ");
            //        break;
            //}

            if (CheckRange((PowerRange)abilityData.c_value1, striker.cardData.power, power))
            {
                JoukenOK(abilityData);
            }
            else
            {
                JoukenNG(abilityData);
            }
        }
Beispiel #22
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++;
        }
Beispiel #23
0
        public override bool HatsudouCheck(CardAbilityData abilityData, Player player)
        {
            //Func<int, int, bool> check;
            //switch ((PowerRange)abilityData.c_value1)
            //{
            //    case PowerRange.Pinpoint:
            //        check = (a, b) => { return (a == b); };
            //        break;

            //    case PowerRange.Ijou:
            //        check = (a, b) => { return (a >= b); };
            //        break;

            //    case PowerRange.Ika:
            //        check = (a, b) => { return (a <= b); };
            //        break;

            //    default:
            //        Debug.LogWarning("おかしいおかしい");
            //        return false;
            //}

            var deckManager = player.deckManager;
            var numHand     = deckManager.GetNumHand();

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

            return(false);
        }
Beispiel #24
0
        public override bool OnMessage(CardAbilityData abilityData, MessageInfo message)
        {
            switch (message.messageType)
            {
            case MessageType.SelectNumber:
            {
                SelectNumberInfo selectNumberInfo = new SelectNumberInfo();
                message.GetExtraInfo <SelectNumberInfo>(ref selectNumberInfo);

                // 選択した番号保存
                //selectNumber = selectNumberInfo.selectNumber;

                // 次のステップへ
                step++;
            }
            break;
            }

            return(false);
        }
Beispiel #25
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);
        }
Beispiel #26
0
        void JoukenOK(CardAbilityData abilityData)
        {
            // 成功時の効果に移行
            abilityData.skillNumber = abilityData.c_value2;

            // Ability列車 パワー条件成功時

            // [1216] ゴリ 効果がモンスターかイベントか知りたい
            // Ability列車 仲間と共に発動した瞬間
            ActionEffectUVInfo UVInfo = new ActionEffectUVInfo();

            UVInfo.iEffectType = (int)UV_EFFECT_TYPE.SKILL_WIN;
            UVInfo.fPosX       = abilityData.GetFieldStrikerPosition().x;
            UVInfo.fPosY       = abilityData.GetFieldStrikerPosition().y;
            UVInfo.fPosZ       = abilityData.GetFieldStrikerPosition().z;

            MessageManager.DispatchOffline(CardAbilityData.playerManager.GetPlayerID(abilityData.isMyPlayer), MessageType.ActionEffectUV, UVInfo);

            // 効果発動SE
            oulAudio.PlaySE("action_ability");
        }
Beispiel #27
0
        public override bool HatsudouCheck(CardAbilityData abilityData, Player player)
        {
            // 墓地にストライカー系がいないと発動できない
            if (player.deckManager.isExistBochiCardType(CardType.Fighter))
            {
                return(player.jissainoPower == 1);
            }
            if (player.deckManager.isExistBochiCardType(CardType.AbilityFighter))
            {
                return(player.jissainoPower == 1);
            }
            if (player.deckManager.isExistBochiCardType(CardType.Joker))
            {
                return(player.jissainoPower == 1);
            }

            return(false);

            // 実際のパワーが1の人だったら発動OK
            //return (abilityData.myPlayer.jissainoPower == 1);
        }
Beispiel #28
0
        public override void Enter(CardAbilityData abilityData)
        {
            iWaitFrame = 0;

            base.Enter(abilityData);

            // ゴリゴリのゴリ[12/16] 発動元のカードタイプが知りたかったとさ

            Card FieldCard = abilityData.myPlayer.cardObjectManager.fieldStrikerCard;
            Card EventCard = abilityData.myPlayer.cardObjectManager.fieldEventCard;

            if (FieldCard != null && EventCard == null)
            {
                // Ability列車 勝利の雄たけびの成功時
                ActionEffectUVInfo info = new ActionEffectUVInfo();
                info.iEffectType = (int)UV_EFFECT_TYPE.SKILL_WIN;
                info.fPosX       = abilityData.GetFieldStrikerPosition().x;
                info.fPosY       = abilityData.GetFieldStrikerPosition().y;
                info.fPosZ       = abilityData.GetFieldStrikerPosition().z;

                MessageManager.DispatchOffline(CardAbilityData.playerManager.GetPlayerID(abilityData.isMyPlayer), MessageType.ActionEffectUV, info);
            }

            if (EventCard != null)
            {
                // Ability列車 勝利の雄たけびの成功時
                ActionEffectUVInfo info = new ActionEffectUVInfo();
                info.iEffectType = (int)UV_EFFECT_TYPE.SKILL_WIN;
                info.fPosX       = abilityData.GetFieldEventPosition().x;
                info.fPosY       = abilityData.GetFieldEventPosition().y;
                info.fPosZ       = abilityData.GetFieldEventPosition().z;

                MessageManager.DispatchOffline(CardAbilityData.playerManager.GetPlayerID(abilityData.isMyPlayer), MessageType.ActionEffectUV, info);
            }


            // 効果発動SE
            oulAudio.PlaySE("action_ability");
        }
Beispiel #29
0
 public void Restart()
 {
     messageQueue.Clear();
     abilityQueue.Clear();
     excutionAbility = null;
 }
Beispiel #30
0
        public override void Execute(CardAbilityData abilityData)
        {
            const int iMAXFRAME = 40;

            iWaitFrame++;
            if (iWaitFrame >= iMAXFRAME)
            {
                switch (step)
                {
                case 0:
                    // メッセージ待ち
                    break;

                case 1:
                    // 例外処理
                    if (!drawCard)
                    {
                        Debug.LogWarning("墓地にストライカーがいないのに引こうとしている。事前にその効果を発動しないようにしましょう。");

                        // 終了
                        endFlag = true;

                        return;
                    }

                    // パワーを足す用の変数に格納
                    abilityData.delvValue0 = drawCard.cardData.power;

                    // 見せる用のドローの動きにする
                    drawCard.ShowDraw(0.75f, true);

                    step++;
                    break;

                case 2:
                    // ドローの動きが終わったら
                    if (!drawCard.isInMovingState())
                    {
                        step++;
                    }
                    break;

                case 3:
                    // 若干待ってみる
                    if ((timer += Time.deltaTime) > 1)
                    {
                        step++;
                    }
                    break;

                case 4:

                    // 引いたカードを墓地に送る
                    abilityData.myPlayer.deckManager.AddBochi(drawCard);

                    // 引いたカードを墓地に送る動き
                    //drawCard.MoveToCemetery();

                    step++;
                    break;

                case 5:
                    // ドローの動きが終わったら
                    if (!drawCard.isInMovingState())
                    {
                        // 終了
                        endFlag = true;
                        abilityData.isJoukenOK = true;
                    }
                    break;
                }
            }
        }