From 2f9e8a6033075f68bbed46a66d22712a84b8f678 Mon Sep 17 00:00:00 2001 From: Aldrik Ramaekers Date: Sat, 11 May 2024 14:37:34 +0200 Subject: spawner --- data/imgs/objects/metal_wall_window_h.png | Bin 0 -> 478 bytes data/imgs/objects/zombie_spawner.png | Bin 0 -> 3874 bytes data/maps/map1.dat | Bin 8322408 -> 8344008 bytes data/psd/metal_wall_window_h.psd | Bin 0 -> 50032 bytes data/psd/zombie_spawner.psd | Bin 0 -> 45037 bytes include/asset_defs.h | 2 ++ include/map.h | 2 +- include/objects.h | 6 ++++- src/asset_defs.c | 2 ++ src/editor.c | 24 ++++++++++++++++++-- src/map.c | 36 +++++++++++++++++++++++++----- src/objects.c | 8 +++++-- src/players.c | 2 +- src/zombies.c | 5 ++++- 14 files changed, 74 insertions(+), 13 deletions(-) create mode 100644 data/imgs/objects/metal_wall_window_h.png create mode 100644 data/imgs/objects/zombie_spawner.png create mode 100644 data/psd/metal_wall_window_h.psd create mode 100644 data/psd/zombie_spawner.psd diff --git a/data/imgs/objects/metal_wall_window_h.png b/data/imgs/objects/metal_wall_window_h.png new file mode 100644 index 0000000..4e06bdd Binary files /dev/null and b/data/imgs/objects/metal_wall_window_h.png differ diff --git a/data/imgs/objects/zombie_spawner.png b/data/imgs/objects/zombie_spawner.png new file mode 100644 index 0000000..146f475 Binary files /dev/null and b/data/imgs/objects/zombie_spawner.png differ diff --git a/data/maps/map1.dat b/data/maps/map1.dat index 4d1c2cc..963babd 100644 Binary files a/data/maps/map1.dat and b/data/maps/map1.dat differ diff --git a/data/psd/metal_wall_window_h.psd b/data/psd/metal_wall_window_h.psd new file mode 100644 index 0000000..46fc179 Binary files /dev/null and b/data/psd/metal_wall_window_h.psd differ diff --git a/data/psd/zombie_spawner.psd b/data/psd/zombie_spawner.psd new file mode 100644 index 0000000..7a6f0dc Binary files /dev/null and b/data/psd/zombie_spawner.psd differ diff --git a/include/asset_defs.h b/include/asset_defs.h index 3de8bbf..fc770cb 100644 --- a/include/asset_defs.h +++ b/include/asset_defs.h @@ -39,9 +39,11 @@ image* img_spawner; image* img_space_control_panel; image* img_space_control_panel2; image* img_space_window; +image* img_space_window_h; image* img_metal_wall; image* img_metal_wall2; image* img_chair_up; +image* img_zombie_spawner; // Throwables image* img_grenade; diff --git a/include/map.h b/include/map.h index 50e3941..3980c8a 100644 --- a/include/map.h +++ b/include/map.h @@ -33,7 +33,7 @@ typedef struct t_tile { #define MAP_SIZE_X 1000 #define MAP_SIZE_Y 1000 -#define MAX_LIGHT_EMITTERS 100 +#define MAX_LIGHT_EMITTERS 1000 typedef struct t_map_info { int tile_width; diff --git a/include/objects.h b/include/objects.h index f5b9255..da1459e 100644 --- a/include/objects.h +++ b/include/objects.h @@ -27,6 +27,8 @@ typedef enum t_object_type { OBJECT_METAL_WALL2 = 4, OBJECT_SPACE_CONTROL_PANEL2 = 5, OBJECT_CHAIR_UP = 6, + OBJECT_SPACE_WINDOW_H = 7, + OBJECT_ZOMBIE_SPAWNER = 8, // Substitute. OBJECT_END, } object_type; @@ -53,11 +55,13 @@ typedef struct t_box { // @NEWOBJECT object object_dict[OBJECT_END] = { {0,(vec3f){0, 0, 0},{1,3,0.5f},OBJECT_SPACE_CONTROL_PANEL}, - {0,(vec3f){0, 0, 0},{1,1,2},OBJECT_SPACE_WINDOW}, + {0,(vec3f){0, 0, 0},{1,1,1},OBJECT_SPACE_WINDOW}, {0,(vec3f){0, 0, 0},{1,1,1},OBJECT_METAL_WALL}, {0,(vec3f){0, 0, 0},{1,1,1},OBJECT_METAL_WALL2}, {0,(vec3f){0, 0, 0},{3,1,0.5f},OBJECT_SPACE_CONTROL_PANEL2}, {0,(vec3f){0, 0, 0},{1,1,0.5f},OBJECT_CHAIR_UP}, + {0,(vec3f){0, 0, 0},{1,1,1},OBJECT_SPACE_WINDOW_H}, + {0,(vec3f){0, 0, 0},{1,1,0.5},OBJECT_ZOMBIE_SPAWNER}, }; object get_object_at_tile(float x, float y); diff --git a/src/asset_defs.c b/src/asset_defs.c index 434d1ed..cccbc7b 100644 --- a/src/asset_defs.c +++ b/src/asset_defs.c @@ -47,9 +47,11 @@ void load_assets() { 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_space_window_h = assets_load_image_from_file("data/imgs/objects/metal_wall_window_h.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"); + img_zombie_spawner = assets_load_image_from_file("data/imgs/objects/zombie_spawner.png"); // Players img_gunner_black_run = assets_load_image_from_file("data/imgs/players/Black/Gunner_Black_Run.png"); diff --git a/src/editor.c b/src/editor.c index 1183517..79a5503 100644 --- a/src/editor.c +++ b/src/editor.c @@ -62,6 +62,25 @@ static void update_tile_editor(platform_window* window) { } } +void update_lighting_panel(platform_window* window, vec2 cursor_pos) { + if (keyboard_is_key_pressed(KEY_ENTER)) { + for (int i = 0; i < MAX_LIGHT_EMITTERS; i++) { + light_emitter emitter = loaded_map.light_emitters[i]; + if (emitter.active) continue; + + map_to_load.light_emitters[i].position.x = cursor_pos.x; + map_to_load.light_emitters[i].position.y = cursor_pos.y; + map_to_load.light_emitters[i].position.z = 1; + map_to_load.light_emitters[i].active = 1; + map_to_load.light_emitters[i].brightness = 1.0f; + map_to_load.light_emitters[i].range = 10.0f; + + load_mapdata_into_world(); + return; + } + } +} + void update_editor(platform_window* window) { if (keyboard_is_key_pressed(KEY_F1)) { @@ -97,11 +116,12 @@ void update_editor(platform_window* window) _next_camera_pos.x = -(window->width / 2) + camera_x; _next_camera_pos.y = -(window->height / 2) + camera_y; + vec2 pos = screen_pos_to_world_pos(window, _global_mouse.x + window->width/2, _global_mouse.y + window->height/2); switch (edit_state) { case EDITING_TILES: update_tile_editor(window); break; case EDITING_OBJECTS: update_object_editor(window); break; - case EDITING_LIGHTING: break; + case EDITING_LIGHTING: update_lighting_panel(window, pos); break; } @@ -418,7 +438,7 @@ void update_object_editor(platform_window* window) { case OBJECT_EDITOR_SELECTING: update_object_selection(window, pos); break; - + default: break; } diff --git a/src/map.c b/src/map.c index ccc4257..e0454aa 100644 --- a/src/map.c +++ b/src/map.c @@ -261,6 +261,16 @@ void load_mapdata_into_world() { // Load objects memcpy(loaded_map.objects, map_to_load.objects, sizeof(loaded_map.objects)); + + // Load special objects + for (int i = 0; i < MAX_OBJECTS; i++) { + object o = loaded_map.objects[i]; + if (!o.active) continue; + + if (o.type == OBJECT_ZOMBIE_SPAWNER) { + create_spawner((vec2){.x = o.position.x, .y = o.position.y}); + } + } } void create_empty_map() { @@ -277,8 +287,8 @@ void create_empty_map() { map_to_load.objects[x] = (object){.active = true, .position = (vec3f){x, 0, 0}, .size = (vec3f){1,1,1}, .type = OBJECT_METAL_WALL}; } - 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}; + //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}; load_mapdata_into_world(); } @@ -391,12 +401,13 @@ 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_max_y = tilemap_render_min_y + (window->height/ info.tile_height) + 2; 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; + int tilemap_render_max_x = tilemap_render_min_x + (window->width/ info.tile_width) + 2; - for (int y = -40; y <= 0; y++) + // north of spaceship + for (int y = -40; y <= 7; y++) { if (y < tilemap_render_min_y) continue; if (y > tilemap_render_max_y) continue; @@ -409,6 +420,21 @@ static void draw_backdrop(platform_window* window) renderer->render_image(img_mars_surface, x*info.tile_width, y*info.tile_width, info.tile_width, info.tile_height); } } + + // west of spaceship + for (int y = 0; y <= MAP_SIZE_Y; y++) + { + if (y < tilemap_render_min_y) continue; + if (y > tilemap_render_max_y) continue; + + for (int x = -40; x <= 10; 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; diff --git a/src/objects.c b/src/objects.c index c723168..7782ff5 100644 --- a/src/objects.c +++ b/src/objects.c @@ -108,6 +108,10 @@ image* get_image_from_objecttype(object_type tile) { return img_metal_wall2; case OBJECT_CHAIR_UP: return img_chair_up; + case OBJECT_SPACE_WINDOW_H: + return img_space_window_h; + case OBJECT_ZOMBIE_SPAWNER: + return img_zombie_spawner; default: return 0; } @@ -148,6 +152,6 @@ void draw_objects(platform_window* window) { } void create_objects() { - create_spawner((vec2){11, 18}); - create_wallitem((vec3f){14, 1, 0}, WALLITEM_GUN, (wall_item_data){.gun = GUN_NOVA}); + //create_spawner((vec2){11, 18}); + //create_wallitem((vec3f){14, 1, 0}, WALLITEM_GUN, (wall_item_data){.gun = GUN_NOVA}); } \ No newline at end of file diff --git a/src/players.c b/src/players.c index 2454c28..82a2815 100644 --- a/src/players.c +++ b/src/players.c @@ -51,7 +51,7 @@ void spawn_player(u32 id, network_client client) { players[i].active = true; players[i].sec_since_last_shot = 10.0f; players[i].sec_since_last_damage_taken = 10.0f; - players[i].playerx = 3; + players[i].playerx = 30; players[i].playery = 3; players[i].gunx = 0.0f; players[i].guny = 0.0f; diff --git a/src/zombies.c b/src/zombies.c index 04253b8..205097e 100644 --- a/src/zombies.c +++ b/src/zombies.c @@ -54,7 +54,7 @@ void create_spawner(vec2 position) { s.active = true; s.position = position; s.sec_since_last_spawn = 999.0f; - s.sprite = create_sprite(img_spawner, 14, 64, 64, 1.0f); + s.sprite = create_sprite(img_spawner, 1, 256, 384, 1.0f); for (int i = 0; i < MAX_SPAWNERS; i++) { spawner o = spawner_tiles[i]; @@ -198,6 +198,8 @@ void update_spawners_server() { } void draw_spawners(platform_window* window) { + return; + #if 0 map_info info = get_map_info(window); for (int x = 0; x < MAX_SPAWNERS; x++) { @@ -233,6 +235,7 @@ void draw_spawners(platform_window* window) { renderer->render_line(tile.tr.x, tile.tr.y, tile.br.x, tile.br.y, 1, rgb(0,255,255)); // right renderer->render_line(tile.bl.x, tile.bl.y, tile.br.x, tile.br.y, 1, rgb(0,255,255)); // bottom*/ } + #endif } static void draw_path_of_zombie(platform_window* window, zombie o) { -- cgit v1.2.3-70-g09d2