summaryrefslogtreecommitdiff
path: root/Assets/MaterializeFX/Scripts/MfxController.cs
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2020-10-22 23:30:02 +0800
committerchai <chaifix@163.com>2020-10-22 23:30:02 +0800
commit917e9e0b320775634dc2e710f7deac74fd0822f0 (patch)
tree637f3cccc80e7738c8a077fa3ff59218b8b18ee8 /Assets/MaterializeFX/Scripts/MfxController.cs
parent8268e4e308bd110dfea4ad849a7ff74e66951349 (diff)
* amplify shader editor
Diffstat (limited to 'Assets/MaterializeFX/Scripts/MfxController.cs')
-rw-r--r--Assets/MaterializeFX/Scripts/MfxController.cs87
1 files changed, 87 insertions, 0 deletions
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