Mercurial > hg > batmud > gmap2
changeset 266:b50a7ab76548 gmap2
Implement client-side code for tracking player position.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sun, 13 Apr 2014 20:55:50 +0300 |
parents | e908103cdcd8 |
children | 96ce03724648 |
files | map.js |
diffstat | 1 files changed, 54 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/map.js Sun Apr 13 20:52:11 2014 +0300 +++ b/map.js Sun Apr 13 20:55:50 2014 +0300 @@ -4,6 +4,10 @@ var pmap; var pmapCanvas; +var pmapPlrPrevPos = {"x": 8192, "y": 8192}; +var pmapPlrMarker; +var pmapUpdateTime, pmapUpdateDelay; + var pmapTileSize = 256; var pmapTileOrig = pmapTileSize / 2.0; var pmapTilePxPerDeg = pmapTileSize / 360.0; @@ -96,8 +100,12 @@ if (typeof(args) == "object") { + var posSet = false; if ("zoom" in args && "x" in args && "y" in args) { + pmapPlrPrevPos = {"x": args.x, "y": args.y}; + posSet = true; + google.maps.event.addDomListener(pmap, "foobar", function() { pmap.setZoom(args.zoom); @@ -107,6 +115,24 @@ pmapMyClick(tgtMarker); }); } + + if ("token" in args && args.token != "") + { + // Create player position marker + pmapPlrMarker = new google.maps.Marker( + { + position: pmapMapCoordsToLatLng(new google.maps.Point(0, 0)), + draggable: false, + map: pmap + }); + + if (!posSet) + pmap.setZoom(9); + + pmapToken = args.token; + pmapUpdateTime = Date.now(); + pmapUpdateDelay = 0; + pmapUpdatePID = setInterval("pmapUpdatePlayerPosition()", 500); } } @@ -168,3 +194,31 @@ window.prompt("Copy to clipboard: Ctrl+C, Enter", str); } } + + +function pmapUpdatePlayerPosition() +{ + if (pmapToken && Date.now() - pmapUpdateTime >= pmapUpdateDelay) + { +// XDownloadUrl("http://www.bat.org/playerpos.php?token="+pmapToken, + XDownloadUrl("http://tnsp.org/gmapng/playerpos.php?token="+pmapToken, + function(data, responseCode) + { + if (data != "") + { + var pos = JSON.parse(data); + pmapUpdateTime = Date.now(); + if (typeof(pos) == "object" && (pos.x != pmapPlrPrevPos.x || pos.y != pmapPlrPrevPos.y)) + { + pmapPlrMarker.setPosition(pmapMapCoordsToLatLng(new google.maps.Point(pos.x * 2 + 1, pos.y * 2 + 1), 7)); + pmap.panTo(pmapMapCoordsToLatLng(new google.maps.Point(pos.x, pos.y), 6)); + pmapPlrPrevPos = pos; + pmapUpdateDelay = 500; + } + else + if (pmapUpdateDelay < 5000) + pmapUpdateDelay += 500; + } + }); + } +}