Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
48a83a4
Update Configuration.cs
Minmoose Mar 29, 2025
f18b90e
Merge branch 'main' into 0.6.0
Minmoose Mar 29, 2025
df42485
DRAFT/DEMO: Goop demo (#120)
AsgardXIV Mar 29, 2025
40ff9ac
Initial Individual Pose auto-save implementation (#141)
HoloWise Mar 29, 2025
3055a0b
Update ActorVFXService.cs
Minmoose Mar 29, 2025
63cf845
Fix autosave being disabled once you open the FileDialogManager
Minmoose Mar 29, 2025
47222ce
refactor: goodbye `KeyBindEvents`, hello `InputAction`
Bronya-Rand Mar 29, 2025
023b804
feat: implement bone flipping
Bronya-Rand Mar 30, 2025
5876697
chore: remove refactor changes from posing
Bronya-Rand Mar 30, 2025
18a5fff
Merge branch 'main' into refactor/inputs
Bronya-Rand Mar 30, 2025
01e779b
fix: buttons in settings menu
Bronya-Rand Mar 30, 2025
85de88d
Merge branch 'refactor/inputs' of https://github.com/Bronya-Rand/Brio…
Bronya-Rand Mar 30, 2025
2a96b05
fix: inputs triggering with UI boxes
Bronya-Rand Mar 30, 2025
3423d09
Merge branch 'main' into feat/flip-bone-data
Bronya-Rand Mar 30, 2025
079c6a7
chore: adjust logic for cameras on new input system
Bronya-Rand Mar 30, 2025
7cb2912
chore: merge code from current drive to git
Bronya-Rand Mar 31, 2025
0c6020c
Merge branch 'main' into feat/flip-bone-data
Bronya-Rand Mar 31, 2025
423f1e1
Merge branch 'main' into refactor/inputs
Bronya-Rand Mar 31, 2025
56c4799
Merge branch 'main' into 0.6.0
Minmoose Aug 7, 2025
c8a84d8
Merge branch 'main' into refactor/inputs
Minmoose Aug 7, 2025
a2f73b8
Refactor keybind config and handling logic
Minmoose Aug 7, 2025
ccbbb79
Merge pull request #159 from Bronya-Rand/refactor/inputs
Minmoose Aug 7, 2025
2286d6f
Refactor settings and appearance windows UI, enable dynamic pose
Minmoose Aug 8, 2025
622c8d8
Merge branch 'main' into 0.6.0
Minmoose Aug 8, 2025
4d01d2c
Add UI commands to open Glamourer and CustomizePlus
Minmoose Aug 8, 2025
9cda022
Merge branch '0.6.0' into feat/flip-bone-data
Minmoose Aug 8, 2025
8ded290
Update EntityHierarchyView.cs
Minmoose Aug 12, 2025
154db18
Hiding this away somewhere :p
Minmoose Aug 17, 2025
77877e5
Add contributor and supporter data files
Minmoose Aug 17, 2025
f0db05a
Update debug entity, bring in upstream changes
Minmoose Aug 17, 2025
f8325d3
Refactor transform handling in posing overlay
Minmoose Aug 17, 2025
57797db
Merge pull request #160 from Bronya-Rand/feat/flip-bone-data
Minmoose Aug 17, 2025
57679a8
Merge branch 'main' into 0.6.0
Minmoose Aug 17, 2025
7e7028b
Add multi-entity selection and multi-entity undo support
Minmoose Aug 18, 2025
e186cf2
Add accent color to IK button when enabled
Minmoose Aug 19, 2025
f817b5f
Prevent ESC key from being handled when a free cam is active
Minmoose Aug 19, 2025
2f9630c
Use collection expression for Stack initialization
Minmoose Aug 19, 2025
614d5ab
Add snapshot after bone flip
Minmoose Aug 19, 2025
77fecbe
Refactor facewear handling
Minmoose Aug 20, 2025
8a4b58f
Improve UI layout and controls in appearance editors
Minmoose Aug 20, 2025
f3f3d51
Optimize HasStacks property check
Minmoose Aug 20, 2025
eaa9e35
Renamed GroupedHistoryService -> HistoryService
Minmoose Aug 31, 2025
10c1d93
Merge branch 'main' into 0.6.0
Minmoose Aug 31, 2025
3df4ece
fix build
Minmoose Aug 31, 2025
03c607e
Add Moonfire Faire 2024 & 2025 festival and update service logic
Minmoose Aug 31, 2025
802b9b7
dev updates
Minmoose Sep 1, 2025
14e97be
.
Minmoose Sep 1, 2025
3be02ca
Update UpdateWindow
Minmoose Sep 1, 2025
9107bdc
Update WelcomeService.cs
Minmoose Sep 4, 2025
5b8c96a
Fix crash when leaving GPose, and other smaller fixes
Minmoose Sep 4, 2025
f716408
Add "Dynamic Face Control"
Minmoose Sep 4, 2025
4f5112c
Update UpdateWindow.cs
Minmoose Sep 4, 2025
06f2a89
Update PosingGraphicalWindow.cs
Minmoose Sep 4, 2025
ab2a8ee
Update ActorDynamicPoseWidget.cs
Minmoose Sep 4, 2025
2253146
Add ImBrioText
Minmoose Sep 4, 2025
307aa0c
Update UpdateWindow.cs
Minmoose Sep 5, 2025
5ba2486
Add new input actions and improve keybind handling
Minmoose Sep 5, 2025
1925020
Add option to hide name in GPose settings window
Minmoose Sep 5, 2025
f6701c0
Integrate MCDFService state into UI and autosave logic
Minmoose Sep 5, 2025
3dd7a7b
Refactor settings UI and add new keybinds
Minmoose Sep 5, 2025
f501189
Disable additional bone categories in OverlayFilter
Minmoose Sep 5, 2025
0eec5db
Prevent concurrent MCDF loading and improve UI feedback
Minmoose Sep 5, 2025
ffd6b6c
Fix warnings
Minmoose Sep 5, 2025
469bb8c
change default target
Minmoose Sep 5, 2025
46a292a
reset dfc properly
Minmoose Sep 5, 2025
0dcb2ef
Add supporters and contributors display to UpdateWindow
Minmoose Sep 6, 2025
b90f66b
Update window titles
Minmoose Sep 6, 2025
62cd037
Merge branch 'main' into 0.6.0
Minmoose Sep 6, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 10 additions & 3 deletions Brio/Brio.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
using Brio.MCDF.Game.Services;
using Brio.Resources;
using Brio.UI;
using Brio.UI.Controls.Stateless;
using Brio.UI.Windows;
using Brio.UI.Windows.Specialized;
using Brio.Web;
Expand All @@ -33,7 +34,7 @@ namespace Brio;

public class Brio : IDalamudPlugin
{
public const string Name = "Brio";
public const string Name = "BRIO DEV";

private static ServiceProvider? _services = null;

Expand Down Expand Up @@ -119,13 +120,16 @@ private static ServiceCollection SetupServices(DalamudServices dalamudServices)
serviceCollection.AddSingleton<ResourceProvider>();
serviceCollection.AddSingleton<GameDataProvider>();
serviceCollection.AddSingleton<WelcomeService>();
serviceCollection.AddSingleton<InputService>();
serviceCollection.AddSingleton<InputManagerService>();
serviceCollection.AddSingleton<SceneService>();
serviceCollection.AddSingleton<ProjectSystem>();
serviceCollection.AddSingleton<AutoSaveService>();
serviceCollection.AddSingleton<HistoryService>();
serviceCollection.AddSingleton<FileCacheService>();
serviceCollection.AddSingleton<MCDFService>();
serviceCollection.AddSingleton<TransientResourceService>();
serviceCollection.AddSingleton<ActorLookAtService>();
serviceCollection.AddSingleton<CharacterHandlerService>();

// IPC
serviceCollection.AddSingleton<BrioIPCService>();
Expand All @@ -145,6 +149,7 @@ private static ServiceCollection SetupServices(DalamudServices dalamudServices)
serviceCollection.AddSingleton<ActorSpawnService>();
serviceCollection.AddSingleton<ActorRedrawService>();
serviceCollection.AddSingleton<ActorAppearanceService>();
serviceCollection.AddSingleton<ActorVFXService>();
serviceCollection.AddSingleton<ActionTimelineService>();
serviceCollection.AddSingleton<GPoseService>();
serviceCollection.AddSingleton<CommandHandlerService>();
Expand All @@ -161,7 +166,8 @@ private static ServiceCollection SetupServices(DalamudServices dalamudServices)
serviceCollection.AddSingleton<PhysicsService>();
serviceCollection.AddSingleton<GameInputService>();
serviceCollection.AddSingleton<VirtualCameraManager>();

serviceCollection.AddSingleton<AutoSaveWindow>();
serviceCollection.AddSingleton<MCDFWindow>();
serviceCollection.AddSingleton<CutsceneManager>();

// Library
Expand Down Expand Up @@ -195,6 +201,7 @@ private static ServiceCollection SetupServices(DalamudServices dalamudServices)
serviceCollection.AddSingleton<PosingTransformWindow>();
serviceCollection.AddSingleton<CameraWindow>();
serviceCollection.AddSingleton<PosingGraphicalWindow>();
serviceCollection.AddSingleton<ImBrioText>();

return serviceCollection;
}
Expand Down
26 changes: 19 additions & 7 deletions Brio/Capabilities/Actor/ActorAppearanceCapability.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ public class ActorAppearanceCapability : ActorCharacterCapability
private readonly CustomizePlusService _customizePlusService;
private readonly GlamourerService _glamourerService;

private readonly CharacterHandlerService _characterHandlerService;

private readonly GPoseService _gposeService;
private readonly IFramework _framework;
private readonly MCDFService _mCDFService;
Expand Down Expand Up @@ -71,9 +73,11 @@ public class ActorAppearanceCapability : ActorCharacterCapability
public bool CanMCDF => _mCDFService.IsIPCAvailable;
public bool IsSelf => _targetService.IsSelf(GameObject);

public bool IsAnyMCDFLoading => _mCDFService.IsApplyingMCDF;

public bool IsHidden => CurrentAppearance.ExtendedAppearance.Transparency == 0;

public ActorAppearanceCapability(ActorEntity parent, MCDFService mCDFService, IFramework framework, ActorAppearanceService actorAppearanceService,
public ActorAppearanceCapability(ActorEntity parent,CharacterHandlerService characterHandlerService, MCDFService mCDFService, IFramework framework, ActorAppearanceService actorAppearanceService,
CustomizePlusService customizePlusService, PenumbraService penumbraService, TargetService targetService, GlamourerService glamourerService,
GPoseService gPoseService) : base(parent)
{
Expand All @@ -85,17 +89,24 @@ public ActorAppearanceCapability(ActorEntity parent, MCDFService mCDFService, IF
_framework = framework;
_mCDFService = mCDFService;
_targetService = targetService;
_characterHandlerService = characterHandlerService;

Widget = new ActorAppearanceWidget(this);

_gposeService.OnGPoseStateChange += OnGPoseStateChanged;
_penumbraService.OnPenumbraRedraw += OnPenumbraRedraw;
}

public async Task LoadMcdf(string path)
public async Task LoadMCDF(string path)
{
try
{
if(_mCDFService.IsApplyingMCDF)
{
Brio.NotifyError("Another MCDF is loading, Please wait for it to finish.");
return;
}

Entity.LoadingDescription = "Loading MCDF...";
Entity.IsLoading = true;

Expand Down Expand Up @@ -139,15 +150,15 @@ public void SetCollection(Guid collection)
if(!IsCollectionOverridden)
_oldCollection = old.ToString();

_ = _actorAppearanceService.Redraw(Character);
_ = _actorAppearanceService.Redraw(Character, HasMCDF);
}
public void ResetCollection()
{
if(IsCollectionOverridden)
{
_penumbraService.SetCollectionForObject(Character, Guid.Parse(_oldCollection!));
_oldCollection = null;
_ = _actorAppearanceService.Redraw(Character);
_ = _actorAppearanceService.Redraw(Character, HasMCDF);
}
}

Expand Down Expand Up @@ -334,8 +345,9 @@ public Task ApplyEmperors()
}

public async Task Redraw()
{
await _actorAppearanceService.Redraw(Character);
{
await _actorAppearanceService.Redraw(Character, HasMCDF);

ApplyShaderOverride();

if(Entity is ActorEntity actor && actor.IsProp == true)
Expand All @@ -351,7 +363,7 @@ public async Task ResetAppearance()
{
if(HasMCDF)
{
_ = _actorAppearanceService.RevertMCDF(GameObject);
_ = _characterHandlerService.Revert(GameObject);
HasMCDF = false;
}
else
Expand Down
7 changes: 6 additions & 1 deletion Brio/Capabilities/Actor/ActorDebugCapability.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using Brio.Capabilities.Posing;
using Brio.Config;
using Brio.Entities.Actor;
using Brio.Game.Actor;
using Brio.UI.Widgets.Actor;
using System.Collections.Generic;

Expand All @@ -12,10 +13,12 @@ public class ActorDebugCapability : ActorCharacterCapability
public bool IsDebug => _configService.IsDebug;

private readonly ConfigurationService _configService;
private readonly ActorVFXService _vfxService;

public ActorDebugCapability(ActorEntity parent, ConfigurationService configService) : base(parent)
public ActorDebugCapability(ActorEntity parent, ConfigurationService configService, ActorVFXService actorVFXService) : base(parent)
{
_configService = configService;
_vfxService = actorVFXService;

Widget = new ActorDebugWidget(this);
}
Expand All @@ -30,4 +33,6 @@ public Dictionary<string, int> SkeletonStacks
return [];
}
}

public ActorVFXService VFXService => _vfxService;
}
51 changes: 46 additions & 5 deletions Brio/Capabilities/Actor/ActorDynamicPoseCapability.cs
Original file line number Diff line number Diff line change
@@ -1,30 +1,71 @@
using Brio.Entities.Actor;
using Brio.Game.Actor;
using Brio.Game.Actor.Extensions;
using Brio.Game.Camera;
using Brio.Game.GPose;
using Brio.UI.Widgets.Actor;
using Dalamud.Game.ClientState.Objects.Types;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Numerics;
using static Brio.Capabilities.Actor.CompanionCapability;

namespace Brio.Capabilities.Actor;
public class ActorDynamicPoseCapability : ActorCharacterCapability
{
private readonly ActorLookAtService _actorLookAtService;
private readonly ActorAppearanceService _actorAppearanceService;
private readonly GPoseService _gposeService;
private readonly VirtualCameraManager _virtualCameraManager;

public ActorDynamicPoseCapability(ActorEntity parent, ActorAppearanceService actorAppearanceService, GPoseService gPoseService) : base(parent)
public VirtualCamera? Camera => _virtualCameraManager.CurrentCamera;

public ActorDynamicPoseCapability(ActorEntity parent, ActorLookAtService actorLookAtService, VirtualCameraManager virtualCameraManager, ActorAppearanceService actorAppearanceService, GPoseService gPoseService) : base(parent)
{
_actorLookAtService = actorLookAtService;
_actorAppearanceService = actorAppearanceService;
_gposeService = gPoseService;
_virtualCameraManager = virtualCameraManager;

Widget = new ActorDynamicPoseWidget(this);
}

public unsafe void TESTactorlook()
public unsafe void StartLookAt()
{
_actorAppearanceService.TESTactorlook(GameObject);
_actorLookAtService.AddObjectToLook(GameObject);
}

public unsafe void TESTactorlookClear()
public unsafe void StopLookAt()
{
_actorAppearanceService.TESTactorlookClear(GameObject);
_actorLookAtService.RemoveObjectFromLook(GameObject);
}

public unsafe void SetMode(LookAtTargetMode lookAtTargetMode)
{
_actorLookAtService.SetTargetMode(GameObject, lookAtTargetMode);
}

public void SetTargetLock(bool doLock, LookAtTargetType targetType, Vector3 target)
{
_actorLookAtService.SetTargetLock(GameObject, doLock, targetType, target);
}

public void SetTargetType(LookAtTargetType lookAtTarget)
{
_actorLookAtService.SetTargetType(GameObject, lookAtTarget);
}

public LookAtDataHolder? GetData()
{
return _actorLookAtService.GetTargetDataHolder(GameObject);
}

public static ActorDynamicPoseCapability? CreateIfEligible(IServiceProvider provider, ActorEntity entity)
{
if(entity.GameObject is IBattleChara)
return ActivatorUtilities.CreateInstance<ActorDynamicPoseCapability>(provider, entity);

return null;
}

}
4 changes: 2 additions & 2 deletions Brio/Capabilities/Camera/BrioCameraCapability.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,12 @@ public class BrioCameraCapability : CameraCapability
private readonly CameraWindow _cameraWindow;
private readonly VirtualCameraManager _virtualCameraService;

public BrioCameraCapability(CameraEntity parent, VirtualCameraManager virtualCameraService, CutsceneManager _cutsceneManager, ConfigurationService _configService, GPoseService gPoseService, CameraWindow cameraWindow) : base(parent, gPoseService)
public BrioCameraCapability(CameraEntity parent, VirtualCameraManager virtualCameraService, GPoseService gPoseService, CameraWindow cameraWindow) : base(parent, gPoseService)
{
_virtualCameraService = virtualCameraService;
_cameraWindow = cameraWindow;

Widget = new BrioCameraWidget(this, _cutsceneManager, _configService);
Widget = new BrioCameraWidget(this);
}

public override void OnEntitySelected()
Expand Down
Loading
Loading