working on text display

This commit is contained in:
Alexandre 2025-02-08 18:02:15 +01:00
parent e161db3807
commit cf9e278068
18 changed files with 212 additions and 58 deletions

BIN
bin/back

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -220,5 +220,8 @@ void gl_drawData(unsigned int shaderProg) {
gl_drawInteger(shaderProg, (int)10.0*camvy, 0.95f, -0.75f, 0.05f, 255, 255, 255, 0.005, -1);
gl_drawInteger(shaderProg, (int)10.0*camvz, 0.95f, -0.9f, 0.05f, 255, 255, 255, 0.005, -1);
gl_drawInteger(shaderProg, njumps, 0.0f, 0.80f, 0.04f, 255, 255, 128, 0.005f, 1);
gl_drawString(shaderProg, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", -0.95f, 0.7f, 0.03f, 255-player_hp/4, player_hp/4, 0, 0.003f, 1);
gl_drawInteger(shaderProg, player_hp, -0.95f, 0.9f, 0.05f, 255-player_hp/4, player_hp/4, 0, 0.005f, 1);
}

View File

@ -118,9 +118,9 @@ void go_to_player(double x, double y, double z, double w, double h, double d, do
double dy = (y+h/2 - camy);
double dz = (z+d/2 - camz);
double total = sqrt(dx*dx + dy*dy + dz*dz);
dx = 110.0*dx/total;
dy = 110.0*dy/total;
dz = 110.0*dz/total;
dx = 11.0*dx/total;
dy = 11.0*dy/total;
dz = 11.0*dz/total;
ret->x -= dtime*dx;
if(is_colliding_with_map(ret) || is_colliding_with_tp(ret)) {
ret->x += dtime*dx;

View File

@ -23,10 +23,12 @@
double sim_time;
int triCount;
double jPress = false;
void processInput(GLFWwindow *window, float dtime) {
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) {
glfwSetWindowShouldClose(window, true);
}
bool pressed = false;
if(glfwGetKey(window, GLFW_KEY_S) == GLFW_PRESS) {
/*
for(int k = 0; k < 10; k++) {
@ -41,9 +43,10 @@ void processInput(GLFWwindow *window, float dtime) {
}
}
*/
camvz = -speed*cos(rot_hz)*cos(rot_vt);
camvx = -speed*sin(rot_hz)*cos(rot_vt);
camvy = vtmult*speed*sin(rot_vt);
camvz = -speed*cos(rot_hz);
camvx = -speed*sin(rot_hz);
pressed = true;
//camvy = vtmult*speed*sin(rot_vt);
}
if(glfwGetKey(window, GLFW_KEY_D) == GLFW_PRESS) {
/*
@ -58,6 +61,7 @@ void processInput(GLFWwindow *window, float dtime) {
}*/
camvx = -speed*cos(rot_hz);
camvz = speed*sin(rot_hz);
pressed = true;
}
if(glfwGetKey(window, GLFW_KEY_Z) == GLFW_PRESS) {
/*for(int k = 0; k < 10; k++) {
@ -71,9 +75,10 @@ void processInput(GLFWwindow *window, float dtime) {
k=11;
}
}*/
camvz = speed*cos(rot_hz)*cos(rot_vt);
camvx = speed*sin(rot_hz)*cos(rot_vt);
camvy = -vtmult*speed*sin(rot_vt);
camvz = speed*cos(rot_hz);
camvx = speed*sin(rot_hz);
pressed = true;
//camvy = -vtmult*speed*sin(rot_vt);
}
if(glfwGetKey(window, GLFW_KEY_Q) == GLFW_PRESS) {
/*for(int k = 0; k < 10; k++) {
@ -87,11 +92,21 @@ void processInput(GLFWwindow *window, float dtime) {
}*/
camvx = speed*cos(rot_hz);
camvz = -speed*sin(rot_hz);
pressed = true;
}
if(glfwGetKey(window, GLFW_KEY_SPACE) == GLFW_PRESS) {
camvx = 0.0;
camvz = 0.0;
if(njumps > 0 && glfwGetKey(window, GLFW_KEY_SPACE) == GLFW_PRESS) {
if(jPress) {
camvy = vtmult*speed;
njumps -= 1;
jPress = false;
}
} else {
jPress = true;
}
if(!pressed) {
camvx *= (1.0-1.0*5.0*((double)dtime));
camvz *= (1.0-1.0*5.0*((double)dtime));
}
if(glfwGetKey(window, GLFW_KEY_E) == GLFW_PRESS) {

View File

@ -129,6 +129,164 @@ void gl_drawInteger(unsigned int fragShader, int n, float x, float y, float size
}
}
void gl_drawChar(unsigned int fragShader, char ch, float x, float y, float size, int r, int g, int b, float width) {
if(ch == 'a' || ch == 'A') {
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
} else if(ch == 'b' || ch == 'B') {
gl_drawRect(fragShader, x-size/2-width, y+size-width, size, 2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x+size/2-width, y-size+width, 2*width, 2*size-width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, size, 2*width, r, g, b);
} else if(ch == 'c' || ch == 'C') {
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
} else if(ch == 'd' || ch == 'D') {
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x-size/2+width, y-size-width, 2*width, 2*size+2*width, r, g, b);
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
} else if(ch == 'e' || ch == 'E') {
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
} else if(ch == 'f' || ch == 'F') {
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
} else if(ch == 'g' || ch == 'G') {
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
gl_drawRect(fragShader, x-width, y-width, size/2+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
} else if(ch == 'h' || ch == 'H') {
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
} else if(ch == 'i' || ch == 'I') {
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
} else if(ch == 'j' || ch == 'J') {
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, size/2+2*width, 2*width, r, g, b);
} else if(ch == 'k' || ch == 'K') {
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
} else if(ch == 'l' || ch == 'L') {
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
} else if(ch == 'm' || ch == 'M') {
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
gl_drawRect(fragShader, x-width, y-width, 2*width, size+2*width, r, g, b);
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
} else if(ch == 'n' || ch == 'N') {
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
} else if(ch == 'o' || ch == 'O') {
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
} else if(ch == 'p' || ch == 'P') {
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x+size/2-width, y-width, 2*width, size+2*width, r, g, b);
} else if(ch == 'q' || ch == 'Q') {
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
} else if(ch == 'r' || ch == 'R') {
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x+size/2-width, y-width, 2*width, size+2*width, r, g, b);
gl_drawRect(fragShader, x+size/4-width, y-size-width, 2*width, size+2*width, r, g, b);
} else if(ch == 's' || ch == 'S') {
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-width, 2*width, size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
} else if(ch == 't' || ch == 'T') {
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
} else if(ch == 'u' || ch == 'U') {
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
} else if(ch == 'v' || ch == 'V') {
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
} else if(ch == 'w' || ch == 'W') {
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
gl_drawRect(fragShader, x-width, y-size-width, 2*width, size+2*width, r, g, b);
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
} else if(ch == 'x' || ch == 'X') {
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
} else if(ch == 'y' || ch == 'Y') {
gl_drawRect(fragShader, x+size/2-width, y-width, 2*width, size+2*width, r, g, b);
gl_drawRect(fragShader, x-width, y-size-width, 2*width, size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-width, 2*width, size+2*width, r, g, b);
} else if(ch == 'z' || ch == 'Z') {
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x+size/2-width, y-width, 2*width, size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
}
}
int get_string_len(char* s) {
int k = 0;
while(s[k] != '\0') {
k+=1;
}
return k;
}
// 7-segment display
// side can be -1 (aligned right) or 1 (aligned left)
void gl_drawString(unsigned int fragShader, char* str, float x, float y, float size, int r, int g, int b, float width, int side) {
float curx = x;
int len = get_string_len(str);
if(side == 1) {
curx += ((len)*(size+4*width));
}
char c = str[len-1];
int i = len-1;
while(i >= 0) {
gl_drawChar(fragShader, c, curx, y, size, r, g, b, width);
curx -= (size+4*width);
i -= 1;
c = str[i];
}
}
void gl_initDrawRect(unsigned int shaderProgram) {
glUseProgram(shaderProgram);
}

View File

@ -34,6 +34,7 @@ void gl_drawRect(unsigned int fragShader, float x, float y, float w, float h, in
void gl_initDrawRect(unsigned int shaderProgram);
void gl_drawInteger(unsigned int fragShader, int n, float x, float y, float size, int r, int g, int b, float width, int side);
void gl_drawString(unsigned int fragShader, char* str, float x, float y, float size, int r, int g, int b, float width, int side);
void init_interf();
void free_interf();

View File

@ -22,10 +22,11 @@ double creative_speed = 0.3;
double speed = 8.0;
double vtmult = 1.5;
double min_dist = 0.1;
double friction = 0.8;
double friction = 0.3;
double gravity_factor = 9.8;
// ---------------------------------------------------------------------------------------------------- //
int njumps;
double fx;
double fy;
double fz;
@ -73,6 +74,7 @@ void init_csts() {
room_width = 16.0;
room_depth = 16.0;
sq2 = sqrt(2);
njumps = 3;
stop_evetything = false;
tan_fov = tan((fov * 3.14159 / 180.0) / 2.0);
}
@ -163,7 +165,7 @@ void updateF(cube_0* cb, double dtime) {
(dot3D(vt, normal) <= 0.0 && dot3D(vtdt, normal) >= 0.0) ||
(dot3D(vt, normal) >= 0.0 && dot3D(vtdt, normal) <= 0.0)
) {
printf("%d\n", d);
//printf("%d\n", d);
double normv = sqrt(camvx*camvx + camvy*camvy + camvz*camvz);
double alpha = acos(dot3D(normal, (pt_2d){.x = camvx, .y = camvy, .z = camvz})/normv);
@ -175,6 +177,10 @@ void updateF(cube_0* cb, double dtime) {
camvx += u.x;
camvy += u.y;
camvz += u.z;
camvx /= 1.41;
camvy /= 1.41;
camvz /= 1.41;
}
}
}
@ -234,6 +240,7 @@ void movePlayerG(float dtime) {
fz = 0.0;
camvy -= gravity_factor*dtime;
bool isfalling = camvy < 0.0;
double delx = camvx*dtime;
double dely = camvy*dtime;
@ -242,7 +249,7 @@ void movePlayerG(float dtime) {
camy += dely;
camz += delz;
if(is_colliding(dtime)) {
printf("HIT\n");
//printf("HIT\n");
//printf("[%lf, %lf, %lf]\n{%lf, %lf, %lf}\n\n", fx, fy, fz, camvx, camvy, camvz);
}
camx -= delx;
@ -255,9 +262,15 @@ void movePlayerG(float dtime) {
camvy += fy*dtime;
camvz += fz*dtime;
//printf("%lf | %lf | %lf\n\n", camvx, camvy, camvz);
if(isfalling && camvy > 0.0) {
njumps = 3;
}
camx += camvx*dtime;
camy += camvy*dtime;
camz += camvz*dtime;
camvx *= (1.0 - friction*((double)(dtime)));
camvz *= (1.0 - friction*((double)(dtime)));
}
void teleport_on_edge() {

View File

@ -153,4 +153,6 @@ extern double fx;
extern double fy;
extern double fz;
extern int njumps;
#endif

View File

@ -12,17 +12,7 @@ Teleporters :
[4.0, 1.0, 9.0, 2.0, 4.0, 1.0, 0.0, 0.0, 0, 255, 0; 0, 1]
[9.0, 1.0, 4.0, 1.0, 4.0, 2.0, 0.0, 0.0, 0, 0, 255; 1, 0]
Entities:
[0.0, 14.0, 0.0, 2.0, 1.0, 2.0, 0.0, 0.0, 193, 192, 0, 1, 0, 4, 0.0, 5.0, 0.0, 4, 1, 45]
Weight :
50
$
entities:
[x, y, z, w, h, d, rhz, rvt, red, green, blue, hp, damage, entityType ..]
if entityType = 4
[.. amplitude_x, amplitude_y, amplitude_z, mult, divd]
else
[..]

View File

@ -25,10 +25,3 @@ Weight :
50
$
entities:
[x, y, z, w, h, d, rhz, rvt, red, green, blue, hp, damage, entityType ..]
if entityType = 4
[.. amplitude_x, amplitude_y, amplitude_z, mult, divd]
else
[..]

View File

@ -23,10 +23,3 @@ Weight :
50
$
entities:
[x, y, z, w, h, d, rhz, rvt, red, green, blue, hp, damage, entityType ..]
if entityType = 4
[.. amplitude_x, amplitude_y, amplitude_z, mult, divd]
else
[..]

View File

@ -14,10 +14,3 @@ Weight :
50
$
entities:
[x, y, z, w, h, d, rhz, rvt, red, green, blue, hp, damage, entityType ..]
if entityType = 4
[.. amplitude_x, amplitude_y, amplitude_z, mult, divd]
else
[..]

View File

@ -16,10 +16,3 @@ Weight :
50
$
entities:
[x, y, z, w, h, d, rhz, rvt, red, green, blue, hp, damage, entityType ..]
if entityType = 4
[.. amplitude_x, amplitude_y, amplitude_z, mult, divd]
else
[..]