// // Squirrel.cpp // // // Created by Matthew Pick on 11/16/14. // // #include "Squirrel.h" #include #include #include #include #include using namespace std; #define UP_COUNT_LIMIT 25 #define STRAIGHT 0 #define LEFT 1 #define RIGHT 2 const float DEAD_Y_RADIUS = .15; const float DEAD_X_RADIUS = .115; const float HIGHEST_POSITION = 11; const float Y_TRANSLATION_DECREASE_VAL = .0065; const float X_TRANSLATION_VAL = .01; const float DEAD_Y_TRANSLATION = 0.02; float yAcceleration = 0; Squirrel::Squirrel(float x, float y, int tex, int deadTex){ centerX = x; centerY = y; squirrelTex = tex; deadSquirrelTex = deadTex; xDirection = 0; started = false; squirrelDead = false; squirrelDeadCounter = 0; } void Squirrel::start(){ started = true; } float Squirrel::getYAcceleration(){ return yAcceleration; } void Squirrel::translateSquirrel(){ if (centerY-Y_RADIUS >= HIGHEST_POSITION) return; if (yAcceleration > -.01) yAcceleration -= Y_TRANSLATION_DECREASE_VAL; centerY += yAcceleration; if (xDirection == LEFT){ if (centerX-X_RADIUS <= -.55){ xDirection = RIGHT; centerX = -.55+X_RADIUS; } else centerX -= X_TRANSLATION_VAL; } else if (xDirection == RIGHT){ if (centerX+X_RADIUS >= .53){ xDirection = LEFT; centerX = .53-X_RADIUS; } else centerX += X_TRANSLATION_VAL; } } bool Squirrel::bounce(){ if ( yAcceleration < 0 || !started){ yAcceleration = .075; if (xDirection == STRAIGHT) xDirection = LEFT; // else if (xDirection == LEFT) xDirection = RIGHT; // else if (xDirection == RIGHT) xDirection = LEFT; return true; } return false; } bool Squirrel::goingUp(){ if (yAcceleration > 0) return true; return false; } void Squirrel::squirrelDied(){ squirrelDead = true; } bool Squirrel::isDead(){ return squirrelDead; } float Squirrel::deadYPosition(){ return centerY+(DEAD_Y_TRANSLATION*squirrelDeadCounter); } void Squirrel::draw(){ if (!squirrelDead){ glEnable(GL_TEXTURE_2D); glEnable(GL_ALPHA_TEST); glBindTexture(GL_TEXTURE_2D, squirrelTex); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glColor4f(1, 1, 1, 1); glBegin(GL_QUADS); glTexCoord2d(0, 0); glVertex2f(centerX-X_RADIUS, centerY-Y_RADIUS); glTexCoord2d(0,1); glVertex2f(centerX-X_RADIUS, centerY+Y_RADIUS); glTexCoord2d(1,1); glVertex2f(centerX+X_RADIUS, centerY+Y_RADIUS); glTexCoord2d(1,0); glVertex2f(centerX+X_RADIUS, centerY-Y_RADIUS); glEnd(); if (started) translateSquirrel(); glDisable(GL_TEXTURE_2D); glDisable(GL_ALPHA_TEST); } else { glEnable(GL_TEXTURE_2D); glEnable(GL_ALPHA_TEST); glBindTexture(GL_TEXTURE_2D, deadSquirrelTex); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glColor4f(1, 1, 1, .7); glBegin(GL_QUADS); glTexCoord2d(0, 0); glVertex2f(centerX-DEAD_X_RADIUS, centerY+(DEAD_Y_TRANSLATION*squirrelDeadCounter)-DEAD_Y_RADIUS); glTexCoord2d(0,1); glVertex2f(centerX-DEAD_X_RADIUS, centerY+(DEAD_Y_TRANSLATION*squirrelDeadCounter)+DEAD_Y_RADIUS); glTexCoord2d(1,1); glVertex2f(centerX+DEAD_X_RADIUS, centerY+(DEAD_Y_TRANSLATION*squirrelDeadCounter)+DEAD_Y_RADIUS); glTexCoord2d(1,0); glVertex2f(centerX+DEAD_X_RADIUS, centerY+(DEAD_Y_TRANSLATION*squirrelDeadCounter)-DEAD_Y_RADIUS); glEnd(); glDisable(GL_TEXTURE_2D); glDisable(GL_ALPHA_TEST); squirrelDeadCounter++; } }