Merge pull request #4209 from Faerdan/dev

Updated how NanoUI renders templates, using JSRender without the JSViews data-linking.
This commit is contained in:
Zuhayr
2014-01-05 02:43:52 -08:00
14 changed files with 1653 additions and 1352 deletions
+1 -1
View File
@@ -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
+1 -12
View File
@@ -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
+232 -245
View File
@@ -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)
+4
View File
@@ -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
+1 -31
View File
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
+24 -41
View File
@@ -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)
+17 -17
View File
@@ -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">&nbsp;</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">&nbsp;</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:&nbsp;{^{:beakerCurrentVolume}}&nbsp;/&nbsp;{^{:beakerMaxVolume}}</b><br>
{^{for beakerContents}}
<span class="highlight">{^{:volume}} units of {^{:name}}</span><br>
{{if isBeakerLoaded}}
<b>Volume:&nbsp;{{:beakerCurrentVolume}}&nbsp;/&nbsp;{{: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
View File
@@ -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}}&nbsp;=>&nbsp;
{^{if occupant.stat == 0}}
{{:occupant.name}}&nbsp;=>&nbsp;
{{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">=&gt; 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">=&gt; 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">=&gt; 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">=&gt; 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">&nbsp;</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>
+71 -71
View File
@@ -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}}&nbsp;=>&nbsp;
{^{if occupant.stat == 0}}
{{:occupant.name}}&nbsp;=>&nbsp;
{{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">&nbsp;</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">&nbsp;{^{:selectedUITargetHex}}&nbsp;</div>
{^{:~link('+', null, {'changeUITarget' : 1}, selectedUITarget < 15 ? null : 'disabled')}}
{{:~link('-', null, {'changeUITarget' : 0}, selectedUITarget > 0 ? null : 'disabled')}}
<div class="statusValue">&nbsp;{{:selectedUITargetHex}}&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;{^{:radiationIntensity}}&nbsp;</div>
{^{:~link('+', null, {'radiationIntensity' : 1}, radiationIntensity < 10 ? null : 'disabled')}}
{{:~link('-', null, {'radiationIntensity' : 0}, radiationIntensity > 1 ? null : 'disabled')}}
<div class="statusValue">&nbsp;{{:radiationIntensity}}&nbsp;</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">&nbsp;{^{:radiationDuration}}&nbsp;</div>
{^{:~link('+', null, {'radiationDuration' : 1}, radiationDuration < 20 ? null : 'disabled')}}
{{:~link('-', null, {'radiationDuration' : 0}, radiationDuration > 2 ? null : 'disabled')}}
<div class="statusValue">&nbsp;{{:radiationDuration}}&nbsp;</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
&nbsp;
</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}}
+49 -49
View File
@@ -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
View File
File diff suppressed because it is too large Load Diff
+6 -6
View File
@@ -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>
+9 -9
View File
@@ -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>