2020-08-22 22:29:20 +02:00
|
|
|
using System.Collections.Generic;
|
2020-02-23 19:47:33 -05:00
|
|
|
using System.Linq;
|
2021-06-09 22:19:39 +02:00
|
|
|
using Content.Server.Body.Circulatory;
|
|
|
|
|
using Content.Shared.Body.Networks;
|
2021-09-06 15:49:44 +02:00
|
|
|
using Content.Shared.Chemistry.Components;
|
|
|
|
|
using Content.Shared.Chemistry.EntitySystems;
|
2021-06-09 22:19:39 +02:00
|
|
|
using Content.Shared.Chemistry.Reagent;
|
2019-11-12 08:20:03 +11:00
|
|
|
using Robust.Shared.GameObjects;
|
2021-03-05 01:08:38 +01:00
|
|
|
using Robust.Shared.Serialization.Manager.Attributes;
|
2019-11-12 08:20:03 +11:00
|
|
|
using Robust.Shared.ViewVariables;
|
|
|
|
|
|
2021-06-09 22:19:39 +02:00
|
|
|
namespace Content.Server.Body.Behavior
|
2019-11-12 08:20:03 +11:00
|
|
|
{
|
2020-02-23 19:47:33 -05:00
|
|
|
/// <summary>
|
|
|
|
|
/// Where reagents go when ingested. Tracks ingested reagents over time, and
|
2020-10-10 15:25:13 +02:00
|
|
|
/// eventually transfers them to <see cref="SharedBloodstreamComponent"/> once digested.
|
2020-02-23 19:47:33 -05:00
|
|
|
/// </summary>
|
2020-11-02 11:37:37 +01:00
|
|
|
public class StomachBehavior : MechanismBehavior
|
2019-11-12 08:20:03 +11:00
|
|
|
{
|
2021-09-06 15:49:44 +02:00
|
|
|
private const string DefaultSolutionName = "stomach";
|
2020-10-10 15:25:13 +02:00
|
|
|
private float _accumulatedFrameTime;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Updates digestion status of ingested reagents.
|
|
|
|
|
/// Once reagents surpass _digestionDelay they are moved to the
|
|
|
|
|
/// bloodstream, where they are then metabolized.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="frameTime">
|
|
|
|
|
/// The time since the last update in seconds.
|
|
|
|
|
/// </param>
|
|
|
|
|
public override void Update(float frameTime)
|
|
|
|
|
{
|
Bug fixes for metabolisable reagents (#4385)
* HealthChangeMetabolism now scales with ticktime and metabolism rate
Both Food and Drink metabolisms scale with ticktime, Now HealthChangeMetabolism also does so.
Additionally, 'healthChange' now correctly scales with the metabolism rate, so it's description is now correct.
* LiverBehaviour now uses correct frameTime
Previously, the liver only metabolised reagants once every second, but incorrectly passes the current frameTime to the metabilism function, not 1 second.
* Stomach now only transfers non-empty solutions.
Makes debugging bloodstream bugs easier if the stomach is not constantly adding empty solution to it.
* Fixed StomachBehaviour using wrong SolutionContainerComponent
Stomach was using the first SolutionContainerComponent in the owner of the body, instead of the container in the owner of the mechanism (stomach). As a result, it used to use the BloodStreamComponent.Solution as a "Stomach".
* Update StomachBehavior.cs
Somach now checks if it still contains a reagant, before transferring it.
* Added argument to IMetabolizable.Metabolize()
Added availableReagent argument to IMetabolizable.Metabolize(), This ensures that this function does not over-metabolize a reagant, which can happen if tickTime*metabolismRate is larger than the available reagant
* Revert "Stomach now only transfers non-empty solutions."
This reverts commit 2a51e2d87e6e17ab76b48e5316ce501ec05ac061.
* Renamed _updateInterval to _updateIntervalSeconds
Also modified doc comment specifying units
* Fix spelling of healthChangeAmount
Changed from healthChangeAmmount to healthChangeAmount
* Fixed comment
comment used to mention _updateInterval, which has been renamed _updateIntervalSeconds
* Fixed typo in comment
* fixed typos: reagant -> reagent
Most typos were just in comments.
* Make metabolizable classes inherit from DefaultMetabolizable
Also involved changing around IMetabolizable
* Renamed variables
metabolismAmount -> amountMetabolized
* Updated Comments in DefaultMetabolizable
Makes it clearer why DefaultMetabolizable works as it does, and that other classes depend on it.
2021-07-31 14:11:02 +10:00
|
|
|
// Do not metabolise if the organ does not have a body.
|
2020-10-10 15:25:13 +02:00
|
|
|
if (Body == null)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_accumulatedFrameTime += frameTime;
|
|
|
|
|
|
|
|
|
|
// Update at most once per second
|
|
|
|
|
if (_accumulatedFrameTime < 1)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_accumulatedFrameTime -= 1;
|
|
|
|
|
|
2021-09-08 17:19:19 +10:00
|
|
|
if (!Body.Owner.TryGetComponent(out BloodstreamComponent? bloodstream) ||
|
|
|
|
|
StomachSolution == null) // Something has gone wrong here.
|
2020-10-10 15:25:13 +02:00
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2021-09-08 17:19:19 +10:00
|
|
|
// Reagents ready to transfer into the bloodstream are added to this solution
|
2020-10-10 15:25:13 +02:00
|
|
|
var transferSolution = new Solution();
|
|
|
|
|
|
|
|
|
|
// Use ToList here to remove entries while iterating
|
|
|
|
|
foreach (var delta in _reagentDeltas.ToList())
|
|
|
|
|
{
|
|
|
|
|
//Increment lifetime of reagents
|
2020-11-02 11:37:37 +01:00
|
|
|
delta.Increment(1);
|
2020-10-10 15:25:13 +02:00
|
|
|
if (delta.Lifetime > _digestionDelay)
|
|
|
|
|
{
|
2021-09-08 17:19:19 +10:00
|
|
|
// This reagent has been in the stomach long enough, TRY to transfer it.
|
Bug fixes for metabolisable reagents (#4385)
* HealthChangeMetabolism now scales with ticktime and metabolism rate
Both Food and Drink metabolisms scale with ticktime, Now HealthChangeMetabolism also does so.
Additionally, 'healthChange' now correctly scales with the metabolism rate, so it's description is now correct.
* LiverBehaviour now uses correct frameTime
Previously, the liver only metabolised reagants once every second, but incorrectly passes the current frameTime to the metabilism function, not 1 second.
* Stomach now only transfers non-empty solutions.
Makes debugging bloodstream bugs easier if the stomach is not constantly adding empty solution to it.
* Fixed StomachBehaviour using wrong SolutionContainerComponent
Stomach was using the first SolutionContainerComponent in the owner of the body, instead of the container in the owner of the mechanism (stomach). As a result, it used to use the BloodStreamComponent.Solution as a "Stomach".
* Update StomachBehavior.cs
Somach now checks if it still contains a reagant, before transferring it.
* Added argument to IMetabolizable.Metabolize()
Added availableReagent argument to IMetabolizable.Metabolize(), This ensures that this function does not over-metabolize a reagant, which can happen if tickTime*metabolismRate is larger than the available reagant
* Revert "Stomach now only transfers non-empty solutions."
This reverts commit 2a51e2d87e6e17ab76b48e5316ce501ec05ac061.
* Renamed _updateInterval to _updateIntervalSeconds
Also modified doc comment specifying units
* Fix spelling of healthChangeAmount
Changed from healthChangeAmmount to healthChangeAmount
* Fixed comment
comment used to mention _updateInterval, which has been renamed _updateIntervalSeconds
* Fixed typo in comment
* fixed typos: reagant -> reagent
Most typos were just in comments.
* Make metabolizable classes inherit from DefaultMetabolizable
Also involved changing around IMetabolizable
* Renamed variables
metabolismAmount -> amountMetabolized
* Updated Comments in DefaultMetabolizable
Makes it clearer why DefaultMetabolizable works as it does, and that other classes depend on it.
2021-07-31 14:11:02 +10:00
|
|
|
// But first, check if the reagent still exists, and how much is left.
|
|
|
|
|
// Some poor spessman may have washed down a potassium snack with some water.
|
2021-09-08 17:19:19 +10:00
|
|
|
if (StomachSolution.ContainsReagent(delta.ReagentId, out ReagentUnit quantity))
|
2021-09-06 15:49:44 +02:00
|
|
|
{
|
|
|
|
|
if (quantity > delta.Quantity)
|
|
|
|
|
{
|
Bug fixes for metabolisable reagents (#4385)
* HealthChangeMetabolism now scales with ticktime and metabolism rate
Both Food and Drink metabolisms scale with ticktime, Now HealthChangeMetabolism also does so.
Additionally, 'healthChange' now correctly scales with the metabolism rate, so it's description is now correct.
* LiverBehaviour now uses correct frameTime
Previously, the liver only metabolised reagants once every second, but incorrectly passes the current frameTime to the metabilism function, not 1 second.
* Stomach now only transfers non-empty solutions.
Makes debugging bloodstream bugs easier if the stomach is not constantly adding empty solution to it.
* Fixed StomachBehaviour using wrong SolutionContainerComponent
Stomach was using the first SolutionContainerComponent in the owner of the body, instead of the container in the owner of the mechanism (stomach). As a result, it used to use the BloodStreamComponent.Solution as a "Stomach".
* Update StomachBehavior.cs
Somach now checks if it still contains a reagant, before transferring it.
* Added argument to IMetabolizable.Metabolize()
Added availableReagent argument to IMetabolizable.Metabolize(), This ensures that this function does not over-metabolize a reagant, which can happen if tickTime*metabolismRate is larger than the available reagant
* Revert "Stomach now only transfers non-empty solutions."
This reverts commit 2a51e2d87e6e17ab76b48e5316ce501ec05ac061.
* Renamed _updateInterval to _updateIntervalSeconds
Also modified doc comment specifying units
* Fix spelling of healthChangeAmount
Changed from healthChangeAmmount to healthChangeAmount
* Fixed comment
comment used to mention _updateInterval, which has been renamed _updateIntervalSeconds
* Fixed typo in comment
* fixed typos: reagant -> reagent
Most typos were just in comments.
* Make metabolizable classes inherit from DefaultMetabolizable
Also involved changing around IMetabolizable
* Renamed variables
metabolismAmount -> amountMetabolized
* Updated Comments in DefaultMetabolizable
Makes it clearer why DefaultMetabolizable works as it does, and that other classes depend on it.
2021-07-31 14:11:02 +10:00
|
|
|
quantity = delta.Quantity;
|
|
|
|
|
}
|
|
|
|
|
|
2021-09-06 15:49:44 +02:00
|
|
|
EntitySystem.Get<SolutionContainerSystem>()
|
2021-09-08 17:19:19 +10:00
|
|
|
.TryRemoveReagent(Owner.Uid, StomachSolution, delta.ReagentId, quantity);
|
Bug fixes for metabolisable reagents (#4385)
* HealthChangeMetabolism now scales with ticktime and metabolism rate
Both Food and Drink metabolisms scale with ticktime, Now HealthChangeMetabolism also does so.
Additionally, 'healthChange' now correctly scales with the metabolism rate, so it's description is now correct.
* LiverBehaviour now uses correct frameTime
Previously, the liver only metabolised reagants once every second, but incorrectly passes the current frameTime to the metabilism function, not 1 second.
* Stomach now only transfers non-empty solutions.
Makes debugging bloodstream bugs easier if the stomach is not constantly adding empty solution to it.
* Fixed StomachBehaviour using wrong SolutionContainerComponent
Stomach was using the first SolutionContainerComponent in the owner of the body, instead of the container in the owner of the mechanism (stomach). As a result, it used to use the BloodStreamComponent.Solution as a "Stomach".
* Update StomachBehavior.cs
Somach now checks if it still contains a reagant, before transferring it.
* Added argument to IMetabolizable.Metabolize()
Added availableReagent argument to IMetabolizable.Metabolize(), This ensures that this function does not over-metabolize a reagant, which can happen if tickTime*metabolismRate is larger than the available reagant
* Revert "Stomach now only transfers non-empty solutions."
This reverts commit 2a51e2d87e6e17ab76b48e5316ce501ec05ac061.
* Renamed _updateInterval to _updateIntervalSeconds
Also modified doc comment specifying units
* Fix spelling of healthChangeAmount
Changed from healthChangeAmmount to healthChangeAmount
* Fixed comment
comment used to mention _updateInterval, which has been renamed _updateIntervalSeconds
* Fixed typo in comment
* fixed typos: reagant -> reagent
Most typos were just in comments.
* Make metabolizable classes inherit from DefaultMetabolizable
Also involved changing around IMetabolizable
* Renamed variables
metabolismAmount -> amountMetabolized
* Updated Comments in DefaultMetabolizable
Makes it clearer why DefaultMetabolizable works as it does, and that other classes depend on it.
2021-07-31 14:11:02 +10:00
|
|
|
transferSolution.AddReagent(delta.ReagentId, quantity);
|
|
|
|
|
}
|
|
|
|
|
|
2020-10-10 15:25:13 +02:00
|
|
|
_reagentDeltas.Remove(delta);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Transfer digested reagents to bloodstream
|
|
|
|
|
bloodstream.TryTransferSolution(transferSolution);
|
|
|
|
|
}
|
|
|
|
|
|
2021-09-06 15:49:44 +02:00
|
|
|
public Solution? StomachSolution
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
EntitySystem.Get<SolutionContainerSystem>().TryGetSolution(Owner, DefaultSolutionName, out var solution);
|
|
|
|
|
return solution;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-02-23 19:47:33 -05:00
|
|
|
/// <summary>
|
Bodysystem and damagesystem rework (#1544)
* Things and stuff with grids, unfinished w/ code debug changes.
* Updated submodule and also lost some progress cause I fucked it up xd
* First unfinished draft of the BodySystem. Doesn't compile.
* More changes to make it compile, but still just a framework. Doesn't do anything at the moment.
* Many cleanup changes.
* Revert "Merge branch 'master' of https://github.com/GlassEclipse/space-station-14 into body_system"
This reverts commit ddd4aebbc76cf2a0b7b102f72b93d55a0816c88c, reversing
changes made to 12d0dd752706bdda8879393bd8191a1199a0c978.
* Commit human.yml
* Updated a lot of things to be more classy, more progress overall, etc. etc.
* Latest update with many changes
* Minor changes
* Fixed Travis build bug
* Adds first draft of Body Scanner console, apparently I also forgot to tie Mechanisms into body parts so now a heart just sits in the Torso like a good boy :)
* Commit rest of stuff
* Latest changes
* Latest changes again
* 14 naked cowboys
* Yay!
* Latest changes (probably doesnt compile)
* Surgery!!!!!!!!!~1116y
* Cleaned some stuff up
* More cleanup
* Refactoring of code. Basic surgery path now done.
* Removed readme, has been added to HackMD
* Fixes typo (and thus test errors)
* WIP changes, committing so I can pull latest master changes
* Still working on that god awful merge
* Latest changes
* Latest changes!!
* Beginning of refactor to BoundUserInterface
* Surgery!
* Latest changes - fixes pr change requests and random fixes
* oops
* Fixes bodypart recursion
* Beginning of work on revamping the damage system.
* More latest changes
* Latest changes
* Finished merge
* Commit before removing old healthcode
* Almost done with removing speciescomponent...
* It compiles!!!
* yahoo more work
* Fixes to make it work
* Merge conflict fixes
* Deleting species visualizer was a mistake
* IDE warnings are VERBOTEN
* makes the server not kill itself on startup, some cleanup (#1)
* Namespaces, comments and exception fixes
* Fix conveyor and conveyor switch serialization
SS14 in reactive when
* Move damage, acts and body to shared
Damage cleanup
Comment cleanup
* Rename SpeciesComponent to RotationComponent and cleanup
Damage cleanup
Comment cleanup
* Fix nullable warnings
* Address old reviews
Fix off welder suicide damage type, deathmatch and suspicion
* Fix new test fail with units being able to accept items when unpowered
* Remove RotationComponent, change references to IBodyManagerComponent
* Add a bloodstream to humans
* More cleanups
* Add body conduits, connections, connectors substances and valves
* Revert "Add body conduits, connections, connectors substances and valves"
This reverts commit 9ab0b50e6b15fe98852d7b0836c0cdbf4bd76d20.
* Implement the heart mechanism behavior with the circulatory network
* Added network property to mechanism behaviors
* Changed human organ sprites and added missing ones
* Fix tests
* Add individual body part sprite rendering
* Fix error where dropped mechanisms are not initialized
* Implement client/server body damage
* Make DamageContainer take care of raising events
* Reimplement medical scanner with the new body system
* Improve the medical scanner ui
* Merge conflict fixes
* Fix crash when colliding with something
* Fix microwave suicides and eyes sprite rendering
* Fix nullable reference error
* Fix up surgery client side
* Fix missing using from merge conflict
* Add breathing
*inhale
* Merge conflict fixes
* Fix accumulatedframetime being reset to 0 instead of decreased by the threshold
https://github.com/space-wizards/space-station-14/pull/1617
* Use and add to the new AtmosHelpers
* Fix feet
* Add proper coloring to dropped body parts
* Fix Urist's lungs being too strong
* Merge conflict fixes
* Merge conflict fixes
* Merge conflict fixes
Co-authored-by: GlassEclipse <tsymall5@gmail.com>
Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com>
Co-authored-by: AJCM-git <60196617+AJCM-git@users.noreply.github.com>
2020-08-17 01:42:42 +02:00
|
|
|
/// Max volume of internal solution storage
|
2020-02-23 19:47:33 -05:00
|
|
|
/// </summary>
|
2020-04-05 11:36:12 +02:00
|
|
|
public ReagentUnit MaxVolume
|
2019-11-12 08:20:03 +11:00
|
|
|
{
|
2021-09-06 15:49:44 +02:00
|
|
|
get =>
|
|
|
|
|
StomachSolution?.MaxVolume ?? ReagentUnit.Zero;
|
|
|
|
|
|
2020-08-22 22:29:20 +02:00
|
|
|
set
|
|
|
|
|
{
|
2021-09-06 15:49:44 +02:00
|
|
|
if (StomachSolution != null)
|
2020-08-22 22:29:20 +02:00
|
|
|
{
|
2021-09-06 15:49:44 +02:00
|
|
|
StomachSolution.MaxVolume = value;
|
2020-08-22 22:29:20 +02:00
|
|
|
}
|
|
|
|
|
}
|
2019-11-12 08:20:03 +11:00
|
|
|
}
|
2020-02-23 19:47:33 -05:00
|
|
|
|
|
|
|
|
/// <summary>
|
Bodysystem and damagesystem rework (#1544)
* Things and stuff with grids, unfinished w/ code debug changes.
* Updated submodule and also lost some progress cause I fucked it up xd
* First unfinished draft of the BodySystem. Doesn't compile.
* More changes to make it compile, but still just a framework. Doesn't do anything at the moment.
* Many cleanup changes.
* Revert "Merge branch 'master' of https://github.com/GlassEclipse/space-station-14 into body_system"
This reverts commit ddd4aebbc76cf2a0b7b102f72b93d55a0816c88c, reversing
changes made to 12d0dd752706bdda8879393bd8191a1199a0c978.
* Commit human.yml
* Updated a lot of things to be more classy, more progress overall, etc. etc.
* Latest update with many changes
* Minor changes
* Fixed Travis build bug
* Adds first draft of Body Scanner console, apparently I also forgot to tie Mechanisms into body parts so now a heart just sits in the Torso like a good boy :)
* Commit rest of stuff
* Latest changes
* Latest changes again
* 14 naked cowboys
* Yay!
* Latest changes (probably doesnt compile)
* Surgery!!!!!!!!!~1116y
* Cleaned some stuff up
* More cleanup
* Refactoring of code. Basic surgery path now done.
* Removed readme, has been added to HackMD
* Fixes typo (and thus test errors)
* WIP changes, committing so I can pull latest master changes
* Still working on that god awful merge
* Latest changes
* Latest changes!!
* Beginning of refactor to BoundUserInterface
* Surgery!
* Latest changes - fixes pr change requests and random fixes
* oops
* Fixes bodypart recursion
* Beginning of work on revamping the damage system.
* More latest changes
* Latest changes
* Finished merge
* Commit before removing old healthcode
* Almost done with removing speciescomponent...
* It compiles!!!
* yahoo more work
* Fixes to make it work
* Merge conflict fixes
* Deleting species visualizer was a mistake
* IDE warnings are VERBOTEN
* makes the server not kill itself on startup, some cleanup (#1)
* Namespaces, comments and exception fixes
* Fix conveyor and conveyor switch serialization
SS14 in reactive when
* Move damage, acts and body to shared
Damage cleanup
Comment cleanup
* Rename SpeciesComponent to RotationComponent and cleanup
Damage cleanup
Comment cleanup
* Fix nullable warnings
* Address old reviews
Fix off welder suicide damage type, deathmatch and suspicion
* Fix new test fail with units being able to accept items when unpowered
* Remove RotationComponent, change references to IBodyManagerComponent
* Add a bloodstream to humans
* More cleanups
* Add body conduits, connections, connectors substances and valves
* Revert "Add body conduits, connections, connectors substances and valves"
This reverts commit 9ab0b50e6b15fe98852d7b0836c0cdbf4bd76d20.
* Implement the heart mechanism behavior with the circulatory network
* Added network property to mechanism behaviors
* Changed human organ sprites and added missing ones
* Fix tests
* Add individual body part sprite rendering
* Fix error where dropped mechanisms are not initialized
* Implement client/server body damage
* Make DamageContainer take care of raising events
* Reimplement medical scanner with the new body system
* Improve the medical scanner ui
* Merge conflict fixes
* Fix crash when colliding with something
* Fix microwave suicides and eyes sprite rendering
* Fix nullable reference error
* Fix up surgery client side
* Fix missing using from merge conflict
* Add breathing
*inhale
* Merge conflict fixes
* Fix accumulatedframetime being reset to 0 instead of decreased by the threshold
https://github.com/space-wizards/space-station-14/pull/1617
* Use and add to the new AtmosHelpers
* Fix feet
* Add proper coloring to dropped body parts
* Fix Urist's lungs being too strong
* Merge conflict fixes
* Merge conflict fixes
* Merge conflict fixes
Co-authored-by: GlassEclipse <tsymall5@gmail.com>
Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com>
Co-authored-by: AJCM-git <60196617+AJCM-git@users.noreply.github.com>
2020-08-17 01:42:42 +02:00
|
|
|
/// Initial internal solution storage volume
|
2020-02-23 19:47:33 -05:00
|
|
|
/// </summary>
|
2021-03-05 01:08:38 +01:00
|
|
|
[DataField("maxVolume")]
|
2020-02-23 19:47:33 -05:00
|
|
|
[ViewVariables]
|
2021-03-05 01:08:38 +01:00
|
|
|
protected ReagentUnit InitialMaxVolume { get; private set; } = ReagentUnit.New(100);
|
2020-02-23 19:47:33 -05:00
|
|
|
|
|
|
|
|
/// <summary>
|
2020-10-10 15:25:13 +02:00
|
|
|
/// Time in seconds between reagents being ingested and them being
|
|
|
|
|
/// transferred to <see cref="SharedBloodstreamComponent"/>
|
2020-02-23 19:47:33 -05:00
|
|
|
/// </summary>
|
2021-03-05 01:08:38 +01:00
|
|
|
[DataField("digestionDelay")] [ViewVariables]
|
|
|
|
|
private float _digestionDelay = 20;
|
2020-02-23 19:47:33 -05:00
|
|
|
|
|
|
|
|
/// <summary>
|
Bodysystem and damagesystem rework (#1544)
* Things and stuff with grids, unfinished w/ code debug changes.
* Updated submodule and also lost some progress cause I fucked it up xd
* First unfinished draft of the BodySystem. Doesn't compile.
* More changes to make it compile, but still just a framework. Doesn't do anything at the moment.
* Many cleanup changes.
* Revert "Merge branch 'master' of https://github.com/GlassEclipse/space-station-14 into body_system"
This reverts commit ddd4aebbc76cf2a0b7b102f72b93d55a0816c88c, reversing
changes made to 12d0dd752706bdda8879393bd8191a1199a0c978.
* Commit human.yml
* Updated a lot of things to be more classy, more progress overall, etc. etc.
* Latest update with many changes
* Minor changes
* Fixed Travis build bug
* Adds first draft of Body Scanner console, apparently I also forgot to tie Mechanisms into body parts so now a heart just sits in the Torso like a good boy :)
* Commit rest of stuff
* Latest changes
* Latest changes again
* 14 naked cowboys
* Yay!
* Latest changes (probably doesnt compile)
* Surgery!!!!!!!!!~1116y
* Cleaned some stuff up
* More cleanup
* Refactoring of code. Basic surgery path now done.
* Removed readme, has been added to HackMD
* Fixes typo (and thus test errors)
* WIP changes, committing so I can pull latest master changes
* Still working on that god awful merge
* Latest changes
* Latest changes!!
* Beginning of refactor to BoundUserInterface
* Surgery!
* Latest changes - fixes pr change requests and random fixes
* oops
* Fixes bodypart recursion
* Beginning of work on revamping the damage system.
* More latest changes
* Latest changes
* Finished merge
* Commit before removing old healthcode
* Almost done with removing speciescomponent...
* It compiles!!!
* yahoo more work
* Fixes to make it work
* Merge conflict fixes
* Deleting species visualizer was a mistake
* IDE warnings are VERBOTEN
* makes the server not kill itself on startup, some cleanup (#1)
* Namespaces, comments and exception fixes
* Fix conveyor and conveyor switch serialization
SS14 in reactive when
* Move damage, acts and body to shared
Damage cleanup
Comment cleanup
* Rename SpeciesComponent to RotationComponent and cleanup
Damage cleanup
Comment cleanup
* Fix nullable warnings
* Address old reviews
Fix off welder suicide damage type, deathmatch and suspicion
* Fix new test fail with units being able to accept items when unpowered
* Remove RotationComponent, change references to IBodyManagerComponent
* Add a bloodstream to humans
* More cleanups
* Add body conduits, connections, connectors substances and valves
* Revert "Add body conduits, connections, connectors substances and valves"
This reverts commit 9ab0b50e6b15fe98852d7b0836c0cdbf4bd76d20.
* Implement the heart mechanism behavior with the circulatory network
* Added network property to mechanism behaviors
* Changed human organ sprites and added missing ones
* Fix tests
* Add individual body part sprite rendering
* Fix error where dropped mechanisms are not initialized
* Implement client/server body damage
* Make DamageContainer take care of raising events
* Reimplement medical scanner with the new body system
* Improve the medical scanner ui
* Merge conflict fixes
* Fix crash when colliding with something
* Fix microwave suicides and eyes sprite rendering
* Fix nullable reference error
* Fix up surgery client side
* Fix missing using from merge conflict
* Add breathing
*inhale
* Merge conflict fixes
* Fix accumulatedframetime being reset to 0 instead of decreased by the threshold
https://github.com/space-wizards/space-station-14/pull/1617
* Use and add to the new AtmosHelpers
* Fix feet
* Add proper coloring to dropped body parts
* Fix Urist's lungs being too strong
* Merge conflict fixes
* Merge conflict fixes
* Merge conflict fixes
Co-authored-by: GlassEclipse <tsymall5@gmail.com>
Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com>
Co-authored-by: AJCM-git <60196617+AJCM-git@users.noreply.github.com>
2020-08-17 01:42:42 +02:00
|
|
|
/// Used to track how long each reagent has been in the stomach
|
2020-02-23 19:47:33 -05:00
|
|
|
/// </summary>
|
2021-09-06 15:49:44 +02:00
|
|
|
[ViewVariables] private readonly List<ReagentDelta> _reagentDeltas = new();
|
2020-02-23 19:47:33 -05:00
|
|
|
|
2020-11-02 11:37:37 +01:00
|
|
|
public override void Startup()
|
|
|
|
|
{
|
|
|
|
|
base.Startup();
|
|
|
|
|
|
2021-09-06 15:49:44 +02:00
|
|
|
var solution = EntitySystem.Get<SolutionContainerSystem>().EnsureSolution(Owner, DefaultSolutionName);
|
2020-11-02 11:37:37 +01:00
|
|
|
solution.MaxVolume = InitialMaxVolume;
|
|
|
|
|
}
|
|
|
|
|
|
2020-09-26 14:48:24 +02:00
|
|
|
public bool CanTransferSolution(Solution solution)
|
2019-11-12 08:20:03 +11:00
|
|
|
{
|
2021-09-06 15:49:44 +02:00
|
|
|
if (StomachSolution == null)
|
2020-08-22 22:29:20 +02:00
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2019-11-12 08:20:03 +11:00
|
|
|
// TODO: For now no partial transfers. Potentially change by design
|
2021-09-06 15:49:44 +02:00
|
|
|
if (!StomachSolution.CanAddSolution(solution))
|
2019-11-12 08:20:03 +11:00
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
2020-02-23 19:47:33 -05:00
|
|
|
|
2020-09-26 14:48:24 +02:00
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool TryTransferSolution(Solution solution)
|
|
|
|
|
{
|
Bug fixes for metabolisable reagents (#4385)
* HealthChangeMetabolism now scales with ticktime and metabolism rate
Both Food and Drink metabolisms scale with ticktime, Now HealthChangeMetabolism also does so.
Additionally, 'healthChange' now correctly scales with the metabolism rate, so it's description is now correct.
* LiverBehaviour now uses correct frameTime
Previously, the liver only metabolised reagants once every second, but incorrectly passes the current frameTime to the metabilism function, not 1 second.
* Stomach now only transfers non-empty solutions.
Makes debugging bloodstream bugs easier if the stomach is not constantly adding empty solution to it.
* Fixed StomachBehaviour using wrong SolutionContainerComponent
Stomach was using the first SolutionContainerComponent in the owner of the body, instead of the container in the owner of the mechanism (stomach). As a result, it used to use the BloodStreamComponent.Solution as a "Stomach".
* Update StomachBehavior.cs
Somach now checks if it still contains a reagant, before transferring it.
* Added argument to IMetabolizable.Metabolize()
Added availableReagent argument to IMetabolizable.Metabolize(), This ensures that this function does not over-metabolize a reagant, which can happen if tickTime*metabolismRate is larger than the available reagant
* Revert "Stomach now only transfers non-empty solutions."
This reverts commit 2a51e2d87e6e17ab76b48e5316ce501ec05ac061.
* Renamed _updateInterval to _updateIntervalSeconds
Also modified doc comment specifying units
* Fix spelling of healthChangeAmount
Changed from healthChangeAmmount to healthChangeAmount
* Fixed comment
comment used to mention _updateInterval, which has been renamed _updateIntervalSeconds
* Fixed typo in comment
* fixed typos: reagant -> reagent
Most typos were just in comments.
* Make metabolizable classes inherit from DefaultMetabolizable
Also involved changing around IMetabolizable
* Renamed variables
metabolismAmount -> amountMetabolized
* Updated Comments in DefaultMetabolizable
Makes it clearer why DefaultMetabolizable works as it does, and that other classes depend on it.
2021-07-31 14:11:02 +10:00
|
|
|
if (Owner == null || !CanTransferSolution(solution))
|
2020-09-26 14:48:24 +02:00
|
|
|
return false;
|
|
|
|
|
|
2021-09-06 15:49:44 +02:00
|
|
|
if (StomachSolution == null)
|
2020-10-10 15:25:13 +02:00
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
2020-09-26 14:48:24 +02:00
|
|
|
|
Bodysystem and damagesystem rework (#1544)
* Things and stuff with grids, unfinished w/ code debug changes.
* Updated submodule and also lost some progress cause I fucked it up xd
* First unfinished draft of the BodySystem. Doesn't compile.
* More changes to make it compile, but still just a framework. Doesn't do anything at the moment.
* Many cleanup changes.
* Revert "Merge branch 'master' of https://github.com/GlassEclipse/space-station-14 into body_system"
This reverts commit ddd4aebbc76cf2a0b7b102f72b93d55a0816c88c, reversing
changes made to 12d0dd752706bdda8879393bd8191a1199a0c978.
* Commit human.yml
* Updated a lot of things to be more classy, more progress overall, etc. etc.
* Latest update with many changes
* Minor changes
* Fixed Travis build bug
* Adds first draft of Body Scanner console, apparently I also forgot to tie Mechanisms into body parts so now a heart just sits in the Torso like a good boy :)
* Commit rest of stuff
* Latest changes
* Latest changes again
* 14 naked cowboys
* Yay!
* Latest changes (probably doesnt compile)
* Surgery!!!!!!!!!~1116y
* Cleaned some stuff up
* More cleanup
* Refactoring of code. Basic surgery path now done.
* Removed readme, has been added to HackMD
* Fixes typo (and thus test errors)
* WIP changes, committing so I can pull latest master changes
* Still working on that god awful merge
* Latest changes
* Latest changes!!
* Beginning of refactor to BoundUserInterface
* Surgery!
* Latest changes - fixes pr change requests and random fixes
* oops
* Fixes bodypart recursion
* Beginning of work on revamping the damage system.
* More latest changes
* Latest changes
* Finished merge
* Commit before removing old healthcode
* Almost done with removing speciescomponent...
* It compiles!!!
* yahoo more work
* Fixes to make it work
* Merge conflict fixes
* Deleting species visualizer was a mistake
* IDE warnings are VERBOTEN
* makes the server not kill itself on startup, some cleanup (#1)
* Namespaces, comments and exception fixes
* Fix conveyor and conveyor switch serialization
SS14 in reactive when
* Move damage, acts and body to shared
Damage cleanup
Comment cleanup
* Rename SpeciesComponent to RotationComponent and cleanup
Damage cleanup
Comment cleanup
* Fix nullable warnings
* Address old reviews
Fix off welder suicide damage type, deathmatch and suspicion
* Fix new test fail with units being able to accept items when unpowered
* Remove RotationComponent, change references to IBodyManagerComponent
* Add a bloodstream to humans
* More cleanups
* Add body conduits, connections, connectors substances and valves
* Revert "Add body conduits, connections, connectors substances and valves"
This reverts commit 9ab0b50e6b15fe98852d7b0836c0cdbf4bd76d20.
* Implement the heart mechanism behavior with the circulatory network
* Added network property to mechanism behaviors
* Changed human organ sprites and added missing ones
* Fix tests
* Add individual body part sprite rendering
* Fix error where dropped mechanisms are not initialized
* Implement client/server body damage
* Make DamageContainer take care of raising events
* Reimplement medical scanner with the new body system
* Improve the medical scanner ui
* Merge conflict fixes
* Fix crash when colliding with something
* Fix microwave suicides and eyes sprite rendering
* Fix nullable reference error
* Fix up surgery client side
* Fix missing using from merge conflict
* Add breathing
*inhale
* Merge conflict fixes
* Fix accumulatedframetime being reset to 0 instead of decreased by the threshold
https://github.com/space-wizards/space-station-14/pull/1617
* Use and add to the new AtmosHelpers
* Fix feet
* Add proper coloring to dropped body parts
* Fix Urist's lungs being too strong
* Merge conflict fixes
* Merge conflict fixes
* Merge conflict fixes
Co-authored-by: GlassEclipse <tsymall5@gmail.com>
Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com>
Co-authored-by: AJCM-git <60196617+AJCM-git@users.noreply.github.com>
2020-08-17 01:42:42 +02:00
|
|
|
// Add solution to _stomachContents
|
2021-09-06 15:49:44 +02:00
|
|
|
EntitySystem.Get<SolutionContainerSystem>().TryAddSolution(Owner.Uid, StomachSolution, solution);
|
Bodysystem and damagesystem rework (#1544)
* Things and stuff with grids, unfinished w/ code debug changes.
* Updated submodule and also lost some progress cause I fucked it up xd
* First unfinished draft of the BodySystem. Doesn't compile.
* More changes to make it compile, but still just a framework. Doesn't do anything at the moment.
* Many cleanup changes.
* Revert "Merge branch 'master' of https://github.com/GlassEclipse/space-station-14 into body_system"
This reverts commit ddd4aebbc76cf2a0b7b102f72b93d55a0816c88c, reversing
changes made to 12d0dd752706bdda8879393bd8191a1199a0c978.
* Commit human.yml
* Updated a lot of things to be more classy, more progress overall, etc. etc.
* Latest update with many changes
* Minor changes
* Fixed Travis build bug
* Adds first draft of Body Scanner console, apparently I also forgot to tie Mechanisms into body parts so now a heart just sits in the Torso like a good boy :)
* Commit rest of stuff
* Latest changes
* Latest changes again
* 14 naked cowboys
* Yay!
* Latest changes (probably doesnt compile)
* Surgery!!!!!!!!!~1116y
* Cleaned some stuff up
* More cleanup
* Refactoring of code. Basic surgery path now done.
* Removed readme, has been added to HackMD
* Fixes typo (and thus test errors)
* WIP changes, committing so I can pull latest master changes
* Still working on that god awful merge
* Latest changes
* Latest changes!!
* Beginning of refactor to BoundUserInterface
* Surgery!
* Latest changes - fixes pr change requests and random fixes
* oops
* Fixes bodypart recursion
* Beginning of work on revamping the damage system.
* More latest changes
* Latest changes
* Finished merge
* Commit before removing old healthcode
* Almost done with removing speciescomponent...
* It compiles!!!
* yahoo more work
* Fixes to make it work
* Merge conflict fixes
* Deleting species visualizer was a mistake
* IDE warnings are VERBOTEN
* makes the server not kill itself on startup, some cleanup (#1)
* Namespaces, comments and exception fixes
* Fix conveyor and conveyor switch serialization
SS14 in reactive when
* Move damage, acts and body to shared
Damage cleanup
Comment cleanup
* Rename SpeciesComponent to RotationComponent and cleanup
Damage cleanup
Comment cleanup
* Fix nullable warnings
* Address old reviews
Fix off welder suicide damage type, deathmatch and suspicion
* Fix new test fail with units being able to accept items when unpowered
* Remove RotationComponent, change references to IBodyManagerComponent
* Add a bloodstream to humans
* More cleanups
* Add body conduits, connections, connectors substances and valves
* Revert "Add body conduits, connections, connectors substances and valves"
This reverts commit 9ab0b50e6b15fe98852d7b0836c0cdbf4bd76d20.
* Implement the heart mechanism behavior with the circulatory network
* Added network property to mechanism behaviors
* Changed human organ sprites and added missing ones
* Fix tests
* Add individual body part sprite rendering
* Fix error where dropped mechanisms are not initialized
* Implement client/server body damage
* Make DamageContainer take care of raising events
* Reimplement medical scanner with the new body system
* Improve the medical scanner ui
* Merge conflict fixes
* Fix crash when colliding with something
* Fix microwave suicides and eyes sprite rendering
* Fix nullable reference error
* Fix up surgery client side
* Fix missing using from merge conflict
* Add breathing
*inhale
* Merge conflict fixes
* Fix accumulatedframetime being reset to 0 instead of decreased by the threshold
https://github.com/space-wizards/space-station-14/pull/1617
* Use and add to the new AtmosHelpers
* Fix feet
* Add proper coloring to dropped body parts
* Fix Urist's lungs being too strong
* Merge conflict fixes
* Merge conflict fixes
* Merge conflict fixes
Co-authored-by: GlassEclipse <tsymall5@gmail.com>
Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com>
Co-authored-by: AJCM-git <60196617+AJCM-git@users.noreply.github.com>
2020-08-17 01:42:42 +02:00
|
|
|
// Add each reagent to _reagentDeltas. Used to track how long each reagent has been in the stomach
|
2020-02-23 19:47:33 -05:00
|
|
|
foreach (var reagent in solution.Contents)
|
|
|
|
|
{
|
|
|
|
|
_reagentDeltas.Add(new ReagentDelta(reagent.ReagentId, reagent.Quantity));
|
|
|
|
|
}
|
|
|
|
|
|
2019-11-12 08:20:03 +11:00
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
2019-11-21 17:24:19 -05:00
|
|
|
/// <summary>
|
Bodysystem and damagesystem rework (#1544)
* Things and stuff with grids, unfinished w/ code debug changes.
* Updated submodule and also lost some progress cause I fucked it up xd
* First unfinished draft of the BodySystem. Doesn't compile.
* More changes to make it compile, but still just a framework. Doesn't do anything at the moment.
* Many cleanup changes.
* Revert "Merge branch 'master' of https://github.com/GlassEclipse/space-station-14 into body_system"
This reverts commit ddd4aebbc76cf2a0b7b102f72b93d55a0816c88c, reversing
changes made to 12d0dd752706bdda8879393bd8191a1199a0c978.
* Commit human.yml
* Updated a lot of things to be more classy, more progress overall, etc. etc.
* Latest update with many changes
* Minor changes
* Fixed Travis build bug
* Adds first draft of Body Scanner console, apparently I also forgot to tie Mechanisms into body parts so now a heart just sits in the Torso like a good boy :)
* Commit rest of stuff
* Latest changes
* Latest changes again
* 14 naked cowboys
* Yay!
* Latest changes (probably doesnt compile)
* Surgery!!!!!!!!!~1116y
* Cleaned some stuff up
* More cleanup
* Refactoring of code. Basic surgery path now done.
* Removed readme, has been added to HackMD
* Fixes typo (and thus test errors)
* WIP changes, committing so I can pull latest master changes
* Still working on that god awful merge
* Latest changes
* Latest changes!!
* Beginning of refactor to BoundUserInterface
* Surgery!
* Latest changes - fixes pr change requests and random fixes
* oops
* Fixes bodypart recursion
* Beginning of work on revamping the damage system.
* More latest changes
* Latest changes
* Finished merge
* Commit before removing old healthcode
* Almost done with removing speciescomponent...
* It compiles!!!
* yahoo more work
* Fixes to make it work
* Merge conflict fixes
* Deleting species visualizer was a mistake
* IDE warnings are VERBOTEN
* makes the server not kill itself on startup, some cleanup (#1)
* Namespaces, comments and exception fixes
* Fix conveyor and conveyor switch serialization
SS14 in reactive when
* Move damage, acts and body to shared
Damage cleanup
Comment cleanup
* Rename SpeciesComponent to RotationComponent and cleanup
Damage cleanup
Comment cleanup
* Fix nullable warnings
* Address old reviews
Fix off welder suicide damage type, deathmatch and suspicion
* Fix new test fail with units being able to accept items when unpowered
* Remove RotationComponent, change references to IBodyManagerComponent
* Add a bloodstream to humans
* More cleanups
* Add body conduits, connections, connectors substances and valves
* Revert "Add body conduits, connections, connectors substances and valves"
This reverts commit 9ab0b50e6b15fe98852d7b0836c0cdbf4bd76d20.
* Implement the heart mechanism behavior with the circulatory network
* Added network property to mechanism behaviors
* Changed human organ sprites and added missing ones
* Fix tests
* Add individual body part sprite rendering
* Fix error where dropped mechanisms are not initialized
* Implement client/server body damage
* Make DamageContainer take care of raising events
* Reimplement medical scanner with the new body system
* Improve the medical scanner ui
* Merge conflict fixes
* Fix crash when colliding with something
* Fix microwave suicides and eyes sprite rendering
* Fix nullable reference error
* Fix up surgery client side
* Fix missing using from merge conflict
* Add breathing
*inhale
* Merge conflict fixes
* Fix accumulatedframetime being reset to 0 instead of decreased by the threshold
https://github.com/space-wizards/space-station-14/pull/1617
* Use and add to the new AtmosHelpers
* Fix feet
* Add proper coloring to dropped body parts
* Fix Urist's lungs being too strong
* Merge conflict fixes
* Merge conflict fixes
* Merge conflict fixes
Co-authored-by: GlassEclipse <tsymall5@gmail.com>
Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com>
Co-authored-by: AJCM-git <60196617+AJCM-git@users.noreply.github.com>
2020-08-17 01:42:42 +02:00
|
|
|
/// Used to track quantity changes when ingesting & digesting reagents
|
2019-11-21 17:24:19 -05:00
|
|
|
/// </summary>
|
2020-10-10 15:25:13 +02:00
|
|
|
protected class ReagentDelta
|
2019-11-12 08:20:03 +11:00
|
|
|
{
|
2020-02-23 19:47:33 -05:00
|
|
|
public readonly string ReagentId;
|
2020-04-05 11:36:12 +02:00
|
|
|
public readonly ReagentUnit Quantity;
|
2020-02-23 19:47:33 -05:00
|
|
|
public float Lifetime { get; private set; }
|
|
|
|
|
|
2020-04-05 11:36:12 +02:00
|
|
|
public ReagentDelta(string reagentId, ReagentUnit quantity)
|
2020-02-23 19:47:33 -05:00
|
|
|
{
|
|
|
|
|
ReagentId = reagentId;
|
|
|
|
|
Quantity = quantity;
|
|
|
|
|
Lifetime = 0.0f;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Increment(float delta) => Lifetime += delta;
|
2019-11-12 08:20:03 +11:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|