From eaa94537ce23e2bdf4998496b005fd75b0557ec2 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Sat, 5 Mar 2022 18:38:00 -0600 Subject: [PATCH] item picker and code cleanup --- docs/project.vim | 3 + run_tree/assets/images/spritesheet.png | Bin 4553 -> 6365 bytes run_tree/scenes/level1.scene | 60 ++- run_tree/scenes/quick_save_new.scene | 581 ------------------------- src/entity/components/dispenser.onyx | 1 + src/entity/components/entryway.onyx | 32 ++ src/entity/components/patron.onyx | 46 +- src/entity/editor.onyx | 7 +- src/entity/items.onyx | 31 +- src/entity/schematics/entryway.onyx | 25 ++ src/game.onyx | 11 - 11 files changed, 168 insertions(+), 629 deletions(-) create mode 100644 docs/project.vim create mode 100644 src/entity/components/entryway.onyx create mode 100644 src/entity/schematics/entryway.onyx diff --git a/docs/project.vim b/docs/project.vim new file mode 100644 index 0000000..275965a --- /dev/null +++ b/docs/project.vim @@ -0,0 +1,3 @@ + +set makeprg=cd\ ./run_tree\ &&\ ./run.sh +set errorformat=%E\(%f\:%l\\,%c\)\ \%m,%C%.%# diff --git a/run_tree/assets/images/spritesheet.png b/run_tree/assets/images/spritesheet.png index 59a315520caabd435f17fc26a11c88c50cf48897..1fe0a94a1ce42f65fd226e83eb9912a359a731a4 100644 GIT binary patch literal 6365 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 + spawn_timeout = random.float(spawn_timeout_min, spawn_timeout_max); + } + } + + spawn :: (use this: ^EntrywayComponent, entity: ^Entity) { + new_ent := scene->create_from_schematic(schematic); + new_ent.pos = entity.pos; + new_ent.size = spawned_size; + + scene->add(new_ent); + } +} diff --git a/src/entity/components/patron.onyx b/src/entity/components/patron.onyx index 87f0312..ecae8fe 100644 --- a/src/entity/components/patron.onyx +++ b/src/entity/components/patron.onyx @@ -13,7 +13,7 @@ PatronComponent :: struct { use component: Component; state: Patron_State; - seat: Entity_ID; + target: Entity_ID; order_item: str; order_show_animation: f32; holding: Entity_ID; @@ -38,40 +38,38 @@ PatronComponent :: struct { attempts := seats.count; - while seat == Entity_Nothing && attempts > 0 { + while target == Entity_Nothing && attempts > 0 { it := random.choice(seats); furniture := it->get(FurnitureComponent); if furniture.furniture_type != .Seat do continue; if furniture->try_take() { - seat = it.id; + target = it.id; break; } attempts -= 1; } - return seat != Entity_Nothing; + return target != Entity_Nothing; + } + + find_exit :: (use this: ^PatronComponent) { + exits := scene->query_by_component(.{0, 0, 10000, 10000 }, EntrywayComponent); + defer memory.free_slice(^exits); + if exits.count == 0 do return; + + target = random.choice(exits).id; } update :: (use this: ^PatronComponent, entity: ^Entity, dt: f32) { if state == .Walking_To_Seat { - if seat == Entity_Nothing { + if target == Entity_Nothing { found_seat := this->find_available_seat(); if !found_seat { state = .Leaving; return; } } - - seat_entity := scene->get(seat); - seat_location := seat_entity.pos; - if Vector2.square_mag(seat_location - entity.pos) < 16 { - entity.pos = seat_location; - state = .Waiting_To_Place_Order; - } else { - delta := Vector2.norm(seat_location - entity.pos) * 100; - entity.pos += delta * dt; - } } if consume_timeout > 0 && state == .Consuming_Order { @@ -81,6 +79,8 @@ PatronComponent :: struct { holding_object := scene->get(holding); holding_object.flags |= .Dead; holding = Entity_Nothing; + + this->find_exit(); } } @@ -90,6 +90,20 @@ PatronComponent :: struct { } } + if target != Entity_Nothing { + target_entity := scene->get(target); + target_location := target_entity.pos; + if Vector2.square_mag(target_location - entity.pos) < 16 { + entity.pos = target_location; + + if state == .Walking_To_Seat do state = .Waiting_To_Place_Order; + if state == .Leaving do entity.flags |= .Dead; + } else { + delta := Vector2.norm(target_location - entity.pos) * 100; + entity.pos += delta * dt; + } + } + if holding != Entity_Nothing { holding_object := scene->get(holding); r := Entity.get_rect(holding_object); @@ -159,4 +173,4 @@ PatronComponent :: struct { item_data.sprite->render(r); } } -} \ No newline at end of file +} diff --git a/src/entity/editor.onyx b/src/entity/editor.onyx index e8e49b4..25fbc08 100644 --- a/src/entity/editor.onyx +++ b/src/entity/editor.onyx @@ -237,10 +237,11 @@ editor_draw :: () { entry: os.DirectoryEntry; y += 80; while os.dir_read(dir, ^entry) { - if string.ends_with(entry->name(), ".scene") { - if draw_button(.{ x, y, w, 40 }, entry->name(), increment=entry.identifier) { + name := entry->name(); + if string.ends_with(name, ".scene") { + if draw_button(.{ x, y, w, 40 }, name, increment=hash.to_u32(name)) { buf: [1024] u8; - path := conv.format(buf, "./scenes/{}", entry->name()); + path := conv.format(buf, "./scenes/{}", name); scene->load_from_file(path); } y += 40; diff --git a/src/entity/items.onyx b/src/entity/items.onyx index d75fa46..b72adc2 100644 --- a/src/entity/items.onyx +++ b/src/entity/items.onyx @@ -121,8 +121,31 @@ ItemComponent :: struct { } -#local { - render_item_picker :: (v: any, x, y, w, h: f32, field_name: str) { - +render_item_picker :: (v: any, x, y, w, h: f32, field_name: str) { + immediate_set_color(.{.3, .3, .3}); + immediate_rectangle(x, y, w, h); + + item_name := cast(^str) v.data; + + ix, iy := x, y; + + for^ entry: item_store.items.entries { + item := entry.value; + + if draw_button(.{ix, iy, 40, 40}, "", increment=~~entry) { + *item_name = entry.key; + } + + item.sprite->render(.{ix + 4, iy + 4, 32, 32 }); + if *item_name == entry.key { + immediate_set_color(.{1, 1, 0, .3}); + immediate_rectangle(ix + 4, iy + 4, 32, 32); + } + + ix += 40; + if ix-x >= w { + ix = x; + iy += 40; + } } -} \ No newline at end of file +} diff --git a/src/entity/schematics/entryway.onyx b/src/entity/schematics/entryway.onyx new file mode 100644 index 0000000..825762c --- /dev/null +++ b/src/entity/schematics/entryway.onyx @@ -0,0 +1,25 @@ + +use package core + +Entryway :: struct { + #struct_tag Entity_Schematic.{ + (scene) => { + this := scene->make(); + this.size = .{16, 16}; + + scene->modify_component(this, SpriteRenderComponent) { + comp.sprite.sheet = "./assets/images/spritesheet.png"; + comp.sprite.pos = .{0, 0}; + comp.sprite.size = .{16, 16}; + comp.sprite.color = .{1, 1, 1}; + } + + scene->modify_component(this, EntrywayComponent) { + comp.schematic = "Patron"; + comp.spawned_size = .{16, 32}; + } + + return this; + } + } +} diff --git a/src/game.onyx b/src/game.onyx index a56acb9..fa98394 100644 --- a/src/game.onyx +++ b/src/game.onyx @@ -15,8 +15,6 @@ scene_canvas: Canvas; Spritesheet: Texture; -patron_spawn_timeout := 5.0f; - game_init :: () { Audio_Manager.init(); @@ -60,15 +58,6 @@ game_update :: (dt: f32) { } scene->update(dt); - patron_spawn_timeout -= dt; - if patron_spawn_timeout < 0 { - patron_spawn_timeout = random.float(5, 10); - - patron := scene->create_from_schematic("Patron"); - patron.pos = .{ 420, 600 }; - patron.size = .{ 16, 32 }; - scene->add(patron); - } } game_draw :: () { -- 2.25.1