Merge branch 'phase/45-presence-talk'

# Conflicts:
#	docs/phases/README.md
#	src/HSchool.Server/Api/PeopleModels.cs
#	src/HSchool.Server/Game/PersonCardReader.cs
This commit is contained in:
Leonid Pershin
2026-08-20 11:27:58 +03:00
28 changed files with 679 additions and 41 deletions
+17
View File
@@ -218,6 +218,23 @@ public sealed class School : IDisposable
public IReadOnlyList<PresenceSnapshot> CapturePresence() => PresenceSystem.Capture(this);
/// <summary>
/// Live circle for the presence frame and the person card. Null when this person is not talking.
/// Member ids include self and are sorted; names stay off the wire.
/// </summary>
public TalkCirclePresence? TalkCircleOf(string personId)
{
if (!TalkCircleByPerson.TryGetValue(personId, out var circleId)
|| !TalkCirclesById.TryGetValue(circleId, out var circle))
{
return null;
}
var members = circle.Members.ToArray();
Array.Sort(members, StringComparer.Ordinal);
return new TalkCirclePresence(circle.TopicId, members);
}
public void RestorePresence(IReadOnlyList<PresenceSnapshot>? saved) => PresenceSystem.Restore(this, saved);
public bool IsCampusEmpty() => PresenceSystem.IsEmpty(this);