Skip to content

calculate exact values of vehicle steps#569

Open
simupoppo wants to merge 3 commits into
teamhimeh:OTRP-KUTAv6from
simupoppo:OTRP-KUTA-RC_fix_start_steps
Open

calculate exact values of vehicle steps#569
simupoppo wants to merge 3 commits into
teamhimeh:OTRP-KUTAv6from
simupoppo:OTRP-KUTA-RC_fix_start_steps

Conversation

@simupoppo

Copy link
Copy Markdown
Collaborator

最後尾の車両のstepを記録することで、方向転換せずに発車した場合に車両が飛ぶ不具合を最小限にしました

@teamhimeh teamhimeh left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated code review by Antigravity.

This review was generated by analyzing the diff in the context of the full codebase. It specifically addresses the root cause of the test_priority_signal_reserve automated test failure.

@teamhimeh teamhimeh left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Antigravityによる自動コードレビューです。

先ほどのレビューの日本語訳になります。このレビューはコードベース全体と差分をコンテキストとして分析した結果生成されました。特にCIで失敗している test_priority_signal_reserve テストの根本原因について指摘しています。

Comment thread simconvoi.cc
fahr[0]->set_leading(false); // switches off signal checks ...
uint32 dist = VEHICLE_STEPS_PER_CARUNIT*train_length<<YARDS_PER_VEHICLE_STEP_SHIFT;
inspecting = self;
if( using_last_car_steps ) {

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

新しいコードでは、最初から diststart_step が足され、すべての距離調整が set_leading(false) (シグナルチェック無効)の状態のまま最初の do_drive ループで行われるようになっています。
以前のコードでは、シグナルチェックを無効にして初期配置を行った後、set_leading(true) でシグナルチェックを有効に戻してから、2回目のループで start_step までの微調整を行っていました。
この正確な配置調整時にシグナルチェックが行われなくなったため、自動テスト test_priority_signal_reserve が失敗しています(シグナルの状態評価が誤る、または予約ブロックの確保に失敗するなどの問題が生じています)。初期ステップへの進行時には適切にシグナルチェックが有効になるよう修正をお願いします。

(Antigravity による自動レビュー)

Comment thread simconvoi.cc

// is driving direction not change?
ribi_t::ribi neue_richtung_rwr = ribi_t::backward(fahr[0]->calc_direction(route.front(), route.at(min(2, route.get_count() - 1))));
ribi_t::ribi neue_richtung_rwr = ribi_t::backward(front()->calc_direction(route.front(), route.at(min(1, route.get_count() - 1))));

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

route.at(min(2, route.get_count() - 1))min(1, route.get_count() - 1) に変更されました。
Simutransのルーティングにおいて進行方向を確認する際、とくに次のタイルが対角線のステップであったり極端に短い区間である場合、正確な方角を得るために「次の次のタイル (at(2))」を参照する必要があります。これを at(1) に変更すると、カーブやポイントなどで neue_richtung_rwr が誤って計算される可能性があります。
古いコードの min(2, ...) は方向計算のために意図的に2タイル先まで見る設計だったと思われますが、この変更は意図的なものでしょうか?

(Antigravity による自動レビュー)

@teamhimeh

teamhimeh commented Jun 7, 2026

Copy link
Copy Markdown
Owner

コードの変更内容、既存レビューコメント、CI結果を分析し、変更を網羅するための手動テストケースを作成しました。
予期せぬ位置ずれ、方向判定、信号予約の回帰がないか確認するため、以下のテストの実施を推奨します。

提案する手動テストケース

  • テストケース1:直線上で単独の複数車両編成が同方向へ再発車した際の位置維持

    1. テスターは直線の線路上に、列車が完全に収まる駅と、その先に同じ方向へ続く線路を建設する。
    2. 機関車と長さの異なる客車または貨車を複数連結した単独編成を作成し、その駅を経由して同方向へ走り続けるダイヤを設定する。
    3. 編成を駅へ停車させ、発車直前に先頭車と最後尾車のタイル内位置、および各車両間の間隔を目視で記録する。
    4. 一時停止または低速でゲームを進め、編成を方向転換させずに発車させる。
    5. 発車直後に最後尾車を含む各車両が前方へ瞬間移動せず、重なりや不自然な隙間を生じず、停車前と同じ順序・間隔で滑らかに走り出すことを確認する。
    6. 同じ駅で複数回停車・発車させても位置ずれが累積しないことを確認する。
  • テストケース2:駅で連結した複数編成が同方向へ再発車した際の最後尾位置維持

    1. テスターは十分な長さの直線駅を建設し、親編成の停車設定に「Wait for coupling」、子編成の停車設定に「Try coupling」を指定する。
    2. 親編成を先に駅で待機させ、別の子編成を同じ方向から進入させて連結させる。
    3. 連結完了直後に、最も後ろの子編成の最後尾車について、タイル内位置と直前車両との間隔を目視で記録する。
    4. 連結後の全編成が同じ進行方向へ出発するようダイヤを進める。
    5. 発車直後に最後尾車が記録位置から滑らかに動き始め、前方または後方へ飛ばないことを確認する。
    6. 親編成と各子編成の境界を含め、車両の重なり、隙間、連結解除、順序変更が発生せず、一体の編成として走行を継続することを確認する。
  • テストケース3:カーブ・対角線に接する停車位置からの同方向再発車

    1. テスターは駅またはウェイポイントの出口直後がカーブになり、その次のタイルが対角線方向へ続く線路を建設する。
    2. 複数車両の編成を作成し、カーブの先へ同じ進行方向で走るダイヤを設定する。
    3. 編成を駅またはウェイポイントに停車させ、先頭車と最後尾車の向き、順序、タイル内位置を確認する。
    4. ゲームを低速で進め、編成を発車させて経路の最初の2タイルを通過させる。
    5. 同方向への発車が方向転換として扱われず、車両の順序や画像方向が反転しないことを確認する。
    6. カーブおよび対角線への進入時に、最後尾車を含む車両が飛んだり重なったりせず、間隔を保って滑らかに通過することを確認する。
  • テストケース4:実際に方向転換する編成および単行道路車両の回帰確認

    1. テスターは行き止まりの鉄道駅を建設し、複数車両の列車が到着後に反対方向へ戻るダイヤを設定する。
    2. 列車を終点へ到着させて方向転換させ、先頭・最後尾の役割、車両順序、画像方向が設定どおりに更新されることを確認する。
    3. 列車の再発車時に車両が飛んだり重なったりせず、反対方向へ正常に走り出すことを確認する。
    4. 別途、行き止まりの道路停留所と単行のバスまたはトラックを用意し、到着後に折り返すダイヤを設定する。
    5. 道路車両を折り返させ、転回時の横向き画像が表示された後、反対方向の画像へ正常に切り替わることを確認する。
    6. 鉄道編成と道路車両のいずれも、実際の方向転換が同方向発車と誤判定されないことを確認する。
  • テストケース5:優先信号通過後の駅発車時における進路予約

    1. テスターは直線の本線を敷設し、順に車庫、優先信号1、駅A、優先信号2、分岐、合流、本線信号、駅C、駅Dを配置する。分岐側には駅Bを設置し、駅Bの出口に通常信号を配置する。
    2. 列車Aに「駅A → 分岐側の駅B → 駅C」のダイヤを設定し、列車Bに「駅C → 駅D」のダイヤを設定する。
    3. 列車Aを駅Aで待機させた後に列車Bを車庫から出発させ、列車Bが優先信号1で停止していることを確認する。
    4. 列車Aのダイヤを駅Bへ進め、方向転換せずに駅Aから発車させる。
    5. 列車Aが分岐を通って駅Bへ到着し、駅Bより先の進路を予約することを確認する。
    6. 列車Bが優先信号1で正しく待機している間に、駅B出口の通常信号が進行現示へ変わることを確認する。
    7. 列車Aが予約失敗で駅Bに閉じ込められたり、不正な位置へ移動したりせず、その後もダイヤどおり走行できることを確認する。

(Automated PR test case generation by AI agent)

@simupoppo

Copy link
Copy Markdown
Collaborator Author

ローカルマップにおいて、各種waytypeの上記各条件におけるホーム発着時の挙動を確認しました

@simupoppo

Copy link
Copy Markdown
Collaborator Author

また、参照ミス等によるクラッシュは現時点では確認していません

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants