70 lines
2.9 KiB
Ada
70 lines
2.9 KiB
Ada
-- Copyright (c) 2024 - Ognjen 'xolatile' Milan Robovic
|
|
--
|
|
-- GNU General Public Licence (version 3 or later)
|
|
|
|
with core, ui;
|
|
|
|
package body notification is
|
|
|
|
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
type information is record
|
|
name : core.short_string;
|
|
text : core.long_string;
|
|
end record;
|
|
|
|
------------------------------------------------------------------------------------------
|
|
|
|
shown : array (enumeration) of boolean := (others => false);
|
|
|
|
trait : constant array (enumeration) of information := (
|
|
none => ("-- ", "-- "),
|
|
well_of_strength => ("Gold ", "#1Gold#0 is precious yellowish shiny metal, valued since ancient times. "),
|
|
well_of_agility => ("Wood ", "#1Wood#0 is just bundle of lignin and cellulose, nothing more. "),
|
|
well_of_knowledge => ("Leather ", "#1Leather#0 is general purpose resource, used for decorations. ")
|
|
);
|
|
|
|
------------------------------------------------------------------------------------------
|
|
|
|
procedure draw (index : in enumeration; x, y : in integer; center : in boolean := false) is
|
|
use type core.signal_code;
|
|
begin
|
|
ui.draw_tiny_menu (x, y, 960, 128);
|
|
--
|
|
ui.write (trait (index).name, x + 32, y + 32);
|
|
ui.write (trait (index).text, x + 32, y + 64);
|
|
--
|
|
if core.signal_mode = core.signal_space then
|
|
shown (index) := false;
|
|
end if;
|
|
end draw;
|
|
|
|
------------------------------------------------------------------------------------------
|
|
|
|
procedure show (index : in enumeration) is begin if index = none then return; end if; shown (index) := true; end show;
|
|
procedure hide (index : in enumeration) is begin if index = none then return; end if; shown (index) := false; end hide;
|
|
|
|
------------------------------------------------------------------------------------------
|
|
|
|
procedure iconflow (icon : in core.sprite; data, x, y : in integer) is
|
|
begin
|
|
core.draw (icon, x, y, factor => 1);
|
|
--
|
|
ui.write (data'image, x + core.icon, y, (if data < 0 then (255, 0, 0, 255) else (0, 0, 255, 255)), 15, true);
|
|
end iconflow;
|
|
|
|
------------------------------------------------------------------------------------------
|
|
|
|
procedure synchronize is
|
|
begin
|
|
for index in enumeration loop
|
|
if shown (index) then
|
|
draw (index, core.center_x (960), core.center_y (128));
|
|
end if;
|
|
end loop;
|
|
end synchronize;
|
|
|
|
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
end notification;
|