예제 #1
0
    private PlacementSocket FindNearestSocket()
    {
        var sockets = gameManager.PizzaSockets.Where(a => a.OccupiedBy == null);

        if (sockets.Count() == 0)
        {
            Debug.LogWarning("No sockets!");
            return(null);
        }

        PlacementSocket[] properSockets = sockets.ToArray();
        if (ItemType == PlacementSocketType.Ingredient)
        {
            properSockets = gameManager.IngredientSockets.Where(a => a.OccupiedBy == null).ToArray();
        }

        PlacementSocket currentSocket         = null;
        var             currentSocketDistance = float.MaxValue;

        for (var i = 0; i < properSockets.Length; i++)
        {
            var dist = Vector2.Distance(properSockets[i].transform.position, transform.position);
            if (dist < currentSocketDistance)
            {
                currentSocket         = properSockets[i];
                currentSocketDistance = dist;
            }
        }

        return(currentSocket);
    }
예제 #2
0
    public void Drop()
    {
        if (OnDrop != null)
        {
            OnDrop.Invoke();
        }

        var targetSocket = FindNearestSocket();

        if (preferredSocket != null && preferredSocket.OccupiedBy == null)
        {
            targetSocket    = preferredSocket;
            preferredSocket = null;
        }

        if (targetSocket != null)
        {
            targetSocket.OccupiedBy = gameObject;
            targetSocket.Activate();
            CurrentSocket = targetSocket;
            CurrentSocket.Activate();
            ren.sortingLayerName = DroppedSortingLayer;
            StartCoroutine(DriftToSpotCo(targetSocket));
        }
    }
예제 #3
0
 // Start is called before the first frame update
 void Start()
 {
     SocketToCook = GetComponent <PlacementSocket>();
     if (SocketToCook == null)
     {
         Debug.LogError("Socket missing?");
     }
 }
예제 #4
0
 public void Pickup()
 {
     if (OnPickup != null)
     {
         OnPickup.Invoke();
     }
     CurrentSocket.Release();
     CurrentSocket        = null;
     ren.sortingLayerName = HeldSortingLayer;
 }
예제 #5
0
    // Start is called before the first frame update
    void Start()
    {
        gameManager = FindObjectOfType <GameManager>();

        relatedSocket = GetComponent <PlacementSocket>();
        if (relatedSocket == null)
        {
            Debug.LogError("Placement soced needed on the ingredient spawner");
        }
    }
예제 #6
0
    IEnumerator DriftToSpotCo(PlacementSocket targetSocket)
    {
        var elapsed       = 0f;
        var startPosition = transform.position;

        while (elapsed < TimeToSocket)
        {
            elapsed           += Time.deltaTime;
            transform.position = Vector3.Lerp(startPosition, targetSocket.transform.position, elapsed / TimeToSocket);
            yield return(null);
        }

        transform.position = targetSocket.transform.position;
        targetSocket.ContentArrive(this);
    }
예제 #7
0
 public void SetPreferredSocket(PlacementSocket s)
 {
     preferredSocket = s;
 }