IFD敌人初步

This commit is contained in:
SoulliesOfficial
2026-06-14 04:17:41 -04:00
parent a024305799
commit c9d9f60073
10 changed files with 21101 additions and 163 deletions

View File

@@ -712,9 +712,18 @@ namespace Cielonos.MainGame.Editor
// Mouse up
if (e.type == EventType.MouseUp)
{
if (currentDragMode == DragMode.MoveBeat && draggingBeatIndex >= 0)
if (currentDragMode == DragMode.MoveBeat && draggingBeatIndex >= 0 && draggingBeatIndex < targetData.beatMarkers.Count)
{
// Snap if close to grid
var draggedMarker = targetData.beatMarkers[draggingBeatIndex];
targetData.SortBeats(); // Keep sorted after drag
// Re-select the dragged marker
int newIndex = targetData.beatMarkers.IndexOf(draggedMarker);
selectedBeatIndex = newIndex;
selectedBeatIndices.Clear();
if (newIndex != -1)
selectedBeatIndices.Add(newIndex);
EditorUtility.SetDirty(targetData);
}
@@ -958,16 +967,39 @@ namespace Cielonos.MainGame.Editor
Undo.RecordObject(targetData, "Snap Beats to Grid");
// Cache the selected markers before sorting changes their indices
List<BeatMarker> selectedMarkers = new List<BeatMarker>();
foreach (int idx in selectedBeatIndices)
{
if (idx < 0 || idx >= targetData.beatMarkers.Count) continue;
var marker = targetData.beatMarkers[idx];
if (idx >= 0 && idx < targetData.beatMarkers.Count)
{
selectedMarkers.Add(targetData.beatMarkers[idx]);
}
}
foreach (var marker in selectedMarkers)
{
float adjustedTime = marker.time - targetData.audioStartOffset;
int nearestBeatNum = Mathf.RoundToInt(adjustedTime / beatInterval);
marker.time = targetData.audioStartOffset + nearestBeatNum * beatInterval;
}
targetData.SortBeats(); // Keep sorted
targetData.RecalculateBarIndices();
// Re-select markers by finding their new indices
selectedBeatIndices.Clear();
selectedBeatIndex = -1;
for (int i = 0; i < targetData.beatMarkers.Count; i++)
{
if (selectedMarkers.Contains(targetData.beatMarkers[i]))
{
selectedBeatIndices.Add(i);
if (selectedBeatIndex == -1)
selectedBeatIndex = i;
}
}
EditorUtility.SetDirty(targetData);
isDirty = true;
}
@@ -1008,6 +1040,7 @@ namespace Cielonos.MainGame.Editor
var marker = new BeatMarker(time, tags);
targetData.beatMarkers.Add(marker);
targetData.SortBeats(); // Keep sorted
// Calculate bar/beat index
float beatInterval = targetData.BeatInterval;
@@ -1019,7 +1052,8 @@ namespace Cielonos.MainGame.Editor
marker.beatInBar = totalBeat % targetData.beatsPerBar;
}
int newIndex = targetData.beatMarkers.Count - 1;
// Find the new index after sorting
int newIndex = targetData.beatMarkers.IndexOf(marker);
selectedBeatIndex = newIndex;
selectedBeatIndices.Clear();
selectedBeatIndices.Add(newIndex);