using System;
using GLTF.Extensions;
using GLTF.Math;
using Newtonsoft.Json;
namespace GLTF.Schema
{
public class MaterialCommonConstant : GLTFProperty
{
///
/// Used to scale the ambient light contributions to this material
///
public Color AmbientFactor = Color.White;
///
/// Texture used to store pre-computed direct lighting
///
public TextureInfo LightmapTexture;
///
/// Scale factor for the lightmap texture
///
public Color LightmapFactor = Color.White;
public MaterialCommonConstant()
{
}
public MaterialCommonConstant(MaterialCommonConstant materialCommonConstant, GLTFRoot gltfRoot) : base(materialCommonConstant)
{
if (materialCommonConstant == null) return;
AmbientFactor = materialCommonConstant.AmbientFactor;
LightmapTexture = new TextureInfo(materialCommonConstant.LightmapTexture, gltfRoot);
LightmapFactor = materialCommonConstant.LightmapFactor;
}
public static MaterialCommonConstant Deserialize(GLTFRoot root, JsonReader reader)
{
var commonConstant = new MaterialCommonConstant();
if (reader.Read() && reader.TokenType != JsonToken.StartObject)
{
throw new Exception("Asset must be an object.");
}
while (reader.Read() && reader.TokenType == JsonToken.PropertyName)
{
var curProp = reader.Value.ToString();
switch (curProp)
{
case "ambientFactor":
commonConstant.AmbientFactor = reader.ReadAsRGBColor();
break;
case "lightmapTexture":
commonConstant.LightmapTexture = TextureInfo.Deserialize(root, reader);
break;
case "lightmapFactor":
commonConstant.LightmapFactor = reader.ReadAsRGBColor();
break;
default:
commonConstant.DefaultPropertyDeserializer(root, reader);
break;
}
}
return commonConstant;
}
public override void Serialize(JsonWriter writer)
{
writer.WriteStartObject();
if (AmbientFactor != Color.White)
{
writer.WritePropertyName("ambientFactor");
writer.WriteStartArray();
writer.WriteValue(AmbientFactor.R);
writer.WriteValue(AmbientFactor.G);
writer.WriteValue(AmbientFactor.B);
writer.WriteEndArray();
}
if (LightmapTexture != null)
{
writer.WritePropertyName("lightmapTexture");
LightmapTexture.Serialize(writer);
}
if (LightmapFactor != Color.White)
{
writer.WritePropertyName("lightmapFactor");
writer.WriteStartArray();
writer.WriteValue(LightmapFactor.R);
writer.WriteValue(LightmapFactor.G);
writer.WriteValue(LightmapFactor.B);
writer.WriteEndArray();
}
base.Serialize(writer);
writer.WriteEndObject();
}
}
}