From 992ceecd4e7845486ef167dd69aa4c89430056eb Mon Sep 17 00:00:00 2001 From: Mark Aherne Date: Mon, 21 Jul 2014 22:32:45 +0100 Subject: [PATCH] NanoUI updates. * Map gen verb is now limited to those with server access. * Added Z layer support. Conflicts: code/modules/admin/admin_verbs.dm nano/images/nanomap.png --- code/modules/admin/admin_verbs.dm | 4 +- code/modules/nano/nanomapgen.dm | 44 ++++++++++++-------- code/modules/nano/nanoui.dm | 23 ++++++++-- nano/images/{nanomap.png => nanomap_z1.png} | Bin nano/js/nano_base_callbacks.js | 6 +++ nano/js/nano_base_helpers.js | 4 +- nano/js/nano_state_manager.js | 4 -- nano/templates/layout_default.tmpl | 2 +- 8 files changed, 58 insertions(+), 29 deletions(-) rename nano/images/{nanomap.png => nanomap_z1.png} (100%) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 3e3580034e2..c9ff0c306a7 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -129,8 +129,8 @@ var/list/admin_verbs_server = list( /client/proc/cmd_admin_change_custom_event, /client/proc/cmd_admin_create_centcom_report, /client/proc/cmd_admin_dress, - /client/proc/response_team // Response Teams admin verb - + /client/proc/response_team, // Response Teams admin verb + /client/proc/nanomapgen_DumpImage ) var/list/admin_verbs_debug = list( /client/proc/cmd_admin_list_open_jobs, diff --git a/code/modules/nano/nanomapgen.dm b/code/modules/nano/nanomapgen.dm index 6e1e3712d7a..dd65b7bbd08 100644 --- a/code/modules/nano/nanomapgen.dm +++ b/code/modules/nano/nanomapgen.dm @@ -16,16 +16,14 @@ //Call these procs to dump your world to a series of image files (!!) //NOTE: Does not explicitly support non 32x32 icons or stuff with large pixel_* values, so don't blame me if it doesn't work perfectly -/mob/verb/nanomapgen_DumpImage() - set category = "Server" +/client/proc/nanomapgen_DumpImage() set name = "Generate NanoUI Map" + set category = "Server" - if(!src.client.holder) - src << "Only administrators may use this command." - return - nanomapgen_DumpTile() + if(holder) + nanomapgen_DumpTile(1, 1, text2num(input(usr,"Enter the Z level to generate"))) -/mob/proc/nanomapgen_DumpTile(var/startX = 1, var/startY = 1, var/currentZ = 1, var/endX = -1, var/endY = -1) +/client/proc/nanomapgen_DumpTile(var/startX = 1, var/startY = 1, var/currentZ = 1, var/endX = -1, var/endY = -1) if (endX < 0 || endX > world.maxx) endX = world.maxx @@ -33,13 +31,20 @@ if (endY < 0 || endY > world.maxy) endY = world.maxy + if (currentZ < 0 || currentZ > world.maxz) + usr << "NanoMapGen: ERROR: currentZ ([currentZ]) must be between 1 and [world.maxz]" + + sleep(3) + return NANOMAP_TERMINALERR + if (startX > endX) - world.log << "NanoMapGen: ERROR: startX ([startX]) cannot be greater than endX ([endX])" + usr << "NanoMapGen: ERROR: startX ([startX]) cannot be greater than endX ([endX])" + sleep(3) return NANOMAP_TERMINALERR if (startY > endX) - world.log << "NanoMapGen: ERROR: startY ([startY]) cannot be greater than endY ([endY])" + usr << "NanoMapGen: ERROR: startY ([startY]) cannot be greater than endY ([endY])" sleep(3) return NANOMAP_TERMINALERR @@ -49,7 +54,8 @@ sleep(3) return NANOMAP_TERMINALERR - world.log << "NanoMapGen: GENERATE MAP ([startX],[startY],[currentZ]) to ([endX],[endY],[currentZ])" + world.log << "NanoMapGen: GENERATE MAP ([startX],[startY],[currentZ]) to ([endX],[endY],[currentZ])" + usr << "NanoMapGen: GENERATE MAP ([startX],[startY],[currentZ]) to ([endX],[endY],[currentZ])" var/count = 0; for(var/WorldX = startX, WorldX <= endX, WorldX++) @@ -57,22 +63,26 @@ var/atom/Turf = locate(WorldX, WorldY, currentZ) - var/icon/TurfIcon = new(Turf.icon, Turf.icon_state, Turf.dir, 1, 0) + var/icon/TurfIcon = new(Turf.icon, Turf.icon_state) TurfIcon.Scale(NANOMAP_ICON_SIZE, NANOMAP_ICON_SIZE) Tile.Blend(TurfIcon, ICON_OVERLAY, ((WorldX - 1) * NANOMAP_ICON_SIZE), ((WorldY - 1) * NANOMAP_ICON_SIZE)) count++ - if (count % 1024 == 0) - world.log << "NanoMapGen: [count] tiles done" - sleep(5) + if (count % 8000 == 0) + world.log << "NanoMapGen: [count] tiles done" + sleep(1) + + var/mapFilename = "nanomap_z[currentZ]-new.png" - world.log << "NanoMapGen: sending nanoMap.png to client" + world.log << "NanoMapGen: sending [mapFilename] to client" - usr << browse(Tile, "window=picture;file=nanoMap.png;display=0") + usr << browse(Tile, "window=picture;file=[mapFilename];display=0") - world.log << "NanoMapGen: Done." + world.log << "NanoMapGen: Done." + + usr << "NanoMapGen: Done. File [mapFilename] uploaded to your cache." if (Tile.Width() != NANOMAP_MAX_ICON_DIMENSION || Tile.Height() != NANOMAP_MAX_ICON_DIMENSION) return NANOMAP_BADOUTPUT diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm index 7653ab09646..54ff6b70b01 100644 --- a/code/modules/nano/nanoui.dm +++ b/code/modules/nano/nanoui.dm @@ -50,6 +50,8 @@ nanoui is used to open and update nano browser uis var/state_key = "default" // show the map ui, this is used by the default layout var/show_map = 0 + // the map z level to display + var/map_z_level = 1 // initial data, containing the full data structure, must be sent to the ui (the data structure cannot be extended later on) var/list/initial_data[0] // set to 1 to update the ui automatically every master_controller tick @@ -203,6 +205,7 @@ nanoui is used to open and update nano browser uis "autoUpdateLayout" = auto_update_layout, "autoUpdateContent" = auto_update_content, "showMap" = show_map, + "mapZLevel" = map_z_level, "user" = list("name" = user.name) ) return config_data @@ -322,6 +325,16 @@ nanoui is used to open and update nano browser uis */ /datum/nanoui/proc/set_show_map(nstate) show_map = nstate + + /** + * Toggle showing the map ui + * + * @param nstate_key boolean 1 to show map, 0 to hide (default is 0) + * + * @return nothing + */ +/datum/nanoui/proc/set_map_z_level(nz) + map_z_level = nz /** * Set whether or not to use the "old" on close logic (mainly unset_machine()) @@ -466,12 +479,16 @@ nanoui is used to open and update nano browser uis return // This is used to toggle the nano map ui - var/show_map_updated = 0 + var/map_update = 0 if(href_list["showMap"]) set_show_map(text2num(href_list["showMap"])) - show_map_updated = 1 + map_update = 1 + + if(href_list["mapZLevel"]) + set_map_z_level(text2num(href_list["mapZLevel"])) + map_update = 1 - if ((src_object && src_object.Topic(href, href_list)) || show_map_updated) + if ((src_object && src_object.Topic(href, href_list)) || map_update) nanomanager.update_uis(src_object) // update all UIs attached to src_object /** diff --git a/nano/images/nanomap.png b/nano/images/nanomap_z1.png similarity index 100% rename from nano/images/nanomap.png rename to nano/images/nanomap_z1.png diff --git a/nano/js/nano_base_callbacks.js b/nano/js/nano_base_callbacks.js index adbfb38fa47..fb5a86ee3db 100644 --- a/nano/js/nano_base_callbacks.js +++ b/nano/js/nano_base_callbacks.js @@ -51,6 +51,8 @@ NanoBaseCallbacks = function () window.location.href = href; } }); + + return updateData; }, nanomap: function (updateData) { $('.mapIcon') @@ -85,6 +87,10 @@ NanoBaseCallbacks = function () marginTop: '-' + Math.floor(uiMapHeight / 2) + 'px' }); }); + + $('#uiMapImage').attr('src', 'nanomap_z' + updateData['config']['mapZLevel'] + '.png'); + + return updateData; } }; diff --git a/nano/js/nano_base_helpers.js b/nano/js/nano_base_helpers.js index 2f17d5b39e2..67dffc064cc 100644 --- a/nano/js/nano_base_helpers.js +++ b/nano/js/nano_base_helpers.js @@ -34,7 +34,7 @@ NanoBaseHelpers = function () if (typeof elementClass == 'undefined' || !elementClass) { - elementClass = ''; + elementClass = 'link'; } var elementIdHtml = ''; @@ -48,7 +48,7 @@ NanoBaseHelpers = function () return ''; } - return ''; + return '
' + iconHtml + text + '
'; }, // Since jsrender breaks the ^ operator xor: function(number,bit) { diff --git a/nano/js/nano_state_manager.js b/nano/js/nano_state_manager.js index 69699765a48..84de1d1c89e 100644 --- a/nano/js/nano_state_manager.js +++ b/nano/js/nano_state_manager.js @@ -4,12 +4,8 @@ NanoStateManager = function () // _isInitialised is set to true when all of this ui's templates have been processed/rendered var _isInitialised = false; - // the array of template names to use for this ui - var _templates = null; // the data for this ui var _data = null; - // new data which arrives before _isInitialised is true is stored here for processing later - var _earlyUpdateData = null; // this is an array of callbacks which are called when new data arrives, before it is processed var _beforeUpdateCallbacks = {}; diff --git a/nano/templates/layout_default.tmpl b/nano/templates/layout_default.tmpl index ad63ff3bfe5..ec3e225bb67 100644 --- a/nano/templates/layout_default.tmpl +++ b/nano/templates/layout_default.tmpl @@ -13,7 +13,7 @@
- +