using System.Collections.Generic; using UnityEngine; namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse { public class DTMNoteMissTransparent : NoteMissEffect { #region [效果属性与状态] Effect Fields & States public List noteRenderers; #endregion #region [初始化] Initialization public DTMNoteMissTransparent(NoteVisualBase noteVisual, float effectTime) { this.note = noteVisual.note; this.noteVisual = noteVisual; this.effectTime = effectTime; this.noteRenderers = new List(); foreach (GameObject part in noteVisual.notePartList) { Renderer rend = part.GetComponent(); if(rend != null) { noteRenderers.Add(rend); } } if (noteVisual is DTMNoteVisualHold) { this.effectTime *= 2f; } } #endregion #region [效果核心逻辑] Core Effect Logic public override void Recover() { noteVisual.noteMain.SetActive(true); foreach (var renderer in noteRenderers) { for (int i = 0; i < renderer.materials.Length; i++) { renderer.materials[i].SetFloat("_AlphaAll", 0f); } } } public override void PreExecute() { if (noteVisual is DTMNoteVisualHold) { noteRenderers[0].materials[1].SetFloat("_GlowIntensity", 0.25f); } } public override void Execute() { float e = AnimationCurveEvaluator.Evaluate(AnimationCurveType.OutQuad, effectProgressPercent); float alpha = (1 - e) / 3f; foreach (var renderer in noteRenderers) { for (int i = 0; i < renderer.materials.Length; i++) { renderer.materials[i].SetFloat("_AlphaAll", alpha); } } } public override void Adjust() { noteVisual.noteMain.SetActive(false); foreach (var renderer in noteRenderers) { for (int i = 0; i < renderer.materials.Length; i++) { renderer.materials[i].SetFloat("_AlphaAll", 0f); } } } #endregion } }