* UI is an abbreviation, in XAML.
* Chat improvements.
Changing the "selected" channel on the chat box is now only done via the tab cycle or clicking the button.
Prefix chars like [ will temporarily replace the active chat channel. This is based 100% on message box contents so there's no input eating garbage or anything.
Pressing specific channel focusing keys inserts the correct prefix character, potentially replacing an existing one. Existing chat contents are left in place just fine and selected so you can easily delete them (but are not forced to).
Channel focusing keys now match the QWERTY key codes.
Deadchat works now.
Console can no longer be selected as a chat channel, but you can still use it with the / prefix.
Refactored the connection between chat manager and chat box so that it's event based, reducing tons of spaghetti everywhere.
Main chat box control uses XAML now.
General cleanup.
Added focus hotkeys for deadchat/console. Also added prefix for deadchat.
Local chat is mapped to deadchat when a ghost.
Probably more stuff I can't think of right now.
* Add preferred channel system to chat box to automatically select local.
I can't actually test this works because the non-lobby chat box code is complete disastrous spaghetti and i need to refactor it.
* Move chatbox resizing and all that to a subclass.
Refine preferred channel & deadchat mapping code further.
* Don't do prefixes for channels you don't have access to.
* Change format on channel select popup.
* Clean up code with console handling somewhat.
* Kills PipeNode ConnectToContainedEntities and EnvironmentalAir with fire.
* Reaction IGasMixtureHolder is nullable.
* Reworks canisters
* Adds PortablePipeNode and PortPipeNode, which connect to each other.
* First commit
* Final touches
* Some touches
* test
* Final touches (for real this time)
* Final changes (super this time for real, really)
* some touches
I believe it'd be one of the ones without worldrotation when we start doing rotated grids so I made it square for now.
Really I was just trying to stop the one at arrivals being jammed between the 2 walls constantly.
* Adds SoundSpecifier and a type serializer.
* DiceComponent makes use of SoundSpecifier.
* When rider autorefactoring decices to add field:
* Remove SoundEmptySpecifier, use nullable everywhere
* Refactor standing to be ECS
E C S B A B Y
* DONE
* FIX IT FIX IT FIX IT
* IsDown event
* Change to methods
* Fixes
* Address some reviews
* Last of the Mohicans
* Final fixes
* Fix tests
* Added fireaxe cabinets
* Now inserts and renamed ItemCabinetVisuals file
* Added netsync
* Cut out layers for future ItemCabinetVisualizer work and reorganized some RSIs
* Update Resources/Textures/Constructible/Storage/Cabinets/extinguisher_cabinet.rsi/meta.json
* Update Resources/Textures/Constructible/Storage/Cabinets/extinguisher_cabinet.rsi/meta.json
Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
* Remove IClientSingularityInstance
* In and out 5 minute refactor
* Component states for singularity distortion
* Fix distortion states
* Address reviews