From 695a22a2b1276c30a42269b73d8b0ff0d49a331c Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Sun, 6 Mar 2022 17:06:25 -0600 Subject: [PATCH] added money tracker; things need money now --- run_tree/assets/images/spritesheet.png | Bin 6365 -> 6474 bytes run_tree/scenes/default.items | 4 ++ run_tree/scenes/level1.scene | 35 +++++++++-- src/entity/components/dispenser.onyx | 4 ++ src/entity/components/money.onyx | 79 +++++++++++++++++++++++++ src/entity/components/patron.onyx | 8 ++- src/entity/items.onyx | 6 ++ src/entity/scene.onyx | 15 ++++- src/game.onyx | 7 ++- 9 files changed, 149 insertions(+), 9 deletions(-) create mode 100644 src/entity/components/money.onyx diff --git a/run_tree/assets/images/spritesheet.png b/run_tree/assets/images/spritesheet.png index 1fe0a94a1ce42f65fd226e83eb9912a359a731a4..5e02096d001d11fbe621dec2cf4c3ea1dbf43471 100644 GIT binary patch delta 5583 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 delta 5463 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 N002ovPDHLkV1mG5%*g-% diff --git a/run_tree/scenes/default.items b/run_tree/scenes/default.items index 12c9b3c..21ab5ad 100644 --- a/run_tree/scenes/default.items +++ b/run_tree/scenes/default.items @@ -1,5 +1,7 @@ :beer name="Beer" +production_cost=3 +sell_value=7 sprite.sheet="./assets/images/spritesheet.png" sprite.pos = 0 0 sprite.size = 16 16 @@ -10,6 +12,8 @@ sprite.color.a = 1 :burger name="Burger" +production_cost=5 +sell_value=10 sprite.sheet="./assets/images/spritesheet.png" sprite.pos = 16 0 sprite.size = 16 16 diff --git a/run_tree/scenes/level1.scene b/run_tree/scenes/level1.scene index 10e5322..8405292 100644 --- a/run_tree/scenes/level1.scene +++ b/run_tree/scenes/level1.scene @@ -273,7 +273,7 @@ size.x = 16.0000 size.y = 32.0000 :FurnitureComponent furniture_type = 0 -taken = true +taken = false :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 = true +taken = false :SpriteRenderComponent sprite.sheet = "./assets/images/spritesheet.png" sprite.pos.x = 48.0000 @@ -539,6 +539,7 @@ controls.pick_up = 46 facing = 1 velocity.x = 0.0000 velocity.y = 0.0000 +speed = 800.0000 :PlayerComponent holding = 155 :RenderComponent @@ -565,6 +566,7 @@ controls.pick_up = 71 facing = 4 velocity.x = 0.0000 velocity.y = 0.0000 +speed = 800.0000 :PlayerComponent holding = 150 :RenderComponent @@ -609,8 +611,8 @@ item = "beer" [Entryway] id = 156 flags = 0 -pos.x = 399.0000 -pos.y = 584.0000 +pos.x = 400.0000 +pos.y = 592.0000 size.x = 64.0000 size.y = 32.0000 :SpriteRenderComponent @@ -638,3 +640,28 @@ spawn_timeout_min = 5.0000 spawn_timeout_max = 10.0000 spawn_timeout = 5.5170 +[Custom] +id = 163 +flags = 0 +pos.x = 0.0000 +pos.y = 0.0000 +size.x = 16.0000 +size.y = 16.0000 +:MoneyComponent +money = 100 +money_sprite.sheet = "./assets/images/spritesheet.png" +money_sprite.pos.x = 0.0000 +money_sprite.pos.y = 240.0000 +money_sprite.size.x = 16.0000 +money_sprite.size.y = 16.0000 +money_sprite.color.r = 1.0000 +money_sprite.color.g = 1.0000 +money_sprite.color.b = 1.0000 +money_sprite.color.a = 1.0000 +:RenderComponent +layer = 100000 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + diff --git a/src/entity/components/dispenser.onyx b/src/entity/components/dispenser.onyx index 2a96d48..add16f5 100644 --- a/src/entity/components/dispenser.onyx +++ b/src/entity/components/dispenser.onyx @@ -41,6 +41,10 @@ DispenserComponent :: struct { dispenser_comp := this->get(DispenserComponent); if dispenser_comp.timeout != 0 do return; + item_info := item_store->get_item(dispenser_comp.item); + money_comp := scene->first_component(MoneyComponent); + if !money_comp->withdraw(item_info.production_cost) do return; + item := scene->create_from_schematic("Item_Entity"); if item == null { debug_log(.Error, "Bad schematic type."); diff --git a/src/entity/components/money.onyx b/src/entity/components/money.onyx new file mode 100644 index 0000000..d4e0c81 --- /dev/null +++ b/src/entity/components/money.onyx @@ -0,0 +1,79 @@ + +use package core + +#local Transaction :: struct { + amount: i32; + time: f32; +} + +MoneyComponent :: struct { + use component: Component; + + money: i32 = 100; + money_sprite: Sprite; + + #tag Editor_Hidden, Entity_Store.Skip + transactions: [..] Transaction; + + added :: (use this: ^MoneyComponent, entity: ^Entity) { + scene->modify_component(entity, RenderComponent) { + comp.layer = 100000; + comp.func = MoneyComponent.render; + comp.color = .{1, 1, 1}; + } + + money_sprite = .{ + sheet = "./assets/images/spritesheet.png", + pos = .{ 0, 240 }, + size = .{ 16, 16 }, + color = .{ 1, 1, 1 } + }; + } + + withdraw :: (use this: ^MoneyComponent, amount: i32) -> bool { + if money >= amount { + money -= amount; + transactions << .{ -amount, game_time }; + return true; + } + + return false; + } + + deposit :: (use this: ^MoneyComponent, amount: i32) { + money += amount; + transactions << .{ amount, game_time }; + } + + render :: (entity: ^Entity) { + money_comp := entity->get(MoneyComponent); + + immediate_set_color(.{0, 0, 0, 0.5}); + immediate_rectangle(0, 0, 100, 48); + money_comp.money_sprite->render(.{ 16, 16, 16, 16 }); + + font := font_lookup(.{"./assets/fonts/calibri.ttf", 24}); + + font_set_color(.{0, 1, 0}); + font_print(font, 32, 32, "{}", money_comp.money); + + for^ money_comp.transactions { + delta := (game_time - it.time) * 2; + color := (Color.{0, 1, 0}) if it.amount > 0 else Color.{1, 0, 0}; + color.a = 1 - delta; + + font_set_color(color); + + format_str := "+{}"; + if it.amount < 0 do format_str = "-{}"; + + font_print(font, 32, 32 + delta * 50 * ~~ -math.sign(it.amount), format_str, math.abs(it.amount)); + } + + while true { + if money_comp.transactions.count == 0 do break; + if money_comp.transactions[0].time + 1 > game_time do break; + array.delete(^money_comp.transactions, 0); + } + } +} diff --git a/src/entity/components/patron.onyx b/src/entity/components/patron.onyx index 7bffc8e..2bc4255 100644 --- a/src/entity/components/patron.onyx +++ b/src/entity/components/patron.onyx @@ -76,15 +76,21 @@ PatronComponent :: struct { if consume_timeout > 0 && state == .Consuming_Order { consume_timeout -= dt; if consume_timeout < 0 { - state = .Leaving; holding_object := scene->get(holding); holding_object.flags |= .Dead; holding = Entity_Nothing; + 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); + target_entity := scene->get(target); furniture_comp := target_entity->get(FurnitureComponent); furniture_comp.taken = false; + state = .Leaving; this->find_exit(); } } diff --git a/src/entity/items.onyx b/src/entity/items.onyx index b72adc2..de76aaf 100644 --- a/src/entity/items.onyx +++ b/src/entity/items.onyx @@ -6,6 +6,8 @@ Item :: struct { name: str; sprite : Sprite; + production_cost: i32; + sell_value: i32; } Item_Store :: struct { @@ -118,6 +120,10 @@ ItemComponent :: struct { #tag Editor_Custom_Field.{render_item_picker} item: str; + + get_info :: (use this: ^ItemComponent) -> ^Item { + return item_store->get_item(item); + } } diff --git a/src/entity/scene.onyx b/src/entity/scene.onyx index c3aa002..8105363 100644 --- a/src/entity/scene.onyx +++ b/src/entity/scene.onyx @@ -161,6 +161,8 @@ Scene :: struct { next_entity_id: Entity_ID; + width, height: f32; + add :: scene_add; make :: scene_make; update :: scene_update; @@ -175,6 +177,7 @@ Scene :: struct { query_by_component :: scene_query_by_component; create_component :: scene_create_component; modify_component :: scene_modify_component; + first_component :: scene_first_component; create_from_schematic :: scene_create_from_schematic; @@ -182,9 +185,11 @@ Scene :: struct { save_to_file :: scene_save_to_file; } -scene_create :: () -> Scene { +scene_create :: (width, height: f32) -> Scene { em: Scene; em.entity_allocator = context.allocator; @TODO // Replace the allocator here. + em.width = width; + em.height = height; array.init(^em.entities, 4); @@ -273,7 +278,7 @@ scene_create_component :: (use this: ^Scene, component_type: type_expr) -> ^Comp component_vtables[comp.type] = vtable; } - comp.vtable = component_vtables->get(comp.type); + comp.vtable = component_vtables[comp.type]; if comp.init != null_proc { comp->init(); } @@ -425,7 +430,13 @@ scene_query_by_flags :: (use this: ^Scene, area: Rect, flags: Entity_Flags) -> [ return ents; } +scene_first_component :: (use this: ^Scene, $component_type: type_expr) -> ^component_type { + for entities { + if it->has(component_type) do return it->get(component_type); + } + return null; +} diff --git a/src/game.onyx b/src/game.onyx index fa98394..24a9a36 100644 --- a/src/game.onyx +++ b/src/game.onyx @@ -15,10 +15,12 @@ scene_canvas: Canvas; Spritesheet: Texture; +game_time: f32; + game_init :: () { Audio_Manager.init(); - scene_canvas = canvas_make(800, 600); + scene_canvas = canvas_make(800, 608); // This process of queueing the asset bucket should // be made automatic somehow... @@ -26,7 +28,7 @@ game_init :: () { load_assets(); - scene = scene_create(); + scene = scene_create(~~ scene_canvas.width, ~~ scene_canvas.height); // scene->load_from_file(quick_save_file); item_store = item_store_make(); @@ -40,6 +42,7 @@ game_deinit :: () { #local quick_save_file := "scenes/quick_save_new.scene"; game_update :: (dt: f32) { + game_time += dt; Audio_Manager.tick(); if is_key_just_up(GLFW_KEY_F8) { -- 2.25.1