mirror of
https://github.com/CHOMPstation/CHOMPstation.git
synced 2026-08-26 13:36:48 +01:00
Merge pull request #4209 from Faerdan/dev
Updated how NanoUI renders templates, using JSRender without the JSViews data-linking.
This commit is contained in:
@@ -296,7 +296,7 @@ datum/controller/game_controller/proc/process_nano()
|
||||
var/i = 1
|
||||
while(i<=nanomanager.processing_uis.len)
|
||||
var/datum/nanoui/ui = nanomanager.processing_uis[i]
|
||||
if(ui && ui.src_object && ui.user)
|
||||
if(ui)
|
||||
ui.process()
|
||||
i++
|
||||
continue
|
||||
|
||||
@@ -84,18 +84,7 @@
|
||||
data["hasOccupant"] = occupant ? 1 : 0
|
||||
|
||||
var/occupantData[0]
|
||||
if (!occupant)
|
||||
occupantData["name"] = null
|
||||
occupantData["stat"] = null
|
||||
occupantData["health"] = null
|
||||
occupantData["maxHealth"] = null
|
||||
occupantData["minHealth"] = null
|
||||
occupantData["bruteLoss"] = null
|
||||
occupantData["oxyLoss"] = null
|
||||
occupantData["toxLoss"] = null
|
||||
occupantData["fireLoss"] = null
|
||||
occupantData["bodyTemperature"] = null
|
||||
else
|
||||
if (occupant)
|
||||
occupantData["name"] = occupant.name
|
||||
occupantData["stat"] = occupant.stat
|
||||
occupantData["health"] = occupant.health
|
||||
|
||||
@@ -356,14 +356,13 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
data["idInserted"] = (id ? 1 : 0)
|
||||
data["idLink"] = (id ? text("[id.registered_name], [id.assignment]") : "--------")
|
||||
|
||||
|
||||
data["cartridge"] = null
|
||||
data["records"] = null
|
||||
if(cartridge)
|
||||
var/cartdata[0]
|
||||
|
||||
|
||||
data["records"] = cartridge.create_NanoUI_values()
|
||||
|
||||
|
||||
cartdata["name"] = cartridge.name
|
||||
cartdata["access"] = list(\
|
||||
"access_security" = cartridge.access_security,\
|
||||
@@ -392,15 +391,10 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
cartdata["type"] = cartridge.type
|
||||
cartdata["charges"] = cartridge.charges ? cartridge.charges : 0
|
||||
data["cartridge"] = cartdata
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
data["stationTime"] = worldtime2text()
|
||||
data["newMessage"] = newmessage
|
||||
|
||||
|
||||
|
||||
|
||||
var/convopdas[0]
|
||||
var/pdas[0]
|
||||
@@ -521,264 +515,260 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
//if ((src in U.contents) || ( istype(loc, /turf) && in_range(src, U) ) )
|
||||
if (usr.stat == DEAD)
|
||||
return 0
|
||||
if(can_use()) //Why reinvent the wheel? There's a proc that does exactly that.
|
||||
|
||||
add_fingerprint(U)
|
||||
U.set_machine(src)
|
||||
|
||||
switch(href_list["choice"])
|
||||
if(!can_use()) //Why reinvent the wheel? There's a proc that does exactly that.
|
||||
U.unset_machine()
|
||||
ui.close()
|
||||
return 0
|
||||
|
||||
add_fingerprint(U)
|
||||
U.set_machine(src)
|
||||
|
||||
switch(href_list["choice"])
|
||||
|
||||
//BASIC FUNCTIONS===================================
|
||||
|
||||
if("Close")//Self explanatory
|
||||
U.unset_machine()
|
||||
ui.close()
|
||||
return
|
||||
if("Refresh")//Refresh, goes to the end of the proc.
|
||||
if("Return")//Return
|
||||
if(mode<=9)
|
||||
if("Close")//Self explanatory
|
||||
U.unset_machine()
|
||||
ui.close()
|
||||
return 0
|
||||
if("Refresh")//Refresh, goes to the end of the proc.
|
||||
if("Return")//Return
|
||||
if(mode<=9)
|
||||
mode = 0
|
||||
else
|
||||
mode = round(mode/10)
|
||||
if(mode==2)
|
||||
active_conversation = null
|
||||
if(mode==4)//Fix for cartridges. Redirects to hub.
|
||||
mode = 0
|
||||
else
|
||||
mode = round(mode/10)
|
||||
if(mode==2)
|
||||
active_conversation = null
|
||||
if(mode==4)//Fix for cartridges. Redirects to hub.
|
||||
mode = 0
|
||||
else if(mode >= 40 && mode <= 49)//Fix for cartridges. Redirects to refresh the menu.
|
||||
cartridge.mode = mode
|
||||
if ("Authenticate")//Checks for ID
|
||||
id_check(U, 1)
|
||||
if("UpdateInfo")
|
||||
ownjob = id.assignment
|
||||
name = "PDA-[owner] ([ownjob])"
|
||||
if("Eject")//Ejects the cart, only done from hub.
|
||||
if (!isnull(cartridge))
|
||||
var/turf/T = loc
|
||||
if(ismob(T))
|
||||
T = T.loc
|
||||
cartridge.loc = T
|
||||
ui.close()
|
||||
mode = 0
|
||||
scanmode = 0
|
||||
if (cartridge.radio)
|
||||
cartridge.radio.hostpda = null
|
||||
cartridge = null
|
||||
else if(mode >= 40 && mode <= 49)//Fix for cartridges. Redirects to refresh the menu.
|
||||
cartridge.mode = mode
|
||||
if ("Authenticate")//Checks for ID
|
||||
id_check(U, 1)
|
||||
if("UpdateInfo")
|
||||
ownjob = id.assignment
|
||||
name = "PDA-[owner] ([ownjob])"
|
||||
if("Eject")//Ejects the cart, only done from hub.
|
||||
if (!isnull(cartridge))
|
||||
var/turf/T = loc
|
||||
if(ismob(T))
|
||||
T = T.loc
|
||||
cartridge.loc = T
|
||||
mode = 0
|
||||
scanmode = 0
|
||||
if (cartridge.radio)
|
||||
cartridge.radio.hostpda = null
|
||||
cartridge = null
|
||||
|
||||
//MENU FUNCTIONS===================================
|
||||
|
||||
if("0")//Hub
|
||||
mode = 0
|
||||
if("1")//Notes
|
||||
mode = 1
|
||||
if("2")//Messenger
|
||||
mode = 2
|
||||
if("21")//Read messeges
|
||||
mode = 21
|
||||
if("3")//Atmos scan
|
||||
mode = 3
|
||||
if("4")//Redirects to hub
|
||||
mode = 0
|
||||
if("chatroom") // chatroom hub
|
||||
mode = 5
|
||||
if("41") //Manifest
|
||||
mode = 41
|
||||
if("0")//Hub
|
||||
mode = 0
|
||||
if("1")//Notes
|
||||
mode = 1
|
||||
if("2")//Messenger
|
||||
mode = 2
|
||||
if("21")//Read messeges
|
||||
mode = 21
|
||||
if("3")//Atmos scan
|
||||
mode = 3
|
||||
if("4")//Redirects to hub
|
||||
mode = 0
|
||||
if("chatroom") // chatroom hub
|
||||
mode = 5
|
||||
if("41") //Manifest
|
||||
mode = 41
|
||||
|
||||
|
||||
//MAIN FUNCTIONS===================================
|
||||
|
||||
if("Light")
|
||||
if(fon)
|
||||
fon = 0
|
||||
if(src in U.contents) U.SetLuminosity(U.luminosity - f_lum)
|
||||
else SetLuminosity(0)
|
||||
else
|
||||
fon = 1
|
||||
if(src in U.contents) U.SetLuminosity(U.luminosity + f_lum)
|
||||
else SetLuminosity(f_lum)
|
||||
if("Medical Scan")
|
||||
if(scanmode == 1)
|
||||
scanmode = 0
|
||||
else if((!isnull(cartridge)) && (cartridge.access_medical))
|
||||
scanmode = 1
|
||||
if("Reagent Scan")
|
||||
if(scanmode == 3)
|
||||
scanmode = 0
|
||||
else if((!isnull(cartridge)) && (cartridge.access_reagent_scanner))
|
||||
scanmode = 3
|
||||
if("Halogen Counter")
|
||||
if(scanmode == 4)
|
||||
scanmode = 0
|
||||
else if((!isnull(cartridge)) && (cartridge.access_engine))
|
||||
scanmode = 4
|
||||
if("Honk")
|
||||
if ( !(last_honk && world.time < last_honk + 20) )
|
||||
playsound(loc, 'sound/items/bikehorn.ogg', 50, 1)
|
||||
last_honk = world.time
|
||||
if("Gas Scan")
|
||||
if(scanmode == 5)
|
||||
scanmode = 0
|
||||
else if((!isnull(cartridge)) && (cartridge.access_atmos))
|
||||
scanmode = 5
|
||||
if("Light")
|
||||
if(fon)
|
||||
fon = 0
|
||||
if(src in U.contents) U.SetLuminosity(U.luminosity - f_lum)
|
||||
else SetLuminosity(0)
|
||||
else
|
||||
fon = 1
|
||||
if(src in U.contents) U.SetLuminosity(U.luminosity + f_lum)
|
||||
else SetLuminosity(f_lum)
|
||||
if("Medical Scan")
|
||||
if(scanmode == 1)
|
||||
scanmode = 0
|
||||
else if((!isnull(cartridge)) && (cartridge.access_medical))
|
||||
scanmode = 1
|
||||
if("Reagent Scan")
|
||||
if(scanmode == 3)
|
||||
scanmode = 0
|
||||
else if((!isnull(cartridge)) && (cartridge.access_reagent_scanner))
|
||||
scanmode = 3
|
||||
if("Halogen Counter")
|
||||
if(scanmode == 4)
|
||||
scanmode = 0
|
||||
else if((!isnull(cartridge)) && (cartridge.access_engine))
|
||||
scanmode = 4
|
||||
if("Honk")
|
||||
if ( !(last_honk && world.time < last_honk + 20) )
|
||||
playsound(loc, 'sound/items/bikehorn.ogg', 50, 1)
|
||||
last_honk = world.time
|
||||
if("Gas Scan")
|
||||
if(scanmode == 5)
|
||||
scanmode = 0
|
||||
else if((!isnull(cartridge)) && (cartridge.access_atmos))
|
||||
scanmode = 5
|
||||
|
||||
//MESSENGER/NOTE FUNCTIONS===================================
|
||||
|
||||
if ("Edit")
|
||||
var/n = input(U, "Please enter message", name, notehtml) as message
|
||||
if (in_range(src, U) && loc == U)
|
||||
n = copytext(adminscrub(n), 1, MAX_MESSAGE_LEN)
|
||||
if (mode == 1)
|
||||
note = html_decode(n)
|
||||
notehtml = note
|
||||
note = replacetext(note, "\n", "<br>")
|
||||
if ("Edit")
|
||||
var/n = input(U, "Please enter message", name, notehtml) as message
|
||||
if (in_range(src, U) && loc == U)
|
||||
n = copytext(adminscrub(n), 1, MAX_MESSAGE_LEN)
|
||||
if (mode == 1)
|
||||
note = html_decode(n)
|
||||
notehtml = note
|
||||
note = replacetext(note, "\n", "<br>")
|
||||
else
|
||||
ui.close()
|
||||
if("Toggle Messenger")
|
||||
toff = !toff
|
||||
if("Toggle Ringer")//If viewing texts then erase them, if not then toggle silent status
|
||||
silent = !silent
|
||||
if("Clear")//Clears messages
|
||||
if(href_list["option"] == "All")
|
||||
tnote.Cut()
|
||||
conversations.Cut()
|
||||
if(href_list["option"] == "Convo")
|
||||
var/new_tnote[0]
|
||||
for(var/i in tnote)
|
||||
if(i["target"] != active_conversation)
|
||||
new_tnote[++new_tnote.len] = i
|
||||
tnote = new_tnote
|
||||
conversations.Remove(active_conversation)
|
||||
|
||||
active_conversation = null
|
||||
if(mode==21)
|
||||
mode=2
|
||||
|
||||
if("Ringtone")
|
||||
var/t = input(U, "Please enter new ringtone", name, ttone) as text
|
||||
if (in_range(src, U) && loc == U)
|
||||
if (t)
|
||||
if(src.hidden_uplink && hidden_uplink.check_trigger(U, lowertext(t), lowertext(lock_code)))
|
||||
U << "The PDA softly beeps."
|
||||
ui.close()
|
||||
else
|
||||
t = copytext(sanitize(t), 1, 20)
|
||||
ttone = t
|
||||
else
|
||||
ui.close()
|
||||
return 0
|
||||
if("Message")
|
||||
|
||||
var/obj/item/device/pda/P = locate(href_list["target"])
|
||||
src.create_message(U, P)
|
||||
if(mode == 2)
|
||||
if(href_list["target"] in conversations) // Need to make sure the message went through, if not welp.
|
||||
active_conversation = href_list["target"]
|
||||
mode = 21
|
||||
|
||||
if("Select Conversation")
|
||||
var/P = href_list["convo"]
|
||||
for(var/n in conversations)
|
||||
if(P == n)
|
||||
active_conversation=P
|
||||
mode=21
|
||||
if("Send Honk")//Honk virus
|
||||
if(istype(cartridge, /obj/item/weapon/cartridge/clown))//Cartridge checks are kind of unnecessary since everything is done through switch.
|
||||
var/obj/item/device/pda/P = locate(href_list["target"])//Leaving it alone in case it may do something useful, I guess.
|
||||
if(!isnull(P))
|
||||
if (!P.toff && cartridge.charges > 0)
|
||||
cartridge.charges--
|
||||
U.show_message("\blue Virus sent!", 1)
|
||||
P.honkamt = (rand(15,20))
|
||||
else
|
||||
ui.close()
|
||||
if("Toggle Messenger")
|
||||
toff = !toff
|
||||
if("Toggle Ringer")//If viewing texts then erase them, if not then toggle silent status
|
||||
silent = !silent
|
||||
if("Clear")//Clears messages
|
||||
if(href_list["option"] == "All")
|
||||
tnote.Cut()
|
||||
conversations.Cut()
|
||||
if(href_list["option"] == "Convo")
|
||||
var/new_tnote[0]
|
||||
for(var/i in tnote)
|
||||
if(i["target"] != active_conversation)
|
||||
new_tnote[++new_tnote.len] = i
|
||||
tnote = new_tnote
|
||||
conversations.Remove(active_conversation)
|
||||
|
||||
active_conversation = null
|
||||
if(mode==21)
|
||||
mode=2
|
||||
|
||||
if("Ringtone")
|
||||
var/t = input(U, "Please enter new ringtone", name, ttone) as text
|
||||
if (in_range(src, U) && loc == U)
|
||||
if (t)
|
||||
if(src.hidden_uplink && hidden_uplink.check_trigger(U, lowertext(t), lowertext(lock_code)))
|
||||
U << "The PDA softly beeps."
|
||||
ui.close()
|
||||
else
|
||||
t = copytext(sanitize(t), 1, 20)
|
||||
ttone = t
|
||||
else
|
||||
ui.close()
|
||||
return
|
||||
if("Message")
|
||||
|
||||
U << "PDA not found."
|
||||
else
|
||||
ui.close()
|
||||
return 0
|
||||
if("Send Silence")//Silent virus
|
||||
if(istype(cartridge, /obj/item/weapon/cartridge/mime))
|
||||
var/obj/item/device/pda/P = locate(href_list["target"])
|
||||
src.create_message(U, P)
|
||||
if(mode == 2)
|
||||
if(href_list["target"] in conversations) // Need to make sure the message went through, if not welp.
|
||||
active_conversation = href_list["target"]
|
||||
mode = 21
|
||||
|
||||
if("Select Conversation")
|
||||
var/P = href_list["convo"]
|
||||
for(var/n in conversations)
|
||||
if(P == n)
|
||||
active_conversation=P
|
||||
mode=21
|
||||
if("Send Honk")//Honk virus
|
||||
if(istype(cartridge, /obj/item/weapon/cartridge/clown))//Cartridge checks are kind of unnecessary since everything is done through switch.
|
||||
var/obj/item/device/pda/P = locate(href_list["target"])//Leaving it alone in case it may do something useful, I guess.
|
||||
if(!isnull(P))
|
||||
if (!P.toff && cartridge.charges > 0)
|
||||
cartridge.charges--
|
||||
U.show_message("\blue Virus sent!", 1)
|
||||
P.honkamt = (rand(15,20))
|
||||
else
|
||||
U << "PDA not found."
|
||||
if(!isnull(P))
|
||||
if (!P.toff && cartridge.charges > 0)
|
||||
cartridge.charges--
|
||||
U.show_message("\blue Virus sent!", 1)
|
||||
P.silent = 1
|
||||
P.ttone = "silence"
|
||||
else
|
||||
ui.close()
|
||||
return
|
||||
if("Send Silence")//Silent virus
|
||||
if(istype(cartridge, /obj/item/weapon/cartridge/mime))
|
||||
var/obj/item/device/pda/P = locate(href_list["target"])
|
||||
if(!isnull(P))
|
||||
if (!P.toff && cartridge.charges > 0)
|
||||
cartridge.charges--
|
||||
U.show_message("\blue Virus sent!", 1)
|
||||
P.silent = 1
|
||||
P.ttone = "silence"
|
||||
else
|
||||
U << "PDA not found."
|
||||
else
|
||||
ui.close()
|
||||
return
|
||||
U << "PDA not found."
|
||||
else
|
||||
ui.close()
|
||||
return 0
|
||||
|
||||
|
||||
//SYNDICATE FUNCTIONS===================================
|
||||
|
||||
if("Toggle Door")
|
||||
if(cartridge && cartridge.access_remote_door)
|
||||
for(var/obj/machinery/door/poddoor/M in world)
|
||||
if(M.id == cartridge.remote_door_id)
|
||||
if(M.density)
|
||||
M.open()
|
||||
else
|
||||
M.close()
|
||||
if("Toggle Door")
|
||||
if(cartridge && cartridge.access_remote_door)
|
||||
for(var/obj/machinery/door/poddoor/M in world)
|
||||
if(M.id == cartridge.remote_door_id)
|
||||
if(M.density)
|
||||
M.open()
|
||||
else
|
||||
M.close()
|
||||
|
||||
if("Detonate")//Detonate PDA
|
||||
if(istype(cartridge, /obj/item/weapon/cartridge/syndicate))
|
||||
var/obj/item/device/pda/P = locate(href_list["target"])
|
||||
if(!isnull(P))
|
||||
if (!P.toff && cartridge.charges > 0)
|
||||
cartridge.charges--
|
||||
if("Detonate")//Detonate PDA
|
||||
if(istype(cartridge, /obj/item/weapon/cartridge/syndicate))
|
||||
var/obj/item/device/pda/P = locate(href_list["target"])
|
||||
if(!isnull(P))
|
||||
if (!P.toff && cartridge.charges > 0)
|
||||
cartridge.charges--
|
||||
|
||||
var/difficulty = 0
|
||||
var/difficulty = 0
|
||||
|
||||
if(P.cartridge)
|
||||
difficulty += P.cartridge.access_medical
|
||||
difficulty += P.cartridge.access_security
|
||||
difficulty += P.cartridge.access_engine
|
||||
difficulty += P.cartridge.access_clown
|
||||
difficulty += P.cartridge.access_janitor
|
||||
else
|
||||
difficulty += 2
|
||||
if(P.cartridge)
|
||||
difficulty += P.cartridge.access_medical
|
||||
difficulty += P.cartridge.access_security
|
||||
difficulty += P.cartridge.access_engine
|
||||
difficulty += P.cartridge.access_clown
|
||||
difficulty += P.cartridge.access_janitor
|
||||
else
|
||||
difficulty += 2
|
||||
|
||||
if(prob(difficulty * 12) || (P.hidden_uplink))
|
||||
U.show_message("\red An error flashes on your [src].", 1)
|
||||
else if (prob(difficulty * 3))
|
||||
U.show_message("\red Energy feeds back into your [src]!", 1)
|
||||
ui.close()
|
||||
explode()
|
||||
log_admin("[key_name(U)] just attempted to blow up [P] with the Detomatix cartridge but failed, blowing themselves up")
|
||||
message_admins("[key_name_admin(U)] just attempted to blow up [P] with the Detomatix cartridge but failed, blowing themselves up", 1)
|
||||
else
|
||||
U.show_message("\blue Success!", 1)
|
||||
log_admin("[key_name(U)] just attempted to blow up [P] with the Detomatix cartridge and succeded")
|
||||
message_admins("[key_name_admin(U)] just attempted to blow up [P] with the Detomatix cartridge and succeded", 1)
|
||||
P.explode()
|
||||
else
|
||||
U << "PDA not found."
|
||||
if(prob(difficulty * 12) || (P.hidden_uplink))
|
||||
U.show_message("\red An error flashes on your [src].", 1)
|
||||
else if (prob(difficulty * 3))
|
||||
U.show_message("\red Energy feeds back into your [src]!", 1)
|
||||
ui.close()
|
||||
explode()
|
||||
log_admin("[key_name(U)] just attempted to blow up [P] with the Detomatix cartridge but failed, blowing themselves up")
|
||||
message_admins("[key_name_admin(U)] just attempted to blow up [P] with the Detomatix cartridge but failed, blowing themselves up", 1)
|
||||
else
|
||||
U.show_message("\blue Success!", 1)
|
||||
log_admin("[key_name(U)] just attempted to blow up [P] with the Detomatix cartridge and succeded")
|
||||
message_admins("[key_name_admin(U)] just attempted to blow up [P] with the Detomatix cartridge and succeded", 1)
|
||||
P.explode()
|
||||
else
|
||||
U.unset_machine()
|
||||
ui.close()
|
||||
return
|
||||
U << "PDA not found."
|
||||
else
|
||||
U.unset_machine()
|
||||
ui.close()
|
||||
return 0
|
||||
|
||||
//pAI FUNCTIONS===================================
|
||||
if("pai")
|
||||
switch(href_list["option"])
|
||||
if("1") // Configure pAI device
|
||||
pai.attack_self(U)
|
||||
if("2") // Eject pAI device
|
||||
var/turf/T = get_turf_or_move(src.loc)
|
||||
if(T)
|
||||
pai.loc = T
|
||||
pai = null
|
||||
if("pai")
|
||||
switch(href_list["option"])
|
||||
if("1") // Configure pAI device
|
||||
pai.attack_self(U)
|
||||
if("2") // Eject pAI device
|
||||
var/turf/T = get_turf_or_move(src.loc)
|
||||
if(T)
|
||||
pai.loc = T
|
||||
pai = null
|
||||
|
||||
else
|
||||
mode = text2num(href_list["choice"])
|
||||
if(cartridge)
|
||||
cartridge.mode = mode
|
||||
|
||||
|
||||
else//If not in range or not using the pda.
|
||||
U.unset_machine()
|
||||
ui.close()
|
||||
return
|
||||
else
|
||||
mode = text2num(href_list["choice"])
|
||||
if(cartridge)
|
||||
cartridge.mode = mode
|
||||
|
||||
//EXTRA FUNCTIONS===================================
|
||||
|
||||
@@ -790,7 +780,6 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
honkamt--
|
||||
playsound(loc, 'sound/items/bikehorn.ogg', 30, 1)
|
||||
|
||||
src.updateUsrDialog()
|
||||
return 1 // return 1 tells it to refresh the UI in NanoUI
|
||||
|
||||
/obj/item/device/pda/proc/remove_id()
|
||||
@@ -960,15 +949,13 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
/obj/item/device/pda/attackby(obj/item/C as obj, mob/user as mob)
|
||||
..()
|
||||
if(istype(C, /obj/item/weapon/cartridge) && !cartridge)
|
||||
var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, "main")
|
||||
cartridge = C
|
||||
user.drop_item()
|
||||
cartridge.loc = src
|
||||
user << "<span class='notice'>You insert [cartridge] into [src].</span>"
|
||||
nanomanager.update_uis(src) // update all UIs attached to src
|
||||
if(cartridge.radio)
|
||||
cartridge.radio.hostpda = src
|
||||
if(ui)
|
||||
ui.close()
|
||||
cartridge.radio.hostpda = src
|
||||
|
||||
else if(istype(C, /obj/item/weapon/card/id))
|
||||
var/obj/item/weapon/card/id/idcard = C
|
||||
@@ -994,7 +981,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
C.loc = src
|
||||
pai = C
|
||||
user << "<span class='notice'>You slot \the [C] into [src].</span>"
|
||||
updateUsrDialog()
|
||||
nanomanager.update_uis(src) // update all UIs attached to src
|
||||
else if(istype(C, /obj/item/weapon/pen))
|
||||
var/obj/item/weapon/pen/O = locate() in src
|
||||
if(O)
|
||||
|
||||
@@ -417,6 +417,10 @@ nanoui is used to open and update nano browser uis
|
||||
* @return nothing
|
||||
*/
|
||||
/datum/nanoui/proc/process(update = 0)
|
||||
if (!src_object || !user)
|
||||
close()
|
||||
return
|
||||
|
||||
if (status && (update || is_auto_updating))
|
||||
src_object.ui_interact(user, ui_key, src) // Update the UI (update_status() is called whenever a UI is updated)
|
||||
else
|
||||
|
||||
Vendored
+1
-31
File diff suppressed because one or more lines are too long
+969
-601
File diff suppressed because it is too large
Load Diff
+24
-41
@@ -71,9 +71,9 @@ NanoUpdate = function ()
|
||||
// We store initialData and templateData in the body tag, it's as good a place as any
|
||||
var body = $('body');
|
||||
var templateData = body.data('templateData');
|
||||
_data = body.data('initialData');
|
||||
var initialData = body.data('initialData');
|
||||
|
||||
if (!templateData || !_data)
|
||||
if (!templateData || !initialData)
|
||||
{
|
||||
alert('Error: Initial data did not load correctly.');
|
||||
}
|
||||
@@ -88,36 +88,40 @@ NanoUpdate = function ()
|
||||
}
|
||||
}
|
||||
|
||||
// load each template file and render it using _data
|
||||
// load markup for each template and register it
|
||||
for (var key in templateData)
|
||||
{
|
||||
if (templateData.hasOwnProperty(key))
|
||||
{
|
||||
$.when($.get(templateData[key]))
|
||||
.done(function(templateData) {
|
||||
.done(function(templateMarkup) {
|
||||
if (_templates == null)
|
||||
{
|
||||
_templates = {};
|
||||
}
|
||||
|
||||
templateData += '<div class="clearBoth"></div>'
|
||||
templateMarkup = templateMarkup.replace(/ +\) *\}\}/g, ')}}');
|
||||
|
||||
templateMarkup += '<div class="clearBoth"></div>'
|
||||
|
||||
try
|
||||
{
|
||||
_templates[key] = $.templates(templateData);
|
||||
_templates[key].link( "#mainTemplate", _data ); // initial data gets applied first, before any updates
|
||||
_templates[key] = $.templates(key, templateMarkup);
|
||||
|
||||
templateCount--;
|
||||
|
||||
if (templateCount <= 0)
|
||||
{
|
||||
if (_earlyUpdateData !== null) // Newer data has already arrived, so update
|
||||
{
|
||||
renderTemplates(_earlyUpdateData);
|
||||
}
|
||||
else
|
||||
{
|
||||
renderTemplates(initialData);
|
||||
}
|
||||
_isInitialised = true;
|
||||
}
|
||||
|
||||
if (_earlyUpdateData !== null) // Newer data has already arrived, so update
|
||||
{
|
||||
observedDataUpdateRecursive(_earlyUpdateData, _data);
|
||||
}
|
||||
|
||||
executeCallbacks(_afterUpdateCallbacks, _data);
|
||||
|
||||
@@ -149,50 +153,29 @@ NanoUpdate = function ()
|
||||
}
|
||||
|
||||
|
||||
if (_isInitialised) // templates have been loaded and are observing the data. We need to update it recursively
|
||||
if (_isInitialised) // all templates have been registered, so render them
|
||||
{
|
||||
executeCallbacks(_beforeUpdateCallbacks, updateData);
|
||||
|
||||
observedDataUpdateRecursive(updateData, _data);
|
||||
renderTemplates(updateData);
|
||||
|
||||
executeCallbacks(_afterUpdateCallbacks, updateData);
|
||||
}
|
||||
else
|
||||
{
|
||||
_earlyUpdateData = updateData; // templates have not been loaded, therefor they are not observing the data. We set _earlyUpdateData which will be applied after the template is loaded with the initial data
|
||||
_earlyUpdateData = updateData; // all templates have not been registered. We set _earlyUpdateData which will be applied after the template is loaded with the initial data
|
||||
}
|
||||
}
|
||||
|
||||
// This function updates the observed data recursively
|
||||
// This function renders the template with the latest data
|
||||
// It has to be done recursively as each piece of data is observed individually and needs to be updated individually
|
||||
var observedDataUpdateRecursive = function (updateData, data, path)
|
||||
var renderTemplates = function (data)
|
||||
{
|
||||
if (path === null || typeof path === 'undefined')
|
||||
{
|
||||
path = '';
|
||||
}
|
||||
else
|
||||
{
|
||||
path += '.';
|
||||
}
|
||||
for (var key in updateData)
|
||||
{
|
||||
if (updateData.hasOwnProperty(key))
|
||||
{
|
||||
var currentPath = path + key;
|
||||
if (updateData[key] != null && typeof updateData[key] === 'object' && !$.isArray(updateData[key]))
|
||||
{
|
||||
observedDataUpdateRecursive(updateData[key], data, currentPath)
|
||||
}
|
||||
else
|
||||
{
|
||||
$.observable(data).setProperty(currentPath, updateData[key]);
|
||||
}
|
||||
}
|
||||
}
|
||||
_data = data;
|
||||
$("#mainTemplate").html(_templates["main"].render(_data));
|
||||
}
|
||||
|
||||
// execute all callbacks in the callbacks array/object provided, updateData is passed to them for processing
|
||||
// Execute all callbacks in the callbacks array/object provided, updateData is passed to them for processing
|
||||
var executeCallbacks = function (callbacks, updateData)
|
||||
{
|
||||
for (var index in callbacks)
|
||||
|
||||
@@ -7,7 +7,7 @@ Used In File(s): \code\modules\reagents\Chemistry-Machinery.dm
|
||||
Energy:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{^{:~displayBar(energy, 0, maxEnergy, 'good', energy + ' Units')}}
|
||||
{{:~displayBar(energy, 0, maxEnergy, 'good', energy + ' Units')}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -16,17 +16,17 @@ Used In File(s): \code\modules\reagents\Chemistry-Machinery.dm
|
||||
Dispense:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{^{:~link('5', 'gear', {'amount' : 5}, (amount == 5) ? 'selected' : null)}}
|
||||
{^{:~link('10', 'gear', {'amount' : 10}, (amount == 10) ? 'selected' : null)}}
|
||||
{^{:~link('20', 'gear', {'amount' : 20}, (amount == 20) ? 'selected' : null)}}
|
||||
{^{:~link('30', 'gear', {'amount' : 30}, (amount == 30) ? 'selected' : null)}}
|
||||
{^{:~link('50', 'gear', {'amount' : 50}, (amount == 50) ? 'selected' : null)}}
|
||||
{{:~link('5', 'gear', {'amount' : 5}, (amount == 5) ? 'selected' : null)}}
|
||||
{{:~link('10', 'gear', {'amount' : 10}, (amount == 10) ? 'selected' : null)}}
|
||||
{{:~link('20', 'gear', {'amount' : 20}, (amount == 20) ? 'selected' : null)}}
|
||||
{{:~link('30', 'gear', {'amount' : 30}, (amount == 30) ? 'selected' : null)}}
|
||||
{{:~link('50', 'gear', {'amount' : 50}, (amount == 50) ? 'selected' : null)}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="item"> </div>
|
||||
<div class="item">
|
||||
<div class="itemLabel" style="width: 100%;">
|
||||
{^{if glass}}
|
||||
{{if glass}}
|
||||
Drink Dispenser
|
||||
{{else}}
|
||||
Chemical Dispenser
|
||||
@@ -35,8 +35,8 @@ Used In File(s): \code\modules\reagents\Chemistry-Machinery.dm
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemContentWide" style="width: 100%;">
|
||||
{^{for chemicals}}
|
||||
{^{:~link(title, 'circle-arrow-s', commands, null, ~root.glass ? 'fixedLeftWide' : 'fixedLeft' )}}
|
||||
{{for chemicals}}
|
||||
{{:~link(title, 'circle-arrow-s', commands, null, ~root.glass ? 'fixedLeftWide' : 'fixedLeft')}}
|
||||
{{/for}}
|
||||
|
||||
</div>
|
||||
@@ -44,26 +44,26 @@ Used In File(s): \code\modules\reagents\Chemistry-Machinery.dm
|
||||
<div class="item"> </div>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
{^{if glass}}
|
||||
{{if glass}}
|
||||
Glass
|
||||
{{else}}
|
||||
Beaker
|
||||
{{/if}} Contents
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{^{:~link(glass ? 'Eject Glass' : 'Eject Beaker', 'eject', {'ejectBeaker' : 1}, isBeakerLoaded ? null : 'disabled', 'floatRight')}}
|
||||
{{:~link(glass ? 'Eject Glass' : 'Eject Beaker', 'eject', {'ejectBeaker' : 1}, isBeakerLoaded ? null : 'disabled', 'floatRight')}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="statusDisplay" style="height: 225px; overflow: auto;">
|
||||
<div class="item">
|
||||
<div class="itemContent" style="width: 100%;">
|
||||
{^{if isBeakerLoaded}}
|
||||
<b>Volume: {^{:beakerCurrentVolume}} / {^{:beakerMaxVolume}}</b><br>
|
||||
{^{for beakerContents}}
|
||||
<span class="highlight">{^{:volume}} units of {^{:name}}</span><br>
|
||||
{{if isBeakerLoaded}}
|
||||
<b>Volume: {{:beakerCurrentVolume}} / {{:beakerMaxVolume}}</b><br>
|
||||
{{for beakerContents}}
|
||||
<span class="highlight">{{:volume}} units of {{:name}}</span><br>
|
||||
{{else}}
|
||||
<span class="bad">
|
||||
{^{if glass}}
|
||||
{{if glass}}
|
||||
Glass
|
||||
{{else}}
|
||||
Beaker
|
||||
@@ -72,7 +72,7 @@ Used In File(s): \code\modules\reagents\Chemistry-Machinery.dm
|
||||
{{/for}}
|
||||
{{else}}
|
||||
<span class="average"><i>No
|
||||
{^{if glass}}
|
||||
{{if glass}}
|
||||
Glass
|
||||
{{else}}
|
||||
Beaker
|
||||
|
||||
+24
-24
@@ -5,12 +5,12 @@ Used In File(s): \code\game\machinery\cryo.dm
|
||||
<h3>Cryo Cell Status</h3>
|
||||
|
||||
<div class="statusDisplay">
|
||||
{^{if !hasOccupant}}
|
||||
{{if !hasOccupant}}
|
||||
<div class="line">Cell Unoccupied</div>
|
||||
{{else}}
|
||||
<div class="line">
|
||||
{^{:occupant.name}} =>
|
||||
{^{if occupant.stat == 0}}
|
||||
{{:occupant.name}} =>
|
||||
{{if occupant.stat == 0}}
|
||||
<span class="good">Conscious</span>
|
||||
{{else occupant.stat == 1}}
|
||||
<span class="average">Unconscious</span>
|
||||
@@ -19,45 +19,45 @@ Used In File(s): \code\game\machinery\cryo.dm
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{^{if occupant.stat < 2}}
|
||||
{{if occupant.stat < 2}}
|
||||
<div class="line">
|
||||
<div class="statusLabel">Health:</div>
|
||||
{^{if occupant.health >= 0}}
|
||||
{^{:~displayBar(occupant.health, 0, occupant.maxHealth, 'good')}}
|
||||
{{if occupant.health >= 0}}
|
||||
{{:~displayBar(occupant.health, 0, occupant.maxHealth, 'good')}}
|
||||
{{else}}
|
||||
{^{:~displayBar(occupant.health, 0, occupant.minHealth, 'average alignRight')}}
|
||||
{{:~displayBar(occupant.health, 0, occupant.minHealth, 'average alignRight')}}
|
||||
{{/if}}
|
||||
<div class="statusValue">{^{:~round(occupant.health)}}</div>
|
||||
<div class="statusValue">{{:~round(occupant.health)}}</div>
|
||||
</div>
|
||||
|
||||
<div class="line">
|
||||
<div class="statusLabel">=> Brute Damage:</div>
|
||||
{^{:~displayBar(occupant.bruteLoss, 0, occupant.maxHealth, 'bad')}}
|
||||
<div class="statusValue">{^{:~round(occupant.bruteLoss)}}</div>
|
||||
{{:~displayBar(occupant.bruteLoss, 0, occupant.maxHealth, 'bad')}}
|
||||
<div class="statusValue">{{:~round(occupant.bruteLoss)}}</div>
|
||||
</div>
|
||||
|
||||
<div class="line">
|
||||
<div class="statusLabel">=> Resp. Damage:</div>
|
||||
{^{:~displayBar(occupant.oxyLoss, 0, occupant.maxHealth, 'bad')}}
|
||||
<div class="statusValue">{^{:~round(occupant.oxyLoss)}}</div>
|
||||
{{:~displayBar(occupant.oxyLoss, 0, occupant.maxHealth, 'bad')}}
|
||||
<div class="statusValue">{{:~round(occupant.oxyLoss)}}</div>
|
||||
</div>
|
||||
|
||||
<div class="line">
|
||||
<div class="statusLabel">=> Toxin Damage:</div>
|
||||
{^{:~displayBar(occupant.toxLoss, 0, occupant.maxHealth, 'bad')}}
|
||||
<div class="statusValue">{^{:~round(occupant.toxLoss)}}</div>
|
||||
{{:~displayBar(occupant.toxLoss, 0, occupant.maxHealth, 'bad')}}
|
||||
<div class="statusValue">{{:~round(occupant.toxLoss)}}</div>
|
||||
</div>
|
||||
|
||||
<div class="line">
|
||||
<div class="statusLabel">=> Burn Severity:</div>
|
||||
{^{:~displayBar(occupant.fireLoss, 0, occupant.maxHealth, 'bad')}}
|
||||
<div class="statusValue">{^{:~round(occupant.fireLoss)}}</div>
|
||||
{{:~displayBar(occupant.fireLoss, 0, occupant.maxHealth, 'bad')}}
|
||||
<div class="statusValue">{{:~round(occupant.fireLoss)}}</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
<hr>
|
||||
<div class="line"><div class="statusLabel">Cell Temperature:</div><div class="statusValue">
|
||||
{^{:~string('<span class="{0}">{1} K</span>', cellTemperatureStatus, cellTemperature)}}
|
||||
{{:~string('<span class="{0}">{1} K</span>', cellTemperatureStatus, cellTemperature)}}
|
||||
</div></div>
|
||||
</div>
|
||||
|
||||
@@ -67,10 +67,10 @@ Used In File(s): \code\game\machinery\cryo.dm
|
||||
Cryo Cell Status:
|
||||
</div>
|
||||
<div class="itemContent" style="width: 40%;">
|
||||
{^{:~link('On', 'power', {'switchOn' : 1}, isOperating ? 'selected' : null)}}{^{:~link('Off', 'close', {'switchOff' : 1}, isOperating ? null : 'selected')}}
|
||||
{{:~link('On', 'power', {'switchOn' : 1}, isOperating ? 'selected' : null)}}{{:~link('Off', 'close', {'switchOff' : 1}, isOperating ? null : 'selected')}}
|
||||
</div>
|
||||
<div class="itemContent" style="width: 26%;">
|
||||
{^{:~link('Eject Occupant', 'arrowreturnthick-1-s', {'ejectOccupant' : 1}, hasOccupant ? null : 'disabled')}}
|
||||
{{:~link('Eject Occupant', 'arrowreturnthick-1-s', {'ejectOccupant' : 1}, hasOccupant ? null : 'disabled')}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="item"> </div>
|
||||
@@ -79,10 +79,10 @@ Used In File(s): \code\game\machinery\cryo.dm
|
||||
Beaker:
|
||||
</div>
|
||||
<div class="itemContent" style="width: 40%;">
|
||||
{^{if isBeakerLoaded}}
|
||||
{^{:beakerLabel ? beakerLabel : '<span class="average">No label</span>'}}<br>
|
||||
{^{if beakerVolume}}
|
||||
<span class="highlight">{^{:beakerVolume}} units remaining</span><br>
|
||||
{{if isBeakerLoaded}}
|
||||
{{:beakerLabel ? beakerLabel : '<span class="average">No label</span>'}}<br>
|
||||
{{if beakerVolume}}
|
||||
<span class="highlight">{{:beakerVolume}} units remaining</span><br>
|
||||
{{else}}
|
||||
<span class="bad">Beaker is empty</span>
|
||||
{{/if}}
|
||||
@@ -91,6 +91,6 @@ Used In File(s): \code\game\machinery\cryo.dm
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="itemContent" style="width: 26%;">
|
||||
{^{:~link('Eject Beaker', 'eject', {'ejectBeaker' : 1}, isBeakerLoaded ? null : 'disabled')}}
|
||||
{{:~link('Eject Beaker', 'eject', {'ejectBeaker' : 1}, isBeakerLoaded ? null : 'disabled')}}
|
||||
</div>
|
||||
</div>
|
||||
@@ -5,12 +5,12 @@ Used In File(s): D:\Development\SS13-BS12\code\game\dna\dna_modifier.dm
|
||||
<h3>Status</h3>
|
||||
|
||||
<div class="statusDisplay">
|
||||
{^{if !hasOccupant}}
|
||||
{{if !hasOccupant}}
|
||||
<div class="line">Cell Unoccupied</div>
|
||||
{{else}}
|
||||
<div class="line">
|
||||
{^{:occupant.name}} =>
|
||||
{^{if occupant.stat == 0}}
|
||||
{{:occupant.name}} =>
|
||||
{{if occupant.stat == 0}}
|
||||
<span class="good">Conscious</span>
|
||||
{{else occupant.stat == 1}}
|
||||
<span class="average">Unconscious</span>
|
||||
@@ -19,40 +19,40 @@ Used In File(s): D:\Development\SS13-BS12\code\game\dna\dna_modifier.dm
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{^{if !occupant.isViableSubject || !occupant.uniqueIdentity || !occupant.structuralEnzymes}}
|
||||
{{if !occupant.isViableSubject || !occupant.uniqueIdentity || !occupant.structuralEnzymes}}
|
||||
<div class="notice">
|
||||
The occupant's DNA structure is ruined beyond recognition, please insert a subject with an intact DNA structure.
|
||||
</div>
|
||||
{{else occupant.stat < 2}}
|
||||
<div class="line">
|
||||
<div class="statusLabel">Health:</div>
|
||||
{^{if occupant.health >= 0}}
|
||||
{^{:~displayBar(occupant.health, 0, occupant.maxHealth, 'good')}}
|
||||
{{if occupant.health >= 0}}
|
||||
{{:~displayBar(occupant.health, 0, occupant.maxHealth, 'good')}}
|
||||
{{else}}
|
||||
{^{:~displayBar(occupant.health, 0, occupant.minHealth, 'average alignRight')}}
|
||||
{{:~displayBar(occupant.health, 0, occupant.minHealth, 'average alignRight')}}
|
||||
{{/if}}
|
||||
<div class="statusValue">{^{:~round(occupant.health)}}</div>
|
||||
<div class="statusValue">{{:~round(occupant.health)}}</div>
|
||||
</div>
|
||||
|
||||
<div class="line">
|
||||
<div class="statusLabel">Radiation:</div>
|
||||
{^{:~displayBar(occupant.radiationLevel, 0, 100, 'average')}}
|
||||
<div class="statusValue">{^{:~round(occupant.radiationLevel)}}</div>
|
||||
{{:~displayBar(occupant.radiationLevel, 0, 100, 'average')}}
|
||||
<div class="statusValue">{{:~round(occupant.radiationLevel)}}</div>
|
||||
</div>
|
||||
|
||||
<div class="line">
|
||||
<div class="statusLabel">Unique Enzymes:</div>
|
||||
<div class="statusValue">{^{:occupant.uniqueEnzymes ? occupant.uniqueEnzymes : '<span class="bad">Unknown</span>'}}</div>
|
||||
<div class="statusValue">{{:occupant.uniqueEnzymes ? occupant.uniqueEnzymes : '<span class="bad">Unknown</span>'}}</div>
|
||||
</div>
|
||||
|
||||
<!--<div class="line">
|
||||
<div class="statusLabel"><small>Unique Identifier:</small></div>
|
||||
<div class="statusValue"><small>{^{:occupant.uniqueIdentity}}</small></div>
|
||||
<div class="statusValue"><small>{{:occupant.uniqueIdentity}}</small></div>
|
||||
</div>
|
||||
|
||||
<div class="line">
|
||||
<div class="statusLabel"><small>Structural Enzymes:</small></div>
|
||||
<div class="statusValue"><small>{^{:occupant.structuralEnzymes}}</small></div>
|
||||
<div class="statusValue"><small>{{:occupant.structuralEnzymes}}</small></div>
|
||||
</div>-->
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
@@ -61,45 +61,45 @@ Used In File(s): D:\Development\SS13-BS12\code\game\dna\dna_modifier.dm
|
||||
|
||||
<h3>Operations</h3>
|
||||
<div class="item">
|
||||
{^{:~link('Modify U.I.', 'link', {'selectMenuKey' : 'ui'}, selectedMenuKey == 'ui' ? 'selected' : null)}}
|
||||
{^{:~link('Modify S.E.', 'link', {'selectMenuKey' : 'se'}, selectedMenuKey == 'se' ? 'selected' : null)}}
|
||||
{^{:~link('Transfer Buffers', 'disk', {'selectMenuKey' : 'buffer'}, selectedMenuKey == 'buffer' ? 'selected' : null)}}
|
||||
{^{:~link('Rejuvenators', 'plusthick', {'selectMenuKey' : 'rejuvenators'}, selectedMenuKey == 'rejuvenators' ? 'selected' : null)}}
|
||||
{{:~link('Modify U.I.', 'link', {'selectMenuKey' : 'ui'}, selectedMenuKey == 'ui' ? 'selected' : null)}}
|
||||
{{:~link('Modify S.E.', 'link', {'selectMenuKey' : 'se'}, selectedMenuKey == 'se' ? 'selected' : null)}}
|
||||
{{:~link('Transfer Buffers', 'disk', {'selectMenuKey' : 'buffer'}, selectedMenuKey == 'buffer' ? 'selected' : null)}}
|
||||
{{:~link('Rejuvenators', 'plusthick', {'selectMenuKey' : 'rejuvenators'}, selectedMenuKey == 'rejuvenators' ? 'selected' : null)}}
|
||||
</div>
|
||||
|
||||
<div class="item"> </div>
|
||||
|
||||
{^{if !selectedMenuKey || selectedMenuKey == 'ui'}}
|
||||
{{if !selectedMenuKey || selectedMenuKey == 'ui'}}
|
||||
<h3>Modify Unique Identifier</h3>
|
||||
{^{:~displayDNABlocks(occupant.uniqueIdentity, selectedUIBlock, selectedUISubBlock, dnaBlockSize, 'UI')}}
|
||||
{{:~displayDNABlocks(occupant.uniqueIdentity, selectedUIBlock, selectedUISubBlock, dnaBlockSize, 'UI')}}
|
||||
<div class="clearBoth"></div>
|
||||
<div class="item">
|
||||
<div class="itemLabelNarrow">
|
||||
Target:
|
||||
</div>
|
||||
<div class="itemContentWide">
|
||||
{^{:~link('-', null, {'changeUITarget' : 0}, selectedUITarget > 0 ? null : 'disabled')}}
|
||||
<div class="statusValue"> {^{:selectedUITargetHex}} </div>
|
||||
{^{:~link('+', null, {'changeUITarget' : 1}, selectedUITarget < 15 ? null : 'disabled')}}
|
||||
{{:~link('-', null, {'changeUITarget' : 0}, selectedUITarget > 0 ? null : 'disabled')}}
|
||||
<div class="statusValue"> {{:selectedUITargetHex}} </div>
|
||||
{{:~link('+', null, {'changeUITarget' : 1}, selectedUITarget < 15 ? null : 'disabled')}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemContentWide">
|
||||
{^{:~link('Irradiate Block', 'radiation', {'pulseUIRadiation' : 1}, !occupant.isViableSubject ? 'disabled' : null)}}
|
||||
{{:~link('Irradiate Block', 'radiation', {'pulseUIRadiation' : 1}, !occupant.isViableSubject ? 'disabled' : null)}}
|
||||
</div>
|
||||
</div>
|
||||
{{else selectedMenuKey == 'se'}}
|
||||
<h3>Modify Structural Enzymes</h3>
|
||||
{^{:~displayDNABlocks(occupant.structuralEnzymes, selectedSEBlock, selectedSESubBlock, dnaBlockSize, 'SE')}}
|
||||
{{:~displayDNABlocks(occupant.structuralEnzymes, selectedSEBlock, selectedSESubBlock, dnaBlockSize, 'SE')}}
|
||||
<div class="clearBoth"></div>
|
||||
<div class="item">
|
||||
<div class="itemContentWide">
|
||||
{^{:~link('Irradiate Block', 'radiation', {'pulseSERadiation' : 1}, !occupant.isViableSubject ? 'disabled' : null)}}
|
||||
{{:~link('Irradiate Block', 'radiation', {'pulseSERadiation' : 1}, !occupant.isViableSubject ? 'disabled' : null)}}
|
||||
</div>
|
||||
</div>
|
||||
{{else selectedMenuKey == 'buffer'}}
|
||||
<h3>Transfer Buffers</h3>
|
||||
{^{for buffers}}
|
||||
{{for buffers}}
|
||||
<h4>Buffer {{:#index + 1}}</h4>
|
||||
<div class="itemGroup">
|
||||
<div class="item">
|
||||
@@ -107,19 +107,19 @@ Used In File(s): D:\Development\SS13-BS12\code\game\dna\dna_modifier.dm
|
||||
Load Data:
|
||||
</div>
|
||||
<div class="itemContentWide">
|
||||
{^{:~link('Subject U.I.', 'link', {'bufferOption' : 'saveUI', 'bufferId' : (#index + 1)}, !~root.hasOccupant ? 'disabled' : null)}}
|
||||
{^{:~link('Subject U.I. + U.E.', 'link', {'bufferOption' : 'saveUIAndUE', 'bufferId' : (#index + 1)}, !~root.hasOccupant ? 'disabled' : null)}}
|
||||
{^{:~link('Subject S.E.', 'link', {'bufferOption' : 'saveSE', 'bufferId' : (#index + 1)}, !~root.hasOccupant ? 'disabled' : null)}}
|
||||
{^{:~link('From Disk', 'disk', {'bufferOption' : 'loadDisk', 'bufferId' : (#index + 1)}, !~root.hasDisk || !~root.disk.data ? 'disabled' : null)}}
|
||||
{{:~link('Subject U.I.', 'link', {'bufferOption' : 'saveUI', 'bufferId' : (#index + 1)}, !~root.hasOccupant ? 'disabled' : null)}}
|
||||
{{:~link('Subject U.I. + U.E.', 'link', {'bufferOption' : 'saveUIAndUE', 'bufferId' : (#index + 1)}, !~root.hasOccupant ? 'disabled' : null)}}
|
||||
{{:~link('Subject S.E.', 'link', {'bufferOption' : 'saveSE', 'bufferId' : (#index + 1)}, !~root.hasOccupant ? 'disabled' : null)}}
|
||||
{{:~link('From Disk', 'disk', {'bufferOption' : 'loadDisk', 'bufferId' : (#index + 1)}, !~root.hasDisk || !~root.disk.data ? 'disabled' : null)}}
|
||||
</div>
|
||||
</div>
|
||||
{^{if data}}
|
||||
{{if data}}
|
||||
<div class="item">
|
||||
<div class="itemLabelNarrow">
|
||||
Label:
|
||||
</div>
|
||||
<div class="itemContentWide">
|
||||
{^{:~link(label, 'document-b', {'bufferOption' : 'changeLabel', 'bufferId' : (#parent.index + 1)})}}
|
||||
{{:~link(label, 'document-b', {'bufferOption' : 'changeLabel', 'bufferId' : (#parent.index + 1)})}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
@@ -127,7 +127,7 @@ Used In File(s): D:\Development\SS13-BS12\code\game\dna\dna_modifier.dm
|
||||
Subject:
|
||||
</div>
|
||||
<div class="itemContentWide">
|
||||
{^{:owner ? owner : '<span class="average">Unknown</span>'}}
|
||||
{{:owner ? owner : '<span class="average">Unknown</span>'}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
@@ -135,8 +135,8 @@ Used In File(s): D:\Development\SS13-BS12\code\game\dna\dna_modifier.dm
|
||||
Stored Data:
|
||||
</div>
|
||||
<div class="itemContentWide">
|
||||
{^{:data == 'ui' ? 'Unique Identifiers' : 'Structural Enzymes'}}
|
||||
{^{:ue ? ' + Unique Enzymes' : ''}}
|
||||
{{:data == 'ui' ? 'Unique Identifiers' : 'Structural Enzymes'}}
|
||||
{{:ue ? ' + Unique Enzymes' : ''}}
|
||||
</div>
|
||||
</div>
|
||||
{{else}}
|
||||
@@ -151,11 +151,11 @@ Used In File(s): D:\Development\SS13-BS12\code\game\dna\dna_modifier.dm
|
||||
Options:
|
||||
</div>
|
||||
<div class="itemContentWide">
|
||||
{^{:~link('Clear', 'trash', {'bufferOption' : 'clear', 'bufferId' : (#index + 1)}, !data ? 'disabled' : null)}}
|
||||
{^{:~link('Injector', ~root.isInjectorReady ? 'pencil' : 'clock', {'bufferOption' : 'createInjector', 'bufferId' : (#index + 1)}, !~root.isInjectorReady || !data ? 'disabled' : null)}}
|
||||
{^{:~link('Block Injector', ~root.isInjectorReady ? 'pencil' : 'clock', {'bufferOption' : 'createInjector', 'bufferId' : (#index + 1), 'createBlockInjector' : 1}, !~root.isInjectorReady || !data ? 'disabled' : null)}}
|
||||
{^{:~link('Transfer', 'radiation', {'bufferOption' : 'transfer', 'bufferId' : (#index + 1)}, !~root.hasOccupant || !data ? 'disabled' : null)}}
|
||||
{^{:~link('Save To Disk', 'disk', {'bufferOption' : 'saveDisk', 'bufferId' : (#index + 1)}, !data || !~root.hasDisk ? 'disabled' : null)}}
|
||||
{{:~link('Clear', 'trash', {'bufferOption' : 'clear', 'bufferId' : (#index + 1)}, !data ? 'disabled' : null)}}
|
||||
{{:~link('Injector', ~root.isInjectorReady ? 'pencil' : 'clock', {'bufferOption' : 'createInjector', 'bufferId' : (#index + 1)}, !~root.isInjectorReady || !data ? 'disabled' : null)}}
|
||||
{{:~link('Block Injector', ~root.isInjectorReady ? 'pencil' : 'clock', {'bufferOption' : 'createInjector', 'bufferId' : (#index + 1), 'createBlockInjector' : 1}, !~root.isInjectorReady || !data ? 'disabled' : null)}}
|
||||
{{:~link('Transfer', 'radiation', {'bufferOption' : 'transfer', 'bufferId' : (#index + 1)}, !~root.hasOccupant || !data ? 'disabled' : null)}}
|
||||
{{:~link('Save To Disk', 'disk', {'bufferOption' : 'saveDisk', 'bufferId' : (#index + 1)}, !data || !~root.hasDisk ? 'disabled' : null)}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -163,14 +163,14 @@ Used In File(s): D:\Development\SS13-BS12\code\game\dna\dna_modifier.dm
|
||||
|
||||
<h4>Data Disk</h4>
|
||||
<div class="itemGroup">
|
||||
{^{if hasDisk}}
|
||||
{^{if disk.data}}
|
||||
{{if hasDisk}}
|
||||
{{if disk.data}}
|
||||
<div class="item">
|
||||
<div class="itemLabelNarrow">
|
||||
Label:
|
||||
</div>
|
||||
<div class="itemContentWide">
|
||||
{^{:disk.label ? disk.label : 'No Label'}}
|
||||
{{:disk.label ? disk.label : 'No Label'}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
@@ -178,7 +178,7 @@ Used In File(s): D:\Development\SS13-BS12\code\game\dna\dna_modifier.dm
|
||||
Subject:
|
||||
</div>
|
||||
<div class="itemContentWide">
|
||||
{^{:disk.owner ? disk.owner : '<span class="average">Unknown</span>'}}
|
||||
{{:disk.owner ? disk.owner : '<span class="average">Unknown</span>'}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
@@ -186,8 +186,8 @@ Used In File(s): D:\Development\SS13-BS12\code\game\dna\dna_modifier.dm
|
||||
Stored Data:
|
||||
</div>
|
||||
<div class="itemContentWide">
|
||||
{^{:disk.data == 'ui' ? 'Unique Identifiers' : 'Structural Enzymes'}}
|
||||
{^{:disk.ue ? ' + Unique Enzymes' : ''}}
|
||||
{{:disk.data == 'ui' ? 'Unique Identifiers' : 'Structural Enzymes'}}
|
||||
{{:disk.ue ? ' + Unique Enzymes' : ''}}
|
||||
</div>
|
||||
</div>
|
||||
{{else}}
|
||||
@@ -209,8 +209,8 @@ Used In File(s): D:\Development\SS13-BS12\code\game\dna\dna_modifier.dm
|
||||
Options:
|
||||
</div>
|
||||
<div class="itemContentWide">
|
||||
{^{:~link('Wipe Disk', 'trash', {'bufferOption' : 'wipeDisk'}, !hasDisk || !disk.data ? 'disabled' : null)}}
|
||||
{^{:~link('Eject Disk', 'eject', {'bufferOption' : 'ejectDisk'}, !hasDisk ? 'disabled' : null)}}
|
||||
{{:~link('Wipe Disk', 'trash', {'bufferOption' : 'wipeDisk'}, !hasDisk || !disk.data ? 'disabled' : null)}}
|
||||
{{:~link('Eject Disk', 'eject', {'bufferOption' : 'ejectDisk'}, !hasDisk ? 'disabled' : null)}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -221,11 +221,11 @@ Used In File(s): D:\Development\SS13-BS12\code\game\dna\dna_modifier.dm
|
||||
Inject:
|
||||
</div>
|
||||
<div class="itemContentWide">
|
||||
{^{:~link('5', 'pencil', {'injectRejuvenators' : 5}, !hasOccupant || !beakerVolume ? 'disabled' : null)}}
|
||||
{^{:~link('10', 'pencil', {'injectRejuvenators' : 10}, !hasOccupant || !beakerVolume ? 'disabled' : null)}}
|
||||
{^{:~link('20', 'pencil', {'injectRejuvenators' : 20}, !hasOccupant || !beakerVolume ? 'disabled' : null)}}
|
||||
{^{:~link('30', 'pencil', {'injectRejuvenators' : 30}, !hasOccupant || !beakerVolume ? 'disabled' : null)}}
|
||||
{^{:~link('50', 'pencil', {'injectRejuvenators' : 50}, !hasOccupant || !beakerVolume ? 'disabled' : null)}}
|
||||
{{:~link('5', 'pencil', {'injectRejuvenators' : 5}, !hasOccupant || !beakerVolume ? 'disabled' : null)}}
|
||||
{{:~link('10', 'pencil', {'injectRejuvenators' : 10}, !hasOccupant || !beakerVolume ? 'disabled' : null)}}
|
||||
{{:~link('20', 'pencil', {'injectRejuvenators' : 20}, !hasOccupant || !beakerVolume ? 'disabled' : null)}}
|
||||
{{:~link('30', 'pencil', {'injectRejuvenators' : 30}, !hasOccupant || !beakerVolume ? 'disabled' : null)}}
|
||||
{{:~link('50', 'pencil', {'injectRejuvenators' : 50}, !hasOccupant || !beakerVolume ? 'disabled' : null)}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="item"> </div>
|
||||
@@ -234,10 +234,10 @@ Used In File(s): D:\Development\SS13-BS12\code\game\dna\dna_modifier.dm
|
||||
Beaker:
|
||||
</div>
|
||||
<div class="itemContentWide" style="width: 40%;">
|
||||
{^{if isBeakerLoaded}}
|
||||
{^{:beakerLabel ? beakerLabel : '<span class="average">No label</span>'}}<br>
|
||||
{^{if beakerVolume}}
|
||||
<span class="highlight">{^{:beakerVolume}} units remaining</span><br>
|
||||
{{if isBeakerLoaded}}
|
||||
{{:beakerLabel ? beakerLabel : '<span class="average">No label</span>'}}<br>
|
||||
{{if beakerVolume}}
|
||||
<span class="highlight">{{:beakerVolume}} units remaining</span><br>
|
||||
{{else}}
|
||||
<span class="bad">Beaker is empty</span>
|
||||
{{/if}}
|
||||
@@ -246,23 +246,23 @@ Used In File(s): D:\Development\SS13-BS12\code\game\dna\dna_modifier.dm
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="itemContentWide" style="width: 26%;">
|
||||
{^{:~link('Eject Beaker', 'eject', {'ejectBeaker' : 1}, isBeakerLoaded ? null : 'disabled')}}
|
||||
{{:~link('Eject Beaker', 'eject', {'ejectBeaker' : 1}, isBeakerLoaded ? null : 'disabled')}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div class="item"> </div>
|
||||
|
||||
{^{if !selectedMenuKey || selectedMenuKey == 'ui' || selectedMenuKey == 'se'}}
|
||||
{{if !selectedMenuKey || selectedMenuKey == 'ui' || selectedMenuKey == 'se'}}
|
||||
<h3>Radiation Emitter Settings</h3>
|
||||
<div class="item">
|
||||
<div class="itemLabelNarrow">
|
||||
Intensity:
|
||||
</div>
|
||||
<div class="itemContentWide">
|
||||
{^{:~link('-', null, {'radiationIntensity' : 0}, radiationIntensity > 1 ? null : 'disabled')}}
|
||||
<div class="statusValue"> {^{:radiationIntensity}} </div>
|
||||
{^{:~link('+', null, {'radiationIntensity' : 1}, radiationIntensity < 10 ? null : 'disabled')}}
|
||||
{{:~link('-', null, {'radiationIntensity' : 0}, radiationIntensity > 1 ? null : 'disabled')}}
|
||||
<div class="statusValue"> {{:radiationIntensity}} </div>
|
||||
{{:~link('+', null, {'radiationIntensity' : 1}, radiationIntensity < 10 ? null : 'disabled')}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
@@ -270,9 +270,9 @@ Used In File(s): D:\Development\SS13-BS12\code\game\dna\dna_modifier.dm
|
||||
Duration:
|
||||
</div>
|
||||
<div class="itemContentWide">
|
||||
{^{:~link('-', null, {'radiationDuration' : 0}, radiationDuration > 2 ? null : 'disabled')}}
|
||||
<div class="statusValue"> {^{:radiationDuration}} </div>
|
||||
{^{:~link('+', null, {'radiationDuration' : 1}, radiationDuration < 20 ? null : 'disabled')}}
|
||||
{{:~link('-', null, {'radiationDuration' : 0}, radiationDuration > 2 ? null : 'disabled')}}
|
||||
<div class="statusValue"> {{:radiationDuration}} </div>
|
||||
{{:~link('+', null, {'radiationDuration' : 1}, radiationDuration < 20 ? null : 'disabled')}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
@@ -280,7 +280,7 @@ Used In File(s): D:\Development\SS13-BS12\code\game\dna\dna_modifier.dm
|
||||
|
||||
</div>
|
||||
<div class="itemContentWide">
|
||||
{^{:~link('Pulse Radiation', 'radiation', {'pulseRadiation' : 1}, !hasOccupant ? 'disabled' : null)}}
|
||||
{{:~link('Pulse Radiation', 'radiation', {'pulseRadiation' : 1}, !hasOccupant ? 'disabled' : null)}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
@@ -294,7 +294,7 @@ Used In File(s): D:\Development\SS13-BS12\code\game\dna\dna_modifier.dm
|
||||
Occupant:
|
||||
</div>
|
||||
<div class="itemContentWide">
|
||||
{^{:~link('Eject Occupant', 'eject', {'ejectOccupant' : 1}, locked || !hasOccupant || irradiating ? 'disabled' : null)}}
|
||||
{{:~link('Eject Occupant', 'eject', {'ejectOccupant' : 1}, locked || !hasOccupant || irradiating ? 'disabled' : null)}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
@@ -302,16 +302,16 @@ Used In File(s): D:\Development\SS13-BS12\code\game\dna\dna_modifier.dm
|
||||
Door Lock:
|
||||
</div>
|
||||
<div class="itemContentWide">
|
||||
{^{:~link('Engaged', 'locked', {'toggleLock' : 1}, locked ? 'selected' : !hasOccupant ? 'disabled' : null)}}
|
||||
{^{:~link('Disengaged', 'unlocked', {'toggleLock' : 1}, !locked ? 'selected' : irradiating ? 'disabled' : null)}}
|
||||
{{:~link('Engaged', 'locked', {'toggleLock' : 1}, locked ? 'selected' : !hasOccupant ? 'disabled' : null)}}
|
||||
{{:~link('Disengaged', 'unlocked', {'toggleLock' : 1}, !locked ? 'selected' : irradiating ? 'disabled' : null)}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{^{if irradiating}}
|
||||
{{if irradiating}}
|
||||
<div class="mask">
|
||||
<div class="maskContent">
|
||||
<h1>Irradiating Subject</h1>
|
||||
<h3>For {^{:irradiating}} seconds.</h3>
|
||||
<h3>For {{:irradiating}} seconds.</h3>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
@@ -6,10 +6,10 @@ Used In File(s): \code\modules\research\xenoarchaeology\machinery\geosample_scan
|
||||
<h3>Machine Status</h3>
|
||||
<div class="item">
|
||||
<div class="itemContent" style="width: 20%;">
|
||||
{^{:~link(scanning ? 'Halt Scan' : 'Begin Scan', 'signal-diag', {'scanItem' : 1}, null)}}
|
||||
{{:~link(scanning ? 'Halt Scan' : 'Begin Scan', 'signal-diag', {'scanItem' : 1}, null)}}
|
||||
</div>
|
||||
<div class="itemContent" style="width: 20%;">
|
||||
{^{:~link('Eject item', 'eject', {'ejectItem' : 1}, (scanned_item && !scanning) ? null : 'disabled')}}
|
||||
{{:~link('Eject item', 'eject', {'ejectItem' : 1}, (scanned_item && !scanning) ? null : 'disabled')}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -17,8 +17,8 @@ Used In File(s): \code\modules\research\xenoarchaeology\machinery\geosample_scan
|
||||
<div class="line">
|
||||
<div class="statusLabel">Item:</div>
|
||||
<div class="statusValue">
|
||||
{^{if scanned_item}}
|
||||
<span class="good">{^{:scanned_item}}</span>
|
||||
{{if scanned_item}}
|
||||
<span class="good">{{:scanned_item}}</span>
|
||||
{{else}}
|
||||
<span class="bad">No item inserted</span>
|
||||
{{/if}}
|
||||
@@ -27,8 +27,8 @@ Used In File(s): \code\modules\research\xenoarchaeology\machinery\geosample_scan
|
||||
<div class="line">
|
||||
<div class="statusLabel">Heuristic analysis:</div>
|
||||
<div class="statusValue">
|
||||
{^{if scanned_item_desc}}
|
||||
<span class="average">{^{:scanned_item_desc}}</span>
|
||||
{{if scanned_item_desc}}
|
||||
<span class="average">{{:scanned_item_desc}}</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
@@ -38,11 +38,11 @@ Used In File(s): \code\modules\research\xenoarchaeology\machinery\geosample_scan
|
||||
<div class="item">
|
||||
<div class="itemLabel" style="width: 21%;">Scan progress:</div>
|
||||
<div class="itemContent" style="width: 35%;">
|
||||
{^{:~displayBar(scan_progress, 0, 100, 'good')}}
|
||||
{^{:scan_progress}} %
|
||||
{{:~displayBar(scan_progress, 0, 100, 'good')}}
|
||||
{{:scan_progress}} %
|
||||
</div>
|
||||
<div class="itemContent" style="width: 44%;">
|
||||
{^{if scan_progress >= 100}}
|
||||
{{if scan_progress >= 100}}
|
||||
<span class="notice" style="width: 100%;">Scan completed successfully.</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
@@ -50,11 +50,11 @@ Used In File(s): \code\modules\research\xenoarchaeology\machinery\geosample_scan
|
||||
<div class="item">
|
||||
<div class="itemLabel" style="width: 21%;">Vacuum seal integrity:</div>
|
||||
<div class="itemContent" style="width: 35%;">
|
||||
{^{:~displayBar(scanner_seal_integrity, 0, 100, (scanner_seal_integrity < 66 ? (scanner_seal_integrity < 33 ? 'bad' : 'average') : 'good'))}}
|
||||
{^{:scanner_seal_integrity}} %
|
||||
{{:~displayBar(scanner_seal_integrity, 0, 100, (scanner_seal_integrity < 66 ? (scanner_seal_integrity < 33 ? 'bad' : 'average') : 'good'))}}
|
||||
{{:scanner_seal_integrity}} %
|
||||
</div>
|
||||
<div class="itemContent" style="width: 44%;">
|
||||
{^{if scanner_seal_integrity < 25}}
|
||||
{{if scanner_seal_integrity < 25}}
|
||||
<span class="notice">Warning! Vacuum seal breach will result in scan failure!</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
@@ -64,11 +64,11 @@ Used In File(s): \code\modules\research\xenoarchaeology\machinery\geosample_scan
|
||||
<div class="item">
|
||||
<div class="itemLabel" style="width: 21%;">MASER Efficiency:</div>
|
||||
<div class="itemContent" style="width: 35%;">
|
||||
{^{:~displayBar(maser_efficiency, 1, 100, (maser_efficiency < 66 ? (maser_efficiency < 33 ? 'bad' : 'average') : 'good'))}}
|
||||
{^{:maser_efficiency}} %
|
||||
{{:~displayBar(maser_efficiency, 1, 100, (maser_efficiency < 66 ? (maser_efficiency < 33 ? 'bad' : 'average') : 'good'))}}
|
||||
{{:maser_efficiency}} %
|
||||
</div>
|
||||
<div class="itemContent" style="width: 44%;">
|
||||
{^{if maser_efficiency < 50}}
|
||||
{{if maser_efficiency < 50}}
|
||||
<span class="notice">Match wavelengths to progress the scan.</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
@@ -76,25 +76,25 @@ Used In File(s): \code\modules\research\xenoarchaeology\machinery\geosample_scan
|
||||
<div class="item">
|
||||
<div class="itemLabel" style="width: 21%;">Optimal Wavelength:</div>
|
||||
<div class="itemContent" style="width: 35%;">
|
||||
{^{:~displayBar(optimal_wavelength, 1, 10000, 'good')}}
|
||||
{^{:optimal_wavelength}} MHz
|
||||
{{:~displayBar(optimal_wavelength, 1, 10000, 'good')}}
|
||||
{{:optimal_wavelength}} MHz
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabel" style="width: 21%;">Current Wavelength:</div>
|
||||
<div class="itemContent" style="width: 35%;">
|
||||
{^{:~displayBar(maser_wavelength, 1, 10000, 'good')}}
|
||||
{^{:maser_wavelength}} MHz
|
||||
{{:~displayBar(maser_wavelength, 1, 10000, 'good')}}
|
||||
{{:maser_wavelength}} MHz
|
||||
</div>
|
||||
<div class="itemContent" style="text-align:left; width: 22%;">
|
||||
{^{:~link('-2 KHz', null, {'maserWavelength' : -2}, null)}}
|
||||
{^{:~link('-1 KHz', null, {'maserWavelength' : -1}, null)}}
|
||||
{^{:~link('-0.5 KHz', null, {'maserWavelength' : -0.5}, null)}}
|
||||
{{:~link('-2 KHz', null, {'maserWavelength' : -2}, null)}}
|
||||
{{:~link('-1 KHz', null, {'maserWavelength' : -1}, null)}}
|
||||
{{:~link('-0.5 KHz', null, {'maserWavelength' : -0.5}, null)}}
|
||||
</div>
|
||||
<div class="itemContent" style="text-align:right; width: 22%;">
|
||||
{^{:~link('+0.5 KHz', null, {'maserWavelength' : 0.5}, null)}}
|
||||
{^{:~link('+1 KHz', null, {'maserWavelength' : 1}, null)}}
|
||||
{^{:~link('+2 KHz', null, {'maserWavelength' : 2}, null)}}
|
||||
{{:~link('+0.5 KHz', null, {'maserWavelength' : 0.5}, null)}}
|
||||
{{:~link('+1 KHz', null, {'maserWavelength' : 1}, null)}}
|
||||
{{:~link('+2 KHz', null, {'maserWavelength' : 2}, null)}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -102,18 +102,18 @@ Used In File(s): \code\modules\research\xenoarchaeology\machinery\geosample_scan
|
||||
<div class="item">
|
||||
<div class="itemLabel" style="width: 21%;">Centrifuge speed:</div>
|
||||
<div class="itemContent" style="width: 35%;">
|
||||
{^{:~displayBar(scanner_rpm, 0, 1000, 'good')}}
|
||||
{^{:scanner_rpm}} RPM
|
||||
{{:~displayBar(scanner_rpm, 0, 1000, 'good')}}
|
||||
{{:scanner_rpm}} RPM
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabel" style="width: 21%;">Internal temperature:</div>
|
||||
<div class="itemContent" style="width: 35%;">
|
||||
{^{:~displayBar(scanner_temperature, 0, 1273, (scanner_temperature > 250 ? (scanner_temperature > 1000 ? 'bad' : 'average') : 'good')))}}
|
||||
{^{:scanner_temperature}} K
|
||||
{{:~displayBar(scanner_temperature, 0, 1273, (scanner_temperature > 250 ? (scanner_temperature > 1000 ? 'bad' : 'average') : 'good')))}}
|
||||
{{:scanner_temperature}} K
|
||||
</div>
|
||||
<div class="itemContent" style="width: 44%;">
|
||||
{^{if scanner_temperature > 1000}}
|
||||
{{if scanner_temperature > 1000}}
|
||||
<span class="notice" style="width: 100%;">Warning! Exceeding 1200K will result in scan failure!</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
@@ -123,12 +123,12 @@ Used In File(s): \code\modules\research\xenoarchaeology\machinery\geosample_scan
|
||||
<div class="item">
|
||||
<div class="itemLabel" style="width: 21%;">Ambient radiation:</div>
|
||||
<div class="itemContent" style="width: 35%;">
|
||||
{^{:~displayBar(radiation, 0, 100, (radiation > 15 ? (radiation > 65 ? 'bad' : 'average') : 'good'))}}
|
||||
{^{:radiation}} mSv
|
||||
{{:~displayBar(radiation, 0, 100, (radiation > 15 ? (radiation > 65 ? 'bad' : 'average') : 'good'))}}
|
||||
{{:radiation}} mSv
|
||||
</div>
|
||||
<div class="itemContent" style="width: 44%;">
|
||||
{^{:~link(rad_shield_on ? 'Disable Radiation Shielding' : 'Enable Radiation Shielding', 'radiation', {'toggle_rad_shield' : 1}, null)}}
|
||||
{^{if rad_shield_on}}
|
||||
{{:~link(rad_shield_on ? 'Disable Radiation Shielding' : 'Enable Radiation Shielding', 'radiation', {'toggle_rad_shield' : 1}, null)}}
|
||||
{{if rad_shield_on}}
|
||||
<span class="notice" style="width: 100%;">Shield blocking scanner.</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
@@ -138,11 +138,11 @@ Used In File(s): \code\modules\research\xenoarchaeology\machinery\geosample_scan
|
||||
<div class="item">
|
||||
<div class="itemLabel" style="width: 21%;">Coolant remaining:</div>
|
||||
<div class="itemContent" style="width: 35%;">
|
||||
{^{:~displayBar(unused_coolant_per, 0, 100, (unused_coolant_per < 66 ? (unused_coolant_per < 33 ? 'bad' : 'average') : 'good'))}}
|
||||
{^{:unused_coolant_abs}} u
|
||||
{{:~displayBar(unused_coolant_per, 0, 100, (unused_coolant_per < 66 ? (unused_coolant_per < 33 ? 'bad' : 'average') : 'good'))}}
|
||||
{{:unused_coolant_abs}} u
|
||||
</div>
|
||||
<div class="itemContent" style="width: 44%;">
|
||||
{^{if unused_coolant_per < 20}}
|
||||
{{if unused_coolant_per < 20}}
|
||||
<span class="notice" style="width: 100%;">Warning! Coolant stocks low!</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
@@ -150,28 +150,28 @@ Used In File(s): \code\modules\research\xenoarchaeology\machinery\geosample_scan
|
||||
<div class="item">
|
||||
<div class="itemLabel" style="width: 21%;">Coolant flow rate:</div>
|
||||
<div class="itemContent" style="width: 35%;">
|
||||
{^{:~displayBar(coolant_usage_rate, 0, 10, 'good')}}
|
||||
{^{:coolant_usage_rate}} u/s
|
||||
{{:~displayBar(coolant_usage_rate, 0, 10, 'good')}}
|
||||
{{:coolant_usage_rate}} u/s
|
||||
</div>
|
||||
<div class="itemContent" style="text-align:left; width: 22%;">
|
||||
{^{:~link('Min u/s', null, {'coolantRate' : -10}, null)}}
|
||||
{^{:~link('-3 u/s', null, {'coolantRate' : -3}, null)}}
|
||||
{^{:~link('-1 u/s', null, {'coolantRate' : -1}, null)}}
|
||||
{{:~link('Min u/s', null, {'coolantRate' : -10}, null)}}
|
||||
{{:~link('-3 u/s', null, {'coolantRate' : -3}, null)}}
|
||||
{{:~link('-1 u/s', null, {'coolantRate' : -1}, null)}}
|
||||
</div>
|
||||
<div class="itemContent" style="text-align:right; width: 22%;">
|
||||
{^{:~link('+1 u/s', null, {'coolantRate' : 1}, null)}}
|
||||
{^{:~link('+3 u/s', null, {'coolantRate' : 3}, null)}}
|
||||
{^{:~link('Max u/s', null, {'coolantRate' : 10}, null)}}
|
||||
{{:~link('+1 u/s', null, {'coolantRate' : 1}, null)}}
|
||||
{{:~link('+3 u/s', null, {'coolantRate' : 3}, null)}}
|
||||
{{:~link('Max u/s', null, {'coolantRate' : 10}, null)}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabel" style="width: 21%;">Coolant purity:</div>
|
||||
<div class="itemContent" style="width: 35%;">
|
||||
{^{:~displayBar(coolant_purity, 0, 100, (coolant_purity < 66 ? (coolant_purity < 33 ? 'bad' : 'average') : 'good'))}}
|
||||
{^{:coolant_purity}} %
|
||||
{{:~displayBar(coolant_purity, 0, 100, (coolant_purity < 66 ? (coolant_purity < 33 ? 'bad' : 'average') : 'good'))}}
|
||||
{{:coolant_purity}} %
|
||||
</div>
|
||||
<div class="itemContent" style="width: 44%;">
|
||||
{^{if coolant_purity < 0.5}}
|
||||
{{if coolant_purity < 0.5}}
|
||||
<span class="notice" style="width: 100%;">Warning! Check coolant for contaminants!</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
@@ -180,6 +180,6 @@ Used In File(s): \code\modules\research\xenoarchaeology\machinery\geosample_scan
|
||||
<h3>Latest Results</h3>
|
||||
<div class="statusDisplay">
|
||||
<div class="line">
|
||||
<span class="highlight">{^{:last_scan_data}}</span>
|
||||
<span class="highlight">{{:last_scan_data}}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
+245
-245
File diff suppressed because it is too large
Load Diff
@@ -5,16 +5,16 @@ Used In File(s): \code\modules\telesci\telesci_computer.dm
|
||||
<div class="item">
|
||||
<div class="itemLabel">Coordinates:</div>
|
||||
<div class="itemContent">
|
||||
{^{:~link('X: ' + coordx, 'gear', {'setx': 1})}}
|
||||
{^{:~link('Y: ' + coordy, 'gear', {'sety': 1})}}
|
||||
{^{:~link('Z: ' + coordz, 'gear', {'setz': 1})}}
|
||||
{{:~link('X: ' + coordx, 'gear', {'setx': 1})}}
|
||||
{{:~link('Y: ' + coordy, 'gear', {'sety': 1})}}
|
||||
{{:~link('Z: ' + coordz, 'gear', {'setz': 1})}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabel">Controls:</div>
|
||||
<div class="itemContent">
|
||||
{^{:~link('Send', 'gear', {'send': 1}, null, (coordx != null && coordy != null && coordz != null) ? '' : 'disabled')}}
|
||||
{^{:~link('Receive', 'gear', {'receive': 1}, null, (coordx != null && coordy != null && coordz != null) ? '' : 'disabled')}}
|
||||
{^{:~link('Recalibrate', 'gear', {'recal': 1})}}
|
||||
{{:~link('Send', 'gear', {'send': 1}, null, (coordx != null && coordy != null && coordz != null) ? '' : 'disabled')}}
|
||||
{{:~link('Receive', 'gear', {'receive': 1}, null, (coordx != null && coordy != null && coordz != null) ? '' : 'disabled')}}
|
||||
{{:~link('Recalibrate', 'gear', {'recal': 1})}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -3,15 +3,15 @@
|
||||
Title: Syndicate Uplink, uses some javascript to change nanoUI up a bit.
|
||||
Used In File(s): \code\game\objects\items\devices\uplinks.dm
|
||||
-->
|
||||
{^{:~syndicateMode()}}
|
||||
<H2><span class="white">{^{:welcome}}</span></H2>
|
||||
{{:~syndicateMode()}}
|
||||
<H2><span class="white">{{:welcome}}</span></H2>
|
||||
<br>
|
||||
<div class="item">
|
||||
<div class="itemLabelNarrow">
|
||||
<b>Functions</b>:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{^{:~link('Close', 'gear', {'lock' : "1"}, null, 'fixedLeft')}}
|
||||
{{:~link('Close', 'gear', {'lock' : "1"}, null, 'fixedLeft')}}
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
@@ -20,20 +20,20 @@ Used In File(s): \code\game\objects\items\devices\uplinks.dm
|
||||
<b>Tele-Crystals</b>:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{^{:crystals}}
|
||||
{{:crystals}}
|
||||
</div>
|
||||
</div>
|
||||
<H2><span class="white">Request items:</span></H2><br>
|
||||
<span class="white"><i>Each item costs a number of tele-crystals as indicated by the number following their name.</i></span>
|
||||
|
||||
<br><br>
|
||||
{^{for nano_items}}
|
||||
{{for nano_items}}
|
||||
<div class="item">
|
||||
<H3><span class="white">{^{:Category}}</span></H3>
|
||||
<H3><span class="white">{{:Category}}</span></H3>
|
||||
</div>
|
||||
{^{for items}}
|
||||
{{for items}}
|
||||
<div class="item">
|
||||
{^{:~link( Name, 'gear', {'buy_item' : obj_path, 'cost' : Cost}, Cost > ~root.crystals ? 'disabled' : null, null)}} -<span class="white"> {^{:Cost}}</span>
|
||||
{{:~link( Name, 'gear', {'buy_item' : obj_path, 'cost' : Cost}, Cost > ~root.crystals ? 'disabled' : null, null)}} -<span class="white"> {{:Cost}}</span>
|
||||
</div>
|
||||
{{/for}}
|
||||
<br>
|
||||
@@ -41,6 +41,6 @@ Used In File(s): \code\game\objects\items\devices\uplinks.dm
|
||||
{{/for}}
|
||||
|
||||
<div class="item">
|
||||
{^{:~link('Buy Random (??)' , 'gear', {'buy_item' : 'random'}, null, 'fixedLeftWidest')}}
|
||||
{{:~link('Buy Random (??)' , 'gear', {'buy_item' : 'random'}, null, 'fixedLeftWidest')}}
|
||||
</div>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user