/*      public static void ToggleCallout () { try {
 *       if ( IsCallout != IsCalloutPressed ) {
 *          IsCallout = IsCalloutPressed;
 *          foreach ( Action<bool> listener in CalloutListener )
 *             listener( IsCallout );
 *       }
 *    }                 catch ( Exception ex ) { Error( ex ); } }*/

        // ============ Floating Nameplate ============

        public static void ShowPilotWounds(CombatHUDActorNameDisplay __instance, VisibilityLevel visLevel)
        {
            try {
                AbstractActor         actor   = __instance.DisplayedCombatant as AbstractActor;
                Pilot                 pilot   = actor?.GetPilot();
                Team                  team    = actor?.team;
                TMPro.TextMeshProUGUI textbox = __instance.PilotNameText;
                if (AnyNull <object>(pilot, team, textbox, Combat) || pilot.Injuries <= 0)
                {
                    return;
                }
                string   format = null;
                object[] args   = new object[] { null, pilot.Injuries, pilot.Health - pilot.Injuries, pilot.Health };
                if (team == Combat.LocalPlayerTeam)
                {
                    format = Settings.ShowPlayerHealth;
                }
                else if (team.IsFriendly(Combat.LocalPlayerTeam))
                {
                    format = Settings.ShowAllyHealth;
                }
                else if (visLevel == VisibilityLevel.LOSFull)
                {
                    format  = Settings.ShowEnemyWounds;
                    args[2] = args[3] = "?";
                }
                if (format != null)
                {
                    textbox.text = textbox.text + "</uppercase><size=80%>" + Translate(format, args);
                }
            }                 catch (Exception ex) { Error(ex); }
        }
        public static void Postfix(CombatHUDActorNameDisplay __instance, VisibilityLevel visLevel, AbstractActor ___displayedActor)
        {
            if (___displayedActor != null && ModState.LastPlayerActorActivated != null && ModState.TurnDirectorStarted &&
                !___displayedActor.Combat.HostilityMatrix.IsLocalPlayerFriendly(___displayedActor.TeamId))
            {
                SensorScanType scanType = SensorLockHelper.CalculateSharedLock(___displayedActor, ModState.LastPlayerActorActivated);

                // TODO: Needs to be hidden or localized
                string nameText = scanType >= SensorScanType.AllInformation ? ___displayedActor.GetPilot().Name : "";
                __instance.PilotNameText.SetText(nameText);
            }
        }
        static void Postfix(CombatHUDActorNameDisplay __instance, LocalizableText ___MechNameText)
        {
            if (__instance.DisplayedCombatant != null &&
                __instance.DisplayedCombatant is BattleTech.Building building &&
                ModState.AmbushBuildingGUIDToTurrets.ContainsKey(building.GUID))
            {
                Turret turret = ModState.AmbushBuildingGUIDToTurrets[building.GUID];

                Text localText = new Text(turret.DisplayName);
                ___MechNameText.SetText(localText.ToString());
            }
        }
 public static void SetNameplateColor(CombatHUDNumFlagHex __instance)
 {
     try {
         Color?colour = GetTeamColour(__instance.DisplayedCombatant, NameplateColours);
         if (!colour.HasValue)
         {
             return;
         }
         CombatHUDActorNameDisplay names = __instance.ActorInfo?.NameDisplay;
         if (names == null)
         {
             return;
         }
         names.PilotNameText.faceColor = colour.Value;
         if (colour != Color.black)
         {
             names.MechNameText.outlineWidth = 0.2f;
             names.MechNameText.outlineColor = Color.black;
         }
         names.MechNameText.faceColor = colour.Value;
     }                 catch (Exception ex) { Error(ex); }
 }