Ejemplo n.º 1
0
    private void TestInteract()
    {
        if (currentHolding != null)
        {
            //interactable that is holdable is released
            currentHolding.Drop();
            currentHolding = null;
            return;
        }
        var interactables = FindObjectsOfType <Interactable>().Where(a => a.isLocked == false);

        Interactable closestItem = null;
        var          closestDist = float.MaxValue;

        foreach (var interactable in interactables)
        {
            var dist = Vector3.Distance(interactable.transform.position, gameObject.transform.position);
            if (dist < interactDistance && dist < closestDist)
            {
                closestItem = interactable;
                closestDist = dist;
            }
        }

        if (closestItem != null)
        {
            //Can it be held?
            var holdable = closestItem.GetComponent <Holdable>();
            if (holdable != null)
            {
                currentHolding = holdable;
                currentHolding.Pickup();
            }

            //Todo otherwise interact
        }
    }
Ejemplo n.º 2
0
 void CmdEquip(GameObject other)
 {
     equiped = other.GetComponent <Holdable>();
     equiped.Pickup(gameObject, Vector2.zero);
 }
Ejemplo n.º 3
0
    void Update()
    {
        var isMoving = false;

        direction.x = 0;

        switch (currentState)
        {
        case MovementState.entering:
            anim.SetInteger("Direction", 3);
            direction.x -= 1;
            isMoving     = true;
            if (transform.position.x < deliveryX)
            {
                currentState = MovementState.waiting;
            }
            break;

        case MovementState.returning:
            anim.SetInteger("Direction", 1);
            direction.x += 1;
            isMoving     = true;
            if (transform.position.x > homeX)
            {
                currentState = MovementState.idle;
            }
            break;

        case MovementState.waiting:
            if (isCloseSocketAvailable() == true)
            {
                //interactable that is holdable is released
                currentHolding.Drop();
                currentHolding = null;
                currentState   = MovementState.returning;
            }
            break;

        case MovementState.idle:
            if (sourceSocket.OccupiedBy != null)
            {
                var ingredient = sourceSocket.OccupiedBy;
                var holdable   = ingredient.GetComponent <Holdable>();
                if (holdable != null)
                {
                    currentHolding = holdable;
                    currentHolding.Pickup();
                }
                currentState = MovementState.entering;
            }
            break;
        }

        if (isMoving)
        {
            speed = targetSpeed;
        }
        else
        {
            anim.SetInteger("Direction", -1); // Goin' nowhere
            speed = 0;
        }

        anim.SetFloat("Speed", speed);
        this.transform.position += new Vector3(direction.x * speed, 0, 0);

        if (currentHolding != null)
        {
            var holdPosition = holdLocation.position;
            holdPosition.x += direction.x * 0.2f;
            holdPosition.y += direction.y * 0.2f;
            currentHolding.transform.position = holdPosition;
        }
    }
Ejemplo n.º 4
0
    void Update()
    {
        var isMoving = false;

        direction.y = 0;

        switch (currentState)
        {
        case MovementState.entering:
            anim.SetInteger("Direction", 2);
            direction.y += 1;
            isMoving     = true;
            if (transform.position.y > homeY)
            {
                currentState = MovementState.waiting;
            }
            break;

        case MovementState.deliverating:
            anim.SetInteger("Direction", 0);
            direction.y -= 1;
            isMoving     = true;
            if (transform.position.y < deliveryY)
            {
                currentState = MovementState.idle;
            }
            break;

        case MovementState.idle:
            // interactable that is holdable is released
            // Should be able to always do this
            currentHolding.Drop();
            currentHolding = null;
            currentState   = MovementState.entering;
            break;

        case MovementState.waiting:
            var deliverySocket = GetCookedPizzaWithOrder();
            if (deliverySocket != null)
            {
                var holdable = deliverySocket.OccupiedBy.GetComponent <Holdable>();
                if (holdable != null)
                {
                    currentHolding = holdable;
                    currentHolding.Pickup();
                }
                else
                {
                    Debug.Log("Pizza isn't holdable?");
                }
                currentState = MovementState.deliverating;
            }
            break;
        }

        if (isMoving)
        {
            speed = targetSpeed;
        }
        else
        {
            anim.SetInteger("Direction", -1); // Goin' nowhere
            speed = 0;
        }

        anim.SetFloat("Speed", speed);
        this.transform.position += new Vector3(0, direction.y * speed, 0);

        if (currentHolding != null)
        {
            var holdPosition = holdLocation.position;
            holdPosition.x += direction.x * 0.2f;
            holdPosition.y += direction.y * 0.2f;
            currentHolding.transform.position = holdPosition;
        }
    }