// Update is called once per frame
    void Update()
    {
        if (MyLocationService.instance == null || editorMode || Application.platform != RuntimePlatform.Android)
        {
            // editor mode : player location depends on inputs
            float latStep = 0.001f * editorModePlayerSpeed;
            float lonStep = 0.001f * editorModePlayerSpeed;

            float newPlayerLat = playerLat;
            float newPlayerLon = playerLon;

            bool spacePressed      = Input.GetKeyDown(KeyCode.Space);
            bool leftArrowPressed  = Input.GetKeyDown(KeyCode.LeftArrow);
            bool rightArrowPressed = Input.GetKeyDown(KeyCode.RightArrow);
            bool upArrowPressed    = Input.GetKeyDown(KeyCode.UpArrow);
            bool downArrowPressed  = Input.GetKeyDown(KeyCode.DownArrow);

            bool newInput = spacePressed || leftArrowPressed || rightArrowPressed || upArrowPressed || downArrowPressed;

            if (leftArrowPressed)
            {
                newPlayerLon -= lonStep;
            }
            if (rightArrowPressed)
            {
                newPlayerLon += lonStep;
            }
            newPlayerLon = (newPlayerLon < -180) ? (newPlayerLon + 360) : ((newPlayerLon > 180) ? (newPlayerLon - 360) : newPlayerLon);
            if (upArrowPressed)
            {
                newPlayerLat += latStep;
            }
            if (downArrowPressed)
            {
                newPlayerLat -= latStep;
            }
            newPlayerLat = (newPlayerLat < -90) ? -90 : ((newPlayerLat > 90) ? 90 : newPlayerLat);

            if (newInput)
            {
                AddManualPlayerPositionMeasure(newPlayerLat, newPlayerLon);
                playerLat = newPlayerLat;
                playerLon = newPlayerLon;
            }

            playerPositionIsValid = true;
        }
        else if (MyLocationService.instance.locationServiceIsRunning)
        {
            // release mode : player location depends on GPS
            GeoPoint playerLocation = MyLocationService.instance.playerLocation;
            playerLon = playerLocation.lon_d;
            playerLat = playerLocation.lat_d;
            AddManualPlayerPositionMeasure(playerLat, playerLon);

            playerPositionIsValid = true;
        }

        if (playerPositionIsValid && mapGenerator.mapIsReady)
        {
            PlayerPositionMeasure playerPosition = GetLastMeasure();
            if (playerPosition != null)
            {
                Vector3 playerPositionInScene = mapGenerator.GetWorldPositionFromLatLon(playerPosition.lattitude, playerPosition.longitude);
                playerMouvTarget.position = playerPositionInScene + 2.5f * Vector3.up;
            }
        }
    }