# 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.
