private TreeBehavior FindClosestTree() { var trees = FindObjectsOfType <TreeBehavior>(); if (trees.Length == 0) { return(null); } TreeBehavior currentClosest = trees.First(); var currentDistance = DistanceTo(this, currentClosest); for (int i = 1; i < trees.Length; i++) { var thisDistance = DistanceTo(this, trees[i]); if (thisDistance < currentDistance) { currentClosest = trees[i]; currentDistance = thisDistance; } } if (currentClosest.closestTree == null || DistanceTo(currentClosest, currentClosest.closestTree) > currentDistance) { currentClosest.closestTree = this; } return(currentClosest); }
public static (TreeBehavior, float) FindClosestTree(Vector3 position) { var trees = Object.FindObjectsOfType <TreeBehavior>(); if (trees.Length == 0) { return(null, 0f); } TreeBehavior currentClosest = trees.First(); var currentDistance = GetDistance(position, currentClosest.transform.position); for (int i = 1; i < trees.Length; i++) { var thisDistance = GetDistance(position, trees[i].transform.position); if (thisDistance < currentDistance) { currentClosest = trees[i]; currentDistance = thisDistance; } } return(currentClosest, currentDistance); }
private static float DistanceTo(TreeBehavior thisTree, TreeBehavior thatTree) { if (thisTree.Equals(thatTree)) { return(float.MaxValue); } return(LocationUtil.GetDistance(thatTree.transform.position, thisTree.transform.position)); }
// Use this for initialization void Start() { firstTree = Object.FindObjectsOfType <TreeBehavior>().First(); for (var i = 0; i < initialSpawn; i++) { firstTree.DropFruit(); } }
public override bool ApplyOnItem(WorkableItem item) { TreeBehavior tree = item as TreeBehavior; if (tree) { tree.AfterWorked(); return(true); } return(false); }
private void OnMouseDown() { if (tree != null) { tree.Fruits.Remove(this); tree.Invoke("SpawnFruit", tree.spawnTime); tree = null; } dragTimer = Time.time; holding = true; Camera.main.GetComponent <DragToMove>().disabled = true; }
public static void GerminateTree(TreeGenes genes, Vector3 position, GameObject gameObject, GameObject fruitPrefab) { TreeBehavior newTree = gameObject.GetComponent <TreeBehavior>(); newTree.fruitPrefab = fruitPrefab; newTree.transform.position = new Vector3(position.x, 0, position.z); newTree.transform.rotation = Quaternion.Euler(Vector3.up * Random.Range(0, 360)); newTree.transform.localScale = new Vector3(0.05f, 0.05f, 0.05f); newTree.Start(); newTree.growDropRatio = genes.growDropRatio * GetDrift(); newTree.lifespan = (int)(genes.lifespan * GetDrift()); newTree.fastGrowTime = (int)(genes.fastGrowTime * GetDrift()); newTree.mediumGrowTime = (int)(genes.mediumGrowTime * GetDrift()); newTree.slowGrowTime = (int)(genes.slowGrowTime * GetDrift()); newTree.age = 0; }
private void Grow() { transform.localScale += new Vector3(growthRate, growthRate, growthRate); if (IsOverlappingClosestTree()) { if (transform.localScale.x > closestTree.transform.localScale.x) { Destroy(closestTree.gameObject); Destroy(closestTree); closestTree = null; FindClosestTree(); } else { Destroy(this.gameObject); Destroy(this); closestTree.FindClosestTree(); } } }
// Start is called before the first frame update internal void Start() { closestTree = FindClosestTree(); isOnMap = LocationUtil.IsOnMap(transform.position); }