* Revert "Revert "Fix UninitializedSaveTest prototypes" (#16169)"
This reverts commit de1613f7ef.
* Invert if statement
This commit is contained in:
@@ -38,64 +38,6 @@ public sealed class PrototypeSaveTest
|
||||
{
|
||||
"Singularity", // physics collision uses "AllMask" (-1). The flag serializer currently fails to save this because this features un-named bits.
|
||||
"constructionghost",
|
||||
|
||||
// These ones are from the serialization change to alwayswrite.
|
||||
// These should NOT be added to.
|
||||
// 99% of these are going to be changing the physics bodytype (where the entity is anchored)
|
||||
// or some ambientsound change.
|
||||
"GasVentScrubber",
|
||||
"GasPassiveVent",
|
||||
"CableHV",
|
||||
"ParticleAcceleratorFuelChamberUnfinished",
|
||||
"ComfyChair",
|
||||
"PlasticFlapsOpaque",
|
||||
"ParticleAcceleratorEmitterRightUnfinished",
|
||||
"PlasticFlapsAirtightClear",
|
||||
"SignalControlledValve",
|
||||
"SignalControlledValve",
|
||||
"GasPipeTJunction",
|
||||
"GasFilter",
|
||||
"GasOutletInjector",
|
||||
"GasPressurePump",
|
||||
"SurveillanceWirelessCameraAnchoredEntertainment",
|
||||
"GasPort",
|
||||
"Chair",
|
||||
"GasMixer",
|
||||
"ParticleAcceleratorPowerBoxUnfinished",
|
||||
"GasValve",
|
||||
"Thruster",
|
||||
"BoxingBell",
|
||||
"CableApcExtension",
|
||||
"PlasticFlapsClear",
|
||||
"ClothingBackpackChameleon",
|
||||
"AMEControllerUnanchored",
|
||||
"GasPipeFourway",
|
||||
"NuclearBomb",
|
||||
"PlasticFlapsAirtightOpaque",
|
||||
"ParticleAcceleratorControlBoxUnfinished",
|
||||
"GasPipeHalf",
|
||||
"GasVolumePump",
|
||||
"ParticleAcceleratorEmitterLeftUnfinished",
|
||||
"GasMixerFlipped",
|
||||
"ToiletDirtyWater",
|
||||
"GasPipeBend",
|
||||
"ParticleAcceleratorEndCapUnfinished",
|
||||
"GasPipeStraight",
|
||||
"MachineFrameDestroyed",
|
||||
"ChairPilotSeat",
|
||||
"VehicleJanicartDestroyed",
|
||||
"Gyroscope",
|
||||
"ParticleAcceleratorEmitterCenterUnfinished",
|
||||
"ToiletEmpty",
|
||||
"GasPassiveGate",
|
||||
"CableMV",
|
||||
"ClothingBackpackChameleonFill",
|
||||
"GasDualPortVentPump",
|
||||
"GasVentPump",
|
||||
"PressureControlledValve",
|
||||
"GasFilterFlipped",
|
||||
"SurveillanceWirelessCameraAnchoredConstructed",
|
||||
|
||||
};
|
||||
|
||||
[Test]
|
||||
@@ -127,7 +69,7 @@ public sealed class PrototypeSaveTest
|
||||
|
||||
grid = mapManager.CreateGrid(mapId);
|
||||
|
||||
var tileDefinition = tileDefinitionManager["UnderPlating"];
|
||||
var tileDefinition = tileDefinitionManager["FloorSteel"]; // Wires n such disable ambiance while under the floor
|
||||
var tile = new Tile(tileDefinition.TileId);
|
||||
var coordinates = grid.ToCoordinates();
|
||||
|
||||
@@ -168,6 +110,7 @@ public sealed class PrototypeSaveTest
|
||||
foreach (var prototype in prototypes)
|
||||
{
|
||||
uid = entityMan.SpawnEntity(prototype.ID, testLocation);
|
||||
context.Prototype = prototype;
|
||||
|
||||
// get default prototype data
|
||||
Dictionary<string, MappingDataNode> protoData = new();
|
||||
@@ -177,9 +120,11 @@ public sealed class PrototypeSaveTest
|
||||
|
||||
foreach (var (compType, comp) in prototype.Components)
|
||||
{
|
||||
context.WritingComponent = compType;
|
||||
protoData.Add(compType, seriMan.WriteValueAs<MappingDataNode>(comp.Component.GetType(), comp.Component, alwaysWrite: true, context: context));
|
||||
}
|
||||
|
||||
context.WritingComponent = string.Empty;
|
||||
context.WritingReadingPrototypes = false;
|
||||
}
|
||||
catch (Exception e)
|
||||
@@ -202,6 +147,7 @@ public sealed class PrototypeSaveTest
|
||||
MappingDataNode compMapping;
|
||||
try
|
||||
{
|
||||
context.WritingComponent = compName;
|
||||
compMapping = seriMan.WriteValueAs<MappingDataNode>(compType, component, alwaysWrite: true, context: context);
|
||||
}
|
||||
catch (Exception e)
|
||||
@@ -246,6 +192,9 @@ public sealed class PrototypeSaveTest
|
||||
public SerializationManager.SerializerProvider SerializerProvider { get; }
|
||||
public bool WritingReadingPrototypes { get; set; }
|
||||
|
||||
public string WritingComponent = string.Empty;
|
||||
public EntityPrototype Prototype = default!;
|
||||
|
||||
public TestEntityUidContext()
|
||||
{
|
||||
SerializerProvider = new();
|
||||
@@ -262,6 +211,14 @@ public sealed class PrototypeSaveTest
|
||||
IDependencyCollection dependencies, bool alwaysWrite = false,
|
||||
ISerializationContext? context = null)
|
||||
{
|
||||
if (WritingComponent != "Transform" && !Prototype.NoSpawn)
|
||||
{
|
||||
// Maybe this will be necessary in the future, but at the moment it just indicates that there is some
|
||||
// issue, like a non-nullable entityUid data-field. If a component MUST have an entity uid to work with,
|
||||
// then the prototype very likely has to be a no-spawn entity that is never meant to be directly spawned.
|
||||
Assert.Fail($"Uninitialized entities should not be saving entity Uids. Component: {WritingComponent}. Prototype: {Prototype.ID}");
|
||||
}
|
||||
|
||||
return new ValueDataNode(value.ToString());
|
||||
}
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ public sealed class DragonRiftComponent : SharedDragonRiftComponent
|
||||
/// <summary>
|
||||
/// Dragon that spawned this rift.
|
||||
/// </summary>
|
||||
[DataField("dragon")] public EntityUid Dragon;
|
||||
[DataField("dragon")] public EntityUid? Dragon;
|
||||
|
||||
/// <summary>
|
||||
/// How long the rift has been active.
|
||||
|
||||
@@ -210,8 +210,8 @@ namespace Content.Server.Dragon
|
||||
|
||||
// We can't predict the rift being destroyed anyway so no point adding weakened to shared.
|
||||
dragon.WeakenedAccumulator = dragon.WeakenedDuration;
|
||||
_movement.RefreshMovementSpeedModifiers(component.Dragon);
|
||||
_popupSystem.PopupEntity(Loc.GetString("carp-rift-destroyed"), component.Dragon, component.Dragon);
|
||||
_movement.RefreshMovementSpeedModifiers(component.Dragon.Value);
|
||||
_popupSystem.PopupEntity(Loc.GetString("carp-rift-destroyed"), component.Dragon.Value, component.Dragon.Value);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -37,28 +37,28 @@ public sealed class LightningSystem : SharedLightningSystem
|
||||
|
||||
private void OnCollide(EntityUid uid, LightningComponent component, ref StartCollideEvent args)
|
||||
{
|
||||
if (!TryComp<BeamComponent>(uid, out var lightningBeam) || !TryComp<BeamComponent>(lightningBeam.VirtualBeamController, out var beamController))
|
||||
{
|
||||
if (!TryComp<BeamComponent>(uid, out var lightningBeam)
|
||||
|| !TryComp<BeamComponent>(lightningBeam.VirtualBeamController, out var beamController))
|
||||
return;
|
||||
}
|
||||
|
||||
if (component.CanArc)
|
||||
{
|
||||
while (beamController.CreatedBeams.Count < component.MaxTotalArcs)
|
||||
{
|
||||
Arc(component, args.OtherFixture.Body.Owner, lightningBeam.VirtualBeamController.Value);
|
||||
if (!component.CanArc || beamController.CreatedBeams.Count >= component.MaxTotalArcs)
|
||||
return;
|
||||
|
||||
Arc(component, args.OtherEntity, lightningBeam.VirtualBeamController.Value);
|
||||
|
||||
if (component.ArcTarget == null)
|
||||
return;
|
||||
|
||||
var spriteState = LightningRandomizer();
|
||||
component.ArcTargets.Add(args.OtherEntity);
|
||||
component.ArcTargets.Add(component.ArcTarget.Value);
|
||||
|
||||
component.ArcTargets.Add(args.OtherFixture.Body.Owner);
|
||||
component.ArcTargets.Add(component.ArcTarget);
|
||||
|
||||
_beam.TryCreateBeam(args.OtherFixture.Body.Owner, component.ArcTarget, component.LightningPrototype, spriteState, controller: lightningBeam.VirtualBeamController.Value);
|
||||
|
||||
//Break from this loop so other created bolts can collide and arc
|
||||
break;
|
||||
}
|
||||
}
|
||||
_beam.TryCreateBeam(
|
||||
args.OtherEntity,
|
||||
component.ArcTarget.Value,
|
||||
component.LightningPrototype,
|
||||
spriteState,
|
||||
controller: lightningBeam.VirtualBeamController.Value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -34,7 +34,7 @@ public abstract class SharedLightningComponent : Component
|
||||
/// The target that the lightning will Arc to.
|
||||
/// </summary>
|
||||
[DataField("arcTarget")]
|
||||
public EntityUid ArcTarget;
|
||||
public EntityUid? ArcTarget;
|
||||
|
||||
/// <summary>
|
||||
/// How far should this lightning go?
|
||||
|
||||
@@ -9,9 +9,6 @@
|
||||
tags: [] # ignore "WhitelistChameleon" tag
|
||||
- type: Sprite
|
||||
sprite: Clothing/Back/Backpacks/backpack.rsi
|
||||
netsync: false
|
||||
- type: Clothing
|
||||
sprite: Clothing/Back/Backpacks/backpack.rsi
|
||||
- type: ChameleonClothing
|
||||
slot: [back]
|
||||
default: ClothingBackpack
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
name: lightning
|
||||
id: Lightning
|
||||
parent: BaseLightning
|
||||
noSpawn: true
|
||||
components:
|
||||
- type: Lightning
|
||||
canArc: true
|
||||
@@ -42,6 +43,7 @@
|
||||
name: spooky lightning
|
||||
id: LightningRevenant
|
||||
parent: BaseLightning
|
||||
noSpawn: true
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: /Textures/Effects/lightning.rsi
|
||||
@@ -65,6 +67,7 @@
|
||||
name: charged lightning
|
||||
id: ChargedLightning
|
||||
parent: BaseLightning
|
||||
noSpawn: true
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: /Textures/Effects/lightning.rsi
|
||||
@@ -83,6 +86,7 @@
|
||||
name: supercharged lightning
|
||||
id: SuperchargedLightning
|
||||
parent: ChargedLightning
|
||||
noSpawn: true
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: /Textures/Effects/lightning.rsi
|
||||
@@ -108,6 +112,7 @@
|
||||
name: hypercharged lightning
|
||||
id: HyperchargedLightning
|
||||
parent: ChargedLightning
|
||||
noSpawn: true
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: /Textures/Effects/lightning.rsi
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
noRot: true
|
||||
state: nuclearbomb_base
|
||||
- type: Physics
|
||||
bodyType: Dynamic
|
||||
bodyType: Static
|
||||
- type: Fixtures
|
||||
fixtures:
|
||||
fix1:
|
||||
|
||||
@@ -57,6 +57,8 @@
|
||||
components:
|
||||
- type: Transform
|
||||
anchored: true
|
||||
- type: Physics
|
||||
bodyType: Static
|
||||
- type: Anchorable
|
||||
- type: Rotatable
|
||||
- type: Sprite
|
||||
@@ -128,6 +130,8 @@
|
||||
components:
|
||||
- type: Transform
|
||||
anchored: true
|
||||
- type: Physics
|
||||
bodyType: Static
|
||||
- type: Anchorable
|
||||
- type: Rotatable
|
||||
- type: Sprite
|
||||
@@ -144,6 +148,8 @@
|
||||
components:
|
||||
- type: Transform
|
||||
anchored: true
|
||||
- type: Physics
|
||||
bodyType: Static
|
||||
- type: Anchorable
|
||||
- type: Rotatable
|
||||
- type: Sprite
|
||||
|
||||
@@ -27,6 +27,8 @@
|
||||
maxVol: 250
|
||||
- type: Transform
|
||||
anchored: true
|
||||
- type: Physics
|
||||
bodyType: Static
|
||||
- type: Construction
|
||||
graph: Toilet
|
||||
node: toilet
|
||||
|
||||
@@ -124,6 +124,8 @@
|
||||
- type: Transform
|
||||
anchored: true
|
||||
noRot: true
|
||||
- type: Physics
|
||||
bodyType: Static
|
||||
- type: Construction
|
||||
graph: Machine
|
||||
node: destroyedMachineFrame
|
||||
|
||||
@@ -49,6 +49,8 @@
|
||||
- type: Anchorable
|
||||
- type: Transform
|
||||
anchored: true
|
||||
- type: Physics
|
||||
bodyType: Static
|
||||
- type: Sprite
|
||||
noRot: true
|
||||
sprite: Structures/monitors.rsi
|
||||
|
||||
@@ -175,7 +175,7 @@
|
||||
graph: GasBinary
|
||||
node: valve
|
||||
- type: AmbientSound
|
||||
enabled: false
|
||||
enabled: true
|
||||
volume: -9
|
||||
range: 5
|
||||
sound:
|
||||
@@ -229,7 +229,7 @@
|
||||
graph: GasBinary
|
||||
node: signalvalve
|
||||
- type: AmbientSound
|
||||
enabled: false
|
||||
enabled: true
|
||||
volume: -9
|
||||
range: 5
|
||||
sound:
|
||||
@@ -313,6 +313,8 @@
|
||||
!type:PipeNode
|
||||
nodeGroupID: Pipe
|
||||
pipeDirection: South
|
||||
- type: AmbientSound
|
||||
enabled: true
|
||||
|
||||
- type: entity
|
||||
parent: [ BaseMachine, ConstructibleMachine ]
|
||||
@@ -355,7 +357,7 @@
|
||||
- type: AtmosDevice
|
||||
- type: AtmosPipeColor
|
||||
- type: AmbientSound
|
||||
enabled: false
|
||||
enabled: true
|
||||
volume: -9
|
||||
range: 5
|
||||
sound:
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
- Pipe
|
||||
- type: Physics
|
||||
canCollide: false
|
||||
bodyType: static
|
||||
- type: AmbientSound
|
||||
enabled: false
|
||||
volume: -15
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
node: ventpump
|
||||
- type: VentCritterSpawnLocation
|
||||
- type: AmbientSound
|
||||
enabled: false
|
||||
enabled: true
|
||||
volume: -12
|
||||
range: 5
|
||||
sound:
|
||||
@@ -171,7 +171,7 @@
|
||||
graph: GasUnary
|
||||
node: ventscrubber
|
||||
- type: AmbientSound
|
||||
enabled: false
|
||||
enabled: true
|
||||
volume: -12
|
||||
range: 5
|
||||
sound:
|
||||
|
||||
@@ -45,8 +45,6 @@
|
||||
suffix: Unfinished
|
||||
description: This controls the density of the particles. It looks unfinished.
|
||||
components:
|
||||
- type: Physics
|
||||
bodyType: Dynamic
|
||||
- type: Sprite
|
||||
sprite: Structures/Power/Generation/PA/control_box.rsi
|
||||
- type: Construction
|
||||
|
||||
@@ -46,8 +46,6 @@
|
||||
suffix: Unfinished, Left
|
||||
description: This launchs the Alpha particles, might not want to stand near this end. It looks unfinished.
|
||||
components:
|
||||
- type: Physics
|
||||
bodyType: Dynamic
|
||||
- type: Sprite
|
||||
sprite: Structures/Power/Generation/PA/emitter_left.rsi
|
||||
- type: Construction
|
||||
@@ -60,8 +58,6 @@
|
||||
suffix: Unfinished
|
||||
description: This launchs the Alpha particles, might not want to stand near this end. It looks unfinished.
|
||||
components:
|
||||
- type: Physics
|
||||
bodyType: Dynamic
|
||||
- type: Sprite
|
||||
sprite: Structures/Power/Generation/PA/emitter_center.rsi
|
||||
- type: Construction
|
||||
@@ -74,8 +70,6 @@
|
||||
suffix: Unfinished
|
||||
description: This launchs the Alpha particles, might not want to stand near this end. It looks unfinished.
|
||||
components:
|
||||
- type: Physics
|
||||
bodyType: Dynamic
|
||||
- type: Sprite
|
||||
sprite: Structures/Power/Generation/PA/emitter_right.rsi
|
||||
- type: Construction
|
||||
|
||||
@@ -22,8 +22,6 @@
|
||||
suffix: Unfinished
|
||||
description: Formally known as the Alpha Particle Generation Array. This is where Alpha particles are generated from [REDACTED]. It looks unfinished.
|
||||
components:
|
||||
- type: Physics
|
||||
bodyType: Dynamic
|
||||
- type: Sprite
|
||||
sprite: Structures/Power/Generation/PA/end_cap.rsi
|
||||
- type: Construction
|
||||
|
||||
@@ -19,8 +19,6 @@
|
||||
suffix: Unfinished
|
||||
description: Formally known as the EM Acceleration Chamber. This is where the Alpha particles are accelerated to radical speeds. It looks unfinished.
|
||||
components:
|
||||
- type: Physics
|
||||
bodyType: Dynamic
|
||||
- type: Sprite
|
||||
sprite: Structures/Power/Generation/PA/fuel_chamber.rsi
|
||||
- type: Construction
|
||||
|
||||
@@ -25,8 +25,6 @@
|
||||
suffix: Unfinished
|
||||
description: Formally known as the Particle Focusing EM Lens. This uses electromagnetic waves to focus the Alpha-Particles. It looks unfinished.
|
||||
components:
|
||||
- type: Physics
|
||||
bodyType: Dynamic
|
||||
- type: Sprite
|
||||
sprite: Structures/Power/Generation/PA/power_box.rsi
|
||||
- type: Construction
|
||||
|
||||
@@ -83,6 +83,8 @@
|
||||
id: AMEControllerUnanchored
|
||||
suffix: Unanchored
|
||||
components:
|
||||
- type: Transform
|
||||
anchored: false
|
||||
- type: Physics
|
||||
bodyType: Dynamic
|
||||
|
||||
|
||||
@@ -11,6 +11,9 @@
|
||||
- type: Transform
|
||||
anchored: true
|
||||
noRot: true
|
||||
- type: Physics
|
||||
bodyType: Static
|
||||
canCollide: false
|
||||
- type: Sprite
|
||||
netsync: false
|
||||
drawdepth: ThinWire
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
path: /Audio/Effects/shuttle_thruster.ogg
|
||||
- type: Transform
|
||||
anchored: true
|
||||
- type: Physics
|
||||
bodyType: Static
|
||||
- type: Rotatable
|
||||
rotateWhileAnchored: true
|
||||
- type: Thruster
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
enabled: false
|
||||
- type: Physics
|
||||
canCollide: false
|
||||
bodyType: Dynamic
|
||||
bodyType: Static
|
||||
- type: Fixtures
|
||||
- type: Damageable
|
||||
damageContainer: Inorganic
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
state: plasticflaps
|
||||
drawdepth: Mobs
|
||||
- type: Physics
|
||||
bodyType: Static
|
||||
- type: Transform
|
||||
anchored: true
|
||||
- type: Fixtures
|
||||
|
||||
Reference in New Issue
Block a user