#include #include "SDL.h" #include "SDL_opengl.h" #include "glpong3d.h" #include "paddle.h" static GLuint paddle_texture; void 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->x + (paddle->w / 2), paddle->y + (paddle->h / 2), paddle->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(); glDisable(GL_TEXTURE_2D); #ifdef DEBUG /* Lower Left */ glLoadIdentity(); glColor3f(0.0f, 0.0f, 1.0f); glTranslatef(paddle->x, paddle->y, paddle->z); glBegin(GL_POINTS); glVertex3f(0.0f, 0.0f, 0.0f); glEnd(); /* Lower Right */ glLoadIdentity(); glColor3f(1.0f, 0.0f, 0.0f); glTranslatef(paddle->x + paddle->w, paddle->y, paddle->z); glBegin(GL_POINTS); glVertex3f(0.0f, 0.0f, 0.0f); glEnd(); /* Top Right */ glLoadIdentity(); glTranslatef(paddle->x + paddle->w, paddle->y + paddle->h, paddle->z); glBegin(GL_POINTS); glVertex3f(0.0f, 0.0f, 0.0f); glEnd(); /* Top Left */ glLoadIdentity(); glTranslatef(paddle->x, paddle->y + paddle->h, paddle->z); glBegin(GL_POINTS); glVertex3f(0.0f, 0.0f, 0.0f); glEnd(); /* Center */ glLoadIdentity(); glColor3f(0.0f, 1.0f, 0.0f); glTranslatef(paddle->x + paddle->w / 2.0f, paddle->y + paddle->h / 2.0f, paddle->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->x = paddle->w / 2.0f; paddle->y = paddle->h / 2.0f; paddle->z = z; paddle->prev_x = paddle->x; paddle->prev_y = paddle->y; 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) { GLfloat mouse_x; GLfloat mouse_y; paddle->prev_x = paddle->x; paddle->prev_y = paddle->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); } mouse_x = x - (paddle->w / 2.0f); mouse_y = -(y + (paddle->h / 2.0f)); #ifdef DEBUG printf("(mouse_x, mouse_y) = (%.3f, %.3f)\n", mouse_x, mouse_y); printf("x diff is %f\n", fabs(mouse_x - paddle->prev_x)); printf("y diff is %f\n", fabs(mouse_y - paddle->prev_y)); #endif if (fabs(mouse_x - paddle->prev_x) > 0.33f / 2.0f) { if (mouse_x > paddle->prev_x) { paddle->x += 0.33f / 2.0f; } else { paddle->x -= 0.33f / 2.0f; } } else { paddle->x = mouse_x; } if (fabs(mouse_y - paddle->prev_y) > 0.25f / 2.0f) { if (mouse_y > paddle->prev_y) { paddle->y += 0.25f / 2.0f; } else { paddle->y -= 0.25f / 2.0f; } } else { paddle->y = mouse_y; } }