Files
Bubberstation/code/game/objects/items/hourglass.dm
Zonespace f7c26bbf25 515 Compat (#17465)
* ONLY SKYRAT CHANGES

* ACTUALLY SKYRAT CHANGES

* yolo, revert later

* Update alternate_byond_versions.txt

Co-authored-by: AnturK <AnturK@users.noreply.github.com>
2022-11-15 06:59:06 +00:00

81 lines
2.2 KiB
Plaintext

#define HOURGLASS_STATES 7 //Remember to update if you change the sprite
/obj/item/hourglass
name = "hourglass"
desc = "Nanotrasen patented gravity invariant hourglass. Guaranteed to flow perfectly under any conditions."
var/obj/effect/countdown/hourglass/countdown
var/time = 1 MINUTES
var/finish_time //So countdown doesn't need to fiddle with timers
var/timing_id //if present we're timing
var/hand_activated = TRUE
icon = 'icons/obj/toys/hourglass.dmi'
icon_state = "hourglass_idle"
/obj/item/hourglass/Initialize(mapload)
. = ..()
countdown = new(src)
/obj/item/hourglass/attack_self(mob/user)
. = ..()
if(hand_activated)
toggle(user)
/obj/item/hourglass/proc/toggle(mob/user)
if(!timing_id)
to_chat(user,span_notice("You flip the [src]."))
start()
flick("hourglass_flip",src)
else
to_chat(user,span_notice("You stop the [src].")) //Sand magically flows back because that's more convinient to use.
stop()
/obj/item/hourglass/update_icon_state()
icon_state = "hourglass_[timing_id ? "active" : "idle"]"
return ..()
/obj/item/hourglass/proc/start()
finish_time = world.time + time
timing_id = addtimer(CALLBACK(src, PROC_REF(finish)), time, TIMER_STOPPABLE)
countdown.start()
timing_animation()
/obj/item/hourglass/proc/timing_animation()
var/step_time = time / HOURGLASS_STATES
animate(src, time = step_time, icon_state = "hourglass_1")
for(var/i in 2 to HOURGLASS_STATES)
animate(time = step_time, icon_state = "hourglass_[i]")
/obj/item/hourglass/proc/stop()
if(timing_id)
deltimer(timing_id)
timing_id = null
countdown.stop()
finish_time = null
animate(src)
update_appearance()
/obj/item/hourglass/proc/finish()
visible_message(span_notice("[src] stops."))
stop()
/obj/item/hourglass/Destroy()
QDEL_NULL(countdown)
. = ..()
//Admin events zone.
/obj/item/hourglass/admin
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
anchored = TRUE
hand_activated = FALSE
/obj/item/hourglass/admin/attack_hand(mob/user, list/modifiers)
. = ..()
if(user.client && user.client.holder)
toggle(user)
/obj/item/hourglass/admin/attack_ghost(mob/user)
if(user.client && user.client.holder)
toggle(user)
#undef HOURGLASS_STATES