Refactor minds to be entities with components, make roles components (#19591)
Co-authored-by: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com> Co-authored-by: DrSmugleaf <DrSmugleaf@users.noreply.github.com>
This commit is contained in:
@@ -1,25 +1,25 @@
|
||||
using System.Linq;
|
||||
using Content.Server.Announcements;
|
||||
using Content.Server.Discord;
|
||||
using Content.Server.GameTicking.Events;
|
||||
using Content.Server.Ghost;
|
||||
using Content.Server.Maps;
|
||||
using Content.Server.Mind;
|
||||
using Content.Server.Players;
|
||||
using Content.Shared.Database;
|
||||
using Content.Shared.GameTicking;
|
||||
using Content.Shared.Preferences;
|
||||
using JetBrains.Annotations;
|
||||
using Prometheus;
|
||||
using Robust.Server.Maps;
|
||||
using Robust.Server.Player;
|
||||
using Robust.Shared.Asynchronous;
|
||||
using Robust.Shared.Audio;
|
||||
using Robust.Shared.Map;
|
||||
using Robust.Shared.Network;
|
||||
using Robust.Shared.Player;
|
||||
using Robust.Shared.Random;
|
||||
using Robust.Shared.Utility;
|
||||
using System.Linq;
|
||||
using Content.Server.Discord;
|
||||
using Content.Shared.Database;
|
||||
using Robust.Shared.Asynchronous;
|
||||
using PlayerData = Content.Server.Players.PlayerData;
|
||||
|
||||
namespace Content.Server.GameTicking
|
||||
{
|
||||
@@ -329,8 +329,8 @@ namespace Content.Server.GameTicking
|
||||
//Generate a list of basic player info to display in the end round summary.
|
||||
var listOfPlayerInfo = new List<RoundEndMessageEvent.RoundEndPlayerInfo>();
|
||||
// Grab the great big book of all the Minds, we'll need them for this.
|
||||
var allMinds = _mindTracker.AllMinds;
|
||||
foreach (var mind in allMinds)
|
||||
var allMinds = EntityQueryEnumerator<MindComponent>();
|
||||
while (allMinds.MoveNext(out var mindId, out var mind))
|
||||
{
|
||||
// TODO don't list redundant observer roles?
|
||||
// I.e., if a player was an observer ghost, then a hamster ghost role, maybe just list hamster and not
|
||||
@@ -338,7 +338,7 @@ namespace Content.Server.GameTicking
|
||||
var userId = mind.UserId ?? mind.OriginalOwnerUserId;
|
||||
|
||||
var connected = false;
|
||||
var observer = mind.AllRoles.Any(role => role is ObserverRole);
|
||||
var observer = HasComp<ObserverRoleComponent>(mindId);
|
||||
// Continuing
|
||||
if (userId != null && _playerManager.ValidSessionId(userId.Value))
|
||||
{
|
||||
@@ -350,7 +350,8 @@ namespace Content.Server.GameTicking
|
||||
contentPlayerData = playerData.ContentData();
|
||||
}
|
||||
// Finish
|
||||
var antag = mind.AllRoles.Any(role => role.Antagonist);
|
||||
|
||||
var antag = _roles.MindIsAntagonist(mindId);
|
||||
|
||||
var playerIcName = "Unknown";
|
||||
|
||||
@@ -363,6 +364,8 @@ namespace Content.Server.GameTicking
|
||||
if (Exists(entity))
|
||||
_pvsOverride.AddGlobalOverride(entity.Value, recursive: true);
|
||||
|
||||
var roles = _roles.MindGetAllRoles(mindId);
|
||||
|
||||
var playerEndRoundInfo = new RoundEndMessageEvent.RoundEndPlayerInfo()
|
||||
{
|
||||
// Note that contentPlayerData?.Name sticks around after the player is disconnected.
|
||||
@@ -372,8 +375,8 @@ namespace Content.Server.GameTicking
|
||||
PlayerICName = playerIcName,
|
||||
PlayerEntityUid = entity,
|
||||
Role = antag
|
||||
? mind.AllRoles.First(role => role.Antagonist).Name
|
||||
: mind.AllRoles.FirstOrDefault()?.Name ?? Loc.GetString("game-ticker-unknown-role"),
|
||||
? roles.First(role => role.Antagonist).Name
|
||||
: roles.FirstOrDefault().Name ?? Loc.GetString("game-ticker-unknown-role"),
|
||||
Antag = antag,
|
||||
Observer = observer,
|
||||
Connected = connected
|
||||
@@ -496,6 +499,13 @@ namespace Content.Server.GameTicking
|
||||
PlayerJoinLobby(player);
|
||||
}
|
||||
|
||||
// Round restart cleanup event, so entity systems can reset.
|
||||
var ev = new RoundRestartCleanupEvent();
|
||||
RaiseLocalEvent(ev);
|
||||
|
||||
// So clients' entity systems can clean up too...
|
||||
RaiseNetworkEvent(ev, Filter.Broadcast());
|
||||
|
||||
// Delete all entities.
|
||||
foreach (var entity in EntityManager.GetEntities().ToArray())
|
||||
{
|
||||
@@ -530,13 +540,6 @@ namespace Content.Server.GameTicking
|
||||
|
||||
_allPreviousGameRules.Clear();
|
||||
|
||||
// Round restart cleanup event, so entity systems can reset.
|
||||
var ev = new RoundRestartCleanupEvent();
|
||||
RaiseLocalEvent(ev);
|
||||
|
||||
// So clients' entity systems can clean up too...
|
||||
RaiseNetworkEvent(ev, Filter.Broadcast());
|
||||
|
||||
DisallowLateJoin = false;
|
||||
_playerGameStatuses.Clear();
|
||||
foreach (var session in _playerManager.ServerSessions)
|
||||
|
||||
Reference in New Issue
Block a user