Skip to content

Commit

Permalink
Merge pull request #417 from ffxivcode/master
Browse files Browse the repository at this point in the history
added config:
  • Loading branch information
awgil authored Aug 15, 2024
2 parents 36454d6 + 0041c78 commit d07a2f1
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 7 deletions.
10 changes: 9 additions & 1 deletion BossMod/AI/AIBehaviour.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using BossMod.Autorotation;
using BossMod.Pathfinding;
using Dalamud.Interface.Utility;
using ImGuiNET;

namespace BossMod.AI;
Expand Down Expand Up @@ -228,10 +229,17 @@ public void DrawDebug()
ImGui.Checkbox("Follow out of combat", ref _config.FollowOutOfCombat);
ImGui.SameLine();
ImGui.Checkbox("Follow target", ref _config.FollowTarget);
ImGui.SameLine();
ImGui.Checkbox("Override follow range", ref _config.OverrideRange);
ImGui.PushItemWidth(75 * ImGuiHelpers.GlobalScale);
ImGui.InputFloat("Follow slot range", ref _config.MaxDistanceToSlot);
ImGui.SameLine();
ImGui.InputFloat("Follow target range", ref _config.MaxDistanceToTarget);
ImGui.PopItemWidth();
}
var player = WorldState.Party.Player();
var dist = _naviDecision.Destination != null && player != null ? (_naviDecision.Destination.Value - player.Position).Length() : 0;
ImGui.TextUnformatted($"Max-cast={MathF.Min(_maxCastTime, 1000):f3}, afk={_afkMode}, follow={_followMaster}, algo={_naviDecision.DecisionType} {_naviDecision.Destination} (d={dist:f3}), master standing for {Math.Clamp((WorldState.CurrentTime - _masterLastMoved).TotalSeconds, 0, 1000):f1}");
ImGui.TextUnformatted($"Max-cast={MathF.Min(_maxCastTime, 1000):f3}, afk={_afkMode}, follow={_followMaster}, \nalgo={_naviDecision.DecisionType} {_naviDecision.Destination} (d={dist:f3}), master standing for {Math.Clamp((WorldState.CurrentTime - _masterLastMoved).TotalSeconds, 0, 1000):f1}");
}

private bool TargetIsForbidden(ulong actorId) => autorot.Hints.ForbiddenTargets.Any(e => e.Actor.InstanceID == actorId);
Expand Down
3 changes: 3 additions & 0 deletions BossMod/AI/AIConfig.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ public enum Slot { One, Two, Three, Four }
[PropertyDisplay("Show extra UI options")]
public bool ShowExtraUIOptions = true;

[PropertyDisplay("Show AI/Navi status on TitleBar")]
public bool ShowStatusOnTitlebar = false;

[PropertyDisplay("Show state in DTR Bar")]
public bool ShowDTR = true;

Expand Down
55 changes: 49 additions & 6 deletions BossMod/AI/AIManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ sealed class AIManager : IDisposable
private Preset? _aiPreset;
private readonly UISimpleWindow _ui;
private WorldState WorldState => _autorot.Bossmods.WorldState;
private string _aiStatus = "";
private string _naviStatus = "";
public float ForceMovementIn => Behaviour?.ForceMovementIn ?? float.MaxValue;

public AIBehaviour? Behaviour { get; private set; }
Expand All @@ -27,10 +29,11 @@ public AIManager(RotationModuleManager autorot, ActionManagerEx amex, MovementOv
_autorot = autorot;
_controller = new(amex, movement);
_config = Service.Config.Get<AIConfig>();
_ui = new("AI", DrawOverlay, false, new(100, 100), ImGuiWindowFlags.NoScrollbar | ImGuiWindowFlags.NoScrollWithMouse | ImGuiWindowFlags.NoFocusOnAppearing)
_ui = new("###AI", DrawOverlay, false, new(100, 100), ImGuiWindowFlags.NoScrollbar | ImGuiWindowFlags.NoScrollWithMouse | ImGuiWindowFlags.NoFocusOnAppearing)
{
RespectCloseHotkey = false,
ShowCloseButton = false,
WindowName = $"AI: off###AI"
};
Service.ChatGui.ChatMessage += OnChatMessage;
Service.CommandManager.AddHandler("/vbmai", new Dalamud.Game.Command.CommandInfo(OnCommand) { HelpMessage = "Toggle AI mode" });
Expand All @@ -54,6 +57,8 @@ public void Update()

var player = WorldState.Party.Player();
var master = WorldState.Party[MasterSlot];
var target = WorldState.Actors.Find(WorldState.Party.Player()?.TargetID ?? 0);

if (Behaviour != null && player != null && master != null)
{
Behaviour.Execute(player, master);
Expand All @@ -62,15 +67,21 @@ public void Update()
{
_controller.Clear();
}
_controller.Update(player, _autorot.Hints);

_controller.Update(player, _autorot.Hints);
_aiStatus = $"AI: {(Behaviour != null ? $"on, {(_config.FollowTarget && target != null ? $"target={target.Name}" : $"master={master?.Name}[{((int)_config.FollowSlot) + 1}]")}" : "off")}";
_naviStatus = $"Navi={_controller.NaviTargetPos} / {_controller.NaviTargetRot}{(_controller.ForceFacing ? " forced" : "")}";
_ui.IsOpen = _config.Enabled && player != null && _config.DrawUI;
_ui.WindowName = _config.ShowStatusOnTitlebar ? $"{_aiStatus}, {_naviStatus}###AI" : $"AI###AI";
}

private void DrawOverlay()
{
ImGui.TextUnformatted($"AI: {(Behaviour != null ? "on" : "off")}, master={WorldState.Party[MasterSlot]?.Name}");
ImGui.TextUnformatted($"Navi={_controller.NaviTargetPos} / {_controller.NaviTargetRot}{(_controller.ForceFacing ? " forced" : "")}");
if (!_config.ShowStatusOnTitlebar)
{
ImGui.TextUnformatted(_aiStatus);
ImGui.TextUnformatted(_naviStatus);
}
Behaviour?.DrawDebug();

using (var leaderCombo = ImRaii.Combo("Follow", Behaviour == null ? "<idle>" : (_config.FollowTarget ? "<target>" : WorldState.Party[MasterSlot]?.Name ?? "<unknown>")))
Expand Down Expand Up @@ -222,7 +233,9 @@ private void OnCommand(string cmd, string message)
}

var masterString = messageData.Length > 2 ? $"{messageData[1]} {messageData[2]}" : messageData[1];
var master = WorldState.Party.WithSlot().FirstOrDefault(x => x.Item2.Name.Equals(masterString, StringComparison.OrdinalIgnoreCase));
var masterStringIsSlot = masterString[..4].Equals("slot", StringComparison.OrdinalIgnoreCase) ? Convert.ToInt32(masterString.Substring(4, 1)) : 0;
Service.Log($"{masterStringIsSlot}");
var master = masterStringIsSlot > 0 ? (masterStringIsSlot - 1, WorldState.Party[masterStringIsSlot - 1]) : WorldState.Party.WithSlot().FirstOrDefault(x => x.Item2.Name.Equals(masterString, StringComparison.OrdinalIgnoreCase));

if (master.Item2 is null)
{
Expand All @@ -234,9 +247,39 @@ private void OnCommand(string cmd, string message)
_config.Modified.Fire();
SwitchToFollow((int)_config.FollowSlot);

break;
case "ui":
_config.DrawUI = !_config.DrawUI;
break;
default:
Service.Log($"[AI] Unknown command: {messageData[0]}");
List<string> list = [];
list.Add("AIConfig");
list.AddRange(messageData);

if (list.Count == 2)
{
//toggle
var result = Service.Config.ConsoleCommand(list);
if (bool.TryParse(result[0], out var resultBool))
{
list.Add((!resultBool).ToString());
Service.Config.ConsoleCommand(list);
}
else
Service.Log($"[AI] Unknown command: {messageData[0]}");
}
else if (list.Count == 3)
{
//set
var onOffReplace = list[2].Replace("on", "true", StringComparison.InvariantCultureIgnoreCase).Replace("off", "false", StringComparison.InvariantCultureIgnoreCase);
list[2] = onOffReplace;

if (Service.Config.ConsoleCommand(list).Count > 0)
Service.Log($"[AI] Unknown command: {messageData[0]}");
}
else
Service.Log($"[AI] Unknown command: {messageData[0]}");

break;
}
}
Expand Down

0 comments on commit d07a2f1

Please sign in to comment.