From ba26006bace9341bb81c25f84ba5f71462b92233 Mon Sep 17 00:00:00 2001 From: Skylar Ittner Date: Thu, 4 Aug 2016 00:06:39 -0600 Subject: [PATCH] All kinds of stuff happened, I can't even. Everything seems to work OK though. --- config.xml | 2 +- .../2.2.1/taskArtifacts/cache.properties.lock | Bin 17 -> 17 bytes .../2.2.1/taskArtifacts/fileHashes.bin | Bin 137339 -> 153340 bytes .../2.2.1/taskArtifacts/fileSnapshots.bin | Bin 1384095 -> 2186822 bytes .../2.2.1/taskArtifacts/outputFileStates.bin | Bin 21002 -> 21842 bytes .../2.2.1/taskArtifacts/taskArtifacts.bin | Bin 84256 -> 92351 bytes platforms/android/AndroidManifest.xml | 2 +- platforms/android/android.json | 2 +- .../android/assets/www/cordova_plugins.js | 2 +- platforms/android/assets/www/js/home.js | 355 ++++++++++++++++++ platforms/android/assets/www/js/location.js | 50 ++- platforms/android/assets/www/js/main.js | 48 +++ .../android/assets/www/screens/intro.html | 42 ++- .../android/assets/www/screens/inventory.html | 31 +- .../android/assets/www/screens/place.html | 4 + .../android/assets/www/screens/profile.html | 4 +- .../assets/www/screens/servererror.html | 20 + .../android/platform_www/cordova_plugins.js | 2 +- platforms/android/res/xml/config.xml | 2 +- platforms/browser/browser.json | 2 +- platforms/browser/config.xml | 2 +- .../browser/platform_www/cordova_plugins.js | 2 +- platforms/browser/www/config.xml | 2 +- platforms/browser/www/cordova_plugins.js | 2 +- platforms/browser/www/js/home.js | 355 ++++++++++++++++++ platforms/browser/www/js/location.js | 50 ++- platforms/browser/www/js/main.js | 48 +++ platforms/browser/www/screens/intro.html | 42 ++- platforms/browser/www/screens/inventory.html | 31 +- platforms/browser/www/screens/place.html | 4 + platforms/browser/www/screens/profile.html | 4 +- .../browser/www/screens/servererror.html | 20 + .../package.json | 4 +- .../phonegap-plugin-barcodescanner/plugin.xml | 2 +- .../src/windows/BarcodeScannerProxy.js | 44 ++- res/splash.9.png | Bin 32427 -> 66627 bytes www/js/home.js | 355 ++++++++++++++++++ www/js/location.js | 50 ++- www/js/main.js | 48 +++ www/screens/intro.html | 42 ++- www/screens/inventory.html | 31 +- www/screens/place.html | 4 + www/screens/profile.html | 122 +++--- www/screens/servererror.html | 20 + 44 files changed, 1660 insertions(+), 192 deletions(-) create mode 100644 platforms/android/assets/www/js/home.js create mode 100644 platforms/android/assets/www/screens/servererror.html create mode 100644 platforms/browser/www/js/home.js create mode 100644 platforms/browser/www/screens/servererror.html create mode 100644 www/js/home.js create mode 100644 www/screens/servererror.html diff --git a/config.xml b/config.xml index b66354d..b1b64b1 100644 --- a/config.xml +++ b/config.xml @@ -1,5 +1,5 @@ - + TerranQuest Augmented Reality fantasy game diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties.lock b/platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties.lock index 7babce59e42007635c5fd90c468cdc9bddd25922..885008597e6931abd061a591b1d85eec736d260e 100644 GIT binary patch literal 17 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 diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/outputFileStates.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/outputFileStates.bin index 8745fad44dea6640a7554251f661c9193bc85115..b2704fe8c9be200591f1383479f7bd0cf41c6256 100644 GIT binary patch delta 1487 zcmeBL!gy&F;|6;P$^52(&qmvqPIYDggAldD;< zd_wwx2J5VblWQOR*$%bq4$K5Lhl=ANo7nsz;-O-b7sv!e@bdF3EegwkDP90m%zyFK zlg>M(tx%I)VB$hI-UNtrIQT)uli=b{98F$qYWWEf4?Z*bg^YrLc(Uz!-PaeCpo)J? zlC|WY=%4yyM;;4AD5z<&f$RwZt3%<6tD}G2hiaZM`Gc&2fa5~1+;s09{Sd)WlgS)% z76PtJMqj>o?@fei*O+V}m!T1Sv)xo<`-5tzpc~9hVX;BgwSwC$p~kM8JVP!(Ai3zP zSAbm}G<<`8O@1KvK%;8zx$VvpOr21bW-t?~(~8dWMarFoh=(*x-XR~u;?2~0W253< z@r?$vc{c}m?Bc9HV+>Rv0K^<1-0R&n>uGM&YLKQ|39l1SWwn?54mv8l@*PO_iWbjL zRN1-v&t)D^J+}ZP+kfUyGpg*>J#t%3j&O^BWDg#?cLFL~54HF;=PR=V$;mfC(#QON zSD|WdU$WCNhh=jCNcK>N{99DnYB?vfdpt8Yf@B}`87)DT_3|wWh*;HH3z9vtkLMn$ zZ2c>nf=e6`o7aJ)T{}-0qe?eSah#~%^Cuo8yJ~IAXH?m)w7MR{whK29BJC5Bq+{?MnhlAF^zmj4aK-@nf+` g?mAn)Ng&xXE1I)VWfvX~GXE=*4K74m-aIb@0Ei{V6aWAK delta 125 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 SPDCW*HQfRdE#&2bK+a#PjVew6 delta 1721 zcmZ{k2{cuC9LL}PzRR;b<38Jac6p37CL)TmWos-iibNPWm0g-RNjgkXBK*^{%w#P~ znsCcY3yMTh&md(PDp|5b6UmY0y(eYn%-nN+=l;+4^ZWmPzwf>Od+XZy^3wTICAabs zcvogK=hnho0(ofyfw*>A_jyJjpgzmGk~M)q%2?JLuMh|VRPK6nbfbQy$7?Fkhi0^> zbZH-$Ds2m=rK4b`3=KBR)WaLHG&m}22kqp%G2Ll_nevK;x64%`RUlh#5H`z4L3afc z^a)=>P~}}OY9+f@9Cx-&rIAp3PJ4U6($oeHD8Al*omC>_5+j64lz?$!( zESy~Rm({q(@`k@o!|IvweG#=xzeJwOtGTf$@+~gkR))aPyd^B<)5EM`wf3sx4h$9F zw$2Ak3Juu8f%0J7IcOcg4h;}8ibAeyZug@1-b~(W`7i9`+E?r)R^wM@lW4GKzU9Pf zYygPc#ear7ixse{Szw#V4Nk2>6*nG^&BULZwUnwhj%o>W{DzopNr0m7Npg4b@Ty0A z*fg%45Z3&f-&40@NJG|Bh?{AHyWJ5+unP^e+i5o#bTyeSBT=^_Vylqcr$zI>=n41P zul)UbtUX#*kSKy$y9nLE+aH(!{8GIrNHJ6{f znmMv@P;QDjx|*NxM7Y?W+WQ39Fir!(91;ZRl(BtpD@t@f8+V0 z#%R+zSJom5e%(7`N0J;B24hQUVj8?_u62z z>DdjDg&jNJjb0zKaMlT8Sc3VJwj~oLo1Tk^cl|Cz<+bsv9fyQwpmByz>lN7?ir znRFskmjZf4uu17M*A32*7u|$gwlE>#czL2BsE;kF!G?HVsLkVrja>$F=FQ{xFz?Y74_k_ zp?&6I))rClQiMw6{9K7t1P=`CvXMv*^^NW_XtK~u<-I#{<7v&nknuCm1O45GSak~E zETEENIR_z@C=+-QajaEL(zMziw24%9Xr=MWU~G1Zgkllp<+iMK^HU!=F>iIr zyo-y3&qc|MK9o+GS>e3>B7oJc2As&0c+x?=at%qw{H=q^CHEZ9-iB#$N~|zZPzRvT zgb+)~5NIJ3M9~qf%inOR=7o0qc(~ct|Hw)NaC7T1iqWX&Lca~$oNf0$4av(s{x#E% U$h^M=Tt#zLQD;_^87L9>8@r^)4gdfE diff --git a/platforms/android/AndroidManifest.xml b/platforms/android/AndroidManifest.xml index 67ce55b..5e5ad44 100644 --- a/platforms/android/AndroidManifest.xml +++ b/platforms/android/AndroidManifest.xml @@ -1,5 +1,5 @@ - + diff --git a/platforms/android/android.json b/platforms/android/android.json index deff1cf..e2aeb20 100644 --- a/platforms/android/android.json +++ b/platforms/android/android.json @@ -494,6 +494,6 @@ "cordova-plugin-media": "2.2.1-dev", "cordova-plugin-media-capture": "1.2.1-dev", "cordova-plugin-geolocation": "2.1.1-dev", - "phonegap-plugin-barcodescanner": "5.0.1" + "phonegap-plugin-barcodescanner": "6.0.1" } } \ No newline at end of file diff --git a/platforms/android/assets/www/cordova_plugins.js b/platforms/android/assets/www/cordova_plugins.js index 6ea2704..af5f356 100644 --- a/platforms/android/assets/www/cordova_plugins.js +++ b/platforms/android/assets/www/cordova_plugins.js @@ -325,7 +325,7 @@ module.exports.metadata = "cordova-plugin-media": "2.2.1-dev", "cordova-plugin-media-capture": "1.2.1-dev", "cordova-plugin-geolocation": "2.1.1-dev", - "phonegap-plugin-barcodescanner": "5.0.1" + "phonegap-plugin-barcodescanner": "6.0.1" }; // BOTTOM OF METADATA }); \ No newline at end of file diff --git a/platforms/android/assets/www/js/home.js b/platforms/android/assets/www/js/home.js new file mode 100644 index 0000000..ccc6714 --- /dev/null +++ b/platforms/android/assets/www/js/home.js @@ -0,0 +1,355 @@ +/* global PositionError */ + +////////////////////////////////////////////// +// GPS and terrain stuff +////////////////////////////////////////////// + +/** + * Handles GPS and terrain data. + */ + +// Globals +lockGot = false; +terrainGot = false; +latitude = 0.0000; +longitude = 0.0000; +gpsaccuracy = 9999; +// End Globals + +var lastgpstime = 0; +var terraintypeid = 0; +var map = L.map('map'); +var tileurl = "http://tile.stamen.com/terrain/{z}/{x}/{y}.jpg"; +map.setZoom(17); +map.dragging.disable(); +//map.touchZoom.disable(); +//map.doubleClickZoom.disable(); +//map.scrollWheelZoom.disable(); +map.keyboard.disable(); +$(".leaflet-control-zoom").css("visibility", "hidden"); +// Disable tap handler, if present. +//if (map.tap) { +// map.tap.disable(); +//} + +// Tile layer +map.addLayer(new L.tileLayer(tileurl, {minZoom: 17, maxZoom: 18})); +// Places layer +var placeLayer = L.geoJson( + {"name": "Places", "type": "FeatureCollection", "features": [{"type": "Feature", "geometry": {"type": "Point", "coordinates": [0, 0]}, "properties": {"osm_id": -1, "name": null}}]}, + { + onEachFeature: onPlaceTap, + pointToLayer: function (feature, latlng) { + return L.circleMarker(latlng, { + radius: 14, + fillColor: "#ff7800", + color: "#000", + weight: 1, + opacity: 1, + fillOpacity: 0.6 + }); + } + }).addTo(map); + +var lc = L.control.locate({ + position: 'topleft', // set the location of the control + layer: undefined, // use your own layer for the location marker, creates a new layer by default + drawCircle: false, // controls whether a circle is drawn that shows the uncertainty about the location + follow: true, // follow the user's location + setView: true, // automatically sets the map view to the user's location, enabled if `follow` is true + keepCurrentZoomLevel: true, // keep the current map zoom level when displaying the user's location. (if `false`, use maxZoom) + stopFollowingOnDrag: false, // stop following when the map is dragged if `follow` is true (deprecated, see below) + remainActive: true, // if true locate control remains active on click even if the user's location is in view. + markerClass: L.circleMarker, // L.circleMarker or L.marker + circleStyle: {}, // change the style of the circle around the user's location + markerStyle: {}, + followCircleStyle: {}, // set difference for the style of the circle around the user's location while following + followMarkerStyle: {}, + icon: 'fa fa-map-marker', // class for icon, fa-location-arrow or fa-map-marker + iconLoading: 'fa fa-spinner fa-pulse', // class for loading icon + iconElementTag: 'span', // tag for the icon element, span or i + circlePadding: [0, 0], // padding around accuracy circle, value is passed to setBounds + metric: true, // use metric or imperial units + onLocationError: function (err) { + }, // define an error callback function + onLocationOutsideMapBounds: function (context) { // called when outside map boundaries + }, + showPopup: false, // display a popup when the user click on the inner marker + strings: { + title: ".", // title of the locate control + metersUnit: "meters", // string for metric units + feetUnit: "feet", // string for imperial units + popup: "You are within {distance} {unit} from this point", // text to appear if user clicks on circle + outsideMapBoundsMsg: "You seem located outside the boundaries of the map" // default message for onLocationOutsideMapBounds + }, + locateOptions: {} // define location options e.g enableHighAccuracy: true or maxZoom: 10 +}).addTo(map); +lc.start(); +function mapPos(lat, lon) { + lockGot = true; + hideLoading(); + loadPlaces(latitude, longitude); + //map.setView(new L.LatLng(lat, lon), 16, {animate: true}); + //map.panTo(new L.LatLng(lat, lon)); + //map.invalidateSize(); + //redraw('.leaflet-map-pane'); +// $('.leaflet-map-plane').css('height', '90%'); +// setTimeout(function () { +// $('#map').css('width', '100%'); +// $('#map').css('height', '100%'); +// }, 100); +} + +function onPlaceTap(feature, layer) { + layer.on('click', function (e) { + openPlace(feature); + }); +} + +function loadPlaces(lat, long) { + $.getJSON( + "http://earth.apis.netsyms.net/places.php?format=geojson&lat=" + lat + "&long=" + long + "&radius=.25&names=1", + function (data) { + if (data.type === 'FeatureCollection') { + placeLayer.clearLayers(); + data.features.forEach(function (item) { + item.properties.popupContent = "" + item.properties.name + ""; + placeLayer.addData(item); + }); + } + }); +} + +function openPlace(feature) { + $('#main-content').load("screens/place.html", null, function () { + loadPlace(feature); + $('#overlay-main').css('display', 'block'); + }); +} + +/** + * Hide the loading overlay if everything is loaded, otherwise do nothing + */ +function hideLoading() { + if (lockGot && terrainGot && gpsaccuracy < 30 && $('#loading').css('display') !== 'none') { + $('#loading').fadeOut('slow', function () { + $('#loading').css('display', 'none'); + }); + } +} + +var updatePosition = function (position) { + latitude = position.coords.latitude; + longitude = position.coords.longitude; + lastgpstime = position.timestamp; + gpsaccuracy = position.coords.accuracy; + if (gpsaccuracy > 30) { + $('#no-lock').css('display', 'block'); + } else { + $('#no-lock').css('display', 'none'); + } + mapPos(latitude, longitude); +}; +var updateTerrain = function (position) { + latitude = position.coords.latitude; + longitude = position.coords.longitude; + lastgpstime = position.timestamp; + gpsaccuracy = position.coords.accuracy; + var rasterurl = "http://earth.apis.netsyms.net/terrain.php?format=json&lat=" + + latitude + "&long=" + longitude; + $.get(rasterurl, function (data) { + if (data.status === 'OK') { + terraintypeid = data.typeid; + terraintypename = data.typename; + $('#terrain-image').attr('src', 'assets/terrain/' + terraintypeid + '.png'); + terrainGot = true; + hideLoading(); + } + }, "json").fail(function (err) { + $('#terrain-image').attr('src', 'assets/terrain/0.png'); + }); +}; +function pingServer() { + if (lockGot && gpsaccuracy < 30) { + $.get(mkApiUrl('ping') + "?user=" + username + "&lat=" + latitude + "&long=" + longitude); + } +} +; +function onError(error) { + $('#loading-error').text("Check your device's network and location settings, and ensure a clear view of the sky."); +} + +function popGPS() { + navigator.notification.alert("Latitude: " + latitude + + "\nLongitude: " + longitude + + "\nAccuracy: " + gpsaccuracy + + "\nTerrain: " + terraintypename + " (" + terraintypeid + ")", + null, + "GPS Information", + "Close"); +} +$('#terrain-image').click(function () { + popGPS(); +}); +// Initial GPS position and stuff +navigator.geolocation.getCurrentPosition(updateTerrain, onError, {timeout: 10000, enableHighAccuracy: true}); +// Update position +setInterval(function () { + navigator.geolocation.getCurrentPosition(updatePosition, onError, {timeout: 10000, enableHighAccuracy: true}); +}, 1000); +// Update position + terrain +setInterval(function () { + navigator.geolocation.getCurrentPosition(updateTerrain, onError, {timeout: 10000, enableHighAccuracy: true}); + loadPlaces(latitude, longitude); +}, 1000 * 20); +// Ping the server with coordinates +setInterval(pingServer, 5000); +// Show error if it's taking too long +setTimeout(function () { + onError(); +}, 15 * 1000); + + +////////////////////////////////////////////// +// Profile, stats, and chat stuff +////////////////////////////////////////////// + + +/* + * Handles general server communication. + */ + +/** + * Syncs the user's stats with the server and calls refreshStats(). + */ +function syncStats() { + $.getJSON(mkApiUrl('getstats'), { + user: username + }, function (data) { + if (data.status === 'OK') { + maxenergy = data.stats.maxenergy; + energy = data.stats.energy; + level = data.stats.level; + refreshStats(); + } + }); +} + +/** + * Display the current stats on the home screen. + */ +function refreshStats() { + energypercent = (energy * 1.0 / maxenergy * 1.0) * 100.0; + $('#energybar').css('width', String(energypercent) + '%'); +} + +function getChat() { + if (lockGot) { + $.getJSON(mkApiUrl('chat', 'cs'), { + lat: latitude, + long: longitude + }, function (data) { + data = sortResults(data, 'time', true); + var content = ""; + data.forEach(function (msg) { + content += "" + msg.username + " " + msg.message + "
"; + }); + $('#chatmsgs').html(content); + }); + } +} + + +syncStats(); +setInterval(function () { + syncStats(); +}, 10 * 1000); +setInterval(function () { + getChat(); +}, 2000); +// Send chat messages +$("#chatsendform").submit(function (event) { + message = $('#chatbox-input').val(); + if (message !== '') { + $.post(mkApiUrl('chat', 'cs'), { + user: username, + lat: latitude, + long: longitude, + msg: message + }, function (data) { + if (data.status === 'OK') { + $('#chatbox-input').val(""); + $("#chatmsgs").animate({scrollTop: $('#chatmsgs').prop("scrollHeight")}, 1000); + } + }, "json"); + } + event.preventDefault(); + return false; +}); +function toggleChat() { + if ($('#chatmsgs').css('display') === 'none') { + openChat(); + } else { + closeChat(); + } +} + +function closeChat() { + $('#chatmsgs').css('display', 'none'); + $('#chatbox').css('height', 'auto'); +} + +function openChat() { + $('#chatbox').css('height', '50%'); + $('#chatmsgs').css('display', 'block'); + $("#chatmsgs").animate({scrollTop: $('#chatmsgs').prop("scrollHeight")}, 1000); +} + +function openProfile(user) { + user = typeof user !== 'undefined' ? user : username; + $('#main-content').load("screens/profile.html", null, function (x) { + $('#overlay-main').css('display', 'block'); + loadProfile(user); + }); +} + +function openRules() { + openmodal('rules', '#rules-modal'); +} + +function openMenu(topage) { + topage = typeof topage !== 'undefined' ? topage : ""; + $('#main-content').load("screens/menu.html", null, function (x) { + $('#overlay-main').css('display', 'block'); + if (topage !== '') { + $('#' + topage + '-tab').tab('show'); + } + }); +} + + + +////////////////////////////////////////////// +// Other things +////////////////////////////////////////////// + +function closeMain() { + $('#overlay-main').slideDown(100, function () { + $('#overlay-main').css('display', 'none'); + $('#main-content').html(""); + }); +} + +// Handle back button to close things +document.addEventListener("backbutton", function (event) { + if ($('#overlay-main').css('display') !== 'none') { + closeMain(); + } else if ($('#chatmsgs').css('display') !== 'none') { + toggleChat(); + } +}, false); +// Show the rules +if (localStorage.getItem("seenrules") !== 'yes') { + openRules(); + localStorage.setItem("seenrules", 'yes'); +} \ No newline at end of file diff --git a/platforms/android/assets/www/js/location.js b/platforms/android/assets/www/js/location.js index f05c7f9..9cdb810 100644 --- a/platforms/android/assets/www/js/location.js +++ b/platforms/android/assets/www/js/location.js @@ -14,8 +14,10 @@ terrainGot = false; latitude = 0.0000; longitude = 0.0000; gpsaccuracy = 9999; +requiredaccuracy = 40; // End Globals +var fetchplacecounter = 0; var lastgpstime = 0; var terraintypeid = 0; var map = L.map('map'); @@ -36,13 +38,14 @@ $(".leaflet-control-zoom").css("visibility", "hidden"); map.addLayer(new L.tileLayer(tileurl, {minZoom: 17, maxZoom: 18})); // Places layer var placeLayer = L.geoJson( - {"name": "Places", "type": "FeatureCollection", "features": [{"type": "Feature", "geometry": {"type": "Point", "coordinates": [0, 0]}, "properties": {"osm_id": -1, "name": null}}]}, + {"name": "Places", "type": "FeatureCollection", "features": [{"type": "Feature", "geometry": {"type": "Point", "coordinates": [0, 0]}, "properties": {"osm_id": -1, "name": null, 'gameinfo': {'teamid': "0"}}}]}, { onEachFeature: onPlaceTap, pointToLayer: function (feature, latlng) { + var teamcolor = "#" + getTeamColorFromId(feature.properties.gameinfo.teamid); return L.circleMarker(latlng, { radius: 14, - fillColor: "#ff7800", + fillColor: teamcolor, color: "#000", weight: 1, opacity: 1, @@ -85,10 +88,19 @@ var lc = L.control.locate({ locateOptions: {} // define location options e.g enableHighAccuracy: true or maxZoom: 10 }).addTo(map); lc.start(); + + function mapPos(lat, lon) { lockGot = true; hideLoading(); - loadPlaces(latitude, longitude); + // Don't update places every time + if (fetchplacecounter === 0) { + loadPlaces(latitude, longitude); + } + fetchplacecounter++; + if (fetchplacecounter > 10) { + fetchplacecounter = 0; + } //map.setView(new L.LatLng(lat, lon), 16, {animate: true}); //map.panTo(new L.LatLng(lat, lon)); //map.invalidateSize(); @@ -107,17 +119,23 @@ function onPlaceTap(feature, layer) { } function loadPlaces(lat, long) { - $.getJSON( - "http://earth.apis.netsyms.net/places.php?format=geojson&lat=" + lat + "&long=" + long + "&radius=.25&names=1", - function (data) { - if (data.type === 'FeatureCollection') { - placeLayer.clearLayers(); - data.features.forEach(function (item) { - item.properties.popupContent = "" + item.properties.name + ""; - placeLayer.addData(item); - }); + var url = mkApiUrl('places', 'gs') + "?lat=" + lat + "&long=" + long + "&radius=.25&names=1"; + try { + $.getJSON( + url, + function (data) { + if (data.type === 'FeatureCollection') { + placeLayer.clearLayers(); + data.features.forEach(function (item) { + item.properties.popupContent = "" + item.properties.name + ""; + placeLayer.addData(item); + }); + } } - }); + ); + } catch (ex) { + serverProblemsDialog(); + } } function openPlace(feature) { @@ -131,7 +149,7 @@ function openPlace(feature) { * Hide the loading overlay if everything is loaded, otherwise do nothing */ function hideLoading() { - if (lockGot && terrainGot && gpsaccuracy < 30 && $('#loading').css('display') !== 'none') { + if (lockGot && terrainGot && gpsaccuracy < requiredaccuracy && $('#loading').css('display') !== 'none') { $('#loading').fadeOut('slow', function () { $('#loading').css('display', 'none'); }); @@ -143,7 +161,7 @@ var updatePosition = function (position) { longitude = position.coords.longitude; lastgpstime = position.timestamp; gpsaccuracy = position.coords.accuracy; - if (gpsaccuracy > 30) { + if (gpsaccuracy > requiredaccuracy) { $('#no-lock').css('display', 'block'); } else { $('#no-lock').css('display', 'none'); @@ -170,7 +188,7 @@ var updateTerrain = function (position) { }); }; function pingServer() { - if (lockGot && gpsaccuracy < 30) { + if (lockGot && gpsaccuracy < requiredaccuracy) { $.get(mkApiUrl('ping') + "?user=" + username + "&lat=" + latitude + "&long=" + longitude); } } diff --git a/platforms/android/assets/www/js/main.js b/platforms/android/assets/www/js/main.js index 1e13190..9d3857a 100644 --- a/platforms/android/assets/www/js/main.js +++ b/platforms/android/assets/www/js/main.js @@ -21,6 +21,10 @@ function onDeviceReady() { } } +function serverProblemsDialog() { + openscreen("servererror"); +} + function mkApiUrl(action, server) { server = typeof server !== 'undefined' ? server : "gs"; return "http://" + server + ".terranquest.net/" + action + ".php"; @@ -111,6 +115,50 @@ function closeMain() { }); } +function getTeamInfoFromId(id) { + var team_string = "None"; + var team_color = "FFFFFF"; + switch (id) { + case "1": + team_string = "Water"; + team_color = "00BFFF"; + break; + case "2": + team_string = "Fire"; + team_color = "FF4000"; + break; + case "3": + team_string = "Earth"; + team_color = "D1A000"; + break; + case "4": + team_string = "Wind"; + team_color = "96FFFF"; + break; + case "5": + team_string = "Light"; + team_color = "FFFF96"; + break; + case "6": + team_string = "Dark"; + team_color = "ABABAB"; + break; + default: + team_string = "None"; + team_color = "FFFFFF"; + break; + } + return {'name': team_string, 'color': team_color}; +} + +function getTeamNameFromId(id) { + return getTeamInfoFromId(id)['name']; +} + +function getTeamColorFromId(id) { + return getTeamInfoFromId(id)['color']; +} + // Handle back button to close things document.addEventListener("backbutton", function (event) { if ($('#overlay-main').css('display') !== 'none') { diff --git a/platforms/android/assets/www/screens/intro.html b/platforms/android/assets/www/screens/intro.html index 86c30f6..faa20fc 100644 --- a/platforms/android/assets/www/screens/intro.html +++ b/platforms/android/assets/www/screens/intro.html @@ -6,34 +6,38 @@ + - \ No newline at end of file diff --git a/platforms/android/assets/www/screens/inventory.html b/platforms/android/assets/www/screens/inventory.html index 753bc71..abaf430 100644 --- a/platforms/android/assets/www/screens/inventory.html +++ b/platforms/android/assets/www/screens/inventory.html @@ -1,10 +1,39 @@
+
+ Loading... +
\ No newline at end of file diff --git a/platforms/android/assets/www/screens/place.html b/platforms/android/assets/www/screens/place.html index 5c993a1..7853717 100644 --- a/platforms/android/assets/www/screens/place.html +++ b/platforms/android/assets/www/screens/place.html @@ -1,9 +1,13 @@
+
\ No newline at end of file diff --git a/platforms/android/assets/www/screens/profile.html b/platforms/android/assets/www/screens/profile.html index b7e6a70..bf5f477 100644 --- a/platforms/android/assets/www/screens/profile.html +++ b/platforms/android/assets/www/screens/profile.html @@ -5,8 +5,10 @@
Loading...
-
+
+
+
\ No newline at end of file diff --git a/platforms/android/platform_www/cordova_plugins.js b/platforms/android/platform_www/cordova_plugins.js index 6ea2704..af5f356 100644 --- a/platforms/android/platform_www/cordova_plugins.js +++ b/platforms/android/platform_www/cordova_plugins.js @@ -325,7 +325,7 @@ module.exports.metadata = "cordova-plugin-media": "2.2.1-dev", "cordova-plugin-media-capture": "1.2.1-dev", "cordova-plugin-geolocation": "2.1.1-dev", - "phonegap-plugin-barcodescanner": "5.0.1" + "phonegap-plugin-barcodescanner": "6.0.1" }; // BOTTOM OF METADATA }); \ No newline at end of file diff --git a/platforms/android/res/xml/config.xml b/platforms/android/res/xml/config.xml index 5804569..e89921f 100644 --- a/platforms/android/res/xml/config.xml +++ b/platforms/android/res/xml/config.xml @@ -1,5 +1,5 @@ - + diff --git a/platforms/browser/browser.json b/platforms/browser/browser.json index 53f926e..37bb068 100644 --- a/platforms/browser/browser.json +++ b/platforms/browser/browser.json @@ -458,6 +458,6 @@ "cordova-plugin-media": "2.2.1-dev", "cordova-plugin-media-capture": "1.2.1-dev", "cordova-plugin-geolocation": "2.1.1-dev", - "phonegap-plugin-barcodescanner": "5.0.1" + "phonegap-plugin-barcodescanner": "6.0.1" } } \ No newline at end of file diff --git a/platforms/browser/config.xml b/platforms/browser/config.xml index f90e409..c797fa0 100644 --- a/platforms/browser/config.xml +++ b/platforms/browser/config.xml @@ -1,5 +1,5 @@ - + diff --git a/platforms/browser/platform_www/cordova_plugins.js b/platforms/browser/platform_www/cordova_plugins.js index 12c5902..9abfd5f 100644 --- a/platforms/browser/platform_www/cordova_plugins.js +++ b/platforms/browser/platform_www/cordova_plugins.js @@ -392,7 +392,7 @@ module.exports.metadata = "cordova-plugin-media": "2.2.1-dev", "cordova-plugin-media-capture": "1.2.1-dev", "cordova-plugin-geolocation": "2.1.1-dev", - "phonegap-plugin-barcodescanner": "5.0.1" + "phonegap-plugin-barcodescanner": "6.0.1" } // BOTTOM OF METADATA }); \ No newline at end of file diff --git a/platforms/browser/www/config.xml b/platforms/browser/www/config.xml index f90e409..c797fa0 100644 --- a/platforms/browser/www/config.xml +++ b/platforms/browser/www/config.xml @@ -1,5 +1,5 @@ - + diff --git a/platforms/browser/www/cordova_plugins.js b/platforms/browser/www/cordova_plugins.js index 12c5902..9abfd5f 100644 --- a/platforms/browser/www/cordova_plugins.js +++ b/platforms/browser/www/cordova_plugins.js @@ -392,7 +392,7 @@ module.exports.metadata = "cordova-plugin-media": "2.2.1-dev", "cordova-plugin-media-capture": "1.2.1-dev", "cordova-plugin-geolocation": "2.1.1-dev", - "phonegap-plugin-barcodescanner": "5.0.1" + "phonegap-plugin-barcodescanner": "6.0.1" } // BOTTOM OF METADATA }); \ No newline at end of file diff --git a/platforms/browser/www/js/home.js b/platforms/browser/www/js/home.js new file mode 100644 index 0000000..ccc6714 --- /dev/null +++ b/platforms/browser/www/js/home.js @@ -0,0 +1,355 @@ +/* global PositionError */ + +////////////////////////////////////////////// +// GPS and terrain stuff +////////////////////////////////////////////// + +/** + * Handles GPS and terrain data. + */ + +// Globals +lockGot = false; +terrainGot = false; +latitude = 0.0000; +longitude = 0.0000; +gpsaccuracy = 9999; +// End Globals + +var lastgpstime = 0; +var terraintypeid = 0; +var map = L.map('map'); +var tileurl = "http://tile.stamen.com/terrain/{z}/{x}/{y}.jpg"; +map.setZoom(17); +map.dragging.disable(); +//map.touchZoom.disable(); +//map.doubleClickZoom.disable(); +//map.scrollWheelZoom.disable(); +map.keyboard.disable(); +$(".leaflet-control-zoom").css("visibility", "hidden"); +// Disable tap handler, if present. +//if (map.tap) { +// map.tap.disable(); +//} + +// Tile layer +map.addLayer(new L.tileLayer(tileurl, {minZoom: 17, maxZoom: 18})); +// Places layer +var placeLayer = L.geoJson( + {"name": "Places", "type": "FeatureCollection", "features": [{"type": "Feature", "geometry": {"type": "Point", "coordinates": [0, 0]}, "properties": {"osm_id": -1, "name": null}}]}, + { + onEachFeature: onPlaceTap, + pointToLayer: function (feature, latlng) { + return L.circleMarker(latlng, { + radius: 14, + fillColor: "#ff7800", + color: "#000", + weight: 1, + opacity: 1, + fillOpacity: 0.6 + }); + } + }).addTo(map); + +var lc = L.control.locate({ + position: 'topleft', // set the location of the control + layer: undefined, // use your own layer for the location marker, creates a new layer by default + drawCircle: false, // controls whether a circle is drawn that shows the uncertainty about the location + follow: true, // follow the user's location + setView: true, // automatically sets the map view to the user's location, enabled if `follow` is true + keepCurrentZoomLevel: true, // keep the current map zoom level when displaying the user's location. (if `false`, use maxZoom) + stopFollowingOnDrag: false, // stop following when the map is dragged if `follow` is true (deprecated, see below) + remainActive: true, // if true locate control remains active on click even if the user's location is in view. + markerClass: L.circleMarker, // L.circleMarker or L.marker + circleStyle: {}, // change the style of the circle around the user's location + markerStyle: {}, + followCircleStyle: {}, // set difference for the style of the circle around the user's location while following + followMarkerStyle: {}, + icon: 'fa fa-map-marker', // class for icon, fa-location-arrow or fa-map-marker + iconLoading: 'fa fa-spinner fa-pulse', // class for loading icon + iconElementTag: 'span', // tag for the icon element, span or i + circlePadding: [0, 0], // padding around accuracy circle, value is passed to setBounds + metric: true, // use metric or imperial units + onLocationError: function (err) { + }, // define an error callback function + onLocationOutsideMapBounds: function (context) { // called when outside map boundaries + }, + showPopup: false, // display a popup when the user click on the inner marker + strings: { + title: ".", // title of the locate control + metersUnit: "meters", // string for metric units + feetUnit: "feet", // string for imperial units + popup: "You are within {distance} {unit} from this point", // text to appear if user clicks on circle + outsideMapBoundsMsg: "You seem located outside the boundaries of the map" // default message for onLocationOutsideMapBounds + }, + locateOptions: {} // define location options e.g enableHighAccuracy: true or maxZoom: 10 +}).addTo(map); +lc.start(); +function mapPos(lat, lon) { + lockGot = true; + hideLoading(); + loadPlaces(latitude, longitude); + //map.setView(new L.LatLng(lat, lon), 16, {animate: true}); + //map.panTo(new L.LatLng(lat, lon)); + //map.invalidateSize(); + //redraw('.leaflet-map-pane'); +// $('.leaflet-map-plane').css('height', '90%'); +// setTimeout(function () { +// $('#map').css('width', '100%'); +// $('#map').css('height', '100%'); +// }, 100); +} + +function onPlaceTap(feature, layer) { + layer.on('click', function (e) { + openPlace(feature); + }); +} + +function loadPlaces(lat, long) { + $.getJSON( + "http://earth.apis.netsyms.net/places.php?format=geojson&lat=" + lat + "&long=" + long + "&radius=.25&names=1", + function (data) { + if (data.type === 'FeatureCollection') { + placeLayer.clearLayers(); + data.features.forEach(function (item) { + item.properties.popupContent = "" + item.properties.name + ""; + placeLayer.addData(item); + }); + } + }); +} + +function openPlace(feature) { + $('#main-content').load("screens/place.html", null, function () { + loadPlace(feature); + $('#overlay-main').css('display', 'block'); + }); +} + +/** + * Hide the loading overlay if everything is loaded, otherwise do nothing + */ +function hideLoading() { + if (lockGot && terrainGot && gpsaccuracy < 30 && $('#loading').css('display') !== 'none') { + $('#loading').fadeOut('slow', function () { + $('#loading').css('display', 'none'); + }); + } +} + +var updatePosition = function (position) { + latitude = position.coords.latitude; + longitude = position.coords.longitude; + lastgpstime = position.timestamp; + gpsaccuracy = position.coords.accuracy; + if (gpsaccuracy > 30) { + $('#no-lock').css('display', 'block'); + } else { + $('#no-lock').css('display', 'none'); + } + mapPos(latitude, longitude); +}; +var updateTerrain = function (position) { + latitude = position.coords.latitude; + longitude = position.coords.longitude; + lastgpstime = position.timestamp; + gpsaccuracy = position.coords.accuracy; + var rasterurl = "http://earth.apis.netsyms.net/terrain.php?format=json&lat=" + + latitude + "&long=" + longitude; + $.get(rasterurl, function (data) { + if (data.status === 'OK') { + terraintypeid = data.typeid; + terraintypename = data.typename; + $('#terrain-image').attr('src', 'assets/terrain/' + terraintypeid + '.png'); + terrainGot = true; + hideLoading(); + } + }, "json").fail(function (err) { + $('#terrain-image').attr('src', 'assets/terrain/0.png'); + }); +}; +function pingServer() { + if (lockGot && gpsaccuracy < 30) { + $.get(mkApiUrl('ping') + "?user=" + username + "&lat=" + latitude + "&long=" + longitude); + } +} +; +function onError(error) { + $('#loading-error').text("Check your device's network and location settings, and ensure a clear view of the sky."); +} + +function popGPS() { + navigator.notification.alert("Latitude: " + latitude + + "\nLongitude: " + longitude + + "\nAccuracy: " + gpsaccuracy + + "\nTerrain: " + terraintypename + " (" + terraintypeid + ")", + null, + "GPS Information", + "Close"); +} +$('#terrain-image').click(function () { + popGPS(); +}); +// Initial GPS position and stuff +navigator.geolocation.getCurrentPosition(updateTerrain, onError, {timeout: 10000, enableHighAccuracy: true}); +// Update position +setInterval(function () { + navigator.geolocation.getCurrentPosition(updatePosition, onError, {timeout: 10000, enableHighAccuracy: true}); +}, 1000); +// Update position + terrain +setInterval(function () { + navigator.geolocation.getCurrentPosition(updateTerrain, onError, {timeout: 10000, enableHighAccuracy: true}); + loadPlaces(latitude, longitude); +}, 1000 * 20); +// Ping the server with coordinates +setInterval(pingServer, 5000); +// Show error if it's taking too long +setTimeout(function () { + onError(); +}, 15 * 1000); + + +////////////////////////////////////////////// +// Profile, stats, and chat stuff +////////////////////////////////////////////// + + +/* + * Handles general server communication. + */ + +/** + * Syncs the user's stats with the server and calls refreshStats(). + */ +function syncStats() { + $.getJSON(mkApiUrl('getstats'), { + user: username + }, function (data) { + if (data.status === 'OK') { + maxenergy = data.stats.maxenergy; + energy = data.stats.energy; + level = data.stats.level; + refreshStats(); + } + }); +} + +/** + * Display the current stats on the home screen. + */ +function refreshStats() { + energypercent = (energy * 1.0 / maxenergy * 1.0) * 100.0; + $('#energybar').css('width', String(energypercent) + '%'); +} + +function getChat() { + if (lockGot) { + $.getJSON(mkApiUrl('chat', 'cs'), { + lat: latitude, + long: longitude + }, function (data) { + data = sortResults(data, 'time', true); + var content = ""; + data.forEach(function (msg) { + content += "" + msg.username + " " + msg.message + "
"; + }); + $('#chatmsgs').html(content); + }); + } +} + + +syncStats(); +setInterval(function () { + syncStats(); +}, 10 * 1000); +setInterval(function () { + getChat(); +}, 2000); +// Send chat messages +$("#chatsendform").submit(function (event) { + message = $('#chatbox-input').val(); + if (message !== '') { + $.post(mkApiUrl('chat', 'cs'), { + user: username, + lat: latitude, + long: longitude, + msg: message + }, function (data) { + if (data.status === 'OK') { + $('#chatbox-input').val(""); + $("#chatmsgs").animate({scrollTop: $('#chatmsgs').prop("scrollHeight")}, 1000); + } + }, "json"); + } + event.preventDefault(); + return false; +}); +function toggleChat() { + if ($('#chatmsgs').css('display') === 'none') { + openChat(); + } else { + closeChat(); + } +} + +function closeChat() { + $('#chatmsgs').css('display', 'none'); + $('#chatbox').css('height', 'auto'); +} + +function openChat() { + $('#chatbox').css('height', '50%'); + $('#chatmsgs').css('display', 'block'); + $("#chatmsgs").animate({scrollTop: $('#chatmsgs').prop("scrollHeight")}, 1000); +} + +function openProfile(user) { + user = typeof user !== 'undefined' ? user : username; + $('#main-content').load("screens/profile.html", null, function (x) { + $('#overlay-main').css('display', 'block'); + loadProfile(user); + }); +} + +function openRules() { + openmodal('rules', '#rules-modal'); +} + +function openMenu(topage) { + topage = typeof topage !== 'undefined' ? topage : ""; + $('#main-content').load("screens/menu.html", null, function (x) { + $('#overlay-main').css('display', 'block'); + if (topage !== '') { + $('#' + topage + '-tab').tab('show'); + } + }); +} + + + +////////////////////////////////////////////// +// Other things +////////////////////////////////////////////// + +function closeMain() { + $('#overlay-main').slideDown(100, function () { + $('#overlay-main').css('display', 'none'); + $('#main-content').html(""); + }); +} + +// Handle back button to close things +document.addEventListener("backbutton", function (event) { + if ($('#overlay-main').css('display') !== 'none') { + closeMain(); + } else if ($('#chatmsgs').css('display') !== 'none') { + toggleChat(); + } +}, false); +// Show the rules +if (localStorage.getItem("seenrules") !== 'yes') { + openRules(); + localStorage.setItem("seenrules", 'yes'); +} \ No newline at end of file diff --git a/platforms/browser/www/js/location.js b/platforms/browser/www/js/location.js index f05c7f9..9cdb810 100644 --- a/platforms/browser/www/js/location.js +++ b/platforms/browser/www/js/location.js @@ -14,8 +14,10 @@ terrainGot = false; latitude = 0.0000; longitude = 0.0000; gpsaccuracy = 9999; +requiredaccuracy = 40; // End Globals +var fetchplacecounter = 0; var lastgpstime = 0; var terraintypeid = 0; var map = L.map('map'); @@ -36,13 +38,14 @@ $(".leaflet-control-zoom").css("visibility", "hidden"); map.addLayer(new L.tileLayer(tileurl, {minZoom: 17, maxZoom: 18})); // Places layer var placeLayer = L.geoJson( - {"name": "Places", "type": "FeatureCollection", "features": [{"type": "Feature", "geometry": {"type": "Point", "coordinates": [0, 0]}, "properties": {"osm_id": -1, "name": null}}]}, + {"name": "Places", "type": "FeatureCollection", "features": [{"type": "Feature", "geometry": {"type": "Point", "coordinates": [0, 0]}, "properties": {"osm_id": -1, "name": null, 'gameinfo': {'teamid': "0"}}}]}, { onEachFeature: onPlaceTap, pointToLayer: function (feature, latlng) { + var teamcolor = "#" + getTeamColorFromId(feature.properties.gameinfo.teamid); return L.circleMarker(latlng, { radius: 14, - fillColor: "#ff7800", + fillColor: teamcolor, color: "#000", weight: 1, opacity: 1, @@ -85,10 +88,19 @@ var lc = L.control.locate({ locateOptions: {} // define location options e.g enableHighAccuracy: true or maxZoom: 10 }).addTo(map); lc.start(); + + function mapPos(lat, lon) { lockGot = true; hideLoading(); - loadPlaces(latitude, longitude); + // Don't update places every time + if (fetchplacecounter === 0) { + loadPlaces(latitude, longitude); + } + fetchplacecounter++; + if (fetchplacecounter > 10) { + fetchplacecounter = 0; + } //map.setView(new L.LatLng(lat, lon), 16, {animate: true}); //map.panTo(new L.LatLng(lat, lon)); //map.invalidateSize(); @@ -107,17 +119,23 @@ function onPlaceTap(feature, layer) { } function loadPlaces(lat, long) { - $.getJSON( - "http://earth.apis.netsyms.net/places.php?format=geojson&lat=" + lat + "&long=" + long + "&radius=.25&names=1", - function (data) { - if (data.type === 'FeatureCollection') { - placeLayer.clearLayers(); - data.features.forEach(function (item) { - item.properties.popupContent = "" + item.properties.name + ""; - placeLayer.addData(item); - }); + var url = mkApiUrl('places', 'gs') + "?lat=" + lat + "&long=" + long + "&radius=.25&names=1"; + try { + $.getJSON( + url, + function (data) { + if (data.type === 'FeatureCollection') { + placeLayer.clearLayers(); + data.features.forEach(function (item) { + item.properties.popupContent = "" + item.properties.name + ""; + placeLayer.addData(item); + }); + } } - }); + ); + } catch (ex) { + serverProblemsDialog(); + } } function openPlace(feature) { @@ -131,7 +149,7 @@ function openPlace(feature) { * Hide the loading overlay if everything is loaded, otherwise do nothing */ function hideLoading() { - if (lockGot && terrainGot && gpsaccuracy < 30 && $('#loading').css('display') !== 'none') { + if (lockGot && terrainGot && gpsaccuracy < requiredaccuracy && $('#loading').css('display') !== 'none') { $('#loading').fadeOut('slow', function () { $('#loading').css('display', 'none'); }); @@ -143,7 +161,7 @@ var updatePosition = function (position) { longitude = position.coords.longitude; lastgpstime = position.timestamp; gpsaccuracy = position.coords.accuracy; - if (gpsaccuracy > 30) { + if (gpsaccuracy > requiredaccuracy) { $('#no-lock').css('display', 'block'); } else { $('#no-lock').css('display', 'none'); @@ -170,7 +188,7 @@ var updateTerrain = function (position) { }); }; function pingServer() { - if (lockGot && gpsaccuracy < 30) { + if (lockGot && gpsaccuracy < requiredaccuracy) { $.get(mkApiUrl('ping') + "?user=" + username + "&lat=" + latitude + "&long=" + longitude); } } diff --git a/platforms/browser/www/js/main.js b/platforms/browser/www/js/main.js index 1e13190..9d3857a 100644 --- a/platforms/browser/www/js/main.js +++ b/platforms/browser/www/js/main.js @@ -21,6 +21,10 @@ function onDeviceReady() { } } +function serverProblemsDialog() { + openscreen("servererror"); +} + function mkApiUrl(action, server) { server = typeof server !== 'undefined' ? server : "gs"; return "http://" + server + ".terranquest.net/" + action + ".php"; @@ -111,6 +115,50 @@ function closeMain() { }); } +function getTeamInfoFromId(id) { + var team_string = "None"; + var team_color = "FFFFFF"; + switch (id) { + case "1": + team_string = "Water"; + team_color = "00BFFF"; + break; + case "2": + team_string = "Fire"; + team_color = "FF4000"; + break; + case "3": + team_string = "Earth"; + team_color = "D1A000"; + break; + case "4": + team_string = "Wind"; + team_color = "96FFFF"; + break; + case "5": + team_string = "Light"; + team_color = "FFFF96"; + break; + case "6": + team_string = "Dark"; + team_color = "ABABAB"; + break; + default: + team_string = "None"; + team_color = "FFFFFF"; + break; + } + return {'name': team_string, 'color': team_color}; +} + +function getTeamNameFromId(id) { + return getTeamInfoFromId(id)['name']; +} + +function getTeamColorFromId(id) { + return getTeamInfoFromId(id)['color']; +} + // Handle back button to close things document.addEventListener("backbutton", function (event) { if ($('#overlay-main').css('display') !== 'none') { diff --git a/platforms/browser/www/screens/intro.html b/platforms/browser/www/screens/intro.html index 86c30f6..faa20fc 100644 --- a/platforms/browser/www/screens/intro.html +++ b/platforms/browser/www/screens/intro.html @@ -6,34 +6,38 @@
+ - \ No newline at end of file diff --git a/platforms/browser/www/screens/inventory.html b/platforms/browser/www/screens/inventory.html index 753bc71..abaf430 100644 --- a/platforms/browser/www/screens/inventory.html +++ b/platforms/browser/www/screens/inventory.html @@ -1,10 +1,39 @@
+
+ Loading... +
\ No newline at end of file diff --git a/platforms/browser/www/screens/place.html b/platforms/browser/www/screens/place.html index 5c993a1..7853717 100644 --- a/platforms/browser/www/screens/place.html +++ b/platforms/browser/www/screens/place.html @@ -1,9 +1,13 @@
+
\ No newline at end of file diff --git a/platforms/browser/www/screens/profile.html b/platforms/browser/www/screens/profile.html index b7e6a70..bf5f477 100644 --- a/platforms/browser/www/screens/profile.html +++ b/platforms/browser/www/screens/profile.html @@ -5,8 +5,10 @@
Loading...
-
+
+
+
\ No newline at end of file diff --git a/plugins/phonegap-plugin-barcodescanner/package.json b/plugins/phonegap-plugin-barcodescanner/package.json index 7f47c7d..e42593c 100644 --- a/plugins/phonegap-plugin-barcodescanner/package.json +++ b/plugins/phonegap-plugin-barcodescanner/package.json @@ -1,13 +1,12 @@ { "name": "phonegap-plugin-barcodescanner", - "version": "5.0.1", + "version": "6.0.1", "description": "You can use the BarcodeScanner plugin to scan different types of barcodes (using the device's camera) and get the metadata encoded in them for processing within your application.", "cordova": { "id": "phonegap-plugin-barcodescanner", "platforms": [ "ios", "android", - "windows8", "windows", "wp8", "blackberry10", @@ -23,7 +22,6 @@ "ecosystem:phonegap", "cordova-ios", "cordova-android", - "cordova-windows8", "cordova-windows", "cordova-wp8", "cordova-blackberry10", diff --git a/plugins/phonegap-plugin-barcodescanner/plugin.xml b/plugins/phonegap-plugin-barcodescanner/plugin.xml index 704089c..6459857 100644 --- a/plugins/phonegap-plugin-barcodescanner/plugin.xml +++ b/plugins/phonegap-plugin-barcodescanner/plugin.xml @@ -2,7 +2,7 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:rim="http://www.blackberry.com/ns/widgets" id="phonegap-plugin-barcodescanner" - version="5.0.1"> + version="6.0.1"> BarcodeScanner You can use the BarcodeScanner plugin to scan different types of barcodes (using the device's camera) and get the metadata encoded in them for processing within your application. diff --git a/plugins/phonegap-plugin-barcodescanner/src/windows/BarcodeScannerProxy.js b/plugins/phonegap-plugin-barcodescanner/src/windows/BarcodeScannerProxy.js index e1aff4e..b9b29ca 100644 --- a/plugins/phonegap-plugin-barcodescanner/src/windows/BarcodeScannerProxy.js +++ b/plugins/phonegap-plugin-barcodescanner/src/windows/BarcodeScannerProxy.js @@ -551,7 +551,7 @@ module.exports = { } function checkCancelled() { - if (BarcodeReader.scanCancelled) { + if (BarcodeReader.scanCancelled || BarcodeReader.suspended) { throw new Error('Canceled'); } } @@ -587,8 +587,12 @@ module.exports = { cancelled: !result }); }, function (error) { - destroyPreview(); + // Suppress null result (cancel) on suspending + if (BarcodeReader.suspended) { + return; + } + destroyPreview(); if (error.message == 'Canceled') { success({ cancelled: true @@ -622,20 +626,46 @@ function waitForScanEnd() { return BarcodeReader.scanPromise || WinJS.Promise.as(); } +function suspend(args) { + BarcodeReader.suspended = true; + if (args) { + args.setPromise(BarcodeReader.destroyPreview() + .then(waitForScanEnd, waitForScanEnd)); + } else { + BarcodeReader.destroyPreview(); + } +} + +function resume() { + BarcodeReader.suspended = false; + module.exports.scan(BarcodeReader.scanCallArgs.success, BarcodeReader.scanCallArgs.fail, BarcodeReader.scanCallArgs.args); +} + +function onVisibilityChanged() { + if (document.visibilityState === 'hidden' + && BarcodeReader.videoPreviewIsVisible && BarcodeReader.videoPreviewIsVisible() && BarcodeReader.destroyPreview) { + suspend(); + } else if (BarcodeReader.suspended) { + resume(); + } +} + +// Windows 8.1 projects +document.addEventListener('msvisibilitychange', onVisibilityChanged); +// Windows 10 projects +document.addEventListener('visibilitychange', onVisibilityChanged); + // About to be suspended app.addEventListener('checkpoint', function (args) { if (BarcodeReader.videoPreviewIsVisible && BarcodeReader.videoPreviewIsVisible() && BarcodeReader.destroyPreview) { - BarcodeReader.suspended = true; - args.setPromise(BarcodeReader.destroyPreview() - .then(waitForScanEnd, waitForScanEnd)); + suspend(args); } }); // Resuming from a user suspension Windows.UI.WebUI.WebUIApplication.addEventListener("resuming", function () { if (BarcodeReader.suspended) { - BarcodeReader.suspended = false; - module.exports.scan(BarcodeReader.scanCallArgs.success, BarcodeReader.scanCallArgs.fail, BarcodeReader.scanCallArgs.args); + resume(); } }, false); diff --git a/res/splash.9.png b/res/splash.9.png index 12650527e66f4866b770e615e1377370278ca8d2..c718dc50fd878e435d33b8fe6478d452ca1d58af 100644 GIT binary patch literal 66627 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 UX8bDyG~iEJUPG=HX&(0f0G9y_Hvj+t literal 32427 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 diff --git a/www/js/home.js b/www/js/home.js new file mode 100644 index 0000000..ccc6714 --- /dev/null +++ b/www/js/home.js @@ -0,0 +1,355 @@ +/* global PositionError */ + +////////////////////////////////////////////// +// GPS and terrain stuff +////////////////////////////////////////////// + +/** + * Handles GPS and terrain data. + */ + +// Globals +lockGot = false; +terrainGot = false; +latitude = 0.0000; +longitude = 0.0000; +gpsaccuracy = 9999; +// End Globals + +var lastgpstime = 0; +var terraintypeid = 0; +var map = L.map('map'); +var tileurl = "http://tile.stamen.com/terrain/{z}/{x}/{y}.jpg"; +map.setZoom(17); +map.dragging.disable(); +//map.touchZoom.disable(); +//map.doubleClickZoom.disable(); +//map.scrollWheelZoom.disable(); +map.keyboard.disable(); +$(".leaflet-control-zoom").css("visibility", "hidden"); +// Disable tap handler, if present. +//if (map.tap) { +// map.tap.disable(); +//} + +// Tile layer +map.addLayer(new L.tileLayer(tileurl, {minZoom: 17, maxZoom: 18})); +// Places layer +var placeLayer = L.geoJson( + {"name": "Places", "type": "FeatureCollection", "features": [{"type": "Feature", "geometry": {"type": "Point", "coordinates": [0, 0]}, "properties": {"osm_id": -1, "name": null}}]}, + { + onEachFeature: onPlaceTap, + pointToLayer: function (feature, latlng) { + return L.circleMarker(latlng, { + radius: 14, + fillColor: "#ff7800", + color: "#000", + weight: 1, + opacity: 1, + fillOpacity: 0.6 + }); + } + }).addTo(map); + +var lc = L.control.locate({ + position: 'topleft', // set the location of the control + layer: undefined, // use your own layer for the location marker, creates a new layer by default + drawCircle: false, // controls whether a circle is drawn that shows the uncertainty about the location + follow: true, // follow the user's location + setView: true, // automatically sets the map view to the user's location, enabled if `follow` is true + keepCurrentZoomLevel: true, // keep the current map zoom level when displaying the user's location. (if `false`, use maxZoom) + stopFollowingOnDrag: false, // stop following when the map is dragged if `follow` is true (deprecated, see below) + remainActive: true, // if true locate control remains active on click even if the user's location is in view. + markerClass: L.circleMarker, // L.circleMarker or L.marker + circleStyle: {}, // change the style of the circle around the user's location + markerStyle: {}, + followCircleStyle: {}, // set difference for the style of the circle around the user's location while following + followMarkerStyle: {}, + icon: 'fa fa-map-marker', // class for icon, fa-location-arrow or fa-map-marker + iconLoading: 'fa fa-spinner fa-pulse', // class for loading icon + iconElementTag: 'span', // tag for the icon element, span or i + circlePadding: [0, 0], // padding around accuracy circle, value is passed to setBounds + metric: true, // use metric or imperial units + onLocationError: function (err) { + }, // define an error callback function + onLocationOutsideMapBounds: function (context) { // called when outside map boundaries + }, + showPopup: false, // display a popup when the user click on the inner marker + strings: { + title: ".", // title of the locate control + metersUnit: "meters", // string for metric units + feetUnit: "feet", // string for imperial units + popup: "You are within {distance} {unit} from this point", // text to appear if user clicks on circle + outsideMapBoundsMsg: "You seem located outside the boundaries of the map" // default message for onLocationOutsideMapBounds + }, + locateOptions: {} // define location options e.g enableHighAccuracy: true or maxZoom: 10 +}).addTo(map); +lc.start(); +function mapPos(lat, lon) { + lockGot = true; + hideLoading(); + loadPlaces(latitude, longitude); + //map.setView(new L.LatLng(lat, lon), 16, {animate: true}); + //map.panTo(new L.LatLng(lat, lon)); + //map.invalidateSize(); + //redraw('.leaflet-map-pane'); +// $('.leaflet-map-plane').css('height', '90%'); +// setTimeout(function () { +// $('#map').css('width', '100%'); +// $('#map').css('height', '100%'); +// }, 100); +} + +function onPlaceTap(feature, layer) { + layer.on('click', function (e) { + openPlace(feature); + }); +} + +function loadPlaces(lat, long) { + $.getJSON( + "http://earth.apis.netsyms.net/places.php?format=geojson&lat=" + lat + "&long=" + long + "&radius=.25&names=1", + function (data) { + if (data.type === 'FeatureCollection') { + placeLayer.clearLayers(); + data.features.forEach(function (item) { + item.properties.popupContent = "" + item.properties.name + ""; + placeLayer.addData(item); + }); + } + }); +} + +function openPlace(feature) { + $('#main-content').load("screens/place.html", null, function () { + loadPlace(feature); + $('#overlay-main').css('display', 'block'); + }); +} + +/** + * Hide the loading overlay if everything is loaded, otherwise do nothing + */ +function hideLoading() { + if (lockGot && terrainGot && gpsaccuracy < 30 && $('#loading').css('display') !== 'none') { + $('#loading').fadeOut('slow', function () { + $('#loading').css('display', 'none'); + }); + } +} + +var updatePosition = function (position) { + latitude = position.coords.latitude; + longitude = position.coords.longitude; + lastgpstime = position.timestamp; + gpsaccuracy = position.coords.accuracy; + if (gpsaccuracy > 30) { + $('#no-lock').css('display', 'block'); + } else { + $('#no-lock').css('display', 'none'); + } + mapPos(latitude, longitude); +}; +var updateTerrain = function (position) { + latitude = position.coords.latitude; + longitude = position.coords.longitude; + lastgpstime = position.timestamp; + gpsaccuracy = position.coords.accuracy; + var rasterurl = "http://earth.apis.netsyms.net/terrain.php?format=json&lat=" + + latitude + "&long=" + longitude; + $.get(rasterurl, function (data) { + if (data.status === 'OK') { + terraintypeid = data.typeid; + terraintypename = data.typename; + $('#terrain-image').attr('src', 'assets/terrain/' + terraintypeid + '.png'); + terrainGot = true; + hideLoading(); + } + }, "json").fail(function (err) { + $('#terrain-image').attr('src', 'assets/terrain/0.png'); + }); +}; +function pingServer() { + if (lockGot && gpsaccuracy < 30) { + $.get(mkApiUrl('ping') + "?user=" + username + "&lat=" + latitude + "&long=" + longitude); + } +} +; +function onError(error) { + $('#loading-error').text("Check your device's network and location settings, and ensure a clear view of the sky."); +} + +function popGPS() { + navigator.notification.alert("Latitude: " + latitude + + "\nLongitude: " + longitude + + "\nAccuracy: " + gpsaccuracy + + "\nTerrain: " + terraintypename + " (" + terraintypeid + ")", + null, + "GPS Information", + "Close"); +} +$('#terrain-image').click(function () { + popGPS(); +}); +// Initial GPS position and stuff +navigator.geolocation.getCurrentPosition(updateTerrain, onError, {timeout: 10000, enableHighAccuracy: true}); +// Update position +setInterval(function () { + navigator.geolocation.getCurrentPosition(updatePosition, onError, {timeout: 10000, enableHighAccuracy: true}); +}, 1000); +// Update position + terrain +setInterval(function () { + navigator.geolocation.getCurrentPosition(updateTerrain, onError, {timeout: 10000, enableHighAccuracy: true}); + loadPlaces(latitude, longitude); +}, 1000 * 20); +// Ping the server with coordinates +setInterval(pingServer, 5000); +// Show error if it's taking too long +setTimeout(function () { + onError(); +}, 15 * 1000); + + +////////////////////////////////////////////// +// Profile, stats, and chat stuff +////////////////////////////////////////////// + + +/* + * Handles general server communication. + */ + +/** + * Syncs the user's stats with the server and calls refreshStats(). + */ +function syncStats() { + $.getJSON(mkApiUrl('getstats'), { + user: username + }, function (data) { + if (data.status === 'OK') { + maxenergy = data.stats.maxenergy; + energy = data.stats.energy; + level = data.stats.level; + refreshStats(); + } + }); +} + +/** + * Display the current stats on the home screen. + */ +function refreshStats() { + energypercent = (energy * 1.0 / maxenergy * 1.0) * 100.0; + $('#energybar').css('width', String(energypercent) + '%'); +} + +function getChat() { + if (lockGot) { + $.getJSON(mkApiUrl('chat', 'cs'), { + lat: latitude, + long: longitude + }, function (data) { + data = sortResults(data, 'time', true); + var content = ""; + data.forEach(function (msg) { + content += "" + msg.username + " " + msg.message + "
"; + }); + $('#chatmsgs').html(content); + }); + } +} + + +syncStats(); +setInterval(function () { + syncStats(); +}, 10 * 1000); +setInterval(function () { + getChat(); +}, 2000); +// Send chat messages +$("#chatsendform").submit(function (event) { + message = $('#chatbox-input').val(); + if (message !== '') { + $.post(mkApiUrl('chat', 'cs'), { + user: username, + lat: latitude, + long: longitude, + msg: message + }, function (data) { + if (data.status === 'OK') { + $('#chatbox-input').val(""); + $("#chatmsgs").animate({scrollTop: $('#chatmsgs').prop("scrollHeight")}, 1000); + } + }, "json"); + } + event.preventDefault(); + return false; +}); +function toggleChat() { + if ($('#chatmsgs').css('display') === 'none') { + openChat(); + } else { + closeChat(); + } +} + +function closeChat() { + $('#chatmsgs').css('display', 'none'); + $('#chatbox').css('height', 'auto'); +} + +function openChat() { + $('#chatbox').css('height', '50%'); + $('#chatmsgs').css('display', 'block'); + $("#chatmsgs").animate({scrollTop: $('#chatmsgs').prop("scrollHeight")}, 1000); +} + +function openProfile(user) { + user = typeof user !== 'undefined' ? user : username; + $('#main-content').load("screens/profile.html", null, function (x) { + $('#overlay-main').css('display', 'block'); + loadProfile(user); + }); +} + +function openRules() { + openmodal('rules', '#rules-modal'); +} + +function openMenu(topage) { + topage = typeof topage !== 'undefined' ? topage : ""; + $('#main-content').load("screens/menu.html", null, function (x) { + $('#overlay-main').css('display', 'block'); + if (topage !== '') { + $('#' + topage + '-tab').tab('show'); + } + }); +} + + + +////////////////////////////////////////////// +// Other things +////////////////////////////////////////////// + +function closeMain() { + $('#overlay-main').slideDown(100, function () { + $('#overlay-main').css('display', 'none'); + $('#main-content').html(""); + }); +} + +// Handle back button to close things +document.addEventListener("backbutton", function (event) { + if ($('#overlay-main').css('display') !== 'none') { + closeMain(); + } else if ($('#chatmsgs').css('display') !== 'none') { + toggleChat(); + } +}, false); +// Show the rules +if (localStorage.getItem("seenrules") !== 'yes') { + openRules(); + localStorage.setItem("seenrules", 'yes'); +} \ No newline at end of file diff --git a/www/js/location.js b/www/js/location.js index f05c7f9..9cdb810 100644 --- a/www/js/location.js +++ b/www/js/location.js @@ -14,8 +14,10 @@ terrainGot = false; latitude = 0.0000; longitude = 0.0000; gpsaccuracy = 9999; +requiredaccuracy = 40; // End Globals +var fetchplacecounter = 0; var lastgpstime = 0; var terraintypeid = 0; var map = L.map('map'); @@ -36,13 +38,14 @@ $(".leaflet-control-zoom").css("visibility", "hidden"); map.addLayer(new L.tileLayer(tileurl, {minZoom: 17, maxZoom: 18})); // Places layer var placeLayer = L.geoJson( - {"name": "Places", "type": "FeatureCollection", "features": [{"type": "Feature", "geometry": {"type": "Point", "coordinates": [0, 0]}, "properties": {"osm_id": -1, "name": null}}]}, + {"name": "Places", "type": "FeatureCollection", "features": [{"type": "Feature", "geometry": {"type": "Point", "coordinates": [0, 0]}, "properties": {"osm_id": -1, "name": null, 'gameinfo': {'teamid': "0"}}}]}, { onEachFeature: onPlaceTap, pointToLayer: function (feature, latlng) { + var teamcolor = "#" + getTeamColorFromId(feature.properties.gameinfo.teamid); return L.circleMarker(latlng, { radius: 14, - fillColor: "#ff7800", + fillColor: teamcolor, color: "#000", weight: 1, opacity: 1, @@ -85,10 +88,19 @@ var lc = L.control.locate({ locateOptions: {} // define location options e.g enableHighAccuracy: true or maxZoom: 10 }).addTo(map); lc.start(); + + function mapPos(lat, lon) { lockGot = true; hideLoading(); - loadPlaces(latitude, longitude); + // Don't update places every time + if (fetchplacecounter === 0) { + loadPlaces(latitude, longitude); + } + fetchplacecounter++; + if (fetchplacecounter > 10) { + fetchplacecounter = 0; + } //map.setView(new L.LatLng(lat, lon), 16, {animate: true}); //map.panTo(new L.LatLng(lat, lon)); //map.invalidateSize(); @@ -107,17 +119,23 @@ function onPlaceTap(feature, layer) { } function loadPlaces(lat, long) { - $.getJSON( - "http://earth.apis.netsyms.net/places.php?format=geojson&lat=" + lat + "&long=" + long + "&radius=.25&names=1", - function (data) { - if (data.type === 'FeatureCollection') { - placeLayer.clearLayers(); - data.features.forEach(function (item) { - item.properties.popupContent = "" + item.properties.name + ""; - placeLayer.addData(item); - }); + var url = mkApiUrl('places', 'gs') + "?lat=" + lat + "&long=" + long + "&radius=.25&names=1"; + try { + $.getJSON( + url, + function (data) { + if (data.type === 'FeatureCollection') { + placeLayer.clearLayers(); + data.features.forEach(function (item) { + item.properties.popupContent = "" + item.properties.name + ""; + placeLayer.addData(item); + }); + } } - }); + ); + } catch (ex) { + serverProblemsDialog(); + } } function openPlace(feature) { @@ -131,7 +149,7 @@ function openPlace(feature) { * Hide the loading overlay if everything is loaded, otherwise do nothing */ function hideLoading() { - if (lockGot && terrainGot && gpsaccuracy < 30 && $('#loading').css('display') !== 'none') { + if (lockGot && terrainGot && gpsaccuracy < requiredaccuracy && $('#loading').css('display') !== 'none') { $('#loading').fadeOut('slow', function () { $('#loading').css('display', 'none'); }); @@ -143,7 +161,7 @@ var updatePosition = function (position) { longitude = position.coords.longitude; lastgpstime = position.timestamp; gpsaccuracy = position.coords.accuracy; - if (gpsaccuracy > 30) { + if (gpsaccuracy > requiredaccuracy) { $('#no-lock').css('display', 'block'); } else { $('#no-lock').css('display', 'none'); @@ -170,7 +188,7 @@ var updateTerrain = function (position) { }); }; function pingServer() { - if (lockGot && gpsaccuracy < 30) { + if (lockGot && gpsaccuracy < requiredaccuracy) { $.get(mkApiUrl('ping') + "?user=" + username + "&lat=" + latitude + "&long=" + longitude); } } diff --git a/www/js/main.js b/www/js/main.js index 1e13190..9d3857a 100644 --- a/www/js/main.js +++ b/www/js/main.js @@ -21,6 +21,10 @@ function onDeviceReady() { } } +function serverProblemsDialog() { + openscreen("servererror"); +} + function mkApiUrl(action, server) { server = typeof server !== 'undefined' ? server : "gs"; return "http://" + server + ".terranquest.net/" + action + ".php"; @@ -111,6 +115,50 @@ function closeMain() { }); } +function getTeamInfoFromId(id) { + var team_string = "None"; + var team_color = "FFFFFF"; + switch (id) { + case "1": + team_string = "Water"; + team_color = "00BFFF"; + break; + case "2": + team_string = "Fire"; + team_color = "FF4000"; + break; + case "3": + team_string = "Earth"; + team_color = "D1A000"; + break; + case "4": + team_string = "Wind"; + team_color = "96FFFF"; + break; + case "5": + team_string = "Light"; + team_color = "FFFF96"; + break; + case "6": + team_string = "Dark"; + team_color = "ABABAB"; + break; + default: + team_string = "None"; + team_color = "FFFFFF"; + break; + } + return {'name': team_string, 'color': team_color}; +} + +function getTeamNameFromId(id) { + return getTeamInfoFromId(id)['name']; +} + +function getTeamColorFromId(id) { + return getTeamInfoFromId(id)['color']; +} + // Handle back button to close things document.addEventListener("backbutton", function (event) { if ($('#overlay-main').css('display') !== 'none') { diff --git a/www/screens/intro.html b/www/screens/intro.html index 86c30f6..faa20fc 100644 --- a/www/screens/intro.html +++ b/www/screens/intro.html @@ -6,34 +6,38 @@
+ - \ No newline at end of file diff --git a/www/screens/inventory.html b/www/screens/inventory.html index 753bc71..abaf430 100644 --- a/www/screens/inventory.html +++ b/www/screens/inventory.html @@ -1,10 +1,39 @@
+
+ Loading... +
\ No newline at end of file diff --git a/www/screens/place.html b/www/screens/place.html index 5c993a1..7853717 100644 --- a/www/screens/place.html +++ b/www/screens/place.html @@ -1,9 +1,13 @@
+
\ No newline at end of file diff --git a/www/screens/profile.html b/www/screens/profile.html index e13a063..bf5f477 100644 --- a/www/screens/profile.html +++ b/www/screens/profile.html @@ -1,61 +1,63 @@ -
-
-

-
Badges
-
- Loading... -
-
- -
- +
+
+

+
Badges
+
+ Loading... +
+
+
+ +
+
+
\ No newline at end of file diff --git a/www/screens/servererror.html b/www/screens/servererror.html new file mode 100644 index 0000000..d2be1db --- /dev/null +++ b/www/screens/servererror.html @@ -0,0 +1,20 @@ +
+ +

+ We are experiencing server problems. Try again later. +
+ +
+ (sorry) +

+
+ \ No newline at end of file