From 16fbf216da07ba2c965bc4765265b4e6b83acec2 Mon Sep 17 00:00:00 2001 From: xolatile Date: Sat, 4 May 2024 07:12:00 -0400 Subject: [PATCH] Revised UI structure to use dynamic arrays, and revised menus. --- source/attribute.adb | 21 +++++++++++---------- source/core.adb | 5 +++++ source/core.ads | 3 +++ source/resource.adb | 21 +++++++++++---------- source/skill.adb | 25 +++++++++++-------------- source/ui.adb | 10 ++++++---- source/ui.ads | 33 ++++++++++++++++----------------- source/world.adb | 27 ++++----------------------- 8 files changed, 67 insertions(+), 78 deletions(-) diff --git a/source/attribute.adb b/source/attribute.adb index d3350d1..a1e528f 100644 --- a/source/attribute.adb +++ b/source/attribute.adb @@ -13,19 +13,20 @@ package body attribute is ------------------------------------------------------------------------------------------ procedure configure is + structure : ui.structure; begin core.echo (core.comment, "Configuring attribute components..."); -- - ui.add_structure ((title => "Attribute Menu ", - toggle => core.signal_a, - show => false, - center => false, - resize => true, - x => 880, - y => (core.window_height - 320) / 2, - gui_n => 0, - gui_list => (others => ui.empty), - others => 0)); + structure.title := "Attribute Menu "; + structure.toggle := core.signal_a; + structure.show := false; + structure.center := false; + structure.resize := true; + structure.x := 880; + structure.y := (core.window_height - 320) / 2; + structure.gui_n := count; + -- + ui.add_structure (structure); -- for index in enumeration loop sprite (index) := core.import_sprite ("./sprite/attribute/" & core.lowercase (enumeration'image (index)) & ".png", 1, 1); diff --git a/source/core.adb b/source/core.adb index b5da426..c0b5a2a 100644 --- a/source/core.adb +++ b/source/core.adb @@ -356,6 +356,11 @@ package body core is ------------------------------------------------------------------------------------------ + procedure increment (value : in out integer) is begin value := value + 1; end increment; + procedure decrement (value : in out integer) is begin value := value - 1; end decrement; + + ------------------------------------------------------------------------------------------ + procedure idle is begin null; end idle; procedure move_camera_up is begin core.camera.y := core.camera.y - 1; end move_camera_up; diff --git a/source/core.ads b/source/core.ads index 00ade63..5ad0a2c 100644 --- a/source/core.ads +++ b/source/core.ads @@ -127,6 +127,9 @@ package core is procedure move_camera_left; procedure move_camera_right; + procedure increment (value : in out integer); + procedure decrement (value : in out integer); + ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ end core; diff --git a/source/resource.adb b/source/resource.adb index 9874e09..74b1e4d 100644 --- a/source/resource.adb +++ b/source/resource.adb @@ -13,19 +13,20 @@ package body resource is ------------------------------------------------------------------------------------------ procedure configure is + structure : ui.structure; begin core.echo (core.comment, "Configuring resource components..."); -- - ui.add_structure ((title => "Resource Menu ", - toggle => core.signal_r, - show => false, - center => false, - resize => true, - x => 480, - y => (core.window_height - 320) / 2, - gui_n => 0, - gui_list => (others => ui.empty), - others => 0)); + structure.title := "Resource Menu "; + structure.toggle := core.signal_r; + structure.show := false; + structure.center := false; + structure.resize := true; + structure.x := 480; + structure.y := (core.window_height - 320) / 2; + structure.gui_n := count; + -- + ui.add_structure (structure); -- for index in enumeration loop sprite (index) := core.import_sprite ("./sprite/resource/" & core.lowercase (enumeration'image (index)) & ".png", 1, 1); diff --git a/source/skill.adb b/source/skill.adb index 36ceedc..f966933 100644 --- a/source/skill.adb +++ b/source/skill.adb @@ -13,23 +13,20 @@ package body skill is ------------------------------------------------------------------------------------------ procedure configure is - --~menu_data : ui.structure := ( - --~"Skill Menu ", core.signal_s, false, true, true, 0, 0, 320, 160, - --~0, (others => (ui.gui_none, "- ", 0, (others => 0))) - --~); + structure : ui.structure; begin core.echo (core.comment, "Configuring skill components..."); -- - ui.add_structure ((title => "Skill Menu ", - toggle => core.signal_s, - show => false, - center => false, - resize => true, - x => 80, - y => (core.window_height - 320) / 2, - gui_n => 0, - gui_list => (others => ui.empty), - others => 0)); + structure.title := "Skill Menu "; + structure.toggle := core.signal_s; + structure.show := false; + structure.center := false; + structure.resize := true; + structure.x := 80; + structure.y := (core.window_height - 320) / 2; + structure.gui_n := count; + -- + ui.add_structure (structure); -- for index in enumeration loop sprite (index) := core.import_sprite ("./sprite/skill/" & core.lowercase (enumeration'image (index)) & ".png", 1, 1); diff --git a/source/ui.adb b/source/ui.adb index 934fcfa..79c9932 100644 --- a/source/ui.adb +++ b/source/ui.adb @@ -453,11 +453,13 @@ package body ui is ------------------------------------------------------------------------------------------ - procedure add_structure (data : in structure) is -- TODO: This is dumb, tho less error-prone... + procedure add_structure (data : in structure := no_structure) is -- TODO: This is dumb, tho less error-prone... begin - structure_array (structure_count) := data; + structure_array (structure_count) := data; + structure_array (structure_count).gui_list := new gui_array (0 .. structure_array (structure_count).gui_n - 1); + structure_array (structure_count).gui_n := 0; -- - structure_count := structure_count + 1; + core.increment (structure_count); end add_structure; ------------------------------------------------------------------------------------------ @@ -469,7 +471,7 @@ package body ui is structure_array (structure_count - 1).gui_list (structure_array (structure_count - 1).gui_n).number := 0; structure_array (structure_count - 1).gui_list (structure_array (structure_count - 1).gui_n).image := icon; -- - structure_array (structure_count - 1).gui_n := structure_array (structure_count - 1).gui_n + 1; + core.increment (structure_array (structure_count - 1).gui_n); end add_structure_button; ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ diff --git a/source/ui.ads b/source/ui.ads index 7113357..c91bcf6 100644 --- a/source/ui.ads +++ b/source/ui.ads @@ -19,8 +19,6 @@ package ui is ------------------------------------------------------------------------------------------ - gui_size : constant := 24; - type gui_data is record kind : enumeration := gui_none; text : core.short_string := "- "; @@ -30,26 +28,27 @@ package ui is empty : gui_data; - type gui_array is array (0 .. gui_size) of gui_data; + type gui_array is array (natural range <>) of gui_data; type structure is record - title : core.short_string := "- "; - toggle : core.signal_code := core.signal_space; - show : boolean := false; - center : boolean := false; - resize : boolean := false; - x : integer := 0; - y : integer := 0; - width : integer := 0; - height : integer := 0; - gui_n : natural := 0; - gui_list : gui_array := (others => empty); + title : core.short_string := "- "; + toggle : core.signal_code := core.signal_space; + show : boolean := false; + center : boolean := false; + resize : boolean := false; + x : integer := 0; + y : integer := 0; + width : integer := 0; + height : integer := 0; + gui_n : natural := 0; + gui_list : access gui_array := null; end record; + no_structure : structure; + ------------------------------------------------------------------------------------------ - active : style := main; - prioritize : boolean := false; + active : style := main; ------------------------------------------------------------------------------------------ @@ -78,7 +77,7 @@ package ui is procedure draw_state_box (x, y : in integer); - procedure add_structure (data : in structure); + procedure add_structure (data : in structure := no_structure); procedure add_structure_button (icon : in core.sprite; text : in core.short_string); diff --git a/source/world.adb b/source/world.adb index 3c88de3..c92c86c 100644 --- a/source/world.adb +++ b/source/world.adb @@ -71,7 +71,6 @@ package body world is exit when offset.x + (horizontal - core.camera.x) * core.base * core.zoom > core.window_width; -- u := core.base * biome'pos (map.kind) * 4; - --~v := core.base * map.tiles ((horizontal - core.camera.x) mod map.width, (vertical - core.camera.y) mod map.height); v := core.base * map.tiles (horizontal, vertical); -- core.draw (data => tiles, @@ -81,12 +80,12 @@ package body world is v => v, width => core.base, height => core.base); - -- + --~--MOVE PLAYER TO TILE WHERE YOU CLICKED --~if core.cursor.x > offset.x + (horizontal - core.camera.x ) * core.base * core.zoom --~and core.cursor.x < offset.x + (horizontal - core.camera.x + 1) * core.base * core.zoom - --~and core.cursor.y > offset.y + (vertical - core.camera.y ) * core.base * core.zoom - --~and core.cursor.y < offset.y + (vertical - core.camera.y + 1) * core.base * core.zoom - --~and core.cursor_mode = 1 and not ui.prioritize then + --~and core.cursor.y > offset.y + (vertical - core.camera.y ) * core.base * core.zoom + --~and core.cursor.y < offset.y + (vertical - core.camera.y + 1) * core.base * core.zoom + --~and core.cursor_mode = 1 then --~core.camera.x := horizontal; --~core.camera.y := vertical; --~core.cursor_mode := 0; @@ -100,24 +99,6 @@ package body world is y => offset.y + (map.landmarks (index).y - core.camera.y) * core.base * core.zoom); end loop; end draw; - --~procedure draw is - --~u, v : integer; - --~begin - --~for move_y in 0 .. core.window_height / core.base / core.zoom + 1 loop - --~for move_x in 0 .. core.window_width / core.base / core.zoom + 1 loop - --~u := core.base * biome'pos (map.kind) * 4; - --~v := core.base * map.tiles (core.camera.x + move_x, core.camera.y + move_y); - --~-- - --~core.draw (tiles, move_x * core.base * core.zoom, move_y * core.base * core.zoom, u, v, core.base, core.base); - --~end loop; - --~end loop; - --~-- - --~for index in 1 .. landmark_limit loop - --~core.draw (data => landmarks (map.landmarks (index).index), - --~x => (map.landmarks (index).x - core.camera.x * core.base) * core.zoom, - --~y => (map.landmarks (index).y - core.camera.y * core.base) * core.zoom); - --~end loop; - --~end draw; ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------