using System.Collections; using System.Collections.Generic; using System.Linq; using Ichni; using Ichni.RhythmGame; using TMPro; using UnityEngine; using UnityEngine.UI; public class EventPoint : MonoBehaviour { public AnimatedFloat animatedFloat; public EventPoint LastEventPoint; public EventPoint NextEventPoint; public Image EvDrawimage; public Image OvDrawimage; public RectTransform LeftSide; public RectTransform RightSide; public Button selectButton; public RawImage CurveCanvas; public RawImage CurveCanvas2; public FlexibleFloatTab FatherTab; public int BeatDeviver => FatherTab.BeatDeviver; public void Initialize(AnimatedFloat animatedFloat) { this.animatedFloat = animatedFloat; transform.localPosition = new Vector3( animatedFloat.startTime / EditorManager.instance.timeline.timePerBeat * BeatDeviver, 0, 0 ); RightSide.localPosition = new Vector3( (animatedFloat.endTime - animatedFloat.startTime) / EditorManager.instance.timeline.timePerBeat * BeatDeviver, 0, 0); EvDrawimage.rectTransform.sizeDelta = new Vector2(RightSide.localPosition.x - LeftSide.localPosition.x, EvDrawimage.rectTransform.sizeDelta.y); EvDrawimage.transform.localPosition = new Vector3(EvDrawimage.rectTransform.sizeDelta.x / 2, 0, 0); OvDrawimage.transform.localPosition = RightSide.localPosition; CurveCanvas.transform.localPosition = EvDrawimage.transform.localPosition; CurveCanvas.rectTransform.sizeDelta = new Vector2(EvDrawimage.rectTransform.sizeDelta.x, EvDrawimage.rectTransform.sizeDelta.y + 50); } public float value => FatherTab.scalevalue; public void ReDraw(float value) { Texture2D Texture = new Texture2D((int)CurveCanvas.rectTransform.sizeDelta.x / 5, (int)CurveCanvas.rectTransform.sizeDelta.y / 5); for (int i = 0; i < Texture.width; i++) { for (int j = 0; j < Texture.height; j++) { Texture.SetPixel(i, j, new Color(0, 0, 0, 0)); } } Texture.Apply(); for (int i = 0; i < Texture.width; i++) { float t = (float)i / Texture.width; int f = (int)( (Texture.height / 2) + (animatedFloat.startValue * value + ((animatedFloat.endValue - animatedFloat.startValue) * AnimationCurveEvaluator.Evaluate(animatedFloat.animationCurveType, t) * value)) ); if (f < Texture.height) Texture.SetPixel(i, f, Color.green);//丑陋 else Texture.SetPixel(i, f, Color.red); } Texture.Apply(); CurveCanvas.texture = Texture; if (NextEventPoint != null) { OvDrawimage.transform.localPosition = new Vector3(RightSide.transform.localPosition.x, animatedFloat.endValue * value * 5, 0); OvDrawimage.rectTransform.sizeDelta = new Vector2((NextEventPoint.animatedFloat.startTime - animatedFloat.endTime) / EditorManager.instance.uiManager.timeline.timePerBeat * FatherTab.BeatDeviver, OvDrawimage.rectTransform.sizeDelta.y); OvDrawimage.color = new Color(0, 1, 0, 1); while (OvDrawimage.transform.localPosition.y > 130) { OvDrawimage.color = new Color(1, 0, 0, 0.3f); OvDrawimage.transform.localPosition = new Vector3(OvDrawimage.transform.localPosition.x, OvDrawimage.transform.localPosition.y - 260, OvDrawimage.transform.localPosition.z); } while (OvDrawimage.transform.localPosition.y < -130) { OvDrawimage.color = new Color(1, 0, 0, 0.3f); OvDrawimage.transform.localPosition = new Vector3(OvDrawimage.transform.localPosition.x, OvDrawimage.transform.localPosition.y + 260, OvDrawimage.transform.localPosition.z); } } else { OvDrawimage.rectTransform.sizeDelta = new Vector2(0, OvDrawimage.rectTransform.sizeDelta.y ); } selectButton.transform.localPosition = EvDrawimage.transform.localPosition; selectButton.GetComponent().sizeDelta = EvDrawimage.rectTransform.sizeDelta; } public void UpLoad() { if (FatherTab.FatherWindow.ConnectedPoint == this) { FatherTab.FatherWindow.VisibleArea.SetActive(false); FatherTab.FatherWindow.ConnectedPoint = null; EvDrawimage.color = new Color( EvDrawimage.color.r, 0.3019607843137255f, EvDrawimage.color.b, 0.5f ); FatherTab.FatherWindow.StartText.text = ""; FatherTab.FatherWindow.EndText.text = ""; FatherTab.FatherWindow.StartValueText.text = ""; FatherTab.FatherWindow.EndValueText.text = ""; return; } if (FatherTab.FatherWindow.ConnectedPoint != null) { FatherTab.FatherWindow.ConnectedPoint.EvDrawimage.color = new Color( FatherTab.FatherWindow.ConnectedPoint.EvDrawimage.color.r, 0.3019607843137255f, FatherTab.FatherWindow.ConnectedPoint.EvDrawimage.color.b, 0.5f) ; } List enumNameList = System.Enum.GetNames(typeof(AnimationCurveType)).ToList(); FatherTab.FatherWindow.VisibleArea.SetActive(true); FatherTab.FatherWindow.animationCurveTypeDropdown.ClearOptions(); FatherTab.FatherWindow.animationCurveTypeDropdown.AddOptions(enumNameList); FatherTab.FatherWindow.animationCurveTypeDropdown.value = (int)animatedFloat.animationCurveType; FatherTab.FatherWindow.ConnectedPoint = this; EvDrawimage.color = new Color( EvDrawimage.color.r, 0.75f, EvDrawimage.color.b, 1f); FatherTab.FatherWindow.StartText.text = animatedFloat.startTime.ToString(); FatherTab.FatherWindow.EndText.text = animatedFloat.endTime.ToString(); FatherTab.FatherWindow.StartValueText.text = animatedFloat.startValue.ToString(); FatherTab.FatherWindow.EndValueText.text = animatedFloat.endValue.ToString(); } }