diff --git a/Makefile b/Makefile index 810db76..10234cf 100644 --- a/Makefile +++ b/Makefile @@ -103,10 +103,10 @@ MAIN_OBJS = \ src/glad.o \ src/opengl.o \ src/render.o \ - src/collision.o \ src/collision2.o \ src/update.o \ src/unparse.o \ + src/color.o \ $(patsubst %.glsl,%.glsl.o,$(wildcard src/shader/*.glsl)) \ $(patsubst %.data,%.data.o,$(wildcard src/level/*.data)) \ $(patsubst %.data,%.data.o,$(wildcard src/font/*.data)) \ diff --git a/include/color.hpp b/include/color.hpp new file mode 100644 index 0000000..ff2eb36 --- /dev/null +++ b/include/color.hpp @@ -0,0 +1,5 @@ +#pragma once + +#include "math/float_types.hpp" + +vec3 hsv_to_rgb(float h, float s, float v); diff --git a/include/state.h b/include/state.h index 4d51e21..bbe7616 100644 --- a/include/state.h +++ b/include/state.h @@ -15,6 +15,7 @@ extern "C" { float ball_y; float ball_dx; float ball_dy; + double launch_time; }; #define MAX_BALLS 20 diff --git a/src/color.cpp b/src/color.cpp new file mode 100644 index 0000000..a7a935d --- /dev/null +++ b/src/color.cpp @@ -0,0 +1,26 @@ +#include "color.hpp" + +vec3 hsv_to_rgb(float h, float s, float v) +{ + if (s == 0.0) + return vec3(v, v, v); + int i = h * 6.0f; + float f = (h * 6.0f) - i; + float p = v * (1.0f - s); + float q = v * (1.0f - s * f); + float t = v * (1.0f - s * (1.0f - f)); + i = i % 6; + if (i == 0) + return vec3(v, t, p); + if (i == 1) + return vec3(q, v, p); + if (i == 2) + return vec3(p, v, t); + if (i == 3) + return vec3(p, q, v); + if (i == 4) + return vec3(t, p, v); + if (i == 5) + return vec3(v, p, q); + return vec3(0, 0, 0); +} diff --git a/src/render.cpp b/src/render.cpp index 092564a..aa154b1 100644 --- a/src/render.cpp +++ b/src/render.cpp @@ -5,9 +5,8 @@ #include "glad/glad.h" #include "unparse.h" -#include "collision.hpp" -#include "collision2.hpp" #include "render.hpp" +#include "color.hpp" #include "math/float_types.hpp" #include "math/transform.hpp" @@ -234,7 +233,11 @@ void render(mesh paddle_mesh, mat4x4 trans = a * t * rx; mat3x3 normal_trans = submatrix(rx, 3, 3); - vec4 base_color = vec4(0.5f, 0.5f, 0.5f, 1.0f); + //vec4 base_color = vec4(0.5f, 0.5f, 0.5f, 1.0f); + float hue = state->time - ball.launch_time; + hue = hue - floorf(hue); + vec3 c = hsv_to_rgb(hue, 1.0f, 1.0f); + vec4 base_color = vec4(c.x, c.y, c.z, 1.0f); //vec3 light_pos = vec3(-1, -1, 1); glBindBuffer(GL_ARRAY_BUFFER, ball_mesh.vtx); diff --git a/src/update.cpp b/src/update.cpp index f6442a5..3df5afd 100644 --- a/src/update.cpp +++ b/src/update.cpp @@ -49,6 +49,7 @@ void launch_ball(struct game_state * state, double time) ball.ball_y = 25.0f; ball.ball_dx = d.x; ball.ball_dy = -d.y; + ball.launch_time = time; state->balls_launched += 1; } @@ -122,6 +123,8 @@ void update_ball(struct game_state * state, struct ball_state& ball, double time bool collided = aabb_circle_collision(paddle_position, ball_position, paddle_bounds, &cd); if (collided) { ball_collision_response(ball, cd); + ball.ball_y = 25.0f; + ball.ball_dy = -fabsf(ball.ball_dy); } }