Mercurial > hg > batmud > gmap2
view markers.js @ 296:625cac7c230d gmap2
Use CSS class instead of direct style / background color manipulation.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sat, 19 Nov 2016 02:27:01 +0200 |
parents | 5c15b45947f2 |
children | 87a17b1fccb5 |
line wrap: on
line source
// $Id: markers.js 2284 2009-09-21 12:47:20Z jeskko $ // Marker types var LOCF_M_SCENIC1 = (0x000001); /* '?' Scenic marker */ var LOCF_M_SCENIC2 = (0x000002); /* '%' Shrine marker/etc */ var LOCF_M_PCITY = (0x000004); /* 'C' Player city */ var LOCF_M_CITY = (0x000008); /* 'c' City */ var LOCF_M_MASK = (0x00000F); // Location types var LOCF_T_SHRINE = (0x000010); /* 'S' Raceshrine */ var LOCF_T_GUILD = (0x000020); /* 'G' Guild */ var LOCF_T_SS = (0x000040); /* 'P' Player guild/Secret Society */ var LOCF_T_MONSTER = (0x000080); /* 'M' Special monster */ var LOCF_T_TRAINER = (0x000100); /* 'T' Guild trainer */ var LOCF_T_FORT = (0x000200); /* 'F' Regions fort */ var LOCF_T_MASK = (0x00FFF0); var LOCF_MASK = (LOCF_M_MASK | LOCF_T_MASK); // Extra flags var LOCF_INVIS = (0x010000); /* '-' Invisible marker / Don't show label */ var LOCF_CLOSED = (0x020000); /* '!' Area is CLOSED */ var LOCF_INSTANCED = (0x040000); /* 'I' Location is "instanced" for each player */ var LOCF_INVALID = (0x400000); /* Possibly invalid location */ var LOCF_NOMARKER = (0x800000); /* Location has no marker in mapdata or explicitly defined */ var LOCF_Q_MASK = (0xFF0000); // List of marker types var pmapMarkerTypes = [ ["Guilds", "guild"], ["PCities", "pcity"], ["Shrines", "shrine"], ["Areas", "default"], ["Mob", "monster"], ["Trn", "trainer"], ]; // Some global vars var pmapMMgr; var pmapAreas = []; var pmapMarkers = []; var pmapMIndex; var pmapMarkerInfo = []; var pmapSideBuiltinHTML, pmapSidePublicHTML, pmapSidePrivateHTML; var pmapInfoWindow; function pmapMyClick(i) { pmap.panTo(pmapMarkers[i].getPosition()); setTimeout("pmapShowInfo("+ i +")", 1000); } function pmapShowInfo(i) { google.maps.event.trigger(pmapMarkers[i], "click"); } function pmapLocGetLocationType(flags, def) { switch (flags & LOCF_M_MASK) { case LOCF_M_CITY: return "city"; case LOCF_M_PCITY: return "pcity"; default: switch (flags & LOCF_T_MASK) { case LOCF_T_SHRINE: return "shrine"; case LOCF_T_GUILD: return "guild"; case LOCF_T_SS: return "ss"; case LOCF_T_MONSTER: return "monster"; case LOCF_T_TRAINER: return "trainer"; case LOCF_T_FORT: return "fort"; } break; } return def ? def : "default"; } function pmapCreateMarker(m, mclass) { type = pmapLocGetLocationType(m["flags"], m["type"]); if (m["name"].indexOf('FERRY') == 0) type = "ferry"; pname = (type != "default" ? type.toUpperCase()+" " : "") + m["name"]; if (m["flags"] & LOCF_CLOSED) pname += " (CLOSED)"; var marker = new MarkerWithLabel( { position: pmapMapCoordsToLatLng(new google.maps.Point(m["x"] * 2 + 1, m["y"] * 2 + 1), 7), icon: pmapIcons[type], draggable: false, labelContent: m["name"], labelAnchor: new google.maps.Point(25, 0), labelClass: "labels", labelStyle: {opacity: 0.75} }); google.maps.event.addListener(marker, "click", function() { pmapInfoWindow.setContent("<div class=\"infowin\">"+ m["html"] +"</div>"); pmapInfoWindow.open(pmap, this); }); if (mclass == "builtin") pmapSideBuiltinHTML += '<div id="marker'+ pmapMIndex +'" class="c_'+ m["continent"].toLowerCase()+'"><div> </div><a href="javascript:pmapMyClick('+ pmapMIndex +')">'+ pname +'</a></div>'; if (mclass == "private") pmapSidePrivateHTML += '<a href="javascript:pmapMyClick(' + pmapMIndex + ')">' + pname + '</a><br>'; if (mclass == "public") pmapSidePublicHTML += '<a href="javascript:pmapMyClick(' + pmapMIndex + ')">' + pname + '</a><br>'; pmapMarkers[pmapMIndex] = marker; pmapMarkerInfo[pmapMIndex] = [type, m["continent"], m]; pmapMIndex++; if (pmapAreas[type] == undefined) pmapAreas[type] = []; pmapAreas[type].push(marker); return marker; } // Wrapper function for adding markers, // checks if the array is defined first. function pmapAddMarkers(mlist, minzoom, maxzoom) { if (mlist) pmapMMgr.addMarkers(mlist, minzoom, maxzoom); } function pmapInitializeMarkers() { pmapInfoWindow = new google.maps.InfoWindow; google.maps.event.addListener(pmap, 'click', function() { pmapInfoWindow.close(); }); pmapMMgr = new MarkerManager(pmap); google.maps.event.addListener(pmapMMgr, 'loaded', pmapLoadMarkers); } function pmapLoadMarkers() { pmapMIndex = 0; // // Parse regular markers from JSON // XDownloadUrl("markers.json", function(data, responseCode) { var markers = JSON.parse(data); pmapSideBuiltinHTML = ""; pmapSidePublicHTML = ""; pmapSidePrivateHTML = ""; for (var nid = 0; nid < markers.length; nid++) { pmapCreateMarker(markers[nid], "builtin"); } pmapAddMarkers(pmapAreas["default"], 7, 11); pmapAddMarkers(pmapAreas["guild"], 6, 11); pmapAddMarkers(pmapAreas["shrine"], 6, 11); pmapAddMarkers(pmapAreas["trainer"], 6, 11); pmapAddMarkers(pmapAreas["ferry"], 4, 11); pmapAddMarkers(pmapAreas["city"], 4, 11); pmapAddMarkers(pmapAreas["monster"], 8, 11); pmapAddMarkers(pmapAreas["pcity"], 8, 11); pmapAddMarkers(pmapAreas["fort"], 8, 11); pmapMMgr.refresh(); google.maps.event.trigger(pmap, "foobar"); document.getElementById("sidecontent").innerHTML = pmapSideBuiltinHTML; }); // // Parse tradelane markers from another JSON // XDownloadUrl("tradelane.json", function(data,responseCode) { var markers = JSON.parse(data); for (var nid = 0; nid < markers.length; nid++) { pmapCreateMarker(markers[nid], "tradelane"); } pmapAddMarkers(pmapAreas["tradelane"], 5, 11); pmapMMgr.refresh(); }); // // Create GMap polylines from tradelane line data // XDownloadUrl("trlines.json", function(data,responseCode) { var lines = JSON.parse(data); // Go through array of line elements for (var nid = 0; nid < lines.length; nid++) { var points = lines[nid]; var coords = []; // Create polyline points for (var npt = 0; npt < points.length; npt++) { var pt = points[npt]; coords.push(pmapMapCoordsToLatLng(new google.maps.Point(pt["x"] * 2 + 1, pt["y"] * 2 + 1), 7)); } // Create new polyline and add it to map overlay var poly = new google.maps.Polyline({ path: coords, strokeColor: "#ffffff", strokeWeight: 2, strokeOpacity: 0.6 }); poly.setMap(pmap); } }); // // Create map control elements // var str = "<div class=\"vcontinents\">"; var n = 0; for (var i = 0; i < pmapContinents.length; i++) { var c = pmapContinents[i][0]; str += "<span id=\"sp"+c+"\" class=\"continent\"><a href=\"javascript:pmapToggleVisContinent('"+c+"')\">"+c+"</a></span>\n"; // if (n == 2) str += "<br />\n"; n++; } str += "<span id=\"spall_c\" class=\"continent\"><a href=\"javascript:pmapToggleVisContinent('all_c')\">All</a></span>\n"; str += "</div>\n"; str +="<div class=\"vtypes\">\n"; n = 0; for (var i = 0; i < pmapMarkerTypes.length; i++) { var q = pmapMarkerTypes[i]; if (q != null) { var c = q[1]; str += "<span id=\"sp"+c+"\" class=\"vtype\"><a href=\"javascript:pmapToggleVisType('"+c+"')\">"+pmapMarkerTypes[i][0]+"</a></span>\n"; // if (n == 2) str += "<br />\n"; n++; } } str += "<span id=\"spall_t\" class=\"vtype\"><a href=\"javascript:pmapToggleVisType('all_t')\">All</a></span></div>\n"; document.getElementById("controls").innerHTML = str; // // Set default states // pmapSetVisContinent("all_c", true); pmapSetVisType("all_t", true); pmapUpdateVisible(); } function pmapGetMarkerIndexByCoords(mx, my) { for (var i = 0; i < pmapMarkerInfo.length; i++) { var m = pmapMarkerInfo[i][2]; if (m["x"] == mx && m["y"] == my) return i; } return null; } // // Map menu / sidebar control code // var markerVisStates = []; function pmapSetFilterVisState(c, show) { markerVisStates[c] = show; var elem = document.getElementById("sp" + c); elem.classList.add(show ? "visible" : "hidden"); elem.classList.remove(!show ? "visible" : "hidden"); } function pmapUpdateVisible() { for (var i = 0; i < pmapMarkerInfo.length; i++) { var elem = document.getElementById("marker" + i); if (elem) { var show = markerVisStates[pmapMarkerInfo[i][0]] && markerVisStates[pmapMarkerInfo[i][1]]; elem.style.display = show ? "block" : "none"; pmapMarkers[i].setVisible(show); } } } function pmapSetVisContinent(c, show) { if (c == "all_c") { for (var i = 0; i < pmapContinents.length; i++) pmapSetFilterVisState(pmapContinents[i][0], show); } pmapSetFilterVisState(c, show); } function pmapSetVisType(c, show) { if (c == "all_t") { for (var i in pmapAreas) markerVisStates[i] = show; for (var i = 0; i < pmapMarkerTypes.length; i++) pmapSetFilterVisState(pmapMarkerTypes[i][1], show); } pmapSetFilterVisState(c, show); } function pmapToggleVisContinent(c) { var first = true; if (c == "all_c") first = false; else { for (var i = 0; i < pmapContinents.length; i++) { var q = pmapContinents[i][0]; if (!markerVisStates[q]) { first = false; break; } } } if (first) { pmapSetVisContinent("all_c", false); pmapSetVisContinent(c, true); } else pmapSetVisContinent(c, !markerVisStates[c]); pmapUpdateVisible(); } function pmapToggleVisType(c) { var first = true; if (c == "all_t") first = false; else { for (var i = 0; i < pmapMarkerTypes.length; i++) { var q = pmapMarkerTypes[i][1]; if (!markerVisStates[q]) { first = false; break; } } } if (first) { pmapSetVisType("all_t", false); pmapSetVisType(c, true); } else pmapSetVisType(c, !markerVisStates[c]); pmapUpdateVisible(); }