예제 #1
0
	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;
	}
예제 #2
0
	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;
		}
	}
예제 #3
0
	void KillPlant (InternalPlantScript_DO_NOT_TOUCH plant) {
		dyingPlants.Add (plant);
		growingPlants.Remove (plant);
	}
예제 #4
0
	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;
		}
	}