//初期化関数 public void Initialization(GameObject SC_CC_gauge_obj) { state = 0; //状態を通常の状態にする skill_seal_turn = 0; //ターン数を0にする skill_gauge_rise_up_num = 0; //スキルゲージ上昇アップの単位を0にする quivk_move_multiple = 0; //倍数を0にする quivk_move_turn = 0; //ターン数を0にする quivk_move_attack_count = 0; //攻撃回数を初期化 SC_CC_gauge_script = SC_CC_gauge_obj.GetComponent <SC_CC_GaugeScript>(); }
//スキルを発動する(引数が設定されていたら候補を引数に渡す) //引数がセットされていたらピースに色を移さない //引数1 candidate_pieces :候補を取得したい場合は設定する //引数3 attack_player_obj :現在攻撃中のプレイヤーオブジェクト情報(クリックしたプレイヤー) //引数4 partner_player_obj:相手のプレイヤーオブジェクト情報(現在攻撃中でないプレイヤー) public void SkillInvocation(List <GameObject> candidate_pieces, GameObject attack_player_obj, GameObject partner_player_obj) { //色を移すかどうかのフラグ //true = 色を移す false = 候補を引数に渡す bool shift_color_flag; //引数の設定状態を見てフラグのONOFFを設定する if (candidate_pieces == null) { shift_color_flag = true; } else { candidate_pieces.Clear(); shift_color_flag = false; } //現在攻撃中、相手のプレイヤーオブジェクト情報からPlayerスクリプト情報を取得 PlayerScript attack_player_script = null; if (attack_player_obj != null) { attack_player_script = attack_player_obj.GetComponent <PlayerScript>(); } PlayerScript partner_player_script = null; if (partner_player_obj != null) { partner_player_script = partner_player_obj.GetComponent <PlayerScript>(); } //現在攻撃中のプレイヤーのSC_CCゲージスクリプト情報を取得 SC_CC_GaugeScript SC_CC_gauge_script = null; if (attack_player_script != null) { SC_CC_gauge_script = attack_player_script.SC_CC_Gauge.GetComponent <SC_CC_GaugeScript>(); } //-----------------------プレイヤー事にスキル内容を変更-------------------- //プレイヤー名がHARUなら「クロスブレイク」発動 if (attack_player_name == "HARU") { //方角(上下左右) int[,] direction = { { -1, 0 }, { 1, 0 }, { 0, -1 }, { 0, 1 } }; //移すピースの位置 int direction_x = 0; int direction_y = 0; for (int i = 0; i < 4; i++) { direction_x = put_piece_pos_x + direction[i, 0]; direction_y = put_piece_pos_y + direction[i, 1]; while (true) { //マップ内かどうかを調べる if (RangeDetermination(direction_x, direction_y)) { //色移しアクションを行う if (shift_color_flag) { //マップ内なら十字の1ピースに色を移す //名前と画像を差し替える map[direction_x, direction_y].name = put_piece_name; map[direction_x, direction_y].GetComponent <Image>().sprite = piece_sprite; } //候補のデータを引数に渡す else { //範囲内のオブジェクト情報を格納する candidate_pieces.Add(map[direction_x, direction_y]); } direction_x += direction[i, 0]; direction_y += direction[i, 1]; } else { break; } } } //色移しアクションを行ったら if (shift_color_flag) { //CC分ゲージを減らす SC_CC_gauge_script.UsedCC(0, 1); } } //プレイヤー名がKAZUYAなら「ツインダイアグナル」発動 else if (attack_player_name == "KAZUYA") { //方向情報 左斜め上 左斜め下 右斜め上 右斜め下 int[,] direction = { { -1, 1 }, { -1, -1 }, { 1, 1 }, { 1, -1 } }; //移すピースの位置 int direction_x = 0; int direction_y = 0; for (int i = 0; i < 4; i++) { direction_x = put_piece_pos_x + direction[i, 0]; direction_y = put_piece_pos_y + direction[i, 1]; while (true) { //マップ内かどうかを調べる if (RangeDetermination(direction_x, direction_y)) { //色移しアクションを行う if (shift_color_flag) { //マップ内なら十字の1ピースに色を移す //名前と画像を差し替える map[direction_x, direction_y].name = put_piece_name; map[direction_x, direction_y].GetComponent <Image>().sprite = piece_sprite; } //候補のデータを引数に渡す else { //範囲内のオブジェクト情報を格納する candidate_pieces.Add(map[direction_x, direction_y]); } direction_x += direction[i, 0]; direction_y += direction[i, 1]; } else { break; } } } //色移しアクションを行ったら if (shift_color_flag) { //CC分ゲージを減らす SC_CC_gauge_script.UsedCC(0, 1); } } //プレイヤー名がASATOなら「囲繞無双」発動 else if (attack_player_name == "ASATO") { /* * //方角 右 下 左 上 * int[,] direction = { { 1, 0 }, { 0, -1 }, { -1, 0 }, { 0, 1 } }; * //移すピースの位置 * int direction_x = put_piece_pos_x - 2; * int direction_y = put_piece_pos_y + 2; * for (int i = 0; i < 4; i++) * { * for (int j = 0; j < 4; j++) * { * //マップ内かどうかを調べる * if(RangeDetermination(direction_x, direction_y)) * { * //色移しアクションを行う * if (shift_color_flag) * { * //マップ内なら十字の1ピースに色を移す * //名前と画像を差し替える * map[direction_x, direction_y].name = put_piece_name; * map[direction_x, direction_y].GetComponent<Image>().sprite = piece_sprite; * } * //候補のデータを引数に渡す * else * { * //範囲内のオブジェクト情報を格納する * candidate_pieces.Add(map[direction_x, direction_y]); * } * } * direction_x += direction[i, 0]; * direction_y += direction[i, 1]; * } * } */ //方角 int[,] direction = { { 1, 0 } }; //移すピースの位置 int direction_x = put_piece_pos_x - 2; int direction_y = put_piece_pos_y + 2; for (int i = 0; i < 2; i++) { if (i == 0) { direction_x = 0; direction_y = map_size - 1; } else { direction_x = 0; direction_y = 0; } //マップ内かどうかを調べる while (RangeDetermination(direction_x, direction_y)) { //色移しアクションを行う if (shift_color_flag) { //マップ内なら十字の1ピースに色を移す //名前と画像を差し替える map[direction_x, direction_y].name = put_piece_name; map[direction_x, direction_y].GetComponent <Image>().sprite = piece_sprite; } //候補のデータを引数に渡す else { //範囲内のオブジェクト情報を格納する candidate_pieces.Add(map[direction_x, direction_y]); } direction_x += direction[0, 0]; direction_y += direction[0, 1]; } } //色移しアクションを行ったら if (shift_color_flag) { //CC分ゲージを減らす SC_CC_gauge_script.UsedCC(0, 1); //自身にスキル封印の状態異常を12ターン掛ける attack_player_script.state.SkliiSeal(12); } } //上の条件に当てはまらなかったら色移しアクションをすべて「CC」と同様にする else { //方角(上下左右) int[,] direction = new int[4, 2] { { -1, 0 }, { 1, 0 }, { 0, -1 }, { 0, 1 } }; //移すピースの位置 int direction_x = 0; int direction_y = 0; for (int i = 0; i < 4; i++) { direction_x = put_piece_pos_x + direction[i, 0]; direction_y = put_piece_pos_y + direction[i, 1]; //マップ内かどうかを調べる if (RangeDetermination(direction_x, direction_y)) { //色移しアクションを行う if (shift_color_flag) { //マップ内なら周囲の1ピースに色を移す //名前と画像を差し替える map[direction_x, direction_y].name = put_piece_name; map[direction_x, direction_y].GetComponent <Image>().sprite = piece_sprite; } else { //範囲内のオブジェクト情報を格納する candidate_pieces.Add(map[direction_x, direction_y]); } } } //色移しアクションを行ったら if (shift_color_flag) { //プレイヤー名がCHISAKIなら「本気でいくよ!」追加効果発動 if (attack_player_name == "CHISAKI") { //SC2回分ゲージを減らす SC_CC_gauge_script.UsedCC(1, 0); //スキルゲージ上昇率アップの状態異常をつける attack_player_script.state.SkillGaugeRiseUp(2); } //プレイヤー名がYUKIなら「スキルシール」追加効果発動 else if (attack_player_name == "YUKI") { //SC1回分ゲージを減らす SC_CC_gauge_script.UsedCC(1, 0); //相手にスキル封印の状態異常を6ターン掛ける partner_player_script.state.SkliiSeal(6); } //プレイヤー名がREANなら「クイックムーブ」追加効果発動 else if (attack_player_name == "REAN") { //ゲージは減らさない SC_CC_gauge_script.UsedCC(1, 0); //自身に移動数倍化の状態異常を4ターンつける attack_player_script.state.QuivkMove(2, 4); } } } //--------------------------------------------------------------------- }
//SCかCCを使用する //引数1 SC_or_CC :true = SCを使う false = CCを使う //引数2 click_obj :クリック(選択)したオブジェクト情報 //引数3 attack_player_obj :現在攻撃中のプレイヤーオブジェクト情報(クリックしたプレイヤー) //引数4 partner_player_obj:相手のプレイヤーオブジェクト情報(現在攻撃中でないプレイヤー) //引数5 SC_CC_gauge_script:現在攻撃中のプレイヤーのSC_CCゲージスクリプト情報 public void TheyUseSC_or_CC(bool SC_or_CC, GameObject click_obj, GameObject attack_player_obj, GameObject partner_player_obj) { //ピースを置き換えるときの名前(プレイヤー名) string piece_player_name = click_obj.name; //ピースを置き換えるときの画像data(プレイヤーの画像data) Sprite player_sprite = click_obj.GetComponent <Image>().sprite; //クリックしたオブジェクトが全体マップ配列のどこにあるのかの位置情報(要素数) int pos_x = 0, pos_y = 0; //クリックしたオブジェクトが全体マップ配列のどこにあるのかの位置情報(要素数) PieceMapPosition(click_obj, ref pos_x, ref pos_y); //SCが選択されていたらSCを使用する //技:クリックした周囲のピースに色を移す(十字方向に1マスずつ) if (SC_or_CC == true) { //pos_x,pos_yを中心に4方向を調べて、マップ内であれば色を移す //方角(上下左右) int[,] direction = new int[4, 2] { { -1, 0 }, { 1, 0 }, { 0, -1 }, { 0, 1 } }; //移すピースの位置 int direction_x = 0; int direction_y = 0; for (int i = 0; i < 4; i++) { direction_x = pos_x + direction[i, 0]; direction_y = pos_y + direction[i, 1]; //マップ内かどうかを調べる if (direction_x >= 0 && direction_x < map_size) { if (direction_y >= 0 && direction_y < map_size) { //マップ内なら周囲の1ピースに色を移す //名前と画像を差し替える map[direction_x, direction_y].name = piece_player_name; map[direction_x, direction_y].GetComponent <Image>().sprite = player_sprite; } } } //現在攻撃中のプレイヤーのSC_CCゲージスクリプト情報を取得する SC_CC_GaugeScript SC_CC_gauge_script = attack_player_obj.GetComponent <PlayerScript>().SC_CC_Gauge.GetComponent <SC_CC_GaugeScript>(); //SCを使用したのでゲージの状態を更新する SC_CC_gauge_script.UsedSC(); } //CCが選択されていたらCCを使用する else { //ピースを置いたプレイヤーの名前 string player_name; //ピースを置いたプレイヤーの名前を取得 if (piece_player_name == "Player1") { player_name = PlayerManagemaentScript.player1_name; } else { player_name = PlayerManagemaentScript.player2_name; } //固有のスキル発動のための構造体 UniqueSkill unique_skill = new UniqueSkill(); //固有のスキル構造体の初期化 unique_skill.Initialization(player_name, piece_player_name, pos_x, pos_y, player_sprite, map, map_size); //固有のスキルを発動する unique_skill.SkillInvocation(null, attack_player_obj, partner_player_obj); } }