Files
HSUI/Interface/GeneralElements/VisibilityConfig.cs
T

169 lines
5.6 KiB
C#

using Dalamud.Game.ClientState.Conditions;
using Dalamud.Game.ClientState.Objects.Enums;
using Dalamud.Game.ClientState.Objects.SubKinds;
using HSUI.Config;
using HSUI.Config.Attributes;
using HSUI.Interface.GeneralElements;
using HSUI.Interface.Party;
using System.Linq;
namespace HSUI.Interface
{
[Exportable(false)]
public class VisibilityConfig : PluginConfigObject
{
[Checkbox("Hide outside of combat")]
[Order(5)]
public bool HideOutsideOfCombat = false;
[Checkbox("Hide in combat")]
[Order(6)]
public bool HideInCombat = false;
[Checkbox("Hide in Gold Saucer")]
[Order(7)]
public bool HideInGoldSaucer = false;
[Checkbox("Hide while at full HP")]
[Order(8)]
public bool HideOnFullHP = false;
[Checkbox("Hide when in duty")]
[Order(9)]
public bool HideInDuty = false;
[Checkbox("Hide in Island Sanctuary")]
[Order(10)]
public bool HideInIslandSanctuary = false;
[Checkbox("Hide in PvP")]
[Order(11)]
public bool HideInPvP = false;
[Checkbox("Always show when in duty")]
[Order(20)]
public bool ShowInDuty = false;
[Checkbox("Always show when weapon is drawn")]
[Order(21)]
public bool ShowOnWeaponDrawn = false;
[Checkbox("Always show when crafting")]
[Order(22)]
public bool ShowWhileCrafting = false;
[Checkbox("Always show when gathering")]
[Order(23)]
public bool ShowWhileGathering = false;
[Checkbox("Always show while in a party")]
[Order(24)]
public bool ShowInParty = false;
[Checkbox("Always show while in Island Sanctuary")]
[Order(25)]
public bool ShowInIslandSanctuary = false;
[Checkbox("Always show while in PvP")]
[Order(26)]
public bool ShowInPvP = false;
[Checkbox("Always show while target exists")]
[Order(27)]
public bool ShowWhileTargetExists = false;
private bool IsInCombat() => Plugin.Condition[ConditionFlag.InCombat];
private bool IsInDuty() => Plugin.Condition[ConditionFlag.BoundByDuty];
private bool IsCrafting() => Plugin.Condition[ConditionFlag.Crafting] || Plugin.Condition[ConditionFlag.ExecutingCraftingAction];
private bool IsGathering() => Plugin.Condition[ConditionFlag.Gathering] || Plugin.Condition[ConditionFlag.ExecutingGatheringAction];
private bool HasWeaponDrawn() => (Plugin.ObjectTable.LocalPlayer != null && Plugin.ObjectTable.LocalPlayer.StatusFlags.HasFlag(StatusFlags.WeaponOut));
private bool IsInGoldSaucer() => _goldSaucerIDs.Any(id => id == Plugin.ClientState.TerritoryType);
private bool IsInIslandSanctuary() => Plugin.ClientState.TerritoryType == 1055;
private readonly uint[] _goldSaucerIDs = { 144, 388, 389, 390, 391, 579, 792, 899, 941 };
public bool IsElementVisible(HudElement? element = null)
{
if (!Enabled) { return true; }
if (!ConfigurationManager.Instance.LockHUD) { return true; }
if (element != null && element.GetType() == typeof(PlayerCastbarHud)) { return true; }
if (element != null && !element.GetConfig().Enabled) { return false; }
bool isInIslandSanctuary = IsInIslandSanctuary();
bool isInDuty = IsInDuty() && !isInIslandSanctuary;
IPlayerCharacter? player = Plugin.ObjectTable.LocalPlayer;
// show
if (ShowInDuty && isInDuty) { return true; }
if (ShowOnWeaponDrawn && HasWeaponDrawn()) { return true; }
if (ShowWhileCrafting && IsCrafting()) { return true; }
if (ShowWhileGathering && IsGathering()) { return true; }
if (ShowInParty && PartyManager.Instance.MemberCount > 1) { return true; }
if (ShowInIslandSanctuary && isInIslandSanctuary) { return true; }
if (ShowInPvP && Plugin.ClientState.IsPvP) { return true; }
if (ShowWhileTargetExists && player != null && player.TargetObject != null) { return true; }
// hide
if (HideOutsideOfCombat && !IsInCombat()) { return false; }
if (HideInCombat && IsInCombat()) { return false; }
if (HideInGoldSaucer && IsInGoldSaucer()) { return false; }
if (HideOnFullHP && player != null && player.CurrentHp == player.MaxHp) { return false; }
if (HideInDuty && isInDuty) { return false; }
if (HideInIslandSanctuary && isInIslandSanctuary) { return false; }
if (HideInPvP && Plugin.ClientState.IsPvP) { return false; }
return true;
}
public void CopyFrom(VisibilityConfig config)
{
Enabled = config.Enabled;
HideOutsideOfCombat = config.HideOutsideOfCombat;
HideInCombat = config.HideInCombat;
HideInGoldSaucer = config.HideInGoldSaucer;
HideOnFullHP = config.HideOnFullHP;
HideInDuty = config.HideInDuty;
HideInIslandSanctuary = config.HideInIslandSanctuary;
HideInPvP = config.HideInPvP;
ShowInDuty = config.ShowInDuty;
ShowOnWeaponDrawn = config.ShowOnWeaponDrawn;
ShowWhileCrafting = config.ShowWhileCrafting;
ShowWhileGathering = config.ShowWhileGathering;
ShowInParty = config.ShowInParty;
ShowInIslandSanctuary = config.ShowInIslandSanctuary;
ShowInPvP = config.ShowInPvP;
ShowWhileTargetExists = config.ShowWhileTargetExists;
}
public VisibilityConfig()
{
Enabled = false;
}
}
}