@@ -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; | |||
@@ -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; | |||
@@ -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); | |||
@@ -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; | |||
@@ -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; | |||
@@ -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; | |||
-- | |||
@@ -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 := ""); | |||
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | |||