mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 18:32:03 +00:00
fuck you nanoui hello annoying htmlui
This commit is contained in:
@@ -181,7 +181,6 @@ mob/verb/test()
|
||||
/datum/html_interface/proc/callJavaScript(func, list/arguments, datum/html_interface_client/hclient = null)
|
||||
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/datum/html_interface/proc/callJavaScript() called tick#: [world.time]")
|
||||
if (!arguments) arguments = new/list()
|
||||
|
||||
if (hclient)
|
||||
hclient = getClient(hclient)
|
||||
|
||||
@@ -214,7 +213,7 @@ mob/verb/test()
|
||||
|
||||
if (hclient && hclient.active)
|
||||
spawn (-1) src._renderContent(id, hclient, ignore_cache)
|
||||
/datum/html_interface/proc/show(datum/html_interface_client/hclient)
|
||||
/datum/html_interface/proc/show(datum/html_interface_client/hclient, var/datum/html_interface/oldwindow)
|
||||
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/datum/html_interface/proc/show() called tick#: [world.time]")
|
||||
hclient = getClient(hclient, TRUE)
|
||||
|
||||
@@ -233,6 +232,8 @@ mob/verb/test()
|
||||
hclient.is_loaded = FALSE
|
||||
hclient.client << output(replacetextEx(replacetextEx(file2text('html_interface.html'), "\[hsrc\]", "\ref[src]"), "</head>", "[head]</head>"), "browser_\ref[src].browser")
|
||||
winshow(hclient.client, "browser_\ref[src]", TRUE)
|
||||
if(oldwindow && winexists(hclient.client, "browser_\ref[oldwindow]"))
|
||||
winshow(hclient.client, "browser_\ref[oldwindow]", FALSE)
|
||||
|
||||
while (hclient.client && hclient.active && !hclient.is_loaded) sleep(2)
|
||||
|
||||
@@ -376,4 +377,4 @@ mob/verb/test()
|
||||
|
||||
if ("onclose")
|
||||
src.hide(hclient)
|
||||
else if (src.ref && hclient.active) src.ref.Topic(href, href_list, hclient)
|
||||
else if (src.ref) src.ref.Topic(href, href_list, hclient, src)
|
||||
|
||||
209
code/modules/html_interface/map/adv_sec/adv_camera.dm
Normal file
209
code/modules/html_interface/map/adv_sec/adv_camera.dm
Normal file
@@ -0,0 +1,209 @@
|
||||
/obj/machinery/computer/security/advanced
|
||||
name = "Advanced Security Cameras"
|
||||
desc = "Used to access the various cameras on the station with an interactive user interface."
|
||||
circuit = "/obj/item/weapon/circuitboard/security/advanced"
|
||||
|
||||
/obj/machinery/computer/security/advanced/New()
|
||||
..()
|
||||
html_machines += src
|
||||
|
||||
/obj/item/weapon/circuitboard/security/advanced
|
||||
name = "Circuit board (Advanced Security)"
|
||||
build_path = /obj/machinery/computer/security/advanced
|
||||
|
||||
/obj/machinery/computer/security/advanced/attack_hand(var/mob/user as mob)
|
||||
if (src.z > 6)
|
||||
user << "<span class='danger'>Unable to establish a connection: </span>You're too far away from the station!"
|
||||
return
|
||||
if(stat & (NOPOWER|BROKEN)) return
|
||||
adv_camera.show(user, (current ? current.z : z))
|
||||
if(current) user.reset_view(current)
|
||||
user.machine = src
|
||||
return
|
||||
|
||||
/obj/machinery/computer/security/advanced/check_eye(var/mob/user as mob)
|
||||
if (( ( get_dist(user, src) > 1 ) || !( user.canmove ) || ( user.blinded )) && (!istype(user, /mob/living/silicon)))
|
||||
return null
|
||||
if(stat & (NOPOWER|BROKEN)) return null
|
||||
user.reset_view(current)
|
||||
return 1
|
||||
|
||||
var/global/datum/interactive_map/camera/adv_camera = new
|
||||
/client/verb/lookatdatum()
|
||||
set category = "Debug"
|
||||
debug_variables(adv_camera)
|
||||
|
||||
/datum/interactive_map/camera
|
||||
var/list/zlevel_data
|
||||
var/list/zlevels
|
||||
var/list/camerasbyzlevel
|
||||
var/initialized = 0
|
||||
|
||||
/datum/interactive_map/camera/New()
|
||||
. = ..()
|
||||
|
||||
zlevels = list(1,5)
|
||||
zlevel_data = list("1" = list(),"5" = list())
|
||||
|
||||
/obj/machinery/computer/camera/Destroy()
|
||||
..()
|
||||
html_machines -= src
|
||||
|
||||
/datum/interactive_map/camera/show(mob/mob, z, datum/html_interface/currui)
|
||||
z = text2num(z)
|
||||
if (!z) z = mob.z
|
||||
if (!(z in zlevels))
|
||||
mob << "zlevel([z]) good levels: [list2text(zlevels, " ")]"
|
||||
mob << "<span class='danger'>Unable to establish a connection: </span>You're too far away from the station!"
|
||||
return
|
||||
|
||||
if (src.interfaces)
|
||||
var/datum/html_interface/hi
|
||||
|
||||
if (!src.interfaces["[z]"])
|
||||
src.interfaces["[z]"] = new/datum/html_interface/nanotrasen(src, "Security Cameras", 900, 800, "[MAPHEADER] </script><script type=\"text/javascript\">var z = [z]; var tile_size = [world.icon_size]; var maxx = [world.maxx]; var maxy = [world.maxy];</script><script type=\"text/javascript\" src=\"advcamera.js\"></script>")
|
||||
|
||||
hi = src.interfaces["[z]"]
|
||||
|
||||
hi.updateContent("content", "<div id='switches'><a href=\"javascript:switchTo(0);\">Switch to mini map</a> <a href=\"javascript:switchTo(1);\">Switch to text-based</a> <a href='javascript:changezlevels();'>Change Z-Level</a> <a href='byond://?src=\ref[hi]&cancel=1'>Cancel Viewing</a></div> <div id=\"uiMapContainer\"><div id=\"uiMap\" unselectable=\"on\"></div></div><div id=\"textbased\"></div>")
|
||||
|
||||
src.update(z, TRUE)
|
||||
else
|
||||
hi = src.interfaces["[z]"]
|
||||
|
||||
hi = src.interfaces["[z]"]
|
||||
hi.show(mob, currui)
|
||||
src.updateFor(mob, hi, z)
|
||||
|
||||
/datum/interactive_map/camera/updateFor(hclient_or_mob, datum/html_interface/hi, z, single)
|
||||
//copy pasted code but given so many cameras i dont want to iterate over the entire worlds worth of cams, so we save our data based on zlevel
|
||||
if(!single) hi.callJavaScript("clearAll", new/list(), hclient_or_mob)
|
||||
data = zlevel_data["[z]"]
|
||||
for (var/list/L in data)
|
||||
hi.callJavaScript("add", L, hclient_or_mob)
|
||||
|
||||
#define toAdd 1
|
||||
#define toRemove 2
|
||||
#define toChange 4
|
||||
/datum/interactive_map/camera/update(z, ignore_unused = FALSE, var/obj/machinery/camera/single, adding = 0)
|
||||
if (src.interfaces["[z]"])
|
||||
var/zz = text2num(z)
|
||||
if(!zz) zz = z
|
||||
var/datum/html_interface/hi = src.interfaces["[zz]"]
|
||||
var/ID
|
||||
var/status
|
||||
var/name
|
||||
var/area
|
||||
var/pos_x
|
||||
var/pos_y
|
||||
var/pos_z
|
||||
var/see_x
|
||||
var/see_y
|
||||
if (ignore_unused || hi.isUsed())
|
||||
var/list/results = list()
|
||||
var/list/ourcams = camerasbyzlevel["[z]"]
|
||||
if(!istype(single))
|
||||
for (var/obj/machinery/camera/C in ourcams)
|
||||
var/turf/pos = get_turf(C)
|
||||
if(pos.z != zz)
|
||||
camerasbyzlevel["[zz]"] -= C //bad zlevel
|
||||
if(pos.z == 1 || pos.z == 5)
|
||||
camerasbyzlevel["[zz]"] |= C //try to fix the zlevel list.
|
||||
continue
|
||||
ID="\ref[C]"
|
||||
status = C.alarm_on //1 = alarming 0 = all is well
|
||||
if(!C.can_use())
|
||||
continue
|
||||
// weve already cleared the board son.status = -1 //mark this shit for removal
|
||||
name = C.c_tag
|
||||
var/area/AA = get_area(C)
|
||||
area = format_text(AA.name)
|
||||
pos_x = pos.x
|
||||
pos_y = pos.y
|
||||
pos_z = pos.z
|
||||
see_x = pos.x - WORLD_X_OFFSET[z]
|
||||
see_y = pos.y - WORLD_Y_OFFSET[z]
|
||||
results[++results.len]=list(ID, status, name,area,pos_x,pos_y,pos_z,see_x,see_y)
|
||||
else
|
||||
var/turf/pos = get_turf(single)
|
||||
if(pos.z != zz)
|
||||
camerasbyzlevel["[zz]"] -= single //bad zlevel
|
||||
if(pos.z == 1 || pos.z == 5)
|
||||
camerasbyzlevel["[zz]"] |= single //try to fix the zlevel list
|
||||
else adding = 2 //Set to remove
|
||||
ID="\ref[single]"
|
||||
status = single.alarm_on //1 = alarming 0 = all is well
|
||||
if(!single.can_use())
|
||||
adding = 2 //mark this shit for removal
|
||||
name = single.c_tag
|
||||
var/area/AA = get_area(single)
|
||||
area = format_text(AA.name)
|
||||
pos_x = pos.x
|
||||
pos_y = pos.y
|
||||
pos_z = pos.z
|
||||
see_x = pos.x - WORLD_X_OFFSET[z]
|
||||
see_y = pos.y - WORLD_Y_OFFSET[z]
|
||||
results[++results.len]=list(ID, status, name,area,pos_x,pos_y,pos_z,see_x,see_y,adding)
|
||||
|
||||
//src.data = results
|
||||
zlevel_data["[z]"] = results
|
||||
src.updateFor(null, hi, z, single) // updates for everyone
|
||||
#undef toAdd
|
||||
#undef toRemove
|
||||
#undef toChange
|
||||
/datum/interactive_map/camera/hiIsValidClient(datum/html_interface_client/hclient, datum/html_interface/hi)
|
||||
/* zlevel limit removed on /vg/
|
||||
var/z = ""
|
||||
|
||||
for (z in src.interfaces)
|
||||
if (src.interfaces[z] == hi) break
|
||||
*/
|
||||
. = ..()
|
||||
|
||||
var/los = hclient.client.mob.html_mob_check(/obj/machinery/computer/security/advanced)
|
||||
if(!los) hclient.client.mob.reset_view(hclient.client.mob)
|
||||
|
||||
return (. && los)
|
||||
|
||||
/datum/interactive_map/camera/Topic(href, href_list[], datum/html_interface_client/hclient)
|
||||
//world.log << "[src.type] topic call"
|
||||
if(..())
|
||||
//world.log << "[src.type] topic call handled by parent"
|
||||
return // Our parent handled it the topic call
|
||||
if (istype(hclient))
|
||||
if (hclient && hclient.client && hclient.client.mob && isliving(hclient.client.mob))
|
||||
var/mob/living/L = hclient.client.mob
|
||||
usr = L
|
||||
for(var/obj/machinery/computer/security/advanced/A in html_machines)
|
||||
if(usr.machine == A)
|
||||
A.Topic(href, href_list, hclient)
|
||||
break
|
||||
|
||||
/datum/interactive_map/camera/queueUpdate(z)
|
||||
var/datum/controller/process/html/html = processScheduler.getProcess("html")
|
||||
html.queue(crewmonitor, "update", z)
|
||||
|
||||
/datum/interactive_map/camera/sendResources(client/C)
|
||||
..()
|
||||
C << browse_rsc('camera.js', "advcamera.js")
|
||||
|
||||
/obj/machinery/computer/security/advanced/Topic(href, href_list)
|
||||
//world.log << "[src.type] topic call"
|
||||
if(..())
|
||||
return 0
|
||||
|
||||
if(href_list["cancel"])
|
||||
usr.reset_view(null)
|
||||
current = null
|
||||
if(href_list["view"])
|
||||
var/obj/machinery/camera/cam = locate(href_list["view"])
|
||||
if(cam)
|
||||
if(isAI(usr))
|
||||
var/mob/living/silicon/ai/A = usr
|
||||
A.eyeobj.forceMove(get_turf(cam))
|
||||
A.client.eye = A.eyeobj
|
||||
else
|
||||
use_power(50)
|
||||
current = cam
|
||||
usr.reset_view(current)
|
||||
return 1
|
||||
137
code/modules/html_interface/map/adv_sec/camera.js
Normal file
137
code/modules/html_interface/map/adv_sec/camera.js
Normal file
@@ -0,0 +1,137 @@
|
||||
/*!
|
||||
* Advanced Security Camera script
|
||||
*/
|
||||
|
||||
$(window).on("onUpdateContent", function(){
|
||||
$("#textbased").html("<table><colgroup><col id=\"name\" style=\"width: 24px;\" /><col id=\"pos\" style=\"width: 180px;\" /></colgroup><thead><tr><td><h3>Name</h3></td><td><h3> </h3></td><td><h3>Position</h3></td></tr></thead><tbody id=\"textbased-tbody\"></tbody></table>");
|
||||
|
||||
$("#uiMap").append("<img src=\"minimap_" + z + ".png\" id=\"uiMapImage\" width=\"256\" height=\"256\" unselectable=\"on\"/><div id=\"uiMapContent\" unselectable=\"on\"></div>");
|
||||
$("#uiMapContainer").append("<div id=\"uiMapTooltip\"></div>");
|
||||
if(!html5compat){
|
||||
var i = document.createElement("input");
|
||||
i.setAttribute("type", "range");
|
||||
html5compat = i.type !== "text";
|
||||
}
|
||||
if(html5compat){
|
||||
$("#switches").append("<div id='zoomcontainer' style='position: static; z-index: 9999; margin-bottom: -75px;'>Zoom: <div id='zoomslider' style='width: 75px; position: relative; top: -31px; right: -50px; z-index: 9999;'><input type=\"range\" onchange=\"setzoom(value);\" value=\"4\" step=\"0.5\" max=\"16\" min=\"0.5\" id=\"zoom\"></div><div id=\"zoomval\" style='position:relative; z-index: 9999; right: -135px; top: -80px; color: white;'>100%</div></div>");
|
||||
}
|
||||
else{
|
||||
$("#switches").append(" Zoom: <a href='javascript:changeZoom(-2);'>--</a> <a href='javascript:changeZoom(2);'>++</a> <span id=\"zoomval\" style='color: white;'>100%</span>");
|
||||
|
||||
}
|
||||
|
||||
var width = $("#uiMap").width();
|
||||
|
||||
scale_x = width / (maxx * tile_size);
|
||||
scale_y = width / (maxy * tile_size); // height is assumed to be the same
|
||||
$("#uiMap").css({ position: 'absolute',
|
||||
top: '50%',
|
||||
left: '50%',
|
||||
margin: '-512px 0 0 -512px',
|
||||
width: '256px',
|
||||
height: '256px',
|
||||
overflow: 'hidden',
|
||||
zoom: '4'
|
||||
});
|
||||
$('#uiMap').drags({handle : '#uiMapImage'});
|
||||
$('#uiMapTooltip')
|
||||
.off('click')
|
||||
.on('click', function (event) {
|
||||
event.preventDefault();
|
||||
$(this).fadeOut(400);
|
||||
});
|
||||
$('#uiMap').click(function(ev) {
|
||||
var el = document.getElementById('uiMap');
|
||||
var rect = el.getBoundingClientRect();
|
||||
var tileX = (((ev.clientX - rect.left - el.clientLeft + el.scrollLeft)) / defaultzoom + 7).toFixed(0);
|
||||
var tileY = (maxy-((ev.clientY - rect.top - el.clientTop + el.scrollTop)) / defaultzoom).toFixed(0);
|
||||
var xx = ((ev.clientX - rect.left - el.clientLeft + el.scrollLeft) / defaultzoom).toFixed(0);
|
||||
var yy = ((ev.clientY - rect.top - el.clientTop + el.scrollTop) / defaultzoom).toFixed(0);
|
||||
//var dot = document.createElement('div');
|
||||
//dot.setAttribute('style', 'position:absolute; width: 2px; height: 2px; top: '+top+'px; left: '+left+'px; background: red; z-index: 99999999;');
|
||||
//el.appendChild(dot);
|
||||
//alert(tileX + ' ' + tileY);
|
||||
window.location.href = "byond://?src=" + hSrc + "&action=crewclick&x=" + tileX + "&y=" + tileY + "&z=" + z;
|
||||
});
|
||||
}
|
||||
)
|
||||
|
||||
var updateMap = true;
|
||||
|
||||
function add(ID, status, name, area, pos_x, pos_y, see_pos_x, see_pos_y, adding)
|
||||
{
|
||||
if(adding > 0 && !(adding & 1)){ //let additions fall through.
|
||||
if(adding & 2){ //removal
|
||||
var toRemove = document.getElementById(ID);
|
||||
if(toRemove) toRemove.remove();
|
||||
return;
|
||||
}
|
||||
else if(adding & 4) //status change!
|
||||
var toChange = document.getElementById(ID);
|
||||
if(toChange){
|
||||
toChange.removeClass((status == 1 ? "good" : "average")); //remove the coloring
|
||||
toChange.addClass((status == 1 ? "average" : "good"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (updateMap && pos_x && pos_y)
|
||||
{
|
||||
var translated = tileToMapCoords(pos_x,pos_y);
|
||||
var href = "byond://?src="+hSrc+"&view="+ID;
|
||||
var dotElem = $("<div id=\""+ID+"\" class=\"mapIcon mapIcon16 icon-camera " + (status == 1 ? "average" : "good") + "\" style =\"top:" + translated.yy +"px; left: " + translated.xx + "px;\" z-index: 2; unselectable=\"off\"><div class=\"tooltip hidden\">" + name + (status == 1 ? " <span class='average'>Alarming</span>" : "") + " (" + area + ": "+see_pos_x+", "+see_pos_y+")</div></div>");
|
||||
//$("#uiMap").append("<div class=\"dot\" style=\"top: " + ty + "px; left: " + tx + "px; background-color: " + color + "; z-index: " + 999 + ";\"></div>");
|
||||
dotElem.data("href",href);
|
||||
$("#uiMap").append(dotElem);
|
||||
//$("#uiMapContainer").append(dotElem);
|
||||
//$("minimapImage").append(dotElem);
|
||||
//alert($("#uiMap").html());
|
||||
//$("#textbased").html(dotElem);
|
||||
|
||||
|
||||
function enable()
|
||||
{
|
||||
dotElem.addClass("active").css({ "border-color": color });
|
||||
}
|
||||
|
||||
function disable()
|
||||
{
|
||||
dotElem.removeClass("active").css({ "border-color": "transparent" });
|
||||
}
|
||||
|
||||
function click(e)
|
||||
{
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
|
||||
window.location.href = "byond://?src=" + hSrc + "&action=select_person&name=" + encodeURIComponent(name);
|
||||
}
|
||||
|
||||
$('.mapIcon')
|
||||
.off('mouseenter mouseleave')
|
||||
.on('mouseenter',
|
||||
function (event) {
|
||||
var self = this;
|
||||
$('#uiMapTooltip')
|
||||
.html($(this).children('.tooltip').html())
|
||||
.show()
|
||||
.stopTime()
|
||||
.oneTime(5000, 'hideTooltip', function () {
|
||||
$(this).fadeOut(500);
|
||||
});
|
||||
}
|
||||
);
|
||||
dotElem.on('click', function (event) {
|
||||
//event.preventDefault();
|
||||
var href = $(this).data('href');
|
||||
//alert(href);
|
||||
if (href != null)
|
||||
{
|
||||
window.location.href = href;
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -63,23 +63,3 @@ body
|
||||
top: -2px;
|
||||
}
|
||||
|
||||
.dot
|
||||
{
|
||||
transition: .2s all;
|
||||
position: absolute;
|
||||
width: 3px;
|
||||
height: 3px;
|
||||
margin-top: 0px;
|
||||
margin-left: 0px;
|
||||
border: 1px solid transparent;
|
||||
}
|
||||
|
||||
.dot.active
|
||||
{
|
||||
z-index: 9999 !important;
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
margin-top: -2px;
|
||||
margin-left: -3px;
|
||||
}
|
||||
|
||||
|
||||
@@ -91,7 +91,7 @@ var/global/datum/interactive_map/crewmonitor/crewmonitor = new
|
||||
|
||||
src.jobs = jobs
|
||||
|
||||
/datum/interactive_map/crewmonitor/show(mob/mob, z)
|
||||
/datum/interactive_map/crewmonitor/show(mob/mob, z, datum/html_interface/currui = null)
|
||||
if (!z) z = mob.z
|
||||
if (z == CENTCOMM_Z) return
|
||||
|
||||
@@ -110,7 +110,7 @@ var/global/datum/interactive_map/crewmonitor/crewmonitor = new
|
||||
hi = src.interfaces["[z]"]
|
||||
|
||||
hi = src.interfaces["[z]"]
|
||||
hi.show(mob)
|
||||
hi.show(mob, currui)
|
||||
src.updateFor(mob, hi, z)
|
||||
|
||||
/datum/interactive_map/crewmonitor/updateFor(hclient_or_mob, datum/html_interface/hi, z)
|
||||
|
||||
@@ -246,6 +246,68 @@
|
||||
* Crew manifest script
|
||||
*/
|
||||
|
||||
$(window).on("onUpdateContent", function(){
|
||||
$("#textbased").html("<table><colgroup><col id=\"name\" style=\"width: 24px;\" /><col id=\"pos\" style=\"width: 180px;\" /></colgroup><thead><tr><td><h3>Name</h3></td><td><h3> </h3></td><td><h3>Position</h3></td></tr></thead><tbody id=\"textbased-tbody\"></tbody></table>");
|
||||
|
||||
$("#uiMap").append("<img src=\"minimap_" + z + ".png\" id=\"uiMapImage\" width=\"256\" height=\"256\" unselectable=\"on\"/><div id=\"uiMapContent\" unselectable=\"on\"></div>");
|
||||
$("#uiMapContainer").append("<div id=\"uiMapTooltip\"></div>");
|
||||
if(!html5compat){
|
||||
var i = document.createElement("input");
|
||||
i.setAttribute("type", "range");
|
||||
html5compat = i.type !== "text";
|
||||
}
|
||||
if(html5compat){
|
||||
$("#switches").append("<div id='zoomcontainer' style='position: static; z-index: 9999; margin-bottom: -75px;'>Zoom: <div id='zoomslider' style='width: 75px; position: relative; top: -31px; right: -50px; z-index: 9999;'><input type=\"range\" onchange=\"setzoom(value);\" value=\"4\" step=\"0.5\" max=\"16\" min=\"0.5\" id=\"zoom\"></div><div id=\"zoomval\" style='position:relative; z-index: 9999; right: -135px; top: -80px; color: white;'>100%</div></div>");
|
||||
}
|
||||
else{
|
||||
$("#switches").append(" Zoom: <a href='javascript:changeZoom(-2);'>--</a> <a href='javascript:changeZoom(2);'>++</a> <span id=\"zoomval\" style='color: white;'>100%</span>");
|
||||
|
||||
}
|
||||
//$("body")[0].onselectstart = disableSelection;
|
||||
|
||||
var width = $("#uiMap").width();
|
||||
|
||||
scale_x = width / (maxx * tile_size);
|
||||
scale_y = width / (maxy * tile_size); // height is assumed to be the same
|
||||
/*
|
||||
$("#uiMap").on("click", function(e)
|
||||
{
|
||||
var x = ((((e.clientX - 8) / scale_x) / tile_size) + 1).toFixed(0);
|
||||
var y = ((maxy - (((e.clientY - 8) / scale_y) / tile_size)) + 1).toFixed(0);
|
||||
|
||||
window.location.href = "byond://?src=" + hSrc + "&action=select_position&x=" + x + "&y=" + y;
|
||||
});*/
|
||||
$("#uiMap").css({ position: 'absolute',
|
||||
top: '50%',
|
||||
left: '50%',
|
||||
margin: '-512px 0 0 -512px',
|
||||
width: '256px',
|
||||
height: '256px',
|
||||
overflow: 'hidden',
|
||||
zoom: '4'
|
||||
});
|
||||
$('#uiMap').drags({handle : '#uiMapImage'});
|
||||
$('#uiMapTooltip')
|
||||
.off('click')
|
||||
.on('click', function (event) {
|
||||
event.preventDefault();
|
||||
$(this).fadeOut(400);
|
||||
});
|
||||
$('#uiMap').click(function(ev) {
|
||||
var el = document.getElementById('uiMap');
|
||||
var rect = el.getBoundingClientRect();
|
||||
var tileX = (((ev.clientX - rect.left - el.clientLeft + el.scrollLeft)) / defaultzoom + 7).toFixed(0);
|
||||
var tileY = (maxy-((ev.clientY - rect.top - el.clientTop + el.scrollTop)) / defaultzoom).toFixed(0);
|
||||
var xx = ((ev.clientX - rect.left - el.clientLeft + el.scrollLeft) / defaultzoom).toFixed(0);
|
||||
var yy = ((ev.clientY - rect.top - el.clientTop + el.scrollTop) / defaultzoom).toFixed(0);
|
||||
//var dot = document.createElement('div');
|
||||
//dot.setAttribute('style', 'position:absolute; width: 2px; height: 2px; top: '+top+'px; left: '+left+'px; background: red; z-index: 99999999;');
|
||||
//el.appendChild(dot);
|
||||
//alert(tileX + ' ' + tileY);
|
||||
window.location.href = "byond://?src=" + hSrc + "&action=crewclick&x=" + tileX + "&y=" + tileY + "&z=" + z;
|
||||
});
|
||||
}
|
||||
)
|
||||
|
||||
var updateMap = true;
|
||||
var ijobNames = {
|
||||
|
||||
@@ -31,9 +31,7 @@ var/const/ALLOW_CENTCOMM = FALSE
|
||||
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\datum/interactive_map/proc/updateFor() called tick#: [world.time]")
|
||||
// This check will succeed if updateFor is called after showing to the player, but will fail
|
||||
// on regular updates. Since we only really need this once we don't care if it fails.
|
||||
|
||||
hi.callJavaScript("clearAll", new/list(), hclient_or_mob)
|
||||
|
||||
for (var/list/L in data)
|
||||
hi.callJavaScript("add", L, hclient_or_mob)
|
||||
|
||||
@@ -45,7 +43,8 @@ var/const/ALLOW_CENTCOMM = FALSE
|
||||
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\datum/interactive_map/proc/hiIsValidClient() called tick#: [world.time]")
|
||||
return (hclient.client.mob && hclient.client.mob.stat == CONSCIOUS)
|
||||
|
||||
/datum/interactive_map/Topic(href, href_list[], datum/html_interface_client/hclient)
|
||||
/datum/interactive_map/Topic(href, href_list[], datum/html_interface_client/hclient, datum/html_interface/currui)
|
||||
..()
|
||||
if (istype(hclient))
|
||||
if(hclient && hclient.client && hclient.client.mob)
|
||||
var/mob/living/L = hclient.client.mob
|
||||
@@ -54,7 +53,7 @@ var/const/ALLOW_CENTCOMM = FALSE
|
||||
if("changez")
|
||||
var/newz = text2num(href_list["value"])
|
||||
if(newz)
|
||||
show(L,newz)
|
||||
show(L,newz,currui)
|
||||
return 1 //Tell children we handled the topic
|
||||
|
||||
// Override this to queue an interface to be updated
|
||||
|
||||
@@ -117,4 +117,24 @@ a { display: inline; }
|
||||
|
||||
.oxygen_light {
|
||||
color: #6698FF;
|
||||
}
|
||||
}
|
||||
|
||||
.dot
|
||||
{
|
||||
transition: .2s all;
|
||||
position: absolute;
|
||||
width: 3px;
|
||||
height: 3px;
|
||||
margin-top: 0px;
|
||||
margin-left: 0px;
|
||||
border: 1px solid transparent;
|
||||
}
|
||||
|
||||
.dot.active
|
||||
{
|
||||
z-index: 9999 !important;
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
margin-top: -2px;
|
||||
margin-left: -3px;
|
||||
}
|
||||
|
||||
@@ -239,70 +239,7 @@ var scale_x;
|
||||
var scale_y;
|
||||
var defaultzoom = 4;
|
||||
var html5compat = false;
|
||||
function disableSelection(){ return false; };
|
||||
|
||||
$(window).on("onUpdateContent", function(){
|
||||
$("#textbased").html("<table><colgroup><col id=\"name\" style=\"width: 24px;\" /><col id=\"pos\" style=\"width: 180px;\" /></colgroup><thead><tr><td><h3>Name</h3></td><td><h3> </h3></td><td><h3>Position</h3></td></tr></thead><tbody id=\"textbased-tbody\"></tbody></table>");
|
||||
|
||||
$("#uiMap").append("<img src=\"minimap_" + z + ".png\" id=\"uiMapImage\" width=\"256\" height=\"256\" unselectable=\"on\"/><div id=\"uiMapContent\" unselectable=\"on\"></div>");
|
||||
$("#uiMapContainer").append("<div id=\"uiMapTooltip\"></div>");
|
||||
if(!html5compat){
|
||||
var i = document.createElement("input");
|
||||
i.setAttribute("type", "range");
|
||||
html5compat = i.type !== "text";
|
||||
}
|
||||
if(html5compat){
|
||||
$("#switches").append("<div id='zoomcontainer' style='position: static; z-index: 9999; margin-bottom: -75px;'>Zoom: <div id='zoomslider' style='width: 75px; position: relative; top: -31px; right: -50px; z-index: 9999;'><input type=\"range\" onchange=\"setzoom(value);\" value=\"4\" step=\"0.5\" max=\"16\" min=\"0.5\" id=\"zoom\"></div><div id=\"zoomval\" style='position:relative; z-index: 9999; right: -135px; top: -80px; color: white;'>100%</div></div>");
|
||||
}
|
||||
else{
|
||||
$("#switches").append(" Zoom: <a href='javascript:changeZoom(-2);'>--</a> <a href='javascript:changeZoom(2);'>++</a> <span id=\"zoomval\" style='color: white;'>100%</span>");
|
||||
|
||||
}
|
||||
//$("body")[0].onselectstart = disableSelection;
|
||||
|
||||
var width = $("#uiMap").width();
|
||||
|
||||
scale_x = width / (maxx * tile_size);
|
||||
scale_y = width / (maxy * tile_size); // height is assumed to be the same
|
||||
/*
|
||||
$("#uiMap").on("click", function(e)
|
||||
{
|
||||
var x = ((((e.clientX - 8) / scale_x) / tile_size) + 1).toFixed(0);
|
||||
var y = ((maxy - (((e.clientY - 8) / scale_y) / tile_size)) + 1).toFixed(0);
|
||||
|
||||
window.location.href = "byond://?src=" + hSrc + "&action=select_position&x=" + x + "&y=" + y;
|
||||
});*/
|
||||
$("#uiMap").css({ position: 'absolute',
|
||||
top: '50%',
|
||||
left: '50%',
|
||||
margin: '-512px 0 0 -512px',
|
||||
width: '256px',
|
||||
height: '256px',
|
||||
overflow: 'hidden',
|
||||
zoom: '4'
|
||||
});
|
||||
$('#uiMap').drags({handle : '#uiMapImage'});
|
||||
$('#uiMapTooltip')
|
||||
.off('click')
|
||||
.on('click', function (event) {
|
||||
event.preventDefault();
|
||||
$(this).fadeOut(400);
|
||||
});
|
||||
$('#uiMap').click(function(ev) {
|
||||
var el = document.getElementById('uiMap');
|
||||
var rect = el.getBoundingClientRect();
|
||||
var tileX = (((ev.clientX - rect.left - el.clientLeft + el.scrollLeft)) / defaultzoom + 7).toFixed(0);
|
||||
var tileY = (maxy-((ev.clientY - rect.top - el.clientTop + el.scrollTop)) / defaultzoom).toFixed(0);
|
||||
var xx = ((ev.clientX - rect.left - el.clientLeft + el.scrollLeft) / defaultzoom).toFixed(0);
|
||||
var yy = ((ev.clientY - rect.top - el.clientTop + el.scrollTop) / defaultzoom).toFixed(0);
|
||||
//var dot = document.createElement('div');
|
||||
//dot.setAttribute('style', 'position:absolute; width: 2px; height: 2px; top: '+top+'px; left: '+left+'px; background: red; z-index: 99999999;');
|
||||
//el.appendChild(dot);
|
||||
//alert(tileX + ' ' + tileY);
|
||||
window.location.href = "byond://?src=" + hSrc + "&action=crewclick&x=" + tileX + "&y=" + tileY + "&z=" + z;
|
||||
});
|
||||
}
|
||||
)
|
||||
function switchTo(i)
|
||||
{
|
||||
if (i == 1)
|
||||
|
||||
Reference in New Issue
Block a user