Compare commits

...

30 Commits

Author SHA1 Message Date
azyges
15bf87feb4 bump version 2025-08-29 09:29:53 +09:00
azyges
9c0379631f adjust colors 2025-08-29 09:23:51 +09:00
defnotken
44475fda50 FINAL FINAL (#6)
* Yeet Token!

* Cleaning up workflow
2025-08-27 19:21:42 +02:00
defnotken
071885b04c Modify Variable (#4) 2025-08-27 18:21:01 +02:00
Zura
27c3231084 Merge pull request #3 from defnotken/master
Build and Release Workflow on Push to Master
2025-08-27 17:18:20 +02:00
defnotken
2b98bf6891 changing the name of the release 2025-08-27 09:13:01 -05:00
defnotken
b6b8e7bddf Clean up 2025-08-27 09:09:03 -05:00
defnotken
9f8cc48e34 One more time! 2025-08-27 09:03:55 -05:00
defnotken
ae6013adf6 Forgot to make a directory 2025-08-27 08:59:36 -05:00
defnotken
2b67f44788 Switching path of the build 2025-08-27 08:56:29 -05:00
defnotken
ad74729c4a Testing zip and publish 2025-08-26 13:43:38 -05:00
defnotken
4f3a6a8205 running on windows 2025-08-26 13:31:13 -05:00
defnotken
71e80f5c48 add dalamud 2025-08-26 13:29:23 -05:00
defnotken
77f667ccfd now with submodules 2025-08-26 13:07:45 -05:00
defnotken
97e964473b remove cache mode 2025-08-26 13:01:50 -05:00
defnotken
d5d89a759e testing builds 2025-08-26 12:59:23 -05:00
defnotken
e5c87e5d68 debugging version 2025-08-26 11:30:34 -05:00
defnotken
5559c06d2b version references 2025-08-26 11:27:46 -05:00
defnotken
53bea001ba slash? 2025-08-26 11:24:49 -05:00
defnotken
a401a18c04 renaming variable oops 2025-08-26 11:22:55 -05:00
defnotken
213f6e9f6d Testing another action 2025-08-26 11:21:41 -05:00
defnotken
4570c4b5f4 Testing out tag and release 2025-08-26 11:14:35 -05:00
Zura
e6c1120323 Update README.md 2025-08-25 22:33:26 +02:00
Zura
0d35d04a20 Update README.md 2025-08-25 22:33:07 +02:00
Zura
5fb9ec7637 Add files via upload 2025-08-25 16:15:11 +02:00
Abelfreyja
1902d09037 forgot version oops 2025-08-25 21:03:18 +09:00
Abelfreyja
e5b629fd5d wow it works 2025-08-25 20:54:07 +09:00
Abelfreyja
f29356836d same thing.. 2025-08-25 20:48:46 +09:00
Abelfreyja
96238f294a move to submodule, nuget outdated, fix routes for api too and of course update packages 2025-08-25 20:47:25 +09:00
Abelfreyja
a6e727542a fix submodule, i'm tired 2025-08-25 03:45:12 +09:00
22 changed files with 190 additions and 61 deletions

View File

@@ -0,0 +1,84 @@
name: Tag and Release Lightless
on:
push:
branches: [ master ]
env:
PLUGIN_NAME: LightlessSync
DOTNET_VERSION: 9.x
jobs:
tag-and-release:
runs-on: windows-2022
permissions:
contents: write
steps:
- name: Checkout Lightless
uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: true
- name: Setup .NET 9 SDK
uses: actions/setup-dotnet@v4
with:
dotnet-version: 9.x
- name: Download Dalamud
run: |
Invoke-WebRequest -Uri https://goatcorp.github.io/dalamud-distrib/stg/latest.zip -OutFile latest.zip
Expand-Archive -Force latest.zip "$env:AppData\XIVLauncher\addon\Hooks\dev"
- name: Lets Build Lightless!
run: |
dotnet restore
dotnet build --configuration Release --no-restore
dotnet publish --configuration Release --no-build
- name: Get version
id: package_version
uses: KageKirin/get-csproj-version@v0
with:
file: LightlessSync/LightlessSync.csproj
- name: Display version
run: |
echo "Version: ${{ steps.package_version.outputs.version }}"
- name: Prepare Lightless Client
run: |
$publishPath = "${{ env.PLUGIN_NAME }}/bin/x64/Release/publish"
if (Test-Path $publishPath) {
Remove-Item -Recurse -Force $publishPath
Write-Host "Removed $publishPath"
} else {
Write-Host "$publishPath does not exist, nothing to remove."
}
mkdir output
Compress-Archive -Path ${{ env.PLUGIN_NAME }}/bin/x64/Release/* -DestinationPath output/LightlessClient.zip
- name: Create Git tag if not exists
shell: pwsh
run: |
$tag = "${{ steps.package_version.outputs.version }}"
git fetch --tags
if (-not (git tag -l $tag)) {
Write-Host "Tag $tag does not exist. Creating and pushing..."
git config user.name "GitHub Action"
git config user.email "action@github.com"
git tag $tag
git push origin $tag
} else {
Write-Host "Tag $tag already exists. Skipping tag creation."
}
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ steps.package_version.outputs.version }}
name: ${{ steps.package_version.outputs.version }}
draft: false
prerelease: false
files: output/LightlessClient.zip

3
.gitmodules vendored
View File

@@ -1,3 +1,6 @@
[submodule "LightlessAPI"] [submodule "LightlessAPI"]
path = LightlessAPI path = LightlessAPI
url = https://github.com/Light-Public-Syncshells/LightlessAPI url = https://github.com/Light-Public-Syncshells/LightlessAPI
[submodule "PenumbraAPI"]
path = PenumbraAPI
url = https://github.com/Ottermandias/Penumbra.Api.git

View File

@@ -12,6 +12,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LightlessSync", "LightlessS
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LightlessSync.API", "LightlessAPI\LightlessSyncAPI\LightlessSync.API.csproj", "{A4E42AFA-5045-7E81-937F-3A320AC52987}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LightlessSync.API", "LightlessAPI\LightlessSyncAPI\LightlessSync.API.csproj", "{A4E42AFA-5045-7E81-937F-3A320AC52987}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Penumbra.Api", "PenumbraAPI\Penumbra.Api.csproj", "{C104F6BE-9CC4-9CF7-271C-5C3A1F646601}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
@@ -36,6 +38,14 @@ Global
{A4E42AFA-5045-7E81-937F-3A320AC52987}.Release|Any CPU.Build.0 = Release|Any CPU {A4E42AFA-5045-7E81-937F-3A320AC52987}.Release|Any CPU.Build.0 = Release|Any CPU
{A4E42AFA-5045-7E81-937F-3A320AC52987}.Release|x64.ActiveCfg = Release|Any CPU {A4E42AFA-5045-7E81-937F-3A320AC52987}.Release|x64.ActiveCfg = Release|Any CPU
{A4E42AFA-5045-7E81-937F-3A320AC52987}.Release|x64.Build.0 = Release|Any CPU {A4E42AFA-5045-7E81-937F-3A320AC52987}.Release|x64.Build.0 = Release|Any CPU
{C104F6BE-9CC4-9CF7-271C-5C3A1F646601}.Debug|Any CPU.ActiveCfg = Debug|x64
{C104F6BE-9CC4-9CF7-271C-5C3A1F646601}.Debug|Any CPU.Build.0 = Debug|x64
{C104F6BE-9CC4-9CF7-271C-5C3A1F646601}.Debug|x64.ActiveCfg = Debug|x64
{C104F6BE-9CC4-9CF7-271C-5C3A1F646601}.Debug|x64.Build.0 = Debug|x64
{C104F6BE-9CC4-9CF7-271C-5C3A1F646601}.Release|Any CPU.ActiveCfg = Release|x64
{C104F6BE-9CC4-9CF7-271C-5C3A1F646601}.Release|Any CPU.Build.0 = Release|x64
{C104F6BE-9CC4-9CF7-271C-5C3A1F646601}.Release|x64.ActiveCfg = Release|x64
{C104F6BE-9CC4-9CF7-271C-5C3A1F646601}.Release|x64.Build.0 = Release|x64
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE

View File

@@ -216,7 +216,7 @@ public sealed class IpcCallerPenumbra : DisposableMediatorSubscriberBase, IIpcCa
return await _dalamudUtil.RunOnFrameworkThread(() => return await _dalamudUtil.RunOnFrameworkThread(() =>
{ {
var collName = "Lightless_" + uid; var collName = "Lightless_" + uid;
var collId = _penumbraCreateNamedTemporaryCollection.Invoke(collName); _penumbraCreateNamedTemporaryCollection.Invoke(collName, collName, out var collId);
logger.LogTrace("Creating Temp Collection {collName}, GUID: {collId}", collName, collId); logger.LogTrace("Creating Temp Collection {collName}, GUID: {collId}", collName, collId);
return collId; return collId;

View File

@@ -3,7 +3,7 @@
<PropertyGroup> <PropertyGroup>
<Authors></Authors> <Authors></Authors>
<Company></Company> <Company></Company>
<Version>1.11.0</Version> <Version>1.11.2</Version>
<Description></Description> <Description></Description>
<Copyright></Copyright> <Copyright></Copyright>
<PackageProjectUrl>https://github.com/Light-Public-Syncshells/LightlessClient</PackageProjectUrl> <PackageProjectUrl>https://github.com/Light-Public-Syncshells/LightlessClient</PackageProjectUrl>
@@ -28,20 +28,19 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="DalamudPackager" Version="13.0.0" /> <PackageReference Include="DalamudPackager" Version="13.0.0" />
<PackageReference Include="Downloader" Version="3.3.4" /> <PackageReference Include="Downloader" Version="4.0.3" />
<PackageReference Include="K4os.Compression.LZ4.Legacy" Version="1.3.8" /> <PackageReference Include="K4os.Compression.LZ4.Legacy" Version="1.3.8" />
<PackageReference Include="Meziantou.Analyzer" Version="2.0.189"> <PackageReference Include="Meziantou.Analyzer" Version="2.0.212">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="9.0.3" /> <PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="9.0.3" />
<PackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.MessagePack" Version="9.0.3" /> <PackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.MessagePack" Version="9.0.3" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.3" /> <PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.3" />
<PackageReference Include="Glamourer.Api" Version="2.4.0" /> <PackageReference Include="Glamourer.Api" Version="2.6.0" />
<PackageReference Include="NReco.Logging.File" Version="1.2.2" /> <PackageReference Include="NReco.Logging.File" Version="1.2.2" />
<PackageReference Include="Penumbra.Api" Version="5.6.0" />
<PackageReference Include="Penumbra.String" Version="1.0.5" /> <PackageReference Include="Penumbra.String" Version="1.0.5" />
<PackageReference Include="SixLabors.ImageSharp" Version="3.1.7" /> <PackageReference Include="SixLabors.ImageSharp" Version="3.1.11" />
<PackageReference Include="SonarAnalyzer.CSharp" Version="10.7.0.110445"> <PackageReference Include="SonarAnalyzer.CSharp" Version="10.7.0.110445">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
@@ -75,6 +74,7 @@
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\LightlessAPI\LightlessSyncAPI\LightlessSync.API.csproj" /> <ProjectReference Include="..\LightlessAPI\LightlessSyncAPI\LightlessSync.API.csproj" />
<ProjectReference Include="..\PenumbraAPI\Penumbra.Api.csproj" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@@ -63,7 +63,7 @@ internal sealed partial class CharaDataHubUi
ImGui.AlignTextToFramePadding(); ImGui.AlignTextToFramePadding();
ImGui.TextUnformatted("GPose Lobby"); ImGui.TextUnformatted("GPose Lobby");
ImGui.SameLine(); ImGui.SameLine();
UiSharedService.ColorTextWrapped(_charaDataGposeTogetherManager.CurrentGPoseLobbyId, ImGuiColors.ParsedGreen); UiSharedService.ColorTextWrapped(_charaDataGposeTogetherManager.CurrentGPoseLobbyId, UIColors.Get("LightlessBlue"));
ImGui.SameLine(); ImGui.SameLine();
if (_uiSharedService.IconButton(FontAwesomeIcon.Clipboard)) if (_uiSharedService.IconButton(FontAwesomeIcon.Clipboard))
{ {
@@ -130,7 +130,7 @@ internal sealed partial class CharaDataHubUi
ImGui.AlignTextToFramePadding(); ImGui.AlignTextToFramePadding();
var note = _serverConfigurationManager.GetNoteForUid(user.UserData.UID); var note = _serverConfigurationManager.GetNoteForUid(user.UserData.UID);
var userText = note == null ? user.UserData.AliasOrUID : $"{note} ({user.UserData.AliasOrUID})"; var userText = note == null ? user.UserData.AliasOrUID : $"{note} ({user.UserData.AliasOrUID})";
UiSharedService.ColorText(userText, ImGuiColors.ParsedGreen); UiSharedService.ColorText(userText, UIColors.Get("LightlessBlue"));
var buttonsize = _uiSharedService.GetIconButtonSize(FontAwesomeIcon.ArrowRight).X; var buttonsize = _uiSharedService.GetIconButtonSize(FontAwesomeIcon.ArrowRight).X;
var buttonsize2 = _uiSharedService.GetIconButtonSize(FontAwesomeIcon.Plus).X; var buttonsize2 = _uiSharedService.GetIconButtonSize(FontAwesomeIcon.Plus).X;
@@ -165,7 +165,7 @@ internal sealed partial class CharaDataHubUi
UiSharedService.AttachToolTip(user.WorldDataDescriptor + UiSharedService.TooltipSeparator); UiSharedService.AttachToolTip(user.WorldDataDescriptor + UiSharedService.TooltipSeparator);
ImGui.SameLine(); ImGui.SameLine();
_uiSharedService.IconText(FontAwesomeIcon.Map, sameMapAndServer.SameMap ? ImGuiColors.ParsedGreen : ImGuiColors.DalamudRed); _uiSharedService.IconText(FontAwesomeIcon.Map, sameMapAndServer.SameMap ? UIColors.Get("LightlessBlue") : ImGuiColors.DalamudRed);
if (ImGui.IsItemClicked(ImGuiMouseButton.Left) && user.WorldData != null) if (ImGui.IsItemClicked(ImGuiMouseButton.Left) && user.WorldData != null)
{ {
_dalamudUtilService.SetMarkerAndOpenMap(new(user.WorldData.Value.PositionX, user.WorldData.Value.PositionY, user.WorldData.Value.PositionZ), user.Map); _dalamudUtilService.SetMarkerAndOpenMap(new(user.WorldData.Value.PositionX, user.WorldData.Value.PositionY, user.WorldData.Value.PositionZ), user.Map);
@@ -175,12 +175,12 @@ internal sealed partial class CharaDataHubUi
+ "Note: For GPose synchronization to work properly, you must be on the same map."); + "Note: For GPose synchronization to work properly, you must be on the same map.");
ImGui.SameLine(); ImGui.SameLine();
_uiSharedService.IconText(FontAwesomeIcon.Globe, sameMapAndServer.SameServer ? ImGuiColors.ParsedGreen : ImGuiColors.DalamudRed); _uiSharedService.IconText(FontAwesomeIcon.Globe, sameMapAndServer.SameServer ? UIColors.Get("LightlessBlue") : ImGuiColors.DalamudRed);
UiSharedService.AttachToolTip((sameMapAndServer.SameMap ? "You are on the same server." : "You are not on the same server.") + UiSharedService.TooltipSeparator UiSharedService.AttachToolTip((sameMapAndServer.SameMap ? "You are on the same server." : "You are not on the same server.") + UiSharedService.TooltipSeparator
+ "Note: GPose synchronization is not dependent on the current server, but you will have to spawn a character for the other lobby users."); + "Note: GPose synchronization is not dependent on the current server, but you will have to spawn a character for the other lobby users.");
ImGui.SameLine(); ImGui.SameLine();
_uiSharedService.IconText(FontAwesomeIcon.Running, sameMapAndServer.SameEverything ? ImGuiColors.ParsedGreen : ImGuiColors.DalamudRed); _uiSharedService.IconText(FontAwesomeIcon.Running, sameMapAndServer.SameEverything ? UIColors.Get("LightlessBlue") : ImGuiColors.DalamudRed);
UiSharedService.AttachToolTip(sameMapAndServer.SameEverything ? "You are in the same instanced area." : "You are not the same instanced area." + UiSharedService.TooltipSeparator + UiSharedService.AttachToolTip(sameMapAndServer.SameEverything ? "You are in the same instanced area." : "You are not the same instanced area." + UiSharedService.TooltipSeparator +
"Note: Users not in your instance, but on the same map, will be drawn as floating wisps." + Environment.NewLine "Note: Users not in your instance, but on the same map, will be drawn as floating wisps." + Environment.NewLine
+ "Note: GPose synchronization is not dependent on the current instance, but you will have to spawn a character for the other lobby users."); + "Note: GPose synchronization is not dependent on the current instance, but you will have to spawn a character for the other lobby users.");

View File

@@ -241,7 +241,7 @@ internal sealed partial class CharaDataHubUi
ImGui.SameLine(pos); ImGui.SameLine(pos);
if (!dataDto.HasMissingFiles) if (!dataDto.HasMissingFiles)
{ {
UiSharedService.ColorTextWrapped("All files to download this character data are present on the server", ImGuiColors.HealerGreen); UiSharedService.ColorTextWrapped("All files to download this character data are present on the server", UIColors.Get("LightlessBlue"));
} }
else else
{ {
@@ -769,7 +769,7 @@ internal sealed partial class CharaDataHubUi
} }
else if (_charaDataManager.DataCreationTask != null && _charaDataManager.DataCreationTask.IsCompleted) else if (_charaDataManager.DataCreationTask != null && _charaDataManager.DataCreationTask.IsCompleted)
{ {
var color = _charaDataManager.DataCreationTask.Result.Success ? ImGuiColors.HealerGreen : ImGuiColors.DalamudRed; var color = _charaDataManager.DataCreationTask.Result.Success ? UIColors.Get("LightlessBlue") : ImGuiColors.DalamudRed;
UiSharedService.ColorTextWrapped(_charaDataManager.DataCreationTask.Result.Output, color); UiSharedService.ColorTextWrapped(_charaDataManager.DataCreationTask.Result.Output, color);
} }

View File

@@ -112,7 +112,7 @@ internal partial class CharaDataHubUi
var noteText = pose.Key.MetaInfo.IsOwnData ? "YOU" : (userNote == null ? pose.Key.MetaInfo.Uploader.AliasOrUID : $"{userNote} ({pose.Key.MetaInfo.Uploader.AliasOrUID})"); var noteText = pose.Key.MetaInfo.IsOwnData ? "YOU" : (userNote == null ? pose.Key.MetaInfo.Uploader.AliasOrUID : $"{userNote} ({pose.Key.MetaInfo.Uploader.AliasOrUID})");
ImGui.TextUnformatted("Pose by"); ImGui.TextUnformatted("Pose by");
ImGui.SameLine(); ImGui.SameLine();
UiSharedService.ColorText(noteText, ImGuiColors.ParsedGreen); UiSharedService.ColorText(noteText, UIColors.Get("LightlessBlue"));
using (ImRaii.Group()) using (ImRaii.Group())
{ {
UiSharedService.ColorText("Character Data Description", ImGuiColors.DalamudGrey); UiSharedService.ColorText("Character Data Description", ImGuiColors.DalamudGrey);
@@ -176,7 +176,7 @@ internal partial class CharaDataHubUi
Vector2 coneBase2 = circleCenter + baseDir2 * circleRadius; Vector2 coneBase2 = circleCenter + baseDir2 * circleRadius;
// Draw the cone as a filled triangle // Draw the cone as a filled triangle
drawList.AddTriangleFilled(circleCenter, coneBase1, coneBase2, UiSharedService.Color(ImGuiColors.ParsedGreen)); drawList.AddTriangleFilled(circleCenter, coneBase1, coneBase2, UiSharedService.Color(UIColors.Get("LightlessBlue")));
drawList.AddCircle(circleCenter, circleDiameter / 2, UiSharedService.Color(ImGuiColors.DalamudWhite), 360, 2); drawList.AddCircle(circleCenter, circleDiameter / 2, UiSharedService.Color(ImGuiColors.DalamudWhite), 360, 2);
var distance = pose.Value.Distance.ToString("0.0") + "y"; var distance = pose.Value.Distance.ToString("0.0") + "y";
var textSize = ImGui.CalcTextSize(distance); var textSize = ImGui.CalcTextSize(distance);

View File

@@ -383,7 +383,7 @@ internal sealed partial class CharaDataHubUi : WindowMediatorSubscriberBase
UiSharedService.AttachToolTip($"Target the GPose Character {CharaName(actor.Name.TextValue)}"); UiSharedService.AttachToolTip($"Target the GPose Character {CharaName(actor.Name.TextValue)}");
ImGui.AlignTextToFramePadding(); ImGui.AlignTextToFramePadding();
var pos = ImGui.GetCursorPosX(); var pos = ImGui.GetCursorPosX();
using (ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.HealerGreen, actor.Address == (_dalamudUtilService.GetGposeTargetGameObjectAsync().GetAwaiter().GetResult()?.Address ?? nint.Zero))) using (ImRaii.PushColor(ImGuiCol.Text, UIColors.Get("LightlessBlue"), actor.Address == (_dalamudUtilService.GetGposeTargetGameObjectAsync().GetAwaiter().GetResult()?.Address ?? nint.Zero)))
{ {
ImGui.TextUnformatted(CharaName(actor.Name.TextValue)); ImGui.TextUnformatted(CharaName(actor.Name.TextValue));
} }

View File

@@ -276,7 +276,7 @@ public class CompactUi : WindowMediatorSubscriberBase
{ {
ImGui.SetCursorPosX((ImGui.GetWindowContentRegionMin().X + UiSharedService.GetWindowContentRegionWidth()) / 2 - (userSize.X + textSize.X) / 2 - ImGui.GetStyle().ItemSpacing.X / 2); ImGui.SetCursorPosX((ImGui.GetWindowContentRegionMin().X + UiSharedService.GetWindowContentRegionWidth()) / 2 - (userSize.X + textSize.X) / 2 - ImGui.GetStyle().ItemSpacing.X / 2);
if (!printShard) ImGui.AlignTextToFramePadding(); if (!printShard) ImGui.AlignTextToFramePadding();
ImGui.TextColored(ImGuiColors.ParsedGreen, userCount); ImGui.TextColored(UIColors.Get("LightlessPurple"), userCount);
ImGui.SameLine(); ImGui.SameLine();
if (!printShard) ImGui.AlignTextToFramePadding(); if (!printShard) ImGui.AlignTextToFramePadding();
ImGui.TextUnformatted("Users Online"); ImGui.TextUnformatted("Users Online");
@@ -589,7 +589,7 @@ public class CompactUi : WindowMediatorSubscriberBase
{ {
ServerState.Connecting => ImGuiColors.DalamudYellow, ServerState.Connecting => ImGuiColors.DalamudYellow,
ServerState.Reconnecting => ImGuiColors.DalamudRed, ServerState.Reconnecting => ImGuiColors.DalamudRed,
ServerState.Connected => ImGuiColors.ParsedGreen, ServerState.Connected => UIColors.Get("LightlessPurple"),
ServerState.Disconnected => ImGuiColors.DalamudYellow, ServerState.Disconnected => ImGuiColors.DalamudYellow,
ServerState.Disconnecting => ImGuiColors.DalamudYellow, ServerState.Disconnecting => ImGuiColors.DalamudYellow,
ServerState.Unauthorized => ImGuiColors.DalamudRed, ServerState.Unauthorized => ImGuiColors.DalamudRed,

View File

@@ -202,7 +202,7 @@ public class DrawUserPair
} }
else if (!_pair.IsOnline) else if (!_pair.IsOnline)
{ {
using var _ = ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudRed); using var _ = ImRaii.PushColor(ImGuiCol.Text, UIColors.Get("DimRed"));
_uiSharedService.IconText(_pair.IndividualPairStatus == API.Data.Enum.IndividualPairStatus.OneSided _uiSharedService.IconText(_pair.IndividualPairStatus == API.Data.Enum.IndividualPairStatus.OneSided
? FontAwesomeIcon.ArrowsLeftRight ? FontAwesomeIcon.ArrowsLeftRight
: (_pair.IndividualPairStatus == API.Data.Enum.IndividualPairStatus.Bidirectional : (_pair.IndividualPairStatus == API.Data.Enum.IndividualPairStatus.Bidirectional
@@ -211,7 +211,7 @@ public class DrawUserPair
} }
else if (_pair.IsVisible) else if (_pair.IsVisible)
{ {
_uiSharedService.IconText(FontAwesomeIcon.Eye, ImGuiColors.ParsedGreen); _uiSharedService.IconText(FontAwesomeIcon.Eye, UIColors.Get("LightlessBlue"));
userPairText = _pair.UserData.AliasOrUID + " is visible: " + _pair.PlayerName + Environment.NewLine + "Click to target this player"; userPairText = _pair.UserData.AliasOrUID + " is visible: " + _pair.PlayerName + Environment.NewLine + "Click to target this player";
if (ImGui.IsItemClicked()) if (ImGui.IsItemClicked())
{ {
@@ -220,7 +220,7 @@ public class DrawUserPair
} }
else else
{ {
using var _ = ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.HealerGreen); using var _ = ImRaii.PushColor(ImGuiCol.Text, UIColors.Get("PairBlue"));
_uiSharedService.IconText(_pair.IndividualPairStatus == API.Data.Enum.IndividualPairStatus.Bidirectional _uiSharedService.IconText(_pair.IndividualPairStatus == API.Data.Enum.IndividualPairStatus.Bidirectional
? FontAwesomeIcon.User : FontAwesomeIcon.Users); ? FontAwesomeIcon.User : FontAwesomeIcon.Users);
userPairText = _pair.UserData.AliasOrUID + " is online"; userPairText = _pair.UserData.AliasOrUID + " is online";

View File

@@ -308,7 +308,7 @@ public partial class IntroUi : WindowMediatorSubscriberBase
} }
else else
{ {
UiSharedService.ColorTextWrapped($"OAuth2 is connected. Linked to: Discord User {_serverConfigurationManager.GetDiscordUserFromToken(selectedServer)}", ImGuiColors.HealerGreen); UiSharedService.ColorTextWrapped($"OAuth2 is connected. Linked to: Discord User {_serverConfigurationManager.GetDiscordUserFromToken(selectedServer)}", UIColors.Get("LightlessBlue"));
UiSharedService.TextWrapped("Now press the update UIDs button to get a list of all of your UIDs on the server."); UiSharedService.TextWrapped("Now press the update UIDs button to get a list of all of your UIDs on the server.");
_uiShared.DrawUpdateOAuthUIDsButton(selectedServer); _uiShared.DrawUpdateOAuthUIDsButton(selectedServer);
var playerName = _dalamudUtilService.GetPlayerName(); var playerName = _dalamudUtilService.GetPlayerName();

View File

@@ -110,7 +110,7 @@ public class PopoutProfileUi : WindowMediatorSubscriberBase
var rectMax = drawList.GetClipRectMax(); var rectMax = drawList.GetClipRectMax();
using (_uiSharedService.UidFont.Push()) using (_uiSharedService.UidFont.Push())
UiSharedService.ColorText(_pair.UserData.AliasOrUID, ImGuiColors.HealerGreen); UiSharedService.ColorText(_pair.UserData.AliasOrUID, UIColors.Get("LightlessBlue"));
ImGuiHelpers.ScaledDummy(spacing.Y, spacing.Y); ImGuiHelpers.ScaledDummy(spacing.Y, spacing.Y);
var textPos = ImGui.GetCursorPosY(); var textPos = ImGui.GetCursorPosY();
@@ -123,7 +123,7 @@ public class PopoutProfileUi : WindowMediatorSubscriberBase
UiSharedService.ColorText(note, ImGuiColors.DalamudGrey); UiSharedService.ColorText(note, ImGuiColors.DalamudGrey);
} }
string status = _pair.IsVisible ? "Visible" : (_pair.IsOnline ? "Online" : "Offline"); string status = _pair.IsVisible ? "Visible" : (_pair.IsOnline ? "Online" : "Offline");
UiSharedService.ColorText(status, (_pair.IsVisible || _pair.IsOnline) ? ImGuiColors.HealerGreen : ImGuiColors.DalamudRed); UiSharedService.ColorText(status, (_pair.IsVisible || _pair.IsOnline) ? UIColors.Get("LightlessBlue") : ImGuiColors.DalamudRed);
if (_pair.IsVisible) if (_pair.IsVisible)
{ {
ImGui.SameLine(); ImGui.SameLine();

View File

@@ -853,7 +853,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
_uiShared.DrawHelpText("If this option is selected all already existing notes for UIDs will be overwritten by the imported notes."); _uiShared.DrawHelpText("If this option is selected all already existing notes for UIDs will be overwritten by the imported notes.");
if (_notesSuccessfullyApplied.HasValue && _notesSuccessfullyApplied.Value) if (_notesSuccessfullyApplied.HasValue && _notesSuccessfullyApplied.Value)
{ {
UiSharedService.ColorTextWrapped("User Notes successfully imported", ImGuiColors.HealerGreen); UiSharedService.ColorTextWrapped("User Notes successfully imported", UIColors.Get("LightlessBlue"));
} }
else if (_notesSuccessfullyApplied.HasValue && !_notesSuccessfullyApplied.Value) else if (_notesSuccessfullyApplied.HasValue && !_notesSuccessfullyApplied.Value)
{ {
@@ -1474,10 +1474,10 @@ public class SettingsUi : WindowMediatorSubscriberBase
ImGuiHelpers.ScaledDummy(5); ImGuiHelpers.ScaledDummy(5);
UiSharedService.ColorText("A potential rename/world change from this character was detected:", ImGuiColors.DalamudYellow); UiSharedService.ColorText("A potential rename/world change from this character was detected:", ImGuiColors.DalamudYellow);
using (ImRaii.PushIndent(10f)) using (ImRaii.PushIndent(10f))
UiSharedService.ColorText("Entry: " + authWithCid.CharacterName + " - " + _dalamudUtilService.WorldData.Value[(ushort)authWithCid.WorldId], ImGuiColors.ParsedGreen); UiSharedService.ColorText("Entry: " + authWithCid.CharacterName + " - " + _dalamudUtilService.WorldData.Value[(ushort)authWithCid.WorldId], UIColors.Get("LightlessBlue"));
UiSharedService.ColorText("Press the button below to adjust that entry to your current character:", ImGuiColors.DalamudYellow); UiSharedService.ColorText("Press the button below to adjust that entry to your current character:", ImGuiColors.DalamudYellow);
using (ImRaii.PushIndent(10f)) using (ImRaii.PushIndent(10f))
UiSharedService.ColorText("Current: " + youName + " - " + _dalamudUtilService.WorldData.Value[(ushort)youWorld], ImGuiColors.ParsedGreen); UiSharedService.ColorText("Current: " + youName + " - " + _dalamudUtilService.WorldData.Value[(ushort)youWorld], UIColors.Get("LightlessBlue"));
ImGuiHelpers.ScaledDummy(5); ImGuiHelpers.ScaledDummy(5);
if (_uiShared.IconTextButton(FontAwesomeIcon.ArrowRight, "Update Entry to Current Character")) if (_uiShared.IconTextButton(FontAwesomeIcon.ArrowRight, "Update Entry to Current Character"))
{ {
@@ -1528,7 +1528,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
{ {
misManaged = true; misManaged = true;
} }
Vector4 color = ImGuiColors.ParsedGreen; Vector4 color = UIColors.Get("LightlessBlue");
string text = thisIsYou ? "Your Current Character" : string.Empty; string text = thisIsYou ? "Your Current Character" : string.Empty;
if (misManaged) if (misManaged)
{ {
@@ -1926,11 +1926,11 @@ public class SettingsUi : WindowMediatorSubscriberBase
{ {
ImGui.TextUnformatted("Service " + _serverConfigurationManager.CurrentServer!.ServerName + ":"); ImGui.TextUnformatted("Service " + _serverConfigurationManager.CurrentServer!.ServerName + ":");
ImGui.SameLine(); ImGui.SameLine();
ImGui.TextColored(ImGuiColors.ParsedGreen, "Available"); ImGui.TextColored(UIColors.Get("LightlessBlue"), "Available");
ImGui.SameLine(); ImGui.SameLine();
ImGui.TextUnformatted("("); ImGui.TextUnformatted("(");
ImGui.SameLine(); ImGui.SameLine();
ImGui.TextColored(ImGuiColors.ParsedGreen, _apiController.OnlineUsers.ToString(CultureInfo.InvariantCulture)); ImGui.TextColored(UIColors.Get("LightlessBlue"), _apiController.OnlineUsers.ToString(CultureInfo.InvariantCulture));
ImGui.SameLine(); ImGui.SameLine();
ImGui.TextUnformatted("Users Online"); ImGui.TextUnformatted("Users Online");
ImGui.SameLine(); ImGui.SameLine();

View File

@@ -77,7 +77,7 @@ public class StandaloneProfileUi : WindowMediatorSubscriberBase
var headerSize = ImGui.GetCursorPosY() - ImGui.GetStyle().WindowPadding.Y; var headerSize = ImGui.GetCursorPosY() - ImGui.GetStyle().WindowPadding.Y;
using (_uiSharedService.UidFont.Push()) using (_uiSharedService.UidFont.Push())
UiSharedService.ColorText(Pair.UserData.AliasOrUID, ImGuiColors.HealerGreen); UiSharedService.ColorText(Pair.UserData.AliasOrUID, UIColors.Get("LightlessBlue"));
ImGuiHelpers.ScaledDummy(new Vector2(spacing.Y, spacing.Y)); ImGuiHelpers.ScaledDummy(new Vector2(spacing.Y, spacing.Y));
var textPos = ImGui.GetCursorPosY() - headerSize; var textPos = ImGui.GetCursorPosY() - headerSize;
@@ -118,7 +118,7 @@ public class StandaloneProfileUi : WindowMediatorSubscriberBase
UiSharedService.ColorText(note, ImGuiColors.DalamudGrey); UiSharedService.ColorText(note, ImGuiColors.DalamudGrey);
} }
string status = Pair.IsVisible ? "Visible" : (Pair.IsOnline ? "Online" : "Offline"); string status = Pair.IsVisible ? "Visible" : (Pair.IsOnline ? "Online" : "Offline");
UiSharedService.ColorText(status, (Pair.IsVisible || Pair.IsOnline) ? ImGuiColors.HealerGreen : ImGuiColors.DalamudRed); UiSharedService.ColorText(status, (Pair.IsVisible || Pair.IsOnline) ? UIColors.Get("LightlessBlue") : ImGuiColors.DalamudRed);
if (Pair.IsVisible) if (Pair.IsVisible)
{ {
ImGui.SameLine(); ImGui.SameLine();

View File

@@ -0,0 +1,34 @@
using System.Globalization;
using System.Numerics;
namespace LightlessSync.UI
{
internal static class UIColors
{
private static readonly Dictionary<string, string> HexColors = new(StringComparer.OrdinalIgnoreCase)
{
{ "LightlessPurple", "#ad8af5" },
{ "LightlessBlue", "#64c7e8" },
{ "PairBlue", "#4e98b1" },
{ "DimRed", "#bd0000" },
};
public static Vector4 Get(string name)
{
if (!HexColors.TryGetValue(name, out var hex))
throw new ArgumentException($"Color '{name}' not found in UIColors.");
return HexToRgba(hex);
}
public static Vector4 HexToRgba(string hexColor)
{
hexColor = hexColor.TrimStart('#');
int r = int.Parse(hexColor.Substring(0, 2), NumberStyles.HexNumber);
int g = int.Parse(hexColor.Substring(2, 2), NumberStyles.HexNumber);
int b = int.Parse(hexColor.Substring(4, 2), NumberStyles.HexNumber);
int a = hexColor.Length == 8 ? int.Parse(hexColor.Substring(6, 2), NumberStyles.HexNumber) : 255;
return new Vector4(r / 255f, g / 255f, b / 255f, a / 255f);
}
}
}

View File

@@ -305,7 +305,7 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
} }
} }
public static Vector4 GetBoolColor(bool input) => input ? ImGuiColors.ParsedGreen : ImGuiColors.DalamudRed; public static Vector4 GetBoolColor(bool input) => input ? UIColors.Get("LightlessBlue") : UIColors.Get("DimRed");
public static string GetNotes(List<Pair> pairs) public static string GetNotes(List<Pair> pairs)
{ {
@@ -394,7 +394,7 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
} }
public static Vector4 UploadColor((long, long) data) => data.Item1 == 0 ? ImGuiColors.DalamudGrey : public static Vector4 UploadColor((long, long) data) => data.Item1 == 0 ? ImGuiColors.DalamudGrey :
data.Item1 == data.Item2 ? ImGuiColors.ParsedGreen : ImGuiColors.DalamudYellow; data.Item1 == data.Item2 ? UIColors.Get("LightlessBlue") : ImGuiColors.DalamudYellow;
public bool ApplyNotesFromClipboard(string notes, bool overwrite) public bool ApplyNotesFromClipboard(string notes, bool overwrite)
{ {
@@ -436,7 +436,7 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
public void BooleanToColoredIcon(bool value, bool inline = true) public void BooleanToColoredIcon(bool value, bool inline = true)
{ {
using var colorgreen = ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.HealerGreen, value); using var colorgreen = ImRaii.PushColor(ImGuiCol.Text, UIColors.Get("LightlessBlue"), value);
using var colorred = ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudRed, !value); using var colorred = ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudRed, !value);
if (inline) ImGui.SameLine(); if (inline) ImGui.SameLine();
@@ -645,7 +645,7 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
{ {
if (_discordOAuthCheck.Result != null) if (_discordOAuthCheck.Result != null)
{ {
ColorTextWrapped("Server is compatible with Discord OAuth2", ImGuiColors.HealerGreen); ColorTextWrapped("Server is compatible with Discord OAuth2", UIColors.Get("LightlessBlue"));
} }
else else
{ {
@@ -678,7 +678,7 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
selectedServer.OAuthToken = _discordOAuthGetCode.Result; selectedServer.OAuthToken = _discordOAuthGetCode.Result;
_discordOAuthGetCode = null; _discordOAuthGetCode = null;
_serverConfigurationManager.Save(); _serverConfigurationManager.Save();
ColorTextWrapped("Success", ImGuiColors.HealerGreen); ColorTextWrapped("Success", UIColors.Get("LightlessBlue"));
} }
else else
{ {
@@ -708,7 +708,7 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
if (tokenExpiry > DateTime.UtcNow) if (tokenExpiry > DateTime.UtcNow)
{ {
ColorTextWrapped($"OAuth2 is enabled, linked to: Discord User {_serverConfigurationManager.GetDiscordUserFromToken(selectedServer)}", ImGuiColors.HealerGreen); ColorTextWrapped($"OAuth2 is enabled, linked to: Discord User {_serverConfigurationManager.GetDiscordUserFromToken(selectedServer)}", UIColors.Get("LightlessBlue"));
TextWrapped($"The OAuth2 token will expire on {tokenExpiry:yyyy-MM-dd} and automatically renew itself during login on or after {(tokenExpiry - TimeSpan.FromDays(7)):yyyy-MM-dd}."); TextWrapped($"The OAuth2 token will expire on {tokenExpiry:yyyy-MM-dd} and automatically renew itself during login on or after {(tokenExpiry - TimeSpan.FromDays(7)):yyyy-MM-dd}.");
using (ImRaii.Disabled(!CtrlPressed())) using (ImRaii.Disabled(!CtrlPressed()))
{ {
@@ -740,7 +740,7 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
if (foundUids > 0) if (foundUids > 0)
{ {
ColorTextWrapped($"Found {foundUids} associated UIDs on the server, Primary UID: {primaryUid.Key} (Vanity UID: {vanity})", ColorTextWrapped($"Found {foundUids} associated UIDs on the server, Primary UID: {primaryUid.Key} (Vanity UID: {vanity})",
ImGuiColors.HealerGreen); UIColors.Get("LightlessBlue"));
} }
else else
{ {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 770 KiB

After

Width:  |  Height:  |  Size: 206 KiB

View File

@@ -16,18 +16,18 @@
}, },
"Downloader": { "Downloader": {
"type": "Direct", "type": "Direct",
"requested": "[3.3.4, )", "requested": "[4.0.3, )",
"resolved": "3.3.4", "resolved": "4.0.3",
"contentHash": "/M/c80e1L0WW1XrLSSiQhgFxk8rrfbpWiWDn2CeBg1tPD393Neo+v184yG/ThyhE9rrNp36yCrugiCmEbRf+VQ==", "contentHash": "Vg1+UqPDstpMw2CKXV9XvB8jKHC95KQfbqPxQXvOMRMFnTov4Ixvvw6GZV5DXLnKuL2sfnmVYX9CaQtcURia1Q==",
"dependencies": { "dependencies": {
"Microsoft.Extensions.Logging.Abstractions": "8.0.1" "Microsoft.Extensions.Logging.Abstractions": "8.0.3"
} }
}, },
"Glamourer.Api": { "Glamourer.Api": {
"type": "Direct", "type": "Direct",
"requested": "[2.4.0, )", "requested": "[2.6.0, )",
"resolved": "2.4.0", "resolved": "2.6.0",
"contentHash": "i8PEKb4R2tyunfHEHZHY+yCx2p6D0hsoQ24Q8UDVb7rNvynzDqMrRhGTQjuF+Tg2XGWA7sb32wJqHXCv0oKoeA==" "contentHash": "zysCZgNBRm3k3qvibyw/31MmEckX0Uh0ZsT+Sax3ZHnYIRELr9Qhbz3cjJz7u0RHGIrNJiRpktu/LxgHEqDItw=="
}, },
"K4os.Compression.LZ4.Legacy": { "K4os.Compression.LZ4.Legacy": {
"type": "Direct", "type": "Direct",
@@ -40,9 +40,9 @@
}, },
"Meziantou.Analyzer": { "Meziantou.Analyzer": {
"type": "Direct", "type": "Direct",
"requested": "[2.0.189, )", "requested": "[2.0.212, )",
"resolved": "2.0.189", "resolved": "2.0.212",
"contentHash": "/e+dh95vDdvCTbViV2cWpXJEXAj+VHq7FsBXCTTTsLcffV0bkgXDFAPY0zMpy+Vt91Cl2cBoSOfaAoSdtn796Q==" "contentHash": "U91ktjjTRTccUs3Lk+hrLD9vW+2+lhnsOf4G1GpRSJi1pLn3uK5CU6wGP9Bmz1KlJs6Oz1GGoMhxQBoqQsmAuQ=="
}, },
"Microsoft.AspNetCore.SignalR.Client": { "Microsoft.AspNetCore.SignalR.Client": {
"type": "Direct", "type": "Direct",
@@ -105,12 +105,6 @@
"Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0"
} }
}, },
"Penumbra.Api": {
"type": "Direct",
"requested": "[5.6.0, )",
"resolved": "5.6.0",
"contentHash": "zMmkxX1+7COn23aTeq0L+UMA79ocmvQdvj5RgksEfTKrKZLbtaqRPCe6NsChyfGvcj79sgfAW/9hJ+FAzzVcNg=="
},
"Penumbra.String": { "Penumbra.String": {
"type": "Direct", "type": "Direct",
"requested": "[1.0.5, )", "requested": "[1.0.5, )",
@@ -119,9 +113,9 @@
}, },
"SixLabors.ImageSharp": { "SixLabors.ImageSharp": {
"type": "Direct", "type": "Direct",
"requested": "[3.1.7, )", "requested": "[3.1.11, )",
"resolved": "3.1.7", "resolved": "3.1.11",
"contentHash": "9fIOOAsyLFid6qKypM2Iy0Z3Q9yoanV8VoYAHtI2sYGMNKzhvRTjgFDHonIiVe+ANtxIxM6SuqUzj0r91nItpA==" "contentHash": "JfPLyigLthuE50yi6tMt7Amrenr/fA31t2CvJyhy/kQmfulIBAqo5T/YFUSRHtuYPXRSaUHygFeh6Qd933EoSw=="
}, },
"SonarAnalyzer.CSharp": { "SonarAnalyzer.CSharp": {
"type": "Direct", "type": "Direct",
@@ -523,6 +517,9 @@
"dependencies": { "dependencies": {
"MessagePack.Annotations": "[3.1.3, )" "MessagePack.Annotations": "[3.1.3, )"
} }
},
"penumbra.api": {
"type": "Project"
} }
} }
} }

1
PenumbraAPI Submodule

Submodule PenumbraAPI added at 953dd227af

View File

@@ -1,6 +1,6 @@
# Lightless Sync Dalamud Plugin # Lightless Sync Dalamud Plugin
Available at [This dalamud Repo](https://raw.githubusercontent.com/Light-Public-Syncshells/repo/main/plogonmaster.json) Available at [This dalamud Repo](https://raw.githubusercontent.com/Light-Public-Syncshells/LightlessSync/refs/heads/main/plogonmaster.json)
# [Lightless Sync Discord](https://discord.gg/dsbjcXMnhA) # [Lightless Sync Discord](https://discord.gg/dsbjcXMnhA)