2024-02-15 21:03:09 -05:00
with ada.text_io ;
use ada.text_io ;
2024-02-22 03:29:04 -05:00
with core , ui , effect , attribute , skill , resource , faction , might , magic , item , unit , construction , chad , world ;
2024-02-15 21:03:09 -05:00
procedure main is
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2024-02-18 09:02:33 -05:00
side_panel : integer := 480 ;
2024-02-22 02:48:25 -05:00
preview_x : integer := 24 ;
preview_y : integer := 24 ;
preview_width : integer := 0 ;
preview_height : integer := 0 ;
2024-02-18 09:02:33 -05:00
2024-02-22 06:51:01 -05:00
player : chad . information := chad . trait ( chad . ognjen ) ;
2024-03-16 06:14:28 -04:00
type menu_index is (
none , attribute_menu , skill_menu , resource_menu , unit_menu
) ;
show_menu_index : menu_index := none ;
procedure show_menu is
begin
case show_menu_index is
when none => null ;
when attribute_menu => attribute . menu ( 0 , 0 , true ) ;
when skill_menu => skill . menu ( 0 , 0 , true ) ;
when resource_menu => resource . menu ( 0 , 0 , true ) ;
when unit_menu => unit . menu ( 0 , 0 , true ) ;
end case ;
end show_menu ;
2024-02-24 14:51:53 -05:00
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2024-02-15 21:03:09 -05:00
2024-02-24 14:51:53 -05:00
begin
2024-02-22 06:16:09 -05:00
2024-03-11 08:42:25 -04:00
core . dash ;
core . echo ( core . comment , "Copyright (C) 2024 -- Ognjen 'xolatile' Milan Robovic" ) ;
core . echo ( core . comment , "Version -- 1.0.0" ) ;
core . echo ( core . comment , "License -- GNU/GPLv3+" ) ;
core . echo ( core . comment , "Xhads is free software, you can redistribute it and modify it under the terms of the GNU General Public License by Free Software Foundation." ) ;
core . dash ;
2024-02-16 05:52:11 -05:00
core . configure ;
2024-02-15 21:03:09 -05:00
ui . configure ;
2024-03-11 14:37:26 -04:00
2024-03-13 16:56:59 -04:00
core . play_sound ( core . import_sound ( core . c_string ( "./song/main_menu.ogg" ) ) ) ;
2024-03-11 14:37:26 -04:00
2024-02-16 06:24:49 -05:00
attribute . configure ;
skill . configure ;
resource . configure ;
2024-02-15 21:03:09 -05:00
might . configure ;
magic . configure ;
item . configure ;
unit . configure ;
construction . configure ;
2024-02-22 03:29:04 -05:00
chad . configure ;
2024-02-15 21:03:09 -05:00
world . configure ;
2024-02-24 14:51:53 -05:00
core . ai_synchronize ( 6 ) ;
2024-02-15 21:03:09 -05:00
2024-03-14 13:23:14 -04:00
world . make ( world . swamp , 180 , 140 ) ;
2024-02-15 21:03:09 -05:00
2024-02-24 07:11:29 -05:00
preview_width := core . window_width - side_panel ;
preview_height := core . window_height ;
2024-03-11 08:42:25 -04:00
core . echo ( core . success , "Successfully initialized game data, entering main gameplay loop." ) ;
2024-02-15 21:03:09 -05:00
gameplay : loop
2024-02-16 05:52:11 -05:00
core . synchronize ;
2024-02-15 21:03:09 -05:00
--
2024-02-24 14:51:53 -05:00
exit when core . engine_active = false ;
2024-02-15 21:03:09 -05:00
--
2024-03-16 06:14:28 -04:00
--~if core.signal_mode = core.signal_code'pos (core.signal_a) then preview_width := preview_width - 60; end if;
--~if core.signal_mode = core.signal_code'pos (core.signal_d) then preview_width := preview_width + 60; end if;
--~if core.signal_mode = core.signal_code'pos (core.signal_w) then preview_height := preview_height - 60; end if;
--~if core.signal_mode = core.signal_code'pos (core.signal_s) then preview_height := preview_height + 60; end if;
2024-02-15 21:03:09 -05:00
--
if core . signal_mode = core . signal_code ' pos ( core . signal_left ) then core . camera . x := core . camera . x - 1 ; end if ;
if core . signal_mode = core . signal_code ' pos ( core . signal_right ) then core . camera . x := core . camera . x + 1 ; end if ;
if core . signal_mode = core . signal_code ' pos ( core . signal_up ) then core . camera . y := core . camera . y - 1 ; end if ;
if core . signal_mode = core . signal_code ' pos ( core . signal_down ) then core . camera . y := core . camera . y + 1 ; end if ;
2024-02-20 10:26:49 -05:00
--
2024-03-13 10:44:49 -04:00
if core . cursor_mode = 3 then ui . active := ui . default ; else ui . active := ui . steam ; end if ;
--
2024-02-22 02:48:25 -05:00
core . camera . x := core . clip ( core . camera . x , 0 , world . map . width - preview_width / core . base ) ;
core . camera . y := core . clip ( core . camera . y , 0 , world . map . height - preview_height / core . base ) ;
2024-02-20 10:26:49 -05:00
--
2024-03-16 06:14:28 -04:00
world . draw ( preview_x , preview_y , preview_width - 2 * preview_x , preview_height - 2 * preview_y - 32 , core . signal_mode = core . signal_code ' pos ( core . signal_g ) ) ;
2024-02-20 10:26:49 -05:00
--
2024-02-24 14:51:53 -05:00
--~core.draw_central_grid (preview_x, preview_y, preview_width - 2 * preview_x, preview_height - 2 * preview_y);
--~core.draw_squared_grid (preview_x, preview_y, preview_width - 2 * preview_x, preview_height - 2 * preview_y);
--~core.draw_hexagon_grid (preview_x, preview_y, preview_width - 2 * preview_x, preview_height - 2 * preview_y);
2024-02-17 18:13:17 -05:00
--
2024-03-14 09:44:31 -04:00
ui . draw_menu ( 0 , 0 , preview_width , preview_height - 32 , false ) ;
ui . draw_tiny_menu ( preview_width , 0 , side_panel , preview_height - 32 , true ) ;
2024-02-15 21:03:09 -05:00
--
2024-03-14 09:44:31 -04:00
--~for this in magic.blow_away .. magic.thunderclap loop magic.view (this, 112 * (magic.codex'pos (this) - magic.codex'pos (magic.chain_magic_arrow)) - 60, 112 * 0 + 64); end loop;
--~for this in magic.agony_mass .. magic.weakness loop magic.view (this, 112 * (magic.codex'pos (this) - magic.codex'pos (magic.thunderclap)) - 60, 112 * 1 + 64); end loop;
--~for this in magic.earthquake .. magic.summon_earth_elemental loop magic.view (this, 112 * (magic.codex'pos (this) - magic.codex'pos (magic.weakness)) - 60, 112 * 2 + 64); end loop;
--~for this in magic.determination_mass .. magic.summon_fire_elemental loop magic.view (this, 112 * (magic.codex'pos (this) - magic.codex'pos (magic.summon_earth_elemental)) - 60, 112 * 3 + 64); end loop;
--~for this in magic.blindness .. magic.sunburst loop magic.view (this, 112 * (magic.codex'pos (this) - magic.codex'pos (magic.summon_fire_elemental)) - 60, 112 * 4 + 64); end loop;
--~for this in magic.dispel_magic_mass .. magic.time_statis loop magic.view (this, 112 * (magic.codex'pos (this) - magic.codex'pos (magic.sunburst)) - 60, 112 * 5 + 64); end loop;
--~for this in magic.blizzard .. magic.winter_circle loop magic.view (this, 112 * (magic.codex'pos (this) - magic.codex'pos (magic.time_statis)) - 60, 112 * 6 + 64); end loop;
2024-02-15 21:03:09 -05:00
--
2024-02-16 06:24:49 -05:00
--~for index in item.codex loop item.draw (index, 32 * (item.codex'pos (index) / 10) + 32, 32 * (item.codex'pos (index) mod 10) + 32); end loop;
2024-02-16 07:53:36 -05:00
--~for index in attribute.codex loop attribute.draw (index, 32 * attribute.codex'pos (index) + 64, 64); end loop;
--~for index in resource.codex loop resource.draw (index, 32 * resource.codex'pos (index) + 64, 96); end loop;
--~for index in skill.codex loop skill.draw (index, 32 * skill.codex'pos (index) + 64, 128); end loop;
2024-02-15 21:03:09 -05:00
--
2024-03-14 14:40:05 -04:00
ui . draw_state_box ( preview_width + 32 , 32 ) ;
2024-03-10 16:41:31 -04:00
--
2024-03-16 06:14:28 -04:00
if core . signal_mode = core . signal_code ' pos ( core . signal_a ) then show_menu_index := attribute_menu ; end if ;
if core . signal_mode = core . signal_code ' pos ( core . signal_s ) then show_menu_index := skill_menu ; end if ;
if core . signal_mode = core . signal_code ' pos ( core . signal_r ) then show_menu_index := resource_menu ; end if ;
if core . signal_mode = core . signal_code ' pos ( core . signal_u ) then show_menu_index := unit_menu ; end if ;
if core . cursor_mode = 2 and show_menu_index / = none then show_menu_index := none ; end if ;
2024-03-11 15:35:56 -04:00
--
2024-03-13 14:30:31 -04:00
--~unit.stat (unit.griffin, 0, 0, true);
--~unit.stat (unit.halberdier, 0, 0, true);
--~unit.stat (unit.spirit, 0, 0, true);
2024-03-14 09:44:31 -04:00
--~unit.stat (unit.power_lich, 600, 300, false);
2024-03-11 16:36:42 -04:00
--
2024-03-14 09:44:31 -04:00
--~magic.menu (0, 0, true);
2024-03-14 06:06:22 -04:00
--~might.menu (0, 0, true);
2024-03-13 14:07:17 -04:00
--
2024-03-16 06:14:28 -04:00
--~ui.synchronize;
--
show_menu ;
--
2024-03-13 14:07:17 -04:00
ui . draw_text_box ( 0 , core . window_height - 32 , core . window_width , 32 ) ;
2024-02-15 21:03:09 -05:00
end loop gameplay ;
2024-02-16 09:59:19 -05:00
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2024-02-15 21:03:09 -05:00
end main ;