// Assets/_Project/Scripts/Editor/Gameplay/RunDefinitionEditor.cs
using UnityEditor;
using UnityEngine;
using TD.Gameplay.Waves;
namespace TD.Editor.Gameplay
{
///
/// Inspector for . Draws the normal fields, then a live
/// validation panel reporting whether the authored pools can actually produce a run.
///
///
/// The check that matters here is the distinct-enemy-type one: because enemy upgrades are
/// keyed to a wave slot, a phase must be able to fill its cycle with waves that use different
/// enemies. A pool can look healthy (plenty of entries) and still fail that. Reporting it in
/// the inspector turns a startup error into something a designer sees while authoring.
///
[CustomEditor(typeof(RunDefinition))]
public class RunDefinitionEditor : UnityEditor.Editor
{
public override void OnInspectorGUI()
{
DrawDefaultInspector();
var run = (RunDefinition)target;
EditorGUILayout.Space();
EditorGUILayout.LabelField("Validation", EditorStyles.boldLabel);
bool ok = run.Validate(out string report);
EditorGUILayout.HelpBox(report, ok ? MessageType.Info : MessageType.Error);
// Per-phase capacity readout — the fastest way to see how much headroom a pool has
// before the distinct-type requirement starts biting.
if (run.Phases != null)
{
EditorGUILayout.Space();
EditorGUILayout.LabelField("Phase capacity", EditorStyles.boldLabel);
for (int i = 0; i < run.Phases.Length; i++)
{
var phase = run.Phases[i];
if (phase == null)
{
EditorGUILayout.LabelField($"Phase {i + 1}", "— empty —");
continue;
}
int distinct = phase.CountDistinctEnemyTypes();
string value = $"{distinct} distinct enemy type(s) / {run.WavesPerCycle} needed";
var style = new GUIStyle(EditorStyles.label)
{
normal = { textColor = distinct >= run.WavesPerCycle
? EditorStyles.label.normal.textColor
: new Color(0.9f, 0.4f, 0.3f) }
};
EditorGUILayout.LabelField(phase.Label, value, style);
}
}
EditorGUILayout.Space();
if (GUILayout.Button("Rebuild Wave Index"))
{
run.RebuildIndex();
Debug.Log($"[RunDefinition] Rebuilt wave index: {run.WaveCount} distinct wave(s).");
}
}
}
}