39 lines
1.5 KiB
Plaintext
39 lines
1.5 KiB
Plaintext
/datum/component/plumbing/reaction_chamber
|
|
demand_connects = WEST
|
|
supply_connects = EAST
|
|
|
|
/datum/component/plumbing/reaction_chamber/Initialize(start=TRUE, _turn_connects=TRUE)
|
|
. = ..()
|
|
if(!istype(parent, /obj/machinery/plumbing/reaction_chamber))
|
|
return COMPONENT_INCOMPATIBLE
|
|
|
|
/datum/component/plumbing/reaction_chamber/can_give(amount, reagent, datum/ductnet/net)
|
|
. = ..()
|
|
var/obj/machinery/plumbing/reaction_chamber/RC = parent
|
|
if(!. || !RC.emptying)
|
|
return FALSE
|
|
|
|
/datum/component/plumbing/reaction_chamber/send_request(dir)
|
|
var/obj/machinery/plumbing/reaction_chamber/RC = parent
|
|
if(RC.emptying || !LAZYLEN(RC.required_reagents))
|
|
return
|
|
for(var/RT in RC.required_reagents)
|
|
var/has_reagent = FALSE
|
|
for(var/A in reagents.reagent_list)
|
|
var/datum/reagent/RD = A
|
|
if(RT == RD.type)
|
|
has_reagent = TRUE
|
|
if(RD.volume < RC.required_reagents[RT])
|
|
process_request(min(RC.required_reagents[RT] - RD.volume, MACHINE_REAGENT_TRANSFER) , RT, dir)
|
|
return
|
|
if(!has_reagent)
|
|
process_request(min(RC.required_reagents[RT], MACHINE_REAGENT_TRANSFER), RT, dir)
|
|
return
|
|
|
|
RC.reagent_flags &= ~NO_REACT
|
|
reagents.handle_reactions()
|
|
|
|
RC.emptying = TRUE //If we move this up, it'll instantly get turned off since any reaction always sets the reagent_total to zero. Other option is make the reaction update
|
|
//everything for every chemical removed, wich isn't a good option either.
|
|
RC.on_reagent_change() //We need to check it now, because some reactions leave nothing left.
|