Exemplo n.º 1
0
    public void SetData(string s)
    {
        if (showingCheckResult)
        {
            InfoWindow.Reset();
            showingCheckResult = false;
        }

        string[] data      = s.Split(',');
        char[]   unit      = { 'M' };
        float    latitude  = float.Parse(data[4]);
        float    longitude = float.Parse(data[5]);
        float    altitude  = float.Parse(data[6].TrimEnd(unit));

        // 前回のGPS情報と比較して一致したらreturn
        if ((latitude == checkLatitude) &&
            (longitude == checkLongitude) &&
            (altitude == checkAltitude))
        {
//            return;
        }
        checkLatitude  = latitude;
        checkLongitude = longitude;
        checkAltitude  = altitude;

        // 重複データではないので描画
        count++;
        lastTime        = currentTime;
        lastAltitude    = currentAltitude;
        currentAltitude = altitude;

        float  rssi    = float.Parse(data[2]);
        string strTime = data[3];

        string[] dateTime = strTime.Split(' ');
        string   strDate;

        string[] timeToken;
        if (dateTime.Length == 2)
        {
            strDate   = dateTime[0];
            timeToken = dateTime[1].Split(':');
        }
        else
        {
            strDate   = System.DateTime.UtcNow.ToString("yyyy-MM-dd");
            timeToken = strTime.Split(':');
        }

        int iHour   = int.Parse(timeToken[0]);
        int iMinute = int.Parse(timeToken[1]);
        int iSecond = int.Parse(timeToken[2]);


        currentTime = iHour * 3600
                      + iMinute * 60
                      + iSecond;
        if (timeToken[0] == "00")
        {
            if (currentTime < lastTime)
            {
                lastTime -= 3600 * 24;
            }
        }

        strTime = iHour.ToString("00") + ":"
                  + iMinute.ToString("00") + ":"
                  + iSecond.ToString("00");


        float deltaTime = (float)(currentTime - lastTime);

        lastClimingSpeed = climingSpeed;
        if ((deltaTime > 0f) && (deltaTime < 3600f))
        {
            if (currentAltitude == lastAltitude)
            {
                // センサの返す標高が前回と変わらないことがあるので
                // その場合は前回速度を使う
                climingSpeed = lastClimingSpeed;
            }
            else
            {
                climingSpeed = (currentAltitude - lastAltitude) / deltaTime;
            }
        }
        else
        {
            climingSpeed = 0f;
        }

        string sign = " ";

        if (rssi < 0)
        {
            sign = "-";
            rssi = Mathf.Abs(rssi);
        }
        string strCount        = count.ToString("###");
        string strLatitude     = latitude.ToString("###.00000");
        string strLongitude    = longitude.ToString("###.00000");
        string strAltitude     = currentAltitude.ToString("##,###") + " m";
        string strzAltitude    = currentAltitude.ToString("00,000") + " m";
        string strRSSI         = sign + rssi.ToString("###.00 dBm");
        string strzRSSI        = sign + rssi.ToString("000.00 dBm");
        string strClimingSpeed = climingSpeed.ToString("##0.00 m/s");


        // 地図の中心を設定(初回のみ)
        if (!init)
        {
            GeoCalculator.UpdateReferencePos(latitude, longitude);
            mapInitializer.SetMapCenter(latitude, longitude);
            init = true;
        }

        // バルーン位置更新
        mover.SetData(latitude, longitude, currentAltitude, rssi, strTime);

        // バルーンラベル更新
        balloonLabel.SetData(strLatitude, strLongitude, strAltitude, strRSSI);

        // ログウィンドウ更新
        InfoWindow.SetData(strDate + "  " + strTime + "  " + strLatitude + "  " + strLongitude + "  " + strzAltitude);

        // データウィンドウ更新
        dataWindow.SetData(strCount, strTime, strLatitude, strLongitude, strAltitude, strClimingSpeed, strRSSI);

        // 標高グラフ更新
        altitudeGraph.AddPoint(deltaTime, currentAltitude);

        // 上昇速度グラフ更新
        climingSpeedGraph.AddPoint(deltaTime, climingSpeed);

        // モジュールイメージ更新
        moduleImager.SetData(-rssi);

        // 電波拡散表示
        signal.Ping();

        // サウンド更新
        if (cfg.SoundEffect)
        {
            if (!se.isPlaying)
            {
                se.PlayDelayed(0.3f);
            }
        }
    }