diff --git a/Sources/Engine/Templates/BSP.cpp b/Sources/Engine/Templates/BSP.cpp index ab942cc..16a2b86 100644 --- a/Sources/Engine/Templates/BSP.cpp +++ b/Sources/Engine/Templates/BSP.cpp @@ -19,6 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include +#include #include #include #include @@ -219,7 +220,7 @@ void BSPVertexContainer::ElliminatePairedVertices(void) * Create edges from vertices in one container -- must be sorted before. */ template -void BSPVertexContainer::CreateEdges(CDynamicArray > &abed, ULONG ulEdgeTag) +void BSPVertexContainer::CreateEdges(CDynamicArray > &abed, size_t ulEdgeTag) { // if there are no vertices, or the container is not line if (bvc_aVertices.Count()==0 || IsPlannar()) { @@ -372,7 +373,7 @@ void BSPEdge::OptimizeBSPEdges(CDynamicArray -inline void BSPPolygon::AddEdge(const Vector &vPoint0, const Vector &vPoint1, ULONG ulTag) +inline void BSPPolygon::AddEdge(const Vector &vPoint0, const Vector &vPoint1, size_t ulTag) { *bpo_abedPolygonEdges.New() = BSPEdge(vPoint0, vPoint1, ulTag); } @@ -412,7 +413,7 @@ BSPNode::BSPNode(enum BSPNodeLocation bnl) * Constructor for a branch node. */ template -BSPNode::BSPNode(const Plane &plSplitPlane, ULONG ulPlaneTag, +BSPNode::BSPNode(const Plane &plSplitPlane, size_t ulPlaneTag, BSPNode &bnFront, BSPNode &bnBack) : Plane(plSplitPlane) , bn_pbnFront(&bnFront) @@ -731,7 +732,7 @@ void BSPCutter::CutPolygon(BSPPolygon &bpo * -- returns FALSE if polygon is laying on the plane */ template -BOOL BSPCutter::SplitPolygon(BSPPolygon &bpoPolygon, const Plane &plSplitPlane, ULONG ulPlaneTag, +BOOL BSPCutter::SplitPolygon(BSPPolygon &bpoPolygon, const Plane &plSplitPlane, size_t ulPlaneTag, BSPPolygon &bpoFront, BSPPolygon &bpoBack) { (Plane &)bpoFront = (Plane &)bpoPolygon; @@ -802,7 +803,7 @@ BOOL BSPCutter::SplitPolygon(BSPPolygon &b * Split an edge with a plane. */ template -void BSPCutter::SplitEdge(const Vector &vPoint0, const Vector &vPoint1, ULONG ulEdgeTag, +void BSPCutter::SplitEdge(const Vector &vPoint0, const Vector &vPoint1, size_t ulEdgeTag, const Plane &plSplitPlane, BSPPolygon &bpoFront, BSPPolygon &bpoBack, BSPVertexContainer &bvcFront, BSPVertexContainer &bvcBack) @@ -1132,20 +1133,17 @@ void BSPTree::MoveSubTreeToArray(BSPNode * bnInArray.bn_bnlLocation = pbnSubtree->bn_bnlLocation; bnInArray.bn_ulPlaneTag = pbnSubtree->bn_ulPlaneTag; // let plane tag hold pointer to node in array - STUBBED("64-bit issue"); - pbnSubtree->bn_ulPlaneTag = (ULONG)(size_t)&bnInArray; + pbnSubtree->bn_ulPlaneTag = (size_t)&bnInArray; // remap pointers to subnodes if (pbnSubtree->bn_pbnFront==NULL) { bnInArray.bn_pbnFront = NULL; } else { - STUBBED("64-bit issue"); // bn_ulPlaneTag is uint32! bnInArray.bn_pbnFront = (BSPNode*)pbnSubtree->bn_pbnFront->bn_ulPlaneTag; } if (pbnSubtree->bn_pbnBack==NULL) { bnInArray.bn_pbnBack = NULL; } else { - STUBBED("64-bit issue"); // basically the same as above but for back! bnInArray.bn_pbnBack = (BSPNode*)pbnSubtree->bn_pbnBack->bn_ulPlaneTag; } } @@ -1232,8 +1230,9 @@ void BSPTree::Read_t(CTStream &strm) // throw char * } else { bn.bn_pbnBack = &bt_abnNodes[iBack]; } - - strm>>bn.bn_ulPlaneTag; + ULONG ul; + strm>>ul; + bn.bn_ulPlaneTag = ul; } // check end id @@ -1283,7 +1282,7 @@ void BSPTree::Write_t(CTStream &strm) // throw char * } strm< > &abedAll, ULONG ulEdgeTag); + void CreateEdges(CDynamicArray > &abedAll, size_t ulEdgeTag); }; /* @@ -87,7 +87,7 @@ class BSPEdge { public: Vector bed_vVertex0; // edge vertices Vector bed_vVertex1; - size_t bed_ulEdgeTag; // tags for BSPs with tagged edges/planes - FIXME DG: or uintprt_t? + size_t bed_ulEdgeTag; // tags for BSPs with tagged edges/planes /* Default constructor. */ inline BSPEdge(void) {}; @@ -113,7 +113,7 @@ public: size_t bpo_ulPlaneTag; // tags for BSPs with tagged planes (-1 for no tag) /* Add an edge to the polygon. */ - inline void AddEdge(const Vector &vPoint0, const Vector &vPoint1, ULONG ulTag); + inline void AddEdge(const Vector &vPoint0, const Vector &vPoint1, size_t ulTag); /* Default constructor. */ inline BSPPolygon(void) : bpo_ulPlaneTag(-1) {}; @@ -146,7 +146,7 @@ public: BSPNode *bn_pbnFront; // pointer to child node in front of split plane BSPNode *bn_pbnBack; // pointer to child node behind split plane - ULONG bn_ulPlaneTag; // tags for BSPs with tagged planes (-1 for no tag) + size_t bn_ulPlaneTag; // tags for BSPs with tagged planes (-1 for no tag) public: /* Defualt constructor (for arrays only). */ @@ -154,7 +154,7 @@ public: /* Constructor for a leaf node. */ inline BSPNode(enum BSPNodeLocation bnl); /* Constructor for a branch node. */ - inline BSPNode(const Plane &plSplitPlane, ULONG ulPlaneTag, + inline BSPNode(const Plane &plSplitPlane, size_t ulPlaneTag, BSPNode &bnFront, BSPNode &bnBack); /* Constructor for cloning a bsp (sub)tree. */ BSPNode(BSPNode &bnRoot); @@ -180,7 +180,7 @@ template class BSPCutter { public: /* Split an edge with a plane. */ - static inline void SplitEdge(const Vector &vPoint0, const Vector &vPoint1, ULONG ulEdgeTag, + static inline void SplitEdge(const Vector &vPoint0, const Vector &vPoint1, size_t ulEdgeTag, const Plane &plSplitPlane, BSPPolygon &abedFront, BSPPolygon &abedBack, BSPVertexContainer &bvcFront, BSPVertexContainer &bvcBack); @@ -195,7 +195,7 @@ public: CDynamicArray > bc_abedBorderOutside;// edges of border part of polygon facing outwards /* Split a polygon with a plane. */ - static inline BOOL SplitPolygon(BSPPolygon &bpoPolygon, const Plane &plPlane, ULONG ulPlaneTag, + static inline BOOL SplitPolygon(BSPPolygon &bpoPolygon, const Plane &plPlane, size_t ulPlaneTag, BSPPolygon &bpoFront, BSPPolygon &bpoBack); /* Constructor for splitting a polygon with a BSP tree. */