From: Brendan Hansen Date: Sun, 6 Mar 2022 00:38:00 +0000 (-0600) Subject: item picker and code cleanup X-Git-Url: https://git.brendanfh.com/?a=commitdiff_plain;h=eaa94537ce23e2bdf4998496b005fd75b0557ec2;p=bar-game.git item picker and code cleanup --- 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 59a3155..1fe0a94 100644 Binary files a/run_tree/assets/images/spritesheet.png and b/run_tree/assets/images/spritesheet.png differ diff --git a/run_tree/scenes/level1.scene b/run_tree/scenes/level1.scene index d7050a5..e2282a6 100644 --- a/run_tree/scenes/level1.scene +++ b/run_tree/scenes/level1.scene @@ -1,8 +1,8 @@ [Background] id = 100 flags = 0 -pos.x = 404.0000 -pos.y = 310.5000 +pos.x = 406.5000 +pos.y = 311.5000 size.x = 941.0000 size.y = 751.0000 :BackgroundComponent @@ -23,9 +23,9 @@ size.x = 352.0000 size.y = 16.0000 :RenderComponent layer = 0 -color.r = 1.0000 -color.g = 1.0000 -color.b = 1.0000 +color.r = 0.2549 +color.g = 0.1721 +color.b = 0.0474 color.a = 1.0000 [Wall] @@ -273,7 +273,7 @@ size.x = 16.0000 size.y = 32.0000 :FurnitureComponent furniture_type = 0 -taken = false +taken = true :SpriteRenderComponent sprite.sheet = "./assets/images/spritesheet.png" sprite.pos.x = 32.0000 @@ -381,7 +381,7 @@ size.x = 16.0000 size.y = 32.0000 :FurnitureComponent furniture_type = 0 -taken = false +taken = true :SpriteRenderComponent sprite.sheet = "./assets/images/spritesheet.png" sprite.pos.x = 48.0000 @@ -524,8 +524,8 @@ color.a = 1.0000 [Player] id = 12 flags = 2 -pos.x = 334.4179 -pos.y = 246.6519 +pos.x = 374.4024 +pos.y = 300.0931 size.x = 16.0000 size.y = 32.0000 :MovementComponent @@ -535,7 +535,7 @@ controls.left = 65 controls.right = 68 controls.interact = 70 controls.pick_up = 71 -facing = 3 +facing = 4 velocity.x = 0.0000 velocity.y = 0.0000 :PlayerComponent @@ -549,9 +549,9 @@ color.a = 1.0000 [Item_Entity] id = 150 -flags = 6 -pos.x = 334.4179 -pos.y = 222.6519 +flags = 2 +pos.x = 374.4024 +pos.y = 276.0931 size.x = 16.0000 size.y = 16.0000 :RenderComponent @@ -566,7 +566,7 @@ item = "burger" [Item_Entity] id = 155 flags = 0 -pos.x = 276.7525 +pos.x = 277.7524 pos.y = 205.4651 size.x = 16.0000 size.y = 16.0000 @@ -579,3 +579,35 @@ color.a = 1.0000 :ItemComponent item = "beer" +[Entryway] +id = 156 +flags = 0 +pos.x = 399.0000 +pos.y = 584.0000 +size.x = 64.0000 +size.y = 32.0000 +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 80.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 = 100 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 +:EntrywayComponent +schematic = "Patron" +spawned_size.x = 16.0000 +spawned_size.y = 32.0000 +enabled = true +spawn_timeout_min = 5.0000 +spawn_timeout_max = 10.0000 +spawn_timeout = 5.5170 + diff --git a/run_tree/scenes/quick_save_new.scene b/run_tree/scenes/quick_save_new.scene index c2d9a19..e69de29 100644 --- a/run_tree/scenes/quick_save_new.scene +++ b/run_tree/scenes/quick_save_new.scene @@ -1,581 +0,0 @@ -[Background] -id = 100 -flags = 0 -pos.x = 404.0000 -pos.y = 310.5000 -size.x = 941.0000 -size.y = 751.0000 -:BackgroundComponent -texture_path = "./assets/images/background.png" -:RenderComponent -layer = 0 -color.r = 1.0000 -color.g = 1.0000 -color.b = 1.0000 -color.a = 1.0000 - -[Wall] -id = 10 -flags = 2 -pos.x = 192.0000 -pos.y = 104.0000 -size.x = 352.0000 -size.y = 16.0000 -:RenderComponent -layer = 0 -color.r = 1.0000 -color.g = 1.0000 -color.b = 1.0000 -color.a = 1.0000 - -[Wall] -id = 11 -flags = 3 -pos.x = 456.0000 -pos.y = 64.0000 -size.x = 16.0000 -size.y = 96.0000 -:RenderComponent -layer = 0 -color.r = 1.0000 -color.g = 1.0000 -color.b = 1.0000 -color.a = 1.0000 - -[Door] -id = 13 -flags = 3 -pos.x = 368.0000 -pos.y = 104.0000 -size.x = 160.0000 -size.y = 16.0000 -:DoorComponent -max_openness = 0.8000 -target_openness = 0.8000 -openness = 0.8000 -:RenderComponent -layer = 0 -color.r = 1.0000 -color.g = 1.0000 -color.b = 1.0000 -color.a = 1.0000 - -[Wall] -id = 25 -flags = 2 -pos.x = 408.0000 -pos.y = 8.0000 -size.x = 816.0000 -size.y = 16.0000 -:RenderComponent -layer = 0 -color.r = 1.0000 -color.g = 1.0000 -color.b = 1.0000 -color.a = 1.0000 - -[Wall] -id = 27 -flags = 2 -pos.x = 8.0000 -pos.y = 312.0000 -size.x = 16.0000 -size.y = 592.0000 -:RenderComponent -layer = 0 -color.r = 1.0000 -color.g = 1.0000 -color.b = 1.0000 -color.a = 1.0000 - -[Wall] -id = 28 -flags = 2 -pos.x = 792.0000 -pos.y = 312.0000 -size.x = 16.0000 -size.y = 592.0000 -:RenderComponent -layer = 0 -color.r = 1.0000 -color.g = 1.0000 -color.b = 1.0000 -color.a = 1.0000 - -[Furniture] -id = 30 -flags = 2 -pos.x = 136.0000 -pos.y = 336.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 = 31 -flags = 2 -pos.x = 184.0000 -pos.y = 336.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 = 32 -flags = 2 -pos.x = 160.0000 -pos.y = 336.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 = 40 -flags = 2 -pos.x = 136.0000 -pos.y = 256.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 = 41 -flags = 2 -pos.x = 184.0000 -pos.y = 256.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 = 42 -flags = 2 -pos.x = 160.0000 -pos.y = 256.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 = 55 -flags = 2 -pos.x = 536.0000 -pos.y = 256.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 = 54 -flags = 2 -pos.x = 584.0000 -pos.y = 256.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 = 53 -flags = 2 -pos.x = 560.0000 -pos.y = 256.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 = 52 -flags = 2 -pos.x = 536.0000 -pos.y = 336.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 = 51 -flags = 2 -pos.x = 584.0000 -pos.y = 336.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 = 50 -flags = 2 -pos.x = 560.0000 -pos.y = 336.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 - -[Wall] -id = 35 -flags = 2 -pos.x = 192.0000 -pos.y = 592.0000 -size.x = 352.0000 -size.y = 32.0000 -:RenderComponent -layer = 0 -color.r = 1.0000 -color.g = 1.0000 -color.b = 1.0000 -color.a = 1.0000 - -[Wall] -id = 36 -flags = 2 -pos.x = 608.0000 -pos.y = 592.0000 -size.x = 352.0000 -size.y = 32.0000 -:RenderComponent -layer = 0 -color.r = 1.0000 -color.g = 1.0000 -color.b = 1.0000 -color.a = 1.0000 - -[Wall] -id = 37 -flags = 2 -pos.x = 140.0000 -pos.y = -142.0000 -size.x = 16.0000 -size.y = 16.0000 -:RenderComponent -layer = 0 -color.r = 1.0000 -color.g = 1.0000 -color.b = 1.0000 -color.a = 1.0000 - -[Tap] -id = 14 -flags = 3 -pos.x = 240.0000 -pos.y = 32.0000 -size.x = 32.0000 -size.y = 32.0000 -:SpriteRenderComponent -sprite.sheet = "./assets/images/spritesheet.png" -sprite.pos.x = 0.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 -:DispenserComponent -item = "beer" -max_timeout = 2.0000 - -[Player] -id = 152 -flags = 2 -pos.x = 276.7525 -pos.y = 229.4651 -size.x = 16.0000 -size.y = 32.0000 -:MovementComponent -controls.up = 265 -controls.down = 264 -controls.left = 263 -controls.right = 262 -controls.interact = 44 -controls.pick_up = 46 -facing = 1 -velocity.x = 0.0000 -velocity.y = 0.0000 -:PlayerComponent -holding = 155 -:RenderComponent -layer = 0 -color.r = 1.0000 -color.g = 0.0000 -color.b = 1.0000 -color.a = 1.0000 - -[Player] -id = 12 -flags = 2 -pos.x = 334.4179 -pos.y = 246.6519 -size.x = 16.0000 -size.y = 32.0000 -:MovementComponent -controls.up = 87 -controls.down = 83 -controls.left = 65 -controls.right = 68 -controls.interact = 70 -controls.pick_up = 71 -facing = 3 -velocity.x = 0.0000 -velocity.y = 0.0000 -:PlayerComponent -holding = 150 -:RenderComponent -layer = 10 -color.r = 0.0000 -color.g = 1.0000 -color.b = 0.0000 -color.a = 1.0000 - -[Item_Entity] -id = 150 -flags = 6 -pos.x = 334.4179 -pos.y = 222.6519 -size.x = 16.0000 -size.y = 16.0000 -:RenderComponent -layer = 10 -color.r = 1.0000 -color.g = 1.0000 -color.b = 1.0000 -color.a = 1.0000 -:ItemComponent -item = "burger" - -[Item_Entity] -id = 155 -flags = 0 -pos.x = 276.7525 -pos.y = 205.4651 -size.x = 16.0000 -size.y = 16.0000 -:RenderComponent -layer = 10 -color.r = 1.0000 -color.g = 1.0000 -color.b = 1.0000 -color.a = 1.0000 -:ItemComponent -item = "beer" - diff --git a/src/entity/components/dispenser.onyx b/src/entity/components/dispenser.onyx index eb73ec1..2a96d48 100644 --- a/src/entity/components/dispenser.onyx +++ b/src/entity/components/dispenser.onyx @@ -9,6 +9,7 @@ use package core DispenserComponent :: struct { use base: Component; + #tag Editor_Custom_Field.{render_item_picker} item: str; max_timeout := 2.0f; diff --git a/src/entity/components/entryway.onyx b/src/entity/components/entryway.onyx new file mode 100644 index 0000000..2b1c651 --- /dev/null +++ b/src/entity/components/entryway.onyx @@ -0,0 +1,32 @@ + +use package core + +EntrywayComponent :: struct { + use component: Component; + + schematic: str; + spawned_size: Vector2; + + enabled := true; + spawn_timeout_min := 5.0f; + spawn_timeout_max := 10.0f; + spawn_timeout := 0.0f; + + update :: (use this: ^EntrywayComponent, entity: ^Entity, dt: f32) { + if !enabled do return; + + spawn_timeout -= dt; + if spawn_timeout < 0 { + this->spawn(entity); + 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 :: () {