Example #1
0
    /*
     *  Action
     */
    void FixedUpdate()
    {
        switch (currentAction)
        {
        case ActionState.Idle:
            if (watchBallLock)
            {
                currentAction = ActionState.Locking;
            }
            break;


        case ActionState.Locking:
            if (!watchBallLock)
            {
                currentAction = ActionState.UnLocking;
            }
            else
            {
                if (Hud.Locking())
                {
                    Ball.WatchBall.SetActive(true);
                    currentAction = ActionState.Loading;
                }
            }
            break;


        case ActionState.UnLocking:
            if (watchBallLock)
            {
                currentAction = ActionState.Locking;
            }
            if (Hud.UnLocking())
            {
                currentAction = ActionState.Idle;
            }
            break;


        case ActionState.Loading:
            if (!watchBall && !watchBallLock)
            {
                currentAction     = ActionState.Firing;
                firingOrientation = Player.transform.eulerAngles.y;
                Ball.WatchBall.SetActive(false);
            }

            Club.Load();
            Hud.SetPowerBarAmount(Club.LoadingAmount());
            break;

        case ActionState.Firing:
            Hud.SetPowerBarAmount(0);
            Club.Fire();

            if (!Ball.IsShooted() && Club.HasShooted())                                                                         //Shoot now
            {
                Ball.Shoot(Club.LoadingTime * Club.clubForceCoef, Club.clubAngle, firingOrientation);
                Hud.UpdateScore(Score++);
            }
            else if (Club.IsFired())
            {
                currentAction = ActionState.Fired;
                AnalyticsGame.Shoot();
            }
            break;



        case ActionState.Fired:
            if (Ball.IsOutOfBound())
            {
                currentAction = ActionState.OutOfBound;
                break;
            }
            if (Ball.IsStopped())
            {
                Hud.FadeOut();
                currentAction = ActionState.MoveToTheBall;
            }
            break;

        case ActionState.Won:
            Ball.StopAndMove(Holes.CurrentHole.BeginPosition.transform.position);                     //Go to next hole
            //BallInfo.ShowInformation(Ball.transform.position, Localization.Hole);
            Hud.FadeOut();
            currentAction = ActionState.MoveToTheBall;
            break;

        case ActionState.OutOfBound:
            BallInfo.ShowInformation(Ball.transform.position, Localization.OutOfZone);
            Ball.StopAndGetBackToOldPos();
            Hud.UpdateScore(Score++);
            Hud.FadeOut();
            currentAction = ActionState.MoveToTheBall;

            AnalyticsGame.OutOfBound();
            break;

        case ActionState.MoveToTheBall:
            if (Hud.IsFadingIn())
            {
                Bag.MoveToTheBall(Ball.transform.position, Holes.CurrentHole.transform.position);
                Player.transform.position = Ball.transform.position;
                Club.Reset();
                SetWind();
                Hud.EnableReticle(true);
                currentAction = ActionState.Idle;
                locked        = false;
            }
            break;
        }
    }