Beispiel #1
0
    public bool MoveTo(DIRECTION_BUTTON dir, Vector3 destinationPosition)
    {
        UpdateAnimation();

        if (!movement.IsMoving || (destinationPosition == transform.position))
        {
            ClampCurrentPosition();
            return(false);
        }

        if (movement.IsMoving && (dir != DIRECTION_BUTTON.NONE) && (dir == lastCollisionDir))
        {
            ClampCurrentPosition();
            if (lastCollidedObject is GameObject)
            {
                PlayCollisionSound(lastCollidedObject);
            }
            return(true);
        }
        else if (movement.IsMoving)
        {
            lastCollidedObject = null;
            lastCollisionDir   = DIRECTION_BUTTON.NONE;
        }


        transform.position = Vector3.MoveTowards(transform.position, destinationPosition, Time.deltaTime * speed);
        transform.rotation = new Quaternion(0, 0, 0, 0);
        return(true);
    }
Beispiel #2
0
    void FixedUpdate()
    {
        DIRECTION_BUTTON dir    = InputController.GetPressedDirectionButton();
        ACTION_BUTTON    action = InputController.GetPressedActionButton();

        MovementUpdate(dir);
        RaycastUpdate(dir, action);
    }
Beispiel #3
0
    private void MovementUpdate(DIRECTION_BUTTON dir)
    {
        if (movement != null && !movement.IsMoving)
        {
            currentTilesToMove = tilesToMove;
        }

        Move(dir, currentTilesToMove);
    }
Beispiel #4
0
    public bool Move(DIRECTION_BUTTON dir, int tiles)
    {
        currentTilesToMove = tiles;

        Vector3 destinationPosition = movement.CalculateDestinationPosition(
            transform.position, dir, tiles
            );

        return(MoveTo(dir, destinationPosition));
    }
    void FixedUpdate()
    {
        DIRECTION_BUTTON dir = InputController.GetPressedDirectionButton();

        if (movement != null && !movement.IsMoving)
        {
            currentTilesToMove = tilesToMove;
        }
        Move(dir, currentTilesToMove);
    }
Beispiel #6
0
    void OnCollisionEnter2D(Collision2D col)
    {
        // Debug.Log("Collision ENTER between " + this.name + " and " + col.gameObject.name);

        lastCollidedObject = col.gameObject;
        lastCollisionDir   = movement.LastDirection;

        ClampCurrentPosition();

        PlayCollisionSound(lastCollidedObject);
    }
Beispiel #7
0
    void FixedUpdate()
    {
        if (!CanMove() && IsMoving())
        {
            StopMoving();
        }

        DIRECTION_BUTTON dir    = InputController.GetPressedDirectionButton();
        ACTION_BUTTON    action = InputController.GetPressedActionButton();

        TriggerButtons(dir, action);
    }
Beispiel #8
0
    void OnCollisionStay2D(Collision2D col)
    {
        // Debug.Log("Collision STAY between " + this.name + " and " + col.gameObject.name);

        lastCollidedObject = col.gameObject;
        lastCollisionDir   = movement.LastDirection;

        if (movement.IsMoving)
        {
            PlayCollisionSound(lastCollidedObject);
        }

        StopMoving();
    }
Beispiel #9
0
    public void TriggerButtons(DIRECTION_BUTTON dir, ACTION_BUTTON action)
    {
        if (!CanMove() && IsMoving())
        {
            StopMoving();
        }

        if (CanMove())
        {
            MovementUpdate(dir);
        }

        RaycastUpdate(dir, action);
    }
Beispiel #10
0
    void OnCollisionStay2D(Collision2D col)
    {
        var            data          = col.gameObject.GetComponent <CollisionData>();
        COLLISION_TYPE collisionType = data ? data.type : COLLISION_TYPE.UNKNOWN;

        lastCollisionData = data;
        lastCollisionDir  = movement.LastDirection;
        movement.Stop();
        UpdateAnimation();
        transform.position = movement.FixPosition(transform.position);

        // detect collision type
        Debug.Log("COLLISION STAY on: " + col.gameObject.transform.position.ToString() + ", button: " + lastCollisionDir + ", type: " + collisionType.ToString());
    }
    public bool Move(DIRECTION_BUTTON dir, int tiles)
    {
        //if (dir == DIRECTION_BUTTON.NONE || tiles == 0)
        //{
        //    return false;
        //}

        currentTilesToMove = tiles;

        Vector3 destinationPosition = movement.CalculateDestinationPosition(
            transform.position, dir, tiles
            );

        return(MoveTo(dir, destinationPosition));
    }
Beispiel #12
0
    void FixedUpdate()
    {
        DIRECTION_BUTTON dir    = InputController.GetPressedDirectionButton();
        ACTION_BUTTON    action = InputController.GetPressedActionButton();

        if (!CanMove() && IsMoving())
        {
            StopMoving();
        }

        if (CanMove())
        {
            MovementUpdate(dir);
        }

        RaycastUpdate(dir, action);
    }
Beispiel #13
0
    void OnCollisionEnter2D(Collision2D col)
    {
        CollisionData  data          = col.gameObject.GetComponent <CollisionData>();
        COLLISION_TYPE collisionType = data ? data.type : COLLISION_TYPE.UNKNOWN;

        lastCollisionData = data;
        lastCollisionDir  = movement.LastDirection;
        StopMoving();

        // detect collision type
        Debug.Log("COLLISION ENTER on: " + col.gameObject.transform.position.ToString() + ", button: " + lastCollisionDir + ", type: " + collisionType.ToString());
        // TODO: play collision sound

        if (data is CollisionData)
        {
            data.PlaySound();
        }
    }
Beispiel #14
0
    // Update is called once per frame
    void FixedUpdate()
    {
        DIRECTION_BUTTON dir = InputController.GetPressedDirectionButton();

        Vector3 destinationPosition = movement.CalculateDestinationPosition(
            transform.position, dir, tilesToMove
            );

        UpdateAnimation();

        if (!movement.IsMoving || (destinationPosition == transform.position))
        {
            // No need to update
            StopMoving();
            return;
        }

        if (movement.IsMoving && (dir != DIRECTION_BUTTON.NONE) && (dir == lastCollisionDir))
        {
            // Debug.Log("cannot continue in this direction");
            StopMoving();
            if (lastCollisionData is CollisionData)
            {
                lastCollisionData.PlaySound();
            }
            return;
        }
        else if (movement.IsMoving)
        {
            // cleared
            lastCollisionData = null;
            lastCollisionDir  = DIRECTION_BUTTON.NONE;
        }


        transform.position = Vector3.MoveTowards(transform.position, destinationPosition, Time.deltaTime * speed);
        return;

        // Vector2 transformPosition = new Vector2(transform.position.x, transform.position.y);

        //Vector2 newPosition = new Vector2(((Vector3)(destinationPosition)).x * Time.deltaTime * speed, ((Vector3)(destinationPosition)).y * Time.deltaTime * speed);
        //body.MovePosition(newPosition);
    }
Beispiel #15
0
    public override void Interact(DIRECTION_BUTTON dir, ACTION_BUTTON button)
    {
        DialogManager dm = FindObjectOfType <DialogManager>();

        if (button == ACTION_BUTTON.A)
        {
            if (!dm.InDialog())
            {
                dm.StartDialog(dialog);
            }
            else
            {
                dm.PrintNext();
            }
        }
        else if (button == ACTION_BUTTON.B)
        {
            dm.EndDialog();
        }
    }
Beispiel #16
0
    public Vector3 CalculateDestinationPosition(Vector3 origin, DIRECTION_BUTTON dir, int tilesToMove = 1)
    {
        if (coolDown > 0)
        {
            coolDown--;
        }

        if (canReadInput)
        {
            destinationPosition = origin;
            CalculateMovement(dir, tilesToMove);
        }
        if (isMoving)
        {
            if (origin == destinationPosition)
            {
                // done moving in a tile
                isMoving     = false;
                canReadInput = true;
                CalculateMovement(dir, tilesToMove);
            }

            if (origin == destinationPosition)
            {
                return(origin);
            }

            return(destinationPosition);
        }
        else
        {
            positionDiff.x = 0;
            positionDiff.y = 0;
            positionDiff.z = 0;
        }

        return(FixPosition(origin));
    }
Beispiel #17
0
    private void RaycastUpdate(DIRECTION_BUTTON dir, ACTION_BUTTON action)
    {
        Vector3 dirVector = GetFaceDirectionVector();

        if (dirVector == Vector3.zero)
        {
            return;
        }

        RaycastHit2D hit = CheckRaycast(dirVector);

        Debug.DrawRay(transform.position, dirVector, Color.green);
        if (hit.collider)
        {
            Debug.DrawRay(transform.position, dirVector, Color.red);
            Debug.DrawRay(transform.position, hit.point, Color.blue);

            if (hit.collider.gameObject.HasComponent <Interactable>())
            {
                hit.collider.gameObject.GetComponent <Interactable>().Interact(dir, action);
            }
        }
    }
Beispiel #18
0
    // Returns the calculated final destination vector
    private void CalculateMovement(DIRECTION_BUTTON dir, int tilesToMove = 1)
    {
        if (coolDown > 0)
        {
            return;
        }

        if (dir == DIRECTION_BUTTON.NONE)
        {
            return;
        }

        float x = 0, y = 0, z = 0;

        switch (dir)
        {
        case DIRECTION_BUTTON.UP:
        {
            y = tilesToMove;
        }
        break;

        case DIRECTION_BUTTON.RIGHT:
        {
            x = tilesToMove;
        }
        break;

        case DIRECTION_BUTTON.DOWN:
        {
            y = tilesToMove * -1;
        }
        break;

        case DIRECTION_BUTTON.LEFT:
        {
            x = tilesToMove * -1;
        }
        break;

        default:
            break;
        }

        lastPositionDiff.x = x;
        lastPositionDiff.y = y;
        lastPositionDiff.z = z;

        if (lastDirection != dir)
        {
            coolDown      = inputDelay;
            lastDirection = dir;

            return;
        }

        canReadInput = false;
        isMoving     = true;

        positionDiff.x = x;
        positionDiff.y = y;
        positionDiff.z = z;

        destinationPosition += positionDiff;
        destinationPosition  = FixPosition(destinationPosition);
    }
Beispiel #19
0
 public abstract void Interact(DIRECTION_BUTTON dir, ACTION_BUTTON button);