protected override void OnClickRelease()
        {
            OnHoverOutline onHoverOutline = lastClicked?.GetComponent <OnHoverOutline>();

            if (onHoverOutline)
            {
                onHoverOutline.OutlineColor = Color.white;
            }
        }
        protected override void OnHover(RaycastHit hit)
        {
            OnHoverOutline onHoverOutline = hit.collider.gameObject.GetComponent <OnHoverOutline>();

            if (onHoverOutline)
            {
                onHoverOutline.OutlineEnabled = true;
            }
        }
        protected override void LostHover(GameObject hadHover)
        {
            OnHoverOutline onHoverOutline = hadHover.GetComponent <OnHoverOutline>();

            if (onHoverOutline)
            {
                onHoverOutline.OutlineEnabled = false;
            }
        }
        protected override void OnClick(RaycastHit hit)
        {
            if (timeManager.IsTimeStepAdvancing)
            {
                return;
            }
            GameObject selectedObject = hit.collider.gameObject.transform.parent.gameObject;

            AssertHelper.Assert(selectedObject.name.Contains("hextile"), "Clicked on unexpected gameobject: " + selectedObject.name, this);
            IHexGridCell clickedTile = selectedObject.GetComponent <MonoHexGridCell>().HexGridCell;

            if (clickedTile.HasComponent <UnselectableComponent>())
            {
                return;
            }

            OnHoverOutline onHoverOutline = hit.collider.gameObject.GetComponent <OnHoverOutline>();

            if (onHoverOutline)
            {
                lastClicked = hit.collider.gameObject;
                onHoverOutline.OutlineColor = Color.cyan;
            }

            townCanvasController.DisplayedTown = null;
            ISelectionComponent selectionComponent = clickedTile.GetComponent <ISelectionComponent>();

            if (!(selectionComponent is null))
            {
                selectionComponent.Select();
            }
            foreach (ITileSelectSubscriber subscriber in subscribers)
            {
                subscriber.OnTileSelect(clickedTile);
            }
        }