Files
Aurora.3/code/modules/shuttles/shuttles_multi.dm

74 lines
2.4 KiB
Plaintext

/datum/shuttle/autodock/multi
var/list/destination_tags
var/list/destinations_cache = list()
var/last_cache_rebuild_time = 0
category = /datum/shuttle/autodock/multi
/datum/shuttle/autodock/multi/proc/set_destination(var/destination_key, mob/user)
if(moving_status != SHUTTLE_IDLE)
return
next_location = destinations_cache[destination_key]
/datum/shuttle/autodock/multi/proc/get_destinations()
if (last_cache_rebuild_time < SSshuttle.last_landmark_registration_time)
build_destinations_cache()
return destinations_cache
/datum/shuttle/autodock/multi/proc/build_destinations_cache()
last_cache_rebuild_time = world.time
destinations_cache.Cut()
for(var/destination_tag in destination_tags)
var/obj/effect/shuttle_landmark/landmark = SSshuttle.get_landmark(destination_tag)
if(istype(landmark))
destinations_cache["[landmark.name]"] = landmark
//Antag play announcements when they leave/return to their home area
/datum/shuttle/autodock/multi/antag
warmup_time = 10 SECONDS //replaced the old move cooldown
//This variable is type-abused initially: specify the landmark_tag, not the actual landmark.
var/obj/effect/shuttle_landmark/home_waypoint
var/cloaked = TRUE
var/returned = FALSE
var/return_warning_cooldown
var/announcer
var/arrival_message
var/departure_message
category = /datum/shuttle/autodock/multi/antag
/datum/shuttle/autodock/multi/antag/New()
..()
if(home_waypoint)
home_waypoint = SSshuttle.get_landmark(home_waypoint)
else
home_waypoint = current_location
/datum/shuttle/autodock/multi/antag/shuttle_moved()
if(current_location == home_waypoint)
announce_arrival()
else if(next_location == home_waypoint)
announce_departure()
..()
/datum/shuttle/autodock/multi/antag/arrived()
if(current_location == home_waypoint)
returned = TRUE
/datum/shuttle/autodock/multi/antag/launch(var/user)
if(returned)
if(user)
to_chat(user, SPAN_WARNING("You don't have enough fuel for another launch!"))
return //Nada, can't go back.
..(user)
/datum/shuttle/autodock/multi/antag/proc/announce_departure()
if(cloaked || isnull(departure_message))
return
command_announcement.Announce(departure_message, announcer || "[current_map.boss_name]")
/datum/shuttle/autodock/multi/antag/proc/announce_arrival()
if(cloaked || isnull(arrival_message))
return
command_announcement.Announce(arrival_message, announcer || "[current_map.boss_name]")