bool CheckForChildren(Food_O bottom) //checking if the food has children and configuring accordingly { Food_O[] food = bottom.GetComponentsInChildren <Food_O>(); Move_S m = bottom.GetComponentInParent <Move_S>(); //if the foo is stacked, bottom is the food at the bottom of the stack if (bottom.GetFreshness()) //untouched food { if (manager != null) //cheap way to configure, checking scene basically { if (manager.GetItemPrice(bottom.GetName())) //if can afford { bottom.SetFreshness(false); } else { return(false); } } } i.OnPickUp(bottom.transform); if (m != null) //checking if on board/ plate / tray { for (int i = 0; i < food.Length; i++) { food[i].SetOnSurface(false); m.ListOfFood().Remove(food[i]); //removing the food from the script list } if (firstOnStack != null || stack == 1) //if theres a stack or singular food { m.MarkerList().Add(bottom.GetMarker()); //readding the marker to the board/plate/tray for future bottom.SetMarker(null); } if (m.startedWithFood) //checking if the surface needs replenishing { if (m.ListOfFood().Count == 0) { StartCoroutine(m.RestockFood(m.foodType, .2f)); } } } for (int i = 0; i < food.Length; i++) //for all food, be it one or more { food[i].stack = i + 1; //changing the food variables food[i].ChangeDrag(3); if (CheckObjectCount.objects.Contains(food[i].gameObject)) { CheckObjectCount.objects.Remove(food[i].gameObject); } if (food[i] != bottom) { food[i].DisablePhysics(food[i - 1].transform); } food[i].inStack = false; } return(true); }
void OnDrop(RaycastHit hit) { SetPhysics(null); GameObject obj = GetHolding().GetObject(); newColider = false; if (obj.GetComponent <Move_S>() != null) //board/plate/tray dropped { if (obj.CompareTag("Plate")) //checking if its a plate { if (Physics.Raycast(guide.position, -Vector3.up, out hit, 5f)) { float dist = Vector3.Distance(guide.position, hit.point); StartCoroutine(BreakStuff(dist, obj)); } } Move_S m = GetHolding().GetObject().GetComponent <Move_S>(); if (m.ListOfFood().Count > 0) //checking if theres food on the object { foreach (Food_O f in m.ListOfFood()) //resetting varibales for each food object { f.GetComponent <IPhysics>().GetMarker().SetOccupation(false); f.SetOnSurface(false); f.ChangeDrag(3); f.firstOnStack = null; f.SetMarker(null); StartCoroutine(CheckObjectCount.CheckPrefabCount(f.gameObject)); GameManager.dropCount++; } m.ListOfFood().Clear(); } m.MarkerList().Clear(); m.AddMarkerChildren(); } else if (obj.GetComponent <Food_O>() != null) //if food dropped { Food_O food = obj.GetComponent <Food_O>(); StartCoroutine(CheckObjectCount.CheckPrefabCount(food.gameObject)); if (food.foodStack.Count > 0) { foreach (Food_O f in food.foodStack) //resetting varibales { f.firstOnStack = null; StartCoroutine(CheckObjectCount.CheckPrefabCount(f.gameObject)); GameManager.dropCount++; f.GetMarker().SetOccupation(false); f.SetMarker(null); } food.foodStack.Clear(); } } SetInteract(null); }