Skip to content

srcs__world__terrain_gen_cpp

Ishi_eenn edited this page May 19, 2026 · 2 revisions

srcs/world/terrain_gen.cpp

役割

ノイズを使って高さ、バイオーム、洞窟、水、木、村をチャンク内へ生成する。

主な型

  • BiomeParams (struct, 行 48)
  • VillageMat (struct, 行 181)

関数一覧

  • TerrainGenerator::setSeed: 行 39-42
  • hash3: 行 57-68
  • blendBiome: 行 71-74
  • biomeWeights: 行 79-87
  • computeTerrainHeight: 行 92-106
  • canPlaceTreeAt: 行 109-123
  • placeTree: 行 128-162
  • setBlockWorld: 行 169-176
  • getVillageMat: 行 187-190
  • computeFootprintBase: 行 198-210
  • levelBuilding: 行 219-235
  • getVillageCenter: 行 242-251
  • isVillageSuitable: 行 254-273
  • placePlaza: 行 278-283
  • placeWell: 行 288-307
  • placePath: 行 312-330
  • placeSmallHut: 行 338-358
  • placeHouse: 行 365-386
  • placeLargeHouse: 行 391-412
  • placeTower: 行 417-441
  • placeFarm: 行 446-464
  • layoutClassic: 行 472-525
  • layoutCompact: 行 533-585
  • layoutStreet: 行 593-669
  • placeVillage: 行 679-715
  • TerrainGenerator::generate: 行 720-870

関数ごとの説明

TerrainGenerator::setSeed

  • 場所: 行 39-42
  • シグネチャ: void TerrainGenerator::setSeed(uint32_t seed)
  • 内容: 内部状態や対象データに新しい値を設定する。
  • 主な呼び出し: setSeed()

hash3

  • 場所: 行 57-68
  • シグネチャ: static uint32_t hash3(int x, int y, int z)
  • 内容: 座標や値から決定的な擬似乱数/ハッシュ値を生成する。
  • 主な呼び出し: hash3()

blendBiome

  • 場所: 行 71-74
  • シグネチャ: static float blendBiome(float wP, float wD, float wT, float wR, float vP, float vD, float vT, float vR)
  • 内容: 地形生成に必要な補助計算を行う。

biomeWeights

  • 場所: 行 79-87
  • シグネチャ: static void biomeWeights(float temp, float humid, float& wP, float& wD, float& wT, float& wR)
  • 内容: 地形生成に必要な補助計算を行う。

computeTerrainHeight

  • 場所: 行 92-106
  • シグネチャ: static int computeTerrainHeight(const NoiseGen& noise, int wx, int wz)
  • 内容: 地形生成に必要な補助計算を行う。
  • 主な呼び出し: computeTerrainHeight(), getTemperature(), getHumidity(), biomeWeights(), blendBiome(), getHeight(), getValley(), max(), clamp()

canPlaceTreeAt

  • 場所: 行 109-123
  • シグネチャ: static bool canPlaceTreeAt(const Chunk& chunk, int x, int z, int surface)
  • 内容: 条件を判定し、呼び出し元が処理を続けるべきか判断できるようにする。
  • 主な呼び出し: canPlaceTreeAt(), getBlock()

placeTree

  • 場所: 行 128-162
  • シグネチャ: static void placeTree(Chunk& chunk, int x, int z, int surface, uint32_t seed)
  • 内容: 地形生成時に、指定位置へ構造物や地形要素を配置する。
  • 主な呼び出し: placeTree(), hash3(), setBlock(), abs(), getBlock()

setBlockWorld

  • 場所: 行 169-176
  • シグネチャ: static void setBlockWorld(Chunk& chunk, int chunk_wx, int chunk_wz, int wx, int wy, int wz, BlockType t)
  • 内容: 内部状態や対象データに新しい値を設定する。
  • 主な呼び出し: setBlock()

getVillageMat

  • 場所: 行 187-190
  • シグネチャ: static VillageMat getVillageMat(float wT)
  • 内容: 内部状態または計算結果を取得して返す。
  • 主な呼び出し: getVillageMat()

computeFootprintBase

  • 場所: 行 198-210
  • シグネチャ: static int computeFootprintBase(const NoiseGen& noise, int origin_wx, int origin_wz, int fw, int fd)
  • 内容: 地形生成に必要な補助計算を行う。
  • 主な呼び出し: computeTerrainHeight()

levelBuilding

  • 場所: 行 219-235
  • シグネチャ: static void levelBuilding(Chunk& chunk, const NoiseGen& noise, int chunk_wx, int chunk_wz, int origin_wx, int origin_wz, int fw, int fd, int base_y)
  • 内容: 入力データから描画または処理に使う中間データを構築する。
  • 主な呼び出し: computeTerrainHeight(), setBlockWorld()

getVillageCenter

  • 場所: 行 242-251
  • シグネチャ: static bool getVillageCenter(int cell_cx, int cell_cz, uint32_t seed, int& out_wx, int& out_wz)
  • 内容: 内部状態または計算結果を取得して返す。
  • 主な呼び出し: hash3()

isVillageSuitable

  • 場所: 行 254-273
  • シグネチャ: static bool isVillageSuitable(const NoiseGen& noise, int vx, int vz)
  • 内容: 条件を判定し、呼び出し元が処理を続けるべきか判断できるようにする。
  • 主な呼び出し: isVillageSuitable(), getTemperature(), getHumidity(), biomeWeights(), computeTerrainHeight(), min(), max()

placePlaza

  • 場所: 行 278-283
  • シグネチャ: static void placePlaza(Chunk& chunk, int chunk_wx, int chunk_wz, int vx, int vz, int base_y, int radius)
  • 内容: 地形生成時に、指定位置へ構造物や地形要素を配置する。
  • 主な呼び出し: setBlockWorld()

placeWell

  • 場所: 行 288-307
  • シグネチャ: static void placeWell(Chunk& chunk, int chunk_wx, int chunk_wz, int vx, int vz, int base_y)
  • 内容: 地形生成時に、指定位置へ構造物や地形要素を配置する。
  • 主な呼び出し: setBlock(), setWaterLevel(), setBlockWorld()

placePath

  • 場所: 行 312-330
  • シグネチャ: static void placePath(Chunk& chunk, const NoiseGen& noise, int chunk_wx, int chunk_wz, int wx1, int wz1, int wx2, int wz2)
  • 内容: 地形生成時に、指定位置へ構造物や地形要素を配置する。
  • 主な呼び出し: computeTerrainHeight(), setBlockWorld()

placeSmallHut

  • 場所: 行 338-358
  • シグネチャ: static void placeSmallHut(Chunk& chunk, int chunk_wx, int chunk_wz, int origin_wx, int origin_wz, int base_y, int orient, const VillageMat& mat)
  • 内容: 地形生成時に、指定位置へ構造物や地形要素を配置する。
  • 主な呼び出し: setBlockWorld()

placeHouse

  • 場所: 行 365-386
  • シグネチャ: static void placeHouse(Chunk& chunk, int chunk_wx, int chunk_wz, int origin_wx, int origin_wz, int base_y, int orient, const VillageMat& mat)
  • 内容: 地形生成時に、指定位置へ構造物や地形要素を配置する。
  • 主な呼び出し: setBlockWorld()

placeLargeHouse

  • 場所: 行 391-412
  • シグネチャ: static void placeLargeHouse(Chunk& chunk, int chunk_wx, int chunk_wz, int origin_wx, int origin_wz, int base_y, int orient, const VillageMat& mat)
  • 内容: 地形生成時に、指定位置へ構造物や地形要素を配置する。
  • 主な呼び出し: setBlockWorld()

placeTower

  • 場所: 行 417-441
  • シグネチャ: static void placeTower(Chunk& chunk, int chunk_wx, int chunk_wz, int origin_wx, int origin_wz, int base_y, const VillageMat& /*mat*/)
  • 内容: 地形生成時に、指定位置へ構造物や地形要素を配置する。
  • 主な呼び出し: setBlockWorld()

placeFarm

  • 場所: 行 446-464
  • シグネチャ: static void placeFarm(Chunk& chunk, int chunk_wx, int chunk_wz, int origin_wx, int origin_wz, int base_y)
  • 内容: 地形生成時に、指定位置へ構造物や地形要素を配置する。
  • 主な呼び出し: setBlockWorld()

layoutClassic

  • 場所: 行 472-525
  • シグネチャ: static void layoutClassic(Chunk& chunk, const NoiseGen& noise, uint32_t vh, int chunk_wx, int chunk_wz, int vx, int vz, int base_y, const VillageMat& mat)
  • 内容: 村の建物、道、広場などの配置パターンを決めて生成する。
  • 主な呼び出し: placePlaza(), placeWell(), jit(), computeFootprintBase(), levelBuilding(), placeTower(), placePath(), placeFarm(), placeLargeHouse(), placeHouse()

手順:

  1. 処理結果または成功/失敗を呼び出し元へ返す。

layoutCompact

  • 場所: 行 533-585
  • シグネチャ: static void layoutCompact(Chunk& chunk, const NoiseGen& noise, uint32_t vh, int chunk_wx, int chunk_wz, int vx, int vz, int base_y, const VillageMat& mat)
  • 内容: 村の建物、道、広場などの配置パターンを決めて生成する。
  • 主な呼び出し: placePlaza(), placeWell(), jit(), computeFootprintBase(), levelBuilding(), placeSmallHut(), placePath(), placeHouse(), placeTower()

手順:

  1. 入力値や現在状態を検査し、処理すべき条件を絞る。
  2. 処理結果または成功/失敗を呼び出し元へ返す。

layoutStreet

  • 場所: 行 593-669
  • シグネチャ: static void layoutStreet(Chunk& chunk, const NoiseGen& noise, uint32_t vh, int chunk_wx, int chunk_wz, int vx, int vz, int base_y, const VillageMat& mat)
  • 内容: 村の建物、道、広場などの配置パターンを決めて生成する。
  • 主な呼び出し: placePlaza(), placeWell(), computeTerrainHeight(), setBlockWorld(), jit(), computeFootprintBase(), levelBuilding(), placeLargeHouse(), placePath(), placeHouse()

手順:

  1. 入力値や現在状態を検査し、処理すべき条件を絞る。
  2. 対象範囲やキューをループで走査する。
  3. 計算結果を内部状態、配列、キュー、または対象オブジェクトへ反映する。
  4. 処理結果または成功/失敗を呼び出し元へ返す。

placeVillage

  • 場所: 行 679-715
  • シグネチャ: static void placeVillage(Chunk& chunk, const NoiseGen& noise, uint32_t seed, int chunk_wx, int chunk_wz)
  • 内容: 地形生成時に、指定位置へ構造物や地形要素を配置する。
  • 主な呼び出し: floor(), getVillageCenter(), isVillageSuitable(), computeTerrainHeight(), getTemperature(), getHumidity(), biomeWeights(), getVillageMat(), hash3(), layoutClassic()

TerrainGenerator::generate

  • 場所: 行 720-870
  • シグネチャ: void TerrainGenerator::generate(Chunk& chunk) const
  • 内容: チャンク内の地形高さ、地表ブロック、洞窟、水、木、村を決定してブロック配列へ書き込む。
  • 主な呼び出し: generate(), computeTerrainHeight(), computeHeight(), max(), abs(), getTemperature(), getHumidity(), biomeWeights(), getCaveEntrance(), getCave()

手順:

  1. チャンクのワールド原点を計算する。
  2. 各X/Z列の地形高さとバイオームをノイズから決める。
  3. 高さに応じて石、土、草、砂、雪、水などを配置する。
  4. 洞窟ノイズで地下の一部を空洞化する。
  5. 条件を満たす位置に木を生成する。
  6. チャンク周辺の村候補を調べ、範囲に重なる建物や道を配置する。
  7. 生成済みフラグとdirtyフラグを更新する。

Clone this wiki locally