private void Start() { for (int i = 0; i < TotalRadishes; i++) { Raddish instance = Instantiate(RaddishPrefab); instance.gameObject.SetActive(false); RaddishesAvailable.Enqueue(instance); } }
// Update is called once per frame void OnInteractorStay(Interactor interactor) { if (MaxLevel || DisableShop) { return; } if (_currentInteractor == interactor) { if (!interactor.TryingToBuild()) { interactionTime = 0; CancelRadishes(); return; } RaddishCarrier carrier = interactor.GetComponentInParent <RaddishCarrier>(); Debug.Assert(carrier != null, "Need raddishcarrier in interactor parents"); interactionTime += Time.fixedDeltaTime; if (interactionTime >= TimeToAddRaddish) { Raddish raddish = carrier.RemoveForNewTarget(RaddishTargets[RaddishesWaitingAtTarget.Count]); if (raddish != null) { RaddishesWaitingAtTarget.Add(raddish); interactionTime = 0; } if (EnoughRadishesToLevel()) { foreach (Raddish r in RaddishesWaitingAtTarget) { r.AnimateOutAndHide(); } RaddishesUsed.AddRange(RaddishesWaitingAtTarget); RaddishesWaitingAtTarget.Clear(); if (CurrentLevel < LevelRequirements.Count - 1) { CurrentLevel += 1; OnLevelUp?.Invoke(CurrentLevel); } else { MaxLevel = true; } SetRaddishTargetsForNewLevel(); } } } }
public bool SpawnRaddish() { bool success = (RaddishPool.TryGetNewRadish(root.position, out Raddish instance)); if (success) { _radish = instance; _radish.transform.SetParent(root); _radish.transform.localRotation = Quaternion.identity; _radish.transform.localPosition = Vector3.zero; } return(success); }
public void StoreRaddish(Raddish raddish) { _raddishes.Add(raddish); if (DisableOnStore) { raddish.Hide(); raddish.transform.SetParent(transform); raddish.transform.localPosition = Vector3.zero; } if (UpdateUI) { GameUI.Instance.SetRaddishCount(_raddishes.Count); } }
public static bool TryGetNewRadish(Vector3 position, out Raddish raddish) { if (RaddishesAvailable.Count == 0) { raddish = null; return(false); } Raddish instance = RaddishesAvailable.Dequeue(); instance.transform.position = position; instance.gameObject.SetActive(true); instance.UnseekTarget(); instance.GetComponent <Rigidbody>().isKinematic = true; raddish = instance; return(true); }
public Raddish RemoveForNewTarget(Transform newTarget) { int numRaddishes = Mathf.Clamp(1, 0, _raddishes.Count); for (int i = 0; i < numRaddishes; i++) { Raddish raddish = _raddishes[_raddishes.Count - 1]; _raddishes.RemoveAt(_raddishes.Count - 1); raddish.SetNewTarget(newTarget); if (UpdateUI) { GameUI.Instance.SetRaddishCount(_raddishes.Count); } return(raddish); } return(null); }
public static void ReturnRaddish(Raddish raddish) { raddish.gameObject.SetActive(false); RaddishesAvailable.Enqueue(raddish); }