using System; using UnityEngine; namespace Xft { public class GlitchEvent : CameraEffectEvent { public GlitchEvent(XftEventComponent owner) : base(CameraEffectEvent.EType.Glitch, owner) { this.m_random = new WaveRandom(); this.Mask = owner.GlitchMask; this.GlitchShader = owner.GlitchShader; } public Material GlitchMaterial { get { if (this.m_material == null) { this.m_material = new Material(this.GlitchShader); this.m_material.hideFlags = HideFlags.HideAndDontSave; } return this.m_material; } } public override bool CheckSupport() { bool result = true; if (!SystemInfo.supportsImageEffects) { result = false; } if (!this.GlitchMaterial.shader.isSupported) { result = false; } return result; } public override void Initialize() { base.Initialize(); this.m_random.Reset(); } public override void Reset() { base.Reset(); this.m_random.Reset(); } public override void Update(float deltaTime) { this.m_elapsedTime += deltaTime; this.m_offset = this.m_random.GetRandom(this.m_owner.MinAmp, this.m_owner.MaxAmp, this.m_owner.MinRand, this.m_owner.MaxRand, this.m_owner.WaveLen); } public override void OnRenderImage(RenderTexture source, RenderTexture destination) { if (this.Mask == null) { return; } this.GlitchMaterial.SetVector("_displace", this.m_offset); this.GlitchMaterial.SetTexture("_Mask", this.Mask); Graphics.Blit(source, destination, this.GlitchMaterial); } protected Vector3 m_offset; protected WaveRandom m_random; protected Material m_material; public Shader GlitchShader; public Texture2D Mask; } }