mirror of
https://github.com/drewcassidy/KSP-Conformal-Decals.git
synced 2024-09-01 18:23:54 +00:00
Add manual material property constructors
This commit is contained in:
parent
53538a7b09
commit
fccf52ae6e
@ -9,6 +9,10 @@ namespace ConformalDecals.MaterialModifiers {
|
|||||||
_color = ParsePropertyColor(node, "color", false);
|
_color = ParsePropertyColor(node, "color", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public MaterialColorProperty(string name, Color value) : base(name) {
|
||||||
|
_color = value;
|
||||||
|
}
|
||||||
|
|
||||||
public override void Modify(Material material) {
|
public override void Modify(Material material) {
|
||||||
material.SetColor(_propertyID, _color);
|
material.SetColor(_propertyID, _color);
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,10 @@ namespace ConformalDecals.MaterialModifiers {
|
|||||||
_value = ParsePropertyFloat(node, "value", false);
|
_value = ParsePropertyFloat(node, "value", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public MaterialFloatProperty(string name, float value) : base(name) {
|
||||||
|
_value = value;
|
||||||
|
}
|
||||||
|
|
||||||
public override void Modify(Material material) {
|
public override void Modify(Material material) {
|
||||||
material.SetFloat(_propertyID, _value);
|
material.SetFloat(_propertyID, _value);
|
||||||
}
|
}
|
||||||
|
@ -8,15 +8,16 @@ namespace ConformalDecals.MaterialModifiers {
|
|||||||
protected readonly int _propertyID;
|
protected readonly int _propertyID;
|
||||||
|
|
||||||
|
|
||||||
protected MaterialProperty(ConfigNode node) {
|
protected MaterialProperty(ConfigNode node) : this(node.GetValue("name")) { }
|
||||||
PropertyName = node.GetValue("name");
|
|
||||||
|
|
||||||
if (PropertyName == null)
|
protected MaterialProperty(string name) {
|
||||||
|
if (name == null)
|
||||||
throw new FormatException("name not found, cannot create material modifier");
|
throw new FormatException("name not found, cannot create material modifier");
|
||||||
|
|
||||||
if (PropertyName == string.Empty)
|
if (name == string.Empty)
|
||||||
throw new FormatException("name is empty, cannot create material modifier");
|
throw new FormatException("name is empty, cannot create material modifier");
|
||||||
|
|
||||||
|
PropertyName = name;
|
||||||
_propertyID = Shader.PropertyToID(PropertyName);
|
_propertyID = Shader.PropertyToID(PropertyName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,43 +3,69 @@ using UnityEngine;
|
|||||||
|
|
||||||
namespace ConformalDecals.MaterialModifiers {
|
namespace ConformalDecals.MaterialModifiers {
|
||||||
public class MaterialTextureProperty : MaterialProperty {
|
public class MaterialTextureProperty : MaterialProperty {
|
||||||
public string TextureUrl { get; }
|
|
||||||
public Texture2D TextureRef { get; }
|
public Texture2D TextureRef { get; }
|
||||||
|
|
||||||
public bool IsNormal { get; }
|
public bool IsNormal { get; }
|
||||||
public bool IsMain { get; }
|
public bool IsMain { get; }
|
||||||
public bool AutoScale { get; }
|
public bool AutoScale { get; }
|
||||||
|
|
||||||
public Rect TileRect { get; }
|
private readonly Rect _tileRect;
|
||||||
|
|
||||||
public float AspectRatio => TileRect.height / TileRect.width;
|
public float AspectRatio => _tileRect.height / _tileRect.width;
|
||||||
|
|
||||||
private readonly Vector2 _textureOffset;
|
private readonly Vector2 _textureOffset;
|
||||||
private readonly Vector2 _textureScale;
|
private readonly Vector2 _textureScale;
|
||||||
|
|
||||||
public MaterialTextureProperty(ConfigNode node) : base(node) {
|
public MaterialTextureProperty(ConfigNode node) : base(node) {
|
||||||
TextureUrl = node.GetValue("textureURL");
|
IsNormal = ParsePropertyBool(node, "isNormalMap", true, PropertyName == "_BumpMap");
|
||||||
|
|
||||||
var textureInfo = GameDatabase.Instance.GetTextureInfo(TextureUrl);
|
|
||||||
|
|
||||||
if (textureInfo == null)
|
|
||||||
throw new Exception($"Cannot find texture: '{TextureUrl}'");
|
|
||||||
|
|
||||||
TextureRef = IsNormal ? textureInfo.normalMap : textureInfo.texture;
|
|
||||||
|
|
||||||
if (TextureRef == null)
|
|
||||||
throw new Exception($"Cannot get texture from texture info '{TextureUrl}' isNormalMap = {IsNormal}");
|
|
||||||
|
|
||||||
IsNormal = ParsePropertyBool(node, "isNormalMap", true);
|
|
||||||
IsMain = ParsePropertyBool(node, "isMain", true);
|
IsMain = ParsePropertyBool(node, "isMain", true);
|
||||||
AutoScale = ParsePropertyBool(node, "autoScale", true);
|
AutoScale = ParsePropertyBool(node, "autoScale", true);
|
||||||
TileRect = ParsePropertyRect(node, "tileRect", true, new Rect(0, 0, TextureRef.width, TextureRef.height));
|
var textureUrl = node.GetValue("textureURL");
|
||||||
|
|
||||||
_textureScale.x = TileRect.width / TextureRef.width;
|
if ((textureUrl == null && IsNormal) || textureUrl == "Bump") {
|
||||||
_textureScale.y = TileRect.height / TextureRef.height;
|
TextureRef = Texture2D.normalTexture;
|
||||||
|
}
|
||||||
|
else if ((textureUrl == null && !IsNormal) || textureUrl == "White") {
|
||||||
|
TextureRef = Texture2D.whiteTexture;
|
||||||
|
}
|
||||||
|
else if (textureUrl == "Black") {
|
||||||
|
TextureRef = Texture2D.blackTexture;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var textureInfo = GameDatabase.Instance.GetTextureInfo(textureUrl);
|
||||||
|
|
||||||
_textureOffset.x = TileRect.x / TextureRef.width;
|
if (textureInfo == null) throw new Exception($"Cannot find texture: '{textureUrl}'");
|
||||||
_textureOffset.y = TileRect.y / TextureRef.height;
|
|
||||||
|
TextureRef = IsNormal ? textureInfo.normalMap : textureInfo.texture;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (TextureRef == null) throw new Exception($"Cannot get texture from texture info '{textureUrl}' isNormalMap = {IsNormal}");
|
||||||
|
|
||||||
|
_tileRect = ParsePropertyRect(node, "tileRect", true, new Rect(0, 0, TextureRef.width, TextureRef.height));
|
||||||
|
|
||||||
|
_textureScale.x = _tileRect.width / TextureRef.width;
|
||||||
|
_textureScale.y = _tileRect.height / TextureRef.height;
|
||||||
|
|
||||||
|
_textureOffset.x = _tileRect.x / TextureRef.width;
|
||||||
|
_textureOffset.y = _tileRect.y / TextureRef.height;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MaterialTextureProperty(string name, Texture2D texture, Rect tileRect = default,
|
||||||
|
bool isNormal = false, bool isMain = false, bool autoScale = false) : base(name) {
|
||||||
|
|
||||||
|
TextureRef = texture;
|
||||||
|
|
||||||
|
_tileRect = tileRect == default ? new Rect(0, 0, TextureRef.width, TextureRef.height) : tileRect;
|
||||||
|
|
||||||
|
IsNormal = isNormal;
|
||||||
|
IsMain = isMain;
|
||||||
|
AutoScale = autoScale;
|
||||||
|
|
||||||
|
_textureScale.x = _tileRect.width / TextureRef.width;
|
||||||
|
_textureScale.y = _tileRect.height / TextureRef.height;
|
||||||
|
|
||||||
|
_textureOffset.x = _tileRect.x / TextureRef.width;
|
||||||
|
_textureOffset.y = _tileRect.y / TextureRef.height;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Modify(Material material) {
|
public override void Modify(Material material) {
|
||||||
|
Loading…
Reference in New Issue
Block a user