* refactor: extracted notify-on-non-functioning feature from emitter component
* refactor: revert server side PowerStateSystem usage of SubscribeLocalEvent - it is not calling base Initialize, skip SetWorkingState raising event on init
* refactor: ensureAPC is now conditional for powerstate
* refactor: fix double notifiation on destruction and on un-powering for emitter
* refactor: added LocTurnedOff for NotifyOnNonFunctioningComponent, fix double alert on destruction, removed emitter-deconstructed-broadcast as it is unused (cannot deconstruct withou unanchor)
* refactor: modernize server PowerStateSystem subscription
* refactor: update and modernize PowerStatePrototypeTest
* refactor: give APE specific radio message upon unlocking
* refactor: extracted PowerStateSystem.SetPowerLoad to split init from triggering is-working change event
* Update Content.Server/Power/EntitySystems/PowerStateSystem.cs
---------
Co-authored-by: AJCM-git <60196617+AJCM-git@users.noreply.github.com>
* update math
* target finder system
* ports
* guns with projectiles
* make sure
* custom sprites for the laser
* add auto link
* add module
* sprite for the missile
* update animation speed
* ops
* make it glow
* overlay sprite
* stuff that doesn't work
* update launcher
* fix it
* make it see from far
* make it work
* sprite for the module
* 30 seconds is too much
* sprite for the range finder
* why was that here?
* update sprite of the missile
* update module icon
* ops
* update missile and missile launcher
* make it look like the launcher item
* remove ammo counter from range finder
* increase to 15 seconds
* no longer show the battery percentage
* use comp
* change summary
* ops
* new line
* make it last longer
* commentary
* acme moment
* fix bug when shooter was also the target and the projectile wouldn't move
* empty commit
* fix test fail
* replace with global behavior
* forgot to remove from the yml
* important
* check to see if the target exists
* fix autorefill bug
* remove unused system
* make it reload a tad slower
---------
Co-authored-by: beck-thompson <beck314159@hotmail.com>
* Make every EntitySystem partial
* Oobs thats for a diff PR
* Also oops on that one
* Test systems
* git are we fr
* Update file templates
* cleanup empty classes while we are here
* forgor
---------
Co-authored-by: AJCM-git <ajcm_mail@disroot.org>
* verb category
* voltage toggle comp
* move stuff
* add simple prototype
* implement verb action
* switch expression
* fixed the node not updating
* charge the battery
* fixed battery not charging
* spawn on battery level system
* finally works
* swap commentary position
* can only anchor the extractor on the station
* popup message for trying to anchor outside of station
* default placement for unanchored version
* ops
* fix body type
* commentary
* update visuals of power consumer
* add custom sprite
* fix light layer not changing
* xenoborg circuit
* fix xenoborg circuit
* add tag
* add hand to hold xenoborg circuits
* move to material
* add xenoborg circuit material
* add recipe to mothership core
* add a hand to hold circuits to the mothership core
* to not confuse
* update
* ops
* another ops
* update mothership
* update guidebook
* update values
* more info
* fix stack
* can store xenoborg circuits
* description
* also update description
* circuit -> crytal
* not modified from anything
* update description
* Revert "update mothership"
This reverts commit 84974c56afadac2a99ed2a166244a668d83fff48.
* update empty label
* small update to sprite
* not necessary code
* remove empty line
* color
* make it explode when destroyed
* change values
* update sprite
* update sprite
* make it eletrified
* flavor text
* simplify to only use charge
* subscribe to event
* new line
* remove popup
* no need for the setter
* no longer networked
* feedback popups
* Minor tweaks
* better to understand
* better now?
* double the amount of power per crystal
* ajust power levels
* make modules cost more
* update guidebook with new values
* add popup back
* i love solving merge issues
* remove readonly
* use Transform
* predict verb
* only do stuff if both comps are present
* newline
* fix popup
* remove string.empty
* better voltage comment
* remove indentation from comment
* comment
* break the extractor
* fix comp
* change to protected
* add a client system
* make the component with the biggest name ever
* fix the anchor fail message popup
* kill this thing
* update the proto
* revert changes to PowerNetSystem
* ops
* make it spawn some gas when it explodes
* can't discharge
* comment was wrong
* swap order of components
* set examinable to false
* examine text
* rename AnchorableSystem to SharedAnchorableSystem
* rename file and make it abstract
* server side anchor system
* ops
* client anchor system
* use server anchorable system in server
* use battery visuals
* use a helper method
* revert changes to anchorable system
* new system
* new line
* ops, not used
* ops
* fix battery visuals
* set CableDeviceNode as not enabled
* set setting on map init
* enough feedback for the mothership
* new line
* locale changes
* locale changes to SharedPowerNetworkBatteryChargerVoltageTogglerSystem
* change name (again)
* update comments
* add event
* raise a event
* use events
* use a method instead of just raising the event
* more subscriptions to the voltage change event
* update locale stuff
* upgrade voltage toggler system with stuff from the power switch system
* replace power switch with voltage toggle in generator window
* replace power switch with voltage toggle in SharedPortableGeneratorSystem
* replace power switch with voltage toggle in power sensor
* KILL POWER SWITCHABLE COMPONENT AND SYSTEM
* replace power switch with voltage toggle in PortableGeneratorSystem
* replace all PowerSwitchable for VoltageToggler in the prototypes
* nullable switch text
* not required anymore
* mistake with the yml
* fix some issues with locale
* opposite
* i don't have words
* only use delay if it has the delay comp
* revert this change
* revert this change
* revert this change
* revert this change
* add color
* comment
* use another component
* fix the alert not showing
* generic comp for powernetwork battery and power consumer
* rename events
* fix proto
* make it less efficient
* change how it displays the rogue power thingy
* Comp is evil
* comment
* use resolve
* loc id
* error
* one line
* move this stuff to the voltage toggler system
* revert changes to PowerNetConnector
* revert changes to NodeContainerSystem
* revert changes that mess with PowerSupplierComponent
* revert changes to SharedBatterySystem
* revert changes to server BatterySystem
* revert changes to PowerMonitoringConsoleSystem
* remove whitespace
* guess it was 2 lines
* remove this from PowerNetworkBatteryComponent
* PowerConsumerBatteryCharger
* remove charging behavior from power sink system
* add new component to power sink
* extractor now uses power consumer comp
* update PowerDeviceVisuals.Powered for power consumers that are recieving power
* use PowerDeviceVisuals.Powered instead of BatteryVisuals.Charging
* PowerConsumerBatteryChargerEfficiencyVoltageTogglerComponent
* change values
* Orks micro balance
* me when i forget to change the actual value
* change values in the guidebook
* use a event
* move efficiency to the powerconsumer component
* ops
* revert this random change
* remove mapinit
* move to one line
* remove try comp
* update event
* this is important
* use a entity table
* only one line
* use the entity table
* use the current body crusher proto
* update guidebook
* say that it changes the efficiency
* Improve guidebook wording.xml
Co-authored-by: korczoczek <danielkorczok@gmail.com>
* remove random whitespace
Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>
* style stuff
Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>
* make AnchorOnlyOnStationComponent networked
* better wording
Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>
* Prettier
Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>
* fix stack text
* give option to be anchored on any station member
* use 4 spaces
* use stuff from the other PR
* revert this change
* remove power toggle things
* idk
* use a update loop
* revert locale changes about the voltage toggler
* remove mentions of voltage toggling
* ops
* fix proto
* remove white line
* revert this
* move efficiency to PowerConsumerBatteryCharger
* revert rider suggestion
* custom sprite for extractor flatpack
* use a new enum
* make it destructible
* cleanup
---------
Co-authored-by: beck-thompson <beck314159@hotmail.com>
Co-authored-by: korczoczek <danielkorczok@gmail.com>
Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>
Co-authored-by: ScarKy0 <scarky0@onet.eu>
* Dirty ApcPowerReceiver if state doesn't match defs
* surely this will work and isn't massive hubris
* SPACE
* docs & comments
* voltage, not charge
* no space
* jfc
* part 1
* second pass
* final fix
* last fix i swear
* an even bigger genius
* regex missed this
* should be all of em?
* oops
* yeah
* Revert "should be all of em?"
This reverts commit 4dd54d1b9a76977b4cf8d6008358e4dacdee6eb1.
---------
Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
* initial commit
* misc additions and fixes
* final tests and additions
* cleanup 1
* fix tests and add a test
* fix tests AGAIN
* abject horror and misery
* cleanup
* cleanup 2
* address some issues
* cleanup
* fix fixtures
* this belongs into the next PR
* review
* misc
---------
Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
* Add ENERGYWATTHOURS() loc function
Takes in joules (energy), displays as watt-hours.
* Add simple OnOffButton control
* Re-add Inset style class
This was sloppily removed at some point?? Whatever, I need it.
* Add helper functions for setting title/guidebook IDs on FancyWindow
Reagent dispenser uses these, more in the next commits.
* Add BuiPredictionState helper
This enables me to implement coarse prediction manually in the battery UI.
Basically it's a local buffer of predicted inputs that can easily be replayed against future BUI states from the server.
* Add input coalescing infrastructure
I ran into the following problem: Robust's Slider control absolutely *spams* input events, to such a degree that it actually causes issues for the networking layer if directly passed through. For something like a slider, we just need to send the most recent value.
There is no good way for us to handle this in the control itself, as it *really* needs to happen in PreEngine. For simplicity reasons (for BUIs) I came to the conclusion it's best if it's there, as it's *before* any new states from the server can be applied. We can't just do this in Update() or something on the control as the timing just doesn't line up.
I made a content system, BuiPreTickUpdateSystem, that runs in the ModRunLevel.PreEngine phase to achieve this. It runs a method on a new IBuiPreTickUpdate interface on all open BUIs. They can then implement their own coalescing logic.
In the simplest case, this coalescing logic can just be "save the last value, and if we have any new value since the last update, send an input event." This is what the new InputCoalescer<T> type is for.
Adding new coalescing logic should be possible in the future, of course. It's all just small helpers.
* Battery interface
This adds a proper interface to batteries (SMES/substation). Players can turn IO on and off, and they can change charge and discharge rate. There's also a ton of numbers and stuff. It looks great.
This actually enables charge and discharge rates to be changed for these devices. The settings for both have been set between 5kW and 150kW.
* Oops, forgot to remove these style class defs.
* Predict dumping
- This got soaped really fucking hard.
- Dumping is predicted, this required disposals to be predicte.d
- Disposals required mailing (because it's tightly coupled), and a smidge of other content systems.
- I also had to fix a compnetworkgenerator issue at the same time so it wouldn't mispredict.
* Fix a bunch of stuff
* nasty merge
* Some reviews
* Some more reviews while I stash
* Fix merge
* Fix merge
* Half of review
* Review
* re(h)f
* lizards
* feexes
* feex
* Initial commit
* Removed mention of StationAiTurretComponent (for now)
* Prep for moving out of draft
* Fixing merge conflict
* Re-added new net frequencies to AI turrets
* Removed turret control content
* Removed unintended change
* Final tweaks
* Fixed incorrect file name
* Improvement to fire mode handling
* Addressed review comments
* Updated how turret wire panel auto-closing is handled
* Ranged NPCs no longer waste shots on stunned targets
* Fixed bug in tracking broken state
* Addressed review comments
* Bug fix
* Removed unnecessary event call
* Use class instead of out variables
* Show battery level in power monitoring console
* Better color contrast for battery level + localized string
* Add visualization to battery percentage
* Reverts random ChatSystem.cs whitespace change
* Address review
* Show BatteryLevel stats in child view when selecting devices
---------
Co-authored-by: Crotalus <crotalus@users.noreply.github.com>
What happened was that the new tech anomaly randomly triggered a signal sink on the portable generator, which is currently broken and throws an error if the that sink is activated.
The resolve needed logMissing = false because it does not expect the ActiveGeneratorRevvingComponent to exist.
* Boom! Emergency access!
* Emergency access sound
* locale
* Updated sounds
* bleh
* Door electrify base
* feat: popups on attempt to activate AI action when wires cut
* refactor: use SharedApcPowerReceiverComponent to check if AI can interact with door
* refactor: added icon and sound for door overcharge
* meta.json should use tabs not spaces
* refactor: extracted sounds for airlock overcharge to static field in system
* refactor: cleanup, ScarKy0 mentions for resources
* refactor: removed unused textures
* feat: now notification is displayed when AI attempting to interact with door which have wire cut
* StationAiWhitelistComponent is properly gating BUI OnMessageAttempt, SharedPowerReceiverSystem.IsPowered is now used to check if device powered
* refactor: use PlayLocal to play electrify sound only for AI player
* refactor: SetBoltsDown now uses TrySetBoltDown, checks for power.
* bolts now check for power using SharedPowerReceiverSystem
* electrify localization and louder electrify sounds
* extracted ShowDeviceNotRespondingPopup, reverted airlocks not opening/closing when ai wire was cut
* refactor: cleanup
* New sprites and fixes
* Copyright
* even more sprite changes
* refactore: cleanup, rename overcharge => electrify
---------
Co-authored-by: ScarKy0 <scarky0@onet.eu>
Co-authored-by: pa.pecherskij <pa.pecherskij@interfax.ru>
Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
* First clumsy implementation of guidebook protodata
* Support for Properties, format strings
* Better null
* Rename file
* Documentation and some cleanup
* Handle errors better
* Added note about client-side components
* A couple of examples
* DataFields
* Use attributes like a sane person
* Outdated doc
* string.Empty
* No IComponent?
* No casting
* Use EntityManager.ComponentFactory
* Use FrozenDictionary
* Cache tagged component fields
* Iterate components and check if they're tagged
* Work on abstracting out chargeup functionality/ui from grav gen
* Work on station anchor
* Finish implementing station anchors
* uhh yeah
* ok.
* fix tests
* whoops
* Get the last extraneous yaml fail
* PJB review
* beast mode... ACTIVATE!
---------
Co-authored-by: Ed <96445749+TheShuEd@users.noreply.github.com>
Co-authored-by: EmoGarbage404 <retron404@gmail.com>
* ItemToggle + slots stuff
- Add component for itemslot locks to match LockComponent (surprised this didn't exist).
- Add thing for pointlight to match itemtoggle. In future should be used for PDAs and stuff but need to fix some other stuff first.
* Also this
* grill
* Power stuff
- Add shared IsPowered
- Add shared ResolveApc
- Move PowerChangedEvent to shared for now
- Add SlimPoweredLight that actually functions how you'd expect a PoweredLight to function it id didn't have a bunch of bloat on it.
* big update
* boing
* Try syncing powered state to client
For some reason the client is not receiving the ApcPowerReceiverComponentState, so it's not working.
* Fix powered state not syncing to client
The client PowerReceiverSystem was abstract, which prevented it from
running initialize.
* Flip check so that it runs bigger checks first
PowerDisabled skips the others.
NeedsPower skips the receiving check.
* Disallow changing Powered manually
* Move Powered update to PowerReceiverSystem
* Move appearance to event subscription
* Move metadata component to AllEntityQuery
* Cleanup
* Move Powered update back to PowerNetSystem
It's easier to use the EntityQueries and it dosen't need to be updated
anywhere else.
* Put appearance updating back
* Move IsPowered to shared
* Simplify IsPowered
* Cleanup
* Remove duplicate PowerChangedEvent
PowerChangedEvent on ProviderChanged doesn't seem to be needed
PowerChangedEvent gets raised by in update if the power state changes
after a new provider is connected
* Use new Subs.CVar helper
Removes manual config OnValueChanged calls, removes need to remember to manually unsubscribe.
This both reduces boilerplate and fixes many issues where subscriptions weren't removed on entity system shutdown.
* Fix a bunch of warnings
* More warning fixes
* Use new DateTime serializer to get rid of ISerializationHooks in changelog code.
* Get rid of some more ISerializationHooks for enums
* And a little more
* Apply suggestions from code review
Co-authored-by: 0x6273 <0x40@keemail.me>
---------
Co-authored-by: 0x6273 <0x40@keemail.me>
* added signal control to portable generators
* added documentation
* Discard changes to Content.Server/Radio/EntitySystems/HeadsetSystem.cs
* added DeviceNetworkComponent and WirelessNetworkConnectionComponent to generator prototype
* made GeneratorSignalControlComponent nicer
* implemented auto-revving
* added back necessary dependency
* can't send do-after event manually
* repeat now works with auto revving
* fixed
* removed vv
* stopping generating when it is revving now makes it stop revving
* Update Content.Shared/Power/Generator/ActiveGeneratorRevvingComponent.cs
Co-authored-by: Kara <lunarautomaton6@gmail.com>
* used resolve instead of TryComp
---------
Co-authored-by: Julian Giebel <juliangiebel@live.de>
Co-authored-by: Kara <lunarautomaton6@gmail.com>
* PACMAN generators show network load/supply.
This gives more feedback to players that their PACMAN is properly connected and what the network status is (i.e. you don't have enough generators).
* Buff JRPACMAN to 8 kW.
Shifted all power values up by +3 kW.
They're frequently too weak to power even single rooms so they deserve a buff.
* Change unit format helpers number format.
Always displays one digit of precision. This avoids jumping around when a value is changing live.