#pragma once #include "BSP.h" namespace BSP { enum PlaneAxis { AXIS_X, AXIS_Y, AXIS_Z }; enum PlaneSide { SIDE_FRONT, SIDE_BACK, SIDE_INTERSECTS }; class BSPObject { public: T6::vec3_t min; T6::vec3_t max; int partitionIndex; // index of the partition the object is contained in BSPObject(float xMin, float yMin, float zMin, float xMax, float yMax, float zMax, int objPartitionIndex); }; class BSPLeaf { public: std::vector> objectList; void addObject(std::shared_ptr object); BSPObject* getObject(size_t index) const; size_t getObjectCount() const; }; class BSPTree; class BSPNode { public: std::unique_ptr front; std::unique_ptr back; PlaneAxis axis; // axis that the split plane is on float distance; // distance from the origin (0, 0, 0) to the plane BSPNode(std::unique_ptr frontTree, std::unique_ptr backTree, PlaneAxis nodeAxis, float nodeDistance); PlaneSide objectIsInFront(const BSPObject& object) const; }; class BSPTree { public: bool isLeaf; std::unique_ptr leaf; std::unique_ptr node; int level; // level in the BSP tree T6::vec3_t min; T6::vec3_t max; BSPTree(float xMin, float yMin, float zMin, float xMax, float yMax, float zMax, int treeLevel); void splitTree(); void addObjectToTree(std::shared_ptr object) const; }; } // namespace BSP