fixed corners (hopefully)
This commit is contained in:
parent
8e9d3fe513
commit
1fe7b14d86
BIN
obj/move.o
BIN
obj/move.o
Binary file not shown.
37
src/move.c
37
src/move.c
|
@ -93,25 +93,25 @@ pt_2d normal;
|
||||||
double p1, p2, p3;
|
double p1, p2, p3;
|
||||||
void getSF(cube_0* cb, int sf) {
|
void getSF(cube_0* cb, int sf) {
|
||||||
if(sf == 0 || sf == 1) {
|
if(sf == 0 || sf == 1) {
|
||||||
project_to_cube(cb->x + (sf==0)*cb->w, cb->y , cb->z , &p1, &p2, &p3, cb);
|
project_to_cube(cb->x + (sf==0)*cb->w, cb->y -(min_dist*0), cb->z -(min_dist*0), &p1, &p2, &p3, cb);
|
||||||
surface[0] = (pt_2d){.x = p1, .y = p2, .z = p3};
|
surface[0] = (pt_2d){.x = p1, .y = p2, .z = p3};
|
||||||
project_to_cube(cb->x + (sf==0)*cb->w, cb->y + cb->h, cb->z , &p1, &p2, &p3, cb);
|
project_to_cube(cb->x + (sf==0)*cb->w, cb->y + cb->h +2*(min_dist*0), cb->z -(min_dist*0), &p1, &p2, &p3, cb);
|
||||||
surface[1] = (pt_2d){.x = p1, .y = p2, .z = p3};
|
surface[1] = (pt_2d){.x = p1, .y = p2, .z = p3};
|
||||||
project_to_cube(cb->x + (sf==0)*cb->w, cb->y , cb->z + cb->d, &p1, &p2, &p3, cb);
|
project_to_cube(cb->x + (sf==0)*cb->w, cb->y -(min_dist*0), cb->z + cb->d +2*(min_dist*0), &p1, &p2, &p3, cb);
|
||||||
surface[2] = (pt_2d){.x = p1, .y = p2, .z = p3};
|
surface[2] = (pt_2d){.x = p1, .y = p2, .z = p3};
|
||||||
} else if(sf == 2 || sf == 3) {
|
} else if(sf == 2 || sf == 3) {
|
||||||
project_to_cube(cb->x , cb->y + (sf==2)*cb->h, cb->z , &p1, &p2, &p3, cb);
|
project_to_cube(cb->x -(min_dist*0), cb->y + (sf==2)*cb->h, cb->z -(min_dist*0), &p1, &p2, &p3, cb);
|
||||||
surface[0] = (pt_2d){.x = p1, .y = p2, .z = p3};
|
surface[0] = (pt_2d){.x = p1, .y = p2, .z = p3};
|
||||||
project_to_cube(cb->x + cb->w, cb->y + (sf==2)*cb->h, cb->z , &p1, &p2, &p3, cb);
|
project_to_cube(cb->x + cb->w +2*(min_dist*0), cb->y + (sf==2)*cb->h, cb->z -(min_dist*0), &p1, &p2, &p3, cb);
|
||||||
surface[1] = (pt_2d){.x = p1, .y = p2, .z = p3};
|
surface[1] = (pt_2d){.x = p1, .y = p2, .z = p3};
|
||||||
project_to_cube(cb->x , cb->y + (sf==2)*cb->h, cb->z + cb->d, &p1, &p2, &p3, cb);
|
project_to_cube(cb->x -(min_dist*0), cb->y + (sf==2)*cb->h, cb->z + cb->d +2*(min_dist*0), &p1, &p2, &p3, cb);
|
||||||
surface[2] = (pt_2d){.x = p1, .y = p2, .z = p3};
|
surface[2] = (pt_2d){.x = p1, .y = p2, .z = p3};
|
||||||
} else {
|
} else {
|
||||||
project_to_cube(cb->x , cb->y , cb->z + cb->d*(sf==4), &p1, &p2, &p3, cb);
|
project_to_cube(cb->x -(min_dist*0), cb->y -(min_dist*0), cb->z + cb->d*(sf==4), &p1, &p2, &p3, cb);
|
||||||
surface[0] = (pt_2d){.x = p1, .y = p2, .z = p3};
|
surface[0] = (pt_2d){.x = p1, .y = p2, .z = p3};
|
||||||
project_to_cube(cb->x + cb->w, cb->y , cb->z + cb->d*(sf==4), &p1, &p2, &p3, cb);
|
project_to_cube(cb->x + cb->w +2*(min_dist*0), cb->y -(min_dist*0), cb->z + cb->d*(sf==4), &p1, &p2, &p3, cb);
|
||||||
surface[1] = (pt_2d){.x = p1, .y = p2, .z = p3};
|
surface[1] = (pt_2d){.x = p1, .y = p2, .z = p3};
|
||||||
project_to_cube(cb->x , cb->y + cb->h, cb->z + cb->d*(sf==4), &p1, &p2, &p3, cb);
|
project_to_cube(cb->x -(min_dist*0), cb->y + cb->h +2*(min_dist*0), cb->z + cb->d*(sf==4), &p1, &p2, &p3, cb);
|
||||||
surface[2] = (pt_2d){.x = p1, .y = p2, .z = p3};
|
surface[2] = (pt_2d){.x = p1, .y = p2, .z = p3};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -131,6 +131,13 @@ void getNormal() {
|
||||||
normal.z /= norm;
|
normal.z /= norm;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void normalize(pt_2d* p) {
|
||||||
|
double norm = sqrt(p->x*p->x + p->y*p->y + p->z*p->z);
|
||||||
|
p->x /= norm;
|
||||||
|
p->y /= norm;
|
||||||
|
p->z /= norm;
|
||||||
|
}
|
||||||
|
|
||||||
void updateF(cube_0* cb, double dtime) {
|
void updateF(cube_0* cb, double dtime) {
|
||||||
for(int d = 0; d < 6; d++) {
|
for(int d = 0; d < 6; d++) {
|
||||||
getSF(cb, d);
|
getSF(cb, d);
|
||||||
|
@ -143,7 +150,13 @@ void updateF(cube_0* cb, double dtime) {
|
||||||
}
|
}
|
||||||
pt_2d vt = (pt_2d){.x = camx-camvx*dtime - surface[0].x, .y = camy-camvy*dtime - surface[0].y, .z = camz-camvz*dtime - surface[0].z};
|
pt_2d vt = (pt_2d){.x = camx-camvx*dtime - surface[0].x, .y = camy-camvy*dtime - surface[0].y, .z = camz-camvz*dtime - surface[0].z};
|
||||||
pt_2d vtdt = (pt_2d){.x = camx - surface[0].x, .y = camy - surface[0].y, .z = camz - surface[0].z};
|
pt_2d vtdt = (pt_2d){.x = camx - surface[0].x, .y = camy - surface[0].y, .z = camz - surface[0].z};
|
||||||
if((dot3D(vt, normal) <= -min_dist && dot3D(vtdt, normal) > -min_dist) || (dot3D(vt, normal) >= min_dist && dot3D(vtdt, normal) < min_dist)) {
|
normalize(&vtdt);
|
||||||
|
normalize(&vt);
|
||||||
|
if(
|
||||||
|
(dot3D(vt, normal) <= 0.0 && dot3D(vtdt, normal) > 0.0) ||
|
||||||
|
(dot3D(vt, normal) >= 0.0 && dot3D(vtdt, normal) < 0.0)
|
||||||
|
) {
|
||||||
|
//printf("%d\n", d);
|
||||||
double normv = sqrt(camvx*camvx + camvy*camvy + camvz*camvz);
|
double normv = sqrt(camvx*camvx + camvy*camvy + camvz*camvz);
|
||||||
|
|
||||||
double alpha = acos(dot3D(normal, (pt_2d){.x = camvx, .y = camvy, .z = camvz})/normv);
|
double alpha = acos(dot3D(normal, (pt_2d){.x = camvx, .y = camvy, .z = camvz})/normv);
|
||||||
|
@ -228,13 +241,13 @@ void movePlayerG(double dtime) {
|
||||||
camx -= delx;
|
camx -= delx;
|
||||||
camy -= dely;
|
camy -= dely;
|
||||||
camz -= delz;
|
camz -= delz;
|
||||||
printf("%lf | %lf | %lf\n", fx, fy, fz);
|
//printf("%lf | %lf | %lf\n", fx, fy, fz);
|
||||||
|
|
||||||
updateForces = false;
|
updateForces = false;
|
||||||
camvx += fx*dtime;
|
camvx += fx*dtime;
|
||||||
camvy += fy*dtime;
|
camvy += fy*dtime;
|
||||||
camvz += fz*dtime;
|
camvz += fz*dtime;
|
||||||
printf("%lf | %lf | %lf\n\n", camvx, camvy, camvz);
|
//printf("%lf | %lf | %lf\n\n", camvx, camvy, camvz);
|
||||||
camx += camvx*dtime;
|
camx += camvx*dtime;
|
||||||
camy += camvy*dtime;
|
camy += camvy*dtime;
|
||||||
camz += camvz*dtime;
|
camz += camvz*dtime;
|
||||||
|
|
Loading…
Reference in New Issue