Files
SyncIt21 3c5749f862 General maintenance for plumbing (#94427)
## About The Pull Request
The overall behaviour of everything should stay the same but the memory
& speed of these components has been slightly improved and when you
scale that across large plumbing factories you get a substantial
improvement. Here's a list of the most noticeable changes along with
many others that aren't worth mentioning

- Removed vars `use_overlays`, `turn_connects`,
`recipient_reagents_holder`
- `active` var is now replaced with a proc which simply returns is the
machine wrenched or not
- `turn_connects` has been removed because all machines have their pipes
rotate when the machine is rotated. This also removed all the static
icon states ending with `-s` from the `dmi` file thus reducing that file
size as well
- `extend_pipe_to_edge` var is directly integrated into `cut_overlays()`
because it's use cases were limited such for showers & sinks
- Simplified `Initialize()` a lot. Removed params `start`,
`turn_connects`, `custom_receiver`, `extend_pipe_to_edge`. We now only
pass `bolt_layer` making that proc faster & less convoluted
- Replaced `set_recipient_reagents_holder()` proc with
`recipient_reagents_holder()` which returns the reagent holder for
holding reagents instead of storing it in the component. This removes
the need to hook a qdel signal on the holder & we don't need to keep
track of it
- Merged a ton of procs to reduce overhead & reduce file size
- Plumbing ducts creating the network at mapload is faster without using
recursion and the timer subsystem
- Deconstructing plumbing ducts is faster in reconstructing the network
without using recursion and the timer subsystem

This makes managing plumbing code less convoluted & overall better for
the foreseeable future. See the lines of code removed vs added and still
preserves behaviour

## Changelog
🆑
qol: added examines & screentips for ducts & stack of ducts
qol: you can wrench a stack of ducts on the ground to create a pipe
refactor: plumbing code has been improved overall. Report bugs on github
sprite: removed unused static(does not rotate with machine) icon states
for plumbing connections
/🆑

---------

Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
2025-12-31 13:03:42 +01:00

61 lines
2.1 KiB
Plaintext

///We pump liquids from activated(plungerated) geysers to a plumbing outlet. We need to be wired.
/obj/machinery/plumbing/liquid_pump
name = "liquid pump"
desc = "Pump up those sweet liquids from under the surface. Uses thermal energy from geysers to power itself." //better than placing 200 cables, because it wasn't fun
icon = 'icons/obj/pipes_n_cables/hydrochem/plumbers.dmi'
icon_state = "pump"
base_icon_state = "pump"
anchored = FALSE
density = TRUE
use_power = NO_POWER_USE
///units we pump per second
var/pump_power = 1
///set to true if the loop couldnt find a geyser in process, so it remembers and stops checking every loop until moved. more accurate name would be absolutely_no_geyser_under_me_so_dont_try
var/geyserless = FALSE
///The geyser object
var/obj/structure/geyser/geyser
///volume of our internal buffer
var/volume = 200
/obj/machinery/plumbing/liquid_pump/Initialize(mapload, layer)
. = ..()
AddComponent(/datum/component/plumbing/simple_supply, layer)
///please note that the component has a hook in the parent call, wich handles activating and deactivating
/obj/machinery/plumbing/liquid_pump/default_unfasten_wrench(mob/user, obj/item/I, time = 20)
. = ..()
if(. == SUCCESSFUL_UNFASTEN)
geyser = null
update_appearance()
geyserless = FALSE //we switched state, so lets just set this back aswell
/obj/machinery/plumbing/liquid_pump/process(seconds_per_tick)
if(!anchored || panel_open || geyserless)
return
if(!geyser)
for(var/obj/structure/geyser/G in loc.contents)
geyser = G
update_appearance()
if(!geyser) //we didnt find one, abort
geyserless = TRUE
visible_message(span_warning("\The [src] makes a sad beep!"))
playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50)
return
pump(seconds_per_tick)
///pump up that sweet geyser nectar
/obj/machinery/plumbing/liquid_pump/proc/pump(seconds_per_tick)
if(!geyser || !geyser.reagents)
return
geyser.reagents.trans_to(src, pump_power * seconds_per_tick)
/obj/machinery/plumbing/liquid_pump/update_icon_state()
if(geyser)
icon_state = "[base_icon_state]-on"
return ..()
icon_state = "[base_icon_state][panel_open ? "-open" : null]"
return ..()