Beispiel #1
0
 void Start()
 {
     rb              = GetComponent <Rigidbody2D>();
     sr              = GetComponent <SpriteRenderer>();
     stateVertical   = StateVertical.FALLING;
     stateHorizontal = StateHorizontal.STILL;
     startPosition   = rb.position;
 }
Beispiel #2
0
    public void Kill()
    {
        rb.position = startPosition;
        rb.velocity = Vector2.zero;

        stateVertical   = StateVertical.FALLING;
        stateHorizontal = StateHorizontal.STILL;
        activeCollisions.Clear();
        queuedActions.Clear();
    }
Beispiel #3
0
    // Process state changes due to inputs recieved on this frame. Clear input queue
    private void ProcessQueuedActions()
    {
        if (queuedActions.Contains(Action.JUMP))
        {
            if (stateVertical == StateVertical.GROUNDED)
            {
                stateVertical = StateVertical.JUMPING;
            }
            queuedActions.Remove(Action.JUMP);
        }

        if (queuedActions.Contains(Action.MOVE_RIGHT) && !queuedActions.Contains(Action.MOVE_LEFT))
        {
            switch (stateHorizontal)
            {
            case StateHorizontal.MOVING_RIGHT_DECELERATING:
            case StateHorizontal.MOVING_RIGHT_ACCELERATING_LEFT:
            case StateHorizontal.STILL:
                stateHorizontal = StateHorizontal.MOVING_RIGHT_ACCELERATING_RIGHT;
                break;

            case StateHorizontal.MOVING_LEFT:
            case StateHorizontal.MOVING_LEFT_DECELERATING:
            case StateHorizontal.MOVING_LEFT_ACCELERATING_LEFT:
                stateHorizontal = StateHorizontal.MOVING_LEFT_ACCELERATING_RIGHT;
                break;

            default:
                break;
            }
        }
        else if (queuedActions.Contains(Action.MOVE_LEFT) && !queuedActions.Contains(Action.MOVE_RIGHT))
        {
            switch (stateHorizontal)
            {
            case StateHorizontal.MOVING_LEFT_DECELERATING:
            case StateHorizontal.MOVING_LEFT_ACCELERATING_RIGHT:
            case StateHorizontal.STILL:
                stateHorizontal = StateHorizontal.MOVING_LEFT_ACCELERATING_LEFT;
                break;

            case StateHorizontal.MOVING_RIGHT:
            case StateHorizontal.MOVING_RIGHT_DECELERATING:
            case StateHorizontal.MOVING_RIGHT_ACCELERATING_RIGHT:
                stateHorizontal = StateHorizontal.MOVING_RIGHT_ACCELERATING_LEFT;
                break;

            default:
                break;
            }
        }
        else
        {
            switch (stateHorizontal)
            {
            case StateHorizontal.MOVING_RIGHT:
            case StateHorizontal.MOVING_RIGHT_ACCELERATING_RIGHT:
            case StateHorizontal.MOVING_RIGHT_ACCELERATING_LEFT:
                stateHorizontal = StateHorizontal.MOVING_RIGHT_DECELERATING;
                break;

            case StateHorizontal.MOVING_LEFT:
            case StateHorizontal.MOVING_LEFT_ACCELERATING_LEFT:
            case StateHorizontal.MOVING_LEFT_ACCELERATING_RIGHT:
                stateHorizontal = StateHorizontal.MOVING_LEFT_DECELERATING;
                break;

            default:
                break;
            }
        }
    }
Beispiel #4
0
    // Apply physics updates based on the current state. Update state if necessary
    private void ApplyState()
    {
        switch (stateHorizontal)
        {
        case StateHorizontal.MOVING_RIGHT_ACCELERATING_RIGHT:
            if (rb.velocity.x < RUN_SPEED)
            {
                rb.velocity += MOVE_RIGHT_FORCE * Time.fixedDeltaTime;
            }
            else
            {
                stateHorizontal = StateHorizontal.MOVING_RIGHT;
            }
            break;

        case StateHorizontal.MOVING_LEFT_ACCELERATING_RIGHT:
            if (rb.velocity.x < 0.0f)
            {
                rb.velocity += MOVE_RIGHT_FORCE * Time.fixedDeltaTime;
            }
            else
            {
                stateHorizontal = StateHorizontal.MOVING_RIGHT_ACCELERATING_RIGHT;
            }
            break;

        case StateHorizontal.MOVING_RIGHT_ACCELERATING_LEFT:
            if (rb.velocity.x > 0.0f)
            {
                rb.velocity += MOVE_LEFT_FORCE * Time.fixedDeltaTime;
            }
            else
            {
                stateHorizontal = StateHorizontal.MOVING_LEFT_ACCELERATING_LEFT;
            }
            break;

        case StateHorizontal.MOVING_LEFT_ACCELERATING_LEFT:
            if (rb.velocity.x > -1.0f * RUN_SPEED)
            {
                rb.velocity += MOVE_LEFT_FORCE * Time.fixedDeltaTime;
            }
            else
            {
                stateHorizontal = StateHorizontal.MOVING_LEFT;
            }
            break;

        case StateHorizontal.MOVING_RIGHT_DECELERATING:
            if (rb.velocity.x + DECELERATION_RIGHT_FORCE.x * Time.fixedDeltaTime > 0)
            {
                rb.velocity += DECELERATION_RIGHT_FORCE * Time.fixedDeltaTime;
            }
            else
            {
                stateHorizontal = StateHorizontal.STILL;
            }
            break;

        case StateHorizontal.MOVING_LEFT_DECELERATING:
            if (rb.velocity.x + DECELERATION_LEFT_FORCE.x * Time.fixedDeltaTime < 0)
            {
                rb.velocity += DECELERATION_LEFT_FORCE * Time.fixedDeltaTime;
            }
            else
            {
                stateHorizontal = StateHorizontal.STILL;
            }
            break;

        default:
            break;
        }

        switch (stateVertical)
        {
        case StateVertical.JUMPING:
            if (rb.velocity.y < JUMP_SPEED)
            {
                rb.velocity += JUMP_FORCE * Time.fixedDeltaTime;
            }
            else
            {
                stateVertical = StateVertical.FALLING;
            }
            break;

        case StateVertical.FALLING:
            rb.velocity += GRAVITY * Time.fixedDeltaTime;
            break;

        default:
            break;
        }
    }
Beispiel #5
0
    private void ProcessCollisions()
    {
        bool ground  = activeCollisions.ContainsValue(CollisionType.GROUND);
        bool ceiling = activeCollisions.ContainsValue(CollisionType.CEILING);
        bool wall    = activeCollisions.ContainsValue(CollisionType.WALL);

        if (wall)
        {
            stateHorizontal = StateHorizontal.STILL;
            rb.velocity     = new Vector2(0.0f, rb.velocity.y);
        }

        if (ground && ceiling)
        {
            switch (stateVertical)
            {
            case StateVertical.JUMPING:
            case StateVertical.FALLING:
                stateVertical = StateVertical.GROUNDED;
                rb.velocity   = new Vector2(rb.velocity.x, 0.0f);
                break;

            default:
                break;
            }
        }
        else if (ground && !ceiling)
        {
            switch (stateVertical)
            {
            case StateVertical.FALLING:
                stateVertical = StateVertical.GROUNDED;
                rb.velocity   = new Vector2(rb.velocity.x, 0.0f);
                break;

            default:
                break;
            }
        }
        else if (!ground && ceiling)
        {
            switch (stateVertical)
            {
            case StateVertical.JUMPING:
            case StateVertical.GROUNDED:
                stateVertical = StateVertical.FALLING;
                rb.velocity   = new Vector2(rb.velocity.x, 0.0f);
                break;

            default:
                break;
            }
        }
        else if (!ground && !ceiling)
        {
            switch (stateVertical)
            {
            case StateVertical.GROUNDED:
                stateVertical = StateVertical.FALLING;
                break;

            default:
                break;
            }
        }
    }