Simutrans は、階層的なオブジェクト指向設計を採用した交通シミュレーションエンジンです。
このドキュメントは以下の目的で作成されています:
対象読者:
src/simutrans/world/src/simutrans/ground/src/simutrans/obj/// 3種類の更新メソッド
class obj_t {
// 毎フレーム呼ばれる(高速、排他的マップアクセス)
virtual void sync_step(uint32 delta_t);
// 低速な処理(ルート検索など、マップ変更可能)
virtual void step(uint32 delta_t);
// 季節変化(主に視覚的変更)
virtual void check_season();
};
src/simutrans/vehicle/src/simutrans/src/simutrans/player/Display System
├── simgraph.h # グラフィック抽象レイヤー
├── display/ # 表示システム
│ ├── simgraph16.cc # 16bit描画(SDL2)
│ └── simimg.h # 画像管理
└── sys/ # バックエンド実装
├── simsys_s2.cc # SDL2実装
└── simsys_w.cc # GDI実装(Windows)
| バックエンド | ファイル | プラットフォーム |
|---|---|---|
| SDL2 | sys/simsys_s2.cc |
クロスプラットフォーム |
| GDI | sys/simsys_w.cc |
Windows 専用 |
| Server | - | GUI 無し |
gui_frame_t (基底クラス)
├── gui_komponente_t (コンポーネント基底)
│ ├── button_t (ボタン)
│ ├── scrollbar_t (スクロールバー)
│ ├── textinput_t (テキスト入力)
│ ├── label_t (ラベル)
│ └── ... (その他のコンポーネント)
└── 各種ダイアログクラス
場所: src/simutrans/gui/components/
使い方:
class my_frame_t : public gui_frame_t {
button_t my_button;
my_frame_t() {
my_button.init(...);
my_button.add_action_listener(this);
add_component(&my_button);
}
bool action_triggered(gui_action_creator_t*, value_t) override {
// ボタンクリック処理
}
};
themes.src/src/simutrans/network/src/squirrel/simutrans/ai/src/simutrans/script/Sound System
├── simsound.cc/h # サウンド抽象レイヤー
└── sound/ # バックエンド実装
├── sdl2_sound.cc # SDL2実装
└── sdl_sound.cc # SDL1実装(レガシー)
オブジェクトの静的定義:
カスタムコンテナ実装:
vector_tpl: 動的配列slist_tpl: 単方向リストhashtable_tpl: ハッシュテーブルarray_tpl: 固定サイズ配列quickstone_tpl: 高速参照dbg->message("tag", "Message %d", value);
dbg->warning("tag", "Warning!");
dbg->error("tag", "Error!");
ゲーム内ツール実装:
CMake で制御可能:
SIMUTRANS_BACKEND: グラフィックバックエンド選択SIMUTRANS_USE_REVISION: バージョン番号指定CMAKE_BUILD_TYPE: ビルドタイプ(Debug/Release)MULTI_THREAD: マルチスレッド対応USE_SOFTPOINTER: ソフトウェアポインタCOLOUR_DEPTH: 色深度設定各システムは比較的独立:
src/simutrans/world/, src/simutrans/simworld.{h,cc}src/simutrans/obj/src/simutrans/vehicle/src/simutrans/display/src/simutrans/gui/src/simutrans/dataobj/loadsave.{h,cc}src/simutrans/network/documentation/coding_styles.txtdocumentation/about-the-code.txtSimutrans の技術アーキテクチャは、長年の開発で洗練されてきました:
主な特徴:
このアーキテクチャを理解したら、次は FEATURES.md で具体的なシステムを深掘りしましょう。
documentation/coding_styles.txtdocumentation/about-the-code.txt