/*------------------------------------------------------------------------- * キャプチャ * ---------------------------------------------------------------------------*/ private void do_capture() { // 前回のキャプチャからの経過時間を得る int sectiontime = m_capture_timer.GetSectionTimeMilliseconds(); if (sectiontime < m_capture_interval) { // キャプチャ間隔ではない return; } // 間隔測定リセット m_capture_timer.StartSection(); // 情報更新 update_myship_data(sectiontime, get_myship_data()); }
/*------------------------------------------------------------------------- * 캡처 * ---------------------------------------------------------------------------*/ private void do_capture() { // 前회の캡처からの경과시간を得る int sectiontime = m_capture_timer.GetSectionTimeMilliseconds(); if (sectiontime < m_capture_interval) { // 캡처간격ではない return; } // 간격測定리셋 m_capture_timer.StartSection(); // 정보업데이트 update_myship_data(sectiontime, get_myship_data()); }
/*------------------------------------------------------------------------- * 自分の船の情報更新 * クライアントから受信した情報か自ら得た情報かは考慮されない * ---------------------------------------------------------------------------*/ private void update_myship_data(int sectiontime, gvo_analized_data data) { // if (data == null) { return; } // 航路記録なしならなにもしない if (!m_lib.setting.save_searoutes) { // 位置と角度は初期化する m_pos = new Point(-1, -1); m_is_in_the_sea = false; // 到達予想をリセット reset_expect(); return; } // 経過時間だけ追加 m_db.SpeedCalculator.AddIntervalOnly(sectiontime); // 造船開始と終了 // 同時にフラグが立った場合は終了を優先する if (data.is_start_build_ship) { m_db.BuildShipCounter.StartBuildShip(data.build_ship_name); } if (data.is_finish_build_ship) { m_db.BuildShipCounter.FinishBuildShip(); } // 日付キャプチャ成功なら利息からの日数を更新する if (data.capture_days_success) { // 利息からの日数を更新する m_db.InterestDays.Update(data.days, data.interest); // 造船日数を更新する m_db.BuildShipCounter.Update(data.days); } else { if (m_expect_delay_timer.GetSectionTimeMilliseconds() > OUT_OF_SEA_TIME_OUT) { // 海上ではない m_is_in_the_sea = false; // 到達予想をリセット reset_expect(); } // 日付キャプチャ失敗ならそれ以外の解析を行わない return; } // キャプチャが成功したかチェック if (!data.capture_success) { // 日付のみキャプチャ成功 m_is_draw_expect_pos = true; // 到達予想位置を描画する必要あり // ディレイタイマリセット m_expect_delay_timer.StartSection(); return; } // 自分の船の位置 m_pos = new Point(data.pos_x, data.pos_y); m_angle = data.angle; m_is_in_the_sea = true; // 海上 m_capture_sucess = true; // キャプチャ成功 // 測量位置を追加する // 位置によっては追加されない m_db.SeaRoute.AddPoint(m_pos, data.days, gvo_chat.ToIndex(data.accident)); // 速度算出 // 更新間隔はすでに設定済み m_db.SpeedCalculator.Add(m_pos, 0); // キャプチャ時は描画をスキップしない m_lib.device.SetMustDrawFlag(); // 到達位置予想用角度の更新 m_expect_vector = transform.ToVector2(gvo_capture.AngleToVector(m_angle)); // タイマリセット m_expect_pos_timer.StartSection(); m_expect_delay_timer.StartSection(); m_is_draw_expect_pos = false; // 解析できてるので予想位置を描画する必要がない }
/*------------------------------------------------------------------------- * * ---------------------------------------------------------------------------*/ private void reset_expect() { m_expect_vector = Vector2.Empty; m_is_draw_expect_pos = false; m_expect_pos_timer.StartSection(); }
/*------------------------------------------------------------------------- * 본인の배の정보업데이트 * クライアントから受信した정보か自ら得た정보かは考慮されない * ---------------------------------------------------------------------------*/ private void update_myship_data(int sectiontime, gvo_analized_data data) { // if (data == null) { return; } // 항로기록없음ならなにもしない if (!m_lib.setting.save_searoutes) { // 위치と각도は初期化する m_pos = new Point(-1, -1); m_is_in_the_sea = false; // 도달예상を리셋 reset_expect(); return; } // 경과시간だけ추가 m_db.SpeedCalculator.AddIntervalOnly(sectiontime); // 조선개시と종료 // 同時に플래그が立った場合は종료を優先する if (data.is_start_build_ship) { m_db.BuildShipCounter.StartBuildShip(data.build_ship_name); } if (data.is_finish_build_ship) { m_db.BuildShipCounter.FinishBuildShip(); } // 일付캡처成功なら이자からの일수を업데이트する if (data.capture_days_success) { // 이자からの일수を업데이트する m_db.InterestDays.Update(data.days, data.interest); // 조선일수を업데이트する m_db.BuildShipCounter.Update(data.days); } else { if (m_expect_delay_timer.GetSectionTimeMilliseconds() > OUT_OF_SEA_TIME_OUT) { // 해상ではない m_is_in_the_sea = false; // 도달예상を리셋 reset_expect(); } // 일付캡처실패ならそれ以외の분석を行わない return; } // 캡처が成功したかチェック if (!data.capture_success) { // 일付のみ캡처成功 m_is_draw_expect_pos = true; // 도달예상위치を그리기する必要あり // ディレイタイマ리셋 m_expect_delay_timer.StartSection(); return; } // 본인の배の위치 m_pos = new Point(data.pos_x, data.pos_y); m_angle = data.angle; m_is_in_the_sea = true; // 해상 m_capture_sucess = true; // 캡처成功 // 측량위치を추가する // 위치によっては추가されない m_db.SeaRoute.AddPoint(m_pos, data.days, gvo_chat.ToIndex(data.accident)); // 속도算出 // 업데이트간격はすでに설정済み m_db.SpeedCalculator.Add(m_pos, 0); // 캡처時は그리기を스킵しない m_lib.device.SetMustDrawFlag(); // 도달위치예상용각도の업데이트 m_expect_vector = transform.ToVector2(gvo_capture.AngleToVector(m_angle)); // タイマ리셋 m_expect_pos_timer.StartSection(); m_expect_delay_timer.StartSection(); m_is_draw_expect_pos = false; // 분석できてるので예상위치を그리기する必要がない }