예제 #1
0
        public override void UpdateAction()
        {
            // つた掴みチェック
            if (StellaMove.CheckIvyHold())
            {
                return;
            }

            // 行動ボタンチェック。着地時は何もしない
            if (Input.GetButton("Action") && !isLanding)
            {
                Actable act = StellaMove.ActionBoxInstance.GetActableInstance();
                if (act != null)
                {
                    if (act.Action())
                    {
                        return;
                    }
                }
            }

            StellaMove.instance.Gravity();
            StellaMove.instance.Move();

            if (!isLanding && StellaMove.chrController.isGrounded && StellaMove.myVelocity.y < 0f)
            {
                SoundController.Play(SoundController.SeType.Landing);

                StellaMove.myVelocity.x = 0;
                StellaMove.RegisterAnimEvent(Grounded);
                isLanding = true;
                StellaMove.CheckStepOn();
            }
        }
예제 #2
0
        public override void UpdateAction()
        {
            // つた掴みチェック
            if (StellaMove.CheckIvyHold())
            {
                return;
            }

            // 行動ボタンチェック。着地時は何もしない
            if (Input.GetButton("Action") && !isLanding)
            {
                Actable act = StellaMove.ActionBoxInstance.GetActableInstance();
                if (act != null)
                {
                    if (act.Action())
                    {
                        return;
                    }
                }
            }

            StellaMove.instance.Gravity();
            StellaMove.instance.Move();

            // 着地チェック
            bool isGrounded = StellaMove.ChrController.isGrounded;

            if (!isGrounded && (StellaMove.myVelocity.y < 0))
            {
                int hitCount = PhysicsCaster.CharacterControllerCast(
                    StellaMove.ChrController,
                    Vector3.down,
                    StellaMove.CollisionMargin,
                    PhysicsCaster.MapCollisionPlayerOnlyLayer);
                for (int i = 0; i < hitCount; i++)
                {
                    if (!PhysicsCaster.hits[i].collider.isTrigger)
                    {
                        isGrounded = true;
                    }
                }
            }

            // 着地チェック
            if (!isLanding && isGrounded && StellaMove.myVelocity.y < 0f)
            {
                SoundController.Play(SoundController.SeType.Landing);

                StellaMove.myVelocity.x = 0;
                StellaMove.RegisterAnimEvent(Grounded);
                isLanding = true;
                StellaMove.CheckStepOn();

                StageManager.SetFollowCameraTarget(StellaMove.instance.transform);
            }
            // 頭ぶつけチェック
            else if ((StellaMove.myVelocity.y > 0f) && StellaMove.IsHitHead)
            {
                SoundController.Play(SoundController.SeType.HitHead);
                StellaMove.myVelocity.y = 0f;
            }
        }
예제 #3
0
        public override void UpdateAction()
        {
            // ターン中処理
            if (state == StateType.Turn)
            {
                if (StellaMove.instance.Turn())
                {
                    state = StateType.Walk;
                }
                return;
            }

            // 置く候補の地面の座標
            Vector3 naepos = GetPutPosition(StellaMove.instance.transform.position);
            bool    canPut = CheckPut(naepos);

            if (canPut)
            {
                // 置けるならボタンによって苗を置く
                if (Input.GetButton("Water") || Input.GetButton("Action"))
                {
                    StellaMove.naePutPosition = naepos;
                    StellaMove.instance.ChangeAction(StellaMove.ActionType.PutDown);
                    return;
                }

                // 今置いたらここという場所に苗マーカーを表示
                NaeActable.MarkerObject.SetActive(true);
                naepos.y += StellaMove.naeActable.HeightFromGround;
                NaeActable.MarkerObject.transform.position = naepos;
            }
            else
            {
                // 置けない時はマーカーを非表示
                NaeActable.MarkerObject.SetActive(false);
            }

            // 行動
            if (!Walk())
            {
                // ターン時はこれ以降の処理不要
                return;
            }

            bool isBack = PushCheck();

            StellaMove.instance.Gravity();

            // 移動先の候補を調べる
            Vector3 nextNaePos = GetPutPosition(StellaMove.instance.transform.position + StellaMove.myVelocity * Time.fixedDeltaTime);

            if (!Mathf.Approximately(Vector3.Distance(naepos, nextNaePos), 0f))
            {
                // 苗の候補場所が変わるので、移動キャンセル調査
                // 苗の高さは、地面より1マス分上を確認
                nextNaePos.y = StellaMove.chrController.bounds.min.y + naeWalkCollideHeight + StellaMove.naeActable.HeightFromGround;
                int hitCount = StellaMove.naeActable.FetchOverlapObjects(nextNaePos, hits, groundLayer);
                for (int i = 0; i < hitCount; i++)
                {
                    if (hits[i].collider.CompareTag(GroundTag))
                    {
                        // ぶつかるので移動をキャンセル
                        StellaMove.myVelocity.x = 0f;
                        break;
                    }
                }
            }

            StellaMove.instance.Move();

            if (!StellaMove.chrController.isGrounded)
            {
                StellaMove.instance.ChangeAction(StellaMove.ActionType.Air);
                FallNextBlock();
            }
            else
            {
                // 乗っかりチェック
                StellaMove.CheckStepOn();

                // 戻しじゃなく移動しているなら、ジャンプチェック
                if (!isBack && !Mathf.Approximately(StellaMove.myVelocity.x, 0))
                {
                    StellaMove.instance.CheckMiniJump();
                }
            }
        }
예제 #4
0
        public override void UpdateAction()
        {
            // ターン中処理
            if (state == StateType.Turn)
            {
                if (StellaMove.instance.Turn())
                {
                    state = StateType.Walk;
                }
                return;
            }

            // 水まきチェック
            if (Input.GetButton("Water"))
            {
                StellaMove.instance.ChangeAction(StellaMove.ActionType.Water);
                return;
            }
            else if (StellaMove.CheckIvyHold())
            {
                return;
            }
            else
            {
                // 行動ボタンチェック
                if (Input.GetButton("Action"))
                {
                    Actable act = StellaMove.ActionBoxInstance.GetActableInstance();
                    if (act != null)
                    {
                        if (act.Action())
                        {
                            return;
                        }
                    }
                }

                Walk();
            }

            bool isBack = PushCheck();

            StellaMove.instance.Gravity();
            StellaMove.instance.Move();
            StellaMove.ChrController.stepOffset = StellaMove.DefaultStepOffset;

            if (!StellaMove.ChrController.isGrounded)
            {
                StellaMove.instance.ChangeAction(StellaMove.ActionType.Air);
                FallNextBlock();
            }
            else
            {
                // 乗っかりチェック
                StellaMove.CheckStepOn();

                // 移動しているなら、ジャンプチェック
                if (!isBack && !Mathf.Approximately(StellaMove.myVelocity.x, 0))
                {
                    StellaMove.instance.CheckMiniJump();
                }
            }
        }