colored balls

This commit is contained in:
Zack Buhman 2025-12-05 13:55:26 -06:00
parent 8468789a34
commit 78a597964b
6 changed files with 42 additions and 4 deletions

View File

@ -103,10 +103,10 @@ MAIN_OBJS = \
src/glad.o \ src/glad.o \
src/opengl.o \ src/opengl.o \
src/render.o \ src/render.o \
src/collision.o \
src/collision2.o \ src/collision2.o \
src/update.o \ src/update.o \
src/unparse.o \ src/unparse.o \
src/color.o \
$(patsubst %.glsl,%.glsl.o,$(wildcard src/shader/*.glsl)) \ $(patsubst %.glsl,%.glsl.o,$(wildcard src/shader/*.glsl)) \
$(patsubst %.data,%.data.o,$(wildcard src/level/*.data)) \ $(patsubst %.data,%.data.o,$(wildcard src/level/*.data)) \
$(patsubst %.data,%.data.o,$(wildcard src/font/*.data)) \ $(patsubst %.data,%.data.o,$(wildcard src/font/*.data)) \

5
include/color.hpp Normal file
View File

@ -0,0 +1,5 @@
#pragma once
#include "math/float_types.hpp"
vec3 hsv_to_rgb(float h, float s, float v);

View File

@ -15,6 +15,7 @@ extern "C" {
float ball_y; float ball_y;
float ball_dx; float ball_dx;
float ball_dy; float ball_dy;
double launch_time;
}; };
#define MAX_BALLS 20 #define MAX_BALLS 20

26
src/color.cpp Normal file
View File

@ -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);
}

View File

@ -5,9 +5,8 @@
#include "glad/glad.h" #include "glad/glad.h"
#include "unparse.h" #include "unparse.h"
#include "collision.hpp"
#include "collision2.hpp"
#include "render.hpp" #include "render.hpp"
#include "color.hpp"
#include "math/float_types.hpp" #include "math/float_types.hpp"
#include "math/transform.hpp" #include "math/transform.hpp"
@ -234,7 +233,11 @@ void render(mesh paddle_mesh,
mat4x4 trans = a * t * rx; mat4x4 trans = a * t * rx;
mat3x3 normal_trans = submatrix(rx, 3, 3); 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); //vec3 light_pos = vec3(-1, -1, 1);
glBindBuffer(GL_ARRAY_BUFFER, ball_mesh.vtx); glBindBuffer(GL_ARRAY_BUFFER, ball_mesh.vtx);

View File

@ -49,6 +49,7 @@ void launch_ball(struct game_state * state, double time)
ball.ball_y = 25.0f; ball.ball_y = 25.0f;
ball.ball_dx = d.x; ball.ball_dx = d.x;
ball.ball_dy = -d.y; ball.ball_dy = -d.y;
ball.launch_time = time;
state->balls_launched += 1; 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); bool collided = aabb_circle_collision(paddle_position, ball_position, paddle_bounds, &cd);
if (collided) { if (collided) {
ball_collision_response(ball, cd); ball_collision_response(ball, cd);
ball.ball_y = 25.0f;
ball.ball_dy = -fabsf(ball.ball_dy);
} }
} }