fixed linear platforms not moving vertically

This commit is contained in:
Alexandre 2025-02-10 18:13:43 +01:00
parent e0c873989d
commit fe15e47273
11 changed files with 53 additions and 6 deletions

BIN
bin/back

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -97,17 +97,26 @@ void moving_xyz(double x, double y, double z, double w, double h, double d, doub
// metai{2} = y_side (+/- 1) // metai{2} = y_side (+/- 1)
// metai{3} = z_side (+/- 1) // metai{3} = z_side (+/- 1)
void moving_xyz_line(double x, double y, double z, double w, double h, double d, double hz_angle, double vt_angle, float dtime, entity* ent, cube_0* ret) { void moving_xyz_line(double x, double y, double z, double w, double h, double d, double hz_angle, double vt_angle, float dtime, entity* ent, cube_0* ret) {
//printf("%lf %lf %lf", ent->metad7, ent->metad8, ent->metad9);
//printf("| %lf %lf %lf\n", ent->metad4, ent->metad5, ent->metad6);
ret->x += (ent->metai1)*ent->metad4*dtime; ret->x += (ent->metai1)*ent->metad4*dtime;
if(absf(ent->metad1 - ret->x) > ent->metad7) { if(absf(ent->metad1 - ret->x) > ent->metad7) {
//printf("-x-\n");
ent->metai1 *= (-1); ent->metai1 *= (-1);
ret->x += (ent->metai1)*ent->metad4*dtime;
} }
ret->y += (ent->metai2)*ent->metad5*dtime; ret->y += (ent->metai2)*ent->metad5*dtime;
printf("%lf, %lf | %lf\n", ent->metad2, ret->y, ent->metad8);
if(absf(ent->metad2 - ret->y) > ent->metad8) { if(absf(ent->metad2 - ret->y) > ent->metad8) {
//printf("-y-\n");
ent->metai2 *= (-1); ent->metai2 *= (-1);
ret->y += (ent->metai2)*ent->metad5*dtime;
} }
ret->z += (ent->metai3)*ent->metad6*dtime; ret->z += (ent->metai3)*ent->metad6*dtime;
if(absf(ent->metad3 - ret->z) > ent->metad9) { if(absf(ent->metad3 - ret->z) > ent->metad9) {
//printf("-z-\n");
ent->metai3 *= (-1); ent->metai3 *= (-1);
ret->z += (ent->metai3)*ent->metad6*dtime;
} }
} }
@ -135,9 +144,9 @@ void translatePlayer(float dtime, int* hp, int* dmg, entity* ent, cube_0* ret) {
} }
void translatePlayerLine(float dtime, int* hp, int* dmg, entity* ent, cube_0* ret) { void translatePlayerLine(float dtime, int* hp, int* dmg, entity* ent, cube_0* ret) {
double dx = ent->metad4*(cos((double)(ent->metai1*(sim_time+(double)dtime)/ent->metai2 + ent->metai3*3.14159/180.0))-cos((double)(ent->metai1*sim_time/ent->metai2 + ent->metai3*3.14159/180.0))); double dx = (ent->metai1)*ent->metad4*dtime;
double dy = ent->metad5*(cos((double)(ent->metai1*(sim_time+(double)dtime)/ent->metai2 + ent->metai3*3.14159/180.0))-cos((double)(ent->metai1*sim_time/ent->metai2 + ent->metai3*3.14159/180.0))); double dy = (ent->metai2)*ent->metad5*dtime;
double dz = ent->metad6*(cos((double)(ent->metai1*(sim_time+(double)dtime)/ent->metai2 + ent->metai3*3.14159/180.0))-cos((double)(ent->metai1*sim_time/ent->metai2 + ent->metai3*3.14159/180.0))); double dz = (ent->metai3)*ent->metad6*dtime;
//fx += dx/(dtime*dtime); //fx += dx/(dtime*dtime);
fy += dy/(dtime*dtime); fy += dy/(dtime*dtime);
//fz += dz/(dtime*dtime); //fz += dz/(dtime*dtime);

View File

@ -420,6 +420,10 @@ void parse_one_room(int id, char* filename) {
double speed_x = read_float(ptr); double speed_x = read_float(ptr);
double speed_y = read_float(ptr); double speed_y = read_float(ptr);
double speed_z = read_float(ptr); double speed_z = read_float(ptr);
//printf("%lf, %lf, %lf, %lf, %lf, %lf\n", amp_x, amp_y, amp_z, speed_x, speed_y, speed_z);
pool[id].area->ents[k]->metad1 = cx;
pool[id].area->ents[k]->metad2 = cy;
pool[id].area->ents[k]->metad3 = cz;
pool[id].area->ents[k]->metad4 = speed_x; pool[id].area->ents[k]->metad4 = speed_x;
pool[id].area->ents[k]->metad5 = speed_y; pool[id].area->ents[k]->metad5 = speed_y;
pool[id].area->ents[k]->metad6 = speed_z; pool[id].area->ents[k]->metad6 = speed_z;

View File

@ -225,7 +225,7 @@ int main_alt() {
init_ent_generator(10); init_ent_generator(10);
init_proj(); init_proj();
init_interf(); init_interf();
parse_rooms(6); parse_rooms(7);
// ---------------------------------------------------------------------------------------------------------------------------------------------- // // ---------------------------------------------------------------------------------------------------------------------------------------------- //
// ---------------------------------------------------------------------------------------------------------------------------------------------- // // ---------------------------------------------------------------------------------------------------------------------------------------------- //

View File

@ -114,7 +114,7 @@ void gl_drawInteger(unsigned int fragShader, int n, float x, float y, float size
left *= (-1); left *= (-1);
} }
if(side == 1) { if(side == 1) {
curx += ((ln_baseN(abs(n), 10)-1)*(size+4*width)); curx += (((n==0)+ln_baseN(abs(n), 10)-1)*(size+4*width));
} }
while(left > 0) { while(left > 0) {
gl_drawDigit(fragShader, left%10, curx, y, size, r, g, b, width); gl_drawDigit(fragShader, left%10, curx, y, size, r, g, b, width);

View File

@ -13,7 +13,7 @@ Entities:
[0.0, 10.0, -5.0, 4.0, 1.0, 4.0, 0.0, 0.0, 192, 128, 192, 10, 0, 4, 0.0, 0.0, 5.0, 2, 1, 35] [0.0, 10.0, -5.0, 4.0, 1.0, 4.0, 0.0, 0.0, 192, 128, 192, 10, 0, 4, 0.0, 0.0, 5.0, 2, 1, 35]
Weight : Weight :
100 50
$ $
entities: entities:

34
templates/room_6 Normal file
View File

@ -0,0 +1,34 @@
Blocks :
[-8.0, 0.0, -8.0, 16.0, 1.0, 16.0, 0.0, 0.0, 192, 192, 192]
Teleporters :
[-10.0, 1.0, -1.0, 1.0, 2.0, 2.0, 0.0, 0.0, 255, 0, 0; -1, 0]
[-1.0, 1.0, -10.0, 2.0, 2.0, 1.0, 0.0, 0.0, 255, 255, 0; 0, -1]
[9.0, 1.0, -1.0, 1.0, 2.0, 2.0, 0.0, 0.0, 0, 255, 0; 1, 0]
[-1.0, 1.0, 9.0, 2.0, 2.0, 1.0, 0.0, 0.0, 0, 0, 255; 0, 1]
Entities:
[-2.0, 4.1, -2.0, 4.0, 1.0, 4.0, 0.0, 0.0, 32, 128, 192, 10, 0, 5, 0.0, 4.0, 0.0, 0.0, 5.5, 0.0]
[-6.0, 8.1, -2.0, 4.0, 1.0, 4.0, 0.0, 0.0, 32, 128, 192, 10, 0, 5, 0.0, 4.0, 0.0, 0.0, 6.0, 0.0]
[6.0, 12.1, -2.0, 4.0, 1.0, 4.0, 0.0, 0.0, 32, 128, 192, 10, 0, 5, 0.0, 4.0, 0.0, 0.0, 6.5, 0.0]
Weight :
50
$
entities:
[x, y, z, w, h, d, rhz, rvt, red, green, blue, hp, damage, entityType ..]
if entityType = 4 (moving platform)
[.. amplitude_x, amplitude_y, amplitude_z, mult, divd, phase] with
amplitude_{x,y,z} = double[>= 0.0]
{mult,divd} = int
{phase} = int[0, 360]
else if entityType = 5 (linear moving platform)
[.. amplitude_x, amplitude_y, amplitude_z, speed_x, speed_y, speed_z] with
amplitude_{x,y,z} = double[>= 0.0]
speed_{x,y,z} = double
else
[..]