Skip to content

srcs__core__engine_cpp

Ishi_eenn edited this page May 19, 2026 · 2 revisions

srcs/core/engine.cpp

役割

ゲーム全体の進行役。GLFWウィンドウ、入力、World、Player、ChunkManager、Rendererをつなぎ、タイトル画面からメインループ、終了処理までを管理する。

主な型

  • RayHit (struct, 行 54)
  • Engine (struct, 行 143)

関数一覧

  • castRay: 行 63-116
  • rebuildModified: 行 121-135
  • Engine::Engine: 行 157-157
  • Engine::~Engine: 行 158-158
  • Engine::init: 行 163-226
  • Engine::run: 行 240-483
  • Engine::shutdown: 行 489-502

関数ごとの説明

castRay

  • 場所: 行 63-116
  • シグネチャ: static RayHit castRay(const glm::vec3& origin, const glm::vec3& dir, float max_dist, World& world)
  • 内容: このファイルの責務に沿った補助処理を行う。
  • 主な呼び出し: ivec3(), floor(), abs(), getWorldBlock(), min()

手順:

  1. 入力値や現在状態を検査し、処理すべき条件を絞る。
  2. 対象範囲やキューをループで走査する。
  3. 必要な参照データや現在状態を取得する。
  4. 処理結果または成功/失敗を呼び出し元へ返す。

rebuildModified

  • 場所: 行 121-135
  • シグネチャ: static void rebuildModified(int wx, int wz, ChunkManager& mgr)
  • 内容: 入力データから描画または処理に使う中間データを構築する。
  • 主な呼び出し: rebuildModified(), floor(), rebuildChunkAt()

Engine::Engine

  • 場所: 行 157-157
  • シグネチャ: Engine::Engine() : impl_(std::make_unique<Impl>())
  • 内容: このファイルの責務に沿った補助処理を行う。
  • 主な呼び出し: Engine(), impl_()

Engine::~Engine

  • 場所: 行 158-158
  • シグネチャ: Engine::~Engine()
  • 内容: このファイルの責務に沿った補助処理を行う。
  • 主な呼び出し: Engine(), shutdown()

Engine::init

  • 場所: 行 163-226
  • シグネチャ: bool Engine::init(uint32_t seed, int width, int height)
  • 内容: GLFW/OpenGLのウィンドウを作成し、Renderer、World、Player、ChunkManagerを初期化してゲーム実行可能な状態にする。
  • 主な呼び出し: init(), glfwInit(), fprintf(), glfwWindowHint(), glfwGetPrimaryMonitor(), glfwGetVideoMode(), glfwCreateWindow(), glfwTerminate(), glfwMakeContextCurrent(), glfwSwapInterval()

手順:

  1. GLFWを初期化し、OpenGL 4.1 Core Profileなどのウィンドウ条件を設定する。
  2. モニタ情報からウィンドウサイズを決め、フルスクリーンウィンドウを作成する。
  3. OpenGLコンテキストを有効化し、Rendererを初期化する。
  4. Worldへシードを設定し、Playerとカメラの初期状態を整える。
  5. ChunkManagerを作成して、チャンク生成/描画連携を開始できる状態にする。

Engine::run

  • 場所: 行 240-483
  • シグネチャ: void Engine::run()
  • 内容: タイトル画面を表示した後、終了まで毎フレーム入力、プレイヤー更新、ブロック編集、水更新、チャンク更新、描画を回す。
  • 主な呼び出し: run(), now(), glfwSetInputMode(), count(), glfwPollEvents(), glfwWindowShouldClose(), glfwGetKey(), wasResized(), resizeW(), resizeH()

手順:

  1. タイトル画面用ループを回し、Escまたは開始入力を待つ。
  2. メインループではフレーム時間とFPSを計算する。
  3. 入力イベントを処理し、Playerを更新する。
  4. クリック入力があればレイキャストで対象ブロックを探し、破壊または設置を行う。
  5. 水流更新で変化した周辺チャンクを再メッシュ対象にする。
  6. ChunkManagerでチャンク生成、メッシュ化、アップロード、破棄を進める。
  7. カメラ行列とFrustumを作り、見えるチャンクだけを描画する。
  8. 空、不透明地形、水、ミニマップ、HUDを描画してフレームを終了する。

Engine::shutdown

  • 場所: 行 489-502
  • シグネチャ: void Engine::shutdown()
  • 内容: ChunkManager、Renderer、GLFWウィンドウを順に破棄し、外部リソースを解放する。
  • 主な呼び出し: shutdown(), reset(), glfwDestroyWindow(), glfwTerminate(), fprintf()

Clone this wiki locally