一些特效
This commit is contained in:
@@ -0,0 +1,132 @@
|
||||
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<SpriteRenderer>();
|
||||
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
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user