diff --git a/Assets/Scripts/LevelEditor/Timeline/Timeline.cs b/Assets/Scripts/LevelEditor/Timeline/Timeline.cs index f4946664..7af5c5b1 100644 --- a/Assets/Scripts/LevelEditor/Timeline/Timeline.cs +++ b/Assets/Scripts/LevelEditor/Timeline/Timeline.cs @@ -64,7 +64,7 @@ namespace RhythmHeavenMania.Editor.Track [SerializeField] private RectTransform TimelineSlider; [SerializeField] private RectTransform TimelineGridSelect; [SerializeField] private TMP_Text TimelinePlaybackBeat; - [SerializeField] private RectTransform TimelineContent; + public RectTransform TimelineContent; [SerializeField] private RectTransform TimelineSongPosLineRef; [SerializeField] private RectTransform TimelineEventObjRef; [SerializeField] private RectTransform LayersRect; diff --git a/Assets/Scripts/LevelEditor/Timeline/TimelineEventObj.cs b/Assets/Scripts/LevelEditor/Timeline/TimelineEventObj.cs index 60911f7f..b880980e 100644 --- a/Assets/Scripts/LevelEditor/Timeline/TimelineEventObj.cs +++ b/Assets/Scripts/LevelEditor/Timeline/TimelineEventObj.cs @@ -81,8 +81,17 @@ namespace RhythmHeavenMania.Editor.Track #region Optimizations - // problem with long objects but im lazy right now + // thank you to @chrislo27 for suggesting the fix for this. + // only renders blocks if they're in view of the timeline viewport bool visible = rectTransform.IsVisibleFrom(Editor.instance.EditorCamera); + var leftSide = rectTransform.localPosition.x; + var rightSide = leftSide + rectTransform.sizeDelta.x; + + var timelineLeftSide = (Timeline.instance.TimelineContent.localPosition.x / 100f) * -1; + var timelineRightSide = timelineLeftSide + 10.563f; // what a magic number, i'm sure I could calculate this but I'm lazy + + visible = (rightSide >= timelineLeftSide && leftSide <= timelineRightSide); + if (visible != lastVisible) {