Car/Assets/VolumetricLightBeam/Scripts/SD/SkewingHandleSD.cs

60 lines
1.7 KiB
C#
Raw Normal View History

using UnityEngine;
using System.Collections;
namespace VLB
{
[ExecuteInEditMode]
[HelpURL(Consts.Help.SD.UrlSkewingHandle)]
public class SkewingHandleSD : MonoBehaviour
{
public const string ClassName = "SkewingHandleSD";
public VolumetricLightBeamSD volumetricLightBeam = null;
public bool shouldUpdateEachFrame = false;
#if UNITY_EDITOR
void Update()
{
if (!Application.isPlaying && CanSetSkewingVector())
SetSkewingVector();
}
#endif
public bool IsAttachedToSelf() { return volumetricLightBeam != null && volumetricLightBeam.gameObject == this.gameObject; }
public bool CanSetSkewingVector() { return volumetricLightBeam != null && volumetricLightBeam.canHaveMeshSkewing; }
public bool CanUpdateEachFrame() { return CanSetSkewingVector() && volumetricLightBeam.trackChangesDuringPlaytime; }
bool ShouldUpdateEachFrame() { return shouldUpdateEachFrame && CanUpdateEachFrame(); }
void OnEnable()
{
if(CanSetSkewingVector())
SetSkewingVector();
}
void Start()
{
if (Application.isPlaying && ShouldUpdateEachFrame())
{
StartCoroutine(CoUpdate());
}
}
IEnumerator CoUpdate()
{
while(ShouldUpdateEachFrame())
{
SetSkewingVector();
yield return null;
}
}
void SetSkewingVector()
{
Debug.Assert(CanSetSkewingVector());
var vec = volumetricLightBeam.transform.InverseTransformPoint(transform.position);
volumetricLightBeam.skewingLocalForwardDirection = vec;
}
}
}