Files
beyond/Assets/Scripts/Quests/QuestObject.cs
2024-11-20 15:21:28 +01:00

83 lines
2.5 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Beyond
{
//[RequireComponent(typeof(EPOOutline.Outlinable))]
public class QuestObject : DistanceAlphaFader
{
public QuestUITag m_tagObject;
public EPOOutline.Outlinable m_outlineable;
public bool m_useFresnel = true;
//[ColorUsageAttribute(true,true,0f,8f,0.125f,3f)]
public Color m_fresnelColor = new Color(1f, 1f, .4f);
public float m_fresnelPower = 2f;
public float m_fresnelIntensity = 1f;
private int m_FresnelColorID = Shader.PropertyToID("_FresnelColor");
private int m_FresnelPowerID = Shader.PropertyToID("FresnelPower");
private Renderer[] m_renderers;
private List<Material> m_materials;
public override void SetAlpha(float a)
{
if (m_useFresnel)
{
var color = m_fresnelColor * (m_fresnelIntensity * a);
SetFresnelValues(m_fresnelPower, color);
}
else if (m_outlineable)
{
var c = m_outlineable.OutlineParameters.Color;
c.a = a;
m_outlineable.OutlineParameters.Color = c;
}
if (m_tagObject)
m_tagObject.SetAlpha(a);
}
void SetFresnelValues(float fresnelPower, Color fresnelColor)
{
foreach (var m in m_materials)
{
m.SetColor(m_FresnelColorID, fresnelColor);
m.SetFloat(m_FresnelPowerID, fresnelPower);
}
}
protected override void Awake()
{
base.Awake();
if (!m_outlineable)
{
m_outlineable = GetComponent<EPOOutline.Outlinable>();
}
if (m_useFresnel)
{
m_renderers = GetComponentsInChildren<Renderer>();
m_materials = new List<Material>();
foreach (var r in m_renderers)
{
for (int i=0; i<r.materials.Length; i++)
m_materials.Add(r.materials[i]);
}
}
}
// Start is called before the first frame update
protected override void Start()
{
base.Start();
if (m_tagObject)
{
m_tagObject.SetMode(QuestUITag.Mode.REMOTELY_CONTROLLED);
m_tagObject.SetAlpha(0f);
}
}
}
}