#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->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(); glDisable(GL_TEXTURE_2D); #ifdef DEBUG /* Lower Left */ glLoadIdentity(); 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); glBegin(GL_POINTS); glVertex3f(0.0f, 0.0f, 0.0f); glEnd(); /* Top Left */ glLoadIdentity(); glTranslatef(paddle->coord.x, paddle->coord.y + paddle->h, paddle->coord.z); 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) { GLfloat old_x = paddle->coord.x; GLfloat old_y = paddle->coord.y; GLfloat mouse_x; GLfloat mouse_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)); printf("(mouse_x, mouse_y) = (%.3f, %.3f)\n", mouse_x, mouse_y); printf("x diff is %f\n", fabs(mouse_x - old_x)); if (fabs(mouse_x - old_x) > 0.33f / 2.0f) { if (mouse_x > old_x) { paddle->coord.x += 0.33f / 2.0f; } else { paddle->coord.x -= 0.33f / 2.0f; } } else { paddle->coord.x = mouse_x; } printf("y diff is %f\n", fabs(mouse_y - old_y)); if (fabs(mouse_y - old_y) > 0.25f / 2.0f) { if (mouse_y > old_y) { paddle->coord.y += 0.25f / 2.0f; } else { paddle->coord.y -= 0.25f / 2.0f; } } else { paddle->coord.y = mouse_y; } }