public override void PostDrawExtraSelectionOverlays()
        {
            // Draw range circle
            if (range > 0f)
            {
                float CircleRadius = 0f;

                //CircleRadius = ((IsMiniStation)?():());
                if (IsMiniStation)
                {
                    CircleRadius = 1;
                }
                else
                {
                    CircleRadius = (range / 2) + 1;
                }

                GenDraw.DrawRadiusRing(this.parent.Position, CircleRadius);
            }

            // Not drawing if bench is empty or has no power
            if ((Registry.NullOrEmpty()) || (!GotThePower))
            {
                return;
            }

            // selected spot comp
            Comp_LTF_TpSpot comp = CurrentSpot?.TryGetComp <Comp_LTF_TpSpot>();

            if (comp == null)
            {
                return;
            }

            // not drawing lines with spot without power/facility
            if ((comp.requiresPower && !comp.HasPower))
            {
                return;
            }
            if ((comp.requiresBench && !comp.HasPoweredFacility))
            {
                return;
            }

            // Line from workstation to spot (in range)
            GenDraw.DrawLineBetween(this.parent.TrueCenter(), CurrentSpot.TrueCenter(), comp.WayColoring);
            if (comp.IsLinked)
            {
                // Line from spot to spot
                GenDraw.DrawLineBetween(CurrentSpot.TrueCenter(), comp.twin.TrueCenter(), comp.WayColoring);
                // Wish we could make it more noticeable
            }
        }
        public override IEnumerable <Gizmo> CompGetGizmosExtra()
        {
            if (HasQuality)
            {
                Texture2D qualityMat  = ToolsGizmo.Quality2Mat(compQuality);
                float     qualitySize = ToolsGizmo.Quality2Size(compQuality);

                yield return(new Command_Action
                {
                    //icon = ContentFinder<Texture2D>.Get("UI/Commands/CancelRegistry", true),
                    icon = qualityMat,
                    iconDrawScale = qualitySize,
                    defaultLabel = "Quality matters",
                    defaultDesc = QualityLog(),
                    action = delegate
                    {
                        Tools.Warn("rip quality button", prcDebug);
                    }
                });
            }

            if (GotThePower)
            {
                {
                    Texture2D myMat   = MyGizmo.EmptyStatus2Gizmo(IsEmpty, IsFull);
                    String    myLabel = "Registry";
                    String    Grammar = ((MoreThanOne) ? ("s") : (""));
                    String    myDesc  = Tools.CapacityString(Registry.Count, FacilityCapacity) + ' ' + TpSpotName + ".";

                    if (IsEmpty || IsFull)
                    {
                        myDesc += ".Registry is " + ((IsEmpty) ? ("empty") : ("full"));
                        if (IsEmpty)
                        {
                            myDesc += "\nBuild a " + TpSpotName + " in its range.";
                        }
                        if (IsFull)
                        {
                            myDesc += "\nNo additional " + TpSpotName + " will be managed.";
                        }
                    }
                    myDesc += "\nLists " + Registry.Count + " teleporter" + Grammar;
                    yield return(new Command_Action
                    {
                        icon = myMat,
                        defaultLabel = myLabel,
                        defaultDesc = myDesc,
                        action = new Action(this.ShowReport),
                    });
                }

                if (HasSpot)
                {
                    Comp_LTF_TpSpot comp = CurrentSpot?.TryGetComp <Comp_LTF_TpSpot>();
                    if (comp != null)
                    {
                        if (comp.ValidWay)
                        {
                            String    WayName = comp.WayNaming;
                            Texture2D myGizmo = null;

                            //if (comp.StatusReady && comp.IsLinked && !comp.compTwin.StatusChillin)

                            /*
                             * if (comp.StatusReady && comp.IsLinked)
                             *  myGizmo = comp.WayGizmoing;
                             * else
                             *  myGizmo = comp.IssueGizmoing;
                             */
                            myGizmo = comp.WayGizmoing;

                            if (comp.IsLinked)
                            {
                                if (comp.compTwin.StatusChillin)
                                {
                                    myGizmo = comp.compTwin.IssueGizmoing;
                                }
                            }

                            String myLabel = "Cast " + WayName;
                            String myDesc  = comp.WayDescription;
                            //+ "\n" + comp.StatusLogNoUpdate;
                            //Action todo = ShowReport;
                            Action todo = delegate
                            {
                                Tools.Warn("rip action on no way", prcDebug);
                            };

                            if (comp.IsOrphan || comp.StatusChillin || comp.compTwin.StatusChillin)
                            {
                                if (comp.IsOrphan)
                                {
                                    myDesc = "Selected spot is orphan. You need to link it to another.";
                                }
                                else if (comp.StatusChillin)
                                {
                                    myDesc = "Selected spot has some cooldown.";
                                }
                                else if (comp.compTwin.StatusChillin)
                                {
                                    myDesc = "Selected spot twin has some cooldown.";
                                }
                            }
                            else if (comp.MyWay == Comp_LTF_TpSpot.Way.Out)
                            {
                                todo = comp.OrderOut;
                            }
                            else if (comp.MyWay == Comp_LTF_TpSpot.Way.In)
                            {
                                todo = comp.OrderIn;
                            }
                            //todo = comp.compTwin.OrderOut;
                            //todo = comp.OrderIn;
                            else if (comp.MyWay == Comp_LTF_TpSpot.Way.Swap)
                            {
                                todo = comp.OrderSwap;
                            }

                            /*
                             * else if (comp.MyWay == Comp_LTF_TpSpot.Way.No)
                             *  todo = ShowReport;
                             */

                            yield return(new Command_Action
                            {
                                icon = myGizmo,
                                defaultLabel = myLabel,
                                defaultDesc = myDesc,
                                action = new Action(todo),
                            });
                        }
                        else
                        {
                            Tools.Warn("gizmo should not be this way", prcDebug);
                        }
                    }
                    else
                    {
                        Tools.Warn("gizmo should not be this way", prcDebug);
                    }
                }

                Tools.Warn("Gizmo browse records", prcDebug);
                if (MoreThanOne)
                {
                    Texture2D myMat   = MyGizmo.NextTpGz;
                    String    myLabel = Tools.CapacityString(GizmoIndex + 1, Registry.Count) +
                                        Tools.PosStr(CurrentSpot.Position);
                    //String Grammar = ((MoreThanOne) ? ("s") : (""));
                    String myDesc = "Browse " + Registry.Count + " records";
                    yield return(new Command_Action
                    {
                        icon = myMat,
                        defaultLabel = myLabel,
                        defaultDesc = myDesc,
                        action = new Action(NextIndex),
                    });
                }
            }

            if (Prefs.DevMode)
            {
                // Debug process
                yield return(new Command_Action
                {
                    icon = ((prcDebug) ? (MyGizmo.DebugOnGz) : (MyGizmo.DebugOffGz)),
                    defaultLabel = "prc: " + Tools.DebugStatus(prcDebug),
                    defaultDesc = "process debug",
                    action = delegate
                    {
                        prcDebug = Tools.WarnBoolToggle(prcDebug, "debug " + building.Label);
                    }
                });

                // Debug gfx
                yield return(new Command_Action
                {
                    icon = ((gfxDebug) ? (MyGizmo.DebugOnGz) : (MyGizmo.DebugOffGz)),
                    defaultLabel = "gfx: " + Tools.DebugStatus(gfxDebug),
                    defaultDesc = "gfx debug",
                    action = delegate
                    {
                        gfxDebug = Tools.WarnBoolToggle(gfxDebug, "debug " + building.Label);
                    }
                });

                //debug log + hax activate
                if (prcDebug)
                {
                    yield return new Command_Action
                           {
                               //icon = ContentFinder<Texture2D>.Get("UI/Commands/HaxReady", true),
                               icon         = MyGizmo.DebugLogGz,
                               defaultLabel = "hax " + Tools.DebugStatus(Hax),
                               defaultDesc  = "$5,000 for you advert here.",
                               action       = delegate
                               {
                                   Hax = Tools.WarnBoolToggle(Hax, "hax " + building.Label);
                               }
                           }
                }
                ;
                // Hax Progress
                if (prcDebug && Hax)
                {
                }
                // Hax quality
                if (prcDebug && Hax && HasQuality)
                {
                    if (!ToolsQuality.BestQuality(compQuality))
                    {
                        yield return new Command_Action
                               {
                                   defaultLabel = compQuality.Quality.GetLabelShort() + "->" + ToolsQuality.BetterQuality(compQuality),
                                   defaultDesc  = "Better quality",
                                   //icon = ContentFinder<Texture2D>.Get("UI/Commands/HaxReady", true),
                                   icon   = MyGizmo.HaxBetterGz,
                                   action = delegate
                                   {
                                       BetterQuality();
                                   }
                               }
                    }
                    ;

                    if (!ToolsQuality.WorstQuality(compQuality))
                    {
                        yield return new Command_Action
                               {
                                   defaultDesc  = "Worse quality",
                                   defaultLabel = compQuality.Quality.GetLabelShort() + "->" + ToolsQuality.WorseQuality(compQuality),
                                   icon         = MyGizmo.HaxWorseGz,
                                   action       = delegate
                                   {
                                       WorseQuality();
                                   }
                               }
                    }
                    ;
                }
            }
        }