Refactor stations to properly use entity prototypes. (stationsv3) (#16570)

* Update StationSpawningSystem.cs

Web-edit to allow feeding in an existing entity.

* Update StationSpawningSystem.cs

value type moment

* Update StationSpawningSystem.cs

* Oh goddamnit this is a refactor now.

* awawawa

* aaaaaaaaaaa

* ee

* forgot records.

* no records? no records.

* What's in a name?

* Sloth forcing me to do the refactor properly smh.

* e

* optional evac in test.

* tests pls work

* awa

---------

Co-authored-by: moonheart08 <moonheart08@users.noreply.github.com>
This commit is contained in:
Moony
2023-05-19 15:45:09 -05:00
committed by GitHub
parent 0d9b9e113e
commit e92a8fedab
77 changed files with 1176 additions and 987 deletions

View File

@@ -50,15 +50,9 @@ public sealed class StationSpawningSystem : EntitySystem
/// <inheritdoc/>
public override void Initialize()
{
SubscribeLocalEvent<StationInitializedEvent>(OnStationInitialized);
_configurationManager.OnValueChanged(CCVars.ICRandomCharacters, e => _randomizeCharacters = e, true);
}
private void OnStationInitialized(StationInitializedEvent ev)
{
AddComp<StationSpawningComponent>(ev.Station);
}
/// <summary>
/// Attempts to spawn a player character onto the given station.
/// </summary>
@@ -95,16 +89,19 @@ public sealed class StationSpawningSystem : EntitySystem
/// <param name="job">Job to assign to the character, if any.</param>
/// <param name="profile">Appearance profile to use for the character.</param>
/// <param name="station">The station this player is being spawned on.</param>
/// <param name="entity">The entity to use, if one already exists.</param>
/// <returns>The spawned entity</returns>
public EntityUid SpawnPlayerMob(
EntityCoordinates coordinates,
Job? job,
HumanoidCharacterProfile? profile,
EntityUid? station)
EntityUid? station,
EntityUid? entity = null)
{
// If we're not spawning a humanoid, we're gonna exit early without doing all the humanoid stuff.
if (job?.JobEntity != null)
{
DebugTools.Assert(entity is null);
var jobEntity = EntityManager.SpawnEntity(job.JobEntity, coordinates);
MakeSentientCommand.MakeSentient(jobEntity, EntityManager);
DoJobSpecials(job, jobEntity);
@@ -131,7 +128,7 @@ public sealed class StationSpawningSystem : EntitySystem
if (!_prototypeManager.TryIndex<SpeciesPrototype>(speciesId, out var species))
throw new ArgumentException($"Invalid species prototype was used: {speciesId}");
var entity = Spawn(species.Prototype, coordinates);
entity ??= Spawn(species.Prototype, coordinates);
if (_randomizeCharacters)
{
@@ -141,24 +138,24 @@ public sealed class StationSpawningSystem : EntitySystem
if (job?.StartingGear != null)
{
var startingGear = _prototypeManager.Index<StartingGearPrototype>(job.StartingGear);
EquipStartingGear(entity, startingGear, profile);
EquipStartingGear(entity.Value, startingGear, profile);
if (profile != null)
EquipIdCard(entity, profile.Name, job.Prototype, station);
EquipIdCard(entity.Value, profile.Name, job.Prototype, station);
}
if (profile != null)
{
_humanoidSystem.LoadProfile(entity, profile);
MetaData(entity).EntityName = profile.Name;
_humanoidSystem.LoadProfile(entity.Value, profile);
MetaData(entity.Value).EntityName = profile.Name;
if (profile.FlavorText != "" && _configurationManager.GetCVar(CCVars.FlavorText))
{
AddComp<DetailExaminableComponent>(entity).Content = profile.FlavorText;
AddComp<DetailExaminableComponent>(entity.Value).Content = profile.FlavorText;
}
}
DoJobSpecials(job, entity);
_identity.QueueIdentityUpdate(entity);
return entity;
DoJobSpecials(job, entity.Value);
_identity.QueueIdentityUpdate(entity.Value);
return entity.Value;
}
private void DoJobSpecials(Job? job, EntityUid entity)