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;
+      }
+    });
+  }
+}