void GrowPlant (InternalPlantScript_DO_NOT_TOUCH plant) { Vector2 offset = Random.insideUnitCircle * maxRandOffset; Vector3 combined = new Vector3 (transform.position.x + offset.x, transform.position.y, transform.position.z + offset.y); RaycastHit hit; if (Physics.Raycast (combined, Vector3.down, out hit, maxDistanceToGround, terrainLayer)) { plant.transform.position = hit.point; } else { MaintainSafetyBuffer (numActivePlants - dyingPlants.Count - 1); return; } growingPlants.Add (plant); plant.transform.localScale = Vector3.zero; plant.gameObject.SetActive (true); numActivePlants++; nextReadyPlant = (nextReadyPlant + 1) % plantPool.Length; }
bool keepDying (InternalPlantScript_DO_NOT_TOUCH plant) { Vector3 newSize = Vector3.SmoothDamp (plant.transform.localScale, Vector3.zero, ref plant.scaleVelocity, timeToDie); if (newSize.sqrMagnitude <= marginOfError) { plant.gameObject.SetActive (false); plant.scaleVelocity = Vector3.zero; numActivePlants--; return true; } else { plant.transform.localScale = newSize; return false; } }
void KillPlant (InternalPlantScript_DO_NOT_TOUCH plant) { dyingPlants.Add (plant); growingPlants.Remove (plant); }
bool keepGrowing (InternalPlantScript_DO_NOT_TOUCH plant) { Vector3 newSize = Vector3.SmoothDamp (plant.transform.localScale, plant.fullSize, ref plant.scaleVelocity, timeToGrow); if (newSize.sqrMagnitude >= plant.sqrMagFullSizeMinusBorder) { plant.transform.localScale = plant.fullSize; plant.scaleVelocity = Vector3.zero; return true; } else { plant.transform.localScale = newSize; return false; } }