void GenerateTree() { Vector3 nextPosition = range.center; nextPosition.x = Random.Range(range.min.x, range.max.x); nextPosition.y = range.max.y; nextPosition.z = Random.Range(range.min.z, range.max.z); ElementStatus newElement = Singleton.Get <PoolingManager>().GetInstance <ElementStatus>(prefab, nextPosition, Quaternion.identity); newElement.OnEnergyDepletion += RemoveElement; AllElements.Add(newElement); }
private void ConnectToTree(ElementStatus tree) { if (CrossPlatformInputManager.GetButtonDown("Fire1") == true) { foreach (Rope rope in allRopes) { if (rope.IsVisible == false) { rope.IsVisible = true; rope.Joint.connectedBody = tree.Body; connectedTrees.Add(tree); break; } } } }
// Update is called once per frame void Update() { ElementStatus tree = ClosestTree; if ((connectedTrees.Count > 0) && (CrossPlatformInputManager.GetButtonDown("Fire2") == true)) { foreach (Rope rope in allRopes) { rope.IsVisible = false; } connectedTrees.Clear(); } else if ((tree != null) && (connectedTrees.Count < allRopes.Length)) { // Add something to indicate this is the closest tree targetIndicator.SetActive(true); targetIndicator.transform.position = tree.transform.position; ConnectToTree(tree); } else { targetIndicator.SetActive(false); } // Update visuals int i = 0; float lerp; Vector3 playerPos = handPosition.position, ropePos; foreach (Rope rope in allRopes) { if (rope.IsVisible == true) { ropePos = rope.Joint.connectedBody.position; for (i = 0; i < rope.Line.positionCount; ++i) { lerp = i; lerp /= (rope.Line.positionCount - 1); rope.Line.SetPosition(i, Vector3.Lerp(playerPos, ropePos, lerp)); } } } }
void RemoveElement(ElementStatus status) { AllElements.Remove(status); status.OnEnergyDepletion -= RemoveElement; }