From 72605d02deb21b6050063ec6e991eec2587face6 Mon Sep 17 00:00:00 2001 From: xolatile Date: Sat, 27 Apr 2024 12:34:16 -0400 Subject: [PATCH] Work in progress, quick push... --- source/ai.adb | 4 +- source/attribute.adb | 2 +- source/magic.adb | 5 +-- source/main.adb | 7 ++- source/might.adb | 5 +-- source/resource.adb | 2 +- source/skill.adb | 2 +- source/ui.adb | 96 +++++++++++++++++++++++++--------------- source/ui.ads | 28 ++---------- source/unit.adb | 7 ++- sprite/world/landmark/reeds.png | Bin 3463 -> 3276 bytes 11 files changed, 80 insertions(+), 78 deletions(-) diff --git a/source/ai.adb b/source/ai.adb index 7c4cb59..0a86818 100644 --- a/source/ai.adb +++ b/source/ai.adb @@ -62,7 +62,7 @@ package body ai is --~x : integer := (core.window_width - width) / 2; --~y : integer := (core.window_height - height) / 2; begin - --~ui.draw_tiny_menu (x, y, width, height, true); + --~ui.draw_tiny_menu (x, y, width, height); --~for index in 1 .. actor_count loop --~core.write ("Bot" & index'image, x + offset + 0, y * index + offset, ui.glyphs (ui.active)); --~core.write ("T =" & actor_is_thirsty (index)'image, x + offset + 120, y * index + offset, ui.glyphs (ui.active)); @@ -80,7 +80,7 @@ package body ai is x : integer := (core.window_width - width) / 2; y : integer := (core.window_height - height) / 2; begin - ui.draw_tiny_menu (x, y, width, height, true); + ui.draw_tiny_menu (x, y, width, height); -- active := index; -- diff --git a/source/attribute.adb b/source/attribute.adb index ce3e697..d8eaa97 100644 --- a/source/attribute.adb +++ b/source/attribute.adb @@ -30,7 +30,7 @@ package body attribute is move_x : constant integer := (if center then (core.window_width - width) / 2 else x); move_y : constant integer := (if center then (core.window_height - height) / 2 else y); begin - ui.draw_tiny_menu (move_x, move_y, width, height, true); + ui.draw_tiny_menu (move_x, move_y, width, height); ui.draw_title_bar (move_x, move_y, width, "Attributes"); -- for index in enumeration loop diff --git a/source/magic.adb b/source/magic.adb index 211af19..d5308bd 100644 --- a/source/magic.adb +++ b/source/magic.adb @@ -34,8 +34,7 @@ package body magic is procedure icon (index : in enumeration; x, y : in integer) is begin - core.draw (icon_sprite (index), x + 2, y + 2); - ui.draw_overicon (trait (index).text, x, y); + ui.draw_overicon (icon_sprite (index), trait (index).text, x, y); end icon; ------------------------------------------------------------------------------------------ @@ -58,7 +57,7 @@ package body magic is -- next : array (0 .. 7) of integer := (others => 0); begin - ui.draw_tiny_menu (move_x, move_y, width, height, true); + ui.draw_tiny_menu (move_x, move_y, width, height); ui.draw_title_bar (move_x, move_y, width, "Magic Abilities"); -- for index in enumeration loop diff --git a/source/main.adb b/source/main.adb index 673f661..29fafe1 100644 --- a/source/main.adb +++ b/source/main.adb @@ -149,8 +149,8 @@ begin -- world.draw; -- - ui.draw_menu (0, 0, preview_width, preview_height, false); - ui.draw_tiny_menu (preview_width, 0, side_panel, preview_height, true); + ui.draw_menu (0, 0, preview_width, preview_height); + ui.draw_tiny_menu (preview_width, 0, side_panel, preview_height); -- ui.draw_state_box (preview_width + 32, 32); -- @@ -159,6 +159,9 @@ begin --~magic.menu (0, 0, true); --~might.menu (0, 0, true); -- + ui.draw_menu (60, 60, 243, 243); + ui.draw_tiny_menu (360, 60, 243, 243); + -- menu_render; -- ui.draw_text_box (0, core.window_height - text_box_height, core.window_width, text_box_height); diff --git a/source/might.adb b/source/might.adb index 77b313c..0c50c20 100644 --- a/source/might.adb +++ b/source/might.adb @@ -34,8 +34,7 @@ package body might is procedure icon (index : in enumeration; x, y : in integer) is begin - core.draw (icon_sprite (index), x + 2, y + 2); - ui.draw_overicon (trait (index).text, x, y); + ui.draw_overicon (icon_sprite (index), trait (index).text, x, y); end icon; ------------------------------------------------------------------------------------------ @@ -58,7 +57,7 @@ package body might is -- next : array (0 .. 7) of integer := (others => 0); begin - ui.draw_tiny_menu (move_x, move_y, width, height, true); + ui.draw_tiny_menu (move_x, move_y, width, height); ui.draw_title_bar (move_x, move_y, width, "Might Abilities"); -- for index in enumeration loop diff --git a/source/resource.adb b/source/resource.adb index d4ba8b3..d9f0a5b 100644 --- a/source/resource.adb +++ b/source/resource.adb @@ -30,7 +30,7 @@ package body resource is move_x : constant integer := (if center then (core.window_width - width) / 2 else x); move_y : constant integer := (if center then (core.window_height - height) / 2 else y); begin - ui.draw_tiny_menu (move_x, move_y, width, height, true); + ui.draw_tiny_menu (move_x, move_y, width, height); ui.draw_title_bar (move_x, move_y, width, "Resources"); -- for index in enumeration loop diff --git a/source/skill.adb b/source/skill.adb index 9ea2b89..7c7d3eb 100644 --- a/source/skill.adb +++ b/source/skill.adb @@ -31,7 +31,7 @@ package body skill is move_x : constant integer := (if center then (core.window_width - width) / 2 else x); move_y : constant integer := (if center then (core.window_height - height) / 2 else y); begin - ui.draw_tiny_menu (move_x, move_y, width, height, true); + ui.draw_tiny_menu (move_x, move_y, width, height); ui.draw_title_bar (move_x, move_y, width, "Skills"); -- for index in enumeration loop diff --git a/source/ui.adb b/source/ui.adb index b8f235b..9a2321f 100644 --- a/source/ui.adb +++ b/source/ui.adb @@ -8,8 +8,32 @@ package body ui is ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - sprite : array (style, enumeration) of core.sprite; - glyphs : array (style) of core.font; + type element is ( + none, + main_background, + corner_upper_left, corner_upper_right, corner_lower_left, corner_lower_right, + tiny_corner_upper_left, tiny_corner_upper_right, tiny_corner_lower_left, tiny_corner_lower_right, + border_upper, border_lower, border_left, border_right, + tiny_border_upper, tiny_border_lower, tiny_border_left, tiny_border_right, + frame_upper_left, frame_upper, frame_upper_right, + frame_left, frame_middle, frame_right, + frame_lower_left, frame_lower, frame_lower_right, + cursor, icon, overicon, + icon_upper_left, icon_upper, icon_upper_right, + icon_left, icon_right, + icon_lower_left, icon_lower, icon_lower_right, + text_upper_left, text_upper, text_upper_right, + text_left, text_middle, text_right, + text_lower_left, text_lower, text_lower_right, + fill_bar_left, fill_bar_horizontal, fill_bar_right, fill_horizontal, + scroll_bar_lower, scroll_bar_middle, scroll_bar_upper, + title_bar_left, title_bar_middle, title_bar_right + ); + + ------------------------------------------------------------------------------------------ + + sprite : array (style, element) of core.sprite; + glyphs : array (style) of core.font; ------------------------------------------------------------------------------------------ @@ -23,49 +47,49 @@ package body ui is ------------------------------------------------------------------------------------------ - procedure draw (index : in enumeration; x, y : in integer) is + procedure draw (index : in element; x, y : in integer) is begin core.zoom := 1; - core.draw (sprite (active, index), x, y); + core.draw (sprite (active, index), x, y, 0, 0, sprite (active, index).width, sprite (active, index).height); core.zoom := 2; end draw; ------------------------------------------------------------------------------------------ - procedure crop (index : in enumeration; x, y, u, v, width, height : in integer) is + procedure crop (index : in element; x, y, width, height : in integer) is begin core.zoom := 1; - core.draw (sprite (active, index), x, y, u, v, width, height); + core.draw (sprite (active, index), x, y, 0, 0, width, height); core.zoom := 2; end crop; ------------------------------------------------------------------------------------------ - procedure draw_horizontally (index : in enumeration; x, y, width : in integer) is - base : constant integer := sprite (active, index).width; + procedure draw_horizontally (index : in element; x, y, width : in integer) is + step : constant integer := sprite (active, index).width; begin - for move in 0 .. width / base - 1 loop - draw (index, x + move * base, y); + for move in 0 .. width / step - 1 loop + draw (index, x + move * step, y); end loop; -- - crop (index, x + (width / base) * base, y, 0, 0, width mod base, sprite (active, index).height); + crop (index, x + (width / step) * step, y, width mod step, sprite (active, index).height); end draw_horizontally; ------------------------------------------------------------------------------------------ - procedure draw_vertically (index : in enumeration; x, y, height : in integer) is - base : constant integer := sprite (active, index).height; + procedure draw_vertically (index : in element; x, y, height : in integer) is + step : constant integer := sprite (active, index).height; begin - for move in 0 .. height / base - 1 loop - draw (index, x, y + move * base); + for move in 0 .. height / step - 1 loop + draw (index, x, y + move * step); end loop; -- - crop (index, x, y + (height / base) * base, 0, 0, sprite (active, index).width, height mod base); + crop (index, x, y + (height / step) * step, sprite (active, index).width, height mod step); end draw_vertically; ------------------------------------------------------------------------------------------ - procedure draw_background (index : in enumeration; x, y, width, height : in integer) is + procedure draw_background (index : in element; x, y, width, height : in integer) is base_width : integer := sprite (active, index).width; base_height : integer := sprite (active, index).height; crop_width : integer := width mod base_width; @@ -76,14 +100,14 @@ package body ui is draw (index, x + move_x * base_width, y + move_y * base_height); end loop; -- - crop (index, x + width - crop_width, y + move_y * base_height, 0, 0, crop_width, base_height); + crop (index, x + width - crop_width, y + move_y * base_height, crop_width, base_height); end loop; -- for move_x in 0 .. width / base_width - 1 loop - crop (index, x + move_x * base_width, y + height - crop_height, 0, 0, base_width, crop_height); + crop (index, x + move_x * base_width, y + height - crop_height, base_width, crop_height); end loop; -- - crop (index, x + width - crop_width, y + height - crop_height, 0, 0, crop_width, crop_height); + crop (index, x + width - crop_width, y + height - crop_height, crop_width, crop_height); end draw_background; ------------------------------------------------------------------------------------------ @@ -91,10 +115,10 @@ package body ui is procedure configure is procedure load_ui (index : in style; folder_path : in string) is begin - glyphs (index) := core.import_font ("./sprite/ui/" & folder_path & "/font.png", (if index = default then 16 else 24), 0); + glyphs (index) := core.import_font ("./sprite/ui/" & folder_path & "/font.png", 16, 0); -- - for this in enumeration loop - sprite (index, this) := core.import_sprite ("./sprite/ui/" & folder_path & core.lowercase (enumeration'image (this)) & ".png", 1, 1); + for this in element loop + sprite (index, this) := core.import_sprite ("./sprite/ui/" & folder_path & core.lowercase (element'image (this)) & ".png", 1, 1); end loop; end load_ui; begin @@ -108,9 +132,10 @@ package body ui is procedure draw_icon (data : in core.sprite; description : in string; x, y : in integer) is begin - draw (icon, x, y); select_text_box (description, x, y, core.icon, core.icon); -- + draw (icon, x, y); + -- core.zoom := 1; core.draw (data, x, y); core.zoom := 2; @@ -118,10 +143,15 @@ package body ui is ------------------------------------------------------------------------------------------ - procedure draw_overicon (description : in string; x, y : in integer) is + procedure draw_overicon (data : in core.sprite; description : in string; x, y : in integer) is begin - draw (overicon, x, y); select_text_box (description, x, y, core.icon, core.icon); + -- + core.zoom := 1; + core.draw (data, x, y); + core.zoom := 2; + -- + draw (overicon, x, y); end draw_overicon; ------------------------------------------------------------------------------------------ @@ -183,7 +213,7 @@ package body ui is -- core.write (title, x + sprite (active, title_bar_left).width / 2, y - sprite (active, title_bar_middle).height / 2 - 4, glyphs (active)); -- - select_text_box ("", x, y - sprite (active, title_bar_middle).height, width, sprite (active, title_bar_middle).height); + select_text_box (title, x, y - sprite (active, title_bar_middle).height, width, sprite (active, title_bar_middle).height); end draw_title_bar; ------------------------------------------------------------------------------------------ @@ -199,7 +229,7 @@ package body ui is ------------------------------------------------------------------------------------------ - procedure draw_menu (x, y, width, height : in integer; background : in boolean) is + procedure draw_menu (x, y, width, height : in integer) is offset : constant integer := sprite (active, none).width; begin if width < sprite (active, corner_upper_left).width + sprite (active, corner_upper_right).width @@ -209,10 +239,6 @@ package body ui is then return; end if; -- - if background then - draw_background (main_background, x + offset, y + offset, width - 2 * offset, height - 2 * offset); - end if; - -- declare upper : constant integer := width - sprite (active, corner_upper_left).width - sprite (active, corner_upper_right).width; lower : constant integer := width - sprite (active, corner_lower_left).width - sprite (active, corner_lower_right).width; left : constant integer := height - sprite (active, corner_upper_left).height - sprite (active, corner_lower_left).height; @@ -234,7 +260,7 @@ package body ui is ------------------------------------------------------------------------------------------ - procedure draw_tiny_menu (x, y, width, height : in integer; background : in boolean) is + procedure draw_tiny_menu (x, y, width, height : in integer) is offset : constant integer := sprite (active, none).width; begin if width < sprite (active, tiny_corner_upper_left).width + sprite (active, tiny_corner_upper_right).width @@ -244,9 +270,7 @@ package body ui is then return; end if; -- - if background then - draw_background (main_background, x + offset, y + offset, width - 2 * offset, height - 2 * offset); - end if; + draw_background (main_background, x + offset, y + offset, width - 2 * offset, height - 2 * offset); -- declare upper : constant integer := width - sprite (active, tiny_corner_upper_left).width - sprite (active, tiny_corner_upper_right).width; lower : constant integer := width - sprite (active, tiny_corner_lower_left).width - sprite (active, tiny_corner_lower_right).width; diff --git a/source/ui.ads b/source/ui.ads index 532b2ab..af9c3f2 100644 --- a/source/ui.ads +++ b/source/ui.ads @@ -12,28 +12,6 @@ package ui is default, steam ); - type enumeration is ( - none, - main_background, - corner_upper_left, corner_upper_right, corner_lower_left, corner_lower_right, - tiny_corner_upper_left, tiny_corner_upper_right, tiny_corner_lower_left, tiny_corner_lower_right, - border_upper, border_lower, border_left, border_right, - tiny_border_upper, tiny_border_lower, tiny_border_left, tiny_border_right, - frame_upper_left, frame_upper, frame_upper_right, - frame_left, frame_middle, frame_right, - frame_lower_left, frame_lower, frame_lower_right, - cursor, icon, overicon, - icon_upper_left, icon_upper, icon_upper_right, - icon_left, icon_right, - icon_lower_left, icon_lower, icon_lower_right, - text_upper_left, text_upper, text_upper_right, - text_left, text_middle, text_right, - text_lower_left, text_lower, text_lower_right, - fill_bar_left, fill_bar_horizontal, fill_bar_right, fill_horizontal, - scroll_bar_lower, scroll_bar_middle, scroll_bar_upper, - title_bar_left, title_bar_middle, title_bar_right - ); - ------------------------------------------------------------------------------------------ active : style; @@ -43,7 +21,7 @@ package ui is procedure configure; procedure draw_icon (data : in core.sprite; description : in string; x, y : in integer); - procedure draw_overicon (description : in string; x, y : in integer); + procedure draw_overicon (data : in core.sprite; description : in string; x, y : in integer); procedure draw_text_box (x, y, width, height : in integer); @@ -52,8 +30,8 @@ package ui is procedure draw_title_bar (x, y, width : in integer; title : in string); procedure draw_scroll_bar (x, y, height : in integer; offset : in integer); - procedure draw_menu (x, y, width, height : in integer; background : in boolean); - procedure draw_tiny_menu (x, y, width, height : in integer; background : in boolean); + procedure draw_menu (x, y, width, height : in integer); + procedure draw_tiny_menu (x, y, width, height : in integer); procedure draw_icon_menu (description : in string; x, y, width, height : in integer); diff --git a/source/unit.adb b/source/unit.adb index 75dbc3e..7692f47 100644 --- a/source/unit.adb +++ b/source/unit.adb @@ -43,8 +43,7 @@ package body unit is procedure icon (index : in enumeration; x, y : in integer) is begin - core.draw (icon_sprite (index), x + 2, y + 2); - ui.draw_overicon (trait (index).text, x, y); + ui.draw_overicon (icon_sprite (index), trait (index).text, x, y); end icon; ------------------------------------------------------------------------------------------ @@ -66,7 +65,7 @@ package body unit is move_y : constant integer := (if center then (core.window_height - height) / 2 else y); move : integer := 0; begin - ui.draw_tiny_menu (move_x, move_y, width, height, true); + ui.draw_tiny_menu (move_x, move_y, width, height); ui.draw_title_bar (move_x, move_y, width, "Units"); -- for index in enumeration loop @@ -87,7 +86,7 @@ package body unit is move_y : constant integer := (if center then (core.window_height - height) / 2 else y); move : integer := 0; begin - ui.draw_tiny_menu (move_x, move_y, width, height, true); + ui.draw_tiny_menu (move_x, move_y, width, height); ui.draw_title_bar (move_x, move_y, width, trait (index).name); -- view (index, move_x + offset, move_y + offset); diff --git a/sprite/world/landmark/reeds.png b/sprite/world/landmark/reeds.png index 6f249f1b2abee7623e65a1c7ce3c56a60d9a4674..f98c491056ebd1df4a1bc4a2a3d2ae26e2009432 100644 GIT binary patch delta 3198 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 delta 3386 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