summaryrefslogtreecommitdiff
path: root/paddle.c
diff options
context:
space:
mode:
Diffstat (limited to 'paddle.c')
-rw-r--r--paddle.c76
1 files changed, 46 insertions, 30 deletions
diff --git a/paddle.c b/paddle.c
index 2f6bace..18b9962 100644
--- a/paddle.c
+++ b/paddle.c
@@ -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));
+}