예제 #1
0
        void Start()
        {
            var player = PlayerIndexes.FromArrayIndex(this.playerIndex);

            mainCameraScript = GameObject.Find("Main Camera").GetComponent <CameraBehaviour>();
            #region 当たり判定
            opponent          = CommonScript.ReverseTeban(player);
            opponentHitboxTag = ThisSceneDto.HitboxTags[this.Opponent][(int)HitboxIndex.Hitbox];

            hitboxsSpriteRenderer = new SpriteRenderer[] {
                GameObject.Find(ThisSceneDto.HitboxPaths[player][(int)HitboxIndex.Hitbox]).GetComponent <SpriteRenderer>(),
                GameObject.Find(ThisSceneDto.HitboxPaths[player][(int)HitboxIndex.Weakbox]).GetComponent <SpriteRenderer>(),
                GameObject.Find(ThisSceneDto.HitboxPaths[player][(int)HitboxIndex.Strongbox]).GetComponent <SpriteRenderer>(),
            };
            weakboxCollider2D = GameObject.Find(ThisSceneDto.HitboxPaths[player][(int)HitboxIndex.Weakbox]).GetComponent <BoxCollider2D>();
            #endregion
            #region ジャンプ
            groundLayer = LayerMask.GetMask("Ground");
            Rigidbody2D = GetComponent <Rigidbody2D>();
            animator    = GetComponent <Animator>();
            #endregion

            // x位置を共有できるようにするぜ☆
            ThisSceneDto.PlayerToTransform[player] = transform;
        }
 FacingOpponentLR GetFacingOfOpponentLR()
 {
     // 自分と相手の位置(相手が右側にいるとき正となるようにする)
     if (0 <= SceneCommon.Player_to_transform[(int)CommonScript.ReverseTeban((PlayerIndex)playerIndex)].position.x - transform.position.x)
     {
         return(FacingOpponentLR.Right);
     }
     return(FacingOpponentLR.Left);
 }
예제 #3
0
        FacingOpponentLR GetFacingOfOpponentLR()
        {
            var player = PlayerIndexes.FromArrayIndex(this.playerIndex);

            // 自分と相手の位置(相手が右側にいるとき正となるようにする)
            if (0 <= ThisSceneDto.PlayerToTransform[CommonScript.ReverseTeban(player)].position.x - transform.position.x)
            {
                return(FacingOpponentLR.Right);
            }
            return(FacingOpponentLR.Left);
        }
        ///// <summary>
        ///// 現在のアニメーション・クリップに対応したデータを取得。
        ///// </summary>
        ///// <returns></returns>
        //public CliptypeExRecordable GetCurrentCliptypeExRecord(CliptypeExTable cliptypeExTable)
        //{
        //    AnimatorStateInfo animeStateInfo = animator.GetCurrentAnimatorStateInfo(0);

        //    CliptypeIndex aclipType = (CliptypeIndex)((StateExRecord)StateExTable.Instance.index_to_exRecord[StateExTable.Instance.hash_to_index[animeStateInfo.fullPathHash]]).Cliptype;

        //    if (cliptypeExTable.index_to_exRecord.ContainsKey((int)aclipType))
        //    {
        //        return cliptypeExTable.index_to_exRecord[(int)aclipType];
        //    }

        //    throw new UnityException("aclipType = [" + aclipType + "]に対応するアニメーション・クリップのレコードが無いぜ☆");
        //}


        /// <summary>
        /// 相手に向かって進んでいるか、相手から離れているか、こっちからは動いていないかを判定する。
        /// </summary>
        /// <param name="leverX"></param>
        /// <returns></returns>
        public FacingOpponentMoveFwBkSt GetFacingOpponentMoveFwBkSt(float leverX)
        {
            if (0.0f == leverX)
            {
                return(FacingOpponentMoveFwBkSt.Stay);
            }
            if (Mathf.Sign(SceneCommon.Player_to_transform[(int)CommonScript.ReverseTeban((PlayerIndex)playerIndex)].position.x - transform.position.x)
                ==
                Mathf.Sign(leverX)
                )
            {
                return(FacingOpponentMoveFwBkSt.Forward);
            }
            return(FacingOpponentMoveFwBkSt.Back);
        }
예제 #5
0
        ///// <summary>
        ///// 現在のアニメーション・クリップに対応したデータを取得。
        ///// </summary>
        ///// <returns></returns>
        //public CliptypeExRecordable GetCurrentCliptypeExRecord(CliptypeExTable cliptypeExTable)
        //{
        //    AnimatorStateInfo animeStateInfo = animator.GetCurrentAnimatorStateInfo(0);

        //    CliptypeIndex aclipType = (CliptypeIndex)((StateExRecord)StateExTable.Instance.index_to_exRecord[StateExTable.Instance.hash_to_index[animeStateInfo.fullPathHash]]).Cliptype;

        //    if (cliptypeExTable.index_to_exRecord.ContainsKey((int)aclipType))
        //    {
        //        return cliptypeExTable.index_to_exRecord[(int)aclipType];
        //    }

        //    throw new UnityException("aclipType = [" + aclipType + "]に対応するアニメーション・クリップのレコードが無いぜ☆");
        //}


        /// <summary>
        /// 相手に向かって進んでいるか、相手から離れているか、こっちからは動いていないかを判定する。
        /// </summary>
        /// <param name="leverX"></param>
        /// <returns></returns>
        public FacingOpponentMoveFwBkSt GetFacingOpponentMoveFwBkSt(float leverX)
        {
            if (0.0f == leverX)
            {
                return(FacingOpponentMoveFwBkSt.Stay);
            }

            var player = PlayerIndexes.FromArrayIndex(this.playerIndex);

            if (Mathf.Sign(ThisSceneDto.PlayerToTransform[CommonScript.ReverseTeban(player)].position.x - transform.position.x)
                ==
                Mathf.Sign(leverX)
                )
            {
                return(FacingOpponentMoveFwBkSt.Forward);
            }
            return(FacingOpponentMoveFwBkSt.Back);
        }
        void Start()
        {
            mainCameraScript = GameObject.Find("Main Camera").GetComponent <Main_CameraScript>();
            #region 当たり判定
            opponent          = CommonScript.ReverseTeban((PlayerIndex)playerIndex);
            opponentHitboxTag = SceneCommon.PlayerAndHitbox_to_tag[(int)this.Opponent, (int)HitboxIndex.Hitbox];

            hitboxsSpriteRenderer = new SpriteRenderer[] {
                GameObject.Find(SceneCommon.PlayerAndHitbox_to_path[playerIndex, (int)HitboxIndex.Hitbox]).GetComponent <SpriteRenderer>(),
                GameObject.Find(SceneCommon.PlayerAndHitbox_to_path[playerIndex, (int)HitboxIndex.Weakbox]).GetComponent <SpriteRenderer>(),
                GameObject.Find(SceneCommon.PlayerAndHitbox_to_path[playerIndex, (int)HitboxIndex.Strongbox]).GetComponent <SpriteRenderer>(),
            };
            weakboxCollider2D = GameObject.Find(SceneCommon.PlayerAndHitbox_to_path[playerIndex, (int)HitboxIndex.Weakbox]).GetComponent <BoxCollider2D>();
            #endregion
            #region ジャンプ
            groundLayer = LayerMask.GetMask("Ground");
            Rigidbody2D = GetComponent <Rigidbody2D>();
            animator    = GetComponent <Animator>();
            #endregion

            // x位置を共有できるようにするぜ☆
            SceneCommon.Player_to_transform[playerIndex] = transform;
        }
        /// <summary>
        /// 手番を変えるぜ☆
        /// </summary>
        /// <param name="teban"></param>
        public void SetTeban(PlayerIndex teban)
        {
            CommonScript.Teban = teban;
            PlayerIndex opponent = CommonScript.ReverseTeban(teban);
            //Debug.Log("Teban = " + teban.ToString() + " Opponent = " + opponent.ToString());

            // 先手の色
            {
                player_to_turn[(int)teban].color = Color.white;
                player_to_time[(int)teban].color = Color.white;

                Color outlineColor;
                if (ColorUtility.TryParseHtmlString("#776DC180", out outlineColor))
                {
                    player_to_turnOutline[(int)teban].effectColor = outlineColor;
                    player_to_timeOutline[(int)teban].effectColor = outlineColor;
                }
            }

            // 後手の色
            {
                Color fontColor;
                if (ColorUtility.TryParseHtmlString("#A5A9A9FF", out fontColor))
                {
                    player_to_turn[(int)opponent].color = fontColor;
                    player_to_time[(int)opponent].color = fontColor;
                }

                Color outlineColor;
                if (ColorUtility.TryParseHtmlString("#35298E80", out outlineColor))
                {
                    player_to_turnOutline[(int)opponent].effectColor = outlineColor;
                    player_to_timeOutline[(int)opponent].effectColor = outlineColor;
                }
            }
        }
        // Update is called once per frame
        void Update()
        {
            #region 対局開始表示
            ReadyingTime++;
            if (SceneCommon.READY_TIME_LENGTH == ReadyingTime)
            {
                fight0.SetActive(false);
                fight1.SetActive(false);
            }
            #endregion

            #region 投了判定
            for (int iLoser = (int)PlayerIndex.Player1; iLoser < (int)PlayerIndex.Num; iLoser++)
            {
                if (player_to_charScript[iLoser].IsResign)
                {
                    player_to_charScript[iLoser].IsResign = false;

                    PlayerIndex winner = CommonScript.ReverseTeban((PlayerIndex)iLoser);
                    player_to_winCount[(int)winner]++;

                    if ((int)PlayerIndex.Player1 == iLoser)
                    {
                        // 1プレイヤーの投了
                        CommonScript.Result = Result.Player2_Win;
                    }
                    else if ((int)PlayerIndex.Player2 == iLoser)
                    {
                        // 2プレイヤーの投了
                        CommonScript.Result = Result.Player1_Win;
                    }
                    else
                    {
                        throw new UnityException("どっちが勝ったんだぜ☆?");
                    }

                    // 現在、何ラウンドか☆
                    int round;
                    if (!playerAndRound_to_result[iLoser, 0].activeSelf)//1ラウンド目の星が表示されていないとき。
                    {
                        round = 0;
                    }
                    else if (!playerAndRound_to_result[iLoser, 1].activeSelf)//2ラウンド目の星が表示されていないとき。
                    {
                        round = 1;
                        if (1 < player_to_winCount[(int)winner])//2本先取
                        {
                            SceneManager.LoadScene(CommonScript.Scene_to_name[(int)SceneIndex.Result]);
                            return;
                        }
                    }
                    else//星が2ラウンド目まで表示されているとき☆
                    {
                        round = 2;
                        SceneManager.LoadScene(CommonScript.Scene_to_name[(int)SceneIndex.Result]);
                        return;
                    }

                    //if (round < 2)
                    {
                        playerAndRound_to_result[(int)PlayerIndex.Player1, round].SetActive(true);
                        playerAndRound_to_result[(int)PlayerIndex.Player2, round].SetActive(true);

                        Sprite[] sprites = Resources.LoadAll <Sprite>("Sprites/ResultMark0");
                        if (PlayerIndex.Player1 == winner)
                        {
                            playerAndRound_to_result[(int)PlayerIndex.Player1, round].GetComponent <Image>().sprite = System.Array.Find <Sprite>(sprites, (sprite) => sprite.name.Equals("ResultMark0_0"));
                            playerAndRound_to_result[(int)PlayerIndex.Player2, round].GetComponent <Image>().sprite = System.Array.Find <Sprite>(sprites, (sprite) => sprite.name.Equals("ResultMark0_1"));
                        }
                        else if (PlayerIndex.Player2 == winner)
                        {
                            playerAndRound_to_result[(int)PlayerIndex.Player1, round].GetComponent <Image>().sprite = System.Array.Find <Sprite>(sprites, (sprite) => sprite.name.Equals("ResultMark0_1"));
                            playerAndRound_to_result[(int)PlayerIndex.Player2, round].GetComponent <Image>().sprite = System.Array.Find <Sprite>(sprites, (sprite) => sprite.name.Equals("ResultMark0_0"));
                        }

                        InitTime();
                        InitBar();
                        isRoundFinished = false;
                        IsResignCalled  = false;
                        resign0.SetActive(false);
                        player_to_playerChar[(int)PlayerIndex.Player1].transform.position = new Vector3(2.52f, 0.0f);
                        player_to_playerChar[(int)PlayerIndex.Player2].transform.position = new Vector3(-2.52f, 0.0f);
                        ReadyingTime = 0;
                        fight0.SetActive(true);
                        fight1.SetActive(true);
                    }
                }
            }
            #endregion

            #region 時間制限
            if (!isRoundFinished)
            {
                // カウントダウン
                player_to_timeCount[(int)CommonScript.Teban] -= Time.deltaTime; // 前のフレームからの経過時間を引くぜ☆
                player_to_time[(int)CommonScript.Teban].text  = ((int)player_to_timeCount[(int)CommonScript.Teban]).ToString();
            }
            #endregion

            #region HP、残り時間判定
            if (!isRoundFinished)
            {
                //if (bar1_rt.sizeDelta.x <= 0 && bar2_rt.sizeDelta.x <= 0)
                //{
                //    // ダブル・ノックアウト
                //}
                //else
                PlayerIndex loser = PlayerIndex.Num;
                if (player_to_barTransform[(int)PlayerIndex.Player2].sizeDelta.x <= player_to_barTransform[(int)PlayerIndex.Player1].sizeDelta.x ||
                    player_to_timeCount[(int)PlayerIndex.Player2] < 1.0f)
                {
                    // 1プレイヤーの勝ち
                    loser = PlayerIndex.Player2;
                }
                else if (player_to_barTransform[(int)PlayerIndex.Player1].sizeDelta.x <= 0 ||
                         player_to_timeCount[(int)PlayerIndex.Player1] < 1.0f)
                {
                    // 2プレイヤーの勝ち
                    loser = (int)PlayerIndex.Player1;
                }

                if (PlayerIndex.Num != loser)
                {
                    isRoundFinished = true;
                    player_to_charScript[(int)loser].Pull_ResignByLose();
                }
            }
            #endregion
        }
예제 #9
0
        // Update is called once per frame
        void Update()
        {
            #region 対局開始表示
            ReadyingTime++;
            if (ThisSceneDto.ReadyTimeLength == ReadyingTime)
            {
                fight0.SetActive(false);
                fight1.SetActive(false);
            }
            #endregion

            #region 投了判定
            foreach (var loser in PlayerIndexes.All)
            {
                if (this.PlayerDTOs[loser].PlayerCharScript.IsResign)
                {
                    this.PlayerDTOs[loser].PlayerCharScript.IsResign = false;

                    PlayerIndex winner = CommonScript.ReverseTeban(loser);
                    this.PlayerDTOs[winner].WinCount++;

                    if (PlayerIndex.Player1 == loser)
                    {
                        // 1プレイヤーの投了
                        CommonScript.Result = Result.Player2_Win;
                    }
                    else if (PlayerIndex.Player2 == loser)
                    {
                        // 2プレイヤーの投了
                        CommonScript.Result = Result.Player1_Win;
                    }
                    else
                    {
                        throw new UnityException("どっちが勝ったんだぜ☆?");
                    }

                    // 現在、何ラウンドか☆
                    int round;
                    if (!this.PlayerDTOs[loser].RoundsResult[0].activeSelf)//1ラウンド目の星が表示されていないとき。
                    {
                        round = 0;
                    }
                    else if (!this.PlayerDTOs[loser].RoundsResult[1].activeSelf)//2ラウンド目の星が表示されていないとき。
                    {
                        round = 1;
                        if (1 < this.PlayerDTOs[winner].WinCount)//2本先取
                        {
                            SceneManager.LoadScene(CommonScript.Scene_to_name[(int)SceneIndex.Result]);
                            return;
                        }
                    }
                    else//星が2ラウンド目まで表示されているとき☆
                    {
                        round = 2;
                        SceneManager.LoadScene(CommonScript.Scene_to_name[(int)SceneIndex.Result]);
                        return;
                    }

                    //if (round < 2)
                    {
                        this.PlayerDTOs[PlayerIndex.Player1].RoundsResult[round].SetActive(true);
                        this.PlayerDTOs[PlayerIndex.Player2].RoundsResult[round].SetActive(true);

                        Sprite[] sprites = Resources.LoadAll <Sprite>("Sprites/ResultMark0");
                        if (PlayerIndex.Player1 == winner)
                        {
                            this.PlayerDTOs[PlayerIndex.Player1].RoundsResult[round].GetComponent <Image>().sprite = System.Array.Find <Sprite>(sprites, (sprite) => sprite.name.Equals("ResultMark0_0"));
                            this.PlayerDTOs[PlayerIndex.Player2].RoundsResult[round].GetComponent <Image>().sprite = System.Array.Find <Sprite>(sprites, (sprite) => sprite.name.Equals("ResultMark0_1"));
                        }
                        else if (PlayerIndex.Player2 == winner)
                        {
                            this.PlayerDTOs[PlayerIndex.Player1].RoundsResult[round].GetComponent <Image>().sprite = System.Array.Find <Sprite>(sprites, (sprite) => sprite.name.Equals("ResultMark0_1"));
                            this.PlayerDTOs[PlayerIndex.Player2].RoundsResult[round].GetComponent <Image>().sprite = System.Array.Find <Sprite>(sprites, (sprite) => sprite.name.Equals("ResultMark0_0"));
                        }

                        InitTime();
                        InitBar();
                        isRoundFinished = false;
                        IsResignCalled  = false;
                        resign0.SetActive(false);
                        this.PlayerDTOs[PlayerIndex.Player1].PlayerChar.transform.position = new Vector3(2.52f, 0.0f);
                        this.PlayerDTOs[PlayerIndex.Player2].PlayerChar.transform.position = new Vector3(-2.52f, 0.0f);
                        ReadyingTime = 0;
                        fight0.SetActive(true);
                        fight1.SetActive(true);
                    }
                }
            }
            #endregion

            #region
            // 時間制限
            if (!isRoundFinished)
            {
                // カウントダウン
                this.PlayerDTOs[CommonScript.Teban].TimeCount -= Time.deltaTime; // 前のフレームからの経過時間を引くぜ☆
                this.PlayerDTOs[CommonScript.Teban].Time.text  = ((int)this.PlayerDTOs[CommonScript.Teban].TimeCount).ToString();
            }
            #endregion

            #region HP、残り時間判定
            if (!isRoundFinished)
            {
                //if (bar1_rt.sizeDelta.x <= 0 && bar2_rt.sizeDelta.x <= 0)
                //{
                //    // ダブル・ノックアウト
                //}
                //else
                PlayerIndex loser = PlayerIndex.None;
                if (this.PlayerDTOs[PlayerIndex.Player2].BarTransform.sizeDelta.x <= this.PlayerDTOs[PlayerIndex.Player1].BarTransform.sizeDelta.x ||
                    this.PlayerDTOs[PlayerIndex.Player2].TimeCount < 1.0f)
                {
                    // 1プレイヤーの勝ち
                    loser = PlayerIndex.Player2;
                }
                else if (this.PlayerDTOs[PlayerIndex.Player1].BarTransform.sizeDelta.x <= 0 ||
                         this.PlayerDTOs[PlayerIndex.Player1].TimeCount < 1.0f)
                {
                    // 2プレイヤーの勝ち
                    loser = PlayerIndex.Player1;
                }

                if (PlayerIndex.None != loser)
                {
                    isRoundFinished = true;
                    this.PlayerDTOs[loser].PlayerCharScript.Pull_ResignByLose();
                }
            }
            #endregion
        }