diff options
Diffstat (limited to 'paddle.c')
-rw-r--r-- | paddle.c | 76 |
1 files changed, 46 insertions, 30 deletions
@@ -4,62 +4,38 @@ #include "glpong3d.h" #include "paddle.h" -void -GLPong_PaddleDrawBack(const Paddle_t * paddle) { - glLoadIdentity(); - glBindTexture(GL_TEXTURE_2D, paddle_texture); - glEnable(GL_TEXTURE_2D); - glColor3f(paddle->r, paddle->g, paddle->b); - glTranslatef(paddle->coord.x, paddle->coord.y, paddle->coord.z); - glBegin(GL_QUADS); - glTexCoord2f(0.832f, 1.0f); glVertex2f(paddle->w / 2, paddle->h / 2); /* Upper Right */ - glTexCoord2f(0.168f, 1.0f); glVertex2f(-paddle->w / 2, paddle->h / 2); /* Upper Left */ - glTexCoord2f(0.168f, 0.0f); glVertex2f(-paddle->w / 2, -paddle->h / 2); /* Lower Left */ - glTexCoord2f(0.832f, 0.0f); glVertex2f(paddle->w / 2, -paddle->h / 2); /* Lower Right */ - glEnd(); - glDisable(GL_TEXTURE_2D); - -#ifdef DEBUG - glLoadIdentity(); - glColor3f(1.0f, 0.0f, 0.0f); - glTranslatef(paddle->coord.x, paddle->coord.y, paddle->coord.z); - glBegin(GL_POINTS); - glVertex3f(0.0f, 0.0f, 0.0f); - glEnd(); -#endif -} +static GLuint paddle_texture; void -GLPong_PaddleDrawFront(const Paddle_t * paddle) { +GLPong_PaddleDraw(const Paddle_t * paddle) { glLoadIdentity(); glBindTexture(GL_TEXTURE_2D, paddle_texture); glEnable(GL_TEXTURE_2D); glColor3f(paddle->r, paddle->g, paddle->b); - glTranslatef(paddle->coord.x + (paddle->w / 2), paddle->coord.y + (paddle->h / 2), paddle->coord.z); /* XXX: why does this line differ from above? */ + glTranslatef(paddle->coord.x + (paddle->w / 2), paddle->coord.y + (paddle->h / 2), paddle->coord.z); glBegin(GL_QUADS); glTexCoord2f(0.168f, 1.0f); glVertex2f(paddle->w / 2, paddle->h / 2); /* Upper Right */ glTexCoord2f(0.832f, 1.0f); glVertex2f(-paddle->w / 2, paddle->h / 2); /* Upper Left */ glTexCoord2f(0.832f, 0.0f); glVertex2f(-paddle->w / 2, -paddle->h / 2); /* Lower Left */ glTexCoord2f(0.168f, 0.0f); glVertex2f(paddle->w / 2, -paddle->h / 2); /* Lower Right */ - glEnd(); + glEnd(); glDisable(GL_TEXTURE_2D); #ifdef DEBUG /* Lower Left */ glLoadIdentity(); - glColor3f(1.0f, 0.0f, 0.0f); + glColor3f(0.0f, 0.0f, 1.0f); glTranslatef(paddle->coord.x, paddle->coord.y, paddle->coord.z); glBegin(GL_POINTS); glVertex3f(0.0f, 0.0f, 0.0f); glEnd(); - /* Lower Right */ glLoadIdentity(); + glColor3f(1.0f, 0.0f, 0.0f); glTranslatef(paddle->coord.x + paddle->w, paddle->coord.y, paddle->coord.z); glBegin(GL_POINTS); glVertex3f(0.0f, 0.0f, 0.0f); glEnd(); - /* Top Right */ glLoadIdentity(); glTranslatef(paddle->coord.x + paddle->w, paddle->coord.y + paddle->h, paddle->coord.z); @@ -72,5 +48,45 @@ GLPong_PaddleDrawFront(const Paddle_t * paddle) { glBegin(GL_POINTS); glVertex3f(0.0f, 0.0f, 0.0f); glEnd(); + /* Center */ + glLoadIdentity(); + glColor3f(0.0f, 1.0f, 0.0f); + glTranslatef(paddle->coord.x + paddle->w / 2.0f, paddle->coord.y + paddle->h / 2.0f, paddle->coord.z); + glBegin(GL_POINTS); + glVertex3f(0.0f, 0.0f, 0.0f); + glEnd(); #endif } + +void +GLPong_PaddleInit(Paddle_t * paddle, GLfloat z, GLuint texture) { + paddle->w = 0.66f; + paddle->h = 0.5f; + paddle->coord.x = paddle->w / 2.0f; + paddle->coord.y = paddle->h / 2.0f; + paddle->coord.z = z; + paddle->r = 1.0f; + paddle->g = 1.0f; + paddle->b = 1.0f; + + paddle_texture = texture; +} + +void +GLPong_PaddleMove(Paddle_t * paddle, GLfloat x, GLfloat y) { + /* clamp paddle to border */ + if (x <= -1.5f + (paddle->w / 2.0f)) { + x = -1.5f + (paddle->w / 2.0f); + } else if (x >= 1.5f - (paddle->w / 2.0f)) { + x = 1.5f - (paddle->w / 2.0f); + } + + if (y <= -1.0f + (paddle->h / 2.0f)) { + y = -1.0f + (paddle->h / 2.0f); + } else if (y >= 1.0f - (paddle->h / 2.0f)) { + y = 1.0f - (paddle->h / 2.0f); + } + + paddle->coord.x = x - (paddle->w / 2.0f); + paddle->coord.y = -(y + (paddle->h / 2.0f)); +} |