Add Job preference tests (#28625)
* Misc Job related changes * Add JobTest * A * Aa * Lets not confuse the yaml linter * fixes * a
This commit is contained in:
@@ -52,23 +52,23 @@ public sealed partial class StationJobsSystem
|
||||
/// as there may end up being more round-start slots than available slots, which can cause weird behavior.
|
||||
/// A warning to all who enter ye cursed lands: This function is long and mildly incomprehensible. Best used without touching.
|
||||
/// </remarks>
|
||||
public Dictionary<NetUserId, (string?, EntityUid)> AssignJobs(Dictionary<NetUserId, HumanoidCharacterProfile> profiles, IReadOnlyList<EntityUid> stations, bool useRoundStartJobs = true)
|
||||
public Dictionary<NetUserId, (ProtoId<JobPrototype>?, EntityUid)> AssignJobs(Dictionary<NetUserId, HumanoidCharacterProfile> profiles, IReadOnlyList<EntityUid> stations, bool useRoundStartJobs = true)
|
||||
{
|
||||
DebugTools.Assert(stations.Count > 0);
|
||||
|
||||
InitializeRoundStart();
|
||||
|
||||
if (profiles.Count == 0)
|
||||
return new Dictionary<NetUserId, (string?, EntityUid)>();
|
||||
return new();
|
||||
|
||||
// We need to modify this collection later, so make a copy of it.
|
||||
profiles = profiles.ShallowClone();
|
||||
|
||||
// Player <-> (job, station)
|
||||
var assigned = new Dictionary<NetUserId, (string?, EntityUid)>(profiles.Count);
|
||||
var assigned = new Dictionary<NetUserId, (ProtoId<JobPrototype>?, EntityUid)>(profiles.Count);
|
||||
|
||||
// The jobs left on the stations. This collection is modified as jobs are assigned to track what's available.
|
||||
var stationJobs = new Dictionary<EntityUid, Dictionary<string, uint?>>();
|
||||
var stationJobs = new Dictionary<EntityUid, Dictionary<ProtoId<JobPrototype>, int?>>();
|
||||
foreach (var station in stations)
|
||||
{
|
||||
if (useRoundStartJobs)
|
||||
@@ -83,15 +83,15 @@ public sealed partial class StationJobsSystem
|
||||
|
||||
|
||||
// We reuse this collection. It tracks what jobs we're currently trying to select players for.
|
||||
var currentlySelectingJobs = new Dictionary<EntityUid, Dictionary<string, uint?>>(stations.Count);
|
||||
var currentlySelectingJobs = new Dictionary<EntityUid, Dictionary<ProtoId<JobPrototype>, int?>>(stations.Count);
|
||||
foreach (var station in stations)
|
||||
{
|
||||
currentlySelectingJobs.Add(station, new Dictionary<string, uint?>());
|
||||
currentlySelectingJobs.Add(station, new Dictionary<ProtoId<JobPrototype>, int?>());
|
||||
}
|
||||
|
||||
// And these.
|
||||
// Tracks what players are available for a given job in the current iteration of selection.
|
||||
var jobPlayerOptions = new Dictionary<string, HashSet<NetUserId>>();
|
||||
var jobPlayerOptions = new Dictionary<ProtoId<JobPrototype>, HashSet<NetUserId>>();
|
||||
// Tracks the total number of slots for the given stations in the current iteration of selection.
|
||||
var stationTotalSlots = new Dictionary<EntityUid, int>(stations.Count);
|
||||
// The share of the players each station gets in the current iteration of job selection.
|
||||
@@ -112,7 +112,7 @@ public sealed partial class StationJobsSystem
|
||||
var optionsRemaining = 0;
|
||||
|
||||
// Assigns a player to the given station, updating all the bookkeeping while at it.
|
||||
void AssignPlayer(NetUserId player, string job, EntityUid station)
|
||||
void AssignPlayer(NetUserId player, ProtoId<JobPrototype> job, EntityUid station)
|
||||
{
|
||||
// Remove the player from all possible jobs as that's faster than actually checking what they have selected.
|
||||
foreach (var (k, players) in jobPlayerOptions)
|
||||
@@ -273,8 +273,11 @@ public sealed partial class StationJobsSystem
|
||||
/// <param name="allPlayersToAssign">All players that might need an overflow assigned.</param>
|
||||
/// <param name="profiles">Player character profiles.</param>
|
||||
/// <param name="stations">The stations to consider for spawn location.</param>
|
||||
public void AssignOverflowJobs(ref Dictionary<NetUserId, (string?, EntityUid)> assignedJobs,
|
||||
IEnumerable<NetUserId> allPlayersToAssign, IReadOnlyDictionary<NetUserId, HumanoidCharacterProfile> profiles, IReadOnlyList<EntityUid> stations)
|
||||
public void AssignOverflowJobs(
|
||||
ref Dictionary<NetUserId, (ProtoId<JobPrototype>?, EntityUid)> assignedJobs,
|
||||
IEnumerable<NetUserId> allPlayersToAssign,
|
||||
IReadOnlyDictionary<NetUserId, HumanoidCharacterProfile> profiles,
|
||||
IReadOnlyList<EntityUid> stations)
|
||||
{
|
||||
var givenStations = stations.ToList();
|
||||
if (givenStations.Count == 0)
|
||||
|
||||
Reference in New Issue
Block a user