From 139d045b0c59bd722cdd3505d49417fdd01b8ca8 Mon Sep 17 00:00:00 2001 From: YotaXP Date: Sat, 9 Nov 2013 22:02:06 -0500 Subject: [PATCH] Implements NanoUI for APCs, and make a couple other tweaks to the NanoUI framework. AI can also toggle the APC lock for human access. --- code/datums/mind.dm | 2 + code/modules/client/client procs.dm | 1 + code/modules/nano/nanomanager.dm | 21 +++ code/modules/nano/nanoui.dm | 1 + code/modules/power/apc.dm | 218 ++++++++++++---------------- html/changelog.html | 9 ++ nano/css/shared.css | 12 +- nano/images/uiBackground.png | Bin 16733 -> 18200 bytes nano/images/uiBackground.xcf | Bin 110451 -> 113117 bytes nano/templates/apc.tmpl | 120 +++++++++------ 10 files changed, 212 insertions(+), 172 deletions(-) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index dccf6886bbd..1683aceca3f 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -75,6 +75,8 @@ datum/mind if(new_character.mind) //disassociate any mind currently in our new body's mind variable new_character.mind.current = null + nanomanager.user_transferred(current, new_character) + current = new_character //associate ourself with our new body new_character.mind = src //and associate our new body with ourself diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index d1f3719b5d4..cea60406f20 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -236,6 +236,7 @@ var/next_external_rsc = 0 'nano/css/shared.css', 'nano/css/icons.css', 'nano/templates/chem_dispenser.tmpl', + 'nano/templates/apc.tmpl', 'nano/templates/cryo.tmpl', 'nano/images/uiBackground.png', 'nano/images/uiIcons16.png', diff --git a/code/modules/nano/nanomanager.dm b/code/modules/nano/nanomanager.dm index 7a09e7ffd3b..c1be3cca799 100644 --- a/code/modules/nano/nanomanager.dm +++ b/code/modules/nano/nanomanager.dm @@ -112,5 +112,26 @@ for (var/datum/nanoui/ui in user.open_uis) ui.close(); + /** + * This is called when a player transfers from one mob to another + * Transfers all open UIs to the new mob + * + * @param oldMob /mob The user's old mob + * @param newMob /mob The user's new mob + * + * @return nothing + */ +/datum/nanomanager/proc/user_transferred(var/mob/oldMob, var/mob/newMob) + if (isnull(oldMob.open_uis) || !istype(oldMob.open_uis, /list) || open_uis.len == 0) + return 0 // has no open uis + + if (isnull(newMob.open_uis) || !istype(newMob.open_uis, /list)) + newMob.open_uis = list() + + for (var/datum/nanoui/ui in oldMob.open_uis) + ui.user = newMob + newMob.open_uis.Add(ui) + + oldMob.open_uis.Cut() diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm index e1ac8556f2b..901f68ec35f 100644 --- a/code/modules/nano/nanoui.dm +++ b/code/modules/nano/nanoui.dm @@ -349,6 +349,7 @@ nanoui is used to open and update nano browser uis window_size = "size=[width]x[height];" update_status(0) user << browse(get_html(), "window=[window_id];[window_size][window_options]") + winset(user, "mapwindow.map", "focus=true") // Return keyboard focus to map. on_close_winset() //onclose(user, window_id) nanomanager.ui_opened(src) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index af8d5769804..df608c245bd 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -485,134 +485,87 @@ if(wiresexposed /*&& (!istype(user, /mob/living/silicon))*/) //Commented out the typecheck to allow engiborgs to repair damaged apcs. wires.Interact(user) - user.set_machine(src) - var/t = "" //"Area Power Controller ([area.name])" - - //This goes after the wire stuff. They should be able to fix a physical problem when a wire is cut - if ( (get_dist(src, user) > 1 )) - if (!issilicon(user)) - user.unset_machine() - user << browse(null, "window=apc") - return - else if (issilicon(user) && src.aidisabled && !src.malfhack) - user << "AI control for this APC interface has been disabled." - user.unset_machine() - user << browse(null, "window=apc") - return - else if (src.malfai && isAI(user)) - var/mob/living/silicon/ai/AI = user - if ((src.malfai != AI && src.malfai != AI.parent) && !islinked(AI, malfai)) - user << "AI control for this APC interface has been disabled." - user.unset_machine() - user << browse(null, "window=apc") - return + return ui_interact(user) - if(locked && (!istype(user, /mob/living/silicon))) - t += "
Swipe ID card to unlock interface
" - t += "

Status

" - t += "Main Breaker: [operating ? "On" : "Off"]
" - t += "External Power: [ main_status ? (main_status ==2 ? "Good" : "Low") : "None"]
" - t += "Power Cell: [cell ? "[round(cell.percent())]%" : "Not connected."]" - if(cell) - t += "
Charge Mode: [chargemode ? "Auto" : "Off"]" - t += " ([charging ? ( charging == 1 ? "Charging" : "Fully charged" ) : "Not charging"])" +/obj/machinery/power/apc/ui_interact(mob/user, ui_key = "main") + if(!user) + return - t += "

Power Channels

"
-
-		var/list/L = list ("Off","Off (Auto)", "On", "On (Auto)")
-
-		t += "Equipment:    [add_lspace(lastused_equip, 6)] W : [L[equipment+1]]
" - t += "Lighting: [add_lspace(lastused_light, 6)] W : [L[lighting+1]]
" - t += "Environmental:[add_lspace(lastused_environ, 6)] W : [L[environ+1]]
" - - t += "
Total Load: [lastused_light + lastused_equip + lastused_environ] W
" - t += "
Cover Lock: [coverlocked ? "Engaged" : "Disengaged"]" - - else - if (!istype(user, /mob/living/silicon)) - t += "
Swipe ID card to lock interface
" - t += "

Status

" - t += "Main Breaker: [operating ? "On Off" : "On Off" ]
" - t += "External power : [ main_status ? (main_status ==2 ? "Good" : "Low") : "None"]
" - if(cell) - t += "Power cell: [round(cell.percent())]%" - t += "
Charge mode: [chargemode ? "Off Auto" : "Off Auto"]" - t += " ([charging ? ( charging == 1 ? "Charging" : "Fully charged" ) : "Not charging"])" + var/malfStatus + if (ticker && ticker.mode && (user.mind in ticker.mode.malf_ai) && istype(user, /mob/living/silicon/ai)) + if (src.malfai == (user:parent ? user:parent : user)) + if (src.occupant == user) + malfStatus = 3 // 3 = User is shunted in this APC + else if (istype(user.loc, /obj/machinery/power/apc)) + malfStatus = 4 // 4 = User is shunted in another APC + else + malfStatus = 2 // 2 = APC hacked by user, and user is in its core. else - t += "Power cell: Not connected." + malfStatus = 1 // 1 = APC not hacked. + else + malfStatus = 0 // 0 = User is not a Malf AI - t += "

Power channels

"
+	var/list/data = list(
+		"locked" = locked,
+		"isOperating" = operating,
+		"externalPower" = main_status,
+		"powerCellStatus" = cell ? cell.percent() : null,
+		"chargeMode" = chargemode,
+		"chargingStatus" = charging,
+		"totalLoad" = lastused_equip + lastused_light + lastused_environ,
+		"coverLocked" = coverlocked,
+		"siliconUser" = istype(user, /mob/living/silicon),
+		"malfStatus" = malfStatus,
 
-		t += "Equipment:    [add_lspace(lastused_equip, 6)] W : "
-		var/key = "eqp"
-		switch(equipment)
-			if(0)
-				t += "Off On Auto"
-			if(1)
-				t += "Off On Auto (Off)"
-			if(2)
-				t += "Off On Auto"
-			if(3)
-				t += "Off On Auto (On)"
-		t +="
" + "powerChannels" = list( + list( + "title" = "Equipment", + "powerLoad" = lastused_equip, + "status" = equipment, + "topicParams" = list( + "auto" = list("eqp" = 3), + "on" = list("eqp" = 2), + "off" = list("eqp" = 1) + ) + ), + list( + "title" = "Lighting", + "powerLoad" = lastused_light, + "status" = lighting, + "topicParams" = list( + "auto" = list("lgt" = 3), + "on" = list("lgt" = 2), + "off" = list("lgt" = 1) + ) + ), + list( + "title" = "Environment", + "powerLoad" = lastused_environ, + "status" = environ, + "topicParams" = list( + "auto" = list("env" = 3), + "on" = list("env" = 2), + "off" = list("env" = 1) + ) + ) + ) + ) - t += "Lighting: [add_lspace(lastused_light, 6)] W : " - key = "lgt" - switch(lighting) - if(0) - t += "Off On Auto" - if(1) - t += "Off On Auto (Off)" - if(2) - t += "Off On Auto" - if(3) - t += "Off On Auto (On)" - t +="
" - - - t += "Environmental:[add_lspace(lastused_environ, 6)] W : " - key = "env" - switch(environ) - if(0) - t += "Off On Auto" - if(1) - t += "Off On Auto (Off)" - if(2) - t += "Off On Auto" - if(3) - t += "Off On Auto (On)" - - - - t += "
Total Load: [lastused_light + lastused_equip + lastused_environ] W
" - t += "
Cover Lock: [coverlocked ? "Engaged" : "Disengaged"]" - - - if (istype(user, /mob/living/silicon)) - t += "
Overload lighting circuit
" - if (ticker && ticker.mode) -// world << "there's a ticker" - if(user.mind in ticker.mode.malf_ai) -// world << "ticker says its malf" - if (!src.malfai) - t += "
Override Programming
" - else - t += "
APC Hacked
" - if(!src.occupant) - t += "Shunt Core Processes
" - else - t += "Core Processes Uploaded
" - - //t += "

Close" - - //user << browse(t, "window=apc") - //onclose(user, "apc") - var/datum/browser/popup = new(user, "apc", "[area.name] APC") - popup.set_content(t) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) - popup.open() - return + var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, ui_key) + if (!ui) + // the ui does not exist, so we'll create a new one + ui = new(user, src, ui_key, "apc.tmpl", "[area.name] - APC", 500, data["siliconUser"] ? 465 : 390) + // When the UI is first opened this is the data it will use + ui.set_initial_data(data) + ui.open() + // Auto update every Master Controller tick + ui.set_auto_update(1) + else + // The UI is already open so push the new data to it + ui.push_data(data) + return + //user.set_machine(src) /obj/machinery/power/apc/proc/report() return "[area.name] : [equipment]/[lighting]/[environ] ([lastused_equip+lastused_light+lastused_environ]) : [cell? cell.percent() : "N/C"] ([charging])" @@ -691,11 +644,11 @@ /obj/machinery/power/apc/Topic(href, href_list) if(..()) - return + return 0 if(!isrobot(usr)) if(!can_use(usr, 1)) - return + return 0 usr.set_machine(src) @@ -735,11 +688,11 @@ else if( href_list["close"] ) usr << browse(null, "window=apc") usr.unset_machine() - return + return 0 else if (href_list["close2"]) usr << browse(null, "window=apcwires") usr.unset_machine() - return + return 0 else if (href_list["overload"]) if( istype(usr, /mob/living/silicon) && !src.aidisabled ) @@ -747,10 +700,10 @@ else if (href_list["malfhack"]) var/mob/living/silicon/ai/malfai = usr - if( istype(malfai, /mob/living/silicon/ai) && !src.aidisabled ) + if( istype(malfai, /mob/living/silicon/ai) && !src.aidisabled && (ticker && ticker.mode && (malfai.mind in ticker.mode.malf_ai)) ) if (malfai.malfhacking) malfai << "You are already hacking an APC." - return + return 1 malfai << "Beginning override of APC systems. This takes some time, and you cannot perform other actions during the process." malfai.malfhack = src malfai.malfhacking = 1 @@ -759,6 +712,7 @@ if (!src.aidisabled) malfai.malfhack = null malfai.malfhacking = 0 + locked = 1 if (ticker.mode.config_tag == "malfunction") if (src.z == 1) //if (is_type_in_list(get_area(src), the_station_areas)) ticker.mode:apcs++ @@ -775,9 +729,17 @@ else if (href_list["deoccupyapc"]) malfvacate() + else if (href_list["toggleaccess"]) + if (istype(usr, /mob/living/silicon/ai) && !src.aidisabled) + if(emagged || (stat & (BROKEN|MAINT))) + usr << "The APC does not respond to the command." + else + locked = !locked + update_icon() + src.updateDialog() - return + return 1 /obj/machinery/power/apc/proc/toggle_breaker() operating = !operating diff --git a/html/changelog.html b/html/changelog.html index 6da67b0f417..8f766ffe72d 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,15 @@ should be listed in the changelog upon commit tho. Thanks. --> +
+

9 November 2013

+

Yota updated:

+ +
+

6 November 2013

Cheridan updated:

diff --git a/nano/css/shared.css b/nano/css/shared.css index 7400e2e25e6..6761674cd44 100644 --- a/nano/css/shared.css +++ b/nano/css/shared.css @@ -7,6 +7,7 @@ body line-height: 170%; font-family: Verdana, Geneva, sans-serif; background: #272727 url(uiBackground.png) 50% 0 repeat-x; + overflow-x: hidden; } hr @@ -191,7 +192,7 @@ h4 .good { - color: #4f7529; + color: #79B33F; /*#4f7529;*/ font-weight: bold; } @@ -220,7 +221,7 @@ h4 .notice { position: relative; - background: url(uiNoticeBackground.jpg) 50% 50% no-repeat; + background: url(uiNoticeBackground.jpg) 50% 50% repeat; color: #15345A; font-size: 12px; font-style: italic; @@ -251,6 +252,7 @@ div.notice .item { width: 100%; + min-height: 22px; clear: both; } @@ -261,6 +263,10 @@ div.notice color: #e9c183; } +.itemContentFull +{ + float: left; +} .itemContent { float: left; @@ -269,7 +275,7 @@ div.notice .itemContentSmall { float: left; - width: 33%; + width: 30%; } .statusDisplay diff --git a/nano/images/uiBackground.png b/nano/images/uiBackground.png index 32aa9dd7f63d070312369b9acda9e5ab06307272..8bf75150fa844dcafbcac1a6cd3f4fbe8db1bb1b 100644 GIT binary patch literal 18200 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 literal 16733 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
hb2(8&W6L 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 sKM7bd_kRKA|F5Fa|5I3e&9h|nI?rTl=D#{d8T diff --git a/nano/images/uiBackground.xcf b/nano/images/uiBackground.xcf index d20db24ff899ddfdc75abdda251e07d53f394baf..56454dfad0f9d90eabae5eda0d0ce3996690d709 100644 GIT binary patch delta 3814 zcmc)M4@{J09KiA4Pmsy*9}NWsd+!8imN_r6O)X!K&J30G5>qRao3QCp=?rVm?3IO6 zNjI4o*{19^Tr<-=1UYJzESx&$96>E>X18I*s!ftGH-x^gkdy7)B-7sQ^WJms`#jI@ zeV^xf-}iUrhnNdjVs=i~K|ynw4yzGOZWSFJ5SDcOBF!Yt@Z^66N5~ValBC zx0Bj+IE(YR)Vogf0Fk5*L?-MP@mv*op+&@>C$c3hvTu<{^)Qh$4~c}AiCm2l9r%*y z@G!W7L`6KDaEV%pZVF!b;71`!5I_)hXh0aPqDhK)IN^dDUijcgAxaQH5Oruk7_Fis z6!CDvC6Mq!`e50Fa(Ub<(1K~z*#5U~iRYym~i;miWOQH|XL#?QhiXFHr>fmx6 zXGEQoQBM0t?5=(q(p1 z>flH_XIiMyNX<%G6w@+?9;TV&O@}$$9Ad_rF=mw6&s0k`-4ZHdBcd>!WvGae?3MU`El(8Dxiyx}m08$*m(BgTj_`Wb5SveljJlI+(m+bImZQ4-1JchEoY z|Ht?fRdy*^$L%_&MP=`&Xq=V$Vt373KKq(#i9X$gAMqRh>QzV6cd}N|w23|yjRd429Uf#O7X>InDJoEfdNiRKZK9rNBp?mx@NlP|Y~-Qd2;pg-PI2pP!HKL>Ij- zx|o??d{}hJY|)oV6Y^OZZ!y+erhUQ~?`XxJxQ6T8k)l6h zF$nP(h7lMAC&pkL9)$~&F$GV;jhVoA9#Ftf4{u<{d~Uf z_h;YPyUllRHJ{yLj;mV-ZOMe}iJEL%Sd335t&of^L{d|SWa9)5Y0)XNiufMCV0Izn zehw*W|4drB~#0)B^p&@H`!VNF{2qA(P5=bM9Jc^h>1vNBeZYSLEDrs&%K?o7V zkU$z)kVSe0yXY-j;1F%KYpv5CrWEL=i^{8LAk_ z5fo4Y4-HgNmu+^y1rK}(B8({FNFjq93MiqBD(bQq9B{z{AA$%Yia1ipB$;w3poB82 zsLQrE;DQG}1QA9Qaiowz4h57@Miq70RtH@0z=t5hh$4;@JQ=1O3MiqBD(aNo0T-p8 znqF-qHg%@kdODNa7w$0rYgm(P`zG1MPW0md-gzL$c6=?{*@7sp$%5@Til1aJcH;zS z+)F-ugg<1xG`{yY*{--O^eC>#`i{}C-N$8n4$Jm(I`;B_mk-JM*=qmivVCjtgKU7# z5AX+m<$`Sgtn3gc<2a}4#A(?O3l3eEz5gcuk`1S1sfTf1c5)S1=!55FXLGXiJ7lAO z%kn2>Up|5?4IAU=k9`5YFjovccnjw+jXz~ybz%TRxQaPGQmtqMzaL+Z065CyuVN7I pf|nZ~#>cpb%b3J>xPi`JnQmhq>}=v8EW=8y#m1>OLiXd4e*u<52?GEC diff --git a/nano/templates/apc.tmpl b/nano/templates/apc.tmpl index 446ba31a145..b57829f397f 100644 --- a/nano/templates/apc.tmpl +++ b/nano/templates/apc.tmpl @@ -1,26 +1,38 @@
- {^{if locked}} - Swipe ID card to unlock interface + {^{if siliconUser}} +
+ Interface Lock: +
+
+ {^{:~link('Engaged', 'locked', {'toggleaccess' : 1}, locked ? 'selected' : null)}}{^{:~link('Disengaged', 'unlocked', {'toggleaccess' : 1}, malfStatus >= 2 ? 'linkOff' : (locked ? null : 'selected'))}} +
+
{{else}} - Swipe ID card to lock interface + {^{if locked}} + Swipe an ID card to unlock this interface. + {{else}} + Swipe an ID card to lock this interface. + {{/if}} {{/if}}
-

Status

+
+ +

Power Status

Main Breaker:
- {^{if locked}} + {^{if locked && !siliconUser}} {^{if isOperating}} On {{else}} Off {{/if}} {{else}} - {^{:~link('On', {'breaker' : 1}, isOperating ? 'selected' : null)}}{^{:~link('Off', {'breaker' : 1}, isOperating ? null : 'selected')}} + {^{:~link('On', 'power', {'breaker' : 1}, isOperating ? 'selected' : null)}}{^{:~link('Off', 'close', {'breaker' : 1}, isOperating ? null : 'selected')}} {{/if}}
@@ -44,13 +56,16 @@
Power Cell:
-
- {^{if powerCellStatus == null}} - Not connected. - {{else}} - {^{:powerCellStatus}}% - {{/if}} -
+ {^{if powerCellStatus == null}} +
+ Power cell removed. +
+ {{else}} +
+ {^{:~round(powerCellStatus*10)/10}}% +
+ {^{:~displayBar(powerCellStatus, 0, 100, powerCellStatus >= 50 ? 'good' : powerCellStatus >= 25 ? 'average' : 'bad')}} + {{/if}}
{^{if powerCellStatus != null}} @@ -59,83 +74,106 @@ Charge Mode:
- {^{if locked}} + {^{if locked && !siliconUser}} {^{if chargeMode}} Auto {{else}} Off {{/if}} {{else}} - {^{:~link('Auto', {'cmode' : 1}, chargeMode ? 'selected' : null)}}{^{:~link('Off', {'cmode' : 1}, chargeMode ? null : 'selected')}} + {^{:~link('Auto', 'refresh', {'cmode' : 1}, chargeMode ? 'selected' : null)}}{^{:~link('Off', 'close', {'cmode' : 1}, chargeMode ? null : 'selected')}} {{/if}}   {^{if chargingStatus > 1}} - (Fully Charged) + [Fully Charged] {{else chargingStatus == 1}} - (Charging) + [Charging] {{else}} - (Not Charging) + [Not Charging] {{/if}}
{{/if}} +

Power Channels

{^{for powerChannels}}
- {^{:title}} + {^{:title}}:
-
+
{^{:powerLoad}} W
-
- {^{if !~root.locked}} - {^{:~link('Auto', topicParams.auto, (status == 1 || status == 3) ? 'selected' : null)}} - {^{:~link('On', topicParams.on, (status == 2) ? 'selected' : null)}} - {^{:~link('Off', topicParams.off, (status == 0) ? 'selected' : null)}} - {{/if}} +
+    {^{if status <= 1}} Off {{else status >= 2}} On {{/if}} - {^{if ~root.locked}} - {^{if status == 1 || status == 3}} - (Auto) - {{else}} - (Manual) - {{/if}} - {{/if}} + {^{if status == 1 || status == 3}} + [Auto] + {{else}} + [Manual] + {{/if}}
+ {^{if !~root.locked || ~root.siliconUser}} +
+ {^{:~link('Auto', 'refresh', topicParams.auto, (status == 1 || status == 3) ? 'selected' : null)}} + {^{:~link('On', 'power', topicParams.on, (status == 2) ? 'selected' : null)}} + {^{:~link('Off', 'close', topicParams.off, (status == 0) ? 'selected' : null)}} +
+ {{/if}}
{{/for}} -
 
- -
+
Total Load:
-
- {{:totalLoad}} W +
+ {^{:totalLoad}} W
+
 
+
Cover Lock:
- {^{if locked}} + {^{if locked && !siliconUser}} {^{if coverLocked}} Engaged {{else}} Disengaged {{/if}} {{else}} - {^{:~link('Engaged', {'lock' : 1}, coverLocked ? 'selected' : null)}}{^{:~link('Disengaged', {'lock' : 1}, coverLocked ? null : 'selected')}} + {^{:~link('Engaged', 'locked', {'lock' : 1}, coverLocked ? 'selected' : null)}}{^{:~link('Disengaged', 'unlocked', {'lock' : 1}, coverLocked ? null : 'selected')}} {{/if}}
-
\ No newline at end of file +
+ + +{^{if siliconUser}} +

System Overrides

+ +
+ {^{:~link('Overload Lighting Circuit', 'lightbulb', {'overload' : 1})}} + {^{if malfStatus == 1}} + {^{:~link('Override Programming', 'script', {'malfhack' : 1})}} + {{else malfStatus == 2}} + {^{:~link('Shunt Core Processes', 'arrowreturn-1-s', {'occupyapc' : 1})}} + {{else malfStatus == 3}} + {^{:~link('Return to Main Core', 'arrowreturn-1-w', {'deoccupyapc' : 1})}} + {{else malfStatus == 4}} + {^{:~link('Shunt Core Processes', 'arrowreturn-1-s', {'occupyapc' : 1}, 'linkOff')}} + {{/if}} +
+{{/if}} + +
+ \ No newline at end of file