67 lines
2.2 KiB
C#
67 lines
2.2 KiB
C#
#if UNITY_EDITOR
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
namespace Game.Scripts.Runtime.Spawning.Editor
|
|
{
|
|
[CustomEditor(typeof(EnemySpawner))]
|
|
public class EnemySpawnerGizmos : UnityEditor.Editor
|
|
{
|
|
public override void OnInspectorGUI()
|
|
{
|
|
base.OnInspectorGUI();
|
|
|
|
using (new EditorGUI.DisabledScope(!Application.isPlaying))
|
|
{
|
|
if (GUILayout.Button("Force Spawn Test Enemy"))
|
|
{
|
|
var spawner = (EnemySpawner)target;
|
|
var table = spawner.ActiveTable;
|
|
if (table != null)
|
|
{
|
|
var def = table.Pick(spawner.CurrentWaveIndex, new System.Random());
|
|
if (def != null)
|
|
{
|
|
spawner.TrySpawn(def);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private void OnSceneGUI()
|
|
{
|
|
var spawner = (EnemySpawner)target;
|
|
var config = spawner.ActiveConfig;
|
|
var player = spawner.PlayerTransform;
|
|
if (config == null || player == null || !config.DrawGizmos)
|
|
{
|
|
return;
|
|
}
|
|
|
|
Handles.color = new Color(1f, 0.8f, 0f, 0.7f);
|
|
Handles.DrawWireDisc(player.position, Vector3.up, config.MinSpawnRadius);
|
|
Handles.color = new Color(1f, 0f, 0f, 0.7f);
|
|
Handles.DrawWireDisc(player.position, Vector3.up, config.MaxSpawnRadius);
|
|
|
|
var samples = spawner.RecentSamples;
|
|
if (samples != null)
|
|
{
|
|
foreach (var sample in samples)
|
|
{
|
|
Handles.color = sample.Accepted ? Color.green : Color.magenta;
|
|
Handles.SphereHandleCap(0, sample.Position, Quaternion.identity, 0.35f, EventType.Repaint);
|
|
}
|
|
}
|
|
|
|
Handles.BeginGUI();
|
|
GUILayout.BeginArea(new Rect(12f, 12f, 200f, 70f), GUI.skin.box);
|
|
GUILayout.Label("Spawner Debug", EditorStyles.boldLabel);
|
|
GUILayout.Label($"Active: {spawner.ActiveEnemyCount}/{config.MaxConcurrent}");
|
|
GUILayout.EndArea();
|
|
Handles.EndGUI();
|
|
}
|
|
}
|
|
}
|
|
#endif
|