Skip to content
This repository has been archived by the owner on Aug 28, 2024. It is now read-only.

Commit

Permalink
fix: changed the way to add the state in raid timeline.
Browse files Browse the repository at this point in the history
  • Loading branch information
ArchiDog1998 committed Feb 29, 2024
1 parent 44b675c commit 1884b1f
Show file tree
Hide file tree
Showing 9 changed files with 44 additions and 50 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ internal class ActionTimelineItem : ITimelineItem
{
public ActionID ID { get; set; } = ActionID.None;
public float Time { get; set; } = 3;
public float Duration { get; set; } = 3;

public bool InPeriod(TimelineItem item)
{
var time = item.Time - DataCenter.RaidTimeRaw;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,5 @@
internal interface ITimelineItem
{
public float Time { get; set; }
public float Duration { get; set; }
public bool InPeriod(TimelineItem item);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,15 @@
[Description("State Timeline")]
internal class StateTimelineItem : ITimelineItem
{
public AutoStatus State { get; set; }
public SpecialCommandType State { get; set; } = SpecialCommandType.DefenseArea;
public float Time { get; set; } = 3;
public float Duration { get; set; } = 3;

public bool InPeriod(TimelineItem item)
{
var time = item.Time - DataCenter.RaidTimeRaw;

if (time < 0) return false;

if (time > Time || Time - time > Duration) return false;
if (time > Time || Time - time > 3) return false;
return true;
}
}
2 changes: 1 addition & 1 deletion RotationSolver/Data/UiString.cs
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,7 @@ internal enum UiString
[Description("From Clipboard")]
ActionSequencer_FromClipboard,

[Description("Open the timeline link.")]
[Description("Open the timeline link")]
Timeline_OpenLink,

[Description("Add Status")]
Expand Down
20 changes: 19 additions & 1 deletion RotationSolver/Localization/Localization.json
Original file line number Diff line number Diff line change
Expand Up @@ -340,5 +340,23 @@
"RotationSolver.Basic.Data.AutoStatus.Speed": "Speed",
"RotationSolver.Basic.Data.AutoStatus.LimitBreak": "LimitBreak",
"RotationSolver.Data.UiString.ConfigWindow_Condition_DutyName": "Duty Name",
"RotationSolver.Data.UiString.Timeline_OpenLink": "Open the timeline link."
"RotationSolver.Data.UiString.Timeline_OpenLink": "Open the timeline link",
"RotationSolver.Data.UiString.ConfigWindow_List_ActionNameOrId": "Action name or id",
"RotationSolver.Data.UiString.ConfigWindow_List_HostileCastingTank": "Tank Buster",
"RotationSolver.Data.UiString.ConfigWindow_List_HostileCastingArea": "AoE",
"RotationSolver.Data.UiString.ConfigWindow_List_HostileCastingTankDesc": "Use tank personal damage mitigation abilities if the target is casting any of these actions",
"RotationSolver.Data.UiString.ConfigWindow_List_AddAction": "Add Action",
"RecordCastingAreaName": "Record AOE actions",
"RotationSolver.Data.UiString.ConfigWindow_List_HostileCastingAreaDesc": "Use AoE damage mitigation abilities if the target is casting any of these actions",
"RotationSolver.Data.UiString.ForcedEnableCondition": "Use Forced Enable Condition",
"RotationSolver.Data.UiString.ForcedDisableCondition": "Use Forced Disable Condition",
"RotationSolver.Data.UiString.ConfigWindow_List_StatusNameOrId": "Status name or id",
"RotationSolver.Data.UiString.ConfigWindow_List_Invincibility": "Invulnerability",
"RotationSolver.Data.UiString.ConfigWindow_List_Priority": "Priority",
"RotationSolver.Data.UiString.ConfigWindow_List_DangerousStatus": "Dispellable debuffs",
"RotationSolver.Data.UiString.ConfigWindow_List_InvincibilityDesc": "Ignores target if it has one of this statuses",
"RotationSolver.Data.UiString.ConfigWindow_List_AddStatus": "Add Status",
"RotationSolver.Data.UiString.ConfigWindow_List_PriorityDesc": "Attacks the target first if it has one of this statuses",
"RotationSolver.Data.UiString.ConfigWindow_List_DangerousStatusDesc": "Dispellable debuffs list",
"RotationSolver.Basic.Data.SpecialCommandType.None": "None"
}
3 changes: 2 additions & 1 deletion RotationSolver/UI/ImGuiHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,8 @@ public static void SearchCombo<T>(string popId, string name, ref string searchTx
public static unsafe bool SelectableCombo(string popUp, string[] items, ref int index, ImFontPtr? font = null, Vector4? color = null)
{
var count = items.Length;
var name = items[index % count] + "##" + popUp;
index = Math.Max(0, index) % count;
var name = items[index] + "##" + popUp;

var result = false;

Expand Down
8 changes: 1 addition & 7 deletions RotationSolver/UI/RotationConfigWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -774,17 +774,11 @@ void Down()
(Down, [VirtualKey.DOWN]));

var time = timeLineItem.Time;
if(ConditionDrawer.DrawDragFloat(ConfigUnitType.Seconds, $"Time##Time{timeLineItem.GetHashCode()}", ref time))
if (ConditionDrawer.DrawDragFloat(ConfigUnitType.Seconds, $"Time##Time{timeLineItem.GetHashCode()}", ref time))
{
timeLineItem.Time = time;
}

time = timeLineItem.Duration;
if (ConditionDrawer.DrawDragFloat(ConfigUnitType.Seconds, $"Duration##Duration{timeLineItem.GetHashCode()}", ref time))
{
timeLineItem.Duration = time;
}

if (timeLineItem is ActionTimelineItem actionItem)
{
if(DataCenter.RightNowRotation != null)
Expand Down
26 changes: 18 additions & 8 deletions RotationSolver/Updaters/RaidTimeUpdater.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ internal static partial class RaidTimeUpdater
internal static readonly Dictionary<uint, string> PathForRaids = [];

private static readonly Dictionary<uint, TimelineItem[]> _savedTimeLines = [];
private static readonly Queue<(DateTime, ActionTimelineItem)> _addedItems = new();
private static readonly Queue<(DateTime, ITimelineItem)> _addedItems = new();

public static string GetLink(uint id)
{
Expand All @@ -35,20 +35,30 @@ internal static void UpdateTimeline()
if (time < 0) continue;
if (!timeline.TryGetValue(item.Time, out var items)) continue;

foreach (var item2 in items.OfType<ActionTimelineItem>()
.Where(i => !_addedItems.Any(added => added.Item2 == i)))
{
if (!item2.InPeriod(item)) continue;

var validItems = items.Where(i => !_addedItems.Any(added => added.Item2 == i) && i.InPeriod(item));

foreach (var item2 in validItems.OfType<ActionTimelineItem>())
{
var act = DataCenter.RightNowRotation?.AllBaseActions.FirstOrDefault(a => (ActionID)a.ID == item2.ID);

if (act == null) continue;

DataCenter.AddCommandAction(act, item2.Duration);
DataCenter.AddCommandAction(act, Service.Config.SpecialDuration);
_addedItems.Enqueue((DateTime.Now, item2));

#if DEBUG
Svc.Log.Debug($"Added the action{act} to timeline.");
Svc.Log.Debug($"Added the action {act} to timeline.");
#endif
}

foreach (var item2 in validItems.OfType<StateTimelineItem>())
{
DataCenter.SpecialType = item2.State;

_addedItems.Enqueue((DateTime.Now, item2));
#if DEBUG
Svc.Log.Debug($"Added the state {item2.State} to timeline.");
#endif
}
}
Expand Down Expand Up @@ -160,7 +170,7 @@ private static void OnCast(IntPtr dataPtr, uint targetActorId)
if (item.Time < DataCenter.RaidTimeRaw) continue;
if (item.Type is not TimelineType.StartsUsing) continue;
if (!item.IsIdMatched(ReadUshort(dataPtr, 0))) continue;
if (!new Regex(item["source"]).IsMatch(name) && item.IsShown) continue; //Maybe this is not correct.
if (!new Regex(item["source"]).IsMatch(name)) continue;

item.UpdateRaidTimeOffset();
break;
Expand Down
26 changes: 1 addition & 25 deletions RotationSolver/Updaters/StateUpdater.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ internal static class StateUpdater
public static void UpdateState()
{
DataCenter.CommandStatus = StatusFromCmdOrCondition();
DataCenter.AutoStatus = StatusFromAutomatic() | StatusFromTimeline();
DataCenter.AutoStatus = StatusFromAutomatic();
}

static RandomDelay
Expand All @@ -27,30 +27,6 @@ static RandomDelay
_healDelay3 = new(() => Service.Config.HealDelay),
_healDelay4 = new(() => Service.Config.HealDelay);

private static AutoStatus StatusFromTimeline()
{
AutoStatus status = AutoStatus.None;

if (!Service.Config.Timeline.TryGetValue(Svc.ClientState.TerritoryType, out var timeline)) return status;

foreach (var item in DataCenter.TimelineItems)
{
var time = item.Time - DataCenter.RaidTimeRaw;

if (time < 0) continue;
if (!timeline.TryGetValue(item.Time, out var items)) continue;

foreach (var item2 in items.OfType<StateTimelineItem>())
{
if (!item2.InPeriod(item)) continue;

status |= item2.State;
}
}

return status;
}

private static AutoStatus StatusFromAutomatic()
{
AutoStatus status = AutoStatus.None;
Expand Down

0 comments on commit 1884b1f

Please sign in to comment.