Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
25 changes: 25 additions & 0 deletions LibreMetaverse.Tests/AppearanceManagerTests.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,35 @@
using System.Linq;
using NUnit.Framework;

namespace LibreMetaverse.Tests
{
[TestFixture]
public class AppearanceManagerTests
{
[Test]
public void MakeAppearancePacket_UsesCompleteVisualParamWireSequence()
{
var client = new GridClient();
var packet = client.Appearance.MakeAppearancePacket();
var wireParamIds = VisualParams.Group0ParamIds;
var expectedValues = wireParamIds
.Select(id => VisualParams.Params[id])
.Select(param => Utils.FloatToByte(param.DefaultValue, param.MinValue, param.MaxValue))
.ToArray();

Assert.Multiple(() =>
{
Assert.That(wireParamIds, Has.Length.EqualTo(253));
Assert.That(wireParamIds, Is.Ordered);
Assert.That(wireParamIds.Distinct().Count(), Is.EqualTo(wireParamIds.Length));
Assert.That(wireParamIds.All(id =>
VisualParams.Params.TryGetValue(id, out var param) &&
(param.Group == 0 || param.Group == 3)), Is.True);
Assert.That(packet.VisualParam.Select(block => block.ParamValue),
Is.EqualTo(expectedValues));
});
}

[Test]
public void WearableTypeToAssetType_BodypartsAndClothing_ReturnsExpected()
{
Expand Down
6 changes: 3 additions & 3 deletions LibreMetaverse.Tests/AppearanceTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,8 @@ public void DecodeVisualParams_CountMatchesGroup0ParamCount()
[Test]
public void DecodeVisualParams_RoundTrip_DefaultValues()
{
// Build the byte array in Group0ParamIds document order — this is the order
// DecodeVisualParams consumes, which differs from the SortedList key order.
// Build the byte array in Group0ParamIds wire order — this is the order
// DecodeVisualParams consumes.
var bytes = VisualParams.Group0ParamIds
.Select(id => VisualParams.Params.TryGetValue(id, out var vp)
? Utils.FloatToByte(vp.DefaultValue, vp.MinValue, vp.MaxValue)
Expand Down Expand Up @@ -176,7 +176,7 @@ public void AvatarAppearanceEventArgs_DecodeVisualParams_EmptyList_ReturnsEmptyD
[Test]
public void AvatarAppearanceEventArgs_DecodeVisualParams_RoundTrip_DefaultValues()
{
// Build bytes in Group0ParamIds document order — this is the order DecodeVisualParams consumes.
// Build bytes in Group0ParamIds wire order — this is the order DecodeVisualParams consumes.
var bytes = VisualParams.Group0ParamIds
.Select(id => VisualParams.Params.TryGetValue(id, out var vp)
? Utils.FloatToByte(vp.DefaultValue, vp.MinValue, vp.MaxValue)
Expand Down
13 changes: 4 additions & 9 deletions LibreMetaverse/Appearance/AppearanceManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2484,16 +2484,12 @@ public AgentSetAppearancePacket MakeAppearancePacket()
{
#region VisualParam

var vpIndex = 0;
var wearingPhysics = Wearables.ContainsKey(WearableType.Physics);
var wireParamIds = VisualParams.Group0ParamIds;
set.VisualParam = new AgentSetAppearancePacket.VisualParamBlock[wireParamIds.Length];

var nrParams = wearingPhysics ? 251 : 218;
set.VisualParam = new AgentSetAppearancePacket.VisualParamBlock[nrParams];

foreach (var kvp in VisualParams.Params)
for (var vpIndex = 0; vpIndex < wireParamIds.Length; ++vpIndex)
{
if (vpIndex >= nrParams) break;
var vp = kvp.Value;
var vp = VisualParams.Params[wireParamIds[vpIndex]];

var paramValue = 0f;
var found = Wearables.Any(wearableList => wearableList.Value.Any(wearable => wearable.Asset != null && wearable.Asset.Params.TryGetValue(vp.ParamID, out paramValue)));
Expand All @@ -2505,7 +2501,6 @@ public AgentSetAppearancePacket MakeAppearancePacket()
{
ParamValue = Utils.FloatToByte(paramValue, vp.MinValue, vp.MaxValue)
};
++vpIndex;

// Check if this is one of the visual params used in the agent height calculation
switch (vp.ParamID)
Expand Down
3 changes: 1 addition & 2 deletions LibreMetaverse/Avatar.cs
Original file line number Diff line number Diff line change
Expand Up @@ -498,7 +498,7 @@ public string GroupName
/// </summary>
/// <remarks>
/// The AvatarAppearance packet transmits both TWEAKABLE (group-0) and
/// TRANSMIT_NOT_TWEAKABLE (group-3) params interleaved in avatar_lad.xml document order.
/// TRANSMIT_NOT_TWEAKABLE (group-3) params interleaved in ascending numeric ID order.
/// <see cref="VisualParams.Group0ParamIds"/> includes both groups in that order so each
/// byte maps to the correct parameter.
/// </remarks>
Expand Down Expand Up @@ -662,4 +662,3 @@ public override OSD GetOSD()

}
}

6 changes: 3 additions & 3 deletions SourceGenerators/VisualParamGenerator/VisualParamGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@

// Keep these diagnostics for XML errors / generation failure
private static readonly DiagnosticDescriptor MissingXml = new(
"VPG002",

Check warning on line 43 in SourceGenerators/VisualParamGenerator/VisualParamGenerator.cs

View workflow job for this annotation

GitHub Actions / Test matrix (macos-latest, 10.0.x)

Enable analyzer release tracking for the analyzer project containing rule 'VPG002' (https://github.com/dotnet/roslyn-analyzers/blob/main/src/Microsoft.CodeAnalysis.Analyzers/ReleaseTrackingAnalyzers.Help.md)

Check warning on line 43 in SourceGenerators/VisualParamGenerator/VisualParamGenerator.cs

View workflow job for this annotation

GitHub Actions / Test matrix (ubuntu-22.04, 9.0.x)

Enable analyzer release tracking for the analyzer project containing rule 'VPG002' (https://github.com/dotnet/roslyn-analyzers/blob/main/src/Microsoft.CodeAnalysis.Analyzers/ReleaseTrackingAnalyzers.Help.md)

Check warning on line 43 in SourceGenerators/VisualParamGenerator/VisualParamGenerator.cs

View workflow job for this annotation

GitHub Actions / Test matrix (macos-latest, 9.0.x)

Enable analyzer release tracking for the analyzer project containing rule 'VPG002' (https://github.com/dotnet/roslyn-analyzers/blob/main/src/Microsoft.CodeAnalysis.Analyzers/ReleaseTrackingAnalyzers.Help.md)

Check warning on line 43 in SourceGenerators/VisualParamGenerator/VisualParamGenerator.cs

View workflow job for this annotation

GitHub Actions / Test matrix (ubuntu-22.04, 8.0.x)

Enable analyzer release tracking for the analyzer project containing rule 'VPG002' (https://github.com/dotnet/roslyn-analyzers/blob/main/src/Microsoft.CodeAnalysis.Analyzers/ReleaseTrackingAnalyzers.Help.md)

Check warning on line 43 in SourceGenerators/VisualParamGenerator/VisualParamGenerator.cs

View workflow job for this annotation

GitHub Actions / Test matrix (ubuntu-22.04, 10.0.x)

Enable analyzer release tracking for the analyzer project containing rule 'VPG002' (https://github.com/dotnet/roslyn-analyzers/blob/main/src/Microsoft.CodeAnalysis.Analyzers/ReleaseTrackingAnalyzers.Help.md)

Check warning on line 43 in SourceGenerators/VisualParamGenerator/VisualParamGenerator.cs

View workflow job for this annotation

GitHub Actions / Test matrix (macos-latest, 8.0.x)

Enable analyzer release tracking for the analyzer project containing rule 'VPG002' (https://github.com/dotnet/roslyn-analyzers/blob/main/src/Microsoft.CodeAnalysis.Analyzers/ReleaseTrackingAnalyzers.Help.md)

Check warning on line 43 in SourceGenerators/VisualParamGenerator/VisualParamGenerator.cs

View workflow job for this annotation

GitHub Actions / Test matrix (windows-2022, 8.0.x)

Enable analyzer release tracking for the analyzer project containing rule 'VPG002' (https://github.com/dotnet/roslyn-analyzers/blob/main/src/Microsoft.CodeAnalysis.Analyzers/ReleaseTrackingAnalyzers.Help.md)

Check warning on line 43 in SourceGenerators/VisualParamGenerator/VisualParamGenerator.cs

View workflow job for this annotation

GitHub Actions / Test (.NET Framework 4.8.1)

Enable analyzer release tracking for the analyzer project containing rule 'VPG002' (https://github.com/dotnet/roslyn-analyzers/blob/main/src/Microsoft.CodeAnalysis.Analyzers/ReleaseTrackingAnalyzers.Help.md)

Check warning on line 43 in SourceGenerators/VisualParamGenerator/VisualParamGenerator.cs

View workflow job for this annotation

GitHub Actions / Test matrix (windows-2022, 10.0.x)

Enable analyzer release tracking for the analyzer project containing rule 'VPG002' (https://github.com/dotnet/roslyn-analyzers/blob/main/src/Microsoft.CodeAnalysis.Analyzers/ReleaseTrackingAnalyzers.Help.md)

Check warning on line 43 in SourceGenerators/VisualParamGenerator/VisualParamGenerator.cs

View workflow job for this annotation

GitHub Actions / Test matrix (windows-2022, 9.0.x)

Enable analyzer release tracking for the analyzer project containing rule 'VPG002' (https://github.com/dotnet/roslyn-analyzers/blob/main/src/Microsoft.CodeAnalysis.Analyzers/ReleaseTrackingAnalyzers.Help.md)
"Missing avatar_lad.xml",
"AdditionalFile 'avatar_lad.xml' not found. Generator will not produce VisualParams.cs.",
"VisualParamGenerator",
Expand All @@ -48,7 +48,7 @@
isEnabledByDefault: true);

private static readonly DiagnosticDescriptor GenerationFailed = new(
"VPG999",

Check warning on line 51 in SourceGenerators/VisualParamGenerator/VisualParamGenerator.cs

View workflow job for this annotation

GitHub Actions / Test matrix (macos-latest, 10.0.x)

Enable analyzer release tracking for the analyzer project containing rule 'VPG999' (https://github.com/dotnet/roslyn-analyzers/blob/main/src/Microsoft.CodeAnalysis.Analyzers/ReleaseTrackingAnalyzers.Help.md)

Check warning on line 51 in SourceGenerators/VisualParamGenerator/VisualParamGenerator.cs

View workflow job for this annotation

GitHub Actions / Test matrix (ubuntu-22.04, 9.0.x)

Enable analyzer release tracking for the analyzer project containing rule 'VPG999' (https://github.com/dotnet/roslyn-analyzers/blob/main/src/Microsoft.CodeAnalysis.Analyzers/ReleaseTrackingAnalyzers.Help.md)

Check warning on line 51 in SourceGenerators/VisualParamGenerator/VisualParamGenerator.cs

View workflow job for this annotation

GitHub Actions / Test matrix (macos-latest, 9.0.x)

Enable analyzer release tracking for the analyzer project containing rule 'VPG999' (https://github.com/dotnet/roslyn-analyzers/blob/main/src/Microsoft.CodeAnalysis.Analyzers/ReleaseTrackingAnalyzers.Help.md)

Check warning on line 51 in SourceGenerators/VisualParamGenerator/VisualParamGenerator.cs

View workflow job for this annotation

GitHub Actions / Test matrix (ubuntu-22.04, 8.0.x)

Enable analyzer release tracking for the analyzer project containing rule 'VPG999' (https://github.com/dotnet/roslyn-analyzers/blob/main/src/Microsoft.CodeAnalysis.Analyzers/ReleaseTrackingAnalyzers.Help.md)

Check warning on line 51 in SourceGenerators/VisualParamGenerator/VisualParamGenerator.cs

View workflow job for this annotation

GitHub Actions / Test matrix (ubuntu-22.04, 10.0.x)

Enable analyzer release tracking for the analyzer project containing rule 'VPG999' (https://github.com/dotnet/roslyn-analyzers/blob/main/src/Microsoft.CodeAnalysis.Analyzers/ReleaseTrackingAnalyzers.Help.md)

Check warning on line 51 in SourceGenerators/VisualParamGenerator/VisualParamGenerator.cs

View workflow job for this annotation

GitHub Actions / Test matrix (macos-latest, 8.0.x)

Enable analyzer release tracking for the analyzer project containing rule 'VPG999' (https://github.com/dotnet/roslyn-analyzers/blob/main/src/Microsoft.CodeAnalysis.Analyzers/ReleaseTrackingAnalyzers.Help.md)

Check warning on line 51 in SourceGenerators/VisualParamGenerator/VisualParamGenerator.cs

View workflow job for this annotation

GitHub Actions / Test matrix (windows-2022, 8.0.x)

Enable analyzer release tracking for the analyzer project containing rule 'VPG999' (https://github.com/dotnet/roslyn-analyzers/blob/main/src/Microsoft.CodeAnalysis.Analyzers/ReleaseTrackingAnalyzers.Help.md)

Check warning on line 51 in SourceGenerators/VisualParamGenerator/VisualParamGenerator.cs

View workflow job for this annotation

GitHub Actions / Test (.NET Framework 4.8.1)

Enable analyzer release tracking for the analyzer project containing rule 'VPG999' (https://github.com/dotnet/roslyn-analyzers/blob/main/src/Microsoft.CodeAnalysis.Analyzers/ReleaseTrackingAnalyzers.Help.md)

Check warning on line 51 in SourceGenerators/VisualParamGenerator/VisualParamGenerator.cs

View workflow job for this annotation

GitHub Actions / Test matrix (windows-2022, 10.0.x)

Enable analyzer release tracking for the analyzer project containing rule 'VPG999' (https://github.com/dotnet/roslyn-analyzers/blob/main/src/Microsoft.CodeAnalysis.Analyzers/ReleaseTrackingAnalyzers.Help.md)

Check warning on line 51 in SourceGenerators/VisualParamGenerator/VisualParamGenerator.cs

View workflow job for this annotation

GitHub Actions / Test matrix (windows-2022, 9.0.x)

Enable analyzer release tracking for the analyzer project containing rule 'VPG999' (https://github.com/dotnet/roslyn-analyzers/blob/main/src/Microsoft.CodeAnalysis.Analyzers/ReleaseTrackingAnalyzers.Help.md)
"Generation failed",
"VisualParam generation failed: {0}",
"VisualParamGenerator",
Expand Down Expand Up @@ -294,7 +294,7 @@
public static SortedList<int, VisualParam> Params = new SortedList<int, VisualParam>();

/// <summary>
/// Group-0 parameter IDs in the exact order they appear in avatar_lad.xml.
/// Group-0 and group-3 parameter IDs in ascending numeric ID order.
/// This order matches the byte sequence in the AvatarAppearance packet visual_param block.
/// </summary>
public static int[] Group0ParamIds = Array.Empty<int>();
Expand Down Expand Up @@ -382,7 +382,7 @@
var nodes = doc.GetElementsByTagName("param");

var ids = new SortedList<int, string>();
var group0IdsInOrder = new List<int>(); // group-0 and group-3 (TRANSMIT_NOT_TWEAKABLE) IDs in avatar_lad.xml document order
var group0IdsInOrder = new List<int>(); // group-0 and group-3 (TRANSMIT_NOT_TWEAKABLE) wire IDs
var alphas = new Dictionary<int, string>();
var colors = new Dictionary<int, string>();
var drivenParamInfoMap = new Dictionary<int, string>();
Expand Down Expand Up @@ -640,7 +640,7 @@
{
// group-3 (VISUAL_PARAM_GROUP_TRANSMIT_NOT_TWEAKABLE) params are also
// transmitted in the AvatarAppearance packet interleaved with group-0 params
// in avatar_lad.xml document order. They must be included here so that
// in ascending numeric ID order. They must be included here so that
// DecodeVisualParams() reads each byte from the correct offset.
group0IdsInOrder.Add(id);
}
Expand Down
Loading