From 63d24c001fc483fbefbcb311a381c96e7118eab7 Mon Sep 17 00:00:00 2001 From: Peter Galloway Date: Wed, 19 Jul 2017 19:39:31 +1200 Subject: [PATCH] Added position update in yacht #story[1047] --- .../java/seng302/gameServer/GameState.java | 27 ++++++++++--------- src/main/java/seng302/models/Yacht.java | 13 +++++++++ 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/src/main/java/seng302/gameServer/GameState.java b/src/main/java/seng302/gameServer/GameState.java index d36968fc..288689ee 100644 --- a/src/main/java/seng302/gameServer/GameState.java +++ b/src/main/java/seng302/gameServer/GameState.java @@ -1,8 +1,12 @@ package seng302.gameServer; +import java.util.List; +import java.util.Map; +import java.util.Set; import seng302.models.Player; import java.util.ArrayList; +import seng302.models.Yacht; /** * A Static class to hold information about the current state of the game (model) @@ -10,8 +14,10 @@ import java.util.ArrayList; */ public class GameState { + private static Long previousUpdateTime; private static String hostIpAddress; - private static ArrayList players; + private static List players; + private static Map yachts; private static Boolean isRaceStarted; private static GameStages currentStage; @@ -20,13 +26,15 @@ public class GameState { players = new ArrayList<>(); currentStage = GameStages.LOBBYING; isRaceStarted = false; + //set this when game stage changes to prerace + previousUpdateTime = System.currentTimeMillis(); } public static String getHostIpAddress() { return hostIpAddress; } - public static ArrayList getPlayers() { + public static List getPlayers() { return players; } @@ -50,16 +58,11 @@ public class GameState { GameState.currentStage = currentStage; } - /** - * This iterates through all players and updates each players info to its new state based on its current data - */ - private void update(){ - for(Player player : players) { - // TODO: 10/07/17 wmu16 - Update all player info + public void update() { + Long timeInterval = System.currentTimeMillis() - previousUpdateTime; + previousUpdateTime = System.currentTimeMillis(); + for (Yacht yacht : yachts.values()) { + yacht.update(timeInterval); } } - - - - } diff --git a/src/main/java/seng302/models/Yacht.java b/src/main/java/seng302/models/Yacht.java index 7ea7e97e..cc6aa577 100644 --- a/src/main/java/seng302/models/Yacht.java +++ b/src/main/java/seng302/models/Yacht.java @@ -81,6 +81,19 @@ public class Yacht { this.position = "-"; } + /** + * @param timeInterval since last update in milliseconds + */ + public void update(Long timeInterval) { + Double secondsElapsed = timeInterval / 1000000.0; + Double metersCovered = velocity * secondsElapsed; + // 111111 meters is approximately 1 degree of lat/long at the equator + lat = lat + (metersCovered * Math.sin(heading * (2 * Math.PI / 360))) / 111111; + lon = lon + (metersCovered * Math.cos(heading * (2 * Math.PI / 360))) / (111111 * Math + .cos(lat * (2 * Math.PI / 360))); + // formula take from https://gis.stackexchange.com/questions/2951/algorithm-for-offsetting-a-latitude-longitude-by-some-amount-of-meters + } + public String getBoatType() { return boatType; }