#include <assert.h>
-
- #include "graphics.h"
- #include "array.h"
+#include "graphics.h"
+#include "array.h"
#include <vector>
typedef enum {RED=0, BLUE=1, NONE=2, BOTH=3} Colour; //Used for the allegiance of the pieces - terrain counts as NONE.
+ static Colour OppositeColour(const Colour & compare);
+
+
Piece(const Type & newType, const Colour & newColour) : type(newType), colour(newColour), beenRevealed(false) {}
virtual ~Piece() {}
public:
+ #ifdef BUILD_GRAPHICS
class TextureManager : public Graphics::TextureManager<LUint>, private Array<Texture*>
{
public:
switch (colour)
{
case RED:
- return Graphics::Colour(1,0,0);
+ return Graphics::Colour(1.0,0,0);
break;
case BLUE:
- return Graphics::Colour(0,0,1);
+ #ifdef __MACOSX__ //Horrible HACK to make pieces green on Mac OSX, because Blue doesn't exist on this operating system.
+ return Graphics::Colour(0,1.0,0);
+ #else
+ return Graphics::Colour(0,0,1.0);
+ #endif //__MACOSX__
break;
case NONE:
return Graphics::Colour(0.5,0.5,0.5);
break;
}
}
-
+ #endif //BUILD_GRAPHICS
virtual ~Board(); //Destructor
void Print(FILE * stream, const Piece::Colour & reveal=Piece::BOTH); //Print board
- void PrintPretty(FILE * stream, const Piece::Colour & reveal=Piece::BOTH); //Print board using colour
+ void PrintPretty(FILE * stream, const Piece::Colour & reveal=Piece::BOTH, bool showRevealed=true); //Print board using colour
+ #ifdef BUILD_GRAPHICS
void Draw(const Piece::Colour & reveal=Piece::BOTH, bool showRevealed = true); //Draw board
-
+ #endif //BUILD_GRAPHICS
bool AddPiece(int x, int y, const Piece::Type & newType, const Piece::Colour & newColour); //Add piece to board
static bool LegalResult(const MovementResult & result)
{
- return (result == MovementResult::OK || result == MovementResult::DIES || result == MovementResult::KILLS || result == MovementResult::BOTH_DIE || result == MovementResult::VICTORY || result == MovementResult::DRAW || result == MovementResult::DRAW_DEFAULT || result == MovementResult::SURRENDER);
+ return (result == MovementResult::OK || result == MovementResult::DIES || result == MovementResult::KILLS || result == MovementResult::BOTH_DIE || result == MovementResult::VICTORY_FLAG || result == MovementResult::VICTORY_ATTRITION || result == MovementResult::DRAW || result == MovementResult::DRAW_DEFAULT || result == MovementResult::SURRENDER);
}
static bool HaltResult(const MovementResult & result)
{
- return (result == MovementResult::VICTORY || result == MovementResult::DRAW || result == MovementResult::DRAW_DEFAULT || result == MovementResult::SURRENDER || !LegalResult(result));
+ return (result == MovementResult::VICTORY_FLAG || result == MovementResult::VICTORY_ATTRITION || result == MovementResult::DRAW || result == MovementResult::DRAW_DEFAULT || result == MovementResult::SURRENDER || !LegalResult(result));
}
MovementResult MovePiece(int x, int y, const Direction & direction, int multiplier=1,const Piece::Colour & colour=Piece::NONE); //Move piece from position in direction