Files
Bubberstation/code/game/objects/items/hourglass.dm
tattle d91390a447 [IDB IGNORE] The Great Sweep: Moving dmis into subfolders (part 1) (#69416)
Moves singulo and supermatter dmis into obj/engine, renamed from obj/tesla_engine
Moves Halloween, Christmas, and misc holiday items to obj/holiday
Moves lollipops to obj/food
Moves crates, closets, and storage to obj/storage
Moves assemblies to obj/assemblies
Renames decals.dmi to signs.dmi ...because they're signs and not decals
Moves statues, cutouts, instruments, art supplies, and crayons to obj/art
Moves balloons, plushes, toys, cards, dice, the hourglass, and TCG to obj/toys
Moves guns, swords, shields to obj/weapons
2022-08-24 20:49:35 -03: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/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