blob: 35aaa3e7e1d4563b3d6ed9cceb0061937b074fb9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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;
}
}
}
|