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 SpriteRenderer ripple; public bool isCircle; public float rippleTime; public Vector3 positionOffset; public Vector3 eulerAnglesOffset; public Vector3 scale; public Color emissionColor; public float emissionIntensity; public DTMRippleEffect(bool isCircle, float rippleTime, Color emissionColor, float emissionIntensity) { this.effectTime = 0; this.isCircle = isCircle; this.rippleTime = rippleTime; this.positionOffset = Vector3.zero; this.eulerAnglesOffset = Vector3.zero; this.scale = Vector3.one; this.emissionColor = emissionColor; this.emissionIntensity = emissionIntensity; } public DTMRippleEffect(bool isCircle, float rippleTime, Color emissionColor, float emissionIntensity, Vector3 positionOffset, Vector3 eulerAnglesOffset, Vector3 scale) { this.effectTime = 0; this.isCircle = isCircle; this.rippleTime = rippleTime; this.positionOffset = positionOffset; this.eulerAnglesOffset = eulerAnglesOffset; this.scale = scale; this.emissionColor = emissionColor; this.emissionIntensity = emissionIntensity; } public override void Adjust() { GameObject prefab = EditorManager.instance.customPrefabs["departure_to_multiverse"].GetPrefab("DTM_Ripple"); ripple = LeanPool.Spawn(prefab, attachedGameElement.transform).GetComponentInChildren(); ripple.transform.localPosition = positionOffset; ripple.transform.localEulerAngles = eulerAnglesOffset; ripple.transform.localScale = scale; ripple.transform.parent.transform.SetParent(null); if (isCircle) { ripple.material.EnableKeyword("_ISCIRCLE_ON"); } else { ripple.material.DisableKeyword("_ISCIRCLE_ON"); } ripple.material.SetFloat("_EdgeValue", 0f); ripple.material.SetFloat("_Width", 1f); ripple.material.SetFloat("_Opacity", 1f); ripple.material.SetColor("_ImageColor", emissionColor * Mathf.Pow(2, emissionIntensity)); ripple.material.DOFloat(0.5f, "_EdgeValue", rippleTime).SetEase(Ease.OutQuart).Play(); ripple.material.DOFloat(0f, "_Width", rippleTime).SetEase(Ease.OutQuart).Play(); ripple.material.DOFloat(0f, "_Opacity", rippleTime).SetEase(Ease.Linear).Play(); LeanPool.Despawn(ripple.transform.parent.gameObject, rippleTime); } public override EffectBase_BM ConvertToBM() { return new Beatmap.DTMRippleEffect_BM(isCircle, 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 isCircleToggle = inspector.GenerateToggle(this, effectSettings1, "Is Circle", nameof(isCircle)); 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)); } } namespace Beatmap { public class DTMRippleEffect_BM : EffectBase_BM { public bool isCircle; 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(bool isCircle, float rippleTime, Color emissionColor, float emissionIntensity, Vector3 positionOffset, Vector3 eulerAngles, Vector3 scale) { this.isCircle = isCircle; 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(isCircle, rippleTime, emissionColor, emissionIntensity, positionOffset, eulerAngles, scale) { attachedGameElement = attachedGameElement }; } } } }