From 73f93ba79d40b337b5f33023348b10ef20789a70 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Mon, 28 Feb 2022 21:49:14 -0600 Subject: [PATCH] started testing furniture --- run_tree/assets/images/spritesheet.png | Bin 3155 -> 9756 bytes run_tree/scenes/quick_save_new.scene | 98 ++++++++++++++++++++++--- src/entity/components/dispenser.onyx | 2 + src/entity/components/furniture.onyx | 21 ++++++ src/entity/components/patron.onyx | 25 +++++-- src/entity/components/player.onyx | 6 +- src/entity/manager.onyx | 22 ++++++ src/entity/schematics/furniture.onyx | 28 +++++++ src/entity/schematics/patron.onyx | 1 + 9 files changed, 184 insertions(+), 19 deletions(-) create mode 100644 src/entity/components/furniture.onyx create mode 100644 src/entity/schematics/furniture.onyx diff --git a/run_tree/assets/images/spritesheet.png b/run_tree/assets/images/spritesheet.png index 9ed43d4b3842502ca8cc177715dad9fdeac2662f..fc47fea25b02c9ca15249c7047f8d56f67f8a95a 100644 GIT binary patch literal 9756 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 diff --git a/run_tree/scenes/quick_save_new.scene b/run_tree/scenes/quick_save_new.scene index 829da2f..516a9a1 100644 --- a/run_tree/scenes/quick_save_new.scene +++ b/run_tree/scenes/quick_save_new.scene @@ -29,10 +29,10 @@ color.a = 1.0000 [Player] id = 12 flags = 2 -pos.x = 379.7973 -pos.y = 175.1558 -size.x = 32.0000 -size.y = 32.0000 +pos.x = 318.3422 +pos.y = 217.0257 +size.x = 16.0000 +size.y = 16.0000 :MovementComponent controls.up = 87 controls.down = 83 @@ -122,20 +122,18 @@ max_timeout = 2.0000 [Patron] id = 22 flags = 3 -pos.x = 388.6049 -pos.y = 284.5303 -size.x = 32.0000 -size.y = 32.0000 +pos.x = 392.0000 +pos.y = 408.0000 +size.x = 16.0000 +size.y = 16.0000 :RenderComponent -layer = 0 +layer = 5 color.r = 1.0000 color.g = 0.0000 color.b = 0.0000 color.a = 1.0000 :PatronComponent state = 0 -seat_location.x = 400.0000 -seat_location.y = 400.0000 order_item = "beer" order_show_animation = 0.0000 holding = 0 @@ -197,6 +195,84 @@ color.g = 1.0000 color.b = 1.0000 color.a = 1.0000 +[Furniture] +id = 30 +flags = 2 +pos.x = 136.0000 +pos.y = 256.0000 +size.x = 16.0000 +size.y = 32.0000 +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 +:FurnitureComponent +furniture_type = 0 +taken = false +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 + +[Furniture] +id = 31 +flags = 2 +pos.x = 184.0000 +pos.y = 256.0000 +size.x = 16.0000 +size.y = 32.0000 +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 +:FurnitureComponent +furniture_type = 0 +taken = false +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 + +[Furniture] +id = 32 +flags = 2 +pos.x = 160.0000 +pos.y = 256.0000 +size.x = 32.0000 +size.y = 32.0000 +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 +:FurnitureComponent +furniture_type = 1 +taken = false +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 + [Tap] id = 14 flags = 3 diff --git a/src/entity/components/dispenser.onyx b/src/entity/components/dispenser.onyx index 22c0e3c..2d3698b 100644 --- a/src/entity/components/dispenser.onyx +++ b/src/entity/components/dispenser.onyx @@ -16,6 +16,8 @@ DispenserComponent :: struct { timeout := 0.0f; added :: (use this: ^DispenserComponent, entity: ^Entity) { + entity.flags |= .Interactable; + if entity->has(InteractableComponent) { debug_log(.Error, "DispenserComponent expected entity to not have an InteractableComponent"); } diff --git a/src/entity/components/furniture.onyx b/src/entity/components/furniture.onyx new file mode 100644 index 0000000..1fb10a5 --- /dev/null +++ b/src/entity/components/furniture.onyx @@ -0,0 +1,21 @@ + +use package core + +#local Furniture_Type :: enum { + Seat; + Table; +} + +FurnitureComponent :: struct { + use base: Component; + + furniture_type: Furniture_Type; + taken := false; + sprite: Sprite; + + init :: (use this: ^FurnitureComponent) { + sprite.pos = .{0, 32}; + sprite.size = .{32, 32}; + sprite.color = .{1, 1, 1}; + } +} \ No newline at end of file diff --git a/src/entity/components/patron.onyx b/src/entity/components/patron.onyx index 184f2a4..b33004d 100644 --- a/src/entity/components/patron.onyx +++ b/src/entity/components/patron.onyx @@ -12,8 +12,8 @@ use package core PatronComponent :: struct { use component: Component; - state := Patron_State.Waiting_To_Place_Order; - seat_location: Vector2; + state: Patron_State; + seat: Entity_ID; order_item: str; order_show_animation: f32; holding: Entity_ID; @@ -21,7 +21,6 @@ PatronComponent :: struct { init :: (use this: ^PatronComponent) { order_item = "beer"; - seat_location = .{ 400, 400 }; } added :: (use this: ^PatronComponent, entity: ^Entity) { @@ -34,12 +33,28 @@ PatronComponent :: struct { update :: (use this: ^PatronComponent, entity: ^Entity, dt: f32) { if state == .Walking_To_Seat { - delta := Vector2.norm(seat_location - entity.pos) * 100; - entity.pos += delta * dt; + if seat == Entity_Nothing { + seats := scene->query_by_component(.{ 0, 0, 10000, 10000 }, FurnitureComponent); + defer memory.free_slice(^seats); + + for seats { + furniture := it->get(FurnitureComponent); + if !furniture.taken && furniture.furniture_type == .Seat { + furniture.taken = true; + seat = it.id; + break; + } + } + } + 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; } } diff --git a/src/entity/components/player.onyx b/src/entity/components/player.onyx index 3b62e94..d3292a1 100644 --- a/src/entity/components/player.onyx +++ b/src/entity/components/player.onyx @@ -14,11 +14,11 @@ PlayerComponent :: struct { // Highlight the object that you are going to interact with { player.nearby_interact = Entity_Nothing; - area := Rect.{pos.x - size.x, pos.y - size.y, size.x * 2, size.y * 2}; + area := Rect.{pos.x - size.x, pos.y - size.y, size.x * 4, size.y * 4}; objects := scene->query_by_component(area, InteractableComponent); defer memory.free_slice(^objects); - dist := size.x * size.x + size.y * size.y; + dist := 4 * (size.x * size.x + size.y * size.y); for objects { d := Vector2.square_mag(pos - it.pos); @@ -31,7 +31,7 @@ PlayerComponent :: struct { { player.nearby_holding = Entity_Nothing; - area := Rect.{pos.x - size.x, pos.y - size.y, size.x * 2, size.y * 2}; + area := Rect.{pos.x - size.x, pos.y - size.y, size.x * 4, size.y * 4}; objects := scene->query_by_flags(area, .Carryable); defer memory.free_slice(^objects); diff --git a/src/entity/manager.onyx b/src/entity/manager.onyx index 8ecd845..c205a23 100644 --- a/src/entity/manager.onyx +++ b/src/entity/manager.onyx @@ -380,3 +380,25 @@ entity_manager_query_by_flags :: (use this: ^Entity_Manager, area: Rect, flags: return ents; } + + + + +@Relocate +Sprite :: struct { + sheet: str; + pos: Vector2; + size: Vector2; + color: Color; + + render :: (use this: ^Sprite, r: Rect) { + texture, valid := texture_lookup(sheet); + + immediate_set_color(color); + if !valid { + immediate_rectangle(r.x, r.y, r.w, r.h); + } else { + immediate_subimage(^texture, r.x, r.y, r.w, r.h, pos.x, pos.y, size.x, size.y); + } + } +} diff --git a/src/entity/schematics/furniture.onyx b/src/entity/schematics/furniture.onyx new file mode 100644 index 0000000..058692f --- /dev/null +++ b/src/entity/schematics/furniture.onyx @@ -0,0 +1,28 @@ + +use package core + +Furniture :: struct { + #struct_tag Entity_Schematic.{ + (scene) => Furniture.create(scene, .{0, 0}) + } + + create :: (scene: ^Entity_Manager, pos: Vector2) -> ^Entity { + this := scene->make(); + this.pos = pos; + this.size = .{16, 16}; + this.flags |= .Solid; + + scene->create_and_add(this, RenderComponent) { + comp.func = render; + } + + scene->create_and_add(this, FurnitureComponent) {} + + return this; + } + + render :: (entity: ^Entity) { + furniture := entity->get(FurnitureComponent); + furniture.sprite->render(entity->get_rect()); + } +} \ No newline at end of file diff --git a/src/entity/schematics/patron.onyx b/src/entity/schematics/patron.onyx index f2aa238..fd0dffd 100644 --- a/src/entity/schematics/patron.onyx +++ b/src/entity/schematics/patron.onyx @@ -14,6 +14,7 @@ Patron :: struct { scene->create_and_add(this, RenderComponent) { comp.func = render; + comp.layer = 5; comp.color = .{1, 0, 0}; } -- 2.25.1