Ryujinx/Ryujinx.HLE/HOS/Services/Mii/Types/CreateId.cs
Mary-nyan c6d05301aa
infra: Migrate to .NET 7 (#3795)
* Update readme to mention .NET 7

* infra: Migrate to .NET 7

.NET 7 is still in preview but this prepare for the release coming up
next month.

* Use Random.Shared in CreateRandom

* Move UInt128Utils.cs to Ryujinx.Common project

* Fix inverted parameters in System.UInt128 constructor

* Fix Visual Studio complains on  Ryujinx.Graphics.Vic

* time: Fix missing alignment enforcement in SystemClockContext

Fixes at least Smash

* time: Fix missing alignment enforcement in SteadyClockContext

Fix games (like recent version of Smash) using time shared memory

* Switch to .NET 7.0.100 release

* Enable Tiered PGO

* Ensure CreateId validity requirements are meet when doing random generation

Also enforce correct packing layout for other Mii structures.

This fix a Mario Kart 8 crashes related to the default Miis.
2022-11-09 20:22:43 +01:00

45 lines
1.1 KiB
C#

using System;
using System.Runtime.InteropServices;
namespace Ryujinx.HLE.HOS.Services.Mii.Types
{
[StructLayout(LayoutKind.Sequential, Pack = 1, Size = 0x10)]
struct CreateId : IEquatable<CreateId>
{
public UInt128 Raw;
public bool IsNull => Raw == UInt128.Zero;
public bool IsValid => !IsNull && ((Raw >> 64) & 0xC0) == 0x80;
public CreateId(UInt128 raw)
{
Raw = raw;
}
public static bool operator ==(CreateId x, CreateId y)
{
return x.Equals(y);
}
public static bool operator !=(CreateId x, CreateId y)
{
return !x.Equals(y);
}
public override bool Equals(object obj)
{
return obj is CreateId createId && Equals(createId);
}
public bool Equals(CreateId cmpObj)
{
// Nintendo additionally check that the CreatorId is valid before doing the actual comparison.
return IsValid && Raw == cmpObj.Raw;
}
public override int GetHashCode()
{
return Raw.GetHashCode();
}
}
}