From 2c5e693200ce5152010f645a5c786624a91332b2 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Mon, 7 Mar 2022 08:22:40 -0600 Subject: [PATCH] bug fixing and entity duplicating --- .vscode/tasks.json | 1 + run_tree/assets/sounds/interact-1.wav | Bin 0 -> 25202 bytes run_tree/scenes/level1.scene | 326 +++++++++++++++++++++++++- src/build.onyx | 2 +- src/entity/components/patron.onyx | 45 +++- src/entity/components/player.onyx | 1 + src/entity/editor.onyx | 45 ++-- src/entity/scene.onyx | 18 ++ src/gfx/ui.onyx | 92 ++++++++ src/sfx/audio_manager.onyx | 2 +- 10 files changed, 506 insertions(+), 26 deletions(-) create mode 100644 run_tree/assets/sounds/interact-1.wav diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 1b4ee0b..a000fc2 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -35,6 +35,7 @@ "command": "./run.sh", "args": ["run"], "dependsOn": "Build game", + "dependsOrder": "sequence" } ] } \ No newline at end of file diff --git a/run_tree/assets/sounds/interact-1.wav b/run_tree/assets/sounds/interact-1.wav new file mode 100644 index 0000000000000000000000000000000000000000..55acb5ab780314a9c70945bdbf3b502310c36206 GIT binary patch literal 25202 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 literal 0 HcmV?d00001 diff --git a/run_tree/scenes/level1.scene b/run_tree/scenes/level1.scene index 8405292..0808b4a 100644 --- a/run_tree/scenes/level1.scene +++ b/run_tree/scenes/level1.scene @@ -1,7 +1,7 @@ [Background] id = 100 flags = 0 -pos.x = 406.5000 +pos.x = 422.5000 pos.y = 311.5000 size.x = 941.0000 size.y = 751.0000 @@ -495,6 +495,330 @@ color.a = 1.0000 item = "beer" max_timeout = 2.0000 +[Furniture] +id = 164 +flags = 2 +pos.x = 536.0000 +pos.y = 176.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 32.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 165 +flags = 2 +pos.x = 536.0000 +pos.y = 96.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 32.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 167 +flags = 2 +pos.x = 136.0000 +pos.y = 416.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 32.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 168 +flags = 2 +pos.x = 536.0000 +pos.y = 416.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 32.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 169 +flags = 2 +pos.x = 560.0000 +pos.y = 96.0000 +size.x = 32.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 1 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 32.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 170 +flags = 2 +pos.x = 560.0000 +pos.y = 176.0000 +size.x = 32.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 1 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 32.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 171 +flags = 2 +pos.x = 560.0000 +pos.y = 416.0000 +size.x = 32.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 1 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 32.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 172 +flags = 2 +pos.x = 160.0000 +pos.y = 416.0000 +size.x = 32.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 1 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 32.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 173 +flags = 2 +pos.x = 584.0000 +pos.y = 416.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = -16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 174 +flags = 2 +pos.x = 584.0000 +pos.y = 176.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = -16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 175 +flags = 2 +pos.x = 584.0000 +pos.y = 96.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = -16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 176 +flags = 2 +pos.x = 184.0000 +pos.y = 416.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = -16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + [Custom] id = 157 flags = 3 diff --git a/src/build.onyx b/src/build.onyx index 8906ca4..429f03f 100644 --- a/src/build.onyx +++ b/src/build.onyx @@ -4,7 +4,7 @@ package runtime.vars MAJOR_VERSION :: 0 MINOR_VERSION :: 1 -DEBUG :: true +// DEBUG :: true #load_path ONYX_PATH diff --git a/src/entity/components/patron.onyx b/src/entity/components/patron.onyx index 2bc4255..45655af 100644 --- a/src/entity/components/patron.onyx +++ b/src/entity/components/patron.onyx @@ -18,6 +18,7 @@ PatronComponent :: struct { order_show_animation: f32; holding: Entity_ID; consume_timeout: f32; + annoy_timeout: f32; init :: (use this: ^PatronComponent) { order_item = random.choice(item_store.items.entries).key; @@ -61,6 +62,12 @@ PatronComponent :: struct { target = random.choice(exits).id; } + release_seat :: (use this: ^PatronComponent) { + target_entity := scene->get(target); + furniture_comp := target_entity->get(FurnitureComponent); + furniture_comp.taken = false; + } + update :: (use this: ^PatronComponent, entity: ^Entity, dt: f32) { if state == .Walking_To_Seat { if target == Entity_Nothing { @@ -77,18 +84,18 @@ PatronComponent :: struct { consume_timeout -= dt; if consume_timeout < 0 { holding_object := scene->get(holding); - holding_object.flags |= .Dead; - holding = Entity_Nothing; + if holding_object != null { + holding_object.flags |= .Dead; + holding = Entity_Nothing; - item_comp := holding_object->get(ItemComponent); - item_info := item_comp->get_info(); + item_comp := holding_object->get(ItemComponent); + item_info := item_comp->get_info(); - money_comp := scene->first_component(MoneyComponent); - money_comp->deposit(item_info.sell_value); + money_comp := scene->first_component(MoneyComponent); + money_comp->deposit(item_info.sell_value); + } - target_entity := scene->get(target); - furniture_comp := target_entity->get(FurnitureComponent); - furniture_comp.taken = false; + this->release_seat(); state = .Leaving; this->find_exit(); @@ -99,6 +106,17 @@ PatronComponent :: struct { if order_show_animation > 0 { order_show_animation *= 0.75; } + + if annoy_timeout > 0 { + annoy_timeout -= dt; + + if annoy_timeout < 0 { + // Angry walkout + this->release_seat(); + state = .Leaving; + this->find_exit(); + } + } } if target != Entity_Nothing { @@ -131,6 +149,7 @@ PatronComponent :: struct { if interactor->has(PlayerComponent) { patron.state = .Waiting_For_Order; patron.order_show_animation = 1.0f; + patron.annoy_timeout = random.float(15, 20); @Hardcoded Audio_Manager.play_sound("./assets/sounds/prompt-1.wav"); } @@ -175,6 +194,14 @@ PatronComponent :: struct { immediate_set_color(.{0.9, 0.9, 0.9}); immediate_rectangle(r.x, r.y, r.w, r.h); + if annoy_timeout < 10 { @Hardcoded + immediate_set_color(.{1, 0, 0}); + ar := r; + ar.h *= 1 - annoy_timeout / 10; + ar.y = r.y + r.h - ar.h; + immediate_rectangle(ar.x, ar.y, ar.w, ar.h); + } + r.x += 2; r.y += 2; r.w -= 4; diff --git a/src/entity/components/player.onyx b/src/entity/components/player.onyx index 0501ba1..dbf2a80 100644 --- a/src/entity/components/player.onyx +++ b/src/entity/components/player.onyx @@ -54,6 +54,7 @@ PlayerComponent :: struct { it := scene->get(player.nearby_interact); interact_comp := it->get(InteractableComponent); interact_comp.interact(it, this); + Audio_Manager.play_sound("./assets/sounds/interact-1.wav"); } // diff --git a/src/entity/editor.onyx b/src/entity/editor.onyx index 0ed082a..7d123b3 100644 --- a/src/entity/editor.onyx +++ b/src/entity/editor.onyx @@ -85,7 +85,8 @@ editor_update :: (dt: f32) { mouse_pos := mouse_raw - scene_render_offset; if mouse_raw.x < ~~window_width - sidebar_width && mouse_pos.x >= 0 { - if is_button_just_down(GLFW_MOUSE_BUTTON_LEFT) || is_button_just_down(GLFW_MOUSE_BUTTON_RIGHT) { + if !dragging && !resizing && + (is_button_just_up(GLFW_MOUSE_BUTTON_LEFT) || is_button_just_up(GLFW_MOUSE_BUTTON_RIGHT)) { if active_tab == .Edit do active_index = -1; selected_entity_id = Entity_Nothing; @@ -96,8 +97,8 @@ editor_update :: (dt: f32) { } } - dragging = is_button_just_down(GLFW_MOUSE_BUTTON_LEFT) && selected_entity_id != Entity_Nothing; - resizing = is_button_just_down(GLFW_MOUSE_BUTTON_RIGHT) && selected_entity_id != Entity_Nothing; + dragging = false; + resizing = false; } } @@ -112,6 +113,13 @@ editor_update :: (dt: f32) { if selected_entity_id != Entity_Nothing && active_tab == .Edit { selected_entity := scene->get(selected_entity_id); + { + mouse_pos := mouse_get_position_vector() - scene_render_offset; + contains := Rect.contains(selected_entity->get_rect(), mouse_pos); + dragging = dragging || (is_button_just_down(GLFW_MOUSE_BUTTON_LEFT) && contains); + resizing = resizing || (is_button_just_down(GLFW_MOUSE_BUTTON_RIGHT) && contains); + } + if dragging { if editor_grid_shown { new_top_left := mouse_get_position_vector() - scene_render_offset; @@ -361,11 +369,17 @@ editor_draw :: () { } } else { - if draw_button(.{ x + w - 150, y, 150, 24 }, "Delete") { + if draw_button(.{ x + w - 100, y, 100, 24 }, "Delete") { scene->delete(entity); selected_entity_id = Entity_Nothing; return; } + if draw_button(.{ x + w - 204, y, 100, 24 }, "Duplicate") { + new_entity := scene->duplicate(entity); + new_entity.pos = entity.pos + .{16, 16}; + selected_entity_id = new_entity.id; + return; + } if active_index >= 0 do sidebar_width += w; @@ -501,16 +515,16 @@ editor_draw :: () { switch info.kind { case .Enum { enum_info := cast(^type_info.Type_Info_Enum) info; - value: u64; - switch enum_info.backing_type { - case i8, u8 do value = cast(u64) *(cast(^u8) v.data); - case i16, u16 do value = cast(u64) *(cast(^u16) v.data); - case i32, u32 do value = cast(u64) *(cast(^u32) v.data); - case i64, u64 do value = cast(u64) *(cast(^u64) v.data); - case #default do assert(false, "Bad enum backing type"); - } - if enum_info.is_flags { + value: u64; + switch enum_info.backing_type { + case i8, u8 do value = cast(u64) *(cast(^u8) v.data); + case i16, u16 do value = cast(u64) *(cast(^u16) v.data); + case i32, u32 do value = cast(u64) *(cast(^u32) v.data); + case i64, u64 do value = cast(u64) *(cast(^u64) v.data); + case #default do assert(false, "Bad enum backing type"); + } + for^ enum_info.members { y += 20; checkbox_value := (value & it.value) != 0; @@ -529,7 +543,10 @@ editor_draw :: () { } } } else { - @TODO // Add radio buttons for enum type. + for^ enum_info.members { + y += 20; + draw_radio(.{x, y, w, 20}, cast(^i32) v.data, ~~it.value, it.name, increment=~~y); + } } } diff --git a/src/entity/scene.onyx b/src/entity/scene.onyx index 8105363..b8f87ae 100644 --- a/src/entity/scene.onyx +++ b/src/entity/scene.onyx @@ -180,6 +180,7 @@ Scene :: struct { first_component :: scene_first_component; create_from_schematic :: scene_create_from_schematic; + duplicate :: scene_duplicate; load_from_file :: scene_load_from_file; save_to_file :: scene_save_to_file; @@ -268,6 +269,23 @@ scene_create_from_schematic :: (use this: ^Scene, schematic_name: str) -> ^Entit return entity; } +scene_duplicate :: (use this: ^Scene, entity: ^Entity) -> ^Entity { + new_entity := this->make(); + new_entity.flags = entity.flags; + new_entity.schematic = entity.schematic; + new_entity.pos = entity.pos; + new_entity.size = entity.size; + + for^ entity.components.entries { + comp := this->create_component(it.key); + memory.copy(comp, it.value, type_info.size_of(it.key)); + new_entity->add(comp); + } + + this->add(new_entity); + return new_entity; +} + scene_create_component :: (use this: ^Scene, component_type: type_expr) -> ^Component { comp := cast(^Component) new(component_type, allocator=entity_allocator); comp.type = component_type; diff --git a/src/gfx/ui.onyx b/src/gfx/ui.onyx index 8765ac4..d9e81b4 100644 --- a/src/gfx/ui.onyx +++ b/src/gfx/ui.onyx @@ -503,6 +503,98 @@ draw_checkbox :: (use r: Rect, value: ^bool, text: str, theme := ^default_checkb } +// +// Radio buttons +// +Radio_Theme :: struct { + use text_theme := Text_Theme.{}; + use animation_theme := Animation_Theme.{}; + + box_color := Color.{ 0.2, 0.2, 0.2 }; + box_border_width := 4.0f; @InPixels + box_size := 20.0f; @InPixels + + checked_color := Color.{ 0, 0, 1 }; + checked_hover_color := Color.{ 0.6, 0.6, 1 }; + + background_color := Color.{ 0.05, 0.05, 0.05 }; // Background of the checkbox button. + hover_color := Color.{ 0.3, 0.3, 0.3 }; + click_color := Color.{ 0.5, 0.5, 0.7 }; +} + +#local default_radio_theme := Radio_Theme.{}; + +draw_radio :: (use r: Rect, value: ^$T, set_to: T, text: str, theme := ^default_radio_theme, site := #callsite, increment := 0) -> bool { + result := false; + + hash := get_site_hash(site, increment); + animation_state := get_animation(hash); + mx, my := mouse_get_position(); + + contains := Rect.contains(r, .{~~mx, ~~my}); + + if is_active_item(hash) { + renew_active_item(hash); + if is_button_just_up(GLFW_MOUSE_BUTTON_LEFT) { + if is_hot_item(hash) && contains { + result = true; + *value = set_to; + animation_state.click_time = 1.0f; + } + + set_active_item(0); + } + } elseif is_hot_item(hash) { + if is_button_down(GLFW_MOUSE_BUTTON_LEFT) { + set_active_item(hash); + } + } + + if contains { + set_hot_item(hash); + } + + if is_hot_item(hash) { + move_towards(^animation_state.hover_time, 1.0f, theme.hover_speed); + } else { + move_towards(^animation_state.hover_time, 0.0f, theme.hover_speed); + } + + box_border_width := theme.box_border_width; + box_size := theme.box_size; + + immediate_set_color(theme.box_color); + immediate_rectangle(x + 4, y + (h - box_size) / 2, box_size, box_size); + + surface_color : Color; + if *value == set_to { + surface_color = theme.checked_color; + surface_color = color_lerp(animation_state.hover_time, surface_color, theme.checked_hover_color); + + } else { + surface_color = theme.background_color; + surface_color = color_lerp(animation_state.hover_time, surface_color, theme.hover_color); + } + + surface_color = color_lerp(animation_state.click_time, surface_color, theme.click_color); + + immediate_set_color(surface_color); + immediate_rectangle(x + 4 + box_border_width, y + (h - box_size) / 2 + box_border_width, box_size - box_border_width * 2, box_size - box_border_width * 2); + + font := font_lookup(.{theme.font_name, theme.font_size}); + text_width := font_get_width(font, text); + text_height := font_get_height(font, text); + + font_set_color(theme.text_color); + font_draw(font, x + box_size + 4 * 2, y + font.em + (h - text_height) / 2, text); + + move_towards(^animation_state.click_time, 0.0f, theme.click_decay_speed); + + return result; +} + + + scrolling_region_start :: (r: Rect, max_y_scroll := 10000.0f, site := #callsite, increment := 0) { hash := get_site_hash(site, increment); diff --git a/src/sfx/audio_manager.onyx b/src/sfx/audio_manager.onyx index 7e7bdd0..99708d2 100644 --- a/src/sfx/audio_manager.onyx +++ b/src/sfx/audio_manager.onyx @@ -53,7 +53,7 @@ Audio_Manager :: struct { alBufferData(buffer, al_format, wav_file.data.data, wav_file.data.count, wav_file.sample_rate); memory.free_slice(^wav_file.loaded_file_data); - map.put(^loaded_sounds, path, .{ buffer }); + loaded_sounds[path] = .{ buffer }; return .{ buffer }; } -- 2.25.1