> For the complete documentation index, see [llms.txt](https://docs.oserosuite.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.oserosuite.com/technical-notes/unreal-engine-notes/water-plugin/c++-summary.md).

# C++ Summary

You've got the **UWaterSubsystem**, which handles the intersections, and which actor/component gets which vertices, and that's all handled by the **AWaterZoneActor**, which is the volume that holds all mesh components and divides the rendering into tiles.

You then have the **UWaterMeshComponent** which builds the geometry data for a specific section of the water system (ie, river, ocean, lake, transition piece), which uses a **HActor** as a hit proxy which makes the geometry selectable in the viewport.

This data is then stored in a **FWaterQuadTree**, which is passed to a **FWaterMeshSceneProxy**, which handles the drawing like a primitive, which uses **TWaterVertexFactory** to draw said vertices to the screen.

**TWaterVertexFactory** then uses **FWaterMeshVertexBuffer** and **FWaterMeshIndexBuffer** in a collection of **TWaterInstanceDataBuffers** in a RHI thread.
