/
githubmirror
/
vgstation13
Обзор
Документация
Войти
/
githubmirror
/
vgstation13
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
Bleeding-Edge
code/modules/power/rust/core_control.dm
202 строки
6 KB
Code-Alpha777
R-UST Mk.VII Mod. 1 (#37983)
22 июл 2025, 10:25
Не верифицирован
22 июл 2025, 10:25
c352a9d
Код
Авторство
О чём код?
/obj/machinery/computer/rust_core_control name = "R-UST Mk. 7 Core Control" icon = 'icons/obj/machines/rust.dmi' icon_state = "core_control" light_color = LIGHT_COLOR_ORANGE var/list/connected_devices = list() var/scan_range = 25 circuit = /obj/item/weapon/circuitboard/rust_core_control //currently viewed var/obj/machinery/power/rust_core/cur_viewed_device /obj/machinery/computer/rust_core_control/attack_hand(mob/user) . = ..() if(.) if(user.machine == src) user.unset_machine(src) return interact(user) /obj/machinery/computer/rust_core_control/interact(mob/user) var/dat = "" if(!cur_viewed_device || !check_core_status(cur_viewed_device)) cur_viewed_device = null if(cur_viewed_device) dat += {" <a href='?src=\ref[src];goto_scanlist=1'>Back to overview</a><hr> <b>Device tag:</b> [cur_viewed_device.id_tag]<br> <span style='color: [cur_viewed_device.attempt_activate ? "green" : "red"]'>Device [cur_viewed_device.attempt_activate ? "activated" : "deactivated"].</span><br> <a href='?src=\ref[src];toggle_active=1'>[cur_viewed_device.attempt_activate ? "Shut down" : "Boot up"] field</a><br> <hr> <b>Field encumbrance:</b> [cur_viewed_device.owned_field ? 0 : "N/A"]<br> <b>Field power density (W.m<sup>-3</sup>):</b><br> <a href='?src=\ref[src];str=-1000'>----</a> <a href='?src=\ref[src];str=-100'>--- </a> <a href='?src=\ref[src];str=-10'>-- </a> <a href='?src=\ref[src];str=-1'>- </a> <a href='?src=\ref[src];str=0'>[cur_viewed_device.targeted_field_strength]</a> <a href='?src=\ref[src];str=1'>+ </a> <a href='?src=\ref[src];str=10'>++ </a> <a href='?src=\ref[src];str=100'>+++ </a> <a href='?src=\ref[src];str=1000'>++++</a><hr> "} dat += {" <b>Field frequency (MHz):</b><br> <a href='?src=\ref[src];freq=-1000'>----</a> <a href='?src=\ref[src];freq=-100'>--- </a> <a href='?src=\ref[src];freq=-10'>-- </a> <a href='?src=\ref[src];freq=-1'>- </a> <a href='?src=\ref[src];freq=0'>[cur_viewed_device.field_frequency]</a> <a href='?src=\ref[src];freq=1'>+ </a> <a href='?src=\ref[src];freq=10'>++ </a> <a href='?src=\ref[src];freq=100'>+++ </a> <a href='?src=\ref[src];freq=1000'>++++</a><br> <hr> "} else if(connected_devices.len) dat += {" <b>Connected R-UST Mk. 7 Tokamak pattern Electromagnetic Field Generators:</b><hr> <table> <tr> <th><b>Device tag</b></th> <th><b>Status</b></th> <th><b>Controls</b></th> </tr> "} for(var/obj/machinery/power/rust_core/C in connected_devices) var/status var/can_access = 1 if(!check_core_status(C)) status = "<span style='color: red'>Unresponsive</span>" can_access = 0 else if(C.surplus() + round(C.get_satisfaction() * C.last_power_request) < C.active_power_usage) status = "<span style='color: orange'>Underpowered</span>" else status = "<span style='color: green'>Good</span>" dat += {" <tr> <td>[C.id_tag]</td> <td>[status]</td> "} if(!can_access) dat += {" <td><span style='color: red'>ERROR</span></td> "} else dat += {" <td><a href=?src=\ref[src];access_device=[connected_devices.Find(C)]'>ACCESS</a></td> "} dat += {" </tr> "} else dat += "<span style='color: red'>No R-UST Mk. 7 Tokamak pattern Electromagnetic Field Generators connected.</span>" var/datum/browser/popup = new(user, "rust_control", name, 500, 400, src) popup.set_content(dat) popup.open() user.set_machine(src) /obj/machinery/computer/rust_core_control/Topic(href, href_list) . = ..() if(.) return if(href_list["access_device"]) var/idx = clamp(text2num(href_list["access_device"]), 1, connected_devices.len) cur_viewed_device = connected_devices[idx] updateUsrDialog() return 1 if(!cur_viewed_device || !check_core_status(cur_viewed_device)) //All HREFs from this point on require a device anyways. return if(href_list["goto_scanlist"]) cur_viewed_device = null updateUsrDialog() return 1 if(href_list["toggle_active"]) if(!cur_viewed_device.Startup()) //Startup() whilst the device is active will return null. cur_viewed_device.Shutdown() updateUsrDialog() return 1 if(href_list["str"]) var/val = text2num(href_list["str"]) if(!val) //Value is 0, which is manual entering. cur_viewed_device.set_targeted_strength(input("Enter the new field power density (W.m^-3)", "R-UST Mk. 7 Tokamak Controls", cur_viewed_device.targeted_field_strength) as num) else cur_viewed_device.set_targeted_strength(cur_viewed_device.targeted_field_strength + val) updateUsrDialog() return 1 if(href_list["freq"]) var/val = text2num(href_list["freq"]) if(!val) //Value is 0, which is manual entering. cur_viewed_device.set_frequency(input("Enter the new field frequency (MHz)", "R-UST Mk. 7 Tokamak Controls", cur_viewed_device.field_frequency) as num) else cur_viewed_device.set_frequency(cur_viewed_device.field_frequency + val) updateUsrDialog() return 1 //Returns 1 if the machine can be interacted with via this console. /obj/machinery/computer/rust_core_control/proc/check_core_status(var/obj/machinery/power/rust_core/C) if(isnull(C)) return if(C.stat & BROKEN) return if(C.state != 2) return if(!C.powered) return . = 1 //Multitool menu shit starts here. //It's all . because . is faster than return, thanks BYOND. /obj/machinery/computer/rust_core_control/multitool_menu(var/mob/user, var/obj/item/device/multitool/P) . = "Linked R-UST Tokamak cores:<br><lu>" for(var/obj/machinery/power/rust_core/C in connected_devices) . += "<li><b>[C.id_tag]</b> <a href='?src=\ref[src];unlink=[connected_devices.Find(C)]'>\[X\]</a></li>" . += "</ul>" /obj/machinery/computer/rust_core_control/linkMenu(var/obj/machinery/power/rust_core/O) if(istype(O)) . = "<a href='?src=\ref[src];link=1'>\[LINK\]</a> " /obj/machinery/computer/rust_core_control/canLink(var/obj/machinery/power/rust_core/O, var/list/context) . = (istype(O) && get_dist(src, O) < scan_range) /obj/machinery/computer/rust_core_control/isLinkedWith(var/obj/O) . = (O in connected_devices) /obj/machinery/computer/rust_core_control/linkWith(var/mob/user, var/obj/machinery/power/rust_core/O, var/list/context) connected_devices += O . = 1 /obj/machinery/computer/rust_core_control/getLink(var/idx) if(idx <= connected_devices.len) . = connected_devices[idx] /obj/machinery/computer/rust_core_control/unlinkFrom(var/mob/user, var/obj/buffer) connected_devices -= buffer . = 1