00001 #ifndef COORD_CIRCLE_H
00002 #define COORD_CIRCLE_H
00003
00004
00005
00006 enum shape_type
00007 {
00008 SH_SQUARE,
00009 SH_CIRCLE,
00010 };
00011
00012
00013 enum circle_type
00014 {
00015 C_SQUARE,
00016 C_CIRCLE,
00017 C_POINTY,
00018 C_ROUND,
00019 };
00020
00021 class rectangle_iterator;
00022 class rect_def
00023 {
00024 coord_def min;
00025 coord_def max;
00026
00027 public:
00028 rect_def() {}
00029 rect_def(const coord_def &min_, const coord_def &max_)
00030 : min(min_), max(max_) {}
00031
00032 bool contains(const coord_def& p) const;
00033 rect_def intersect(const rect_def& other) const;
00034 rectangle_iterator iter() const;
00035 };
00036
00037 #define RECT_MAP_BOUNDS (rect_def(coord_def(X_BOUND_1, Y_BOUND_1), \
00038 coord_def(X_BOUND_2, Y_BOUND_2)))
00039
00040 class circle_iterator;
00041
00042
00043
00044
00045
00046 class circle_def
00047 {
00048
00049 bool los_radius;
00050
00051 shape_type shape;
00052
00053 coord_def origin;
00054
00055
00056 bool check_bounds;
00057
00058 int radius;
00059 int radius_sq;
00060 rect_def bbox;
00061
00062 public:
00063
00064
00065 circle_def();
00066
00067 circle_def(const coord_def &origin_, const circle_def &bds);
00068
00069
00070 explicit circle_def(int param, circle_type ctype = C_SQUARE);
00071
00072 circle_def(const coord_def &origin_, int param, circle_type ctype = C_SQUARE);
00073
00074 bool contains(const coord_def &p) const;
00075 const rect_def& get_bbox() const;
00076 const coord_def& get_center() const;
00077
00078 circle_iterator iter() const;
00079
00080 private:
00081 void init(int param, circle_type ctype);
00082 void init_bbox();
00083 };
00084
00085 #endif