* Add extendroundstart message to extend lobby start timer
* Rename StartExtend to DelayStart
* Fix delaystart amounts above 59 not working
* Change delaystart seconds type from int to uint
* Change delaystart wrong args amount message
* Add forcegamepreset command
* Rename forcegamepreset to forcepreset and merged start and forcestart preset methods
* Fix index out of bounds exception when forcing suspicion to start
* Change game preset to match regardless of casing
* Add forcepreset unknown preset message
* Add and move in lobby checks
* Remove testing changes
* Change delaystart to pause/resume the timer when no seconds are specified
* Change pause message
* Remove testing code
* Change 0 seconds to not be a valid amount of seconds
* Replace MsgTickerLobbyCountdown Seconds with DateTime instead of uint
* Add one entire dot
* Replace Math.Min + Math.Max with Math.Clamp
Co-authored-by: ComicIronic <comicironic@gmail.com>
Co-authored-by: ComicIronic <comicironic@gmail.com>
* Change exploding storages to explode their contents as well
* Change storages to only trigger content explosions when the severity is heavy or destruction
* Make inventories explode their contents as well
* Change InventoryComponent IExAct into an explicit implementation
* Change chain explosions to only trigger for explosion severities larger than or equal to heavy
* Start adding flashy flash
* Change slop
Might give a smoother decline
* flashy flash
* Add flashbang and flash projectiles
Bang bang bang pull my flash trigger
* Add collision check to area flash
* Flash cleanupo
* flash.ogg mixed to mono
* Adjusted flash curve again
* Enhancing flashes with unshaded and lights and shit
Still a WIP
* Add the other ballistic gun types
Re-organised some of the gun stuff so the powercell guns share the shooting code with the ballistic guns.
* Re-merging branch with master
Also fixed some visualizer bugs
* Last cleanup
Fixed some crashes
Fixed Deckard sprite
Fixed Hitscan effects
Re-applied master changes
Re-factor to using soundsystem
Add some more audio effects
* Cleanup flashes for merge
Can put flashbangs in lockers so you don't get blinded
Fix some bugs
* Fix shotties
Also removed some redundant code
* Bulldoze some legacycode
brrrrrrrrt
* Fix clientignore warnings
* Add the other Stunnable types to StunnableProjectile
* Some gun refactoring
* Removed extra visualizers
* All casing ejections use the same code
* Speed loaders can have their ammo pulled out
* Bolt sound less loud
* Stop ThrowController from throwing
* Fix speed loader visuals
* Update hitscan collision mask and fix typo
* Cleanup
* Fit hitscan and flashbang collisions
* Use the new flags support
* Update taser placeholder description
* Update protonames per style guide
* Add yaml flag support for gun firerates
* Cleanup crew
* Fix Audio up (components, audio file, + remove global sounds)
* Add server-side recoil back-in (forgot that I was testing this client-side)
* Add Flag support for fire-rate selectors
* Wrong int you dolt
* Fix AI conflicts
Haha ranged bulldozer go BRR
(I'll rewrite it after the other AI systems are done).
* Mix bang.ogg from stereo to mono
* Make sure serializer's reading for guns
Fixes integration test
* Change EntitySystem calls to use the static function
Also removed the Pumpbarrel commented-out code
* Change StunnableProjectile defaults to 0
* Fix taser paralyse
Apparently removing defaults means you have to specify the values, whodathunkit
* Add slowdown to stunnableprojectiles and fix tasers
* Remove FlagsFor from gun components
Co-authored-by: Metal Gear Sloth <metalgearsloth@gmail.com>
Co-authored-by: Víctor Aguilera Puerto <6766154+Zumorica@users.noreply.github.com>
Was banging my head against the wall for this because I R dumb.
It only ever popped up when large numbers of AI were spawned in.
Co-authored-by: Metal Gear Sloth <metalgearsloth@gmail.com>
* Add Utensil component
For eating. With utensils.
Added to fork, plastic fork, spoon, plastic spoon and plastic knife.
Ignored component on the client.
* Add break chance to utensils
Set to 20% for plastic ones
* Add break sound to utensils
* Add utensil kinds
None, fork, spoon and knife.
For sporks, forknifes and sporknifes, of course.
* Add restricting foods by utensils needed
* Fix utensils breaking when food isn't eaten
* Moved getting held utensils to FoodComponent
* Add breaking a clicking utensil even if its not necessary to eat the food
* Move use utensil code to a separate method
* Add telling a handless entity when they need an utensil to eat
The immersion is off the charts
* Change food trash to only be held when the food was also being held
* Fix Wi-Fi utensils
* Remove unnecessary utensil ItemGroup
* Made TryUseFood public, removed redundant trash position update
* Renamed UtensilKind to UtensilType
* Remove eating food when clicking with it on nothing
* Disable eating food when clicked directly if it requires an untensil to eat
* Changed "Run" to "Walk" in code
Fixes#844
* Revert "Changed "Run" to "Walk" in code"
This reverts commit bf70dc7214d08c208823bccd5d3f36854d6b80de.
* Changed "Run" to "Walk" in code
Fixes#844
For some reason there was a using for ICSharpCode.SharpZipLib.Zip.Compression and this is problematic because removing the library in the engine will mean this file will stop compiling, so let's avoid that.
Access is now done through a list of access lists, instead of the necessary/sufficient system that was extremely confusing.
Added a "deny" list so you can screw over sec.
Cleaned the API up so it all uses sets and such.
PDA now relays access read-only to fix edge cases.
* IExamine can now limit certain details behind a 'details' range check.
* Comic's Review fixes.
- colour -> color. My ancestors are saddened by this.
- Can see wire panel opened/closed at any distance again.
removes unused interface from DrinkComponent
adds capability to fit inside dispensers for TransformableContainer
removes stomach component from character setup dummy
-Ability to mix drinks to create cocktails with shiny icons
-New Chemistry System which can relay chemistry events to corresponding components
-moved some solution logic from Shared to Server
-fixed some weird stuff with DrinkComponent
Added power checks to:
Reagent Dispenser
Medical Scanner
Lathes
Research Console
Vending Machines
Added power device component to:
chem dispenser prototype
medical scanner prototype
Fixes for #706
* 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.
* Adds shotgun YAML files
* Adds shotgu ammo and magazine enum value, modularizes some projectile weapon methods
* Fixes guns consuming two bullets on fire
* Finishes shotgun behavior in Projectile Weapon Components
* Gun and ammo modularization
* Updates BallisticMagazineWeapons to be compatible with new AmmoWeapon
* Fixes shotgun spread angles, Fixes shogun YAML
* Gun documentation and ViewVariable specifications
* Removes todo messsage in gun code
* Default gun evenspread fix
* AmmoComponent Name fix
* Fixes Component name
* Projectile refactor code review fixes
* throwforce and probability fixes for explosions
Applies force to all affected by explosion entities with ItemComponent
Fixes probability issues with explosion related callbacks
* dependency fix, throw helper
* delete TODO
Co-authored-by: gituhabu <48828502+gituhabu@users.noreply.github.com>
* ControlMob verb and command, mobs have MindComponent by default
* Use IActorComponent instead of MindComponent for User entity.
Fixes using Control Mob while aghosting/visiting an entity.
* Use static Loc class
* 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.
* movement modifier system
* update default exposedata values
* changing base speed marks as dirty
* formatting
* movement speed modifier component
* Moves slowdown component to the prototype
AIController respects slowdown
* reset dirty flag
* Improve addai error handling and help message
Fix client crash from giving addai an invalid processorId argument and improved it's help message to describe each parameter.
* Only IoC resolve when addai is run
Makes the code simpler. No need to cache it since it's going to be run so infrequently.
* You cannot pickup items across walls, or pickup items when dead/in crit.
* Adds InRangeUnobstructed method to InteractionSystem.
Changes HandsSystem and ItemComponent to use it.
* 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)
* Fix max_volume in cup YAML
Fixes#563
Added parsing of max_volume from YAML. Before it would get max volume only from drink content total.
* Fix drink owner getting deleted early
_contents.SplitSolution causes _contents.SolutionChanged to call Finish early causing a crash when try to get SoundComponent from the deleted Entity.
* Fix crash when eating bread due to a missing prototype
* Fix crash when finishing a food.
It tried to get the transform component of a deleted entity.
#574 added an out arg to `SolutionComponent.TryRemoveSolution` containing the solution that was removed. I made this change since I thought there was no way to get the removed solution for further use. Didn't notice `SplitSolution` which provides nearly the same behavior. With this PR I want to remove that out arg from `TryRemoveSolution` to keep the SolutionComponent API simple and to avoid having multiple ways of doing things. Existing code uses `SplitSolution`, I just wasn't paying attention.
Feel free to deny merging this if I'm over thinking it. I think it'll help keep solution code from becoming a mess.
uses SnapGridComponent to select nearby wires instead of entity list (only marginally faster if entity queries are using DynamicTree)
TheoreticalLoad double dipping property setter, reduced to one update
minor refactoring
Co-authored-by: Tyler Young <tyler.young@impromptu.ninja>
Previously the chem dispenser eject button placed the container on top of the dispenser. Now it will attempt to place it in your active hand, then your secondary hand. If both hands are full then it'll place it on top of the dispenser like before.
* 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.
Currently if this component is present the delay timer is started but it doesn't actually prevent use interactions.
To test this bug, do the following:
1. Set the delay for [bike_horn](https://github.com/space-wizards/space-station-14/blob/master/Resources/Prototypes/Entities/items/bike_horn.yml#L25) to something large like 5.0 that'll make the effect obvious
2. Use the bike horn with the z key. The delay anim will play properly but you'll still be able to spam the honk.
* Change variable name in some interactions
I definitely didn't copy-paste some stuff back then, absolutely not.
* Fix bug where dropping items in tables didn't cause the drop interaction
* use delay timer
* remove accidental using
* and remove accidental newline because i don't proofread my code
* compatibility with HUD cooldown
suggested changes
* get out of here
* suggested changes
* change to seconds from milliseconds
* remove redundancy
When explosions are spawned they grab all entities in range and interact with them. They don't check if entities are deleted before doing so which can cause a crash.
To reproduce, place several grenades on the ground, pick one up and detonate it on top of the others so they detonate as well. The debug assertion in ContainerHelpers.IsInContainer will fail due to one of the accessed entities having been deleted.
This fixes that by ignoring deleted entities when making explosions.
* 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
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.
SolutionComponent.CheckForReaction only checks for a reaction once, meaning that if a reaction generates reagents that create a solution that's valid for another reaction, that second reaction doesn't occur. This fixes that by repeatedly checking for a reaction until no more occur.
* Fixes the player being able to use the chem dispenser when they're dead
Adds a check to `ReagentDispenserComponent.OnUiReceiveMessage()` that checks if the players `SpeciesComponent` has a damage state that prevents them from interacting with the chem dispenser.
* Switch to use ActionBlockSystem instead of checking SpeciesComponent directly
* Fix crash when _appearance is null
Added a function to error check and set _appearance.SetData.
Added cancellation token which should stop the Timer, but doesn't seem to right now.
* Fix missing CancellationToken causing a crash
This delay would delay _appearance.SetData until after _apppearance was set to null when the component was removed causing a null reference exception.
* Instrument test.
* Midi stuff
* Some more work
* This actually works now!
* update
* Midi Audio works!
* Lots of stuff, and cool interfaces for items
* Update
* Fix a few things
* It just works
* Move textures to another folder, remove placeholder description from instruments
* Fix warning
* Use renderer enum
* Instruments now use DisposeRenderer method, and send MidiEvents as they receive them. Deletes InstrumentSystem whoo.
* Fix incorrect sprite paths
* Instruments take midi file size check into account when enabling/disabling midi playback buttons
* Fix crash when pressing drop on empty hand.
* Use new renderer return values for midi/input
* Xylophones are no longer handheld instruments, fix their sprites.
* Use new API
* Remove nfluidsynth from solution
* Timing information
* Use IGameTiming.CurTime for timestamps instead
* Adds tile removing behavior to CrowbarComponent.
Add FloorTileItemComponent.
Add genhit.ogg
Add tile.png for testing
* fixes
* Gives ContentTileDefinition a default value for tile item to drop.
Adds a few more tileitems.
* Changes per review request
* move stack.use and if statement
* Change Rejunevate to satiate hunger and thirst whenever applicable
* More progress
* One more before rebase
* Shit
* Bop obsolete using
* Verb will not show on non-applicable objects
* Fix exception in ReagentPrototype
Due to client trying to access concrete implementations of IMetabolizable that are in Content.Server. This fix checks to see if the prototype is being loaded by the client through reflection. I don't want to move the prototype completely into Content.Server since it's useful for the client to view descriptions and values of reagents without needing to send that data from the server.
* Make fix slightly more explicit
Now it will only load the metabolizable when in Robust.Server, instead of it being anything that's not Robust.Client.
* Add IModuleManager and ModuleManager
Provide simple way to check if shared code is being run by the server or the client
* Change ModuleManager implementations to not require assembly name comparison
Now just has ClientModuleManager registered to client, and ServerModuleManager registered to server.
* Change IModuleManager functions to properties
* Fix failing tests.
This was failing because the tests weren't initializing IoC. Simply using RobustUnitTest wasn't enough because that doesn't initialize content either. I did some cleaning up so now content IoC is registered via ContentUnitTest.
* Implement Cargo Console
Add to CargoConsoleComponent GalacticBank information for syncing Bank Account Balance.
Implement CargoOrderDatabase on the server side and a list of orders in the CargoOrderDatabaseComponent on the client side. This makes it easier to change data on the server side but also utilize the state syncing between components.
Implement GalacticMarketComponent.
Only productIds get sent. Both client and server create their lists from YAML.
Implement basic spawning of items from approved orders in CargoOrderDatabase.
* Finish Cargo Console
Add validation to make sure Order Amount is one or more.
Implement approve and cancel buttons to CargoConsoleMenu orders list row.
Add price to CargoConsoleMenu product list row.
Implement CargoOrderDataManager to consolidate CargoOrder lists.
Refactor CargoOrderDatabaseComponent to use CargoOrderDataManager instead of storing duplicate lists.
Implement canceling orders.
Implement approving orders.
Fix sprite links.
Implement Cargo Request Console.
* Add power cell and weapon chargers
Functionality's similar to SS13. The cell charger won't show the discrete charging levels because effort to not make it spam appearance updates over the network.
There's some stuff I wasn't sure on:
1. Updating power? Particularly around fixing rounding
2. Duplicating the full and empty sprites as I couldn't figure out a way to not have AppearanceVisualizer throw if the state isn't found
3. I made a BaseCharger abstract class under the assumption that when a mech / borg charger is added it would also inherit from it.
4. GetText currently isn't localized
* Address PJB's feedback
Updated the BaseCharger
* Change nullref exception to invalidoperation
* If the user doesn't have hands it will just return instead
* Move chemical reaction effects into Chemistry/ReactionEffects/ subfolder
* Replace hardcoded StomachComponent metabolism with IMetabolizable
The benefits of this approach are that reagent metabolism effects are not hardcoded into StomachComponent, and metabolism effects can be more easily chained together in yaml prototypes, and reagents can have different metabolism rates. One problem with this approach is that getting metabolism rates slower than 1u / second is impossible. Implementing #377 should resolve that problem.
* Fix DefaultFood and DefaultDrink so they remove reagent regardless of Hunger/ThirstComponent presence
Previously if neither of those were present the reagents wouldn't be removed from the stomach. This fixes that.
* Additional comment on function
* Make metabolizer interface implementations explicit
Also removed some unused using statements
* Make StomachComponent._reagentDeltas readonly
* Fix misleading variable names and docs for metabolizables
Changes one of the arguments for `IMetabolizable.Metabolize()` to be called `tickTime` instead of `frameTime` to more accurately reflect it's purpose. It's not really the frametime, but the time since the last metabolism tick. Also updated and expanded the docs to reflect this and to be more clear.
* Add basic yaml Jobs file
* Add Job Prototype
* Rename Jobs to Job
* Remove BaseJob
* Add the Job class child of Role
* Add code for spawning as an assistant. Not actually working, the job prototype can't be found.
* Fix role instead of job left in yaml
* Add starting gear support for job and the starting gear for assistant as an exemple
* Link job with starting gear in yaml
* Better naming and some error handling
* Tweak error handling
* Make nutrition less harsh
Also fix the accumulator because why did I put that in the loop.
Decay rates decreased and made drink thirst levels same as hunger for now.
* Also fix stomach frametime accumulation
* Non-accessed local variable
* Merge cast and type checks.
* StringComparison.Ordinal added for better culture support
* Supposed code improvement in launcher. Remove unused code.
* Update ExplosionHelper.cs
Unintentional change.
* Optimized Import
* Add Robust.Shared.Utility import where it was deleted
* Other random suggestion
* Improve my comment
* Fixes: #392
- Make Lathe require power to interact with or produce.
- Make R&D Console require power to interact with.
- Add PowerDevice component to R&D computer.
- Add PowerDevice component to R&D server.
* Update LatheComponent.cs
* Update LatheComponent.cs
* Update ResearchConsoleComponent.cs
* Add hunger and thirst
Based on the SS13 systems.
Food (Nutriment) / Drink -> Stomach -> Hunger / Thirst
* Cleanup rebase
* Cleanup stuff that was prototyped
* Address feedback
Still need to add a statuseffects system in a separate branch
* More cleanup on nutrition
Fix Remie's feedback and also damage tick.
* Re-implement nutrition with master
* Updated to use the StatusEffectsUI update
* Removed all clientside components as they only receive the UI updates now
* Implemented PR feedback
* Had to make a slight adjustment to the chemistry SolutionComponent given it doesn't have an Owner, same with Solution
Still TODO:
* Metabolisation effects
* Change drink contents to alcohol / wine etc.
* Add items to the dispensers
* For transparent containers use RecalculateColor
Could probably genericise DrinkFoodContainer as well to be a temporary item dispenser
* Fix broken bottle parent
Still need descriptions on the items to be done but the groundwork is there.
Could also do with layers for stuff that should light up in the darkness but I wasn't entirely sure what should and shouldn't.
* Refactor SpeciesUI into overlay and status effects
All components that update the UI will need to use PlayerAttached for cases where the Mind transfers I think.
* Change overlay / status effects to use states
* Change TryRemoveStatus to RemoveStatus
Doesn't return a bool so not trying.
Addressing PJB's feedback.
* Add support for global verbs
These are verbs that are visible for all entities, regardless of their components. This works by adding a new class `GlobalVerb` and a new attribute `GlobalVerbAttribute`. It works in the same way as current verbs, except you can put the verbs class definition anywhere instead of inside a component. Also moved VerbUtility into it's own file since it now has functions for both verbs and global verbs.
* Add view variables verb as an example of global verbs
* Implement suggested changes
Implemented some suggested changes from code review:
- Remove unneeded attribute from `GlobalVerb`
- Added some useful attributes to `GlobalVerbAttribute`
- Moved constants used by both `Verb` and `GlobalVerb` into `VerbUtility`
* Reduce duplicate code in VerbSystem (client & server)
Greatly reduced the amount of duplicate code for handling component verbs and global verbs separately.
* Update engine submodule
Need this so client side permissions checks are available.
* Add rejuvenate command
Takes one or more entity uids as input. Attempts to find a DamageableComponent on that mob and heal all damage on it.
* Add rejuvenate to right click menu
* Update engine submodule
* Make suggested changes
- Remove redundant error checks in rejuvenate console command, add in relevant ones along with shell messages so the user knows what's going on.
- Remove localization of group check on rejuvenate verb, since the translated version wouldn't be in groups.yml this would've broken the verb in other locales.
- Have the rejuvenate verb attempt to heal the user by default if no arguments were provided to it.
* More localization + help message formatting improvement
* Add more suggested changes
* Add basic chemical reaction system
What it adds:
- Reactions defined in yaml with an arbitrary amount of reactants (can be catalysts), products, and effects.
What it doesn't add:
- Temperature dependent reactions
- Metabolism or other medical/health effects
* Add many common SS13 chemicals and reactions
Added many of the common SS13 medicines and other chemicals, and their chemical reactions. Note that many of them are lacking their effects since we don't have medical yet.
* Add ExplosiveReactionEffect
Shows how IReactionEffect can be implemented to have effects that occur with a reaction by adding ExplosionReactionEffect and the potassium + water explosion reaction.
* Move ReactionSystem logic into SolutionComponent
No need for this to be a system currently so the behavior for reaction checking has been moved into SolutionComponent. Now it only checks for reactions when a reagent or solution is added to a solution. Also fixed a bug with SolutionValidReaction incorrectly returning true.
* Move explosion logic out of ExplosiveComponent
Allows you to create explosions without needing to add an ExplosiveComponent to an entity first.
* Add SolutionComponent.SolutionChanged event. Trigger dispenser ui updates with it.
This removes the need for SolutionComponent having a reference to the dispenser it's in. Instead the dispenser subscribes to the event and updates it's UI whenever the event is triggered.
* Add forgotten checks
`SolutionComponent.TryAddReagent` and `SolutionComponent.TryAddSolution` now check to see if `skipReactionCheck` is false before checking for a chemical reaction to avoid unnecessarily checking themselves for a reaction again when `SolutionComponent.PerformReaction` calls either of them.
* Change SolutionComponent.SolutionChanged to an Action
The arguments for event handler have no use here, and any class that can access SolutionChanged can access the SolutionComponent so it can just be an Action with no arguments instead.
* Expose more private values of Solution and SolutionComponent
Expose SolutionComponent.ContainedSolution and Solution.Contents. Both needed by ReagentDispenserComponent.
* Implement IExamine for SolutionComponent
Allows players to see the contents of a solution by examining the entity which contains it.
* Implement ReagentDispenserComponent
Adds ReagentDispenserComponent. A component which can add or remove reagents from a solution container. It's written in a general way so that it can be used for things such as the Chemical dispensers in chemistry, but also the booze and soda dispensers in the bar.
The chemicals it may dispense are defined in yaml, similar to the way that vending machines define which entities they can dispense, by defining a reagent pack.
* Add chemical dispenser and equipment
Adds the chemical dispenser, beaker, large beaker, dropper, and a few more chemicals.
* Add booze and soda dispensers.
Adds the booze and soda dispensers, and a few chemicals for them to dispense. There's no drink mixing or drunkenness yet.
* Update engine submodule.
* Remove unneeded and commented out code
Had a few WIP notes and debug code bits I forgot to remove beforehand.
* Make SolutionComponent._containedSolution and it's values private again
- Remove `SolutionComponent.ContainedSolution` property, replace with specific access functions to maintain safety.
- Make Solution.Contents return a `ReadOnlyCollection` instead of `_contents` to prevent uncontrolled access to the Solution values.
- Add `SolutionComponent.RemoveAllSolution()`
* Update Content.Shared/Chemistry/Solution.cs
Commits a suggestion from RemieRichards to match the coding style of the rest of the codebase. Using `IReadOnlyList` instead of `IReadOnlyCollection`.
Co-Authored-By: Remie Richards <remierichards@gmail.com>
* Update Content.Shared/GameObjects/Components/Chemistry/SolutionComponent.cs
Commits a suggestion from RemieRichards to match the coding style of the rest of the codebase. Using `IReadOnlyList` instead of `IReadOnlyCollection`.
Co-Authored-By: Remie Richards <remierichards@gmail.com>
* Add import for IReadOnlyList to Shared/SolutionComponent.cs
* Add documentation
* Improve localization
Improve use of ILocalizationManager.
* Resolve ReagentDispenserWindow._localizationManager before using it
Forgot to do this in the last commit, resulting in a crash. Oops.
* Add SolutionCaps.FitsInDispenser. Use in ReagentDispenserComponent.
Used to limit large containers like buckets or mop buckets from being placed in a dispenser. Both have large capacities (500) and weren't designed to hold certain chemicals like a beaker is, so for now they can be blocked from being put in a dispenser by giving them that flag.
* Add colors to new reagents
* Update engine submodule
* Disable speaking while unconscious/dead
Fixes#359
* Add CanSpeak ActionBlocker
Matches the existing technique for other actions like CanUse() and CanThrow().
Currently explosives do no damage to tiles or damage the wrong area of the map. This is because `Owner.Delete` is called before the adjacent tiles / entities are damaged. This results in the explosives grid always being 0, and it's position always being (0, 0), meaning that the tiles in range of the explosive are not properly calculated. This fixes that (Issue #358).
* Disable footstep sounds for ghosts
Adds a check before playing footstep sounds to check if the mover is a ghost. Doesn't play footstep sounds if they are a ghost.
* Add FootstepSoundComponent
Adds FootstepSoundComponent. If a mob has this component, it will make footstep sounds. Otherwise they will not. As of this commit humans have this component and ghosts do not.
Previously this component would sometimes try to use a non-existent prototype, `HelmetEngineering`. This would result in a server crash upon loading any map that uses the `Tool Locker (Filled)` component. This replaces that non existent prototype with `HatHardhatRed`, which does exist, and is something you might expect to find in a tool locker.
* Airlock hacking
* Added status text
* Whoops don't need this
* Update Content.Server/GameObjects/Components/Doors/AirlockComponent.cs
Co-Authored-By: Pieter-Jan Briers <pieterjan.briers@gmail.com>
* ComponentReference ServerDoorComponent
* Suggested name
* Work on Research so far
More work on UI...
Fix ResearchClient and Protolathe UI stuff.
Fix infinite select -> request state -> select -> ... loop
Add UI to ResearchClient, etc.
Technology Database states, and a bit of work on the research console ui
A bit of work on Research Console UI
Protolathe sync
Stuff that actually does things
Protolathe databases yay
Alright got my motivation back
Yeah, no. It's almost 3 AM already
Fix serialization bug again
More work on stuff
Stuff
Adds files for most new components/systems.
* Protolathes actually work now
* Research. Just Research.
* Adds icons from Eris.
* Address reviews
* Change LatheMenu resize behaviour
* Update Content.Client/GameObjects/Components/Research/ResearchConsoleBoundUserInterface.cs
Co-Authored-By: Pieter-Jan Briers <pieterjan.briers@gmail.com>
* Update Content.Client/Research/ResearchConsoleMenu.cs
Co-Authored-By: Pieter-Jan Briers <pieterjan.briers@gmail.com>
* Move IoC Resolve out of for loop
* Address review
* Localize stuff
Same as magazines except they can't be loaded into a weapon.
You can transfer ammo to and from magazines / boxes freely where the caliber matches so you don't need to necessarily match the magazine type.
Used popups to reflect transfer amount.
Also fixed the mag sprite showing as 0 capacity on spawn and the 10mm smg flash magazine prototype
* Removed BoundingBoxComponent.
* Updated prototypes to use refactored CollidableComponent.
* Renamed ICollidable to IPhysBody.
Moved ICollidable to the Shared/Physics namespace.
* Migrated more yaml files to use PhysShapes.
* Updated YAML to use the new list-of-bodies system.
* Updated the new prototypes.
* Update submodule
* Update submodule again, whoops
* Add more dakka
Some slight codebase changes to facilitate more robust behaviour.
* Update Content.Server/GameObjects/Components/Projectiles/ProjectileComponent.cs
Co-Authored-By: Pieter-Jan Briers <pieterjan.briers@gmail.com>
* Remix last stereo to mono
hpistol + ltrifle
* Retrofit the AI system with new IoC features.
Fixed bug with turret rotation.
* Added new AI WanderProcessor, and it works.
* RNG walking directions are a bit more random now.
* Wander now actually uses the MoverSystem to move.
Wander now talks when he reaches his destination.
* Adds a new Static Barker AI for vending machines, so that they periodically advertise their brand.
* Barker now says some generic slogans.
Misc bug cleanup.
* Removed useless UsedImplicitly attribute from AI dependencies, suppressed unused variable warnings instead.
* Fixed HandsGui children so that HandsGui is clickable
* Added TextureButton for opening Storage items
* Update ClientInventoryComponent.cs
Fixed HandleComponentState so that it only updates the inventory when there are changes.
* Implemented storage button on Inventory
Adds a small button on the bottom right of Storage items when inside the inventory. When the button is pressed it opens the Storage UI.
* Added the ReagentPrototype class.
* Added the new Solution class.
* Added new shared SolutionComponent to the ECS system.
* Added some basic element and chemical reagent prototypes.
* Added a new Beaker item utilizing the SolutionComponent. This is a testing/debug entity, and should be removed or changed soon.
* Added filters for code coverage.
* Nightly work.
* Added the server SolutionComponent class.
* Added a bucket.
Verbs set up for solution interaction.
* Adds water tank entity to the game.
* Added a full water tank entity.
Solutions are properly serialized.
Solution can be poured between two containers.
* Solution class can now be enumerated.
SolutionComponent now calculates the color of the solution.
* Minor Cleanup.
* initial explosiveComponent
* remove garbagee
* assets
* tile mass deletion baby
* grenades
* tweaks
* Update Content.Server/GameObjects/Components/Explosion/ExplosiveComponent.cs
Co-Authored-By: Pieter-Jan Briers <pieterjan.briers@gmail.com>
* Ex_act based on damage, fixes and tweaks
* One finishing touch
Done the most cringe way
* ex_act explosions, tables are destructible now
also adds fuel tanks
* adds ex_act to mobs
* ports clown and sec outfits
* bikehorn and soundemitters
* very smol bike horn
* working fine sounds
* Oh wow i can do it through github
Co-Authored-By: Pieter-Jan Briers <pieterjan.briers@gmail.com>
* fixes for review
* fixes prototype
* fixing entrypoint
- fixes inhand sprite visibility
- adds visible charge level
- refactor sound recourse load, now you can specify fire sound from YAML
- adds laser cannon - more powerful laser
- adds new assets for cannon
Made the examine window a little transparent so that you can see things behind it. This prevents the examine popup from occluding gameplay.
Moved the ExamineEntity bind from Human to Common context so that it will always be available to clients. Ghosts can now examine things.
ConstructionComponent.AttackBy tries calling TryProcessStep on the forward step of the construction stage, and if that fails it tries the backwards step. I many construction prototypes the backwards step is null for all stages and so clicking the construction ghost with an invalid step results in a crash due to the step passed to TryProcessStep being null.
* Demonstrated map init working with guns, toolboxes, tool lockers.
* Refactored EntityStorage and ServerStorage to have a common interface.
* EntityStorage no longer uses ServerStorage PURELY for visuals.
Use an appearance visualizer instead.
* Import Eris engineering locker sprites.
* Allow customizing ClientStorageComponent open/close states better.
* EntityStorage does not blow up if Storage is also defined in prototype.
* Engineering styled lockers.
* Recipe stuff.
* Lathe GUI and stuff
* god dammit
* Lathe menu works, yay.
* EventArgs henk
* Some work
* SS14 -> Robust
* More SS14 -> Robust
* Lathe materials
* Lathe works, Lathe GUI, Queue GUI, etc
too many changes to name them here
* Remove materials button, add ViewVariables and update lathe on connect
* Add Autolathe RSI
* Adds new recipes, fixes a few bugs.
* Remove unused ScrollContainers
* Use same delegate for spawn.
* Removes client-side LatheComponent in favor of BoundUserInterface
* Remove GetMaterial and TryGetMaterial
* Use auto-properties in a few places.
* Adds LatheDatabase, and a bunch of other changes
* Remove useless log.
* Remove lathetype from prototypes.
* Turns Storage, Lathe and Database into autoproperties
* Remove Hacked property from LatheRecipePrototype
* Remove unneeded dependency injection from components
* Refactors LatheDatabaseComponent to use ComponentState
* Refactors MaterialStorageComponent to use ComponentState
* Oopsie
* Another oopsie
* Last oopsie, I hope
* Fix missing Close call.
* Removes static `IoCManager` service locator calls from `Robust.Shared.Map` namespace.
* Misc code cleanup and filling out doc comments for Map classes.
* Added Union and Intersect methods to Box2.
* Any touched component was converted from static IoC calls to field injection.
Sibling PR to https://github.com/space-wizards/RobustToolbox/pull/796.
* refacting some sprite things
* fix sprites
* Netcode for sending a new icon state to the ClientComponent
* Fixed broken torches.
* Fix dirty calls.
* ClothingComponentState now also includes EquippedPrefix
* Inherritance ClothingComponent : ItemComponent
* Added parameter to ItemComponentState constructor.
* Update RobustToolbox
* Revert "Update RobustToolbox"
This reverts commit 82c7e98ff3853b64698d5e80a45cd7a3758618e0.
Undo weird commit to toolbox?
Added BurnTemperature to bulbs.
Added HeatResistance to clothing and species.
Added HeatResistanceComponent which resolves armor vs skin.
Made the hand burn on lamps only happen when heat resistance is too poor.
Requires https://github.com/space-wizards/space-station-14/pull/768
- [x] Play sounds
- [x] SoundSchedules actually work
- [x] Send sound to specific users
- [x] Make existing components use SoundComponent
- [x] Add ScheduledSounds from prototypes
- [x] Add Play methods equivalent to those of AudioSystem.
- [x] Document most code.
~~well, it SHOULD make mob rotate on death, but it doesn't, i have no idea why~~
- Blocks character movement in crit/death
- rotates character ~~360noscope~~ 90 degrees to convince you it's lying down when dead
resolves#145resolves#158
related to #115
-Also fixes a bug where bulb type didn't matter when inserting a new bulb into a light fixture.
-And a bug where bulb state changing didn't change the light itself.
P.S. Also note I didn't add any colored lightbulb prototypes, as I don't think they're necessary right now. To see the changes, please use VV! In the future, it might be possible to change the lightbulb's color with a multitool or something in-game.
* Adds light_tube.rsi
Sprites taken from CEV Eris!
* Adds LightBulbComponent
* Wall lights now use light bulbs!
* Light bulb now updates its sprite when it changes.
* Comments the code.
* Adds license and copyright to new sprites
* Add Ointment and Brutepack to StackType
* Add Ointment and Brutepack sprites
* HealingComponent now works correctly with StackComponent
* Adds Ointment and Brutepack prototypes
* Adds Ointment and Brutepack to stationstation
* Fix this
fug
oksure
Creates the initial species component, damage states, and threshold templates and hooks them into the damageable component
* More rebase fixes
* test
* Pre future rebase
* Please
* Lol
* Lol2
* SHADERS
* Update Engine
* yml file
* Fix an initialization issue, injects dependencies
* Fix error in loading shaders
* Makes a master character ui controller component added upon client attachment to entity and remove upon client detachment from entity
* Fixes just about everytrhing
* Address PJB's comments
* geeze
* Make overlays work in worldspace instead of screen space and not cover user interfaces
* update submodule
You can theoretically restart the round (resetting the map) now, but it breaks very badly if a client is connected due to various edge cases/race conditions.
* Fixed sprite issues with construction system (Thanks PJB!).
* Storage and Hands Systems now subscribe to Transform Parent changes, and will keep their containers in sync.
* Add check in Interaction System to prevent processing client-side entities on the server.
* Added generic crate assets.
Added open flag to StorageComponent.
* StorageComponent door toggling works.
* Door now updates based on if someone is subscribed to the Storage.
* Added License to crate.rsi
Fixed Icon of crate.
* Added basic Locker.
* Added Fire Extinguisher.
* Added ability to close the storage UI by the server.
Notify the server that the UI is closed, so that the player is unsubscribed from the storage.
Unsubscribe the player from a storage if the player entity moves out of range.
* Add check to make sure entity is on the same map as the storage.
* Update Engine module.
* Update Engine.
* Renamed ICollisionManager to IPhysicsManager.
* Added sanitization and logging for clients sending invalid coordinates to the interaction system.
* Update Engine.
1. Updates all the NuGet packages (except CommandLineParser because they ruined their API)
2. Makes all projects use C# 7.2 explicitly. (not latest)
3. Use some C# 7.2 features like readonly structs and default literals.
Fixes second half of #92
Regarding the first half, Digitalis explained in discord that when an entity is picked up, visible components are made invisible by making the entire Godot scene node for the entity (based on the GodotTransformComponent) not visible. It's probably possible to exempt the pointlight from that invisibility, but that seems hacky and it seems like something that should be covered by a generic "items equipped in hands are visible" design.
Adds:
- Handheld light component for toggling light activation
- Lantern sprite with on and off layers
- Lantern prototype updates
Known issues:
- When light is on and on the ground, hovering over it with the cursor does not produce the outline effect. I'm not sure, but I think this is caused by the way I implemented the illuminated layer as an entire sprite rather than just the illuminated part. The outline only works on the first layer maybe? I checked it against the welder in its on state and it doesn't seem to outline the flame.
- Illuminated sprite (layer 1) is an entire flashlight, so to make it look okay, the whole first layer is turned off. Would be better / more correct to follow the example of the welder and just create an illuminated "cap" to overlay on the dark extinguished layer. I'd whip up some coder art myself, but I don't have the right tools to handle transparency.
- Illuminated sprite is slightly different from the extinguished sprite, so turning on the light makes it a little bit shorter.
Various minor interaction features.
There is no concept of gravity in the game yet, so items drift through space or the hallways of a station until they are stopped. Thrown items do not collide with walls because making them collidable makes them collide with EVERYTHING, including the player. We need collision groups in the physics system.
Because of the previous problems the velocity things are throw at is set quite low, it can be tweaked after the other mentioned issues are resolved.
* CEV-Eris SMES sprite as RSI.
Has been modified so that the light overlay states use alpha blending.
* Add tiny glow to SMES display sprite.
* Appearances work v2
* More WiP
* RoundToLevels works correctly on even level counts now.
* SMES -> Smes because MS guidelines.
* CEV-Eris APC sprite.
* APC visuals.
* Reduce SMES scale again to normal levels.
* Update submodule
* adds storage system, primitive client-unsubscribing of storage updates
* strips out currently unneeded system
* channel to actor
* closestorageui todo added
* thorough logging, actor to session, validates session before sending packets
* offloads session status check to an event handler
* Updates for the netcode refactor.
* Change HandsGui to control.
Why? No idea but drawing of it works again.
* Fix hand change sync.
* Update submodule
* Rename IEntity.GetComponents to GetAllComponents.
This is to avoid confusion.
A single s to distinguish it from GetComponent() is quite hard to miss.
* Update submodule.
* Sprite refactor compatibility.
* Sprite-level rotation.
* Dude it works.
Welder now has an unshaded flame toggle!
Door component no longer on client!
* Remove debug text.
* Update.
* fixes server crash on empty hand drop
Fixes issue with server crashing when client requests for an empty hand to drop its entity.
* fixes drop crash by checking for null in container contains
* removes old change - time to learn to reset properly
* Adds click parsing entity system
Instead of every entity system receiving the message and deciding if it individually wants the message, and verifying player information. The click parser system receives the message and parses which system to send it to based on clicktype and sends it.
* Submodule update
* Bully the fuck out of inventory shit
Inventory Stuff
Inventories technically work
It works technicaly speaking
Yeah this part too
Lets do it!
Inventories completed
Motherfucker
* Remove unnecessary usings and fix one thing
* Submodule update
* Adds a bunch of various clothing prototypes for each current inventory slot
* Fix
Finish and update submodule
Comments code, changes network messages
FIXES THE USE INTERACTION SO YOU CAN ACTUALLY ACTIVATE THINGS NOW
Need engine commits
We'll figure out what to do about this shit later eh mates? Maybe have a script in the build process that automatically moves them over to godot/scenes
Changes some prototypes and fixes stuff
Fixes some more bugs, makes storage values show up properly
Part 3
Part 2
Storage Take 1
* Doneso
* Minor stuff:
* Making a file called DISABLE_SUBMODULE_AUTOUPDATE in BuildChecker/ makes it not always run git submodule update.
* Added .mypy_cache to .gitignore.
* Made default platforms x64 (from Any CPU).
* Make git hooks +x.
* Move submodule to Godot
* Update submodule AGAIN.
* Update project files.
* Remove WearableAnimatedSprite from prototypes.
* Remove content repo resource copier.
* Update submodule.
* Fix resource handling.
* Content.Client compiles by commenting out hands GUI.
* Update submodule.
* Fix prototype textures and update submodule.
* Update Submodule.
* Update submodule SOME MORE!
* Random WiP shit I guess
* Make omnisharp not choke on buildchecker.
* Update submodule.
* Highly WiP broken HandsGui code.
* Ok maybe let's not insult omnisharp.
* Fix annoying Omnisharp warning.
* Update submodule.
* Update submodule.
* Hey I forgot to push this but it didn't conflict!
* Fix hands GUI on godot.
* Update submodule.
* Obligatory submodule update.
* Work on exports.
* Work on exports.
* Update submodule.
* Update submodule.
* Fix dumb case mismatch between content and engine
* work pls.
* This maybe.
* Now!
* Update submodule.
* update submodule.
* Some WiP work on exporting aaah.
* OK READY FOR THE BUILDS SERVER.
* Probably should've made those commits in a different order.
* DO THE THING
* update submodule.
* Updates for effects system.
* Update submodule.
* Make file/line numbers show up on Windows Godot.
* Set submodule to master.
* Full interaction system
Has support for ranged interactions, and afterattacks, no longer relies on the clickable comopnent and you can click on no component and it will still function
* yes
* Change entry point to new system.
* Map saving/loading works.
* Cleans up old code.
* Saving and Loading of blueprints works.
* Saving and Loading of blueprints works.
* Updated the nuget 'YamlDotNet' package to 4.3.0.
* Submodules are trash
* Interaction Entity System
* ye
* Update submodule
* Requires engine update to function, but doesn't use shitcode
* Fix conflicts
* Fix conflicts but for real
* Update submodule
* Power Commit 1
* Commit 2
* Powernet Part2, All components essentially complete
* Commit 4
* Commit 5
* Commit 6
Creates prototypes
* Finishes powernet code alpha
Adds prototypes and logic for powernet updating and regeneration
* Adds onremove functionality to all components
Without these bits of logic nothing makes any sense!
* And this
* Fixes a lot of bugs
* Fix powernet thinking devices are duplicates
* Fix bug and add comments
* woop woop thats the sound of the police
* Updates submodule
Fix connect not entering server (with correct toml config) and compile error, updates submodule
Server still has an issue with toml file pointing towards sandbox instead of content and roundstart object initializations
* Updates more stuff
Needs my most recent PR on ss14 to function
* Submodule updated for real this time
* Doors WiP
* Kinda seem to work now?
* Finished
* Oh yeah maybe enable that.
* It works except it doesn't
* Undo formatting changes
* BuildChecker too
* Add prototype for temperature testing entity.
* Add Damageable, Destructible, Temperature. Add a prototype based on those.
* Works and cleaned up.
* Nerf