summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrik@amftech.nl>2023-12-24 13:33:15 +0100
committerAldrik Ramaekers <aldrik@amftech.nl>2023-12-24 13:33:15 +0100
commit03930634b437dc390354accd30563050d681a08d (patch)
tree94070275ab4f105eadba830e9d4ac79b8a32e2f1
parenteefc69b2c3816ed4c97bf976b7373175b8e7343d (diff)
editor work
-rw-r--r--build/zombies.exebin2098429 -> 2100068 bytes
-rw-r--r--include/objects.h3
-rw-r--r--src/audio.c2
-rw-r--r--src/bullets.c4
-rw-r--r--src/editor.c41
-rw-r--r--src/map.c16
-rw-r--r--src/objects.c2
-rw-r--r--src/players.c2
-rw-r--r--src/rounds.c7
-rw-r--r--src/throwables.c4
10 files changed, 60 insertions, 21 deletions
diff --git a/build/zombies.exe b/build/zombies.exe
index f350c96..3e1bb2c 100644
--- a/build/zombies.exe
+++ b/build/zombies.exe
Binary files differ
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;
}
diff --git a/src/map.c b/src/map.c
index 06ddd25..a449514 100644
--- a/src/map.c
+++ b/src/map.c
@@ -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},