using System.Collections; using System.Collections.Generic; using DG.Tweening; using Ichni.Editor; using Ichni.RhythmGame.Beatmap; using Lean.Pool; using UnityEngine; namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse { public class DTMRippleEffect : EffectBase { private GameObject prefab; private DTM_Ripple ripple; public float rippleTime; public Vector3 positionOffset; public Vector3 eulerAnglesOffset; public Vector3 scale; public Color emissionColor; public float emissionIntensity; public DTMRippleEffect(float rippleTime, Color emissionColor, float emissionIntensity) { this.effectTime = 0; this.rippleTime = rippleTime; this.positionOffset = Vector3.zero; this.eulerAnglesOffset = Vector3.zero; this.scale = Vector3.one; this.emissionColor = emissionColor; this.emissionIntensity = emissionIntensity; prefab = EditorManager.instance. customPrefabs["departure_to_multiverse"]. GetPrefab("DTM_Ripple"); } public DTMRippleEffect(float rippleTime, Color emissionColor, float emissionIntensity, Vector3 positionOffset, Vector3 eulerAnglesOffset, Vector3 scale) { this.effectTime = 0; this.rippleTime = rippleTime; this.positionOffset = positionOffset; this.eulerAnglesOffset = eulerAnglesOffset; this.scale = scale; this.emissionColor = emissionColor; this.emissionIntensity = emissionIntensity; prefab = EditorManager.instance. customPrefabs["departure_to_multiverse"]. GetPrefab("DTM_Ripple"); } public override void Adjust() { ripple = LeanPool.Spawn(prefab, attachedGameElement.transform).GetComponent(); ripple.transform.localPosition = positionOffset; ripple.transform.localEulerAngles = eulerAnglesOffset; ripple.transform.localScale = scale; ripple.transform.SetParent(null); ripple.SetRippleTime(rippleTime); ripple.SetEmissionColor(emissionColor * Mathf.Pow(2, emissionIntensity)); ripple.mainRipple.Play(); LeanPool.Despawn(ripple.gameObject, rippleTime); } public override EffectBase_BM ConvertToBM() { return new Beatmap.DTMRippleEffect_BM(rippleTime, emissionColor, emissionIntensity, positionOffset, eulerAnglesOffset, scale); } public override void SetUpInspector() { IHaveInspection inspector = EditorManager.instance.uiManager.inspector; var container = inspector.GenerateContainer("DTM Ripple Effect"); var effectSettings1 = container.GenerateSubcontainer(3); var rippleTimeInputField = inspector.GenerateInputField(this, effectSettings1, "Ripple Time", nameof(rippleTime)); var effectSettings2 = container.GenerateSubcontainer(1); var emissionColorPicker = inspector.GenerateEmissionColorPicker(this, effectSettings2, "Color", "NULL", nameof(emissionColor), nameof(emissionIntensity)); var positionOffsetInputField = inspector.GenerateVector3InputField(this, effectSettings2, "Position Offset", nameof(positionOffset)); var eulerAnglesInputField = inspector.GenerateVector3InputField(this, effectSettings2, "Euler Angles", nameof(eulerAnglesOffset)); var scaleInputField = inspector.GenerateVector3InputField(this, effectSettings2, "Scale", nameof(scale)); SetRemove(effectSettings2); } } namespace Beatmap { public class DTMRippleEffect_BM : EffectBase_BM { public float rippleTime; public Vector3 positionOffset; public Vector3 eulerAngles; public Vector3 scale; public Color emissionColor = Color.white; public float emissionIntensity = 0; public DTMRippleEffect_BM() { } public DTMRippleEffect_BM(float rippleTime, Color emissionColor, float emissionIntensity, Vector3 positionOffset, Vector3 eulerAngles, Vector3 scale) { this.rippleTime = rippleTime; this.positionOffset = positionOffset; this.eulerAngles = eulerAngles; this.scale = scale; this.emissionColor = emissionColor; this.emissionIntensity = emissionIntensity; } public override EffectBase ConvertToGameType(GameElement attachedGameElement) { return new DTMRippleEffect(rippleTime, emissionColor, emissionIntensity, positionOffset, eulerAngles, scale) { attachedGameElement = attachedGameElement }; } } } }