struct Section2; enum ESEctionFlag { Unclosed = 1, // at least one unclosed loop Dumped = 2, // builder was unable to properly construct, so content may not be usable for triangulator. BadWinding = 4, }; struct Section2Wall { // references to game data vec2_t* v1; // points to start vertex in wall[] vec2_t* v2; // points to end vertex in wall[] walltype* wall; // points to the actual wall this belongs to - this is NOT necessarily the same as v1 and can be null. // references to section data Section2Wall* backside; // points to this wall's back side Section2* frontsection; Section2* backsection; // if this is null the wall is one-sided }; struct Section2Loop { TArrayView walls; }; struct Section2 { uint8_t flags; uint8_t dirty; uint8_t geomflags; unsigned index; sectortype* sector; // this uses a memory arena for storage, so use TArrayView instead of TArray TArrayView walls; TArrayView loops; }; extern TArray sections2; extern TArrayView> sections2PerSector; void hw_CreateSections2(); using Outline = TArray>; using Point = std::pair; using FOutline = std::vector> ; // Data type was chosen so it can be passed directly into Earcut. Outline BuildOutline(Section2* section);