Add nav console modular program and fix crew mon bug

This commit is contained in:
Aronai Sieyes
2020-04-12 22:52:57 -04:00
parent d3d38d9a55
commit 4e0a62996b
17 changed files with 169 additions and 18 deletions

View File

@@ -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"

View File

@@ -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

View File

@@ -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"

View File

@@ -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, "<span class='warning'>The crew monitor doesn't seem like it'll work here.</span>")
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

View File

@@ -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, "<span class='warning'>You don't appear to be on a spaceship...</span>")
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

View File

@@ -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