Initial commit: AetherBags + KamiToolKit for FC Gitea
Debug Build and Test / Build against Latest Dalamud (push) Has been cancelled
Debug Build and Test / Build against Staging Dalamud (push) Has been cancelled

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-02-08 14:46:31 -05:00
commit 8db4ce6094
375 changed files with 34124 additions and 0 deletions
@@ -0,0 +1,50 @@
using System;
using System.Collections.Generic;
using System.Linq;
using FFXIVClientStructs.FFXIV.Component.GUI;
using KamiToolKit.Classes;
namespace KamiToolKit.Timelines;
public unsafe class TimelineAnimationArray : IDisposable {
internal AtkTimelineAnimation* InternalTimelineArray = null;
private List<TimelineAnimation> timelineAnimations = [];
public uint Count { get; private set; }
public List<TimelineAnimation> Animations {
get => timelineAnimations;
set {
timelineAnimations = value;
Resync();
}
}
public void Dispose() {
foreach (var animation in timelineAnimations) {
animation.Dispose();
}
NativeMemoryHelper.UiFree(InternalTimelineArray, Count);
InternalTimelineArray = null;
}
private void Resync() {
// Free existing array, we will completely rebuild it
if (InternalTimelineArray is not null) {
NativeMemoryHelper.UiFree(InternalTimelineArray, Count);
InternalTimelineArray = null;
}
// Allocate new array
InternalTimelineArray = NativeMemoryHelper.UiAlloc<AtkTimelineAnimation>(timelineAnimations.Count);
// Copy all Animations into it
foreach (var index in Enumerable.Range(0, timelineAnimations.Count)) {
InternalTimelineArray[index] = *timelineAnimations[index].InternalAnimation;
}
Count = (uint)timelineAnimations.Count;
}
}