Ui/OpponentNameEntry.cs

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); };
    }
}