89 lines
3.5 KiB
C#
89 lines
3.5 KiB
C#
using System;
|
|
using System.IO;
|
|
using OpenMetaverse;
|
|
using OpenMetaverse.StructuredData;
|
|
|
|
namespace LibreMetaverse.Materials
|
|
{
|
|
public class LegacyMaterial
|
|
{
|
|
public UUID ID { get; set; }
|
|
|
|
public UUID NormalMap { get; set; }
|
|
public double NormalMapOffsetX { get; set; }
|
|
public double NormalMapOffsetY { get; set; }
|
|
public double NormalMapRepeatX { get; set; }
|
|
public double NormalMapRepeatY { get; set; }
|
|
public double NormalMapRotation { get; set; }
|
|
|
|
public UUID SpecularMap { get; set; }
|
|
public double SpecularMapOffsetX { get; set; }
|
|
public double SpecularMapOffsetY { get; set; }
|
|
public double SpecularMapRepeatX { get; set; }
|
|
public double SpecularMapRepeatY { get; set; }
|
|
public double SpecularMapRotation { get; set; }
|
|
|
|
public Color4 SpecularColor { get; set; }
|
|
public byte SpecularExponent { get; set; }
|
|
public byte EnvironmentIntensity { get; set; }
|
|
public byte AlphaMaskCutoff { get; set; }
|
|
|
|
public LegacyMaterialAlphaMode DiffuseAlphaMode { get; set; }
|
|
|
|
public LegacyMaterial()
|
|
{
|
|
|
|
}
|
|
|
|
private const double MaterialsMultiplier = 10000.0;
|
|
|
|
public LegacyMaterial(OSDMap mapOrig)
|
|
{
|
|
if (!(mapOrig.ContainsKey("ID") && mapOrig.ContainsKey("Material")))
|
|
{
|
|
throw new InvalidOperationException("Legacy material needs to contain 'ID' and 'Material' keys.");
|
|
}
|
|
|
|
if (mapOrig["ID"] is OSDBinary idBinary)
|
|
{
|
|
ID = new UUID(idBinary.AsBinary(), 0);
|
|
}
|
|
else if (mapOrig["ID"] is OSDArray idArray)
|
|
{
|
|
ID = new UUID(idArray.AsBinary(), 0);
|
|
}
|
|
else if (mapOrig["ID"] is OSDUUID idUUID)
|
|
{
|
|
ID = idUUID.AsUUID();
|
|
}
|
|
else
|
|
{
|
|
throw new InvalidOperationException("LegacyMaterial ID is of an unknown type " + mapOrig["ID"].Type);
|
|
}
|
|
|
|
if (mapOrig["Material"] is OSDMap map)
|
|
{
|
|
NormalMap = map["NormMap"].AsUUID();
|
|
NormalMapOffsetX = map["NormOffsetX"].AsInteger() / MaterialsMultiplier;
|
|
NormalMapOffsetY = map["NormOffsetY"].AsInteger() / MaterialsMultiplier;
|
|
NormalMapRepeatX = map["NormRepeatX"].AsInteger() / MaterialsMultiplier;
|
|
NormalMapRepeatY = map["NormRepeatX"].AsInteger() / MaterialsMultiplier;
|
|
NormalMapRotation = map["NormRotation"].AsInteger() / MaterialsMultiplier;
|
|
|
|
SpecularMap = map["NormMap"].AsUUID();
|
|
SpecularMapOffsetX = map["NormOffsetX"].AsInteger() / MaterialsMultiplier;
|
|
SpecularMapOffsetY = map["NormOffsetY"].AsInteger() / MaterialsMultiplier;
|
|
SpecularMapRepeatX = map["NormRepeatX"].AsInteger() / MaterialsMultiplier;
|
|
SpecularMapRepeatY = map["NormRepeatX"].AsInteger() / MaterialsMultiplier;
|
|
SpecularMapRotation = map["NormRotation"].AsInteger() / MaterialsMultiplier;
|
|
|
|
SpecularColor = map["SpecColor"].AsColor4();
|
|
SpecularExponent = (byte)map["SpecExp"].AsInteger();
|
|
EnvironmentIntensity = (byte)map["EnvIntensity"].AsInteger();
|
|
AlphaMaskCutoff = (byte)map["AlphaMaskCutoff"].AsInteger();
|
|
DiffuseAlphaMode = (LegacyMaterialAlphaMode)map["DiffuseAlphaMode"].AsInteger();
|
|
}
|
|
}
|
|
}
|
|
}
|