# HG changeset patch # User Matti Hamalainen # Date 1397411750 -10800 # Node ID b50a7ab76548127feea1eab741e4eaf32430fba9 # Parent e908103cdcd870ade7b7686e49a983ca3116b284 Implement client-side code for tracking player position. diff -r e908103cdcd8 -r b50a7ab76548 map.js --- 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; + } + }); + } +}