<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>CHEXAUMODULE :: Catur Documentation</title>
    <link>https://doc.cdryx.net/CdryxAIOUPlugin/modules/chexaumodule/index.html</link>
    <description>Overview The CHEXAUMODULE is a multi-threaded procedural runtime spawner for repeatable meshes (foliage, trees, rocks, etc.) based on hexagonal or square grid patterns. It generates HierarchicalInstancedStaticMeshComponent instances around the player in real-time, with probabilistic mesh selection, biome filtering, slope filtering, altitude filtering and room-type filtering.&#xA;Depends on CCOREUMODULE.&#xA;Functionalities Overview Data Configuration structures: FCMeshStruct, FCMeshProbaStruct, FCHexaMakerStruct, FCHexaSpawnerDataStruct CHexaSpawner Spawner actor that drives generation, tracks a pawn and manages banned areas CHexamaker Async hexagonal generation engine with ISM management, tile calculation and removal Blueprint UCHexaBPLibrary (ready for extension, currently empty) Architecture The generation pipeline works as follows:</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Sat, 20 Jul 2024 21:09:28 +0200</lastBuildDate>
    <atom:link href="https://doc.cdryx.net/CdryxAIOUPlugin/modules/chexaumodule/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Blueprint</title>
      <link>https://doc.cdryx.net/CdryxAIOUPlugin/modules/chexaumodule/blueprint/index.html</link>
      <pubDate>Sat, 20 Jul 2024 21:09:28 +0200</pubDate>
      <guid>https://doc.cdryx.net/CdryxAIOUPlugin/modules/chexaumodule/blueprint/index.html</guid>
      <description>Overview UCHexaBPLibrary is the Blueprint Function Library class for the hexagonal module. It inherits from UBlueprintFunctionLibrary and is ready for Blueprint-exposed function additions.&#xA;Currently, no Blueprint functions are exposed. Interactions with the hexagonal system are done exclusively in C++ via HexaUtility and the ICHexaData / ICCell interfaces.</description>
    </item>
    <item>
      <title>Diagrams</title>
      <link>https://doc.cdryx.net/CdryxAIOUPlugin/modules/chexaumodule/diagrams/index.html</link>
      <pubDate>Sat, 20 Jul 2024 21:09:28 +0200</pubDate>
      <guid>https://doc.cdryx.net/CdryxAIOUPlugin/modules/chexaumodule/diagrams/index.html</guid>
      <description>Overview Visual diagrams illustrating the internal architecture and runtime behavior of CHEXAUMODULE.&#xA;1. Spatial Streaming &amp; ISM Recycling How the spawn zone follows the player, when re-generation is triggered, how old ISMs are recycled vs kept, and how cull distance controls rendering visibility.</description>
    </item>
    <item>
      <title>Data Structures</title>
      <link>https://doc.cdryx.net/CdryxAIOUPlugin/modules/chexaumodule/data/index.html</link>
      <pubDate>Sat, 20 Jul 2024 21:09:28 +0200</pubDate>
      <guid>https://doc.cdryx.net/CdryxAIOUPlugin/modules/chexaumodule/data/index.html</guid>
      <description>HexaPattern Enum defining the grid placement type.&#xA;Name Description SQUARE Regular square grid HEXAGONE Flat-top hexagonal grid with axial coordinates (q, r) ZPositionCalculate Enum defining the algorithm for computing a mesh’s Z position.&#xA;Name Description SINGLE_POINT Z computed at the mesh center only FOUR_POINT Z = minimum of the 4 bounding box corners (rotation taken into account) HEIGHT_POINT Z = minimum of 8 points (4 corners + 4 edge midpoints) FCMeshStruct Configuration structure for an individual mesh (DataTable row).</description>
    </item>
    <item>
      <title>CHexaSpawner</title>
      <link>https://doc.cdryx.net/CdryxAIOUPlugin/modules/chexaumodule/chexaspawner/index.html</link>
      <pubDate>Sat, 20 Jul 2024 21:09:28 +0200</pubDate>
      <guid>https://doc.cdryx.net/CdryxAIOUPlugin/modules/chexaumodule/chexaspawner/index.html</guid>
      <description>Overview ACHexaSpawner is the main actor to place in a level. It inherits from ACAbstractSpawner and implements ICHexaData. It reads its configuration from a DataTable row, instantiates the UCHexamaker instances and drives the generation loop on tick.&#xA;Properties Name Description pawnToTrack Pawn whose position drives generation. If null, generates at origin then stops hexaSpawnerRH FDataTableRowHandle pointing to a FCHexaSpawnerDataStruct row hexamakerMap Map of instantiated UCHexamaker (index → hexamaker) bannedArea Array of FCCircle defining exclusion zones Lifecycle Name Description init Reads the DataTable row, distributes layers across CPU cores, instantiates hexamakers (normal + ghost) Tick Calls UCHexamaker::buildASync with the pawn position. Stops if no pawn and generation is complete clean Destroys all hexamakers and clears banned areas storeSpawnerSingleton Registers the spawner as singleton CNAME_Singleton_HexaSpawner // ACHexaSpawner is placed in the level. // Configure hexaSpawnerRH to point to a DataTable row of type FCHexaSpawnerDataStruct. // Assign pawnToTrack to the player pawn. // init() distributes layers across available CPU cores: int cpuCoreNumber = FPlatformMisc::NumberOfCores() * 0.5; // leaves cores free for ParallelFor // Each group of layers receives 2 hexamakers: one normal + one ghost (preview). // On Tick, the spawner delegates to each hexamaker: hexaMaker-&gt;buildASync(hexaMaker, pawnX, pawnY); // If no pawn and generation is complete, tick is disabled. ICHexaData interface ACHexaSpawner implements ICHexaData, making hexagonal operations globally accessible via HexaUtility.</description>
    </item>
    <item>
      <title>CHexamaker</title>
      <link>https://doc.cdryx.net/CdryxAIOUPlugin/modules/chexaumodule/chexamaker/index.html</link>
      <pubDate>Sat, 20 Jul 2024 21:09:28 +0200</pubDate>
      <guid>https://doc.cdryx.net/CdryxAIOUPlugin/modules/chexaumodule/chexamaker/index.html</guid>
      <description>Overview UCHexamaker is the hexagonal generation engine. It manages async tile computation, probabilistic mesh selection, multi-criteria filtering, and UHierarchicalInstancedStaticMeshComponent creation/removal. It inherits from UObject and implements ICCell and ICSingleDoRun.&#xA;Build Pipeline Name Description buildASync Entry point called by the spawner. Runs drawHexa async then updateISM_sync on the game thread wantDraw Checks if a new draw is needed: room state, pawn movement, queue status drawHexa Computes the tile grid around the pawn, runs calculateTile in ParallelFor, enqueues batches updateISM_sync Dequeues a batch, creates ISMs, removes old ones, broadcasts delegates // buildASync is the main entry point, called each tick by ACHexaSpawner: hexamaker-&gt;buildASync(singleDoRun, pawnX, pawnY); // Internally: // 1. wantDraw() checks if a new pass is needed // 2. drawHexa() computes the UV grid, runs calculateTile() in ParallelFor // 3. Results are queued as FCHexaDataQueue // 4. updateISM_sync() dequeues and creates ISMs on the game thread Tile Calculation Name Description calculateTile Computes a tile: probabilistic mesh selection, Z position, jitter, rotation, scale, filtering bannedLocationCandidatToAdd Checks if the position is inside a banned area worldmakerCandidatToAdd Checks altitude, slope, slope alignment via WorldUtility roomMakerCandidatToAdd Checks room type (ROOM/CORRIDOR/WALL) and distances // calculateTile applies filters in this order: // 1. Check enable and existing ISM // 2. Convert coordinates → pixel // 3. Biome noise filter (biomeSelectLowerBound/UpperBound) // 4. Probabilistic mesh selection (meshProbaRHArray) // 5. Rotation calculation (random if rotate=true) // 6. Scale calculation (random between minScalePercent/maxScalePercent) // 7. Jitter calculation (random between minJitterForce/maxJitterForce × tileSize) // 8. Banned area filter (bannedLocationCandidatToAdd) // 9. Worldmaker filter: altitude (withBound), slope (withNormal), alignment (alignToSlope) // 10. Room filter: room type, distance to center/edge ISM Management Name Description proceedIsm Prepares transform batches per mesh index for ISM creation updateISM_sync Creates UCHierarchicalInstancedStaticMeshComponent, configures shadow/collision/cull, assigns instances removeTile (static) Removes ISM instances by UV coordinates removeTile (location) Removes the closest tile to a world position // ISM creation in updateISM_sync: // For each mesh index, a UCHierarchicalInstancedStaticMeshComponent is created. // Configuration applied: shadow, collision, cull distance, ghost material. // Instances are added in batch via AddInstances(). // The index handler (FCIndexHandler) maintains the UV ↔ instance mapping. // Tile removal: UCHexamaker::removeTile(tileArray); // by FCHexaMakerTile array UCHexamaker::removeTile(ismIndexArrayMap); // by ISM → UV index map hexamaker-&gt;removeTile(FVector2D(x, y)); // by world position hexamaker-&gt;removeTile(FVector2D(x, y), ism); // by world position + specific ISM Ghost Mode Each group of layers generates two hexamakers: one normal and one ghost. The ghost uses a transparent material (MAT_CdryxGhostEffect) applied to all meshes, and inverts the banned area logic (displays only inside banned areas).</description>
    </item>
  </channel>
</rss>