This is a UI component that lets users type an opponent's name. It binds the text entry state to an OpponentSetup object and calls a method on the CityGame object when text changes.
using CitySim.Ai;
using Sandbox.UI;
namespace CitySim;
/// <summary>Keep the caret stable during setup refreshes; report native edit events.</summary>
public sealed class OpponentNameEntry : TextEntry
{
[Parameter] public CityGame City { get; set; }
[Parameter] public OpponentSetup Opponent { get; set; }
protected override void OnParametersSet()
{
base.OnParametersSet();
MaxLength=SoloSetup.MaximumNameLength;
Placeholder=GameText.Get("ui.opponent_name_entry.name");
AddClass("opponent-name");
if (!HasFocus && Opponent!=null && Text!=Opponent.Name) Text=Opponent.Name;
OnTextEdited=value=> { if(Opponent!=null) City.EditOpponent(Opponent.Seat,value,Opponent.Difficulty); };
}
}