+using System.Collections;
+namespace Labyrintheer.Utility
+ public class ObjectThrower : MonoBehaviour
+ public ObjectThrowerType otType;
+ public float fountainAngle = 45.0f; // angle of launch
+ public float speed = 1.0f; // meters per second
+ public float gravity = .5f; // 9.81m/s^2 standard Earth gravity
+ public bool _bool = false;
+ LLogger logger = LLogger.Instance;
+ StartCoroutine(ThrowObjects());
+ /// Begins throwing objects in the game
+ /// <returns></returns>
+ public IEnumerator ThrowObjects()
+ case ObjectThrowerType.Fountain:
+ for (int i = numObjects; i > 0; i--)
+ StartCoroutine(ThrowFountain());
+ yield return new WaitForEndOfFrame();
+ /// Throws objects in the game in a fountain pattern
+ /// <returns></returns>
+ public IEnumerator ThrowFountain()
+ System.Random rnd = new System.Random(System.Guid.NewGuid().GetHashCode());
+ GameObject _go = Transform.Instantiate(go, t.position, Quaternion.identity);
+ NavMeshAgent agent = _go.GetComponent<NavMeshAgent>();
+ LAIController lai = _go.GetComponent<LAIController>();
+ _go.transform.parent = t.parent.transform;
+ _go.transform.position = t.position + new Vector3(0.0f, 1.5f, 0.0f);
+ float trajectoryHeight = rnd.Next(3, 6);
+ bool closeEnough = false;
+ Vector3 startVec = _go.transform.position;
+ Vector3 newVec = new Vector3(t.position.x + rnd.Next(-10, 10), t.position.y, t.position.z + rnd.Next(-10, 10));
+ float distance = Vector3.Distance(startVec, newVec);
+ float startTime = Time.timeSinceLevelLoad;
+ float evalTime = startTime;
+ logger.Log("Iteration: " + iterations.ToString() + "\n\n" + "closeEnough: " + closeEnough.ToString(), LLogLevel.DETAIL, LLogModule.MOB);
+ float distCovered = (evalTime - startTime) * speed;
+ float fracJourney = distCovered / distance;
+ Vector3 currPos = Vector3.Lerp(startVec, newVec, fracJourney);
+ currPos.y += trajectoryHeight * Mathf.Sin(Mathf.Clamp01(distCovered) * Mathf.PI);
+ _go.transform.position = currPos;
+ closeEnough = LUtils.NearlyEqual(currPos, newVec, 0.1f);
+ evalTime += Time.deltaTime;
+ yield return new WaitForEndOfFrame();
+ logger.Log("Iterations Complete.", LLogLevel.DETAIL, LLogModule.MOB);
+ yield return new WaitForEndOfFrame();
+ public enum ObjectThrowerType