fix block breaking
This commit is contained in:
parent
cd0b0ed0df
commit
5542e4861c
11
src/app.c
11
src/app.c
@ -369,6 +369,7 @@ int check_intersection_block(App *app, vec3i *retv, int *chunk_index)
|
|||||||
|
|
||||||
void app_draw_particles(App *app, vec3i b)
|
void app_draw_particles(App *app, vec3i b)
|
||||||
{
|
{
|
||||||
|
printf("%s\n", __func__);
|
||||||
unsigned char index = app->particle_count;
|
unsigned char index = app->particle_count;
|
||||||
|
|
||||||
if (index >= MAX_PARTICLE_GROUPS)
|
if (index >= MAX_PARTICLE_GROUPS)
|
||||||
@ -388,7 +389,8 @@ void app_draw_particles(App *app, vec3i b)
|
|||||||
|
|
||||||
void app_update_particles(App *app)
|
void app_update_particles(App *app)
|
||||||
{
|
{
|
||||||
unsigned char particles = app->particle_count;
|
unsigned char particles = app->particle_count;
|
||||||
|
printf("particle count %d\n", particles);
|
||||||
for (int i = 0; i < particles; i++) {
|
for (int i = 0; i < particles; i++) {
|
||||||
unsigned int time = SDL_GetTicks();
|
unsigned int time = SDL_GetTicks();
|
||||||
if (time - app->particles[i].time > 1000) {
|
if (time - app->particles[i].time > 1000) {
|
||||||
@ -396,10 +398,15 @@ void app_update_particles(App *app)
|
|||||||
app->particle_count--;
|
app->particle_count--;
|
||||||
} else {
|
} else {
|
||||||
for (int j = 0; j < PARTICLES_PER_GROUP; j++) {
|
for (int j = 0; j < PARTICLES_PER_GROUP; j++) {
|
||||||
|
printf("particle pos: %f %f %f\n",
|
||||||
|
app->particles[i].pos[j].x,
|
||||||
|
app->particles[i].pos[j].y,
|
||||||
|
app->particles[i].pos[j].z
|
||||||
|
);
|
||||||
app->particles[i].pos[j].z -= GRAVITY * app->frame_time/1000;
|
app->particles[i].pos[j].z -= GRAVITY * app->frame_time/1000;
|
||||||
draw_cube(app->cm, 0, app->particles[i].pos[j].x,
|
draw_cube(app->cm, 0, app->particles[i].pos[j].x,
|
||||||
app->particles[i].pos[j].y,
|
app->particles[i].pos[j].y,
|
||||||
app->particles[i].pos[j].z, 0.1);
|
app->particles[i].pos[j].z, 0.5);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
42
src/camera.c
42
src/camera.c
@ -18,48 +18,6 @@ void init_camera(Camera* camera)
|
|||||||
camera->speed.z = 0.0;
|
camera->speed.z = 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
vec3f handle_collision(vec3f camera_pos, ChunkManager *cm)
|
|
||||||
{
|
|
||||||
vec3f c_max = { camera_pos.x + 0.25, camera_pos.y + 0.25, camera_pos.z + 0.25 };
|
|
||||||
vec3f c_min = { camera_pos.x - 0.25, camera_pos.y - 0.25, camera_pos.z - 0.25 };
|
|
||||||
vec3f b_max;
|
|
||||||
vec3f b_min;
|
|
||||||
|
|
||||||
int i = chunk_get_current_chunk_index(cm, camera_pos);
|
|
||||||
|
|
||||||
for (int x = floor(camera_pos.x-1); x < floor(camera_pos.x+1); x++) {
|
|
||||||
for (int y = floor(camera_pos.y-1); y < floor(camera_pos.y+1); y++) {
|
|
||||||
int z = floor(camera_pos.z+1);
|
|
||||||
if (!check_index(x, y, z))
|
|
||||||
continue;
|
|
||||||
if(cm->chunks[i].blocks[x][y][z].visible) {
|
|
||||||
b_min = (vec3f) {x+1, y+1, z};
|
|
||||||
b_max = (vec3f) {x+2, y+2, z+1};
|
|
||||||
if (c_max.z > b_min.z &&
|
|
||||||
c_min.z < b_max.z) {
|
|
||||||
return (vec3f) {0, 0, 1};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//int x = floor(camera_pos.x);
|
|
||||||
//int y = floor(camera_pos.y);
|
|
||||||
//int z = floor(camera_pos.z);
|
|
||||||
|
|
||||||
//b_min = (vec3f) {x, y, z};
|
|
||||||
//b_max = (vec3f) {x+1, y+1, z+1};
|
|
||||||
//
|
|
||||||
//print_vec3f(c_max, "c_max");
|
|
||||||
//print_vec3f(c_max, "c_min");
|
|
||||||
//print_vec3f(c_max, "b_max");
|
|
||||||
//print_vec3f(c_max, "b_max");
|
|
||||||
//if (c_max.z > b_min.z &&
|
|
||||||
// c_min.z < b_max.z) {
|
|
||||||
// return (vec3f) {0, 0, 1};
|
|
||||||
//}
|
|
||||||
return (vec3f) {0, 0, 0};
|
|
||||||
}
|
|
||||||
void update_camera(Camera* camera, double time)
|
void update_camera(Camera* camera, double time)
|
||||||
{
|
{
|
||||||
double angle;
|
double angle;
|
||||||
|
32
src/main1.c
32
src/main1.c
@ -4,7 +4,16 @@
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <GL/glu.h>
|
#include <GL/glu.h>
|
||||||
|
|
||||||
#define SHADOWMAP_SIZE 2048
|
#define SHADOWMAP_SIZE 4096
|
||||||
|
|
||||||
|
void set_light_pos(const vec3f p, float matrix[16])
|
||||||
|
{
|
||||||
|
glLoadIdentity();
|
||||||
|
gluLookAt(p.x, p.y, p.z,
|
||||||
|
4.0, 4.0, 10.0,
|
||||||
|
0.0, 0.0, 1.0);
|
||||||
|
glGetFloatv(GL_MODELVIEW_MATRIX, matrix);
|
||||||
|
}
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
struct timespec start;
|
struct timespec start;
|
||||||
@ -15,6 +24,7 @@ int main()
|
|||||||
init_app(&app, 1600, 900);
|
init_app(&app, 1600, 900);
|
||||||
|
|
||||||
/////
|
/////
|
||||||
|
vec3f light_pos = { .x = 40, .y = 40, .z = 80};
|
||||||
glMatrixMode(GL_MODELVIEW);
|
glMatrixMode(GL_MODELVIEW);
|
||||||
glLoadIdentity();
|
glLoadIdentity();
|
||||||
|
|
||||||
@ -51,8 +61,8 @@ int main()
|
|||||||
glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
|
glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
|
||||||
glEnable(GL_COLOR_MATERIAL);
|
glEnable(GL_COLOR_MATERIAL);
|
||||||
|
|
||||||
//GLfloat materialColor[] = {1.0f, 1.0f, 1.0f, 1.0f};
|
GLfloat materialColor[] = {1.0f, 1.0f, 1.0f, 1.0f};
|
||||||
//glMaterialfv(GL_FRONT, GL_SPECULAR, materialColor);
|
glMaterialfv(GL_FRONT, GL_SPECULAR, materialColor);
|
||||||
glMaterialf(GL_FRONT, GL_SHININESS, 64.0f);
|
glMaterialf(GL_FRONT, GL_SHININESS, 64.0f);
|
||||||
|
|
||||||
|
|
||||||
@ -67,20 +77,24 @@ int main()
|
|||||||
|
|
||||||
|
|
||||||
glLoadIdentity();
|
glLoadIdentity();
|
||||||
gluPerspective(45.0, 1.0, 2.0, 10000.0);
|
gluPerspective(80.0, 1.0, 2.0, 10000.0);
|
||||||
glGetFloatv(GL_MODELVIEW_MATRIX, light_proj_matrix);
|
glGetFloatv(GL_MODELVIEW_MATRIX, light_proj_matrix);
|
||||||
|
|
||||||
glLoadIdentity();
|
glLoadIdentity();
|
||||||
gluLookAt(80, 80, 90,
|
set_light_pos(light_pos, light_view_matrix);
|
||||||
20.0, 20.0, 10.0,
|
|
||||||
0.0, 0.0, 1.0);
|
|
||||||
glGetFloatv(GL_MODELVIEW_MATRIX, light_view_matrix);
|
|
||||||
|
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
/////
|
/////
|
||||||
while(app.is_running) {
|
while(app.is_running) {
|
||||||
clock_gettime(CLOCK_MONOTONIC_RAW, &start);
|
clock_gettime(CLOCK_MONOTONIC_RAW, &start);
|
||||||
|
|
||||||
|
light_pos.x += 5*(app.frame_time/1000);
|
||||||
|
set_light_pos(light_pos, light_view_matrix);
|
||||||
|
app.camera.position.x = light_pos.x;
|
||||||
|
app.camera.position.y = light_pos.y;
|
||||||
|
app.camera.position.z = light_pos.z;
|
||||||
|
printf("light pos: %f %f %f\n", light_pos.x, light_pos.y, light_pos.z);
|
||||||
|
|
||||||
vec3f cd = get_camera_dir_vec3f(&app.camera);
|
vec3f cd = get_camera_dir_vec3f(&app.camera);
|
||||||
vec3f cp = app.camera.position;
|
vec3f cp = app.camera.position;
|
||||||
|
|
||||||
@ -146,6 +160,8 @@ int main()
|
|||||||
|
|
||||||
//set_view(&app.camera);
|
//set_view(&app.camera);
|
||||||
for (int i = 0; i < app.cm->chunk_count; i++) {
|
for (int i = 0; i < app.cm->chunk_count; i++) {
|
||||||
|
GLuint t = get_texture(app.cm, BLOCKTYPE_DIRT);
|
||||||
|
glBindTexture(t, GL_TEXTURE_2D);
|
||||||
chunk_render(&app.cm->chunks[i]);
|
chunk_render(&app.cm->chunks[i]);
|
||||||
//printf("c sp: %f\n", app.chunks[i].start_pos.x);
|
//printf("c sp: %f\n", app.chunks[i].start_pos.x);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user