The latter is very useful for any special machine cleanup that needs to happen when a machine is deconstructed.
The former will be useful for so many things!
- Completely rewrited the `ConstructionComponent` logic to be ECS, *without* looking too much at the original implementation.
- The original implementation was dirty and unmaintainable, whereas this new implementation is much cleaner, well-organized and maintainable. I've made sure to leave many comments around, explaining what everything does.
- Construction now has a framework for handling events other than `InteractUsing`.
- This means that you can now have CGL steps for things other than inserting items, using tools...
- Construction no longer uses `async` everywhere for `DoAfter`s. Instead it uses events.
- Construction event handling occurs in the `ConstructionSystem` update tick, instead of on event handlers.
- This ensures we can delete/modify entities without worrying about "collection modified while enumerating" exceptions.
- This also means the construction update tick is where all the fun happens, meaning it'll show up on our metrics and give us an idea of how expensive it is/how much tick time is spent in construction.
- `IGraphCondition` and `IGraphAction` have been refactored to take in `EntityUid`, `IEntityManager`, and to not be async.
- Removes nested steps, as they made maintainability significantly worse, and nothing used them yet.
- This fixes#4892 and fixes#4857
Please note, this leaves many things unchanged, as my idea is to split this into multiple PRs. Some unchanged things:
- Initial construction code is the same. In the future, it'll probably use dummy entities.
- Client-side guided steps are the same. In the future, the server will generate the guided steps and send them to clients as needed, caching these in both the server and client to save cycles and bandwidth.
- No new construction graph steps... Yet! 👀
* Migrate lots of pulling logic out of the components and clean it up
* It's buggy, but move more code out of the pullable component
* Pulling system now throws less errors than it did before the refactor
* Finally finish the big parts of refactoring pullability
* Pulling: Handle disconnect properly if the pull joint has been removed by physics shutdown
* Port 2b68449328 to this branch
* Changes as per PR reviews
* Port e801ffac45 (SharedJointSystem) and fix issues encountered during testing
SharedJointSystem.
Also, MinLength and Stiffness appear to have suddenly gained enough meaning that pulling is broken unless they're set.
* Disallow construction of construction ghosts from inside a container
* Move IsInContainer check to before doing container ensuring
* Move IsInContainer check to HandleStartStructureConstruction to allow building items but not construct structures when inside a cozy locker
* Update Resources/Locale/en-US/construction/construction-system.ftl
Co-authored-by: Vera Aguilera Puerto <6766154+Zumorica@users.noreply.github.com>
* Converted all SnapGridPositionChangedEvent subscriptions to AnchorStateChangedEvent.
* Fixes power tests with new anchored requirements.
* Moved AnchorableComponent into construction.
AnchorableComponent now uses Transform.Anchored.
* Fixed bug with nodes, power works again.
* Adds lifetime stages to Component.
* Update Engine to v0.4.70.
* Initial
* Cleanup a bunch of things
* some changes dunno
* RequireAnchored
* a
* stuff
* more work
* Lots of progress
* delete pipe visualizer
* a
* b
* pipenet and pipenode cleanup
* Fixes
* Adds GasValve
* Adds GasMiner
* Fix stuff, maybe?
* More fixes
* Ignored components on the client
* Adds thermomachine behavior, change a bunch of stuff
* Remove Anchored
* some work, but it's shitcode
* significantly more ECS
* ECS AtmosDevices
* Cleanup
* fix appearance
* when the pipe direction is sus
* Gas tanks and canisters
* pipe anchoring and stuff
* coding is my passion
* Unsafe pipes take longer to unanchor
* turns out we're no longer using eris canisters
* Gas canister inserted tank appearance, improvements
* Work on a bunch of appearances
* Scrubber appearance
* Reorganize AtmosphereSystem.Piping into a bunch of different systems
* Appearance for vent/scrubber/pump turns off when leaving atmosphere
* ThermoMachine appearance
* Cleanup gas tanks
* Remove passive gate unused imports
* remove old canister UI functionality
* PipeNode environment air, make everything use AssumeAir instead of merging manually
* a
* Reorganize atmos to follow new structure
* ?????
* Canister UI, restructure client
* Restructure shared
* Fix build tho
* listen, at least the canister UI works entirely...
* fix build : )
* Atmos device prototypes have names and descriptions
* gas canister ui slider doesn't jitter
* trinary prototypes
* sprite for miners
* ignore components
* fix YAML
* Fix port system doing useless thing
* Fix build
* fix thinking moment
* fix build again because
* canister direction
* pipenode is a word
* GasTank Air will throw on invalid states
* fix build....
* Unhardcode volume pump thresholds
* Volume pump and filter take time into account
* Rename Join/Leave atmosphere events to AtmosDeviceEnabled/Disabled Event
* Gas tank node volume is set by initial mixtuer
* I love node container
* Deprecate IActionBlocker in favour of cancellable events
* Bring back old speech/emoting component restrictions
* Rename action blocker listener methods
* Use Entity System public methods instead of extension methods
Co-authored-by: Vera Aguilera Puerto <gradientvera@outlook.com>