using Godot; using SpacetimeDB; using SpacetimeDB.Types; public partial class ChatOptions : HBoxContainer { public LineEdit Username { get; private set; } public ColorPickerButton ColorPicker { get; private set; } public override void _EnterTree() { Username = GetNode("Username"); ColorPicker = GetNode("ColorPicker"); Username.TextSubmitted += OnUsernameInput; Username.FocusExited += ResetUsername; } public override void _Ready() { DbConnection conn = Spacetime.Instance.Connection; RegisterSubscriptions(conn); } string UserNameOrIdentity(User user) { return user != null ? user.Name ?? user.Identity.ToString()[..8] : "unknown"; } void ResetUsername() { Username.Text = UserNameOrIdentity(Spacetime.Instance.Me); } void OnUsernameInput(string text) { Spacetime.Instance.Connection.Reducers.SetName(text); } void RegisterSubscriptions(DbConnection conn) { conn.Reducers.OnSetName += Reducer_OnSetNameEvent; } /// Our `OnSetNameEvent` callback: print a warning if the reducer failed. void Reducer_OnSetNameEvent(ReducerEventContext ctx, string name) { var e = ctx.Event; if (e.CallerIdentity != Spacetime.Instance.Identity) { // Not me return; } if (e.Status is Status.Failed(var error)) { GD.PrintErr($"Failed to change name to {name}: {error}"); return; } } }