1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
|
#ifndef GRID_SPACE_INCLUDED
#define GRID_SPACE_INCLUDED
#include "minorGems/graphics/Color.h"
class GridSpace {
public:
// constructs w/ center location on screen
GridSpace( int inX, int inY );
~GridSpace();
// steps animations
void step();
// true if this space is currently not animating
char isAnimationDone();
// checks if this space is part of a like-colored group
// that is surrounded by a single color
// returns NULL if not surrounded
// returns color of surrounders if surrounded
// returns color of this piece if surrounded by edges
// Recursive
Color *checkSurrounded();
// start clearing animation
void flipToClear();
// draws onto screen
void drawGrid( float inAlpha=1.0f );
void drawPieceCenter( float inAlpha=1.0f );
void drawPieceHalo( float inAlpha=1.0f );
char isInside( int inX, int inY );
char isEmpty() {
return ( mPieceColor == NULL );
}
// color destroyed by this class
void setColor( Color *inColor );
// saves state to return to upon rewind
void saveState();
void rewindState();
// returns saved color, or NULL
// not a copy
Color *getSavedColor();
// returns a copy of this space's current color, or NULL
// if empty
Color *getColor() {
if( isEmpty() ) {
return NULL;
}
else {
return mPieceColor->copy();
}
}
int getColorIndex() {
return mPieceColorIndex;
}
char colorMatches( Color *inColor );
int mX, mY;
char mActive;
// can be used to turn off active marker even when mActive is true
// (for fast playback mode)
// defaults to true (visible)
char mActiveMarkerVisible;
char mVisited;
char mChecked;
char mMarkedForClearing;
int mScore;
// set to false to block this piece from contributing to
// current game score
char mAddToGlobalScore;
enum NeighborDirections { top=0, right, bottom, left
};
GridSpace *mNeighbors[4];
// current blend of colors displayed
Color *mDrawColor;
private:
Color *mPieceColor;
int mPieceColorIndex;
Color *mLastColor;
// for colorblind mode
Color *mPieceInvertedColor;
Color *mLastInvertedColor;
float mColorShiftProgress;
char mBrightHalo;
float mBrightHaloProgress;
// active mark fades in too
float mActiveProgress;
float mScoreFade;
char mScoreSent;
Color *mSavedColor;
char mSavedActive;
// breather steps to let stuff settle visually
// after animation done
int mPauseStepsAfterAnimationDone;
};
#endif
|