simutrans

Simutrans 技術アーキテクチャ

システムアーキテクチャ概要

Simutrans は、階層的なオブジェクト指向設計を採用した交通シミュレーションエンジンです。

目的

このドキュメントは以下の目的で作成されています:

対象読者:

コアコンポーネント

1. ワールド管理 (World Management)

karte_t (Map/World)

planquadrat_t (2D Coordinate)

grund_t (Ground/Foundation)

2. オブジェクトシステム (Object System)

obj_t (Base Object)

オブジェクトライフサイクル

// 3種類の更新メソッド
class obj_t {
    // 毎フレーム呼ばれる(高速、排他的マップアクセス)
    virtual void sync_step(uint32 delta_t);

    // 低速な処理(ルート検索など、マップ変更可能)
    virtual void step(uint32 delta_t);

    // 季節変化(主に視覚的変更)
    virtual void check_season();
};

3. 車両システム (Vehicle System)

構造

simconvoi.cc/h

4. 輸送システム (Transportation System)

simhalt.cc/h (Halt/Station)

simline.cc/h (Line)

5. 経済システム (Economy System)

simfab.cc/h (Factory)

simware.cc/h (Goods/Cargo)

6. プレイヤーシステム (Player System)

グラフィックスシステム

表示アーキテクチャ

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 無し

UI システム

アーキテクチャ原則

クラス階層

gui_frame_t (基底クラス)
├── gui_komponente_t (コンポーネント基底)
│   ├── button_t (ボタン)
│   ├── scrollbar_t (スクロールバー)
│   ├── textinput_t (テキスト入力)
│   ├── label_t (ラベル)
│   └── ... (その他のコンポーネント)
└── 各種ダイアログクラス

UI コンポーネント

テーマシステム

ネットワークシステム

アーキテクチャ

コンポーネント

スクリプトシステム

Squirrel 統合

機能

サウンドシステム

構造

Sound System
├── simsound.cc/h       # サウンド抽象レイヤー
└── sound/              # バックエンド実装
    ├── sdl2_sound.cc   # SDL2実装
    └── sdl_sound.cc    # SDL1実装(レガシー)

MIDI 再生

データ管理

dataobj/ (Data Objects)

descriptor/ (Descriptors)

オブジェクトの静的定義:

I/O システム

io/ ディレクトリ

サポートフォーマット

ビルダーシステム

builder/ ディレクトリ

テンプレートライブラリ (TPL)

tpl/ ディレクトリ

カスタムコンテナ実装:

使用理由

ユーティリティ

utils/ ディレクトリ

メモリ管理

simmem.cc/h

デバッグシステム

simdebug.cc/h

使い方

dbg->message("tag", "Message %d", value);
dbg->warning("tag", "Warning!");
dbg->error("tag", "Error!");

プラットフォーム固有コード

android/

OSX/

Windows/

linux/

ツールシステム

tool/ ディレクトリ

ゲーム内ツール実装:

パフォーマンス最適化

設計原則

  1. キャッシング: 頻繁に使用されるデータをキャッシュ
  2. 遅延評価: 必要になるまで計算を遅延
  3. 空間分割: マップをセクターに分割
  4. イベント駆動: ポーリングではなくイベント

更新戦略

ビルド設定

コンパイルオプション

CMake で制御可能:

プリプロセッサマクロ

セキュリティ

ネットワークセキュリティ

セーブファイル整合性

拡張性

モジュール性

各システムは比較的独立:

プラグインサポート


関連ファイル

コアシステム

UI/グラフィックス

データ管理

ドキュメント


まとめ

Simutrans の技術アーキテクチャは、長年の開発で洗練されてきました:

主な特徴:

このアーキテクチャを理解したら、次は FEATURES.md で具体的なシステムを深掘りしましょう。


今後の開発

最新情報

開発ガイドライン