diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index 9342e0b5e9..077c12c451 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -8,7 +8,7 @@ idle_power_usage = 250 active_power_usage = 500 circuit = /obj/item/weapon/circuitboard/crew - var/datum/nano_module/crew_monitor/crew_monitor + var/datum/nano_module/program/crew_monitor/crew_monitor /obj/machinery/computer/crew/New() crew_monitor = new(src) diff --git a/code/modules/clothing/glasses/hud_vr.dm b/code/modules/clothing/glasses/hud_vr.dm index 3dd1f0fbaf..44082e8606 100644 --- a/code/modules/clothing/glasses/hud_vr.dm +++ b/code/modules/clothing/glasses/hud_vr.dm @@ -71,7 +71,7 @@ These have been upgraded with medical records access and virus database integration." mode = "med" action_button_name = "AR Console (Crew Monitor)" - arscreen_path = /datum/nano_module/crew_monitor + arscreen_path = /datum/nano_module/program/crew_monitor enables_planes = list(VIS_CH_ID,VIS_CH_HEALTH_VR,VIS_CH_STATUS_R,VIS_CH_BACKUP,VIS_AUGMENTED) ar_interact(var/mob/living/carbon/human/user) diff --git a/code/modules/mob/living/silicon/subystems.dm b/code/modules/mob/living/silicon/subystems.dm index ac10167c2d..b03ab5eeb2 100644 --- a/code/modules/mob/living/silicon/subystems.dm +++ b/code/modules/mob/living/silicon/subystems.dm @@ -2,7 +2,7 @@ var/register_alarms = 1 var/datum/nano_module/alarm_monitor/all/alarm_monitor var/datum/nano_module/atmos_control/atmos_control - var/datum/nano_module/crew_monitor/crew_monitor + var/datum/nano_module/program/crew_monitor/crew_monitor var/datum/nano_module/law_manager/law_manager var/datum/nano_module/power_monitor/power_monitor var/datum/nano_module/rcon/rcon diff --git a/code/modules/modular_computers/computers/subtypes/dev_console.dm b/code/modules/modular_computers/computers/subtypes/dev_console.dm index 32f24b6001..d7dbeed75d 100644 --- a/code/modules/modular_computers/computers/subtypes/dev_console.dm +++ b/code/modules/modular_computers/computers/subtypes/dev_console.dm @@ -1,7 +1,7 @@ /obj/item/modular_computer/console name = "console" desc = "A stationary computer." - icon = 'icons/obj/modular_console_vr.dmi' //VOREStation Edit + icon = 'icons/obj/modular_console.dmi' icon_state = "console" icon_state_unpowered = "console" icon_state_screensaver = "standby" diff --git a/code/modules/modular_computers/computers/subtypes/dev_laptop.dm b/code/modules/modular_computers/computers/subtypes/dev_laptop.dm index 846759c8ad..156d67525b 100644 --- a/code/modules/modular_computers/computers/subtypes/dev_laptop.dm +++ b/code/modules/modular_computers/computers/subtypes/dev_laptop.dm @@ -4,7 +4,7 @@ desc = "A portable computer." hardware_flag = PROGRAM_LAPTOP icon_state_unpowered = "laptop-open" - icon = 'icons/obj/modular_laptop_vr.dmi' //VOREStation Edit + icon = 'icons/obj/modular_laptop.dmi' icon_state = "laptop-open" icon_state_screensaver = "standby" base_idle_power_usage = 25 diff --git a/code/modules/modular_computers/computers/subtypes/preset_tablet_vr.dm b/code/modules/modular_computers/computers/subtypes/preset_tablet_vr.dm index 3bbc7a396b..9a87928618 100644 --- a/code/modules/modular_computers/computers/subtypes/preset_tablet_vr.dm +++ b/code/modules/modular_computers/computers/subtypes/preset_tablet_vr.dm @@ -1,7 +1,7 @@ /obj/item/modular_computer/tablet/preset/custom_loadout/rugged name = "rugged tablet computer" desc = "A rugged tablet computer." - icon = 'icons/obj/modular_tablet_vr.dmi' + icon = 'icons/obj/modular_tablet.dmi' icon_state = "rugged" icon_state_unpowered = "rugged" max_damage = 300 @@ -19,7 +19,7 @@ /obj/item/modular_computer/tablet/preset/custom_loadout/elite name = "elite tablet computer" desc = "A more expensive tablet computer." - icon = 'icons/obj/modular_tablet_vr.dmi' + icon = 'icons/obj/modular_tablet.dmi' icon_state = "elite" icon_state_unpowered = "elite" @@ -37,7 +37,7 @@ /obj/item/modular_computer/tablet/preset/custom_loadout/hybrid name = "hybrid tablet computer" desc = "A human/alien hybrid tech tablet computer." - icon = 'icons/obj/modular_tablet_vr.dmi' + icon = 'icons/obj/modular_tablet.dmi' icon_state = "hybrid" icon_state_unpowered = "hybrid" diff --git a/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm b/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm index bf8fe50909..2b25951926 100644 --- a/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm +++ b/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm @@ -1,7 +1,7 @@ /datum/computer_file/program/suit_sensors filename = "sensormonitor" filedesc = "Suit Sensors Monitoring" - nanomodule_path = /datum/nano_module/crew_monitor + nanomodule_path = /datum/nano_module/program/crew_monitor program_icon_state = "crew" program_key_state = "med_key" program_menu_icon = "heart" @@ -12,13 +12,10 @@ size = 11 - - - -/datum/nano_module/crew_monitor +/datum/nano_module/program/crew_monitor name = "Crew monitor" -/datum/nano_module/crew_monitor/Topic(href, href_list) +/datum/nano_module/program/crew_monitor/Topic(href, href_list) if(..()) return 1 var/turf/T = get_turf(nano_host()) // TODO: Allow setting any using_map.contact_levels from the interface. if (!T || !(T.z in using_map.player_levels)) @@ -32,7 +29,7 @@ AI.ai_actual_track(H) return 1 -/datum/nano_module/crew_monitor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state) +/datum/nano_module/program/crew_monitor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state) var/list/data = host.initial_data() data["isAI"] = isAI(user) @@ -47,7 +44,9 @@ if(!data["map_levels"].len) to_chat(user, "The crew monitor doesn't seem like it'll work here.") - if(ui) + if(program) + program.kill_program() + else if(ui) ui.close() return @@ -68,7 +67,7 @@ // should make the UI auto-update; doesn't seem to? ui.set_auto_update(1) -/*/datum/nano_module/crew_monitor/proc/scan() +/*/datum/nano_module/program/crew_monitor/proc/scan() for(var/mob/living/carbon/human/H in mob_list) if(istype(H.w_uniform, /obj/item/clothing/under)) var/obj/item/clothing/under/C = H.w_uniform diff --git a/code/modules/modular_computers/file_system/programs/ships/navigation.dm b/code/modules/modular_computers/file_system/programs/ships/navigation.dm new file mode 100644 index 0000000000..dbe7aed5de --- /dev/null +++ b/code/modules/modular_computers/file_system/programs/ships/navigation.dm @@ -0,0 +1,63 @@ +/datum/computer_file/program/ship_nav + filename = "navviewer" + filedesc = "Ship Navigational Screen" + nanomodule_path = /datum/nano_module/program/ship/nav + program_icon_state = "helm" + program_key_state = "generic_key" + program_menu_icon = "search" + extended_desc = "Displays a ship's location in the sector." + required_access = null + requires_ntnet = 1 + network_destination = "ship position sensors" + size = 4 + +/datum/nano_module/program/ship/nav + name = "Navigation Display" + +/datum/nano_module/program/ship/nav/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state) + if(!linked) + to_chat(user, "You don't appear to be on a spaceship...") + if(program) + program.kill_program() + else if(ui) + ui.close() + return + + var/list/data = list() + if(program) + data = program.get_header_data() + + var/turf/T = get_turf(linked) + var/obj/effect/overmap/visitable/sector/current_sector = locate() in T + + data["sector"] = current_sector ? current_sector.name : "Deep Space" + data["sector_info"] = current_sector ? current_sector.desc : "Not Available" + data["s_x"] = linked.x + data["s_y"] = linked.y + data["speed"] = round(linked.get_speed()*1000, 0.01) + data["accel"] = round(linked.get_acceleration()*1000, 0.01) + data["heading"] = linked.get_heading_degrees() + data["viewing"] = viewing_overmap(user) + + if(linked.get_speed()) + data["ETAnext"] = "[round(linked.ETA()/10)] seconds" + else + data["ETAnext"] = "N/A" + + ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) + if (!ui) + ui = new(user, src, ui_key, "nav.tmpl", "[linked.name] Navigation Screen", 380, 530, state = state) + ui.set_initial_data(data) + ui.open() + ui.set_auto_update(1) + +/datum/nano_module/program/ship/nav/OnTopic(var/mob/user, var/list/href_list) + if(..()) + return TOPIC_HANDLED + + if (!linked) + return TOPIC_NOACTION + + if (href_list["viewing"]) + viewing_overmap(user) ? unlook(user) : look(user) + return TOPIC_REFRESH diff --git a/code/modules/modular_computers/file_system/programs/ships/ship.dm b/code/modules/modular_computers/file_system/programs/ships/ship.dm new file mode 100644 index 0000000000..1db653153b --- /dev/null +++ b/code/modules/modular_computers/file_system/programs/ships/ship.dm @@ -0,0 +1,87 @@ +/datum/nano_module/program/ship + var/obj/effect/overmap/visitable/ship/linked + var/list/viewers + var/extra_view = 0 + +/datum/nano_module/program/ship/New() + ..() + sync_linked() + if(linked) + name = "[linked.name] [name]" + +/datum/nano_module/program/ship/Destroy() + if(LAZYLEN(viewers)) + for(var/weakref/W in viewers) + var/M = W.resolve() + if(M) + unlook(M) + . = ..() + +/datum/nano_module/program/ship/proc/sync_linked() + var/obj/effect/overmap/visitable/ship/sector = get_overmap_sector(get_z(nano_host())) + if(!sector) + return + return attempt_hook_up_recursive(sector) + +/datum/nano_module/program/ship/proc/attempt_hook_up_recursive(obj/effect/overmap/visitable/ship/sector) + if(attempt_hook_up(sector)) + return sector + for(var/obj/effect/overmap/visitable/ship/candidate in sector) + if((. = .(candidate))) + return + +/datum/nano_module/program/ship/proc/attempt_hook_up(obj/effect/overmap/visitable/ship/sector) + if(!istype(sector)) + return + if(sector.check_ownership(nano_host())) + linked = sector + return 1 + +/datum/nano_module/program/ship/proc/look(var/mob/user) + if(linked) + user.machine = nano_host() + user.reset_view(linked) + user.set_viewsize(world.view + extra_view) + GLOB.moved_event.register(user, src, /datum/nano_module/program/ship/proc/unlook) + LAZYDISTINCTADD(viewers, weakref(user)) + +/datum/nano_module/program/ship/proc/unlook(var/mob/user) + user.reset_view() + user.set_viewsize() // reset to default + GLOB.moved_event.unregister(user, src, /datum/nano_module/program/ship/proc/unlook) + LAZYREMOVE(viewers, weakref(user)) + +/datum/nano_module/program/ship/proc/viewing_overmap(mob/user) + return (weakref(user) in viewers) + +/datum/nano_module/program/ship/proc/DefaultTopicState() + return global.default_state + +/datum/nano_module/program/ship/Topic(var/href, var/href_list = list(), var/datum/topic_state/state) + if((. = ..())) + return + state = state || DefaultTopicState() || global.default_state + if(CanUseTopic(usr, state, href_list) == STATUS_INTERACTIVE) + CouldUseTopic(usr) + return OnTopic(usr, href_list, state) + CouldNotUseTopic(usr) + return TRUE + +/datum/nano_module/program/ship/proc/OnTopic(var/mob/user, var/href_list, var/datum/topic_state/state) + return TOPIC_NOACTION + +/datum/nano_module/program/ship/proc/CouldNotUseTopic(mob/user) + . = ..() + unlook(user) + +/datum/nano_module/program/ship/proc/CouldUseTopic(mob/user) + . = ..() + if(viewing_overmap(user)) + look(user) + +/datum/nano_module/program/ship/check_eye(var/mob/user) + if (!get_dist(user, nano_host()) > 1 || user.blinded || !linked ) + unlook(user) + return -1 + else + return 0 \ No newline at end of file diff --git a/code/modules/overmap/sectors.dm b/code/modules/overmap/sectors.dm index f437874609..9c3408eabf 100644 --- a/code/modules/overmap/sectors.dm +++ b/code/modules/overmap/sectors.dm @@ -82,7 +82,7 @@ //Helper for init. /obj/effect/overmap/visitable/proc/check_ownership(obj/object) - if((object.z in map_z) && !(get_area(object) in SSshuttles.shuttle_areas)) + if((get_z(object) in map_z) && !(get_area(object) in SSshuttles.shuttle_areas)) return 1 //If shuttle_name is false, will add to generic waypoints; otherwise will add to restricted. Does not do checks. diff --git a/icons/obj/modular_console.dmi b/icons/obj/modular_console.dmi index 125711410d..544f7341d1 100644 Binary files a/icons/obj/modular_console.dmi and b/icons/obj/modular_console.dmi differ diff --git a/icons/obj/modular_console_vr.dmi b/icons/obj/modular_console_vr.dmi deleted file mode 100644 index 125711410d..0000000000 Binary files a/icons/obj/modular_console_vr.dmi and /dev/null differ diff --git a/icons/obj/modular_laptop.dmi b/icons/obj/modular_laptop.dmi index 4294fa4370..d4d750630d 100644 Binary files a/icons/obj/modular_laptop.dmi and b/icons/obj/modular_laptop.dmi differ diff --git a/icons/obj/modular_laptop_vr.dmi b/icons/obj/modular_laptop_vr.dmi deleted file mode 100644 index 4294fa4370..0000000000 Binary files a/icons/obj/modular_laptop_vr.dmi and /dev/null differ diff --git a/icons/obj/modular_tablet.dmi b/icons/obj/modular_tablet.dmi index 33ca98c940..d15ebc0cdc 100644 Binary files a/icons/obj/modular_tablet.dmi and b/icons/obj/modular_tablet.dmi differ diff --git a/icons/obj/modular_tablet_vr.dmi b/icons/obj/modular_tablet_vr.dmi deleted file mode 100644 index 33ca98c940..0000000000 Binary files a/icons/obj/modular_tablet_vr.dmi and /dev/null differ diff --git a/vorestation.dme b/vorestation.dme index 248ecf5688..f7e97cc339 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -2781,6 +2781,8 @@ #include "code\modules\modular_computers\file_system\programs\research\ntmonitor.dm" #include "code\modules\modular_computers\file_system\programs\security\alarm_monitor.dm" #include "code\modules\modular_computers\file_system\programs\security\digitalwarrant.dm" +#include "code\modules\modular_computers\file_system\programs\ships\navigation.dm" +#include "code\modules\modular_computers\file_system\programs\ships\ship.dm" #include "code\modules\modular_computers\hardware\_hardware.dm" #include "code\modules\modular_computers\hardware\battery_module.dm" #include "code\modules\modular_computers\hardware\card_slot.dm"