public void ReceiveCompletedBurger(CompletedBurger completedBurger) { Debug.Log("Completed burger", completedBurger); this.completedBurger = completedBurger; actualIngredients = completedBurger.ingredients; var tray = completedBurger.gameObject; completedBurger.container = tray; tray.transform.SetParent(this.transform); foreach (var i in tray.GetComponentsInChildren <NewtonVR.NVRInteractableItem>()) { Destroy(i); } foreach (var i in tray.GetComponentsInChildren <Rigidbody>()) { i.isKinematic = true; } tray.GetComponent <Rigidbody>().isKinematic = true; var trayInteractable = tray.GetComponent <NewtonVR.NVRInteractableItem>(); if (trayInteractable != null) { Destroy(trayInteractable); } tray.GetComponent <Rigidbody>().isKinematic = true; if (orderLabel != null) { Destroy(orderLabel.gameObject); } orderLabel = null; StartCoroutine("FinishOrder", tray); }
public IEnumerator AutoFulfillOrder(NpcOrder npc) { yield return(new WaitForSeconds(secondsToWait)); CompletedBurger completedBurger = (CompletedBurger)Instantiate(completedBurgerPrefab, npc.trayPosition.position, Quaternion.identity); npc.ReceiveCompletedBurger(completedBurger); }
public override IEnumerator NpcServed(NpcOrder npc, CompletedBurger burger) { Debug.Log("Npc was served, sending this one away then spawning a new wave"); currentNpc.GetComponent <NpcEnterStyle>().StopMovement(); yield return(ScoreBurger(npc, burger)); yield return(npc.GetComponent <NpcExitStyle>().NpcExit()); Debug.Log("Npc exited, spawning a new wave"); StartCoroutine("SpawnWave"); }
public override IEnumerator NpcServed(NpcOrder npc, CompletedBurger burger) { Debug.Log("Npc was served, sending this one away"); float accuracy = LevelManager.Instance.burgerScorer.CalcAccuracyScore(npc.GetOrder(), burger.ingredients); if (accuracy < 99) { Debug.Log("Accuracy was bad, making angry face: " + accuracy, burger); if (npc.transform.FindChild("angryFace")) { // If this NPC was already angry, end the level EndLevel(); } else { GameObject angryFace = (GameObject)Instantiate(angryFacePrefab, npc.transform); angryFace.transform.localPosition = new Vector3(0, 1f, 0); angryFace.name = "angryFace"; npc.acceptingOrders = true; } Destroy(burger.gameObject); } else { Debug.Log("Customer satisfied"); Transform clock = npc.transform.FindChild("clock"); if (clock != null) { Destroy(clock.gameObject); } Destroy(burger); npc.GetComponent <NpcEnterStyle>().StopMovement(); yield return(npc.GetComponent <NpcExitStyle>().NpcExit()); currentNpcs--; TipJar tipJar = GameObject.FindObjectOfType <TipJar>(); if (currentNpcs <= 0) { float maxCoins = LevelManager.Instance.settings.difficultyLevel; // maxCoins += npcCount * 0.1f; maxCoins *= maxCoins; maxCoins *= 0.25f; maxCoins /= 3; maxCoins = Mathf.Max(0.25f, maxCoins); if (tipJar != null) { tipJar.SpawnCoins(Random.Range(0, maxCoins) + 0.25f); } Debug.Log("Finished giving tip, spawning next wave"); StartCoroutine("SpawnWave"); } } }
public virtual float CalcNeatnessScore(CompletedBurger completedBurger) { Debug.Log("prevAxisSlop=" + completedBurger.prevAxisSloppiness + ", baseAxisSlop=" + completedBurger.baseAxisSloppiness); float totalSloppiness = (completedBurger.prevAxisSloppiness + completedBurger.baseAxisSloppiness) / 2 * 1300; if (totalSloppiness > 100) { totalSloppiness = 100; } Debug.Log("NeatnessScore=" + (100f - totalSloppiness)); return(100f - totalSloppiness); }
void OnTriggerEnter(Collider other) { if (!acceptingOrders) { return; } if (other.transform.parent != null && other.transform.parent.gameObject.CompareTag("Food")) { other.transform.parent.gameObject.tag = "Untagged"; acceptingOrders = false; Debug.Log("Received a food item, taking it", this); completedBurger = other.transform.parent.gameObject.GetComponent <CompletedBurger>(); ReceiveCompletedBurger(completedBurger); } }
private IEnumerator ScoreBurger(NpcOrder npc, CompletedBurger burger) { GameObject tray = burger.container; Transform trayPosition = npc.trayPosition; yield return(MoveUtil.MoveOverSeconds(tray, trayPosition.localPosition, 1f)); HappinessScoreDisplay scorer = Instantiate <HappinessScoreDisplay>(npc.scorePrefab); scorer.transform.SetParent(npc.transform); scorer.transform.localPosition = npc.scorePosition.localPosition; scorer.transform.localEulerAngles = npc.scorePosition.localEulerAngles; if (scorer != null) { yield return(scorer.ScoreOrder(npc.GetDesiredIngredients(), burger, npc.GetTimeSinceOrderStarted())); } Destroy(scorer); }
public virtual IEnumerator ScoreOrder(string[] desiredIngredients, CompletedBurger completedBurger, float timeSinceOrderStarted) { HideScores(); float speed = LevelManager.Instance.burgerScorer.CalcSpeedScore(desiredIngredients, timeSinceOrderStarted); float accuracy = LevelManager.Instance.burgerScorer.CalcAccuracyScore(desiredIngredients, completedBurger.ingredients); float neatness = LevelManager.Instance.burgerScorer.CalcNeatnessScore(completedBurger); tipTotal = 0; yield return(new WaitForSeconds(0.5f)); SetSpeedScore(speed); yield return(new WaitForSeconds(0.5f)); SetAccuracyScore(accuracy); yield return(new WaitForSeconds(0.5f)); SetNeatnessScore(neatness); if (tipJar != null) { yield return(tipJar.SpawnCoinsCoroutine(tipTotal)); } yield return(new WaitForSeconds(4f)); }
void FinalizeBurger(GameObject burgerScanner, List <GameObject> ingredients) { Debug.Log("Finalizing burger"); GameObject previousIngredient = ingredients[0]; Vector3 baseCenterAxis = Vector3.zero; Vector3 previousCenterAxis = Vector3.zero; float totalDistanceFromBaseCenterAxis = 0; float totalDistanceFromPreviousCenterAxis = 0; Destroy(burgerScanner.GetComponent <Ingredient>()); Destroy(burgerScanner.GetComponent <Rigidbody>()); string[] ingredientNames = new string[ingredients.Capacity]; int idx = 0; foreach (GameObject i in ingredients) { Debug.Log(i.GetComponent <Ingredient>().ingredientName); ingredientNames[idx++] = i.GetComponent <Ingredient>().ingredientName; NewtonVR.NVRInteractables.Deregister(i.GetComponent <NewtonVR.NVRInteractable>()); Destroy(i.GetComponent <Ingredient> ()); Destroy(i.GetComponent <Rigidbody>()); // Destroy(i.GetComponent<NewtonVR.NVRInteractableItem>()); if (baseCenterAxis == Vector3.zero) { baseCenterAxis = i.transform.position; previousCenterAxis = baseCenterAxis; } else { Vector3 curDistFromBaseAxis = (baseCenterAxis - i.transform.position); curDistFromBaseAxis.Set(curDistFromBaseAxis.x, 0, curDistFromBaseAxis.z); totalDistanceFromBaseCenterAxis += curDistFromBaseAxis.magnitude; Vector3 curDistFromPrevAxis = (previousCenterAxis - i.transform.position); curDistFromPrevAxis.Set(curDistFromPrevAxis.x, 0, curDistFromPrevAxis.z); totalDistanceFromPreviousCenterAxis += curDistFromPrevAxis.magnitude; previousCenterAxis = i.transform.position; } previousIngredient = i; } CompletedBurger completedBurger = (CompletedBurger)Instantiate(completedBurgerPrefab, transform.position, Quaternion.identity); completedBurger.ingredients = ingredientNames; burgerScanner.transform.SetParent(completedBurger.transform); int divideBy = Mathf.Max(ingredients.Capacity - 1, 1); completedBurger.baseAxisSloppiness = totalDistanceFromBaseCenterAxis / divideBy; completedBurger.prevAxisSloppiness = totalDistanceFromPreviousCenterAxis / divideBy; foreach (GameObject i in ingredients) { i.transform.SetParent(completedBurger.transform); } completedBurger.gameObject.SetActive(false); completedBurger.gameObject.SetActive(true); completedBurger.gameObject.AddComponent <NewtonVR.NVRInteractableItem>(); //Destroy(burgerDetectionArea.gameObject); burgerDetectionArea.gameObject.SetActive(false); this.gameObject.SetActive(false); this.gameObject.transform.parent.GetComponent <NewtonVR.NVRInteractable>().RefreshColliders(); }
public abstract IEnumerator NpcServed(NpcOrder npcOrder, CompletedBurger completedBurger);
private void LockBurger(GameObject[] ingredients) { Debug.Log("Finalizing burger"); Vector3 baseCenterAxis = Vector3.zero; Vector3 previousCenterAxis = Vector3.zero; float totalDistanceFromBaseCenterAxis = 0; float totalDistanceFromPreviousCenterAxis = 0; NewtonVR.NVRInteractables.Deregister(GetComponent <NewtonVR.NVRInteractable>()); GetComponent <Rigidbody>().useGravity = false; GetComponent <Rigidbody>().isKinematic = true; Destroy(GetComponent <Rigidbody>()); List <string> ingredientNames = new List <string>(); foreach (GameObject i in ingredients) { if (i.GetComponent <Ingredient>() == null) { continue; } Debug.Log(i.GetComponent <Ingredient>().ingredientName); ingredientNames.Add(i.GetComponent <Ingredient>().ingredientName); NewtonVR.NVRInteractables.Deregister(i.GetComponent <NewtonVR.NVRInteractable>()); Destroy(i.GetComponent <Ingredient>()); Destroy(i.GetComponent <Rigidbody>()); Destroy(i.GetComponent <NewtonVR.NVRInteractableItem>()); if (baseCenterAxis == Vector3.zero) { baseCenterAxis = i.transform.position; previousCenterAxis = baseCenterAxis; } else { Vector3 curDistFromBaseAxis = (baseCenterAxis - i.transform.position); curDistFromBaseAxis.Set(curDistFromBaseAxis.x, 0, curDistFromBaseAxis.z); totalDistanceFromBaseCenterAxis += curDistFromBaseAxis.magnitude; Vector3 curDistFromPrevAxis = (previousCenterAxis - i.transform.position); curDistFromPrevAxis.Set(curDistFromPrevAxis.x, 0, curDistFromPrevAxis.z); totalDistanceFromPreviousCenterAxis += curDistFromPrevAxis.magnitude; previousCenterAxis = i.transform.position; } } CompletedBurger completedBurger = (CompletedBurger)Instantiate(completedBurgerPrefab, transform.position, Quaternion.identity); completedBurger.ingredients = ingredientNames.ToArray(); this.transform.SetParent(completedBurger.transform); int divideBy = Mathf.Max(ingredients.Length - 1, 1); completedBurger.baseAxisSloppiness = totalDistanceFromBaseCenterAxis / divideBy; completedBurger.prevAxisSloppiness = totalDistanceFromPreviousCenterAxis / divideBy; if (ingredients.Length <= 2) { completedBurger.baseAxisSloppiness = 0.3f; completedBurger.prevAxisSloppiness = 0.3f; } foreach (GameObject i in ingredients) { i.transform.SetParent(completedBurger.transform); } completedBurger.gameObject.SetActive(false); completedBurger.gameObject.SetActive(true); completedBurger.gameObject.AddComponent <NewtonVR.NVRInteractableItem>(); //Destroy(burgerDetectionArea.gameObject); }