summaryrefslogtreecommitdiff
path: root/Assets/Scripts/Unit/Components/UnitImageEffect.cs
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2021-09-17 09:33:17 +0800
committerchai <chaifix@163.com>2021-09-17 09:33:17 +0800
commitea4624fbef6e9d8f58da12be363807eb19a37b53 (patch)
tree5853f375a27121d9377288e818c7a93714d39e0c /Assets/Scripts/Unit/Components/UnitImageEffect.cs
parentb7a445554e3f57b5fe4b1f1c619d0bed022893b6 (diff)
+glitch
Diffstat (limited to 'Assets/Scripts/Unit/Components/UnitImageEffect.cs')
-rw-r--r--Assets/Scripts/Unit/Components/UnitImageEffect.cs41
1 files changed, 37 insertions, 4 deletions
diff --git a/Assets/Scripts/Unit/Components/UnitImageEffect.cs b/Assets/Scripts/Unit/Components/UnitImageEffect.cs
index 999740f3..a2689ca1 100644
--- a/Assets/Scripts/Unit/Components/UnitImageEffect.cs
+++ b/Assets/Scripts/Unit/Components/UnitImageEffect.cs
@@ -31,10 +31,13 @@ public class UnitImageEffectHandle
public class UnitImageEffect : UnitComponent
{
public List<UnitImageEffectHandle> effects = new List<UnitImageEffectHandle>();
- public static GameObject effectPlane;
+
+ public static GameObject effectPlane;
private Dictionary<float/*size*/, List<UnitImageEffectHolder>/*pool*/> m_HolderPool = new Dictionary<float, List<UnitImageEffectHolder>>();
+ private ObjectPool<UnitImageEffectHandle> m_HandlePool = new ObjectPool<UnitImageEffectHandle>(null, null);
+
public override void OnUpdate()
{
base.OnUpdate();
@@ -55,6 +58,7 @@ public class UnitImageEffect : UnitComponent
temp[j].holder.gameObject.SetActive(false);
ReleaseHolder(ref temp[j].holder);
effects.Remove(temp[j]);
+ m_HandlePool.Release(temp[j]);
}
ListPool<UnitImageEffectHandle>.Release(temp);
}
@@ -123,7 +127,8 @@ public class UnitImageEffect : UnitComponent
public void ShowMotionBlur(float lifeTime, float angle, float distance)
{
- UnitImageEffectHandle handle = new UnitImageEffectHandle();
+ UnitImageEffectHandle handle = m_HandlePool.Get();
+
handle.lifeTime = lifeTime;
handle.curTime = 0;
float size = UnitManager.Instance.pc.unitDetail.snapshotBound;
@@ -143,13 +148,41 @@ public class UnitImageEffect : UnitComponent
handle.holder.gameObject.transform.position = UnitManager.Instance.pc.center;
handle.holder.renderer.GetPropertyBlock(block);
- block.SetFloat("_Distance", (normalTime) * distance);
+ block.SetFloat("_Distance", /*(normalTime) * */distance);
+ handle.holder.renderer.SetPropertyBlock(block);
+ };
+
+ effects.Add(handle);
+ }
+
+ public void ShowGlitch(float lifeTime)
+ {
+ UnitImageEffectHandle handle = m_HandlePool.Get();
+
+ handle.lifeTime = lifeTime;
+ handle.curTime = 0;
+ float size = UnitManager.Instance.pc.unitDetail.snapshotBound;
+ handle.holder = ClaimHolder(size);
+ handle.holder.gameObject.SetActive(true);
+ string matPath = ResourceManager.Instance.imageEffectMaterails[ResourceManager.EImageEffectMaterails.Glitch];
+ handle.holder.renderer.sharedMaterial = ResourceManager.Instance.LoadAsset<Material>(matPath);
+
+ MaterialPropertyBlock block = new MaterialPropertyBlock();
+ handle.holder.renderer.GetPropertyBlock(block);
+ handle.holder.renderer.SetPropertyBlock(block);
+
+ handle.stepFunc = (float normalTime) =>
+ {
+ handle.holder.gameObject.transform.position = UnitManager.Instance.pc.center;
+
+ handle.holder.renderer.GetPropertyBlock(block);
handle.holder.renderer.SetPropertyBlock(block);
};
effects.Add(handle);
}
- #endregion
+
+ #endregion
} \ No newline at end of file