Files
Aurora.3/code/game/objects/structures/machinery/computer/access_terminal.dm
T
BatrachophrenoandGitHub 4ecb0bc21c Repath obj/machinery to obj/structure/machinery [MDB Ignore] (#22500)
Repaths obj/machinery to obj/structure/machinery. **Note for
reviewers:** the only meaningful changed code exists within
**code/game/objects/structures.dm** and
**code/game/objects/structures/_machinery.dm**, largely concerning
damage procs. With the exception of moving airlock defines to their own
file, ALL OTHER CHANGES ARE STRICTLY PATH CHANGES.

Objects, _categorically_, are largely divided between those you can hold
in your hand/inventory and those you can't. Machinery objects are
already subtypes of Structures behaviorally, this PR just makes their
pathing reflect that, and allows for future work (tool actions, more
health/destruction functionality) to be developed without unnecessary
code duplication.

I have tested this PR by loading up the Horizon and dismantling various
machines and structures with tools, shooting guns of various types
throughout the ship, and detonating a bunch of explosions throughout the
ship.
2026-05-26 19:35:48 +00:00

105 lines
3.5 KiB
Plaintext

/// Simple access terminal.
/// Can put an ID in it, and set or unset some accesses.
/// Intended to be used in ooc/admin spaces, like antag/actor prep areas.
ABSTRACT_TYPE(/obj/structure/machinery/computer/access_terminal)
name = "self-service access terminal"
desc = "A simple access terminal. It allows changing one's ID accesses."
icon = 'icons/obj/computer.dmi'
icon_state = "altcomputerw"
light_color = LIGHT_COLOR_BLUE
icon_screen = "guest"
icon_scanline = "altcomputerw-scanline"
density = FALSE
appearance_flags = TILE_BOUND
/// The ID card inserted into the terminal.
var/obj/item/card/id/held_card
/obj/structure/machinery/computer/access_terminal/Destroy()
if (held_card)
held_card.forceMove(loc)
held_card = null
return ..()
/// Should return a list of `/datum/access`.
/obj/structure/machinery/computer/access_terminal/proc/get_available_accesses()
. = list()
/obj/structure/machinery/computer/access_terminal/attackby(obj/item/attacking_item, mob/user)
var/obj/item/card/id/idcard = attacking_item
if(!held_card && istype(idcard))
usr.drop_from_inventory(idcard, user)
held_card = idcard
update_icon()
/obj/structure/machinery/computer/access_terminal/attack_hand(mob/user)
. = ..()
ui_interact(user)
/obj/structure/machinery/computer/access_terminal/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "AccessTerminal", "Self-Service Access Terminal", 550, 650)
ui.open()
/obj/structure/machinery/computer/access_terminal/ui_data(mob/user)
var/list/data = list()
if(!istype(held_card))
return data
var/list/available_access_datums = get_available_accesses()
var/list/available_accesses = list()
for(var/datum/access/access_datum as anything in available_access_datums)
available_accesses += list(list("desc"=access_datum::desc, "id"=access_datum::id))
data["is_card_in"] = TRUE
data["card_name"] = held_card.registered_name
data["card_assignment"] = held_card.assignment
data["card_rank"] = held_card.rank
data["is_agent_id"] = istype(held_card, /obj/item/card/id/syndicate)
data["available_accesses"] = available_accesses // list("desc"="abcd", "id"=123)
data["card_accesses"] = held_card.access // list(123)
return data
/obj/structure/machinery/computer/access_terminal/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
. = ..()
if(.)
return
switch(action)
if("toggle_access")
if(held_card)
held_card.access ^= list(text2num(params["toggle_access"]))
if("insert_id")
if(!held_card)
var/obj/item/I = ui.user.get_active_hand()
if (istype(I, /obj/item/card/id))
ui.user.drop_from_inventory(I,src)
held_card = I
if("eject_id")
if(held_card)
held_card.forceMove(src.loc)
if(!ui.user.get_active_hand())
ui.user.put_in_hands(held_card)
held_card = null
// ------------------------- subtypes
/// Odyssey subtype, that gets available accesses from the current odyssey scenario.
/obj/structure/machinery/computer/access_terminal/odyssey
name = "self-service actor access terminal"
/// Returns a list of paths of type `/datum/access/`.
/obj/structure/machinery/computer/access_terminal/odyssey/get_available_accesses()
. = SSodyssey.scenario.actor_accesses
/// Static access subtype, to be subtyped further while overriding the var, or to be mapped in with accesses.
/obj/structure/machinery/computer/access_terminal/static_access
var/list/datum/access/available_accesses = list()
/obj/structure/machinery/computer/access_terminal/static_access/get_available_accesses()
. = available_accesses