summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrikboy@gmail.com>2024-05-11 12:27:41 +0200
committerAldrik Ramaekers <aldrikboy@gmail.com>2024-05-11 12:27:41 +0200
commit0ed1a617a897cf241406b3b7d5ddda5b74f4d9f4 (patch)
tree74e5537902360e8bc2ea0e165eeb44f3ee479c5c /src
parent981d99c229161c8afa508468032fe3ea0b924d3b (diff)
backdrop, floors, chairs
Diffstat (limited to 'src')
-rw-r--r--src/asset_defs.c7
-rw-r--r--src/editor.c21
-rw-r--r--src/game.c6
-rw-r--r--src/map.c85
-rw-r--r--src/objects.c12
5 files changed, 112 insertions, 19 deletions
diff --git a/src/asset_defs.c b/src/asset_defs.c
index d40771b..434d1ed 100644
--- a/src/asset_defs.c
+++ b/src/asset_defs.c
@@ -45,9 +45,11 @@ void load_assets() {
// Objects // @NEWOBJECT
img_spawner = assets_load_image_from_file("data/imgs/spawner.png");
img_space_control_panel = assets_load_image_from_file("data/imgs/objects/space_control_panel.png");
+ img_space_control_panel2 = assets_load_image_from_file("data/imgs/objects/space_control_panel2.png");
img_space_window = assets_load_image_from_file("data/imgs/objects/metal_wall_window.png");
img_metal_wall = assets_load_image_from_file("data/imgs/objects/metal_wall.png");
img_metal_wall2 = assets_load_image_from_file("data/imgs/objects/metal_wall2.png");
+ img_chair_up = assets_load_image_from_file("data/imgs/objects/chair_up.png");
// Players
img_gunner_black_run = assets_load_image_from_file("data/imgs/players/Black/Gunner_Black_Run.png");
@@ -83,8 +85,9 @@ void load_assets() {
img_zombie_chunk_blood = assets_load_image_from_file("data/imgs/zombie_chunk_blood.png");
// Tiles
- img_tile_cobblestone = assets_load_image_from_file("data/imgs/tiles/tile_cobblestone.png");
- img_tile_grass1 = assets_load_image_from_file("data/imgs/tiles/tile_grass1.png");
+ img_mars_surface = assets_load_image_from_file("data/imgs/tiles/mars_surface.png");
+ img_tile_floor1 = assets_load_image_from_file("data/imgs/tiles/floor1.png");
+ img_tile_floor2 = assets_load_image_from_file("data/imgs/tiles/floor2.png");
// sounds
wav_throwable_bounce = Mix_LoadWAV("data/sounds/throwable_bounce.wav");
diff --git a/src/editor.c b/src/editor.c
index de9a33f..1183517 100644
--- a/src/editor.c
+++ b/src/editor.c
@@ -85,14 +85,14 @@ void update_editor(platform_window* window)
camera_x += update_delta*cam_speed;
}
+/*
if (_global_mouse.scroll_state == SCROLL_UP) {
player_zoom++;
- printf("%d %d\n", player_zoom, get_tile_width(window));
}
if (_global_mouse.scroll_state == SCROLL_DOWN) {
player_zoom--;
- printf("%d %d\n", player_zoom, get_tile_width(window));
}
+*/
_next_camera_pos.x = -(window->width / 2) + camera_x;
_next_camera_pos.y = -(window->height / 2) + camera_y;
@@ -150,7 +150,13 @@ void draw_placing_rectangle(platform_window* window) {
}
static bool push_icon_button(int x, int y, int w, image* img, bool isSelected) {
- if (img) renderer->render_image(img,_global_camera.x+ x,_global_camera.y+ y, w, w);
+ if (img) {
+ int imgw = w;
+ int imgh = w;
+ if (img->height > img->width) imgw = w*(img->width/(float)img->height);
+ if (img->height < img->width) imgh = w*(img->height/(float)img->width);
+ renderer->render_image(img,_global_camera.x+ x,_global_camera.y+ y, imgw, imgh);
+ }
renderer->render_rectangle_outline(_global_camera.x+ x,_global_camera.y+ y, w+1, w+1, 1, rgb(255,255,255));
if (isSelected) {
@@ -217,7 +223,7 @@ void draw_lighting_panel(platform_window* window) {
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}", emitter.position.x, emitter.position.y, emitter.position.z);
+ sprintf(buf, "{x: %.0f y: %.0f, z: %.0f} {%.0f}", emitter.position.x, emitter.position.y, emitter.position.z, emitter.range);
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);
@@ -247,6 +253,13 @@ void draw_lighting_panel(platform_window* window) {
map_to_load.light_emitters[i].position.x = orig_x + newpos.x;
map_to_load.light_emitters[i].position.y = orig_y + newpos.y;
+
+ if (_global_mouse.scroll_state == SCROLL_UP) {
+ map_to_load.light_emitters[i].range++;
+ }
+ if (_global_mouse.scroll_state == SCROLL_DOWN) {
+ map_to_load.light_emitters[i].range--;
+ }
load_mapdata_into_world();
}
else {
diff --git a/src/game.c b/src/game.c
index b3fd0b2..a7689d3 100644
--- a/src/game.c
+++ b/src/game.c
@@ -217,7 +217,7 @@ void update_server(platform_window* window) {
if (update_timer >= SERVER_TICK_RATE) { // send at 60 ticks
update_spawners_server();
update_drops_server();
- update_wallitems_server();
+ //update_wallitems_server();
update_throwables_server();
update_zombie_chunks_server();
update_round_server();
@@ -383,10 +383,10 @@ void update_game(platform_window* window) {
if (global_state.network_state == CONNECTED) {
take_player_input(window);
-
+
draw_grid(window);
draw_objects(window);
- draw_wallitems(window);
+ //draw_wallitems(window);
draw_zombie_chunks(window);
draw_drops(window);
draw_bullets(window);
diff --git a/src/map.c b/src/map.c
index 47f8a07..ccc4257 100644
--- a/src/map.c
+++ b/src/map.c
@@ -99,6 +99,37 @@ static float distance_between_3f(vec3f v1, vec3f v2)
return sqrt((v1.x-v2.x)*(v1.x-v2.x)+(v1.y-v2.y)*(v1.y-v2.y)+(v1.z-v2.z)*(v1.z-v2.z));
}
+bool check_if_bullet_collided_with_section(float* dist_of_closest_intersect, vec2f bstart,
+ vec2f bend, vec2f l1, vec2f l2, vec2f* intersect_point_buf);
+
+static bool ray_intersects_with_object(vec3f begin, vec3f end) {
+ float dist_of_closest_intersect = __FLT_MAX__;
+ vec2f bstart = (vec2f){begin.x, begin.y};
+ vec2f bend = (vec2f){end.x, end.y};
+
+ for (int i = 0; i < MAX_OBJECTS; i++) {
+ object o = loaded_map.objects[i];
+ if (!o.active) continue;
+ if (begin.z <= o.position.z + o.size.z && begin.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)) {
+ return true;
+ }
+ if (check_if_bullet_collided_with_section(&dist_of_closest_intersect, bstart, bend, obj_box.tl_d, obj_box.tr_d, &intersect_point)) {
+ return true;
+ }
+ if (check_if_bullet_collided_with_section(&dist_of_closest_intersect, bstart, bend, obj_box.tl_d, obj_box.bl_d, &intersect_point)) {
+ return true;
+ }
+ if (check_if_bullet_collided_with_section(&dist_of_closest_intersect, bstart, bend, obj_box.tr_d, obj_box.br_d, &intersect_point)) {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
static bool ray_intersects_with_ground(vec3f begin, vec3f end) {
float dirx = (end.x - begin.x);
float diry = (end.y - begin.y);
@@ -146,6 +177,7 @@ void load_mapdata_into_world() {
// Load emitters
for (int i = 0; i < MAX_LIGHT_EMITTERS; i++) {
loaded_map.light_emitters[i] = map_to_load.light_emitters[i];
+ loaded_map.light_emitters[i].position.z = 1;
}
// Load lightmap
@@ -196,7 +228,20 @@ void load_mapdata_into_world() {
if (ray_intersects_with_ground((vec3f){x, y, loaded_map.heightmap[y][x].bottomright}, emitter.position)) {
p_br = 0.0f;
}
-
+/*
+ if (ray_intersects_with_object((vec3f){x, y, loaded_map.heightmap[y][x].topleft}, emitter.position)) {
+ p_tl = 0.0f;
+ }
+ if (ray_intersects_with_object((vec3f){x, y, loaded_map.heightmap[y][x].topright}, emitter.position)) {
+ p_tr = 0.0f;
+ }
+ if (ray_intersects_with_object((vec3f){x, y, loaded_map.heightmap[y][x].bottomleft}, emitter.position)) {
+ p_bl = 0.0f;
+ }
+ if (ray_intersects_with_object((vec3f){x, y, loaded_map.heightmap[y][x].bottomright}, emitter.position)) {
+ p_br = 0.0f;
+ }
+*/
p_tl += loaded_map.lightmap[y][x].tl;
p_tr += loaded_map.lightmap[y][x].tr;
p_bl += loaded_map.lightmap[y][x].bl;
@@ -224,7 +269,7 @@ void create_empty_map() {
for (int y = 0; y < MAP_SIZE_Y; y++) {
for (int x = 0; x < MAP_SIZE_X; x++) {
- map_to_load.tiles[y][x] = TILE_COBBLESTONE1;
+ map_to_load.tiles[y][x] = TILE_FLOOR1;
}
}
@@ -319,8 +364,8 @@ bool is_in_bounds(float x, float y) {
image* get_image_from_tiletype(tile_type tile) {
switch (tile)
{
- case TILE_COBBLESTONE1: return img_tile_cobblestone;
- case TILE_GRASS1: return img_tile_grass1;
+ case TILE_FLOOR1: return img_tile_floor1;
+ case TILE_FLOOR2: return img_tile_floor2;
default: return 0;
}
}
@@ -341,16 +386,38 @@ vec2f world_pos_to_screen_pos(platform_window* window, float x, float y, float z
return (vec2f){.x = render_x, .y = render_y};
}
+static void draw_backdrop(platform_window* window)
+{
+ map_info info = get_map_info(window);
+
+ int tilemap_render_min_y = (_global_camera.y / info.tile_height)-1;
+ int tilemap_render_max_y = tilemap_render_min_y + (window->height/ info.tile_height) + 1;
+
+ int tilemap_render_min_x = (_global_camera.x / info.tile_width)-1;
+ int tilemap_render_max_x = tilemap_render_min_x + (window->width/ info.tile_width) + 1;
+
+ for (int y = -40; y <= 0; y++)
+ {
+ if (y < tilemap_render_min_y) continue;
+ if (y > tilemap_render_max_y) continue;
+
+ for (int x = -40; x <= MAP_SIZE_X + 40; x++)
+ {
+ if (x < tilemap_render_min_x) continue;
+ if (x > tilemap_render_max_x) continue;
+
+ renderer->render_image(img_mars_surface, x*info.tile_width, y*info.tile_width, info.tile_width, info.tile_height);
+ }
+ }
+}
+
static float offset = 0.0f;
static bool dir = true;
void draw_grid(platform_window* window) {
- /*if (dir) offset += 0.005f;
- else offset -= 0.005f;
- if (offset >= 0.5f) dir = false;
- if (offset <= -0.5f) dir = true;*/
-
map_info info = get_map_info(window);
+ draw_backdrop(window);
+
int tilemap_render_min_y = (_global_camera.y / info.tile_height);
int tilemap_render_max_y = tilemap_render_min_y + (window->height/ info.tile_height) + 1;
diff --git a/src/objects.c b/src/objects.c
index d5dc0ce..c723168 100644
--- a/src/objects.c
+++ b/src/objects.c
@@ -96,6 +96,8 @@ void add_object(object obj) {
image* get_image_from_objecttype(object_type tile) {
switch (tile)
{
+ case OBJECT_SPACE_CONTROL_PANEL2:
+ return img_space_control_panel2;
case OBJECT_SPACE_CONTROL_PANEL:
return img_space_control_panel;
case OBJECT_SPACE_WINDOW:
@@ -104,6 +106,8 @@ image* get_image_from_objecttype(object_type tile) {
return img_metal_wall;
case OBJECT_METAL_WALL2:
return img_metal_wall2;
+ case OBJECT_CHAIR_UP:
+ return img_chair_up;
default:
return 0;
}
@@ -124,16 +128,22 @@ void draw_objects(platform_window* window) {
renderer->render_image(img, box.tl_u.x, box.tl_u.y,
box.br_d.x - box.tl_d.x, box.br_d.y - box.tr_u.y);
}
- render_box_outline(box, rgb(255,0,0));
+ //render_box_outline(box, rgb(255,0,0));
if (prev_y < o.position.y) {
prev_y = o.position.y;
draw_zombies(window, prev_y, prev_y);
+ #ifdef MODE_DEBUG
+ if (!is_editing_map)
+ #endif
draw_players(window, prev_y, prev_y);
}
}
draw_zombies(window, prev_y, MAP_SIZE_Y);
+ #ifdef MODE_DEBUG
+ if (!is_editing_map)
+ #endif
draw_players(window, prev_y, MAP_SIZE_Y);
}