-- Copyright (c) 2024 - Ognjen 'xolatile' Milan Robovic -- -- GNU General Public Licence (version 3 or later) with core, ui, attribute, skill, resource, material, 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 information; 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 information; 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), description (player.index).name, x + offset, y + offset, 0); -- ui.draw_tiny_fill_bar (x + view_width + 2 * offset, y + 1 * core.icon + offset, 360 - view_width - offset, float (player.health.value) / float (player.health.limit), (127, 0, 0, 255)); ui.draw_tiny_fill_bar (x + view_width + 2 * offset, y + 2 * core.icon + offset, 360 - view_width - offset, float (player.mana.value) / float (player.mana.limit), (0, 0, 127, 255)); ui.draw_tiny_fill_bar (x + view_width + 2 * offset, y + 3 * core.icon + offset, 360 - view_width - offset, float (player.stamina.value) / float (player.stamina.limit), (0, 127, 0, 255)); -- ui.write (text => "Health " & player.health.value'image & " /" & player.health.limit'image, x => x + view_width + 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 + 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 + 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.description (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 information; x, y : in integer) is begin null; end draw_menu; ------------------------------------------------------------------------------------------ function take_equipment_item (player : in out information; 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; ------------------------------------------------------------------------------------------ procedure save_value (here : in core.io.file_type; data : in information) is begin core.io.write (here, enumeration'pos (data.index)); core.io.write (here, core.animation'pos (data.state)); core.io.write (here, data.x); core.io.write (here, data.y); -- core.save_point (here, data.health); core.save_point (here, data.mana); core.save_point (here, data.stamina); -- attribute.save_points (here, data.attributes); skill.save_points (here, data.skills); resource.save_points (here, data.resources); material.save_points (here, data.materials); -- for index in equipment.slot loop core.io.write (here, equipment.enumeration'pos (data.equipments (index))); end loop; -- core.io.write (here, data.item_count); -- if data.item_count > 0 then for index in 0 .. data.item_count - 1 loop core.io.write (here, equipment.enumeration'pos (data.items (index))); end loop; end if; end save_value; ------------------------------------------------------------------------------------------ procedure load_value (here : in core.io.file_type; data : out information) is this : integer; begin core.io.read (here, this); data.index := enumeration'val (this); core.io.read (here, this); data.state := core.animation'val (this); core.io.read (here, data.x); core.io.read (here, data.y); -- core.load_point (here, data.health); core.load_point (here, data.mana); core.load_point (here, data.stamina); -- attribute.load_points (here, data.attributes); skill.load_points (here, data.skills); resource.load_points (here, data.resources); material.load_points (here, data.materials); -- for index in equipment.slot loop core.io.read (here, this); data.equipments (index) := equipment.enumeration'val (this); end loop; -- core.io.read (here, data.item_count); -- if data.item_count > 0 then for index in 0 .. data.item_count - 1 loop core.io.read (here, this); data.items (index) := equipment.enumeration'val (this); end loop; end if; end load_value; ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ end chad;