* Draft PR, do not merge
* Lathe now uses animations. Timing is still wrong, code is very wet, repetitions and unused layers are there.
* Removed (unneeded?) PowerDeviceVisualizer from the lathe
Refactored & Renamed code and variables
Renamed animation names
* WIP protolathe animation
* Working protolathe animation.
I still don't like the solution though.
* Add BloodstreamComponent and BloodstreamSystem
New component for metabolizing reagents that other organs like the stomach pass their input reagents to.
* Change StomachComponent to put ingested reagents in bloodstream after delay
Now StomachComponent does not metabolize any reagents. Instead, it tracks how long each reagent has been inside it, and once they pass "digestionDelay" they'll be put inside the bloodstream, where the bloodstream will handle metabolism of the reagent.
* Add reagent injectors
Injects reagents straight into the bloodstream when used on mobs with bloodstreams. Also allows draw/inject from beakers. Does not support drawing blood/reagents from the bloodstream yet.
* Address code review
Make use of `Loc` static class instead of using `ILocalizationManager`. Localize InjectorToggleMode enum properly.
* Fix crash in CameraRecoilComponent from NaN values
Doesn't proceed with camera shake if either component of recoil is NaN.
* Log NaN recoil value in CameraRecoilComponent
* Fix ExplosionHelper passing NaN recoil values when exploding from hand
With other commits CameraRecoilComponent now won't crash from NaN recoil values. Still want to fix this so explosions shake the camera. Just sets a value slightly greater than 0.0 for distance if it is (0.0, 0.0)
* Implemented random character creation
* Pick from a list and apply a bit of randomness instead
* Rename SetInitialData, unselect list entries properly
* added Character Setup
* whoops
* reverted unrelated changes
* Made everything work post-rebase
* Removed unused PreferencesChanged event
* nope, don't need this
* HumanoidProfileEditorPanel -> HumanoidProfileEditor
* Set initial data for hair pickers
* Fixed nullable warning
* Renamed LooksComponent -> HumanoidAppearanceComponent
* Renamed LooksComponentState -> HumanoidAppearanceComponentState
* Final renaming maybe
* Use a human-like dummy instead of a real human
* Change preferences structs back to classes
* Create ItemSlotButton
* Refactor inventory buttons
Refactor so that KeyBind handling of inventory and hands are the same.
* Refactor InventoryInterfaceController to call ItemSlotManager with entities
This change allows HandsGUI and InventoryInterfaceController to just call ItemSlotManager.OnButtonPressed with an entity instead of a slot.
* Add CooldownCircle to ItemSlotButton
This allows Hands and Inventory to have cooldown circles on their ItemSlots.
* Refactor HandsGUI to use ItemSlots
This allows functionality and GUI to be the same between Inventory and Hands.
Added clicking empty hand to switch ActiveHand to clicked hand.
* Implement CooldownCircle in ItemSlotManager
Reorganize files
1. made the magic mirror actually reflect your current hair state when you open it.
2. Made magic mirror one window.
3. Use color sliders for magic mirror.