Skip to content

Commit

Permalink
Surgery condition rework
Browse files Browse the repository at this point in the history
  • Loading branch information
Tropica1Owl committed Sep 2, 2024
1 parent dca910f commit 6cc033f
Showing 1 changed file with 32 additions and 13 deletions.
45 changes: 32 additions & 13 deletions Content.Server/Palmtree/Surgery/SurgerySystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using Content.Server.Body.Systems;
using Content.Server.Popups;
using Content.Server.Mind;
using Content.Shared.Inventory;
using Content.Shared.Atmos.Rotting;
using Content.Shared.Palmtree.Surgery;
using Content.Shared.Interaction;
Expand Down Expand Up @@ -63,7 +64,7 @@ public class PSurgerySystem : SharedSurgerySystem
[Dependency] private readonly SharedMindSystem _sharedmind = default!;
[Dependency] private readonly MindSystem _mind = default!;
[Dependency] private readonly StandingStateSystem _standing = default!;
//[Dependency] private readonly IPlayerManager _player = default!;
[Dependency] private readonly InventorySystem _inventory = default!;
[Dependency] private readonly SharedRottingSystem _rot = default!;
[Dependency] private readonly BloodstreamSystem _blood = default!;
[Dependency] private readonly IGameTiming _timing = default!;
Expand Down Expand Up @@ -241,36 +242,54 @@ private void OnProcedureFinished(EntityUid uid, PSurgeryToolComponent tool, Surg
}
private void OnAfterInteract(EntityUid uid, PSurgeryToolComponent tool, AfterInteractEvent args) // Turn this into FTL strings later
{
int surgeryTimeMultiplier = 1;
bool messageShown = false; // Avoid pop up stacking
bool patientHasState = TryComp(args.Target, out MobStateComponent? patientState);
if (!args.CanReach || args.Target == null) // We already check if target is null, it's okay to perform direct conversion to non-nullable
{
return;
}
if (!TryComp(args.Target, out PPatientComponent? patient) && patientHasState)
{
_popupSystem.PopupEntity("You cannot perform surgery on this!", args.User, PopupType.Small);
return;
}
if (!_standing.IsDown((EntityUid) args.Target))
if (_inventory.TryGetSlotEntity((EntityUid) args.Target, "outerClothing", out var outer) || _inventory.TryGetSlotEntity((EntityUid) args.Target, "jumpsuit", out var jumpsuit))
{
_popupSystem.PopupEntity("The patient must be laying down and asleep!", args.User, PopupType.Small);
_popupSystem.PopupEntity("Remove the patient's clothes first!", args.User, PopupType.MediumCaution);
return;
}
if (!TryComp(args.Target, out SleepingComponent? sleep) && !_mobState.IsIncapacitated((EntityUid) args.Target, patientState))
if (args.User == args.Target) // I've reordered the checks so that the most important modifiers are warned about first.
{
_popupSystem.PopupEntity("The patient must be asleep!", args.User, PopupType.Small);
return;
if (!messageShown)
{
_popupSystem.PopupEntity("You begin operating yourself, this isn't exactly ideal.", args.User, PopupType.MediumCaution);
messageShown = true;
}
surgeryTimeMultiplier += 3;
}
if (args.User == args.Target)
if (!_standing.IsDown((EntityUid) args.Target))
{
_popupSystem.PopupEntity("You cannot operate yourself!", args.User, PopupType.Small);
return;
if (!messageShown)
{
_popupSystem.PopupEntity("The patient should be laying down!", args.User, PopupType.MediumCaution);
messageShown = true;
}
surgeryTimeMultiplier += 3;
}
if (!TryComp(args.Target, out SleepingComponent? sleep) && !_mobState.IsIncapacitated((EntityUid) args.Target, patientState))
{
if (!messageShown)
{
_popupSystem.PopupEntity("You begin the procedure with them awake, this is gonna hurt.", args.User, PopupType.MediumCaution);
messageShown = true;
}
surgeryTimeMultiplier += 1;
}
var doAfterEventArgs = new DoAfterArgs(EntityManager, args.User, tool.useDelay, new SurgeryDoAfterEvent(), uid, target: args.Target)
var doAfterEventArgs = new DoAfterArgs(EntityManager, args.User, tool.useDelay * surgeryTimeMultiplier, new SurgeryDoAfterEvent(), uid, target: args.Target)
{
NeedHand = true,
//BreakOnMove = true,
//BreakOnWeightlessMove = true,
BreakOnUserMove = true,
BreakOnTargetMove = true,
};
_audio.PlayPvs(tool.audioStart, args.User);
_doAfter.TryStartDoAfter(doAfterEventArgs);
Expand Down

0 comments on commit 6cc033f

Please sign in to comment.