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 } }
void CmdEquip(GameObject other) { equiped = other.GetComponent <Holdable>(); equiped.Pickup(gameObject, Vector2.zero); }
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; } }
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; } }