More PA fixes (#18131)

If the PA Control Box isn't rotated to match the Fuel Chamber, it actually rotates itself to match.

This rotation triggered a rotation event, which in turn caused RescanParts() to run again, re-entrantly. This broke everything.

Fixed by adding a boolean to just guard against this.
This commit is contained in:
Pieter-Jan Briers
2023-07-18 22:55:18 +02:00
committed by GitHub
parent 925971472f
commit a90e7585b9
2 changed files with 16 additions and 0 deletions

View File

@@ -23,6 +23,9 @@ public sealed partial class ParticleAcceleratorSystem
if (!Resolve(uid, ref controller))
return;
if (controller.CurrentlyRescanning)
return;
SwitchOff(uid, user, controller);
var partQuery = GetEntityQuery<ParticleAcceleratorPartComponent>();
@@ -67,6 +70,11 @@ public sealed partial class ParticleAcceleratorSystem
return;
}
// When we call SetLocalRotation down there to rotate the control box,
// that ends up re-entrantly calling RescanParts() through the move event.
// You'll have to take my word for it that that breaks everything, yeah?
controller.CurrentlyRescanning = true;
// Align ourselves to match fuel chamber orientation.
// This means that if you mess up the orientation of the control box it's not a big deal,
// because the sprite is far from obvious about the orientation.
@@ -112,6 +120,8 @@ public sealed partial class ParticleAcceleratorSystem
partState.Master = uid;
}
controller.CurrentlyRescanning = false;
UpdatePowerDraw(uid, controller);
UpdateUI(uid, controller);
}