massive/client/chat/ChatOptions.cs
Benjamin Palko e680978f2d cleanup
2025-05-22 11:48:06 -04:00

60 lines
1.5 KiB
C#

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<LineEdit>("Username");
ColorPicker = GetNode<ColorPickerButton>("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;
}
}
}