From 4fd9d3e131f9a1d67583c11b51990f7060c71a32 Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Fri, 27 May 2016 08:43:20 -0400 Subject: [PATCH 1/2] Nano animations! --- code/modules/nano/modules/power_monitor.dm | 21 +- code/modules/pda/core_apps.dm | 18 +- code/modules/power/apc.dm | 6 +- code/modules/power/solar.dm | 17 +- nano/assets/libraries.min.js | 10 +- nano/assets/nano.js | 2 +- nano/assets/nanoui.css | 2 +- nano/scripts/libraries/jquery-ui.js | 1295 +++++++++++++++++- nano/scripts/nano/nano_base_helpers.js | 23 +- nano/scripts/nano/nano_transition.js | 96 ++ nano/templates/adv_med.tmpl | 12 +- nano/templates/advanced_airlock_console.tmpl | 6 +- nano/templates/ai_fixer.tmpl | 10 +- nano/templates/air_alarm.tmpl | 20 +- nano/templates/apc.tmpl | 19 +- nano/templates/canister.tmpl | 8 +- nano/templates/chem_dispenser.tmpl | 18 +- nano/templates/chem_heater.tmpl | 8 +- nano/templates/cryo.tmpl | 30 +- nano/templates/disposal_bin.tmpl | 4 +- nano/templates/dna_modifier.tmpl | 64 +- nano/templates/docking_airlock_console.tmpl | 2 +- nano/templates/exosuit_control.tmpl | 32 +- nano/templates/freezer.tmpl | 16 +- nano/templates/geoscanner.tmpl | 18 +- nano/templates/hardsuit.tmpl | 16 +- nano/templates/mech_bay_console.tmpl | 4 +- nano/templates/op_computer.tmpl | 62 +- nano/templates/pacman.tmpl | 18 +- nano/templates/pai_atmosphere.tmpl | 6 +- nano/templates/pai_doorjack.tmpl | 6 +- nano/templates/pda_atmos_scan.tmpl | 14 +- nano/templates/portpump.tmpl | 4 +- nano/templates/portscrubber.tmpl | 4 +- nano/templates/power_monitor.tmpl | 10 +- nano/templates/robot_control.tmpl | 22 +- nano/templates/simple_airlock_console.tmpl | 2 +- nano/templates/sleeper.tmpl | 72 +- nano/templates/slotmachine.tmpl | 4 +- nano/templates/smes.tmpl | 10 +- nano/templates/solar_control.tmpl | 6 +- nano/templates/supermatter_crystal.tmpl | 2 +- nano/templates/tanks.tmpl | 4 +- 43 files changed, 1707 insertions(+), 316 deletions(-) create mode 100644 nano/scripts/nano/nano_transition.js diff --git a/code/modules/nano/modules/power_monitor.dm b/code/modules/nano/modules/power_monitor.dm index d6df0229085..f2c9297b1a9 100644 --- a/code/modules/nano/modules/power_monitor.dm +++ b/code/modules/nano/modules/power_monitor.dm @@ -2,7 +2,7 @@ name = "Power monitor" var/select_monitor = 0 var/obj/machinery/computer/monitor/powermonitor - + /datum/nano_module/power_monitor/silicon select_monitor = 1 @@ -10,33 +10,33 @@ ..() if(!select_monitor) powermonitor = nano_host() - + /datum/nano_module/power_monitor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state) var/data[0] - + data["powermonitor"] = powermonitor if(select_monitor) data["select_monitor"] = 1 data["powermonitors"] = powermonitor_repository.powermonitor_data() - - if (powermonitor && !isnull(powermonitor.powernet)) + + if (powermonitor && !isnull(powermonitor.powernet)) if(select_monitor && (powermonitor.stat & (NOPOWER|BROKEN))) powermonitor = null return data["poweravail"] = powermonitor.powernet.avail - data["powerload"] = num2text(powermonitor.powernet.viewload,10) + data["powerload"] = powermonitor.powernet.viewload data["powerdemand"] = powermonitor.powernet.load data["apcs"] = apc_repository.apc_data(powermonitor) - + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "power_monitor.tmpl", "Power Monitoring Console", 800, 700, state = state) ui.set_initial_data(data) ui.open() ui.set_auto_update(1) - + /datum/nano_module/power_monitor/Topic(href, href_list) - if(..()) + if(..()) return 1 if(href_list["selectmonitor"]) @@ -44,9 +44,8 @@ powermonitor = locate(href_list["selectmonitor"]) powermonitor.powernet = powermonitor.find_powernet() // Refresh the powernet of the monitor return 1 - + if(href_list["return"]) if(issilicon(usr)) powermonitor = null return 1 - \ No newline at end of file diff --git a/code/modules/pda/core_apps.dm b/code/modules/pda/core_apps.dm index 065253fcfab..4aaaa0667e7 100644 --- a/code/modules/pda/core_apps.dm +++ b/code/modules/pda/core_apps.dm @@ -97,15 +97,15 @@ var/co2_level = environment.carbon_dioxide/total_moles var/plasma_level = environment.toxins/total_moles var/unknown_level = 1-(o2_level+n2_level+co2_level+plasma_level) - data["aircontents"] = list(\ - "pressure" = "[round(pressure,0.1)]",\ - "nitrogen" = "[round(n2_level*100,0.1)]",\ - "oxygen" = "[round(o2_level*100,0.1)]",\ - "carbon_dioxide" = "[round(co2_level*100,0.1)]",\ - "plasma" = "[round(plasma_level*100,0.01)]",\ - "other" = "[round(unknown_level, 0.01)]",\ - "temp" = "[round(environment.temperature-T0C,0.1)]",\ - "reading" = 1\ + data["aircontents"] = list( + "pressure" = pressure, + "nitrogen" = n2_level*100, + "oxygen" = o2_level*100, + "carbon_dioxide" = co2_level*100, + "plasma" = plasma_level*100, + "other" = unknown_level, + "temp" = environment.temperature-T0C, + "reading" = 1 ) if(isnull(data["aircontents"])) data["aircontents"] = list("reading" = 0) \ No newline at end of file diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index edefabf2aff..a66eba09713 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -815,16 +815,12 @@ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) 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", 510, data["siliconUser"] ? 465 : 390) + ui = new(user, src, ui_key, "apc.tmpl", "[area.name] - APC", 510, data["siliconUser"] ? 535 : 460) // 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 /obj/machinery/power/apc/proc/report() return "[area.name] : [equipment]/[lighting]/[environ] ([lastused_equip+lastused_light+lastused_environ]) : [cell? cell.percent() : "N/C"] ([charging])" diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 44f78fa4e38..c8f5fc312e8 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -293,7 +293,7 @@ var/autostart = 0 // Automatically search for connected devices var/obj/machinery/power/tracker/connected_tracker = null var/list/connected_panels = list() - + // Used for mapping in solar array which automatically starts itself (telecomms, for example) /obj/machinery/power/solar_control/autostart track = 2 // Auto tracking mode @@ -301,7 +301,7 @@ /obj/machinery/power/solar_control/initialize() ..() - if(!powernet) + if(!powernet) return connect_to_network() set_panels(cdir) @@ -375,17 +375,17 @@ /obj/machinery/power/solar_control/attack_ai(mob/user as mob) src.add_hiddenprint(user) ui_interact(user) - + /obj/machinery/power/solar_control/attack_ghost(mob/user as mob) - ui_interact(user) - + ui_interact(user) + /obj/machinery/power/solar_control/attack_hand(mob/user) if(..(user)) return 1 - + if(stat & BROKEN) return - + ui_interact(user) /obj/machinery/power/solar_control/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) @@ -409,9 +409,6 @@ ui.set_initial_data(data) ui.open() ui.set_auto_update(1) - else - ui.push_data(data) - return /obj/machinery/power/solar_control/attackby(I as obj, user as mob, params) if(istype(I, /obj/item/weapon/screwdriver)) diff --git a/nano/assets/libraries.min.js b/nano/assets/libraries.min.js index ba3441604d1..6e3405a7be4 100644 --- a/nano/assets/libraries.min.js +++ b/nano/assets/libraries.min.js @@ -1,5 +1,5 @@ -!function(e,t){"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){function n(e){var t="length"in e&&e.length,n=oe.type(e);return"function"===n||oe.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e}function i(e,t,n){if(oe.isFunction(t))return oe.grep(e,function(e,i){return!!t.call(e,i,e)!==n});if(t.nodeType)return oe.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(de.test(t))return oe.filter(t,e,n);t=oe.filter(t,e)}return oe.grep(e,function(e){return oe.inArray(e,t)>=0!==n})}function o(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}function r(e){var t=xe[e]={};return oe.each(e.match(be)||[],function(e,n){t[n]=!0}),t}function s(){he.addEventListener?(he.removeEventListener("DOMContentLoaded",a,!1),e.removeEventListener("load",a,!1)):(he.detachEvent("onreadystatechange",a),e.detachEvent("onload",a))}function a(){(he.addEventListener||"load"===event.type||"complete"===he.readyState)&&(s(),oe.ready())}function l(e,t,n){if(void 0===n&&1===e.nodeType){var i="data-"+t.replace(Ne,"-$1").toLowerCase();if(n=e.getAttribute(i),"string"==typeof n){try{n="true"===n?!0:"false"===n?!1:"null"===n?null:+n+""===n?+n:Ce.test(n)?oe.parseJSON(n):n}catch(o){}oe.data(e,t,n)}else n=void 0}return n}function u(e){var t;for(t in e)if(("data"!==t||!oe.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}function c(e,t,n,i){if(oe.acceptData(e)){var o,r,s=oe.expando,a=e.nodeType,l=a?oe.cache:e,u=a?e[s]:e[s]&&s;if(u&&l[u]&&(i||l[u].data)||void 0!==n||"string"!=typeof t)return u||(u=a?e[s]=Y.pop()||oe.guid++:s),l[u]||(l[u]=a?{}:{toJSON:oe.noop}),"object"!=typeof t&&"function"!=typeof t||(i?l[u]=oe.extend(l[u],t):l[u].data=oe.extend(l[u].data,t)),r=l[u],i||(r.data||(r.data={}),r=r.data),void 0!==n&&(r[oe.camelCase(t)]=n),"string"==typeof t?(o=r[t],null==o&&(o=r[oe.camelCase(t)])):o=r,o}}function f(e,t,n){if(oe.acceptData(e)){var i,o,r=e.nodeType,s=r?oe.cache:e,a=r?e[oe.expando]:oe.expando;if(s[a]){if(t&&(i=n?s[a]:s[a].data)){oe.isArray(t)?t=t.concat(oe.map(t,oe.camelCase)):t in i?t=[t]:(t=oe.camelCase(t),t=t in i?[t]:t.split(" ")),o=t.length;for(;o--;)delete i[t[o]];if(n?!u(i):!oe.isEmptyObject(i))return}(n||(delete s[a].data,u(s[a])))&&(r?oe.cleanData([e],!0):ne.deleteExpando||s!=s.window?delete s[a]:s[a]=null)}}}function d(){return!0}function p(){return!1}function h(){try{return he.activeElement}catch(e){}}function g(e){var t=We.split("|"),n=e.createDocumentFragment();if(n.createElement)for(;t.length;)n.createElement(t.pop());return n}function m(e,t){var n,i,o=0,r=typeof e.getElementsByTagName!==_e?e.getElementsByTagName(t||"*"):typeof e.querySelectorAll!==_e?e.querySelectorAll(t||"*"):void 0;if(!r)for(r=[],n=e.childNodes||e;null!=(i=n[o]);o++)!t||oe.nodeName(i,t)?r.push(i):oe.merge(r,m(i,t));return void 0===t||t&&oe.nodeName(e,t)?oe.merge([e],r):r}function v(e){Pe.test(e.type)&&(e.defaultChecked=e.checked)}function y(e,t){return oe.nodeName(e,"table")&&oe.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function b(e){return e.type=(null!==oe.find.attr(e,"type"))+"/"+e.type,e}function x(e){var t=Qe.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function w(e,t){for(var n,i=0;null!=(n=e[i]);i++)oe._data(n,"globalEval",!t||oe._data(t[i],"globalEval"))}function T(e,t){if(1===t.nodeType&&oe.hasData(e)){var n,i,o,r=oe._data(e),s=oe._data(t,r),a=r.events;if(a){delete s.handle,s.events={};for(n in a)for(i=0,o=a[n].length;o>i;i++)oe.event.add(t,n,a[n][i])}s.data&&(s.data=oe.extend({},s.data))}}function _(e,t){var n,i,o;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!ne.noCloneEvent&&t[oe.expando]){o=oe._data(t);for(i in o.events)oe.removeEvent(t,i,o.handle);t.removeAttribute(oe.expando)}"script"===n&&t.text!==e.text?(b(t).text=e.text,x(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),ne.html5Clone&&e.innerHTML&&!oe.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Pe.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:"input"!==n&&"textarea"!==n||(t.defaultValue=e.defaultValue)}}function C(t,n){var i,o=oe(n.createElement(t)).appendTo(n.body),r=e.getDefaultComputedStyle&&(i=e.getDefaultComputedStyle(o[0]))?i.display:oe.css(o[0],"display");return o.detach(),r}function N(e){var t=he,n=Ze[e];return n||(n=C(e,t),"none"!==n&&n||(Ke=(Ke||oe("