added reset trigger 'R' + custom pool selection
This commit is contained in:
parent
28ee926295
commit
04d782f55a
|
@ -0,0 +1,18 @@
|
|||
Blocks :
|
||||
[0.0, 0.0, 0.0, 10.0, 1.0, 10.0, 0.0, 0.0, 255, 255, 255]
|
||||
[0.0, 9.0, 0.0, 10.0, 1.0, 10.0, 0.0, 0.0, 255, 255, 255]
|
||||
[0.0, 1.0, 0.0, 1.0, 8.0, 1.0, 0.0, 0.0, 128, 128, 128]
|
||||
[9.0, 1.0, 0.0, 1.0, 8.0, 1.0, 0.0, 0.0, 128, 128, 128]
|
||||
[0.0, 1.0, 9.0, 1.0, 8.0, 1.0, 0.0, 0.0, 128, 128, 128]
|
||||
[9.0, 1.0, 9.0, 1.0, 8.0, 1.0, 0.0, 0.0, 128, 128, 128]
|
||||
|
||||
Teleporters :
|
||||
[4.0, 1.0, 0.0, 2.0, 4.0, 1.0, 0.0, 0.0, 255, 0, 0; -1, 0]
|
||||
[0.0, 1.0, 4.0, 1.0, 4.0, 2.0, 0.0, 0.0, 255, 255, 0; 0, -1]
|
||||
[4.0, 1.0, 9.0, 2.0, 4.0, 1.0, 0.0, 0.0, 0, 255, 0; 1, 0]
|
||||
[9.0, 1.0, 4.0, 1.0, 4.0, 2.0, 0.0, 0.0, 0, 0, 255; 0, 1]
|
||||
|
||||
Weight :
|
||||
50
|
||||
|
||||
$
|
BIN
obj/display.o
BIN
obj/display.o
Binary file not shown.
BIN
obj/generation.o
BIN
obj/generation.o
Binary file not shown.
BIN
obj/main.o
BIN
obj/main.o
Binary file not shown.
BIN
obj/move.o
BIN
obj/move.o
Binary file not shown.
|
@ -212,9 +212,9 @@ void gl_initRender(unsigned int shaderProgram, unsigned int fragmentShader, unsi
|
|||
}
|
||||
|
||||
void gl_drawData(unsigned int shaderProg) {
|
||||
gl_drawInteger(shaderProg, (int)camx, 0.95f, 0.9f, 0.05f, 255, 255, 255, 0.005, -1);
|
||||
gl_drawInteger(shaderProg, (int)camx + 2*room_width*player_chx, 0.95f, 0.9f, 0.05f, 255, 255, 255, 0.005, -1);
|
||||
gl_drawInteger(shaderProg, (int)camy, 0.95f, 0.75f, 0.05f, 255, 255, 255, 0.005, -1);
|
||||
gl_drawInteger(shaderProg, (int)camz, 0.95f, 0.6f, 0.05f, 255, 255, 255, 0.005, -1);
|
||||
gl_drawInteger(shaderProg, (int)camz + 2*room_depth*player_chy, 0.95f, 0.6f, 0.05f, 255, 255, 255, 0.005, -1);
|
||||
|
||||
gl_drawInteger(shaderProg, (int)10.0*camvx, 0.95f, -0.6f, 0.05f, 255, 255, 255, 0.005, -1);
|
||||
gl_drawInteger(shaderProg, (int)10.0*camvy, 0.95f, -0.75f, 0.05f, 255, 255, 255, 0.005, -1);
|
||||
|
|
|
@ -194,12 +194,9 @@ void build_starting_chunk(int chx, int chy) {
|
|||
|
||||
void init_hashtbl() {
|
||||
visited = hashtbl_generate(1789);
|
||||
build_starting_chunk(0, 0);
|
||||
current_room = hashtbl_find_opt(visited, 0, 0);
|
||||
player_chx = 0;
|
||||
player_chy = 0;
|
||||
build_starting_chunk(player_chx, player_chy);
|
||||
current_room = hashtbl_find_opt(visited, player_chx, player_chy);
|
||||
total_weight = 0;
|
||||
coins = 0;
|
||||
}
|
||||
|
||||
void get_number_blocks(int* ret_cubes, int* ret_tps, int* ret_ent, FILE* ptr) {
|
||||
|
@ -469,8 +466,33 @@ void parse_one_room(int id, char* filename) {
|
|||
fclose(ptr);
|
||||
}
|
||||
|
||||
void parse_rooms(int n_rooms) {
|
||||
char* name = malloc(sizeof(char)*19); // 1000 rooms max
|
||||
char* get_name_and_i(char* folder, int nrooms, int* reti) {
|
||||
int len = 0;
|
||||
while(folder[len] != '\0') {
|
||||
len+=1;
|
||||
}
|
||||
int lnn = 1+ln_baseN(nrooms, 10);
|
||||
int str_size = len+lnn+5;
|
||||
char* res = malloc(sizeof(char)*str_size);
|
||||
for(int k = 0; k < len; k++) {
|
||||
res[k] = folder[k];
|
||||
}
|
||||
res[len ] = 'r';
|
||||
res[len+1] = 'o';
|
||||
res[len+2] = 'o';
|
||||
res[len+3] = 'm';
|
||||
res[len+4] = '_';
|
||||
res[len+5] = '0';
|
||||
for(int k = len+6; k < str_size; k++) {
|
||||
res[k] = '\0';
|
||||
}
|
||||
|
||||
*reti = len+5;
|
||||
return res;
|
||||
}
|
||||
|
||||
void parse_rooms(int n_rooms, char* folder) {
|
||||
/*char* name = malloc(sizeof(char)*19); // 1000 rooms max (not anymore xD)
|
||||
name[0] = 't';
|
||||
name[1] = 'e';
|
||||
name[2] = 'm';
|
||||
|
@ -489,7 +511,9 @@ void parse_rooms(int n_rooms) {
|
|||
name[15] = '0';
|
||||
name[16] = '\0';
|
||||
name[17] = '\0';
|
||||
name[18] = '\0';
|
||||
name[18] = '\0';*/
|
||||
int id = 0;
|
||||
char* name = get_name_and_i(folder, n_rooms, &id);
|
||||
|
||||
pool = malloc(sizeof(entry)*n_rooms);
|
||||
pool_size = n_rooms;
|
||||
|
@ -499,10 +523,14 @@ void parse_rooms(int n_rooms) {
|
|||
for(int k = 0; k < n_rooms; k++) {
|
||||
printf("parsing %d...", k);
|
||||
if(k < 10) {
|
||||
name[15] = (char)(k%10 + 48);
|
||||
name[id] = (char)(k%10 + 48);
|
||||
} else if(k < 100) {
|
||||
name[15] = (char)((k/10)%10 + 48);
|
||||
name[16] = (char)(k%10 + 48);
|
||||
name[id] = (char)((k/10)%10 + 48);
|
||||
name[id+1] = (char)(k%10 + 48);
|
||||
} else if(k < 1000) {
|
||||
name[id] = (char)((k/100)%10 + 48);
|
||||
name[id+1] = (char)((k/10)%10 + 48);
|
||||
name[id+2] = (char)(k%10 + 48);
|
||||
}
|
||||
parse_one_room(k, name);
|
||||
printf("done.\n");
|
||||
|
@ -516,6 +544,8 @@ void parse_rooms(int n_rooms) {
|
|||
|
||||
// has to be a multiple of both room_width and room_depth
|
||||
int divider = 4;
|
||||
|
||||
// unused
|
||||
void generate_terrain(room* r) {
|
||||
int rsize = 4*(room_width/divider)*(room_width/divider)*(room_depth/divider)*(room_depth/divider); // floor size (with 1x1 cubes)
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ void align_to(FILE* ptr, char ch) ;
|
|||
int read_int(FILE* ptr, bool print) ;
|
||||
double read_float(FILE* ptr) ;
|
||||
void parse_one_room(int id, char* filename) ;
|
||||
void parse_rooms(int n_rooms) ;
|
||||
void parse_rooms(int n_rooms, char* folder) ;
|
||||
|
||||
void generate_nearby_chunks(int render_dist) ;
|
||||
|
||||
|
|
28
src/main.c
28
src/main.c
|
@ -27,6 +27,22 @@ int gamemode;
|
|||
|
||||
double jPress = false;
|
||||
double gPress = false;
|
||||
double rPress = false;
|
||||
|
||||
void reset_everything(char* folder) {
|
||||
hashtbl_free(visited);
|
||||
free_proj();
|
||||
free_interf();
|
||||
free_pool();
|
||||
|
||||
//init_csts();
|
||||
init_hashtbl();
|
||||
init_ent_generator(10);
|
||||
init_proj();
|
||||
init_interf();
|
||||
parse_rooms(1, folder);
|
||||
}
|
||||
|
||||
void processInput(GLFWwindow *window, float dtime) {
|
||||
// quit w
|
||||
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) {
|
||||
|
@ -153,6 +169,16 @@ void processInput(GLFWwindow *window, float dtime) {
|
|||
if(glfwGetKey(window, GLFW_KEY_M) == GLFW_PRESS) {
|
||||
rot_vt = mind(3.14159/2.0, rot_vt+sensitivity);
|
||||
}
|
||||
|
||||
// reset
|
||||
if(glfwGetKey(window, GLFW_KEY_R) == GLFW_PRESS) {
|
||||
if(!rPress) {
|
||||
rPress = true;
|
||||
reset_everything("levels/level_00/");
|
||||
}
|
||||
} else {
|
||||
rPress = false;
|
||||
}
|
||||
}
|
||||
|
||||
const char *vertexShaderSource = "#version 330 core\n"
|
||||
|
@ -225,7 +251,7 @@ int main_alt() {
|
|||
init_ent_generator(10);
|
||||
init_proj();
|
||||
init_interf();
|
||||
parse_rooms(7);
|
||||
parse_rooms(7, "templates/");
|
||||
|
||||
// ---------------------------------------------------------------------------------------------------------------------------------------------- //
|
||||
// ---------------------------------------------------------------------------------------------------------------------------------------------- //
|
||||
|
|
19
src/move.c
19
src/move.c
|
@ -66,20 +66,27 @@ void init_csts() {
|
|||
camx = 2.0;
|
||||
camy = 5.0;
|
||||
camz = 2.0;
|
||||
player_chx = 0;
|
||||
player_chy = 0;
|
||||
camvx = 0.0;
|
||||
camvy = 0.0;
|
||||
camvz = 0.0;
|
||||
rot_hz = 0.0;
|
||||
rot_vt = 0.0;
|
||||
draw_type = 0;
|
||||
player_hp = 1000;
|
||||
fade_dmg = 0;
|
||||
|
||||
room_width = 16.0;
|
||||
room_depth = 16.0;
|
||||
sq2 = sqrt(2);
|
||||
|
||||
coins = 0;
|
||||
player_hp = 1000;
|
||||
njumps = 3;
|
||||
|
||||
draw_type = 0;
|
||||
fade_dmg = 0;
|
||||
|
||||
stop_evetything = false;
|
||||
tan_fov = tan((fov * 3.14159 / 180.0) / 2.0);
|
||||
sq2 = sqrt(2);
|
||||
}
|
||||
|
||||
void set_player_coords(int old_chx, int old_chy) {
|
||||
|
@ -289,6 +296,10 @@ void movePlayerG(float dtime) {
|
|||
|
||||
camvx *= (1.0 - friction*((double)(dtime)));
|
||||
camvz *= (1.0 - friction*((double)(dtime)));
|
||||
|
||||
if(camy <= -64) {
|
||||
player_hp -= (int)(400*dtime);
|
||||
}
|
||||
}
|
||||
|
||||
void teleport_on_edge() {
|
||||
|
|
Loading…
Reference in New Issue