|
- -- Copyright (c) 2024 - Ognjen 'xolatile' Milan Robovic
- --
- -- GNU General Public Licence (version 3 or later)
-
- with core, ui, attribute, skill, resource, faction, equipment;
-
- package body chad is
-
- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-
- view_width : constant integer := 64;
- view_height : constant integer := 96;
-
- sprite : array (enumeration) of core.sprite;
- view : array (enumeration) of core.sprite;
-
- pepe_the_frog : core.sprite;
- alice_the_mad : core.sprite;
-
- ------------------------------------------------------------------------------------------
-
- procedure configure is
- begin
- core.echo (core.comment, "Configuring chad components...");
- --
- pepe_the_frog := core.import_sprite (core.folder & "/game/unit/pepe_the_frog.png", 4, 6);
- alice_the_mad := core.import_sprite (core.folder & "/game/unit/alice_the_mad.png", 4, 6);
- --
- for index in enumeration loop
- sprite (index) := core.import_sprite (core.folder & "/game/chad/" & core.lowercase (enumeration'image (index)) & ".png", 4, 6);
- view (index) := core.import_sprite (core.folder & "/view/chad/" & core.lowercase (enumeration'image (index)) & ".png", 1, 1);
- null;
- end loop;
- end configure;
-
- ------------------------------------------------------------------------------------------
-
- procedure draw (player : in value; x, y : in integer) is
- begin
- core.draw (sprite (player.index), x, y, state => player.state);
- --
- for index in equipment.slot loop
- equipment.draw (player.equipments (index), player.state, x, y);
- end loop;
- end draw;
-
- ------------------------------------------------------------------------------------------
-
- procedure draw_data (player : in value; x, y : in integer) is
- offset : constant integer := 8;
- begin
- ui.draw_frame ("--", x, y, 360 + 2 * offset, 96 + 2 * offset);
- --
- ui.draw_sprite (view (player.index), trait (player.index).name, x + offset, y + offset, 0);
- --
- ui.draw_tiny_fill_bar (x + view_width + 2 * offset, y + 1 * core.icon + offset, 4 * core.icon, float (player.health.value) / float (player.health.limit), (255, 0, 0, 255));
- ui.draw_tiny_fill_bar (x + view_width + 2 * offset, y + 2 * core.icon + offset, 4 * core.icon, float (player.mana.value) / float (player.mana.limit), (0, 0, 255, 255));
- ui.draw_tiny_fill_bar (x + view_width + 2 * offset, y + 3 * core.icon + offset, 4 * core.icon, float (player.stamina.value) / float (player.stamina.limit), (0, 255, 0, 255));
- --
- ui.write (text => "Health " & player.health.value'image & " /" & player.health.limit'image,
- x => x + view_width + 4 * core.icon + 3 * offset,
- y => y + 2 * offset,
- tint => (255, 127, 127, 255),
- size => 15,
- code => true);
- ui.write (text => "Mana " & player.mana.value'image & " /" & player.mana.limit'image,
- x => x + view_width + 4 * core.icon + 3 * offset,
- y => y + core.icon + 2 * offset,
- tint => (127, 127, 255, 255),
- size => 15,
- code => true);
- ui.write (text => "Stamina" & player.stamina.value'image & " /" & player.stamina.limit'image,
- x => x + view_width + 4 * core.icon + 3 * offset,
- y => y + 2 * core.icon + 2 * offset,
- tint => (127, 255, 127, 255),
- size => 15,
- code => true);
- --
- attribute.draw_points (player.attributes, x, y + 96 + 3 * offset);
- --
- for index_y in 0 .. 3 loop
- for index_x in 0 .. 5 loop
- ui.draw_icon (data => equipment.icon (player.items (6 * index_y + index_x)),
- text => equipment.trait (player.items (6 * index_y + index_x)).name,
- x => x + index_x * core.icon,
- y => y + 96 + 4 * offset + 2 * core.icon + index_y * core.icon);
- end loop;
- end loop;
- --
- skill.draw_points (player.skills, x, y + 96 + 5 * offset + 6 * core.icon);
- end draw_data;
-
- ------------------------------------------------------------------------------------------
-
- procedure draw_menu (player : in value; x, y : in integer) is
- begin
- null;
- end draw_menu;
-
- ------------------------------------------------------------------------------------------
-
- function take_equipment_item (player : in out value; item : in equipment.enumeration) return boolean is
- use type equipment.enumeration;
- begin
- if player.item_count = item_limit or item = equipment.none then
- return false;
- end if;
- --
- player.items (player.item_count) := item;
- --
- core.increment (player.item_count);
- --
- return true;
- end take_equipment_item;
-
- ------------------------------------------------------------------------------------------
-
- procedure draw_pepe is
- begin
- core.draw (pepe_the_frog, (core.window_width - core.base) / 2, (core.window_height - core.base) / 2);
- end draw_pepe;
-
- ------------------------------------------------------------------------------------------
-
- procedure draw_alice is
- begin
- core.draw (alice_the_mad, (core.window_width - core.base) / 2, (core.window_height - core.base) / 2);
- end draw_alice;
-
- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-
- end chad;
|