From 917e9e0b320775634dc2e710f7deac74fd0822f0 Mon Sep 17 00:00:00 2001 From: chai Date: Thu, 22 Oct 2020 23:30:02 +0800 Subject: * amplify shader editor --- Assets/MaterializeFX/Scripts/MfxController.cs | 87 +++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 Assets/MaterializeFX/Scripts/MfxController.cs (limited to 'Assets/MaterializeFX/Scripts/MfxController.cs') diff --git a/Assets/MaterializeFX/Scripts/MfxController.cs b/Assets/MaterializeFX/Scripts/MfxController.cs new file mode 100644 index 00000000..35aaa3e7 --- /dev/null +++ b/Assets/MaterializeFX/Scripts/MfxController.cs @@ -0,0 +1,87 @@ +using UnityEngine; + +namespace Assets.MaterializeFX.Scripts +{ + internal sealed class MfxController : MonoBehaviour + { + private const string MfxMaskOffsetProperty = "_MaskOffset"; + private const string MfxMaskPositionProperty = "_MaskWorldPosition"; + + public AnimationCurve MaskOffsetCurve = AnimationCurve.Linear(0f, 0f, 1f, 1f); + public float ScaleTimeFactor = 1; + public float ScaleOffsetFactor = 1; + public bool ModifyChildren = true; + public GameObject TargetObject; + + public bool ByDistance; + public GameObject DistanceBasedObject; + + public bool ReplaceMaterial; + public bool ReplaceMaterialMode; //Runtime, Editor + public Material MfxMaterial; + + private float _startTime; + private bool _isEnabled; + private MfxObjectMaterialUpdater _mfxObjectMaterialUpdater; + private Transform _targetTransform; + + public GameObject Target + { + get + { + return TargetObject != null ? TargetObject : gameObject; + } + } + + public void ReplaceMaterials() + { + _mfxObjectMaterialUpdater.Replace(MfxMaterial); + } + + public void RevertMaterials() + { + _mfxObjectMaterialUpdater.Revert(); + } + + private void Start() + { + _mfxObjectMaterialUpdater = new MfxObjectMaterialUpdater(Target, ModifyChildren, ReplaceMaterial, MfxMaterial); + + _targetTransform = Target.transform; + _startTime = Time.time; + } + + private void Update() + { + if (!_isEnabled || _targetTransform == null) + return; + + if (ByDistance) + { + if (DistanceBasedObject == null) + { + Debug.LogError("By distance property was set, but object was not set"); + return; + } + + _mfxObjectMaterialUpdater.SetVector(MfxMaskPositionProperty, DistanceBasedObject.transform.position); + + return; + } + + var time = Time.time - _startTime; + var maskOffset = MaskOffsetCurve.Evaluate(time / ScaleTimeFactor) * ScaleOffsetFactor; + _mfxObjectMaterialUpdater.SetFloat(MfxMaskOffsetProperty, maskOffset); + } + + private void OnEnable() + { + _isEnabled = true; + } + + private void OnDisable() + { + _isEnabled = false; + } + } +} \ No newline at end of file -- cgit v1.1-26-g67d0