private void UpdateUnitInfo(Selectable selected)
    {
        actionButtonsController.ClearSelection();
        unitSelectionText.enabled = true;
        unitPortrait.SetActive(true);
        _selectionEntityInfo   = selected.GetComponentInParent <EntityInfo>();
        unitSelectionText.text = _selectionEntityInfo.entityName;
        _singleSelection       = selected.gameObject;
        _singleSelectionCamera = _singleSelection.GetComponentInChildren <Camera>();
        UpdateDynamicUnitInfo();

        var workerUnitManager = _singleSelection.GetComponent <WorkerUnitManager>();

        Debug.Log($"Selected {selected}");
        if (workerUnitManager)
        {
            actionButtonsController.ConstructionUnitSelected(_selectionEntityInfo.race);
        }

        if (_singleSelectionCamera)
        {
            _singleSelectionCamera.enabled = true;
        }
    }
        protected override void OnUpdate()
        {
            // raycast from mouse position
            Ray  ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            bool hit = Physics.Raycast(ray, out var hitInfo);

            for (int i = 0; i < SelectableComponents.Length; i++)
            {
                Selectable selectable = SelectableComponents.Selectables[i];
                Transform  transform  = SelectableComponents.Transforms[i];

                if (selectable != null && transform != null)
                {
                    if (selectable.Enabled)
                    {
                        float distance;
                        if (hit)
                        {
                            Vector3 pos    = transform.position;
                            Vector3 hitPos = hitInfo.point;
                            distance = Vector3.Distance(pos, hitPos);
                        }
                        else
                        {
                            distance = float.MaxValue;
                        }

                        foreach (var selectableObject in selectable.SelectionIndicators)
                        {
                            float alpha;
                            if (hit)
                            {
                                float lerp = 1f - Mathf.Clamp(
                                    Mathf.Max(distance - selectableObject.DistanceBeforeFade, 0f)
                                    / selectableObject.DistanceToFullFade,
                                    0f, 1f);
                                alpha = selectableObject.MaxOpacity * Easing.Smoothstep2(lerp);
                                alpha = alpha <= SelectableInactiveEpsilon ? 0 : alpha;
                            }
                            else
                            {
                                alpha = 0f;
                            }

                            var renderers = selectableObject.SelectionRenderers;
                            for (int j = 0; j < renderers.Count; j++)
                            {
                                var renderer = renderers[j];

                                Color color = renderer.material.color;
                                color.a = alpha;
                                renderer.material.color = color;
                            }
                        }
                    }
                    else
                    {
                        // nothing to do
                    }
                }
            }
        }