Exemplo n.º 1
0
            private void Update()
            {
                if (Input.GetKeyDown("p"))
                {
                    gameEventSystem.SendGameStateChanged(run ? GameState.Paused : GameState.Running);
                }

                if (!run)
                {
                    return;
                }

                float y              = movementDir.y;
                float speed          = normalSpeed;
                float targetRotation = 0.0f;

                bool isGrounded = controller.isGrounded;

                movementDir = transform.forward;

                if (Input.GetKey("w"))
                {
                    speed = fastSpeed;
                }
                else if (Input.GetKey("s"))
                {
                    speed = slowSpeed;
                }

                if (Input.GetKey("a"))
                {
                    targetRotation = -1.0f;
                }
                else if (Input.GetKey("d"))
                {
                    targetRotation = 1.0f;
                }

                transform.Rotate(Vector3.up * turnSpeedGrounded * Time.deltaTime * targetRotation);
                rotation = Mathf.MoveTowards(rotation, targetRotation, Time.deltaTime * 5.0f);
                animator.SetFloat("rotation", rotation);

                if (targetRotation != 0)
                {
                    gameEventSystem.SendRotationChanged(rotation);
                }

                if (isGrounded)
                {
                    if (Input.GetKeyDown("space"))
                    {
                        y = jumpForce;
                        animator.SetBool("jump", true);
                    }
                    else if (!wasGrounded)
                    {
                        gameEventSystem.SendGroundedChanged(true);
                    }

                    speed = Mathf.MoveTowards(speed, normalSpeed, Time.deltaTime * speedDecay);
                }
                else
                {
                    if (wasGrounded)
                    {
                        gameEventSystem.SendGroundedChanged(false);
                    }

                    y -= gravity * Time.deltaTime;

                    if (y < 0.0f)
                    {
                        y *= 1.05f;
                    }

                    speed = Mathf.MoveTowards(speed, 0.0f, Time.deltaTime * speedDecay);

                    if (Physics.Raycast(transform.position, -transform.up, 1.0f, obstacleMask.value))
                    {
                        animator.SetBool("jump", false);
                    }
                }

                animator.SetFloat("roller_velocity", Mathf.InverseLerp(slowSpeed, fastSpeed, speed));

                movementDir  *= speed;
                movementDir.y = y;

                wasGrounded = isGrounded;

                controller.Move(movementDir * Time.deltaTime);

                gameEventSystem.SendPositionChanged(transform.position);
            }
Exemplo n.º 2
0
 private void SwitchState(GameState state)
 {
     _state = state;
     gameEventSystem.SendGameStateChanged(_state);
 }