diff --git a/source/attribute.adb b/source/attribute.adb index a1e528f..cc707a8 100644 --- a/source/attribute.adb +++ b/source/attribute.adb @@ -31,7 +31,7 @@ package body attribute is for index in enumeration loop sprite (index) := core.import_sprite ("./sprite/attribute/" & core.lowercase (enumeration'image (index)) & ".png", 1, 1); -- - ui.add_structure_button (sprite (index), trait (index).name); + ui.add_structure_button (sprite (index), trait (index).name, trait (index).text); end loop; end configure; diff --git a/source/core.adb b/source/core.adb index fadbc2f..04c3497 100644 --- a/source/core.adb +++ b/source/core.adb @@ -337,6 +337,18 @@ package body core is when others => signal_mode := signal_code'pos (signal_none); end case; -- + for index in reverse 0 .. block_count - 1 loop + if core.cursor.x > block_array (index).x and core.cursor.x < block_array (index).width + and core.cursor.y > block_array (index).y and core.cursor.y < block_array (index).height + and core.cursor_mode = block_array (index).mode then + block_array (index).action.all; + core.cursor_mode := 0; + exit; + end if; + end loop; + -- + block_count := 0; + -- ray.begin_drawing; -- ray.clear_background ((50, 60, 70, 255)); @@ -356,6 +368,19 @@ package body core is ------------------------------------------------------------------------------------------ + procedure block_queue (data : in block) is + begin + if block_count = block_limit - 1 then + return; + end if; + -- + block_array (block_count) := data; + -- + increment (block_count); + end block_queue; + + ------------------------------------------------------------------------------------------ + 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; diff --git a/source/core.ads b/source/core.ads index 5ad0a2c..4957d58 100644 --- a/source/core.ads +++ b/source/core.ads @@ -37,6 +37,15 @@ package core is type font is record index, scale, space : integer; end record; type song is record index : integer; end record; + type block is record + x : integer := 0; + y : integer := 0; + width : integer := 0; + height : integer := 0; + mode : integer := 0; + action : access procedure := null; + end record; + type text_box_data is record data : unbounded_string := null_unbounded_string; size : vector := (0, 0); @@ -70,6 +79,11 @@ package core is animation_time : natural := 0; zoom : natural := 1; + block_limit : constant natural := 40; + block_count : natural := 0; + + block_array : array (0 .. block_limit - 1) of block := (others => (0, 0, 0, 0, 0, null)); + text_box : text_box_data; ------------------------------------------------------------------------------------------ @@ -116,6 +130,8 @@ package core is procedure overlay; + procedure block_queue (data : in block); + function read_text_box return string; procedure write_text_box (text : in string); diff --git a/source/resource.adb b/source/resource.adb index 74b1e4d..e5f0da2 100644 --- a/source/resource.adb +++ b/source/resource.adb @@ -31,7 +31,7 @@ package body resource is for index in enumeration loop sprite (index) := core.import_sprite ("./sprite/resource/" & core.lowercase (enumeration'image (index)) & ".png", 1, 1); -- - ui.add_structure_button (sprite (index), trait (index).name); + ui.add_structure_button (sprite (index), trait (index).name, trait (index).text); end loop; end configure; diff --git a/source/skill.adb b/source/skill.adb index f966933..047bb93 100644 --- a/source/skill.adb +++ b/source/skill.adb @@ -31,7 +31,7 @@ package body skill is for index in enumeration loop sprite (index) := core.import_sprite ("./sprite/skill/" & core.lowercase (enumeration'image (index)) & ".png", 1, 1); -- - ui.add_structure_button (sprite (index), trait (index).name); + ui.add_structure_button (sprite (index), trait (index).name, trait (index).text); end loop; end configure; diff --git a/source/ui.adb b/source/ui.adb index 79c9932..d6f0c2e 100644 --- a/source/ui.adb +++ b/source/ui.adb @@ -165,8 +165,8 @@ package body ui is for x in 0 .. data.gui_n - 1 loop case data.gui_list (x).kind is when gui_button => - draw_icon (data.gui_list (x).image, "", at_x, at_y); - draw_frame ("", at_x + core.icon + 2, at_y, new_width - 2 * offset - core.icon - 2, core.icon); + draw_icon (data.gui_list (x).image, data.gui_list (x).info, at_x, at_y); + draw_frame (data.gui_list (x).info, at_x + core.icon + 2, at_y, new_width - 2 * offset - core.icon - 2, core.icon); write (data.gui_list (x).text, at_x + core.icon + 6, at_y + 2); at_y := at_y + core.icon; when others => null; @@ -276,6 +276,7 @@ package body ui is ------------------------------------------------------------------------------------------ + procedure a is begin core.echo (core.warning, "Heyo world!"); end a; procedure draw_help_box (x, y, width, height : in integer; action : core.pointer := core.idle'access) is offset : constant integer := sprite (active, text_middle).width; begin @@ -293,6 +294,8 @@ package body ui is -- core.write (core.read_text_box, x, y, font (active)); -- + core.block_queue ((x, y, width, height, 2, a'access)); + -- select_text_box ("", x, y, width, height); end draw_help_box; @@ -438,7 +441,7 @@ package body ui is ------------------------------------------------------------------------------------------ - procedure draw_state_box (x, y : in integer) is -- TODO: Delete this at some point. + procedure draw_state_box (x, y : in integer) is begin ui.write ("Cursor X:" & core.cursor.x'image, x, y + 0); ui.write ("Cursor Y:" & core.cursor.y'image, x, y + 32); @@ -453,7 +456,7 @@ package body ui is ------------------------------------------------------------------------------------------ - procedure add_structure (data : in structure := no_structure) is -- TODO: This is dumb, tho less error-prone... + procedure add_structure (data : in structure) is begin structure_array (structure_count) := data; structure_array (structure_count).gui_list := new gui_array (0 .. structure_array (structure_count).gui_n - 1); @@ -464,10 +467,11 @@ package body ui is ------------------------------------------------------------------------------------------ - procedure add_structure_button (icon : in core.sprite; text : in core.short_string) is + procedure add_structure_button (icon : in core.sprite; text : in core.short_string; description : in core.long_string := "") is begin structure_array (structure_count - 1).gui_list (structure_array (structure_count - 1).gui_n).kind := gui_button; structure_array (structure_count - 1).gui_list (structure_array (structure_count - 1).gui_n).text := text; + structure_array (structure_count - 1).gui_list (structure_array (structure_count - 1).gui_n).info := description; 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; -- diff --git a/source/ui.ads b/source/ui.ads index c91bcf6..597ea43 100644 --- a/source/ui.ads +++ b/source/ui.ads @@ -22,6 +22,7 @@ package ui is type gui_data is record kind : enumeration := gui_none; text : core.short_string := "- "; + info : core.long_string := "- "; number : integer := 0; image : core.sprite := (others => 0); end record; @@ -44,8 +45,6 @@ package ui is gui_list : access gui_array := null; end record; - no_structure : structure; - ------------------------------------------------------------------------------------------ active : style := main; @@ -77,9 +76,9 @@ package ui is procedure draw_state_box (x, y : in integer); - procedure add_structure (data : in structure := no_structure); + procedure add_structure (data : in structure); - procedure add_structure_button (icon : in core.sprite; text : in core.short_string); + procedure add_structure_button (icon : in core.sprite; text : in core.short_string; description : in core.long_string := ""); ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------