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;
 }