mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-01 12:31:32 +00:00
* Hopefully fixes Cleaning * Cleaning off window blood is now handled by the Window itself * Cleanbots now have an advanced mop built into them, I am hoping in the future we can make cleanbots have their mops taken off, but I'm not good at spriting so it isn't a thing yet. * Adds a pre_clean_callback to replace the should_clean arg (mostly) * Removes the atom cleaning proc, replaces it with a signal for afterattack on a cleaning tool. * Fixes and improvements * adds a new define that allows pre_clean_callback to cancel cleaning entirely, used for mops to check for being wet or attacking buckets and such. * Fixes cleanbots not properly working, removing their mop and just registering for a signal that bots send instead. * Changes cleaner component to take proximity into account, that way we don't have to check it on each item's individual afterattacks, that way we don't have to call parent at the end either. * Improves check_allowed_items a little bit because I hated how it was used for soap. * Update cleaner.dm * reviews
106 lines
3.9 KiB
Plaintext
106 lines
3.9 KiB
Plaintext
/obj/item/mop
|
|
desc = "The world of janitalia wouldn't be complete without a mop."
|
|
name = "mop"
|
|
icon = 'icons/obj/janitor.dmi'
|
|
icon_state = "mop"
|
|
inhand_icon_state = "mop"
|
|
lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi'
|
|
force = 8
|
|
throwforce = 10
|
|
throw_speed = 3
|
|
throw_range = 7
|
|
w_class = WEIGHT_CLASS_NORMAL
|
|
attack_verb_continuous = list("mops", "bashes", "bludgeons", "whacks")
|
|
attack_verb_simple = list("mop", "bash", "bludgeon", "whack")
|
|
resistance_flags = FLAMMABLE
|
|
var/mopcount = 0
|
|
///Maximum volume of reagents it can hold.
|
|
var/max_reagent_volume = 15
|
|
var/mopspeed = 1.5 SECONDS
|
|
force_string = "robust... against germs"
|
|
var/insertable = TRUE
|
|
|
|
/obj/item/mop/Initialize(mapload)
|
|
. = ..()
|
|
AddComponent(/datum/component/cleaner, mopspeed, pre_clean_callback=CALLBACK(src, .proc/should_clean), on_cleaned_callback=CALLBACK(src, .proc/apply_reagents))
|
|
create_reagents(max_reagent_volume)
|
|
GLOB.janitor_devices += src
|
|
|
|
/obj/item/mop/Destroy(force)
|
|
GLOB.janitor_devices -= src
|
|
return ..()
|
|
|
|
///Checks whether or not we should clean.
|
|
/obj/item/mop/proc/should_clean(datum/cleaning_source, atom/atom_to_clean, mob/living/cleaner)
|
|
if(istype(atom_to_clean, /obj/item/reagent_containers/cup/bucket) || istype(atom_to_clean, /obj/structure/janitorialcart))
|
|
return DO_NOT_CLEAN
|
|
if(reagents.total_volume < 0.1)
|
|
to_chat(cleaner, span_warning("Your mop is dry!"))
|
|
return DO_NOT_CLEAN
|
|
return reagents.has_chemical_flag(REAGENT_CLEANS, 1)
|
|
|
|
/**
|
|
* Applies reagents to the cleaned floor and removes them from the mop.
|
|
*
|
|
* Arguments
|
|
* * cleaning_source the source of the cleaning
|
|
* * cleaned_turf the turf that is being cleaned
|
|
* * cleaner the mob that is doing the cleaning
|
|
*/
|
|
/obj/item/mop/proc/apply_reagents(datum/cleaning_source, turf/cleaned_turf, mob/living/cleaner)
|
|
reagents.expose(cleaned_turf, TOUCH, 10) //Needed for proper floor wetting.
|
|
var/val2remove = 1
|
|
if(cleaner?.mind)
|
|
val2remove = round(cleaner.mind.get_skill_modifier(/datum/skill/cleaning, SKILL_SPEED_MODIFIER), 0.1)
|
|
reagents.remove_any(val2remove) //reaction() doesn't use up the reagents
|
|
|
|
/obj/item/mop/cyborg/Initialize(mapload)
|
|
. = ..()
|
|
ADD_TRAIT(src, TRAIT_NODROP, CYBORG_ITEM_TRAIT)
|
|
|
|
/obj/item/mop/advanced
|
|
desc = "The most advanced tool in a custodian's arsenal, complete with a condenser for self-wetting! Just think of all the viscera you will clean up with this!"
|
|
name = "advanced mop"
|
|
max_reagent_volume = 10
|
|
icon_state = "advmop"
|
|
lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi'
|
|
force = 12
|
|
throwforce = 14
|
|
throw_range = 4
|
|
mopspeed = 0.8 SECONDS
|
|
var/refill_enabled = TRUE //Self-refill toggle for when a janitor decides to mop with something other than water.
|
|
/// Amount of reagent to refill per second
|
|
var/refill_rate = 0.5
|
|
var/refill_reagent = /datum/reagent/water //Determins what reagent to use for refilling, just in case someone wanted to make a HOLY MOP OF PURGING
|
|
|
|
/obj/item/mop/advanced/Initialize(mapload)
|
|
. = ..()
|
|
START_PROCESSING(SSobj, src)
|
|
|
|
/obj/item/mop/advanced/attack_self(mob/user)
|
|
refill_enabled = !refill_enabled
|
|
if(refill_enabled)
|
|
START_PROCESSING(SSobj, src)
|
|
else
|
|
STOP_PROCESSING(SSobj,src)
|
|
to_chat(user, span_notice("You set the condenser switch to the '[refill_enabled ? "ON" : "OFF"]' position."))
|
|
playsound(user, 'sound/machines/click.ogg', 30, TRUE)
|
|
|
|
/obj/item/mop/advanced/process(delta_time)
|
|
var/amadd = min(max_reagent_volume - reagents.total_volume, refill_rate * delta_time)
|
|
if(amadd > 0)
|
|
reagents.add_reagent(refill_reagent, amadd)
|
|
|
|
/obj/item/mop/advanced/examine(mob/user)
|
|
. = ..()
|
|
. += span_notice("The condenser switch is set to <b>[refill_enabled ? "ON" : "OFF"]</b>.")
|
|
|
|
/obj/item/mop/advanced/Destroy()
|
|
STOP_PROCESSING(SSobj, src)
|
|
return ..()
|
|
|
|
/obj/item/mop/advanced/cyborg
|
|
insertable = FALSE
|