diff options
| author | Aldrik Ramaekers <aldrik@amftech.nl> | 2023-12-24 13:33:15 +0100 |
|---|---|---|
| committer | Aldrik Ramaekers <aldrik@amftech.nl> | 2023-12-24 13:33:15 +0100 |
| commit | 03930634b437dc390354accd30563050d681a08d (patch) | |
| tree | 94070275ab4f105eadba830e9d4ac79b8a32e2f1 | |
| parent | eefc69b2c3816ed4c97bf976b7373175b8e7343d (diff) | |
editor work
| -rw-r--r-- | build/zombies.exe | bin | 2098429 -> 2100068 bytes | |||
| -rw-r--r-- | include/objects.h | 3 | ||||
| -rw-r--r-- | src/audio.c | 2 | ||||
| -rw-r--r-- | src/bullets.c | 4 | ||||
| -rw-r--r-- | src/editor.c | 41 | ||||
| -rw-r--r-- | src/map.c | 16 | ||||
| -rw-r--r-- | src/objects.c | 2 | ||||
| -rw-r--r-- | src/players.c | 2 | ||||
| -rw-r--r-- | src/rounds.c | 7 | ||||
| -rw-r--r-- | src/throwables.c | 4 |
10 files changed, 60 insertions, 21 deletions
diff --git a/build/zombies.exe b/build/zombies.exe Binary files differindex f350c96..3e1bb2c 100644 --- a/build/zombies.exe +++ b/build/zombies.exe diff --git a/include/objects.h b/include/objects.h index 29e6db0..6ad5a10 100644 --- a/include/objects.h +++ b/include/objects.h @@ -26,9 +26,8 @@ typedef enum t_object_type { typedef struct t_object { bool active; - vec2f position; + vec3f position; vec3f size; - float h; object_type type; } object; diff --git a/src/audio.c b/src/audio.c index 4dbcdc9..ab81906 100644 --- a/src/audio.c +++ b/src/audio.c @@ -138,7 +138,7 @@ void audio_channel_finished(int channel) { void play_music(Mix_Music* music) { Mix_FadeInMusic(music, -1, 2000); - Mix_VolumeMusic(MIX_MAX_VOLUME/4); + Mix_VolumeMusic(MIX_MAX_VOLUME/6); } void play_positioned_sound(int channel, Mix_Chunk* wav, vec3f pos, float max_audible_dist) { diff --git a/src/bullets.c b/src/bullets.c index c8fc6e9..516c34e 100644 --- a/src/bullets.c +++ b/src/bullets.c @@ -95,8 +95,8 @@ object_type check_if_bullet_collided_with_object(bullet* b, platform_window* win for (int i = 0; i < MAX_OBJECTS; i++) { object o = loaded_map.objects[i]; if (!o.active) continue; - if (b->position.z <= o.h + o.size.z && b->position.z >= o.h) { - box obj_box = get_box_of_square((vec3f){o.position.x, o.position.y, o.h}, o.size); + if (b->position.z <= o.position.z + o.size.z && b->position.z >= o.position.z) { + box obj_box = get_box_of_square((vec3f){o.position.x, o.position.y, o.position.z}, o.size); vec2f intersect_point; if (check_if_bullet_collided_with_section(&dist_of_closest_intersect, bstart, bend, obj_box.bl_d, obj_box.br_d, &intersect_point)) { result = o.type; diff --git a/src/editor.c b/src/editor.c index 6d107f7..ce7e277 100644 --- a/src/editor.c +++ b/src/editor.c @@ -247,6 +247,45 @@ void draw_lighting_panel(platform_window* window) { } } +platform_window* window_ptr; +int cmpfunc_sortobjects (const void * a, const void * b) { + object* obj1 = (object*)a; + object* obj2 = (object*)b; + + vec2 cursor_world_pos = screen_pos_to_world_pos(window_ptr, _global_mouse.x, _global_mouse.y); + + float dist1 = distance_between_3f(obj1->position, (vec3f){.x = cursor_world_pos.x, .y = cursor_world_pos.y, .z = 0}); + float dist2 = distance_between_3f(obj2->position, (vec3f){.x = cursor_world_pos.x, .y = cursor_world_pos.y, .z = 0}); + return dist1 - dist2; +} + +void draw_object_panel(platform_window* window) { + int row_h = 20; + int offsety = 0; + window_ptr = window; + + //qsort(loaded_map.objects, MAX_OBJECTS, sizeof(object), cmpfunc_sortobjects); + + for (int i = 0; i < MAX_OBJECTS; i++) { + object obj = loaded_map.objects[i]; + if (!obj.active) continue; + + renderer->render_rectangle(_global_camera.x, _global_camera.y + offset_y + row_h + offsety, editor_width, row_h, rgba(255,0,0,40)); + + char buf[50]; + sprintf(buf, "{x: %.0f y: %.0f, z: %.0f}", obj.position.x, obj.position.y, 0); + renderer->render_text(fnt_20, _global_camera.x, _global_camera.y + offset_y + row_h + offsety + 5, buf, rgb(0,0,0)); + + //vec2f pos = world_pos_to_screen_pos(window, emitter.position.x, emitter.position.y, emitter.position.z); + //renderer->render_rectangle(pos.x-3, pos.y-3, 36, 36, rgb(100,0,0)); + //renderer->render_rectangle(pos.x, pos.y, 30, 30, rgb(255,0,0)); + //renderer->render_image(img_sunny, pos.x, pos.y, 30, 30); + + offsety+=row_h+1; + } +} + + void draw_editor(platform_window* window) { if (is_editing_map) { @@ -269,7 +308,7 @@ void draw_editor(platform_window* window) switch (edit_state) { case EDITING_TILES: draw_tile_panel(window); break; - case EDITING_OBJECTS: break; + case EDITING_OBJECTS: draw_object_panel(window); break; case EDITING_LIGHTING: draw_lighting_panel(window); break; } @@ -207,16 +207,16 @@ void create_empty_map() { } } - map_to_load.objects[0] = (object){.active = true, .h = 0, .position = (vec2f){16, 8}, .size = (vec3f){1,1,2}, .type = OBJECT_PLANTBOX1}; + map_to_load.objects[0] = (object){.active = true, .position = (vec3f){16, 8, 0}, .size = (vec3f){1,1,2}, .type = OBJECT_PLANTBOX1}; - map_to_load.objects[1] = (object){.active = true, .h = 0, .position = (vec2f){0, 0}, .size = (vec3f){1,1,2}, .type = OBJECT_COBBLESTONEWALL1}; - map_to_load.objects[2] = (object){.active = true, .h = 0, .position = (vec2f){0, 1}, .size = (vec3f){1,1,2}, .type = OBJECT_COBBLESTONEWALL1}; - map_to_load.objects[3] = (object){.active = true, .h = 0, .position = (vec2f){0, 2}, .size = (vec3f){1,1,2}, .type = OBJECT_COBBLESTONEWALL1}; + map_to_load.objects[1] = (object){.active = true, .position = (vec3f){0, 0, 0}, .size = (vec3f){1,1,2}, .type = OBJECT_COBBLESTONEWALL1}; + map_to_load.objects[2] = (object){.active = true, .position = (vec3f){0, 1, 0}, .size = (vec3f){1,1,2}, .type = OBJECT_COBBLESTONEWALL1}; + map_to_load.objects[3] = (object){.active = true, .position = (vec3f){0, 2, 0}, .size = (vec3f){1,1,2}, .type = OBJECT_COBBLESTONEWALL1}; - map_to_load.objects[4] = (object){.active = true, .h = 0, .position = (vec2f){14, 8}, .size = (vec3f){1,1,2}, .type = OBJECT_PLANTBOX1}; - map_to_load.objects[5] = (object){.active = true, .h = 0, .position = (vec2f){14, 12}, .size = (vec3f){1,1,2}, .type = OBJECT_PLANTBOX1}; - map_to_load.objects[6] = (object){.active = true, .h = 0, .position = (vec2f){16, 10}, .size = (vec3f){1,1,2}, .type = OBJECT_PLANTBOX1}; - map_to_load.objects[7] = (object){.active = true, .h = 0, .position = (vec2f){14, 14}, .size = (vec3f){1,1,2}, .type = OBJECT_PLANTBOX1}; + map_to_load.objects[4] = (object){.active = true, .position = (vec3f){14, 8, 0}, .size = (vec3f){1,1,2}, .type = OBJECT_PLANTBOX1}; + map_to_load.objects[5] = (object){.active = true, .position = (vec3f){14, 12, 0}, .size = (vec3f){1,1,2}, .type = OBJECT_PLANTBOX1}; + map_to_load.objects[6] = (object){.active = true, .position = (vec3f){16, 10, 0}, .size = (vec3f){1,1,2}, .type = OBJECT_PLANTBOX1}; + map_to_load.objects[7] = (object){.active = true, .position = (vec3f){14, 14, 0}, .size = (vec3f){1,1,2}, .type = OBJECT_PLANTBOX1}; map_to_load.light_emitters[0] = (light_emitter){.brightness = 1.0f, .position = (vec3f){0, 0, 10}, .range = 20.0f, .active = true}; map_to_load.light_emitters[1] = (light_emitter){.brightness = 1.0f, .position = (vec3f){0, 30, 10}, .range = 20.0f, .active = true}; diff --git a/src/objects.c b/src/objects.c index 4ba9961..c1335fb 100644 --- a/src/objects.c +++ b/src/objects.c @@ -2,7 +2,7 @@ #include "../include/wall_item.h" box get_box_of_object(platform_window* window, object o) { - return get_render_box_of_square(window, (vec3f){o.position.x, o.position.y, o.h}, o.size); + return get_render_box_of_square(window, (vec3f){o.position.x, o.position.y, o.position.z}, o.size); } void render_box_with_outline(box box, color c) { diff --git a/src/players.c b/src/players.c index 93b87cf..30af803 100644 --- a/src/players.c +++ b/src/players.c @@ -199,7 +199,7 @@ object check_if_player_collided_with_object(player p) { object o = loaded_map.objects[i]; if (!o.active) continue; - if (check_if_player_collided_with_box(p, get_box_of_square((vec3f){o.position.x, o.position.y, o.h}, o.size))) { + if (check_if_player_collided_with_box(p, get_box_of_square((vec3f){o.position.x, o.position.y, o.position.z}, o.size))) { return o; } } diff --git a/src/rounds.c b/src/rounds.c index f5082a4..27a4806 100644 --- a/src/rounds.c +++ b/src/rounds.c @@ -70,16 +70,17 @@ void draw_round(platform_window* window) { int characters_visible_count = _current_round.round_timer/delay_per_char; if (characters_visible_count > round_text_len) characters_visible_count = round_text_len; round_text[characters_visible_count] = 0; + font* round_text_fnt = get_font(window, 1.0f); - text_w = renderer->calculate_text_width(fnt_32, round_text); + text_w = renderer->calculate_text_width(round_text_fnt, round_text); final_text_y = _global_camera.y + window->height/4.0f; int box_pad = 10; int box_x = window_center_x - (text_w/2)+1 - box_pad; int box_y = final_text_y - box_pad; int box_w = text_w + box_pad*2; - int box_h = fnt_32->px_h + box_pad*2; + int box_h = round_text_fnt->px_h + box_pad*2; renderer->render_rectangle(box_x, box_y, box_w, box_h, rgba(255,0,0,100)); - renderer->render_text(fnt_32, window_center_x - (text_w/2), final_text_y, round_text, rgba(255,255,255,255)); + renderer->render_text(round_text_fnt, window_center_x - (text_w/2), final_text_y, round_text, rgba(255,255,255,255)); } } diff --git a/src/throwables.c b/src/throwables.c index b6780d3..a950080 100644 --- a/src/throwables.c +++ b/src/throwables.c @@ -71,8 +71,8 @@ bool check_if_throwable_collided_with_object(throwable* b, vec3f oldpos, vec3f n for (int i = 0; i < MAX_OBJECTS; i++) { object o = loaded_map.objects[i]; if (!o.active) continue; - if (b->position.z <= o.h + o.size.z && b->position.z >= o.h) { - box obj_box = get_box_of_square((vec3f){o.position.x, o.position.y, o.h}, o.size); + if (b->position.z <= o.position.z + o.size.z && b->position.z >= o.position.z) { + box obj_box = get_box_of_square((vec3f){o.position.x, o.position.y, o.position.z}, o.size); // top if (lines_intersect((vec2f){.x = oldpos.x, .y = oldpos.y}, (vec2f){.x = newpos.x, .y = newpos.y}, |
