Skip to content
Merged

2.4.2 #243

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
c6acba9
No more warnings
patchzyy Feb 25, 2026
a518a51
Update ToolTipBubbleBehavior.cs
patchzyy Feb 26, 2026
cc4c2e9
Add native Mii rendering and tests
patchzyy Feb 28, 2026
1e1e581
Add camera zoom and native buffer rendering
patchzyy Feb 28, 2026
1987ea0
Add RenderScale and head-draw caching
patchzyy Feb 28, 2026
5b46e22
Improve Mii image rendering and loader behavior
patchzyy Feb 28, 2026
5586682
Replace MiiCarousel with Mii3DRender and refactor
patchzyy Mar 2, 2026
22dbea5
Optimize Mii rendering, caching, and list UI
patchzyy Mar 4, 2026
6059ad6
Delete MiiRenderingPerformanceTests.cs
patchzyy Mar 4, 2026
3a37f55
Remove MiiRendering feature tests
patchzyy Mar 4, 2026
6c5d476
Add Mii rendering resource installer & setup
patchzyy Mar 7, 2026
1ef994d
Use popup for Mii setup and add resilient download
patchzyy Mar 7, 2026
9c4fd2b
Update NativeMiiRenderer.cs
patchzyy Mar 7, 2026
dcaae59
Add lighting profile and refactor renderer
patchzyy Mar 8, 2026
da6ee99
Merge pull request #238 from TeamWheelWizard/Fix_warnings
patchzyy Mar 8, 2026
f321f35
Simplify Mii rendering resource lookup
patchzyy Mar 8, 2026
01f4b54
Merge branch 'dev' into Offline-mii-rendering
patchzyy Mar 8, 2026
ec798f0
Narrow exception handling in decompression
patchzyy Mar 8, 2026
a6573e8
Add fallback decompression with aggregated errors
patchzyy Mar 18, 2026
9ddb7a4
Update MiiRenderingResourceInstaller.cs
patchzyy Mar 18, 2026
2eb5735
Update Mii3DRender.axaml.cs
patchzyy Mar 25, 2026
263dc35
Update NativeMiiRenderer.cs
patchzyy Mar 25, 2026
b770102
Update Mii3DRender.axaml.cs
patchzyy Mar 25, 2026
5a0fe11
Add camera vertical offset to 3D Mii renderer
patchzyy Mar 25, 2026
aaac5e7
Merge pull request #240 from TeamWheelWizard/Offline-mii-rendering
patchzyy Mar 25, 2026
8626cf5
Bump version to 2.4.2 + typo
patchzyy Mar 25, 2026
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
9 changes: 9 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,15 @@ indent_size = 2
[*.cs]
max_line_length = 140

# Transitional analyzer levels while legacy filesystem/settings migration is in progress.
dotnet_diagnostic.CS0618.severity = suggestion
dotnet_diagnostic.IO0002.severity = suggestion
dotnet_diagnostic.IO0003.severity = suggestion
dotnet_diagnostic.IO0004.severity = suggestion
dotnet_diagnostic.IO0005.severity = suggestion
dotnet_diagnostic.IO0006.severity = suggestion
dotnet_diagnostic.IO0007.severity = suggestion

#### Core EditorConfig Options ####

# Indentation and spacing
Expand Down
1 change: 1 addition & 0 deletions Flatpak/io.github.TeamWheelWizard.WheelWizard.metainfo.xml
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
</provides>

<releases>
<release version="2.4.2" date="2026-03-25"/>
<release version="2.4.1" date="2026-02-25"/>
<release version="2.4.0" date="2026-02-17"/>
<release version="2.3.5" date="2026-01-11"/>
Expand Down
7 changes: 2 additions & 5 deletions WheelWizard.Test/Features/MiiDbServiceTests.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using NSubstitute.ExceptionExtensions;
using Testably.Abstractions;
using WheelWizard.Shared;
using WheelWizard.WiiManagement.MiiManagement;
using WheelWizard.WiiManagement.MiiManagement.Domain.Mii;
Expand All @@ -9,16 +8,14 @@ namespace WheelWizard.Test.Features
public class MiiDbServiceTests
{
private readonly IMiiRepositoryService _repositoryService;
private readonly IRandomSystem _randomSystemService;
private readonly MiiDbService _service;

// --- Test Setup ---

public MiiDbServiceTests()
{
_repositoryService = Substitute.For<IMiiRepositoryService>();
_randomSystemService = Substitute.For<IRandomSystem>();
_service = new(_repositoryService, _randomSystemService);
_service = new(_repositoryService);
}

// --- Helper Methods ---
Expand Down Expand Up @@ -188,7 +185,7 @@ public void GetAllMiis_ShouldSkipInvalidBlocks_AndReturnOnlyValidMiis()
Assert.True(mii1Result.IsSuccess, "Setup Failed: Could not create valid Mii");
var mii1Bytes = GetSerializedBytes(mii1Result.Value);
var invalidBytesShort = new byte[10]; // Invalid length
var invalidBytesNull = (byte[])null; // Null entry (if possible from repo)
byte[]? invalidBytesNull = null; // Null entry (if possible from repo)
// Simulate a block that's the right size but contains garbage data causing deserialization failure
var potentiallyBadBytes = new byte[MiiSerializer.MiiBlockSize];
_repositoryService.LoadAllBlocks().Returns([invalidBytesShort, mii1Bytes, potentiallyBadBytes, invalidBytesNull!]);
Expand Down
1 change: 1 addition & 0 deletions WheelWizard.Test/WheelWizard.Test.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="10.0.0-preview.3.25171.5" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0"/>
<PackageReference Include="NSubstitute" Version="5.3.0"/>
<PackageReference Include="SixLabors.ImageSharp" Version="3.1.11" />
<PackageReference Include="Testably.Abstractions.Testing" Version="4.0.1" />
<PackageReference Include="xunit" Version="2.9.3"/>
<PackageReference Include="xunit.runner.visualstudio" Version="3.0.2">
Expand Down
22 changes: 0 additions & 22 deletions WheelWizard/Features/MiiImages/Domain/IMiiIMagesApi.cs

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ public class MiiImageSpecifications
// All between 0 and 360, obviously
public Vector3 CharacterRotate { get; set; } = Vector3.Zero;
public Vector3 CameraRotate { get; set; } = Vector3.Zero;
public float CameraVerticalOffset { get; set; }
public float CameraZoom { get; set; } = 1f;
public float RenderScale { get; set; } = 1f;

public TimeSpan? ExpirationSeconds { get; set; } = TimeSpan.FromMinutes(30);
public CacheItemPriority CachePriority { get; set; } = CacheItemPriority.Normal;
Expand All @@ -25,7 +28,7 @@ public override string ToString()
// If we put all the things in this string, then the Key at least is unique
var parts = $"{Name}_{Size}{Expression}{Type}";
parts += $"{BackgroundColor}{InstanceCount}";
parts += $"{CharacterRotate}{CameraRotate}";
parts += $"{CharacterRotate}{CameraRotate}{CameraVerticalOffset}{CameraZoom}{RenderScale}";
parts += $"{CachePriority}";
return Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(parts));
}
Expand Down Expand Up @@ -58,6 +61,7 @@ public enum FaceExpression

public enum ImageSize
{
tiny = 128,
small = 270,
medium = 512,
}
Expand Down
18 changes: 14 additions & 4 deletions WheelWizard/Features/MiiImages/Domain/MiiImageVariants.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,16 @@ public static class MiiImageVariants
Size = MiiImageSpecifications.ImageSize.medium,
};

public static readonly MiiImageSpecifications MiiListTile = new()
{
Name = "MiiListTile",
Expression = MiiImageSpecifications.FaceExpression.normal,
Type = MiiImageSpecifications.BodyType.face,
Size = MiiImageSpecifications.ImageSize.tiny,
CachePriority = CacheItemPriority.Low,
ExpirationSeconds = TimeSpan.FromMinutes(8),
};

public static readonly MiiImageSpecifications OnlinePlayerSmall = new()
{
Name = "OnlinePlayerSmall",
Expand All @@ -36,7 +46,7 @@ public static class MiiImageVariants
Expression = MiiImageSpecifications.FaceExpression.normal,
Type = MiiImageSpecifications.BodyType.face,
Size = MiiImageSpecifications.ImageSize.medium,
ExpirationSeconds = TimeSpan.FromSeconds(30),
ExpirationSeconds = TimeSpan.Zero,
CachePriority = CacheItemPriority.Low,
};
public static readonly MiiImageSpecifications MiiEditorPreviewCarousel = new()
Expand All @@ -46,8 +56,8 @@ public static class MiiImageVariants
Type = MiiImageSpecifications.BodyType.all_body,
Size = MiiImageSpecifications.ImageSize.medium,
CachePriority = CacheItemPriority.Low,
ExpirationSeconds = TimeSpan.FromSeconds(30),
InstanceCount = 8,
ExpirationSeconds = TimeSpan.Zero,
InstanceCount = 1,
};

public static readonly MiiImageSpecifications CurrentUserSideProfile = new()
Expand Down Expand Up @@ -88,6 +98,6 @@ public static class MiiImageVariants
Type = MiiImageSpecifications.BodyType.all_body,
Size = MiiImageSpecifications.ImageSize.medium,
ExpirationSeconds = TimeSpan.FromMinutes(10),
InstanceCount = 8,
InstanceCount = 1,
};
}
8 changes: 5 additions & 3 deletions WheelWizard/Features/MiiImages/MiiImagesExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
using WheelWizard.MiiImages.Domain;
using WheelWizard.Services;
using WheelWizard.MiiRendering;

namespace WheelWizard.MiiImages;

public static class MiiImagesExtensions
{
public static IServiceCollection AddMiiImages(this IServiceCollection services)
{
services.AddWhWzRefitApi<IMiiIMagesApi>(Endpoints.MiiImageAddress);

services.AddMiiRendering();
services.AddSingleton<IMiiImagesSingletonService, MiiImagesSingletonService>();

return services;
Expand All @@ -26,6 +25,9 @@ public static MiiImageSpecifications Clone(this MiiImageSpecifications specifica
InstanceCount = specifications.InstanceCount,
CharacterRotate = new(specifications.CharacterRotate.X, specifications.CharacterRotate.Y, specifications.CharacterRotate.Z),
CameraRotate = new(specifications.CameraRotate.X, specifications.CameraRotate.Y, specifications.CameraRotate.Z),
CameraVerticalOffset = specifications.CameraVerticalOffset,
CameraZoom = specifications.CameraZoom,
RenderScale = specifications.RenderScale,
ExpirationSeconds =
specifications.ExpirationSeconds?.TotalSeconds == null
? null
Expand Down
Loading
Loading