Skip to content

Commit

Permalink
feat: update to properly register ITerritoryManager
Browse files Browse the repository at this point in the history
  • Loading branch information
xCykrix committed Jul 17, 2024
1 parent f390296 commit a29d49a
Show file tree
Hide file tree
Showing 11 changed files with 282 additions and 256 deletions.
29 changes: 16 additions & 13 deletions Extensions/ListExtension.cs
Original file line number Diff line number Diff line change
@@ -1,17 +1,20 @@

public static class ListExtension
namespace DalamudSystem.Extensions
{
public static void DalamudCoreMoveListItem<T>(this IList<T> List, int Position, MoveDirection Direction)
{
int Modifier = Direction == MoveDirection.Up ? -1 : +1;
int Positional = Position + Modifier;
if (Positional < 0 || Positional >= List.Count) return;
(List[Position], List[Position + Modifier]) = (List[Position + Modifier], List[Position]);
}
}
public static class ListExtension
{
public static void DalamudSystemMoveListItem<T>(this IList<T> List, int Position, MoveDirection Direction)
{
int Modifier = Direction == MoveDirection.Up ? -1 : 1;
int Positional = Position + Modifier;
if (Positional < 0 || Positional >= List.Count) return;
(List[Position], List[Position + Modifier]) = (List[Position + Modifier], List[Position]);
}
}

public enum MoveDirection
{
Up,
Down
public enum MoveDirection
{
Up,
Down
}
}
102 changes: 52 additions & 50 deletions ICoreManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,66 +10,68 @@ namespace DalamudSystem;
#nullable disable
public class ICoreManager
{
// Plugin Constants
[PluginService] public static IDalamudPluginInterface PluginInterface { get; private set; }
[PluginService] public static IFramework Framework { get; private set; }
[PluginService] public static ICommandManager Commands { get; private set; }
[PluginService] public static IClientState ClientState { get; private set; }
// Plugin Constants
[PluginService] public static IDalamudPluginInterface PluginInterface { get; private set; }
[PluginService] public static IFramework Framework { get; private set; }
[PluginService] public static ICommandManager Commands { get; private set; }
[PluginService] public static IClientState ClientState { get; private set; }

[PluginService] public static ICondition Condition { get; private set; }
[PluginService] public static IKeyState KeyState { get; private set; }
[PluginService] public static ITargetManager Targets { get; private set; }
[PluginService] public static IDataManager DataManager { get; private set; }
[PluginService] public static ICondition Condition { get; private set; }
[PluginService] public static IKeyState KeyState { get; private set; }
[PluginService] public static ITargetManager Targets { get; private set; }
[PluginService] public static IDataManager DataManager { get; private set; }

[PluginService] public static IChatGui Chat { get; private set; }
[PluginService] public static IObjectTable Objects { get; private set; }
[PluginService] public static IAetheryteList AetheryteList { get; private set; }
[PluginService] public static IFateTable FateTable { get; private set; }
[PluginService] public static IPluginLog Log { get; private set; }
[PluginService] public static IChatGui Chat { get; private set; }
[PluginService] public static IObjectTable Objects { get; private set; }
[PluginService] public static IAetheryteList AetheryteList { get; private set; }
[PluginService] public static IFateTable FateTable { get; private set; }
[PluginService] public static IPluginLog Log { get; private set; }

// Internal Systems
public static WindowSystem WindowManager { get; private set; }
// Internal Systems
public static WindowSystem WindowManager { get; private set; }

// Logical Initialization
internal static bool IsInitialized = false;
public static void Initialize(IDalamudPluginInterface Interface)
{
try
// Logical Initialization
internal static bool IsInitialized = false;
public static void Initialize(IDalamudPluginInterface Interface)
{
if (IsInitialized)
{
Log.Debug("Internal Services Already Initialized.");
return;
}
IsInitialized = true;
try
{
if (IsInitialized)
{
Log.Debug("Internal Services Already Initialized.");
return;
}
IsInitialized = true;

// Create Interface
Interface.Create<ICoreManager>();
// Create Interface
Interface.Create<ICoreManager>();

// Propogate Builtin Modules
WindowManager = new WindowSystem(Interface.InternalName);
// Propogate Builtin Modules
WindowManager = new WindowSystem(Interface.InternalName);

// Register Managers
IManagerController.Hook(new IActionManager());
IManagerController.Hook(new IMovementManager());
// Register Managers
IManagerController.Hook(new IActionManager());
IManagerController.Hook(new IMovementManager());
IManagerController.Hook(new ITerritoryManager());

// Register Disposables
PluginInterface.UiBuilder.Draw += WindowManager.Draw;
}
catch (Exception except)
{
Console.WriteLine($"Failed to Load Service(s): {except.Message}");

// Register Disposables
PluginInterface.UiBuilder.Draw += WindowManager.Draw;
}
catch (Exception except)
{
Console.WriteLine($"Failed to Load Service(s): {except.Message}");
}
}
}

public static void Dispose()
{
// Stop Rendering
PluginInterface.UiBuilder.Draw -= WindowManager.Draw;
public static void Dispose()
{
// Stop Rendering
PluginInterface.UiBuilder.Draw -= WindowManager.Draw;

// Dispose Builtin Modules
IModuleController.Dispose();
IManagerController.Dispose();
WindowManager.RemoveAllWindows();
}
// Dispose Builtin Modules
IModuleController.Dispose();
IManagerController.Dispose();
WindowManager.RemoveAllWindows();
}
}
36 changes: 19 additions & 17 deletions Managers/IActionManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,26 +5,28 @@ namespace DalamudSystem.Manager;

public unsafe class IActionManager : IManager, IDisposable
{
private readonly ActionManager* ActionManagerInstance = ActionManager.Instance();
private readonly ActionManager* ActionManagerInstance = ActionManager.Instance();

internal IActionManager() : base(nameof(IActionManager)) {
}
internal IActionManager() : base(nameof(IActionManager))
{
}

public bool CanUse(ActionType actionType, uint aid)
{
return ActionManagerInstance->GetActionStatus(actionType, aid) == 0;
}
public bool CanUse(ActionType actionType, uint aid)
{
return ActionManagerInstance->GetActionStatus(actionType, aid) == 0;
}

public bool TryToUse(ActionType actionType, uint aid)
{
if (CanUse(actionType, aid)) {
return ActionManagerInstance->UseAction(actionType, aid);
public bool TryToUse(ActionType actionType, uint aid)
{
if (CanUse(actionType, aid))
{
return ActionManagerInstance->UseAction(actionType, aid);
}
return false;
}
return false;
}

public override void Dispose()
{
GC.SuppressFinalize(this);
}
public override void Dispose()
{
GC.SuppressFinalize(this);
}
}
66 changes: 33 additions & 33 deletions Managers/IMovementManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,37 +6,37 @@ namespace DalamudSystem.Manager;

public class IMovementManager : IManager, IDisposable
{
public bool IPCPluginLoaded = false;
public Func<bool> IsReady;
public Func<float> BuildProgress;
public Func<bool> PathfindInProgress;
public Func<bool> IsRunning;

public Func<Vector3, bool, bool> PathfindAndMove;
public Func<Vector3, float, float, Vector3> Nearest;
public Func<Vector3, float, float, Vector3> Floor;
public Func<bool> Reload;
public Func<bool> Rebuild;
internal IMovementManager() : base(nameof(IMovementManager))
{
IPCPluginLoaded = ICoreManager.PluginInterface.InstalledPlugins.Where((v) => v.InternalName == "vnavmesh").FirstOrDefault()?.IsLoaded ?? false;

// Status
IsReady = ICoreManager.PluginInterface.GetIpcSubscriber<bool>("vnavmesh.Nav.IsReady").InvokeFunc;
BuildProgress = ICoreManager.PluginInterface.GetIpcSubscriber<float>("vnavmesh.Nav.BuildProgress").InvokeFunc;
PathfindInProgress = ICoreManager.PluginInterface.GetIpcSubscriber<bool>("vnavmesh.Nav.PathfindInProgress").InvokeFunc;
IsRunning = ICoreManager.PluginInterface.GetIpcSubscriber<bool>("vnavmesh.Path.IsRunning").InvokeFunc;

// Functions
PathfindAndMove = ICoreManager.PluginInterface.GetIpcSubscriber<Vector3, bool, bool>("vnavmesh.SimpleMove.PathfindAndMoveTo").InvokeFunc;
Nearest = ICoreManager.PluginInterface.GetIpcSubscriber<Vector3, float, float, Vector3>("vnavmesh.Query.Mesh.NearestPoint").InvokeFunc;
Floor = ICoreManager.PluginInterface.GetIpcSubscriber<Vector3, float, float, Vector3>("vnavmesh.Query.Mesh.PointOnFloor").InvokeFunc;
Reload = ICoreManager.PluginInterface.GetIpcSubscriber<bool>("vnavmesh.Nav.Reload").InvokeFunc;
Rebuild = ICoreManager.PluginInterface.GetIpcSubscriber<bool>("vnavmesh.Nav.Rebuild").InvokeFunc;
}

public override void Dispose()
{
GC.SuppressFinalize(this);
}
public bool IPCPluginLoaded = false;
public Func<bool> IsReady;
public Func<float> BuildProgress;
public Func<bool> PathfindInProgress;
public Func<bool> IsRunning;

public Func<Vector3, bool, bool> PathfindAndMove;
public Func<Vector3, float, float, Vector3> Nearest;
public Func<Vector3, float, float, Vector3> Floor;
public Func<bool> Reload;
public Func<bool> Rebuild;
internal IMovementManager() : base(nameof(IMovementManager))
{
IPCPluginLoaded = ICoreManager.PluginInterface.InstalledPlugins.Where((v) => v.InternalName == "vnavmesh").FirstOrDefault()?.IsLoaded ?? false;

// Status
IsReady = ICoreManager.PluginInterface.GetIpcSubscriber<bool>("vnavmesh.Nav.IsReady").InvokeFunc;
BuildProgress = ICoreManager.PluginInterface.GetIpcSubscriber<float>("vnavmesh.Nav.BuildProgress").InvokeFunc;
PathfindInProgress = ICoreManager.PluginInterface.GetIpcSubscriber<bool>("vnavmesh.Nav.PathfindInProgress").InvokeFunc;
IsRunning = ICoreManager.PluginInterface.GetIpcSubscriber<bool>("vnavmesh.Path.IsRunning").InvokeFunc;

// Functions
PathfindAndMove = ICoreManager.PluginInterface.GetIpcSubscriber<Vector3, bool, bool>("vnavmesh.SimpleMove.PathfindAndMoveTo").InvokeFunc;
Nearest = ICoreManager.PluginInterface.GetIpcSubscriber<Vector3, float, float, Vector3>("vnavmesh.Query.Mesh.NearestPoint").InvokeFunc;
Floor = ICoreManager.PluginInterface.GetIpcSubscriber<Vector3, float, float, Vector3>("vnavmesh.Query.Mesh.PointOnFloor").InvokeFunc;
Reload = ICoreManager.PluginInterface.GetIpcSubscriber<bool>("vnavmesh.Nav.Reload").InvokeFunc;
Rebuild = ICoreManager.PluginInterface.GetIpcSubscriber<bool>("vnavmesh.Nav.Rebuild").InvokeFunc;
}

public override void Dispose()
{
GC.SuppressFinalize(this);
}
}
88 changes: 44 additions & 44 deletions Managers/ITerritoryManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,62 +6,62 @@ namespace DalamudSystem.Manager;

public class ITerritoryManager : IManager, IDisposable
{
private readonly IDataManager DataManager;
private readonly IEnumerable<TerritoryDetail> TerritoryDetails;
private readonly IDataManager DataManager;
private readonly IEnumerable<TerritoryDetail> TerritoryDetails;

internal ITerritoryManager() : base(nameof(ITerritoryManager))
{
DataManager = ICoreManager.DataManager;
TerritoryDetails = LoadTerritoryDetails();
}
internal ITerritoryManager() : base(nameof(ITerritoryManager))
{
DataManager = ICoreManager.DataManager;
TerritoryDetails = LoadTerritoryDetails();
}

public TerritoryDetail? GetByZoneName(string Zone, bool Partial = true)
{
if (!TerritoryDetails.Any()) LoadTerritoryDetails();
public TerritoryDetail? GetByZoneName(string Zone, bool Partial = true)
{
if (!TerritoryDetails.Any()) LoadTerritoryDetails();

var TerrDetails =
TerritoryDetails
.Where(ECH => ECH.Name.Equals(Zone, StringComparison.OrdinalIgnoreCase) ||
Partial && ECH.Name.Contains(Zone, StringComparison.CurrentCultureIgnoreCase)).OrderBy(x => x.Name.Length);
var TerrDetails =
TerritoryDetails
.Where(ECH => ECH.Name.Equals(Zone, StringComparison.OrdinalIgnoreCase) ||
Partial && ECH.Name.Contains(Zone, StringComparison.CurrentCultureIgnoreCase)).OrderBy(x => x.Name.Length);

var TerrDetail = TerrDetails.FirstOrDefault();
var TerrDetail = TerrDetails.FirstOrDefault();

return TerrDetail!;
}
return TerrDetail!;
}

private IEnumerable<TerritoryDetail> LoadTerritoryDetails()
{
private IEnumerable<TerritoryDetail> LoadTerritoryDetails()
{
#pragma warning disable CS8602 // Dereference of a possibly null reference.
return (from TerrType in DataManager.GetExcelSheet<TerritoryType>()
let Type = TerrType.Bg.RawString.Split('/')
where Type.Length >= 3
where Type[2] == "twn" || Type[2] == "fld" || Type[2] == "hou"
where !string.IsNullOrWhiteSpace(TerrType.Map.Value.PlaceName.Value.Name)
select new TerritoryDetail
{
TerritoryType = TerrType.RowId,
MapId = TerrType.Map.Value.RowId,
SizeFactor = TerrType.Map.Value.SizeFactor,
Name = TerrType.Map.Value.PlaceName.Value.Name
}).ToList();
return (from TerrType in DataManager.GetExcelSheet<TerritoryType>()
let Type = TerrType.Bg.RawString.Split('/')
where Type.Length >= 3
where Type[2] == "twn" || Type[2] == "fld" || Type[2] == "hou"
where !string.IsNullOrWhiteSpace(TerrType.Map.Value.PlaceName.Value.Name)
select new TerritoryDetail
{
TerritoryType = TerrType.RowId,
MapId = TerrType.Map.Value.RowId,
SizeFactor = TerrType.Map.Value.SizeFactor,
Name = TerrType.Map.Value.PlaceName.Value.Name
}).ToList();
#pragma warning restore CS8602 // Dereference of a possibly null reference.
}
}

public TerritoryDetail? GetByTerritoryType(ushort territoryType)
{
return TerritoryDetails.FirstOrDefault(x => x.TerritoryType == territoryType);
}
public TerritoryDetail? GetByTerritoryType(ushort territoryType)
{
return TerritoryDetails.FirstOrDefault(x => x.TerritoryType == territoryType);
}

public override void Dispose()
{
GC.SuppressFinalize(this);
}
public override void Dispose()
{
GC.SuppressFinalize(this);
}
}

public class TerritoryDetail
{
public string Name { get; set; } = null!;
public uint TerritoryType { get; set; }
public uint MapId { get; set; }
public ushort SizeFactor { get; set; }
public string Name { get; set; } = null!;
public uint TerritoryType { get; set; }
public uint MapId { get; set; }
public ushort SizeFactor { get; set; }
}
Loading

0 comments on commit a29d49a

Please sign in to comment.