Runtime UI under Scripts/UI: a UIStateController owning menu/dialogue state, a PlayerControlLock so opening a panel suppresses world input, panel visibility helpers, and the menu input binding. Views: the dialogue stream presenter and its options presenter and message row, the portrait HUD, and the player menu with character, journal, and tab-bar views. Skills gains SkillsPanelView and SkillRowView, which is why the Skills asmdef now references UnityEngine.UI. Prefabs/UI holds the authored canvases (dialogue stream, HUD, player menu) and their rows. UILayerBootstrap remains a hand-added runtime fallback for scenes where those prefabs are not instantiated; it deliberately does not auto-spawn. Editor/UILayerSetup.cs is the one-shot menu that builds and wires those prefabs into a scene, with UILayerSetupAutoRun reminding after a script reload. Art/UI/Placeholder carries the placeholder portrait the HUD falls back to. Co-Authored-By: Claude Opus 5 <[email protected]>
54 lines
1.4 KiB
C#
54 lines
1.4 KiB
C#
using TMPro;
|
|
using UnityEngine;
|
|
|
|
namespace NightclubArcadia.UI.Dialogue
|
|
{
|
|
/// <summary>
|
|
/// One message row in the dialogue stream: optional speaker name + body text.
|
|
/// </summary>
|
|
public sealed class DialogueMessageRow : MonoBehaviour
|
|
{
|
|
[SerializeField] TMP_Text speakerText;
|
|
[SerializeField] TMP_Text bodyText;
|
|
[SerializeField] GameObject speakerLabel;
|
|
|
|
public TMP_Text BodyText => bodyText;
|
|
|
|
public void SetContent(string speaker, string body)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(speaker))
|
|
{
|
|
if (speakerLabel != null)
|
|
{
|
|
speakerLabel.SetActive(false);
|
|
}
|
|
else if (speakerText != null)
|
|
{
|
|
speakerText.gameObject.SetActive(false);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (speakerLabel != null)
|
|
{
|
|
speakerLabel.SetActive(true);
|
|
}
|
|
else if (speakerText != null)
|
|
{
|
|
speakerText.gameObject.SetActive(true);
|
|
}
|
|
|
|
if (speakerText != null)
|
|
{
|
|
speakerText.text = speaker;
|
|
}
|
|
}
|
|
|
|
if (bodyText != null)
|
|
{
|
|
bodyText.text = body ?? string.Empty;
|
|
}
|
|
}
|
|
}
|
|
}
|