Files
crystall-punk-14/Content.Server/Medical/Components/MedicalScannerComponent.cs

336 lines
12 KiB
C#
Raw Normal View History

using System;
using System.Collections.Generic;
2021-06-09 22:19:39 +02:00
using Content.Server.Cloning;
using Content.Server.Mind.Components;
using Content.Server.Power.Components;
using Content.Server.Preferences.Managers;
using Content.Server.UserInterface;
using Content.Shared.ActionBlocker;
using Content.Shared.Acts;
Cloning (#1932) * Add art assets for cloning * Added a 'Scan DNA' button to the medical scanner * Made the UI update unconditional for the medical scanner until checks for power changes are in place * Update Medical scanner to reflect powered status and fix #1774 * added a 'scan dna' button the the medical scanner that will add the contained bodies Uid to a list in CloningSystem, fixed an issue with the menu not populating if the scanner starts in an unpowered state * Add disabling logic to 'Scan DNA' button on medical scanner * Removed un-used libraries * changed scan dna button to Scan and Save DNA * Added cloning machine code infrastructure copied from Medical Scanner * Added a list to cloning menu containing some numbers * Cloning Machine UI sends a message to the cloning component with the entityUID * New scans now show up in cloning pod menu * fixed cloning machine collision shape * cloning machine can now spawn the right player profile assuming the attatched entity is still correct. * refactored cloning system to use a map of integer ids to player Minds * Added a return to body cloning loop for the ghost * Fixed warning for _playerManager being possibly null, added TODO note for ghost return to body button acting as a toggle * removed #nullable from cloningMachineWindow" * Trying to get rid of nullable error * fix CloningMachine to not initilize with it's owner components * updated CloningMachine server component to play nice with the new nullable rules * replace flag with eventBus message for sending a ghosts mind to a clone body * Refactor cloning so that a popup option is used to get user consent for cloning * Refactoring * Reverting unused changes for cloning component * Added proper cloning pod sprites and a visualizer so 'idle' and 'cloning' states are properly reflected * added missing robust toolbox contents * Added cloning NoMind State and made cloning take time * Added cloning progress bar and mind status indicator to cloning pod * Added missing localization calls, removeed 'returned to cloned body' from ghostUI * Added unsubscribe for cloningStartedMessage in Mindcomponent.cs OnRemove * Added eject button to cloningMachine and clamped the cloning progress bar to 100% * Added condition to eject body on cloningmachine so bodies can't be ejected until cloning is done * Add click-dragOn functionality to the medical scanner for things with a bodyManager * Messed with scan query so it doesn't fail on dead bodies as long as Mind still owns the mob * refactored clonning scan check on medical scanner so it doesn't do a linq query * merge with rogue toolbox * Change the name of Cloning Machine to the less generic Cloning Pod * Changed Cloning Pod so it pauses cloning while the power is out * Removed the evil LocalizationManager from the cloning menus and used the static Loc instead * removed localization dependency from bound accpetCloning user interface * Removed Ilocalization dependency I accidentally added to ghost ui * Update Content.Client/GameObjects/Components/MedicalScanner/MedicalScannerComponent.cs Co-authored-by: Exp <theexp111@gmail.com> * Changed null check to tryget in case for cloning UiButton.Clone * Parameterized Cloning time on serverside component * tried to reset Robust toolbox module to current master * Added null check to ghost client component message handling, unsubscribe to the mind component listening to the cloning question ui, fixed _clonningProgress typo, moved CloningPod component dependencies to actually be dependencies, removed un-needed disposals of cloning windows, added disposals missing in boundUserInterfaces. * Reset submodule * corrected exception for cloning pod visualizer to refer to cloning pod state and not medical scanner state * Fix typo * Unsubscribe from onUiReceiveMessage in mindcomponent in the onRemove function, not the acceptcloningui function * unsubscribe from OnUiReceiveMessage in CloningPodComponent * unssubscribe from ghostreturn message in cloningpodComponent onRemove Co-authored-by: Exp <theexp111@gmail.com> Co-authored-by: DrSmugleaf <DrSmugleaf@users.noreply.github.com>
2020-09-02 06:07:54 -04:00
using Content.Shared.Damage;
2021-06-09 22:19:39 +02:00
using Content.Shared.Damage.Components;
using Content.Shared.DragDrop;
using Content.Shared.Interaction;
using Content.Shared.MedicalScanner;
using Content.Shared.MobState;
using Content.Shared.Movement;
2021-06-09 22:19:39 +02:00
using Content.Shared.Notification;
using Content.Shared.Notification.Managers;
using Content.Shared.Preferences;
2021-06-09 22:19:39 +02:00
using Content.Shared.Verbs;
using Robust.Server.GameObjects;
using Robust.Server.Player;
using Robust.Shared.Containers;
using Robust.Shared.GameObjects;
Cloning (#1932) * Add art assets for cloning * Added a 'Scan DNA' button to the medical scanner * Made the UI update unconditional for the medical scanner until checks for power changes are in place * Update Medical scanner to reflect powered status and fix #1774 * added a 'scan dna' button the the medical scanner that will add the contained bodies Uid to a list in CloningSystem, fixed an issue with the menu not populating if the scanner starts in an unpowered state * Add disabling logic to 'Scan DNA' button on medical scanner * Removed un-used libraries * changed scan dna button to Scan and Save DNA * Added cloning machine code infrastructure copied from Medical Scanner * Added a list to cloning menu containing some numbers * Cloning Machine UI sends a message to the cloning component with the entityUID * New scans now show up in cloning pod menu * fixed cloning machine collision shape * cloning machine can now spawn the right player profile assuming the attatched entity is still correct. * refactored cloning system to use a map of integer ids to player Minds * Added a return to body cloning loop for the ghost * Fixed warning for _playerManager being possibly null, added TODO note for ghost return to body button acting as a toggle * removed #nullable from cloningMachineWindow" * Trying to get rid of nullable error * fix CloningMachine to not initilize with it's owner components * updated CloningMachine server component to play nice with the new nullable rules * replace flag with eventBus message for sending a ghosts mind to a clone body * Refactor cloning so that a popup option is used to get user consent for cloning * Refactoring * Reverting unused changes for cloning component * Added proper cloning pod sprites and a visualizer so 'idle' and 'cloning' states are properly reflected * added missing robust toolbox contents * Added cloning NoMind State and made cloning take time * Added cloning progress bar and mind status indicator to cloning pod * Added missing localization calls, removeed 'returned to cloned body' from ghostUI * Added unsubscribe for cloningStartedMessage in Mindcomponent.cs OnRemove * Added eject button to cloningMachine and clamped the cloning progress bar to 100% * Added condition to eject body on cloningmachine so bodies can't be ejected until cloning is done * Add click-dragOn functionality to the medical scanner for things with a bodyManager * Messed with scan query so it doesn't fail on dead bodies as long as Mind still owns the mob * refactored clonning scan check on medical scanner so it doesn't do a linq query * merge with rogue toolbox * Change the name of Cloning Machine to the less generic Cloning Pod * Changed Cloning Pod so it pauses cloning while the power is out * Removed the evil LocalizationManager from the cloning menus and used the static Loc instead * removed localization dependency from bound accpetCloning user interface * Removed Ilocalization dependency I accidentally added to ghost ui * Update Content.Client/GameObjects/Components/MedicalScanner/MedicalScannerComponent.cs Co-authored-by: Exp <theexp111@gmail.com> * Changed null check to tryget in case for cloning UiButton.Clone * Parameterized Cloning time on serverside component * tried to reset Robust toolbox module to current master * Added null check to ghost client component message handling, unsubscribe to the mind component listening to the cloning question ui, fixed _clonningProgress typo, moved CloningPod component dependencies to actually be dependencies, removed un-needed disposals of cloning windows, added disposals missing in boundUserInterfaces. * Reset submodule * corrected exception for cloning pod visualizer to refer to cloning pod state and not medical scanner state * Fix typo * Unsubscribe from onUiReceiveMessage in mindcomponent in the onRemove function, not the acceptcloningui function * unsubscribe from OnUiReceiveMessage in CloningPodComponent * unssubscribe from ghostreturn message in cloningpodComponent onRemove Co-authored-by: Exp <theexp111@gmail.com> Co-authored-by: DrSmugleaf <DrSmugleaf@users.noreply.github.com>
2020-09-02 06:07:54 -04:00
using Robust.Shared.IoC;
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
using Robust.Shared.Localization;
Cloning (#1932) * Add art assets for cloning * Added a 'Scan DNA' button to the medical scanner * Made the UI update unconditional for the medical scanner until checks for power changes are in place * Update Medical scanner to reflect powered status and fix #1774 * added a 'scan dna' button the the medical scanner that will add the contained bodies Uid to a list in CloningSystem, fixed an issue with the menu not populating if the scanner starts in an unpowered state * Add disabling logic to 'Scan DNA' button on medical scanner * Removed un-used libraries * changed scan dna button to Scan and Save DNA * Added cloning machine code infrastructure copied from Medical Scanner * Added a list to cloning menu containing some numbers * Cloning Machine UI sends a message to the cloning component with the entityUID * New scans now show up in cloning pod menu * fixed cloning machine collision shape * cloning machine can now spawn the right player profile assuming the attatched entity is still correct. * refactored cloning system to use a map of integer ids to player Minds * Added a return to body cloning loop for the ghost * Fixed warning for _playerManager being possibly null, added TODO note for ghost return to body button acting as a toggle * removed #nullable from cloningMachineWindow" * Trying to get rid of nullable error * fix CloningMachine to not initilize with it's owner components * updated CloningMachine server component to play nice with the new nullable rules * replace flag with eventBus message for sending a ghosts mind to a clone body * Refactor cloning so that a popup option is used to get user consent for cloning * Refactoring * Reverting unused changes for cloning component * Added proper cloning pod sprites and a visualizer so 'idle' and 'cloning' states are properly reflected * added missing robust toolbox contents * Added cloning NoMind State and made cloning take time * Added cloning progress bar and mind status indicator to cloning pod * Added missing localization calls, removeed 'returned to cloned body' from ghostUI * Added unsubscribe for cloningStartedMessage in Mindcomponent.cs OnRemove * Added eject button to cloningMachine and clamped the cloning progress bar to 100% * Added condition to eject body on cloningmachine so bodies can't be ejected until cloning is done * Add click-dragOn functionality to the medical scanner for things with a bodyManager * Messed with scan query so it doesn't fail on dead bodies as long as Mind still owns the mob * refactored clonning scan check on medical scanner so it doesn't do a linq query * merge with rogue toolbox * Change the name of Cloning Machine to the less generic Cloning Pod * Changed Cloning Pod so it pauses cloning while the power is out * Removed the evil LocalizationManager from the cloning menus and used the static Loc instead * removed localization dependency from bound accpetCloning user interface * Removed Ilocalization dependency I accidentally added to ghost ui * Update Content.Client/GameObjects/Components/MedicalScanner/MedicalScannerComponent.cs Co-authored-by: Exp <theexp111@gmail.com> * Changed null check to tryget in case for cloning UiButton.Clone * Parameterized Cloning time on serverside component * tried to reset Robust toolbox module to current master * Added null check to ghost client component message handling, unsubscribe to the mind component listening to the cloning question ui, fixed _clonningProgress typo, moved CloningPod component dependencies to actually be dependencies, removed un-needed disposals of cloning windows, added disposals missing in boundUserInterfaces. * Reset submodule * corrected exception for cloning pod visualizer to refer to cloning pod state and not medical scanner state * Fix typo * Unsubscribe from onUiReceiveMessage in mindcomponent in the onRemove function, not the acceptcloningui function * unsubscribe from OnUiReceiveMessage in CloningPodComponent * unssubscribe from ghostreturn message in cloningpodComponent onRemove Co-authored-by: Exp <theexp111@gmail.com> Co-authored-by: DrSmugleaf <DrSmugleaf@users.noreply.github.com>
2020-09-02 06:07:54 -04:00
using Robust.Shared.Maths;
using Robust.Shared.Network;
using Robust.Shared.Timing;
using Robust.Shared.ViewVariables;
2021-06-09 22:19:39 +02:00
namespace Content.Server.Medical.Components
{
[RegisterComponent]
[ComponentReference(typeof(IActivate))]
[ComponentReference(typeof(SharedMedicalScannerComponent))]
public class MedicalScannerComponent : SharedMedicalScannerComponent, IActivate, IDestroyAct
{
[Dependency] private readonly IServerPreferencesManager _prefsManager = null!;
[Dependency] private readonly IPlayerManager _playerManager = null!;
[Dependency] private readonly IGameTiming _gameTiming = default!;
private static readonly TimeSpan InternalOpenAttemptDelay = TimeSpan.FromSeconds(0.5);
private TimeSpan _lastInternalOpenAttempt;
private ContainerSlot _bodyContainer = default!;
private readonly Vector2 _ejectOffset = new(0f, 0f);
[ViewVariables]
private bool Powered => !Owner.TryGetComponent(out ApcPowerReceiverComponent? receiver) || receiver.Powered;
[ViewVariables]
private BoundUserInterface? UserInterface => Owner.GetUIOrNull(MedicalScannerUiKey.Key);
public bool IsOccupied => _bodyContainer.ContainedEntity != null;
protected override void Initialize()
{
base.Initialize();
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
if (UserInterface != null)
{
UserInterface.OnReceiveMessage += OnUiReceiveMessage;
}
_bodyContainer = ContainerHelpers.EnsureContainer<ContainerSlot>(Owner, $"{Name}-bodyContainer");
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
// TODO: write this so that it checks for a change in power events and acts accordingly.
var newState = GetUserInterfaceState();
UserInterface?.SetState(newState);
UpdateUserInterface();
}
/// <inheritdoc />
public override void HandleMessage(ComponentMessage message, IComponent? component)
{
base.HandleMessage(message, component);
switch (message)
{
case RelayMovementEntityMessage msg:
{
if (EntitySystem.Get<ActionBlockerSystem>().CanInteract(msg.Entity))
{
if (_gameTiming.CurTime <
_lastInternalOpenAttempt + InternalOpenAttemptDelay)
{
break;
}
_lastInternalOpenAttempt = _gameTiming.CurTime;
EjectBody();
}
break;
}
}
}
private static readonly MedicalScannerBoundUserInterfaceState EmptyUIState =
new(
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
null,
Damageable Refactor 3: Revenge of the Instamerge (#4524) * Add DamageType And DamageGroup Prototypes * Remove DamageTypePrototype Field "name" as its redundant * Change I/DamageableComponent to use prototypes * Update DamageContainer, ReisistanceSet and DamageChangeData * Change Barotrauma Component to use DamageType from DamageSystem * Update AsteroidRockComponent * update some more components * update some more components * Fix m o r e c o m p o n e n t s and their damageType * all thats left is bug/missing node hunting then verification. * push changes * update submodule * Merge fixes * push DGP for example * update damagecomponent across shared and server * fix a few bugs * Fix Merge issues * Refactor damageablecomponent update (#4406) * Fixing merge. I messed up part of the merge. this should fix it? * Barotrauma now uses prototypeManager As System.Runtime.CompilerServices also has a [Dependency], I think I had to use the full path [Robust.Shared.IoC.Dependency] * FlammableComponent now uses prototypeManager * SuicideCommands now use prototypeManager * Changed many files to use prototypeManager to resolve damaege prototypes Yeah.... prototype references would be very nice. maybe this was all a waste of time. * Grouping prototypeManager.Index with datafield definitions This will make it easier to eventually add prototype references * removed unused variable * Moved lines around. Lines now consistent with other TODO PROTOTYPE blocks * Grouping more prototypeManager.Index with datafield definitions * Removed unnecessary code * Added more prototypeManager indexing These ones weren't pointed out by DrSmug. But I think this is all of them? That or my regex is shit. * Remove redundant _damage field * Remove redundant _currentTemperature * Moved variables down * Added prototypeManager indexing to TemperatureComponent * WeaponComponent/System now use ProtptypeManager And as far as I can tell damageType is required, and therefore should never have been null anyway? * Make ranged weapon clumsy fire effects datafields And yes, the order in which the clumsy effects occur is very important. * Made damage on vital body part loss a datafield * Renamed several damageGroup variables to group * Capitalised DamageListToDamageGroup * Make radiation and explosion damage types datafields * Renamed _supportedDamageGroupIDs and _supportedDamageTypeIDs * Fixed mistakes Frogot to remove prototypeManager index DamageTypeTrigger, and wrong variable visibility in TemperatureComponent * Added necessary code Is something tragically wrong? * MeleeWeapon damageType is not actually required * Fixing someone else's mistakes A search comes up with nothing in the yaml files, and its not a required field. So no one uses it? Hopefully? * Changed and renamed damageTypeToDamageGroup Previously would incorrectly return the total container damage for each group, not the total in the group * renaming varitables * Renamed variable DamageClasses * Added dictionary converting functions * Added ID-keyed dictionaries * Making MedicalScanner use ID dictionaries, instead of prototype dictionaries Oh oh no. I've been able to avoid UI & networking up until now. I have no Idea what I am doing. * Fix Medical Scanner * Summary (required) The joke here is that this fixes the empty summary. * Removed DamageableComponent.GetDamageGroup/Type * Renamed "damage classes" to groups. * Update ChangeDamage description * Replaced Heal() with SettAllDamage() Heal() was just a confusing name, * More Class -> Group renaming * Replace Class with Group in yaml files DamageClassTrigger does not appear in any yaml? only in testing? DamageTypeTrigger appears only in human.yaml? HealthChangeMetabolism is Mostly in medicine.yml and one in soad.yaml Why the hell is Cola metabolizable by plants? Who is pouring cola on their plants!?!? * Fix _prototypeManager being null errors. * Changing comments Where are the prototype references * MetabolismComponent doesn't give free heals anymore. * Changes HungerComponent healing. Previously I think it would actually damage you. Only did this as I though it was causing the fast healing. Turns out that was just BREATHING. * Generalised a function in DamageableComponent and moved it to DamageGroupPrototype previously DamageTypesDictToDamageGroupDict was private to DamageableComponent, but was also quite general (nearly a static function). As this sort of function may be needed by other components using DamageGroupPrototypes in the future, I moved it there as a static function instead. * modified DamageableComponent.ChangeDamage() ignoreResistances was renamed to ignoreDamageResistances to make it clearer that it had no effect on healing. Now uses default argument for ignoreDamageResistances, so when healing you are not forced to specify an argument that does nothing. Also made some general changes to ignoreResistances() * Changed class->group and added missing damage type functionality to DamageContainerPrototypes * Added Comments to damage.yml * Misc Changes to DamageableComponent * Differentiated between group support and group applicability So far, every damage type is a member of one, and only one, damage group. So this change has no real effect so far. * Added proposed alternative to ChangeDamage() * fixed error in DamageGroupPrototype * Changes to DamageableComponent Lots of changes to comments. Some variables renamed in IDamageableComponent and DamageableComponent (also required renaming in other files) Some minor logic changes, mostly for incorrect descirptions of boolean return values. Also further differentiating between ApplicableGroups and SupportedGroups... if that will ever even matter * Generalised MedicalScannerComponent If needed, can print miscellaneous damage types now * Fixed HealthChangeMetabolism bug * Changing Comments around * More questions * Made Barotrauma default to blunt * Fix RejuvenateTest.cs * Comments * Coments and variable names * fix some master-merge issues * Removed redundant fields * Misc changes for readbility of PR diff * Consistent naming * Fixed atmos damage bug * Removed Ranting * Fixed Hunger after I broke it * Fixing Bugs * Removed stupid question * Removed more stupid questions * Fix potential null errors. * Made boolean return values consistent Also renamed several functions, to make it clear they return a bool. Docs were also updated. * Removed IoCManager.InjectDependencies() * Removed unnecessary 'suffocation' prefix * Fixed Spelling Also removed accidentally left in logger call * Fixed Medical Scanner * Apply suggestions from code review Co-authored-by: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com> * Changing comments and whitespaces * Made damage thresholds trigger datafields required * So many typos * Changes to DamageableComponents Changed documentation in IDamageableComponent Made testing code more readable. Relabelled groups as 'Applicable' either 'Fully Supported' * Removed function and degeneralised * Update DamageableComponent.cs Removed unused parameters Fixed Networking * Added IoCManager.Resolve * Now using alternative TryChangeDamage() * Removed function from DamageGroupPrototype * Removing comments * Remove bad if statement? * Fix damageChanged ordering * Fix hurt server command * Changed //TODO PROTOTYPE blocks Now use PrototypeManager differently. Wherever possible, only retrieve the prototype once. Also added default damage types to some more datafields * Update Content.Shared/Damage/Container/DamageContainerPrototype.cs Co-authored-by: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com> * renamed _accumulatedHealth -> _accumulatedDamage and added TODOs * Another class-> group * Fix bug in generalisation of damage container prototypes * Addes Tests to make sure I dont keep adding bugs to my own code. * Changed Return values when setting * Removed unused class * Added more tests, split tests into three files * Made damage types public and VV read-write-able * Minor changes to DamageableComponent Replaced internal use of GetDamagePerType with _damageDict and removed some unnecessary fields * Fix Suicide, by adding IoC Resolve() * Fix DamageGroupTrigger bug * Fix typos in tests * Change comments./docstrings & spacing * Merge tests, use test prototypes Co-authored-by: Leon Friedrich <60421075+leonsfriedrich@users.noreply.github.com> Co-authored-by: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com> * Fix merge issues Co-authored-by: Silver <Silvertorch5@gmail.com> Co-authored-by: DrSmugleaf <DrSmugleaf@users.noreply.github.com> Co-authored-by: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com> Co-authored-by: Leon Friedrich <60421075+leonsfriedrich@users.noreply.github.com>
2021-08-25 03:06:27 +10:00
new Dictionary<string, int>(),
new Dictionary<string, int>(),
false);
private MedicalScannerBoundUserInterfaceState GetUserInterfaceState()
{
var body = _bodyContainer.ContainedEntity;
if (body == null)
{
if (Owner.TryGetComponent(out AppearanceComponent? appearance))
{
appearance?.SetData(MedicalScannerVisuals.Status, MedicalScannerStatus.Open);
Cloning (#1932) * Add art assets for cloning * Added a 'Scan DNA' button to the medical scanner * Made the UI update unconditional for the medical scanner until checks for power changes are in place * Update Medical scanner to reflect powered status and fix #1774 * added a 'scan dna' button the the medical scanner that will add the contained bodies Uid to a list in CloningSystem, fixed an issue with the menu not populating if the scanner starts in an unpowered state * Add disabling logic to 'Scan DNA' button on medical scanner * Removed un-used libraries * changed scan dna button to Scan and Save DNA * Added cloning machine code infrastructure copied from Medical Scanner * Added a list to cloning menu containing some numbers * Cloning Machine UI sends a message to the cloning component with the entityUID * New scans now show up in cloning pod menu * fixed cloning machine collision shape * cloning machine can now spawn the right player profile assuming the attatched entity is still correct. * refactored cloning system to use a map of integer ids to player Minds * Added a return to body cloning loop for the ghost * Fixed warning for _playerManager being possibly null, added TODO note for ghost return to body button acting as a toggle * removed #nullable from cloningMachineWindow" * Trying to get rid of nullable error * fix CloningMachine to not initilize with it's owner components * updated CloningMachine server component to play nice with the new nullable rules * replace flag with eventBus message for sending a ghosts mind to a clone body * Refactor cloning so that a popup option is used to get user consent for cloning * Refactoring * Reverting unused changes for cloning component * Added proper cloning pod sprites and a visualizer so 'idle' and 'cloning' states are properly reflected * added missing robust toolbox contents * Added cloning NoMind State and made cloning take time * Added cloning progress bar and mind status indicator to cloning pod * Added missing localization calls, removeed 'returned to cloned body' from ghostUI * Added unsubscribe for cloningStartedMessage in Mindcomponent.cs OnRemove * Added eject button to cloningMachine and clamped the cloning progress bar to 100% * Added condition to eject body on cloningmachine so bodies can't be ejected until cloning is done * Add click-dragOn functionality to the medical scanner for things with a bodyManager * Messed with scan query so it doesn't fail on dead bodies as long as Mind still owns the mob * refactored clonning scan check on medical scanner so it doesn't do a linq query * merge with rogue toolbox * Change the name of Cloning Machine to the less generic Cloning Pod * Changed Cloning Pod so it pauses cloning while the power is out * Removed the evil LocalizationManager from the cloning menus and used the static Loc instead * removed localization dependency from bound accpetCloning user interface * Removed Ilocalization dependency I accidentally added to ghost ui * Update Content.Client/GameObjects/Components/MedicalScanner/MedicalScannerComponent.cs Co-authored-by: Exp <theexp111@gmail.com> * Changed null check to tryget in case for cloning UiButton.Clone * Parameterized Cloning time on serverside component * tried to reset Robust toolbox module to current master * Added null check to ghost client component message handling, unsubscribe to the mind component listening to the cloning question ui, fixed _clonningProgress typo, moved CloningPod component dependencies to actually be dependencies, removed un-needed disposals of cloning windows, added disposals missing in boundUserInterfaces. * Reset submodule * corrected exception for cloning pod visualizer to refer to cloning pod state and not medical scanner state * Fix typo * Unsubscribe from onUiReceiveMessage in mindcomponent in the onRemove function, not the acceptcloningui function * unsubscribe from OnUiReceiveMessage in CloningPodComponent * unssubscribe from ghostreturn message in cloningpodComponent onRemove Co-authored-by: Exp <theexp111@gmail.com> Co-authored-by: DrSmugleaf <DrSmugleaf@users.noreply.github.com>
2020-09-02 06:07:54 -04:00
}
return EmptyUIState;
}
Cloning (#1932) * Add art assets for cloning * Added a 'Scan DNA' button to the medical scanner * Made the UI update unconditional for the medical scanner until checks for power changes are in place * Update Medical scanner to reflect powered status and fix #1774 * added a 'scan dna' button the the medical scanner that will add the contained bodies Uid to a list in CloningSystem, fixed an issue with the menu not populating if the scanner starts in an unpowered state * Add disabling logic to 'Scan DNA' button on medical scanner * Removed un-used libraries * changed scan dna button to Scan and Save DNA * Added cloning machine code infrastructure copied from Medical Scanner * Added a list to cloning menu containing some numbers * Cloning Machine UI sends a message to the cloning component with the entityUID * New scans now show up in cloning pod menu * fixed cloning machine collision shape * cloning machine can now spawn the right player profile assuming the attatched entity is still correct. * refactored cloning system to use a map of integer ids to player Minds * Added a return to body cloning loop for the ghost * Fixed warning for _playerManager being possibly null, added TODO note for ghost return to body button acting as a toggle * removed #nullable from cloningMachineWindow" * Trying to get rid of nullable error * fix CloningMachine to not initilize with it's owner components * updated CloningMachine server component to play nice with the new nullable rules * replace flag with eventBus message for sending a ghosts mind to a clone body * Refactor cloning so that a popup option is used to get user consent for cloning * Refactoring * Reverting unused changes for cloning component * Added proper cloning pod sprites and a visualizer so 'idle' and 'cloning' states are properly reflected * added missing robust toolbox contents * Added cloning NoMind State and made cloning take time * Added cloning progress bar and mind status indicator to cloning pod * Added missing localization calls, removeed 'returned to cloned body' from ghostUI * Added unsubscribe for cloningStartedMessage in Mindcomponent.cs OnRemove * Added eject button to cloningMachine and clamped the cloning progress bar to 100% * Added condition to eject body on cloningmachine so bodies can't be ejected until cloning is done * Add click-dragOn functionality to the medical scanner for things with a bodyManager * Messed with scan query so it doesn't fail on dead bodies as long as Mind still owns the mob * refactored clonning scan check on medical scanner so it doesn't do a linq query * merge with rogue toolbox * Change the name of Cloning Machine to the less generic Cloning Pod * Changed Cloning Pod so it pauses cloning while the power is out * Removed the evil LocalizationManager from the cloning menus and used the static Loc instead * removed localization dependency from bound accpetCloning user interface * Removed Ilocalization dependency I accidentally added to ghost ui * Update Content.Client/GameObjects/Components/MedicalScanner/MedicalScannerComponent.cs Co-authored-by: Exp <theexp111@gmail.com> * Changed null check to tryget in case for cloning UiButton.Clone * Parameterized Cloning time on serverside component * tried to reset Robust toolbox module to current master * Added null check to ghost client component message handling, unsubscribe to the mind component listening to the cloning question ui, fixed _clonningProgress typo, moved CloningPod component dependencies to actually be dependencies, removed un-needed disposals of cloning windows, added disposals missing in boundUserInterfaces. * Reset submodule * corrected exception for cloning pod visualizer to refer to cloning pod state and not medical scanner state * Fix typo * Unsubscribe from onUiReceiveMessage in mindcomponent in the onRemove function, not the acceptcloningui function * unsubscribe from OnUiReceiveMessage in CloningPodComponent * unssubscribe from ghostreturn message in cloningpodComponent onRemove Co-authored-by: Exp <theexp111@gmail.com> Co-authored-by: DrSmugleaf <DrSmugleaf@users.noreply.github.com>
2020-09-02 06:07:54 -04:00
if (!body.TryGetComponent(out IDamageableComponent? damageable))
{
return EmptyUIState;
}
Damageable Refactor 3: Revenge of the Instamerge (#4524) * Add DamageType And DamageGroup Prototypes * Remove DamageTypePrototype Field "name" as its redundant * Change I/DamageableComponent to use prototypes * Update DamageContainer, ReisistanceSet and DamageChangeData * Change Barotrauma Component to use DamageType from DamageSystem * Update AsteroidRockComponent * update some more components * update some more components * Fix m o r e c o m p o n e n t s and their damageType * all thats left is bug/missing node hunting then verification. * push changes * update submodule * Merge fixes * push DGP for example * update damagecomponent across shared and server * fix a few bugs * Fix Merge issues * Refactor damageablecomponent update (#4406) * Fixing merge. I messed up part of the merge. this should fix it? * Barotrauma now uses prototypeManager As System.Runtime.CompilerServices also has a [Dependency], I think I had to use the full path [Robust.Shared.IoC.Dependency] * FlammableComponent now uses prototypeManager * SuicideCommands now use prototypeManager * Changed many files to use prototypeManager to resolve damaege prototypes Yeah.... prototype references would be very nice. maybe this was all a waste of time. * Grouping prototypeManager.Index with datafield definitions This will make it easier to eventually add prototype references * removed unused variable * Moved lines around. Lines now consistent with other TODO PROTOTYPE blocks * Grouping more prototypeManager.Index with datafield definitions * Removed unnecessary code * Added more prototypeManager indexing These ones weren't pointed out by DrSmug. But I think this is all of them? That or my regex is shit. * Remove redundant _damage field * Remove redundant _currentTemperature * Moved variables down * Added prototypeManager indexing to TemperatureComponent * WeaponComponent/System now use ProtptypeManager And as far as I can tell damageType is required, and therefore should never have been null anyway? * Make ranged weapon clumsy fire effects datafields And yes, the order in which the clumsy effects occur is very important. * Made damage on vital body part loss a datafield * Renamed several damageGroup variables to group * Capitalised DamageListToDamageGroup * Make radiation and explosion damage types datafields * Renamed _supportedDamageGroupIDs and _supportedDamageTypeIDs * Fixed mistakes Frogot to remove prototypeManager index DamageTypeTrigger, and wrong variable visibility in TemperatureComponent * Added necessary code Is something tragically wrong? * MeleeWeapon damageType is not actually required * Fixing someone else's mistakes A search comes up with nothing in the yaml files, and its not a required field. So no one uses it? Hopefully? * Changed and renamed damageTypeToDamageGroup Previously would incorrectly return the total container damage for each group, not the total in the group * renaming varitables * Renamed variable DamageClasses * Added dictionary converting functions * Added ID-keyed dictionaries * Making MedicalScanner use ID dictionaries, instead of prototype dictionaries Oh oh no. I've been able to avoid UI & networking up until now. I have no Idea what I am doing. * Fix Medical Scanner * Summary (required) The joke here is that this fixes the empty summary. * Removed DamageableComponent.GetDamageGroup/Type * Renamed "damage classes" to groups. * Update ChangeDamage description * Replaced Heal() with SettAllDamage() Heal() was just a confusing name, * More Class -> Group renaming * Replace Class with Group in yaml files DamageClassTrigger does not appear in any yaml? only in testing? DamageTypeTrigger appears only in human.yaml? HealthChangeMetabolism is Mostly in medicine.yml and one in soad.yaml Why the hell is Cola metabolizable by plants? Who is pouring cola on their plants!?!? * Fix _prototypeManager being null errors. * Changing comments Where are the prototype references * MetabolismComponent doesn't give free heals anymore. * Changes HungerComponent healing. Previously I think it would actually damage you. Only did this as I though it was causing the fast healing. Turns out that was just BREATHING. * Generalised a function in DamageableComponent and moved it to DamageGroupPrototype previously DamageTypesDictToDamageGroupDict was private to DamageableComponent, but was also quite general (nearly a static function). As this sort of function may be needed by other components using DamageGroupPrototypes in the future, I moved it there as a static function instead. * modified DamageableComponent.ChangeDamage() ignoreResistances was renamed to ignoreDamageResistances to make it clearer that it had no effect on healing. Now uses default argument for ignoreDamageResistances, so when healing you are not forced to specify an argument that does nothing. Also made some general changes to ignoreResistances() * Changed class->group and added missing damage type functionality to DamageContainerPrototypes * Added Comments to damage.yml * Misc Changes to DamageableComponent * Differentiated between group support and group applicability So far, every damage type is a member of one, and only one, damage group. So this change has no real effect so far. * Added proposed alternative to ChangeDamage() * fixed error in DamageGroupPrototype * Changes to DamageableComponent Lots of changes to comments. Some variables renamed in IDamageableComponent and DamageableComponent (also required renaming in other files) Some minor logic changes, mostly for incorrect descirptions of boolean return values. Also further differentiating between ApplicableGroups and SupportedGroups... if that will ever even matter * Generalised MedicalScannerComponent If needed, can print miscellaneous damage types now * Fixed HealthChangeMetabolism bug * Changing Comments around * More questions * Made Barotrauma default to blunt * Fix RejuvenateTest.cs * Comments * Coments and variable names * fix some master-merge issues * Removed redundant fields * Misc changes for readbility of PR diff * Consistent naming * Fixed atmos damage bug * Removed Ranting * Fixed Hunger after I broke it * Fixing Bugs * Removed stupid question * Removed more stupid questions * Fix potential null errors. * Made boolean return values consistent Also renamed several functions, to make it clear they return a bool. Docs were also updated. * Removed IoCManager.InjectDependencies() * Removed unnecessary 'suffocation' prefix * Fixed Spelling Also removed accidentally left in logger call * Fixed Medical Scanner * Apply suggestions from code review Co-authored-by: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com> * Changing comments and whitespaces * Made damage thresholds trigger datafields required * So many typos * Changes to DamageableComponents Changed documentation in IDamageableComponent Made testing code more readable. Relabelled groups as 'Applicable' either 'Fully Supported' * Removed function and degeneralised * Update DamageableComponent.cs Removed unused parameters Fixed Networking * Added IoCManager.Resolve * Now using alternative TryChangeDamage() * Removed function from DamageGroupPrototype * Removing comments * Remove bad if statement? * Fix damageChanged ordering * Fix hurt server command * Changed //TODO PROTOTYPE blocks Now use PrototypeManager differently. Wherever possible, only retrieve the prototype once. Also added default damage types to some more datafields * Update Content.Shared/Damage/Container/DamageContainerPrototype.cs Co-authored-by: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com> * renamed _accumulatedHealth -> _accumulatedDamage and added TODOs * Another class-> group * Fix bug in generalisation of damage container prototypes * Addes Tests to make sure I dont keep adding bugs to my own code. * Changed Return values when setting * Removed unused class * Added more tests, split tests into three files * Made damage types public and VV read-write-able * Minor changes to DamageableComponent Replaced internal use of GetDamagePerType with _damageDict and removed some unnecessary fields * Fix Suicide, by adding IoC Resolve() * Fix DamageGroupTrigger bug * Fix typos in tests * Change comments./docstrings & spacing * Merge tests, use test prototypes Co-authored-by: Leon Friedrich <60421075+leonsfriedrich@users.noreply.github.com> Co-authored-by: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com> * Fix merge issues Co-authored-by: Silver <Silvertorch5@gmail.com> Co-authored-by: DrSmugleaf <DrSmugleaf@users.noreply.github.com> Co-authored-by: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com> Co-authored-by: Leon Friedrich <60421075+leonsfriedrich@users.noreply.github.com>
2021-08-25 03:06:27 +10:00
// Get dictionaries of damage, by fully supported damage groups and types
var groups = new Dictionary<string, int>(damageable.GetDamagePerFullySupportedGroupIDs);
var types = new Dictionary<string, int>(damageable.GetDamagePerTypeIDs);
Cloning (#1932) * Add art assets for cloning * Added a 'Scan DNA' button to the medical scanner * Made the UI update unconditional for the medical scanner until checks for power changes are in place * Update Medical scanner to reflect powered status and fix #1774 * added a 'scan dna' button the the medical scanner that will add the contained bodies Uid to a list in CloningSystem, fixed an issue with the menu not populating if the scanner starts in an unpowered state * Add disabling logic to 'Scan DNA' button on medical scanner * Removed un-used libraries * changed scan dna button to Scan and Save DNA * Added cloning machine code infrastructure copied from Medical Scanner * Added a list to cloning menu containing some numbers * Cloning Machine UI sends a message to the cloning component with the entityUID * New scans now show up in cloning pod menu * fixed cloning machine collision shape * cloning machine can now spawn the right player profile assuming the attatched entity is still correct. * refactored cloning system to use a map of integer ids to player Minds * Added a return to body cloning loop for the ghost * Fixed warning for _playerManager being possibly null, added TODO note for ghost return to body button acting as a toggle * removed #nullable from cloningMachineWindow" * Trying to get rid of nullable error * fix CloningMachine to not initilize with it's owner components * updated CloningMachine server component to play nice with the new nullable rules * replace flag with eventBus message for sending a ghosts mind to a clone body * Refactor cloning so that a popup option is used to get user consent for cloning * Refactoring * Reverting unused changes for cloning component * Added proper cloning pod sprites and a visualizer so 'idle' and 'cloning' states are properly reflected * added missing robust toolbox contents * Added cloning NoMind State and made cloning take time * Added cloning progress bar and mind status indicator to cloning pod * Added missing localization calls, removeed 'returned to cloned body' from ghostUI * Added unsubscribe for cloningStartedMessage in Mindcomponent.cs OnRemove * Added eject button to cloningMachine and clamped the cloning progress bar to 100% * Added condition to eject body on cloningmachine so bodies can't be ejected until cloning is done * Add click-dragOn functionality to the medical scanner for things with a bodyManager * Messed with scan query so it doesn't fail on dead bodies as long as Mind still owns the mob * refactored clonning scan check on medical scanner so it doesn't do a linq query * merge with rogue toolbox * Change the name of Cloning Machine to the less generic Cloning Pod * Changed Cloning Pod so it pauses cloning while the power is out * Removed the evil LocalizationManager from the cloning menus and used the static Loc instead * removed localization dependency from bound accpetCloning user interface * Removed Ilocalization dependency I accidentally added to ghost ui * Update Content.Client/GameObjects/Components/MedicalScanner/MedicalScannerComponent.cs Co-authored-by: Exp <theexp111@gmail.com> * Changed null check to tryget in case for cloning UiButton.Clone * Parameterized Cloning time on serverside component * tried to reset Robust toolbox module to current master * Added null check to ghost client component message handling, unsubscribe to the mind component listening to the cloning question ui, fixed _clonningProgress typo, moved CloningPod component dependencies to actually be dependencies, removed un-needed disposals of cloning windows, added disposals missing in boundUserInterfaces. * Reset submodule * corrected exception for cloning pod visualizer to refer to cloning pod state and not medical scanner state * Fix typo * Unsubscribe from onUiReceiveMessage in mindcomponent in the onRemove function, not the acceptcloningui function * unsubscribe from OnUiReceiveMessage in CloningPodComponent * unssubscribe from ghostreturn message in cloningpodComponent onRemove Co-authored-by: Exp <theexp111@gmail.com> Co-authored-by: DrSmugleaf <DrSmugleaf@users.noreply.github.com>
2020-09-02 06:07:54 -04:00
if (_bodyContainer.ContainedEntity?.Uid == null)
{
Damageable Refactor 3: Revenge of the Instamerge (#4524) * Add DamageType And DamageGroup Prototypes * Remove DamageTypePrototype Field "name" as its redundant * Change I/DamageableComponent to use prototypes * Update DamageContainer, ReisistanceSet and DamageChangeData * Change Barotrauma Component to use DamageType from DamageSystem * Update AsteroidRockComponent * update some more components * update some more components * Fix m o r e c o m p o n e n t s and their damageType * all thats left is bug/missing node hunting then verification. * push changes * update submodule * Merge fixes * push DGP for example * update damagecomponent across shared and server * fix a few bugs * Fix Merge issues * Refactor damageablecomponent update (#4406) * Fixing merge. I messed up part of the merge. this should fix it? * Barotrauma now uses prototypeManager As System.Runtime.CompilerServices also has a [Dependency], I think I had to use the full path [Robust.Shared.IoC.Dependency] * FlammableComponent now uses prototypeManager * SuicideCommands now use prototypeManager * Changed many files to use prototypeManager to resolve damaege prototypes Yeah.... prototype references would be very nice. maybe this was all a waste of time. * Grouping prototypeManager.Index with datafield definitions This will make it easier to eventually add prototype references * removed unused variable * Moved lines around. Lines now consistent with other TODO PROTOTYPE blocks * Grouping more prototypeManager.Index with datafield definitions * Removed unnecessary code * Added more prototypeManager indexing These ones weren't pointed out by DrSmug. But I think this is all of them? That or my regex is shit. * Remove redundant _damage field * Remove redundant _currentTemperature * Moved variables down * Added prototypeManager indexing to TemperatureComponent * WeaponComponent/System now use ProtptypeManager And as far as I can tell damageType is required, and therefore should never have been null anyway? * Make ranged weapon clumsy fire effects datafields And yes, the order in which the clumsy effects occur is very important. * Made damage on vital body part loss a datafield * Renamed several damageGroup variables to group * Capitalised DamageListToDamageGroup * Make radiation and explosion damage types datafields * Renamed _supportedDamageGroupIDs and _supportedDamageTypeIDs * Fixed mistakes Frogot to remove prototypeManager index DamageTypeTrigger, and wrong variable visibility in TemperatureComponent * Added necessary code Is something tragically wrong? * MeleeWeapon damageType is not actually required * Fixing someone else's mistakes A search comes up with nothing in the yaml files, and its not a required field. So no one uses it? Hopefully? * Changed and renamed damageTypeToDamageGroup Previously would incorrectly return the total container damage for each group, not the total in the group * renaming varitables * Renamed variable DamageClasses * Added dictionary converting functions * Added ID-keyed dictionaries * Making MedicalScanner use ID dictionaries, instead of prototype dictionaries Oh oh no. I've been able to avoid UI & networking up until now. I have no Idea what I am doing. * Fix Medical Scanner * Summary (required) The joke here is that this fixes the empty summary. * Removed DamageableComponent.GetDamageGroup/Type * Renamed "damage classes" to groups. * Update ChangeDamage description * Replaced Heal() with SettAllDamage() Heal() was just a confusing name, * More Class -> Group renaming * Replace Class with Group in yaml files DamageClassTrigger does not appear in any yaml? only in testing? DamageTypeTrigger appears only in human.yaml? HealthChangeMetabolism is Mostly in medicine.yml and one in soad.yaml Why the hell is Cola metabolizable by plants? Who is pouring cola on their plants!?!? * Fix _prototypeManager being null errors. * Changing comments Where are the prototype references * MetabolismComponent doesn't give free heals anymore. * Changes HungerComponent healing. Previously I think it would actually damage you. Only did this as I though it was causing the fast healing. Turns out that was just BREATHING. * Generalised a function in DamageableComponent and moved it to DamageGroupPrototype previously DamageTypesDictToDamageGroupDict was private to DamageableComponent, but was also quite general (nearly a static function). As this sort of function may be needed by other components using DamageGroupPrototypes in the future, I moved it there as a static function instead. * modified DamageableComponent.ChangeDamage() ignoreResistances was renamed to ignoreDamageResistances to make it clearer that it had no effect on healing. Now uses default argument for ignoreDamageResistances, so when healing you are not forced to specify an argument that does nothing. Also made some general changes to ignoreResistances() * Changed class->group and added missing damage type functionality to DamageContainerPrototypes * Added Comments to damage.yml * Misc Changes to DamageableComponent * Differentiated between group support and group applicability So far, every damage type is a member of one, and only one, damage group. So this change has no real effect so far. * Added proposed alternative to ChangeDamage() * fixed error in DamageGroupPrototype * Changes to DamageableComponent Lots of changes to comments. Some variables renamed in IDamageableComponent and DamageableComponent (also required renaming in other files) Some minor logic changes, mostly for incorrect descirptions of boolean return values. Also further differentiating between ApplicableGroups and SupportedGroups... if that will ever even matter * Generalised MedicalScannerComponent If needed, can print miscellaneous damage types now * Fixed HealthChangeMetabolism bug * Changing Comments around * More questions * Made Barotrauma default to blunt * Fix RejuvenateTest.cs * Comments * Coments and variable names * fix some master-merge issues * Removed redundant fields * Misc changes for readbility of PR diff * Consistent naming * Fixed atmos damage bug * Removed Ranting * Fixed Hunger after I broke it * Fixing Bugs * Removed stupid question * Removed more stupid questions * Fix potential null errors. * Made boolean return values consistent Also renamed several functions, to make it clear they return a bool. Docs were also updated. * Removed IoCManager.InjectDependencies() * Removed unnecessary 'suffocation' prefix * Fixed Spelling Also removed accidentally left in logger call * Fixed Medical Scanner * Apply suggestions from code review Co-authored-by: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com> * Changing comments and whitespaces * Made damage thresholds trigger datafields required * So many typos * Changes to DamageableComponents Changed documentation in IDamageableComponent Made testing code more readable. Relabelled groups as 'Applicable' either 'Fully Supported' * Removed function and degeneralised * Update DamageableComponent.cs Removed unused parameters Fixed Networking * Added IoCManager.Resolve * Now using alternative TryChangeDamage() * Removed function from DamageGroupPrototype * Removing comments * Remove bad if statement? * Fix damageChanged ordering * Fix hurt server command * Changed //TODO PROTOTYPE blocks Now use PrototypeManager differently. Wherever possible, only retrieve the prototype once. Also added default damage types to some more datafields * Update Content.Shared/Damage/Container/DamageContainerPrototype.cs Co-authored-by: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com> * renamed _accumulatedHealth -> _accumulatedDamage and added TODOs * Another class-> group * Fix bug in generalisation of damage container prototypes * Addes Tests to make sure I dont keep adding bugs to my own code. * Changed Return values when setting * Removed unused class * Added more tests, split tests into three files * Made damage types public and VV read-write-able * Minor changes to DamageableComponent Replaced internal use of GetDamagePerType with _damageDict and removed some unnecessary fields * Fix Suicide, by adding IoC Resolve() * Fix DamageGroupTrigger bug * Fix typos in tests * Change comments./docstrings & spacing * Merge tests, use test prototypes Co-authored-by: Leon Friedrich <60421075+leonsfriedrich@users.noreply.github.com> Co-authored-by: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com> * Fix merge issues Co-authored-by: Silver <Silvertorch5@gmail.com> Co-authored-by: DrSmugleaf <DrSmugleaf@users.noreply.github.com> Co-authored-by: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com> Co-authored-by: Leon Friedrich <60421075+leonsfriedrich@users.noreply.github.com>
2021-08-25 03:06:27 +10:00
return new MedicalScannerBoundUserInterfaceState(body.Uid, groups, types, true);
Cloning (#1932) * Add art assets for cloning * Added a 'Scan DNA' button to the medical scanner * Made the UI update unconditional for the medical scanner until checks for power changes are in place * Update Medical scanner to reflect powered status and fix #1774 * added a 'scan dna' button the the medical scanner that will add the contained bodies Uid to a list in CloningSystem, fixed an issue with the menu not populating if the scanner starts in an unpowered state * Add disabling logic to 'Scan DNA' button on medical scanner * Removed un-used libraries * changed scan dna button to Scan and Save DNA * Added cloning machine code infrastructure copied from Medical Scanner * Added a list to cloning menu containing some numbers * Cloning Machine UI sends a message to the cloning component with the entityUID * New scans now show up in cloning pod menu * fixed cloning machine collision shape * cloning machine can now spawn the right player profile assuming the attatched entity is still correct. * refactored cloning system to use a map of integer ids to player Minds * Added a return to body cloning loop for the ghost * Fixed warning for _playerManager being possibly null, added TODO note for ghost return to body button acting as a toggle * removed #nullable from cloningMachineWindow" * Trying to get rid of nullable error * fix CloningMachine to not initilize with it's owner components * updated CloningMachine server component to play nice with the new nullable rules * replace flag with eventBus message for sending a ghosts mind to a clone body * Refactor cloning so that a popup option is used to get user consent for cloning * Refactoring * Reverting unused changes for cloning component * Added proper cloning pod sprites and a visualizer so 'idle' and 'cloning' states are properly reflected * added missing robust toolbox contents * Added cloning NoMind State and made cloning take time * Added cloning progress bar and mind status indicator to cloning pod * Added missing localization calls, removeed 'returned to cloned body' from ghostUI * Added unsubscribe for cloningStartedMessage in Mindcomponent.cs OnRemove * Added eject button to cloningMachine and clamped the cloning progress bar to 100% * Added condition to eject body on cloningmachine so bodies can't be ejected until cloning is done * Add click-dragOn functionality to the medical scanner for things with a bodyManager * Messed with scan query so it doesn't fail on dead bodies as long as Mind still owns the mob * refactored clonning scan check on medical scanner so it doesn't do a linq query * merge with rogue toolbox * Change the name of Cloning Machine to the less generic Cloning Pod * Changed Cloning Pod so it pauses cloning while the power is out * Removed the evil LocalizationManager from the cloning menus and used the static Loc instead * removed localization dependency from bound accpetCloning user interface * Removed Ilocalization dependency I accidentally added to ghost ui * Update Content.Client/GameObjects/Components/MedicalScanner/MedicalScannerComponent.cs Co-authored-by: Exp <theexp111@gmail.com> * Changed null check to tryget in case for cloning UiButton.Clone * Parameterized Cloning time on serverside component * tried to reset Robust toolbox module to current master * Added null check to ghost client component message handling, unsubscribe to the mind component listening to the cloning question ui, fixed _clonningProgress typo, moved CloningPod component dependencies to actually be dependencies, removed un-needed disposals of cloning windows, added disposals missing in boundUserInterfaces. * Reset submodule * corrected exception for cloning pod visualizer to refer to cloning pod state and not medical scanner state * Fix typo * Unsubscribe from onUiReceiveMessage in mindcomponent in the onRemove function, not the acceptcloningui function * unsubscribe from OnUiReceiveMessage in CloningPodComponent * unssubscribe from ghostreturn message in cloningpodComponent onRemove Co-authored-by: Exp <theexp111@gmail.com> Co-authored-by: DrSmugleaf <DrSmugleaf@users.noreply.github.com>
2020-09-02 06:07:54 -04:00
}
var cloningSystem = EntitySystem.Get<CloningSystem>();
var scanned = _bodyContainer.ContainedEntity.TryGetComponent(out MindComponent? mindComponent) &&
mindComponent.Mind != null &&
cloningSystem.HasDnaScan(mindComponent.Mind);
Cloning (#1932) * Add art assets for cloning * Added a 'Scan DNA' button to the medical scanner * Made the UI update unconditional for the medical scanner until checks for power changes are in place * Update Medical scanner to reflect powered status and fix #1774 * added a 'scan dna' button the the medical scanner that will add the contained bodies Uid to a list in CloningSystem, fixed an issue with the menu not populating if the scanner starts in an unpowered state * Add disabling logic to 'Scan DNA' button on medical scanner * Removed un-used libraries * changed scan dna button to Scan and Save DNA * Added cloning machine code infrastructure copied from Medical Scanner * Added a list to cloning menu containing some numbers * Cloning Machine UI sends a message to the cloning component with the entityUID * New scans now show up in cloning pod menu * fixed cloning machine collision shape * cloning machine can now spawn the right player profile assuming the attatched entity is still correct. * refactored cloning system to use a map of integer ids to player Minds * Added a return to body cloning loop for the ghost * Fixed warning for _playerManager being possibly null, added TODO note for ghost return to body button acting as a toggle * removed #nullable from cloningMachineWindow" * Trying to get rid of nullable error * fix CloningMachine to not initilize with it's owner components * updated CloningMachine server component to play nice with the new nullable rules * replace flag with eventBus message for sending a ghosts mind to a clone body * Refactor cloning so that a popup option is used to get user consent for cloning * Refactoring * Reverting unused changes for cloning component * Added proper cloning pod sprites and a visualizer so 'idle' and 'cloning' states are properly reflected * added missing robust toolbox contents * Added cloning NoMind State and made cloning take time * Added cloning progress bar and mind status indicator to cloning pod * Added missing localization calls, removeed 'returned to cloned body' from ghostUI * Added unsubscribe for cloningStartedMessage in Mindcomponent.cs OnRemove * Added eject button to cloningMachine and clamped the cloning progress bar to 100% * Added condition to eject body on cloningmachine so bodies can't be ejected until cloning is done * Add click-dragOn functionality to the medical scanner for things with a bodyManager * Messed with scan query so it doesn't fail on dead bodies as long as Mind still owns the mob * refactored clonning scan check on medical scanner so it doesn't do a linq query * merge with rogue toolbox * Change the name of Cloning Machine to the less generic Cloning Pod * Changed Cloning Pod so it pauses cloning while the power is out * Removed the evil LocalizationManager from the cloning menus and used the static Loc instead * removed localization dependency from bound accpetCloning user interface * Removed Ilocalization dependency I accidentally added to ghost ui * Update Content.Client/GameObjects/Components/MedicalScanner/MedicalScannerComponent.cs Co-authored-by: Exp <theexp111@gmail.com> * Changed null check to tryget in case for cloning UiButton.Clone * Parameterized Cloning time on serverside component * tried to reset Robust toolbox module to current master * Added null check to ghost client component message handling, unsubscribe to the mind component listening to the cloning question ui, fixed _clonningProgress typo, moved CloningPod component dependencies to actually be dependencies, removed un-needed disposals of cloning windows, added disposals missing in boundUserInterfaces. * Reset submodule * corrected exception for cloning pod visualizer to refer to cloning pod state and not medical scanner state * Fix typo * Unsubscribe from onUiReceiveMessage in mindcomponent in the onRemove function, not the acceptcloningui function * unsubscribe from OnUiReceiveMessage in CloningPodComponent * unssubscribe from ghostreturn message in cloningpodComponent onRemove Co-authored-by: Exp <theexp111@gmail.com> Co-authored-by: DrSmugleaf <DrSmugleaf@users.noreply.github.com>
2020-09-02 06:07:54 -04:00
Damageable Refactor 3: Revenge of the Instamerge (#4524) * Add DamageType And DamageGroup Prototypes * Remove DamageTypePrototype Field "name" as its redundant * Change I/DamageableComponent to use prototypes * Update DamageContainer, ReisistanceSet and DamageChangeData * Change Barotrauma Component to use DamageType from DamageSystem * Update AsteroidRockComponent * update some more components * update some more components * Fix m o r e c o m p o n e n t s and their damageType * all thats left is bug/missing node hunting then verification. * push changes * update submodule * Merge fixes * push DGP for example * update damagecomponent across shared and server * fix a few bugs * Fix Merge issues * Refactor damageablecomponent update (#4406) * Fixing merge. I messed up part of the merge. this should fix it? * Barotrauma now uses prototypeManager As System.Runtime.CompilerServices also has a [Dependency], I think I had to use the full path [Robust.Shared.IoC.Dependency] * FlammableComponent now uses prototypeManager * SuicideCommands now use prototypeManager * Changed many files to use prototypeManager to resolve damaege prototypes Yeah.... prototype references would be very nice. maybe this was all a waste of time. * Grouping prototypeManager.Index with datafield definitions This will make it easier to eventually add prototype references * removed unused variable * Moved lines around. Lines now consistent with other TODO PROTOTYPE blocks * Grouping more prototypeManager.Index with datafield definitions * Removed unnecessary code * Added more prototypeManager indexing These ones weren't pointed out by DrSmug. But I think this is all of them? That or my regex is shit. * Remove redundant _damage field * Remove redundant _currentTemperature * Moved variables down * Added prototypeManager indexing to TemperatureComponent * WeaponComponent/System now use ProtptypeManager And as far as I can tell damageType is required, and therefore should never have been null anyway? * Make ranged weapon clumsy fire effects datafields And yes, the order in which the clumsy effects occur is very important. * Made damage on vital body part loss a datafield * Renamed several damageGroup variables to group * Capitalised DamageListToDamageGroup * Make radiation and explosion damage types datafields * Renamed _supportedDamageGroupIDs and _supportedDamageTypeIDs * Fixed mistakes Frogot to remove prototypeManager index DamageTypeTrigger, and wrong variable visibility in TemperatureComponent * Added necessary code Is something tragically wrong? * MeleeWeapon damageType is not actually required * Fixing someone else's mistakes A search comes up with nothing in the yaml files, and its not a required field. So no one uses it? Hopefully? * Changed and renamed damageTypeToDamageGroup Previously would incorrectly return the total container damage for each group, not the total in the group * renaming varitables * Renamed variable DamageClasses * Added dictionary converting functions * Added ID-keyed dictionaries * Making MedicalScanner use ID dictionaries, instead of prototype dictionaries Oh oh no. I've been able to avoid UI & networking up until now. I have no Idea what I am doing. * Fix Medical Scanner * Summary (required) The joke here is that this fixes the empty summary. * Removed DamageableComponent.GetDamageGroup/Type * Renamed "damage classes" to groups. * Update ChangeDamage description * Replaced Heal() with SettAllDamage() Heal() was just a confusing name, * More Class -> Group renaming * Replace Class with Group in yaml files DamageClassTrigger does not appear in any yaml? only in testing? DamageTypeTrigger appears only in human.yaml? HealthChangeMetabolism is Mostly in medicine.yml and one in soad.yaml Why the hell is Cola metabolizable by plants? Who is pouring cola on their plants!?!? * Fix _prototypeManager being null errors. * Changing comments Where are the prototype references * MetabolismComponent doesn't give free heals anymore. * Changes HungerComponent healing. Previously I think it would actually damage you. Only did this as I though it was causing the fast healing. Turns out that was just BREATHING. * Generalised a function in DamageableComponent and moved it to DamageGroupPrototype previously DamageTypesDictToDamageGroupDict was private to DamageableComponent, but was also quite general (nearly a static function). As this sort of function may be needed by other components using DamageGroupPrototypes in the future, I moved it there as a static function instead. * modified DamageableComponent.ChangeDamage() ignoreResistances was renamed to ignoreDamageResistances to make it clearer that it had no effect on healing. Now uses default argument for ignoreDamageResistances, so when healing you are not forced to specify an argument that does nothing. Also made some general changes to ignoreResistances() * Changed class->group and added missing damage type functionality to DamageContainerPrototypes * Added Comments to damage.yml * Misc Changes to DamageableComponent * Differentiated between group support and group applicability So far, every damage type is a member of one, and only one, damage group. So this change has no real effect so far. * Added proposed alternative to ChangeDamage() * fixed error in DamageGroupPrototype * Changes to DamageableComponent Lots of changes to comments. Some variables renamed in IDamageableComponent and DamageableComponent (also required renaming in other files) Some minor logic changes, mostly for incorrect descirptions of boolean return values. Also further differentiating between ApplicableGroups and SupportedGroups... if that will ever even matter * Generalised MedicalScannerComponent If needed, can print miscellaneous damage types now * Fixed HealthChangeMetabolism bug * Changing Comments around * More questions * Made Barotrauma default to blunt * Fix RejuvenateTest.cs * Comments * Coments and variable names * fix some master-merge issues * Removed redundant fields * Misc changes for readbility of PR diff * Consistent naming * Fixed atmos damage bug * Removed Ranting * Fixed Hunger after I broke it * Fixing Bugs * Removed stupid question * Removed more stupid questions * Fix potential null errors. * Made boolean return values consistent Also renamed several functions, to make it clear they return a bool. Docs were also updated. * Removed IoCManager.InjectDependencies() * Removed unnecessary 'suffocation' prefix * Fixed Spelling Also removed accidentally left in logger call * Fixed Medical Scanner * Apply suggestions from code review Co-authored-by: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com> * Changing comments and whitespaces * Made damage thresholds trigger datafields required * So many typos * Changes to DamageableComponents Changed documentation in IDamageableComponent Made testing code more readable. Relabelled groups as 'Applicable' either 'Fully Supported' * Removed function and degeneralised * Update DamageableComponent.cs Removed unused parameters Fixed Networking * Added IoCManager.Resolve * Now using alternative TryChangeDamage() * Removed function from DamageGroupPrototype * Removing comments * Remove bad if statement? * Fix damageChanged ordering * Fix hurt server command * Changed //TODO PROTOTYPE blocks Now use PrototypeManager differently. Wherever possible, only retrieve the prototype once. Also added default damage types to some more datafields * Update Content.Shared/Damage/Container/DamageContainerPrototype.cs Co-authored-by: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com> * renamed _accumulatedHealth -> _accumulatedDamage and added TODOs * Another class-> group * Fix bug in generalisation of damage container prototypes * Addes Tests to make sure I dont keep adding bugs to my own code. * Changed Return values when setting * Removed unused class * Added more tests, split tests into three files * Made damage types public and VV read-write-able * Minor changes to DamageableComponent Replaced internal use of GetDamagePerType with _damageDict and removed some unnecessary fields * Fix Suicide, by adding IoC Resolve() * Fix DamageGroupTrigger bug * Fix typos in tests * Change comments./docstrings & spacing * Merge tests, use test prototypes Co-authored-by: Leon Friedrich <60421075+leonsfriedrich@users.noreply.github.com> Co-authored-by: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com> * Fix merge issues Co-authored-by: Silver <Silvertorch5@gmail.com> Co-authored-by: DrSmugleaf <DrSmugleaf@users.noreply.github.com> Co-authored-by: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com> Co-authored-by: Leon Friedrich <60421075+leonsfriedrich@users.noreply.github.com>
2021-08-25 03:06:27 +10:00
return new MedicalScannerBoundUserInterfaceState(body.Uid, groups, types, scanned);
}
private void UpdateUserInterface()
{
if (!Powered)
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
{
return;
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
}
var newState = GetUserInterfaceState();
UserInterface?.SetState(newState);
}
private MedicalScannerStatus GetStatusFromDamageState(IMobStateComponent state)
{
if (state.IsAlive())
{
return MedicalScannerStatus.Green;
}
else if (state.IsCritical())
{
return MedicalScannerStatus.Red;
}
else if (state.IsDead())
{
return MedicalScannerStatus.Death;
}
else
{
return MedicalScannerStatus.Yellow;
}
}
private MedicalScannerStatus GetStatus()
{
if (Powered)
{
var body = _bodyContainer.ContainedEntity;
var state = body?.GetComponentOrNull<IMobStateComponent>();
return state == null
? MedicalScannerStatus.Open
: GetStatusFromDamageState(state);
}
return MedicalScannerStatus.Off;
}
private void UpdateAppearance()
{
if (Owner.TryGetComponent(out AppearanceComponent? appearance))
{
appearance.SetData(MedicalScannerVisuals.Status, GetStatus());
}
}
2021-02-04 17:44:49 +01:00
void IActivate.Activate(ActivateEventArgs args)
{
if (!args.User.TryGetComponent(out ActorComponent? actor))
{
return;
}
if (!Powered)
return;
UserInterface?.Open(actor.PlayerSession);
}
[Verb]
public sealed class EnterVerb : Verb<MedicalScannerComponent>
{
protected override void GetData(IEntity user, MedicalScannerComponent component, VerbData data)
{
if (!EntitySystem.Get<ActionBlockerSystem>().CanInteract(user))
{
data.Visibility = VerbVisibility.Invisible;
return;
}
data.Text = Loc.GetString("enter-verb-get-data-text");
data.Visibility = component.IsOccupied ? VerbVisibility.Invisible : VerbVisibility.Visible;
}
protected override void Activate(IEntity user, MedicalScannerComponent component)
{
component.InsertBody(user);
}
}
[Verb]
public sealed class EjectVerb : Verb<MedicalScannerComponent>
{
public override bool AlternativeInteraction => true;
protected override void GetData(IEntity user, MedicalScannerComponent component, VerbData data)
{
if (!EntitySystem.Get<ActionBlockerSystem>().CanInteract(user))
{
data.Visibility = VerbVisibility.Invisible;
return;
}
data.Text = Loc.GetString("medical-scanner-eject-verb-get-data-text");
data.Visibility = component.IsOccupied ? VerbVisibility.Visible : VerbVisibility.Invisible;
data.IconTexture = "/Textures/Interface/VerbIcons/eject.svg.192dpi.png";
}
protected override void Activate(IEntity user, MedicalScannerComponent component)
{
component.EjectBody();
}
}
public void InsertBody(IEntity user)
{
_bodyContainer.Insert(user);
UpdateUserInterface();
UpdateAppearance();
}
public void EjectBody()
{
var containedEntity = _bodyContainer.ContainedEntity;
if (containedEntity == null) return;
_bodyContainer.Remove(containedEntity);
containedEntity.Transform.WorldPosition += _ejectOffset;
UpdateUserInterface();
UpdateAppearance();
}
public void Update(float frameTime)
{
UpdateUserInterface();
UpdateAppearance();
}
private void OnUiReceiveMessage(ServerBoundUserInterfaceMessage obj)
{
if (obj.Message is not UiButtonPressedMessage message) return;
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
switch (message.Button)
{
case UiButton.ScanDNA:
if (_bodyContainer.ContainedEntity != null)
{
var cloningSystem = EntitySystem.Get<CloningSystem>();
if (!_bodyContainer.ContainedEntity.TryGetComponent(out MindComponent? mindComp) || mindComp.Mind == null)
{
obj.Session.AttachedEntity?.PopupMessageCursor(Loc.GetString("medical-scanner-component-msg-no-soul"));
break;
}
// Null suppression based on above check. Yes, it's explicitly needed
var mind = mindComp.Mind!;
// We need the HumanoidCharacterProfile
// TODO: Move this further 'outwards' into a DNAComponent or somesuch.
// Ideally this ends with GameTicker & CloningSystem handing DNA to a function that sets up a body for that DNA.
var mindUser = mind.UserId;
if (mindUser == null)
{
// For now assume this means soul departed
obj.Session.AttachedEntity?.PopupMessageCursor(Loc.GetString("medical-scanner-component-msg-soul-broken"));
break;
}
// has to be explicit cast like this, IDK why, null suppression operators seem to not work
var profile = GetPlayerProfileAsync((NetUserId) mindUser);
cloningSystem.AddToDnaScans(new ClonerDNAEntry(mind, profile));
}
Cloning (#1932) * Add art assets for cloning * Added a 'Scan DNA' button to the medical scanner * Made the UI update unconditional for the medical scanner until checks for power changes are in place * Update Medical scanner to reflect powered status and fix #1774 * added a 'scan dna' button the the medical scanner that will add the contained bodies Uid to a list in CloningSystem, fixed an issue with the menu not populating if the scanner starts in an unpowered state * Add disabling logic to 'Scan DNA' button on medical scanner * Removed un-used libraries * changed scan dna button to Scan and Save DNA * Added cloning machine code infrastructure copied from Medical Scanner * Added a list to cloning menu containing some numbers * Cloning Machine UI sends a message to the cloning component with the entityUID * New scans now show up in cloning pod menu * fixed cloning machine collision shape * cloning machine can now spawn the right player profile assuming the attatched entity is still correct. * refactored cloning system to use a map of integer ids to player Minds * Added a return to body cloning loop for the ghost * Fixed warning for _playerManager being possibly null, added TODO note for ghost return to body button acting as a toggle * removed #nullable from cloningMachineWindow" * Trying to get rid of nullable error * fix CloningMachine to not initilize with it's owner components * updated CloningMachine server component to play nice with the new nullable rules * replace flag with eventBus message for sending a ghosts mind to a clone body * Refactor cloning so that a popup option is used to get user consent for cloning * Refactoring * Reverting unused changes for cloning component * Added proper cloning pod sprites and a visualizer so 'idle' and 'cloning' states are properly reflected * added missing robust toolbox contents * Added cloning NoMind State and made cloning take time * Added cloning progress bar and mind status indicator to cloning pod * Added missing localization calls, removeed 'returned to cloned body' from ghostUI * Added unsubscribe for cloningStartedMessage in Mindcomponent.cs OnRemove * Added eject button to cloningMachine and clamped the cloning progress bar to 100% * Added condition to eject body on cloningmachine so bodies can't be ejected until cloning is done * Add click-dragOn functionality to the medical scanner for things with a bodyManager * Messed with scan query so it doesn't fail on dead bodies as long as Mind still owns the mob * refactored clonning scan check on medical scanner so it doesn't do a linq query * merge with rogue toolbox * Change the name of Cloning Machine to the less generic Cloning Pod * Changed Cloning Pod so it pauses cloning while the power is out * Removed the evil LocalizationManager from the cloning menus and used the static Loc instead * removed localization dependency from bound accpetCloning user interface * Removed Ilocalization dependency I accidentally added to ghost ui * Update Content.Client/GameObjects/Components/MedicalScanner/MedicalScannerComponent.cs Co-authored-by: Exp <theexp111@gmail.com> * Changed null check to tryget in case for cloning UiButton.Clone * Parameterized Cloning time on serverside component * tried to reset Robust toolbox module to current master * Added null check to ghost client component message handling, unsubscribe to the mind component listening to the cloning question ui, fixed _clonningProgress typo, moved CloningPod component dependencies to actually be dependencies, removed un-needed disposals of cloning windows, added disposals missing in boundUserInterfaces. * Reset submodule * corrected exception for cloning pod visualizer to refer to cloning pod state and not medical scanner state * Fix typo * Unsubscribe from onUiReceiveMessage in mindcomponent in the onRemove function, not the acceptcloningui function * unsubscribe from OnUiReceiveMessage in CloningPodComponent * unssubscribe from ghostreturn message in cloningpodComponent onRemove Co-authored-by: Exp <theexp111@gmail.com> Co-authored-by: DrSmugleaf <DrSmugleaf@users.noreply.github.com>
2020-09-02 06:07:54 -04:00
break;
default:
throw new ArgumentOutOfRangeException();
}
}
Cloning (#1932) * Add art assets for cloning * Added a 'Scan DNA' button to the medical scanner * Made the UI update unconditional for the medical scanner until checks for power changes are in place * Update Medical scanner to reflect powered status and fix #1774 * added a 'scan dna' button the the medical scanner that will add the contained bodies Uid to a list in CloningSystem, fixed an issue with the menu not populating if the scanner starts in an unpowered state * Add disabling logic to 'Scan DNA' button on medical scanner * Removed un-used libraries * changed scan dna button to Scan and Save DNA * Added cloning machine code infrastructure copied from Medical Scanner * Added a list to cloning menu containing some numbers * Cloning Machine UI sends a message to the cloning component with the entityUID * New scans now show up in cloning pod menu * fixed cloning machine collision shape * cloning machine can now spawn the right player profile assuming the attatched entity is still correct. * refactored cloning system to use a map of integer ids to player Minds * Added a return to body cloning loop for the ghost * Fixed warning for _playerManager being possibly null, added TODO note for ghost return to body button acting as a toggle * removed #nullable from cloningMachineWindow" * Trying to get rid of nullable error * fix CloningMachine to not initilize with it's owner components * updated CloningMachine server component to play nice with the new nullable rules * replace flag with eventBus message for sending a ghosts mind to a clone body * Refactor cloning so that a popup option is used to get user consent for cloning * Refactoring * Reverting unused changes for cloning component * Added proper cloning pod sprites and a visualizer so 'idle' and 'cloning' states are properly reflected * added missing robust toolbox contents * Added cloning NoMind State and made cloning take time * Added cloning progress bar and mind status indicator to cloning pod * Added missing localization calls, removeed 'returned to cloned body' from ghostUI * Added unsubscribe for cloningStartedMessage in Mindcomponent.cs OnRemove * Added eject button to cloningMachine and clamped the cloning progress bar to 100% * Added condition to eject body on cloningmachine so bodies can't be ejected until cloning is done * Add click-dragOn functionality to the medical scanner for things with a bodyManager * Messed with scan query so it doesn't fail on dead bodies as long as Mind still owns the mob * refactored clonning scan check on medical scanner so it doesn't do a linq query * merge with rogue toolbox * Change the name of Cloning Machine to the less generic Cloning Pod * Changed Cloning Pod so it pauses cloning while the power is out * Removed the evil LocalizationManager from the cloning menus and used the static Loc instead * removed localization dependency from bound accpetCloning user interface * Removed Ilocalization dependency I accidentally added to ghost ui * Update Content.Client/GameObjects/Components/MedicalScanner/MedicalScannerComponent.cs Co-authored-by: Exp <theexp111@gmail.com> * Changed null check to tryget in case for cloning UiButton.Clone * Parameterized Cloning time on serverside component * tried to reset Robust toolbox module to current master * Added null check to ghost client component message handling, unsubscribe to the mind component listening to the cloning question ui, fixed _clonningProgress typo, moved CloningPod component dependencies to actually be dependencies, removed un-needed disposals of cloning windows, added disposals missing in boundUserInterfaces. * Reset submodule * corrected exception for cloning pod visualizer to refer to cloning pod state and not medical scanner state * Fix typo * Unsubscribe from onUiReceiveMessage in mindcomponent in the onRemove function, not the acceptcloningui function * unsubscribe from OnUiReceiveMessage in CloningPodComponent * unssubscribe from ghostreturn message in cloningpodComponent onRemove Co-authored-by: Exp <theexp111@gmail.com> Co-authored-by: DrSmugleaf <DrSmugleaf@users.noreply.github.com>
2020-09-02 06:07:54 -04:00
public override bool DragDropOn(DragDropEvent eventArgs)
Cloning (#1932) * Add art assets for cloning * Added a 'Scan DNA' button to the medical scanner * Made the UI update unconditional for the medical scanner until checks for power changes are in place * Update Medical scanner to reflect powered status and fix #1774 * added a 'scan dna' button the the medical scanner that will add the contained bodies Uid to a list in CloningSystem, fixed an issue with the menu not populating if the scanner starts in an unpowered state * Add disabling logic to 'Scan DNA' button on medical scanner * Removed un-used libraries * changed scan dna button to Scan and Save DNA * Added cloning machine code infrastructure copied from Medical Scanner * Added a list to cloning menu containing some numbers * Cloning Machine UI sends a message to the cloning component with the entityUID * New scans now show up in cloning pod menu * fixed cloning machine collision shape * cloning machine can now spawn the right player profile assuming the attatched entity is still correct. * refactored cloning system to use a map of integer ids to player Minds * Added a return to body cloning loop for the ghost * Fixed warning for _playerManager being possibly null, added TODO note for ghost return to body button acting as a toggle * removed #nullable from cloningMachineWindow" * Trying to get rid of nullable error * fix CloningMachine to not initilize with it's owner components * updated CloningMachine server component to play nice with the new nullable rules * replace flag with eventBus message for sending a ghosts mind to a clone body * Refactor cloning so that a popup option is used to get user consent for cloning * Refactoring * Reverting unused changes for cloning component * Added proper cloning pod sprites and a visualizer so 'idle' and 'cloning' states are properly reflected * added missing robust toolbox contents * Added cloning NoMind State and made cloning take time * Added cloning progress bar and mind status indicator to cloning pod * Added missing localization calls, removeed 'returned to cloned body' from ghostUI * Added unsubscribe for cloningStartedMessage in Mindcomponent.cs OnRemove * Added eject button to cloningMachine and clamped the cloning progress bar to 100% * Added condition to eject body on cloningmachine so bodies can't be ejected until cloning is done * Add click-dragOn functionality to the medical scanner for things with a bodyManager * Messed with scan query so it doesn't fail on dead bodies as long as Mind still owns the mob * refactored clonning scan check on medical scanner so it doesn't do a linq query * merge with rogue toolbox * Change the name of Cloning Machine to the less generic Cloning Pod * Changed Cloning Pod so it pauses cloning while the power is out * Removed the evil LocalizationManager from the cloning menus and used the static Loc instead * removed localization dependency from bound accpetCloning user interface * Removed Ilocalization dependency I accidentally added to ghost ui * Update Content.Client/GameObjects/Components/MedicalScanner/MedicalScannerComponent.cs Co-authored-by: Exp <theexp111@gmail.com> * Changed null check to tryget in case for cloning UiButton.Clone * Parameterized Cloning time on serverside component * tried to reset Robust toolbox module to current master * Added null check to ghost client component message handling, unsubscribe to the mind component listening to the cloning question ui, fixed _clonningProgress typo, moved CloningPod component dependencies to actually be dependencies, removed un-needed disposals of cloning windows, added disposals missing in boundUserInterfaces. * Reset submodule * corrected exception for cloning pod visualizer to refer to cloning pod state and not medical scanner state * Fix typo * Unsubscribe from onUiReceiveMessage in mindcomponent in the onRemove function, not the acceptcloningui function * unsubscribe from OnUiReceiveMessage in CloningPodComponent * unssubscribe from ghostreturn message in cloningpodComponent onRemove Co-authored-by: Exp <theexp111@gmail.com> Co-authored-by: DrSmugleaf <DrSmugleaf@users.noreply.github.com>
2020-09-02 06:07:54 -04:00
{
_bodyContainer.Insert(eventArgs.Dragged);
Cloning (#1932) * Add art assets for cloning * Added a 'Scan DNA' button to the medical scanner * Made the UI update unconditional for the medical scanner until checks for power changes are in place * Update Medical scanner to reflect powered status and fix #1774 * added a 'scan dna' button the the medical scanner that will add the contained bodies Uid to a list in CloningSystem, fixed an issue with the menu not populating if the scanner starts in an unpowered state * Add disabling logic to 'Scan DNA' button on medical scanner * Removed un-used libraries * changed scan dna button to Scan and Save DNA * Added cloning machine code infrastructure copied from Medical Scanner * Added a list to cloning menu containing some numbers * Cloning Machine UI sends a message to the cloning component with the entityUID * New scans now show up in cloning pod menu * fixed cloning machine collision shape * cloning machine can now spawn the right player profile assuming the attatched entity is still correct. * refactored cloning system to use a map of integer ids to player Minds * Added a return to body cloning loop for the ghost * Fixed warning for _playerManager being possibly null, added TODO note for ghost return to body button acting as a toggle * removed #nullable from cloningMachineWindow" * Trying to get rid of nullable error * fix CloningMachine to not initilize with it's owner components * updated CloningMachine server component to play nice with the new nullable rules * replace flag with eventBus message for sending a ghosts mind to a clone body * Refactor cloning so that a popup option is used to get user consent for cloning * Refactoring * Reverting unused changes for cloning component * Added proper cloning pod sprites and a visualizer so 'idle' and 'cloning' states are properly reflected * added missing robust toolbox contents * Added cloning NoMind State and made cloning take time * Added cloning progress bar and mind status indicator to cloning pod * Added missing localization calls, removeed 'returned to cloned body' from ghostUI * Added unsubscribe for cloningStartedMessage in Mindcomponent.cs OnRemove * Added eject button to cloningMachine and clamped the cloning progress bar to 100% * Added condition to eject body on cloningmachine so bodies can't be ejected until cloning is done * Add click-dragOn functionality to the medical scanner for things with a bodyManager * Messed with scan query so it doesn't fail on dead bodies as long as Mind still owns the mob * refactored clonning scan check on medical scanner so it doesn't do a linq query * merge with rogue toolbox * Change the name of Cloning Machine to the less generic Cloning Pod * Changed Cloning Pod so it pauses cloning while the power is out * Removed the evil LocalizationManager from the cloning menus and used the static Loc instead * removed localization dependency from bound accpetCloning user interface * Removed Ilocalization dependency I accidentally added to ghost ui * Update Content.Client/GameObjects/Components/MedicalScanner/MedicalScannerComponent.cs Co-authored-by: Exp <theexp111@gmail.com> * Changed null check to tryget in case for cloning UiButton.Clone * Parameterized Cloning time on serverside component * tried to reset Robust toolbox module to current master * Added null check to ghost client component message handling, unsubscribe to the mind component listening to the cloning question ui, fixed _clonningProgress typo, moved CloningPod component dependencies to actually be dependencies, removed un-needed disposals of cloning windows, added disposals missing in boundUserInterfaces. * Reset submodule * corrected exception for cloning pod visualizer to refer to cloning pod state and not medical scanner state * Fix typo * Unsubscribe from onUiReceiveMessage in mindcomponent in the onRemove function, not the acceptcloningui function * unsubscribe from OnUiReceiveMessage in CloningPodComponent * unssubscribe from ghostreturn message in cloningpodComponent onRemove Co-authored-by: Exp <theexp111@gmail.com> Co-authored-by: DrSmugleaf <DrSmugleaf@users.noreply.github.com>
2020-09-02 06:07:54 -04:00
return true;
}
void IDestroyAct.OnDestroy(DestructionEventArgs eventArgs)
{
EjectBody();
}
private HumanoidCharacterProfile GetPlayerProfileAsync(NetUserId userId)
{
return (HumanoidCharacterProfile) _prefsManager.GetPreferences(userId).SelectedCharacter;
}
}
}