public void DeleteSelected()
 {
     if (_selected == null)
     {
         return;
     }
     Destroy(_selected.gameObject);
     _selected = null;
 }
 protected void ChangeSelected(EnergyNode selected)
 {
     if (_selected != null)
     {
         _selected.halo.enabled = false;
     }
     _selected = selected;
     if (_selected != null)
     {
         _selected.halo.enabled = true;
     }
     selectionUpdated = true;
 }
    protected virtual void Update()
    {
        if (!UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject() && Input.GetMouseButtonDown(0))
        {
            if (_selectedType == NodeType.NONE)
            {
                if (!selectionUpdated)
                {
                    selected = null;
                }
                scroll            = true;
                lastMousePosition = GetTargetedPoint(Input.mousePosition);
                selectionUpdated  = false;
                return;
            }
            lastPaused = paused;
            paused     = true;
            EnergyNode node = Instantiate(Resources.Load <GameObject>(ENERGY_NODE_PREFAB), GetTargetedPoint(Input.mousePosition), Quaternion.identity).GetComponent <EnergyNode>();
            node.transform.parent = transform;
            node.GetComponent <Renderer>().material = GetMaterial(_selectedType);
            node.GetComponent <RelativeRigidbody>().lockPosition = _lockCreated;
            created = node;
        }
        else if (Input.GetMouseButtonUp(0))
        {
            if (created != null)
            {
                paused = lastPaused;
                switch (selectedType)
                {
                case NodeType.GRAVITY_POSITIVE:
                    created.gravity = 1 / created.radius;
                    break;

                case NodeType.GRAVITY_NEGATIVE:
                    created.gravity = -1 / created.radius;
                    break;

                case NodeType.CHARGE_POSITIVE:
                    created.charge = 1 / created.radius;
                    break;

                case NodeType.CHARGE_NEGATIVE:
                    created.charge = -1 / created.radius;
                    break;

                case NodeType.TIME_POSITIVE:
                    created.time = 1 / created.radius;
                    break;

                case NodeType.TIME_NEGATIVE:
                    created.time = -1 / created.radius;
                    break;
                }
                created = null;
            }
            else if (scroll)
            {
                scroll = false;
            }
        }
        else if (Input.GetMouseButton(0))
        {
            if (created != null)
            {
                created.radius = Math.Max(1, (created.transform.position - GetTargetedPoint(Input.mousePosition)).magnitude);
            }
            else if (scroll)
            {
                Vector3 current = GetTargetedPoint(Input.mousePosition);
                Camera.main.transform.position -= current - lastMousePosition;
            }
        }
        selectionUpdated = false;
        HandleInput();
    }