super balls
This commit is contained in:
parent
e1d8a89e8c
commit
1ab28665f2
@ -16,6 +16,7 @@ extern "C" {
|
|||||||
float ball_dx;
|
float ball_dx;
|
||||||
float ball_dy;
|
float ball_dy;
|
||||||
double launch_time;
|
double launch_time;
|
||||||
|
bool super_ball;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define MAX_BALLS 20
|
#define MAX_BALLS 20
|
||||||
|
|||||||
@ -194,10 +194,19 @@ void render(mesh block_mesh,
|
|||||||
|
|
||||||
mat4x4 trans = a * t * ry * rx;
|
mat4x4 trans = a * t * ry * rx;
|
||||||
mat3x3 normal_trans = submatrix(ry * rx, 3, 3);
|
mat3x3 normal_trans = submatrix(ry * rx, 3, 3);
|
||||||
|
|
||||||
|
vec4 base_color = vec4(0.5f, 0.5f, 0.5f, 1.0f);
|
||||||
|
if (ball.super_ball) {
|
||||||
float hue = state->time - ball.launch_time;
|
float hue = state->time - ball.launch_time;
|
||||||
hue = hue - floorf(hue);
|
hue = hue - floorf(hue);
|
||||||
vec3 c = hsv_to_rgb(hue, 1.0f, 1.0f);
|
vec3 c = hsv_to_rgb(hue, 1.0f, 1.0f);
|
||||||
vec4 base_color = vec4(c.x, c.y, c.z, 1.0f);
|
base_color = vec4(c.x, c.y, c.z, 1.0f);
|
||||||
|
} else if (0) {
|
||||||
|
float hue = sin(ball.launch_time) * 0.5 - 0.5;
|
||||||
|
hue = hue - floorf(hue);
|
||||||
|
vec3 c = hsv_to_rgb(hue, 1.0f, 1.0f);
|
||||||
|
base_color = vec4(c.x, c.y, c.z, 1.0f) * 0.5f;
|
||||||
|
}
|
||||||
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, ball_mesh.vtx);
|
glBindBuffer(GL_ARRAY_BUFFER, ball_mesh.vtx);
|
||||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ball_mesh.idx);
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ball_mesh.idx);
|
||||||
|
|||||||
@ -92,6 +92,8 @@ void launch_ball(struct game_state * state, double time)
|
|||||||
ball.ball_dy = -d.y;
|
ball.ball_dy = -d.y;
|
||||||
ball.launch_time = time;
|
ball.launch_time = time;
|
||||||
|
|
||||||
|
ball.super_ball = state->balls_launched % 5 == 4;
|
||||||
|
|
||||||
state->balls_launched += 1;
|
state->balls_launched += 1;
|
||||||
state->intro_shown = true;
|
state->intro_shown = true;
|
||||||
}
|
}
|
||||||
@ -154,6 +156,7 @@ void update_ball(struct game_state * state, struct ball_state& ball, double time
|
|||||||
struct collision_data cd;
|
struct collision_data cd;
|
||||||
bool collided = aabb_circle_collision(block_position, ball_position, block_bounds, &cd);
|
bool collided = aabb_circle_collision(block_position, ball_position, block_bounds, &cd);
|
||||||
if (collided) {
|
if (collided) {
|
||||||
|
if (ball.super_ball == 0)
|
||||||
ball_collision_response(ball, cd);
|
ball_collision_response(ball, cd);
|
||||||
state->blocks[block_ix].destroyed_time = time;
|
state->blocks[block_ix].destroyed_time = time;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user