nuclear@0: #ifndef BOARD_H_ nuclear@0: #define BOARD_H_ nuclear@0: nuclear@1: #include nuclear@2: #include "object.h" nuclear@21: #include "mesh.h" nuclear@4: #include "image.h" nuclear@0: nuclear@17: #define NUM_SLOTS 20 nuclear@17: #define PLAYER_PIECES 15 nuclear@17: #define MAX_PIECES (PLAYER_PIECES * 2) nuclear@0: nuclear@17: enum { MINE, OTHER }; nuclear@17: nuclear@17: class Piece { nuclear@17: private: nuclear@17: int prev_slot, prev_level; nuclear@17: unsigned long move_start; nuclear@17: nuclear@17: public: nuclear@17: int owner, slot, level; nuclear@17: nuclear@17: Piece(); nuclear@17: nuclear@17: void move_to(int slot, int level, bool anim = true); nuclear@17: }; nuclear@17: nuclear@21: // for slot bounds nuclear@21: class Quad { nuclear@21: public: nuclear@21: Triangle tri0, tri1; nuclear@21: nuclear@21: Quad(); nuclear@21: Quad(const Vector3 &v0, const Vector3 &v1, const Vector3 &v2, const Vector3 &v3); nuclear@21: nuclear@21: bool intersect(const Ray &ray, HitPoint *hit = 0) const; nuclear@21: }; nuclear@0: nuclear@0: class Board { nuclear@0: private: nuclear@17: Piece pieces[MAX_PIECES]; nuclear@17: int hist[NUM_SLOTS + 1]; nuclear@21: Quad slotbb[NUM_SLOTS]; nuclear@17: nuclear@2: std::vector obj; nuclear@17: Object *piece_obj; nuclear@1: nuclear@7: Image img_wood, img_field, img_hinge; nuclear@4: nuclear@1: bool generate(); nuclear@4: bool generate_textures(); nuclear@0: nuclear@0: public: nuclear@0: Board(); nuclear@0: ~Board(); nuclear@0: nuclear@0: bool init(); nuclear@0: void destroy(); nuclear@0: nuclear@0: void clear(); nuclear@17: void setup(); nuclear@17: nuclear@17: int slot_pieces(int slot) const; nuclear@17: bool move_piece(int id, int slot, bool anim = true); nuclear@17: nuclear@17: Vector3 piece_pos(int slot, int level = 0) const; nuclear@0: nuclear@21: int slot_hit(const Ray &ray) const; nuclear@21: nuclear@0: void draw() const; nuclear@0: }; nuclear@0: nuclear@0: #endif // BOARD_H_