139 lines
3.3 KiB
C#
139 lines
3.3 KiB
C#
using System.Runtime.InteropServices;
|
|
using UnityEngine;
|
|
|
|
public struct ovrAvatarMaterialState
|
|
{
|
|
public Vector4 baseColor;
|
|
|
|
public ovrAvatarMaterialMaskType baseMaskType;
|
|
|
|
public Vector4 baseMaskParameters;
|
|
|
|
public Vector4 baseMaskAxis;
|
|
|
|
public ovrAvatarMaterialLayerSampleMode sampleMode;
|
|
|
|
public ulong alphaMaskTextureID;
|
|
|
|
public Vector4 alphaMaskScaleOffset;
|
|
|
|
public ulong normalMapTextureID;
|
|
|
|
public Vector4 normalMapScaleOffset;
|
|
|
|
public ulong parallaxMapTextureID;
|
|
|
|
public Vector4 parallaxMapScaleOffset;
|
|
|
|
public ulong roughnessMapTextureID;
|
|
|
|
public Vector4 roughnessMapScaleOffset;
|
|
|
|
public uint layerCount;
|
|
|
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
|
|
public ovrAvatarMaterialLayerState[] layers;
|
|
|
|
private static bool VectorEquals(Vector4 a, Vector4 b)
|
|
{
|
|
return a.x == b.x && a.y == b.y && a.z == b.z && a.w == b.w;
|
|
}
|
|
|
|
public override bool Equals(object obj)
|
|
{
|
|
if (!(obj is ovrAvatarMaterialState))
|
|
{
|
|
return false;
|
|
}
|
|
ovrAvatarMaterialState ovrAvatarMaterialState2 = (ovrAvatarMaterialState)obj;
|
|
if (!VectorEquals(baseColor, ovrAvatarMaterialState2.baseColor))
|
|
{
|
|
return false;
|
|
}
|
|
if (baseMaskType != ovrAvatarMaterialState2.baseMaskType)
|
|
{
|
|
return false;
|
|
}
|
|
if (!VectorEquals(baseMaskParameters, ovrAvatarMaterialState2.baseMaskParameters))
|
|
{
|
|
return false;
|
|
}
|
|
if (!VectorEquals(baseMaskAxis, ovrAvatarMaterialState2.baseMaskAxis))
|
|
{
|
|
return false;
|
|
}
|
|
if (sampleMode != ovrAvatarMaterialState2.sampleMode)
|
|
{
|
|
return false;
|
|
}
|
|
if (alphaMaskTextureID != ovrAvatarMaterialState2.alphaMaskTextureID)
|
|
{
|
|
return false;
|
|
}
|
|
if (!VectorEquals(alphaMaskScaleOffset, ovrAvatarMaterialState2.alphaMaskScaleOffset))
|
|
{
|
|
return false;
|
|
}
|
|
if (normalMapTextureID != ovrAvatarMaterialState2.normalMapTextureID)
|
|
{
|
|
return false;
|
|
}
|
|
if (!VectorEquals(normalMapScaleOffset, ovrAvatarMaterialState2.normalMapScaleOffset))
|
|
{
|
|
return false;
|
|
}
|
|
if (parallaxMapTextureID != ovrAvatarMaterialState2.parallaxMapTextureID)
|
|
{
|
|
return false;
|
|
}
|
|
if (!VectorEquals(parallaxMapScaleOffset, ovrAvatarMaterialState2.parallaxMapScaleOffset))
|
|
{
|
|
return false;
|
|
}
|
|
if (roughnessMapTextureID != ovrAvatarMaterialState2.roughnessMapTextureID)
|
|
{
|
|
return false;
|
|
}
|
|
if (!VectorEquals(roughnessMapScaleOffset, ovrAvatarMaterialState2.roughnessMapScaleOffset))
|
|
{
|
|
return false;
|
|
}
|
|
if (layerCount != ovrAvatarMaterialState2.layerCount)
|
|
{
|
|
return false;
|
|
}
|
|
for (int i = 0; i < layerCount; i++)
|
|
{
|
|
if (!layers[i].Equals(ovrAvatarMaterialState2.layers[i]))
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public override int GetHashCode()
|
|
{
|
|
int num = 0;
|
|
num ^= baseColor.GetHashCode();
|
|
num ^= baseMaskType.GetHashCode();
|
|
num ^= baseMaskParameters.GetHashCode();
|
|
num ^= baseMaskAxis.GetHashCode();
|
|
num ^= sampleMode.GetHashCode();
|
|
num ^= alphaMaskTextureID.GetHashCode();
|
|
num ^= alphaMaskScaleOffset.GetHashCode();
|
|
num ^= normalMapTextureID.GetHashCode();
|
|
num ^= normalMapScaleOffset.GetHashCode();
|
|
num ^= parallaxMapTextureID.GetHashCode();
|
|
num ^= parallaxMapScaleOffset.GetHashCode();
|
|
num ^= roughnessMapTextureID.GetHashCode();
|
|
num ^= roughnessMapScaleOffset.GetHashCode();
|
|
num ^= layerCount.GetHashCode();
|
|
for (int i = 0; i < layerCount; i++)
|
|
{
|
|
num ^= layers[i].GetHashCode();
|
|
}
|
|
return num;
|
|
}
|
|
}
|