46 lines
1.8 KiB
C#
46 lines
1.8 KiB
C#
// Assets/_Project/Scripts/Gameplay/ISelectable.cs
|
|
using UnityEngine;
|
|
|
|
namespace TD.Gameplay
|
|
{
|
|
/// <summary>
|
|
/// Categorizes the kind of selectable object so HUD can decide which command
|
|
/// buttons (tower-build vs upgrade/sell vs none) to show without doing
|
|
/// type-tests against every concrete component.
|
|
/// </summary>
|
|
public enum SelectableKind
|
|
{
|
|
Builder,
|
|
Tower,
|
|
Enemy,
|
|
BuildSite, // tower in queued / constructing / paused / shelved state
|
|
}
|
|
|
|
/// <summary>
|
|
/// Anything the local player can click to select. Implementers expose a
|
|
/// display name for the HUD portrait, a kind for context-aware UI, and the
|
|
/// position + size hints the <see cref="SelectionVisualizer"/> needs to draw
|
|
/// the selection ring.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// Selection is a local UI concept — implementers don't need to be
|
|
/// NetworkBehaviours (though Builder and TowerInstance happen to be).
|
|
/// </remarks>
|
|
public interface ISelectable
|
|
{
|
|
string DisplayName { get; }
|
|
SelectableKind Kind { get; }
|
|
|
|
/// <summary>Transform whose XZ position the scene-wide selection ring
|
|
/// follows. The visualizer projects Y to the buildable plane regardless
|
|
/// of where this transform sits, so implementers can simply return
|
|
/// <c>this.transform</c>.</summary>
|
|
Transform SelectionTransform { get; }
|
|
|
|
/// <summary>Half-width of the selection ring in world units. The visualizer
|
|
/// scales its base 1-unit-diameter ring mesh to <c>2 * SelectionRadius</c>.
|
|
/// Computed on every selection change, so implementers may derive it from
|
|
/// runtime state (e.g., tower footprint, collider bounds).</summary>
|
|
float SelectionRadius { get; }
|
|
}
|
|
}
|