* 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)
* Update & improve tutorial window
- Fix scroll bar not showing up till window is resized/scrolled.
- Update keybinds and information.
- Add "quick controls" before detailed explanation for quick reference.
- Add section headers with larger font.
* Add more keybinds
Adds more keybinds from keybinds.yml
* Address code review
- Remove paragraph explaining controls in favor of quick list.
- Remove use of ForceRunLayoutUpdate(). Need to find bug causing scroll bar to not show up until resize. Can do in separate PR.
* Add gameplay section
Adds gameplay section with some important notes on respawning and combat node.
* Fix typo
"it's keybind" -> "its keybind"
* Several sandbox manager improvements
- Bound sandbox manager to B key as it lists on the UI
- Bound entity spawner to F5
- Bound tile spawner to F6
- Made entity spawner and tile spawner toggle instead of repeated spawning new windows from the sandbox panel
* Move relevant keyfunctions from engine to content
Turns out it was unnecessary to have the key functions in the engine as all code using the ones added here are in content.
* Add click-based solution transfer
For example, clicking on a beaker with a soda can to transfer the soda to the beaker. Works on plain solution containers like beakers and also on open drink containers like soda cans as long as they have the `PourIn` and `PourOut` solution capabilities. If no `SolutionComponent` is added to a drink entity, the `DrinkComponent` will give the entity one. This PR extends that behavior slightly by also giving these default `SolutionComponent`'s the proper capabilities for pouring in/out.
* Improve fix for poured drinks not immediately disappearing
Instead of making `DrinkComponent.Use` public this
splits out the code important to both users and made that function public, leaving `Use` private.
* Shorten solution transfer popup
* Make code review changes
- Move pouring code from SolutionComponent to new PourableComponent. Added PourableComponent to client ignore list and added to existing container prototypes.
- Added EmptyVolume property to shared SolutionComponent for convenience.
- Removed DrinkComponent fix from pouring AttackBy code. Instead DrinkComponent subscribes to the SolutionChanged action and updates its self when necessary.
- Fixed pouring being able to add more than a containers max volume and sometimes deleting reagents.
- Added message for when a container is full.
* More code review changes
- Remove IAttackBy ComponentReference attribute in PourableComponent
- Remove _transferAmount from shared SolutionComponent. Left over var from previous commit not being used anymore.
* 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