Files
BongaTheProto 1883c47d5c basic ref regex
makes the proc calls compatible with 515
2024-03-11 19:46:05 -05:00

146 lines
3.9 KiB
Plaintext

/obj/item/rtl
name = "rapid tile layer"
desc = "A device used to rapidly deploy tiles."
icon = 'modular_splurt/icons/obj/tools.dmi'
icon_state = "rtl"
item_state = "rtl"
var/obj/item/stack/tile/plasteel/loaded
var/max_amount = 240
var/active = FALSE
lefthand_file = 'modular_splurt/icons/mob/inhands/equipment/tools_lefthand.dmi'
righthand_file = 'modular_splurt/icons/mob/inhands/equipment/tools_righthand.dmi'
var/mob/listeningTo
/obj/item/rtl/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_TWOHANDED_WIELD, PROC_REF(on_wield))
RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, PROC_REF(on_unwield))
update_icon()
/obj/item/rtl/ComponentInitialize()
. = ..()
AddElement(/datum/element/update_icon_updates_onmob)
AddComponent(/datum/component/two_handed)
/// triggered on wield of two handed item
/obj/item/rtl/proc/on_wield(obj/item/source, mob/user)
active = TRUE
/// triggered on unwield of two handed item
/obj/item/rtl/proc/on_unwield(obj/item/source, mob/user)
active = FALSE
/obj/item/rtl/attackby(obj/item/W, mob/user)
if(istype(W, /obj/item/stack/sheet/metal))
var/obj/item/stack/sheet/metal/inserted_metal = W
if(!loaded)
if(!user.transferItemToLoc(W, src))
to_chat(user, span_warning("[src] is stuck to your hand!"))
return
else
loaded = new /obj/item/stack/tile/plasteel
loaded.max_amount = max_amount
loaded.amount = min(max_amount, inserted_metal.amount*4)
to_chat(user, span_notice("You add the metal to [src]. It now contains [loaded.amount]."))
return
if(loaded.amount < max_amount)
var/transfer_amount = min(max_amount - loaded.amount, inserted_metal.amount*4)
inserted_metal.use(round(transfer_amount/4)) //this is a complete fucking hack
loaded.amount += transfer_amount
else
return
update_icon()
to_chat(user, span_notice("You add the metal to [src]. It now contains [loaded.amount]."))
else
..()
/obj/item/rtl/examine(mob/user)
. = ..()
. += span_notice("Alt-click to set what tile to lay.")
if(loaded)
. += span_info("It contains [loaded.amount]/[max_amount] metal.")
/obj/item/rtl/Destroy()
QDEL_NULL(loaded)
listeningTo = null
return ..()
/obj/item/rtl/update_icon_state()
icon_state = initial(icon_state)
item_state = initial(item_state)
if(!loaded || !loaded.amount)
icon_state += "-empty"
item_state += "-0"
/obj/item/rtl/proc/is_empty(mob/user)
update_icon()
if(!loaded || !loaded.amount)
if(loaded)
QDEL_NULL(loaded)
loaded = null
return TRUE
return FALSE
/obj/item/rtl/pickup(mob/user)
..()
getMobhook(user)
/obj/item/rtl/dropped(mob/wearer)
..()
UnregisterSignal(wearer, COMSIG_MOVABLE_MOVED)
listeningTo = null
/obj/item/rtl/proc/getMobhook(mob/to_hook)
if(listeningTo == to_hook)
return
if(listeningTo)
UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED)
RegisterSignal(to_hook, COMSIG_MOVABLE_MOVED, PROC_REF(trigger))
listeningTo = to_hook
/obj/item/rtl/proc/trigger(mob/user)
SIGNAL_HANDLER
if(active)
layTile(user)
/obj/item/rtl/proc/layTile(mob/user)
if(!isturf(user.loc))
return
if(is_empty(user, 0))
to_chat(user, span_warning("\The [src] is empty!"))
return
var/turf/T = get_turf(user)
if(!istype(T, /turf/open/floor/plating))
return
T.attackby(loaded, user, 0)
update_icon()
/obj/item/rtl/AltClick(mob/user)
if(!loaded)
return ..()
var/obj/item/stack/tile/choice = show_radial_menu(user, src, loaded.tile_reskin_types, radius = 48, require_near = TRUE)
if(!choice || choice == type)
return
var/amount_to_transfer = loaded.amount
QDEL_NULL(loaded)
loaded = new choice
loaded.amount = amount_to_transfer
/obj/item/rtl/pre_loaded/Initialize(mapload) //Comes preloaded, for testing stuff
loaded = new()
loaded.max_amount = max_amount
loaded.amount = max_amount
return ..()
/datum/design/rtl
name = "Rapid Tile Layer"
id = "rtl"
build_type = AUTOLATHE | PROTOLATHE
materials = list(/datum/material/iron = 2500)
build_path = /obj/item/rtl
category = list("initial","Tools")