region_map_v1.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #ifndef EQ2EMU_REGION_MAP_V1_H
  2. #define EQ2EMU_REGION_MAP_V1_H
  3. #include "region_map.h"
  4. #include <map>
  5. #pragma pack(1)
  6. typedef struct ZBSP_Node {
  7. int32 node_number;
  8. float normal[3], splitdistance;
  9. int32 region;
  10. int32 special;
  11. int32 left, right;
  12. } ZBSP_Node;
  13. typedef struct Region_Node {
  14. int32 region_type;
  15. float x;
  16. float y;
  17. float z;
  18. float dist;
  19. } Region_Node;
  20. #pragma pack()
  21. class RegionMapV1 : public RegionMap
  22. {
  23. public:
  24. RegionMapV1();
  25. ~RegionMapV1();
  26. virtual WaterRegionType ReturnRegionType(const glm::vec3& location, float belowY = -999999.0f) const;
  27. virtual bool InWater(const glm::vec3& location, float belowY = -999999.0f) const;
  28. virtual bool InLava(const glm::vec3& location) const;
  29. virtual bool InLiquid(const glm::vec3& location) const;
  30. virtual bool InPvP(const glm::vec3& location) const;
  31. virtual bool InZoneLine(const glm::vec3& location) const;
  32. protected:
  33. virtual bool Load(FILE *fp);
  34. private:
  35. WaterRegionType BSPReturnRegionType(int32 node_number, const glm::vec3& location) const;
  36. WaterRegionType BSPReturnRegionTypeNode(const Region_Node* node, const ZBSP_Node* BSP_Root, int32 node_number, const glm::vec3& location, float distToNode=0.0f) const;
  37. WaterRegionType BSPReturnRegionWaterRegion(const Region_Node* node, const ZBSP_Node* BSP_Root, int32 node_number, const glm::vec3& location, float distToNode=0.0f) const;
  38. map<Region_Node*, ZBSP_Node*> Regions;
  39. WaterRegionType EstablishDistanceAtAngle(const Region_Node* region_node, const ZBSP_Node* current_node, float distance, float absDistance, float absSplitDist, bool checkEdgedAngle=false) const;
  40. friend class RegionMap;
  41. };
  42. #endif