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; } }
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; } }
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; } } }
// 参照型はアウトなので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); }
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); }
public override void Enter(CardAbilityData abilityData) { step = 0; drawCard = null; // Ability列車 バースト発動した瞬間 }
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.を書いてはいけない }
public override bool HatsudouCheck(CardAbilityData abilityData, Player player) { // 山札が1以上のときに発動可能 // 墓地にジョーカーがいたら発動OK return( player.deckManager.isExistBochiCardType(CardType.Joker) && player.deckManager.GetNumYamahuda() > 0); }
//int selectNumber; // プレイヤーの選択した番号 public override void Enter(CardAbilityData abilityData) { base.Enter(abilityData); step = 0; // 数字選択UI表示 //CardAbilityData.uiManager.DisAppearSelectNumberUI(); }
public void PushAbility(CardAbilityData ability, bool isMyPlayer) { // ★★★嫌な予感がする…(参照) var abilityData = ability.Clone(); //abilityData = ability; abilityData.isMyPlayer = isMyPlayer; abilityQueue.Enqueue(abilityData); }
void JoukenNG(CardAbilityData abilityData) { // 失敗時の効果に移行 abilityData.skillNumber = abilityData.c_value3; // Ability列車 パワー条件失敗時 // 終了 endFlag = true; abilityData.isJoukenOK = true; }
public override void Execute(CardAbilityData abilityData) { const int iMaxFrame = 40; iWaitFrame++; // Ability列車 爪痕の演出終了判定 if (iWaitFrame >= iMaxFrame) { endFlag = true; } }
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; } }
public override void Execute(CardAbilityData abilityData) { const int iMaxFrame = 50; iWaitFrame++; // Ability列車 ターン条件効果終了時 if (iWaitFrame >= iMaxFrame) { // 終了 abilityData.isJoukenOK = true; endFlag = true; } }
public override void Execute(CardAbilityData abilityData) { const int iMaxFrame = 40; iWaitFrame++; if (iWaitFrame >= iMaxFrame) { // 即終了 endFlag = true; // 条件OK abilityData.isJoukenOK = true; } }
public override void Execute(CardAbilityData abilityData) { const int MaxFrame = 40; iWaitFrame++; // Ability列車 パワー判定の演出終わったら if (iWaitFrame >= MaxFrame) { // 終了 endFlag = true; abilityData.isJoukenOK = true; } }
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); }
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) { base.Enter(abilityData); step = 0; drawCard = null; // 数字選択UI表示 CardAbilityData.uiManager.AppearSelectNumberUI(abilityData.myPlayer.deckManager, abilityData.isMyPlayer); // 相手がが選択中ですのUI if (!abilityData.isMyPlayer) { CardAbilityData.uiManager.AppearSelectNumberWaitUI(); } // Ability列車 宝箱発動した瞬間 }
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列車 ターン条件効果発動(条件満たしてない時) } }
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); } }
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 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); }
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); }
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 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"); }
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); }
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"); }
public void Restart() { messageQueue.Clear(); abilityQueue.Clear(); excutionAbility = null; }
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; } } }