2024-04-25 00:27:13 -04:00
-- Copyright (c) 2024 - Ognjen 'xolatile' Milan Robovic
--
-- GNU General Public Licence (version 3 or later)
2024-03-22 00:37:54 -04:00
pragma ada_2012 ;
2024-02-15 21:03:09 -05:00
2024-04-25 03:46:07 -04:00
with core , ui , effect , attribute , skill , resource , faction , might , magic , item , unit , construction , chad , world , ai ;
2024-02-15 21:03:09 -05:00
procedure main is
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2024-05-01 15:19:12 -04:00
side_panel : integer := 0 ;
2024-04-27 03:49:02 -04:00
preview_width : integer := 0 ;
preview_height : integer := 0 ;
2024-05-01 15:19:12 -04:00
text_box_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 08:08:50 -04:00
------------------------------------------------------------------------------------------
2024-05-03 06:10:13 -04:00
type screen_view is (
map_preview_panel , status_preview_panel , text_box_panel
) ;
screen_view_icon : array ( screen_view ) of core . sprite ;
screen_view_list : array ( screen_view ) of boolean := ( others => true ) ;
screen_view_text : array ( screen_view ) of core . long_string := (
"Toggle map preview panel. " ,
"Toggle status preview panel. " ,
"Toggle text box panel. "
) ;
procedure toggle_map_preview_panel is begin screen_view_list ( map_preview_panel ) := ( if screen_view_list ( map_preview_panel ) then false else true ) ; end toggle_map_preview_panel ;
procedure toggle_status_preview_panel is begin screen_view_list ( status_preview_panel ) := ( if screen_view_list ( status_preview_panel ) then false else true ) ; end toggle_status_preview_panel ;
procedure toggle_text_box_panel is begin screen_view_list ( text_box_panel ) := ( if screen_view_list ( text_box_panel ) then false else true ) ; end toggle_text_box_panel ;
screen_view_show : array ( screen_view ) of access procedure := (
toggle_map_preview_panel ' access ,
toggle_status_preview_panel ' access ,
toggle_text_box_panel ' access
) ;
------------------------------------------------------------------------------------------
2024-05-01 10:16:25 -04:00
-- TODO: This menu code is now useless due to new UI code.
2024-05-03 07:55:17 -04:00
--~type menu_index is (
--~menu_none, menu_attribute, menu_skill, menu_resource, menu_unit, menu_might, menu_magic
--~);
--~menu_limit : constant integer := 3;
--~menu_count : integer := 0;
--~menu_stack : array (1 .. menu_limit) of menu_index := (others => menu_none);
--~procedure menu_insert (index : in menu_index) is
--~begin
--~if menu_count = menu_limit then return; end if;
--~--
--~menu_count := menu_count mod menu_limit + 1;
--~--
--~menu_stack (menu_count) := index;
--~end menu_insert;
--~procedure menu_remove is
--~begin
--~if menu_count = 0 then return; end if;
--~--
--~menu_stack (menu_count) := menu_none;
--~--
--~menu_count := menu_count - 1;
--~end menu_remove;
--~procedure menu_render is
--~begin
2024-04-27 13:05:44 -04:00
--~if menu_count > 0 then
--~core.overlay; THIS SLOWS DOWN RENDERING BY 10 FRAMES!
--~end if;
2024-05-03 07:55:17 -04:00
--~--
--~for index in 1 .. menu_limit loop
--~case menu_stack (index) is
--~when menu_none => null;
--~when menu_attribute => attribute.menu (100, 100, false);
--~when menu_skill => skill.menu (200, 200, false);
--~when menu_resource => resource.menu (300, 300, false);
--~when menu_unit => unit.menu (0, 0, true);
--~when menu_might => might.menu (0, 0, true);
--~when menu_magic => magic.menu (0, 0, true);
--~end case;
--~end loop;
--~end menu_render;
2024-03-16 08:08:50 -04:00
------------------------------------------------------------------------------------------
2024-05-01 10:16:25 -04:00
-- TODO: Also useless, delete later...
2024-05-03 07:55:17 -04:00
--~procedure show_attribute_menu is begin menu_insert (menu_attribute); end show_attribute_menu;
--~procedure show_skill_menu is begin menu_insert (menu_skill); end show_skill_menu;
--~procedure show_resource_menu is begin menu_insert (menu_resource); end show_resource_menu;
--~procedure show_unit_menu is begin menu_insert (menu_unit); end show_unit_menu;
--~procedure show_might_menu is begin menu_insert (menu_might); end show_might_menu;
--~procedure show_magic_menu is begin menu_insert (menu_magic); end show_magic_menu;
2024-04-30 19:58:38 -04:00
procedure ui_main_style is begin ui . active := ui . style ' val ( ( ui . style ' pos ( ui . active ) + 1 ) mod 7 ) ; end ui_main_style ;
2024-05-03 07:55:17 -04:00
--~procedure hide_top_menu is begin menu_remove; end hide_top_menu;
2024-05-01 00:16:19 -04:00
procedure zoom_in is begin core . zoom := 2 ; end zoom_in ;
procedure zoom_out is begin core . zoom := 1 ; end zoom_out ;
2024-03-16 08:08:50 -04:00
2024-05-01 10:16:25 -04:00
-- TODO: This is fine.
2024-03-16 08:08:50 -04:00
signal_list : constant array ( core . signal_code ) of access procedure := (
2024-04-30 14:20:30 -04:00
core . signal_up => core . move_camera_up ' access ,
core . signal_down => core . move_camera_down ' access ,
core . signal_left => core . move_camera_left ' access ,
core . signal_right => core . move_camera_right ' access ,
2024-05-03 07:55:17 -04:00
--~core.signal_a => show_attribute_menu'access,
--~core.signal_s => show_skill_menu'access,
--~core.signal_r => show_resource_menu'access,
--~core.signal_u => show_unit_menu'access,
--~core.signal_m => show_might_menu'access,
--~core.signal_n => show_magic_menu'access,
2024-04-30 19:58:38 -04:00
core . signal_v => ui_main_style ' access ,
2024-05-03 07:55:17 -04:00
--~core.signal_grave => hide_top_menu'access,
2024-04-27 14:38:16 -04:00
core . signal_kp_add => zoom_in ' access ,
core . signal_kp_subtract => zoom_out ' access ,
2024-05-01 00:16:19 -04:00
others => core . idle ' access
2024-03-16 06:52:32 -04:00
) ;
2024-03-16 06:14:28 -04:00
2024-05-03 06:49:12 -04:00
a , b , c : core . sprite ;
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-03-17 15:15:18 -04:00
core . initialize ;
2024-02-15 21:03:09 -05:00
ui . configure ;
2024-03-11 14:37:26 -04:00
2024-04-26 18:25:29 -04:00
core . play ( core . import_song ( core . c_string ( "./song/main_menu.ogg" ) ) . index ) ;
2024-03-11 14:37:26 -04:00
2024-03-17 17:52:59 -04:00
attribute . configure ;
skill . configure ;
resource . configure ;
2024-04-26 16:28:01 -04:00
--~might.configure;
--~magic.configure;
2024-04-25 03:46:07 -04:00
item . configure ;
unit . configure ;
construction . configure ;
2024-04-25 00:27:13 -04:00
chad . configure ;
2024-04-25 03:46:07 -04:00
world . configure ;
2024-03-22 11:08:37 -04:00
ai . configure ;
2024-03-17 17:52:59 -04:00
2024-05-03 05:28:44 -04:00
world . make ( world . grass , 140 , 120 ) ;
2024-02-15 21:03:09 -05:00
2024-03-21 19:03:15 -04:00
core . dash ;
2024-03-11 08:42:25 -04:00
core . echo ( core . success , "Successfully initialized game data, entering main gameplay loop." ) ;
2024-03-21 19:03:15 -04:00
core . dash ;
2024-03-11 08:42:25 -04:00
2024-05-03 06:10:13 -04:00
for index in screen_view loop
screen_view_icon ( index ) := core . import_sprite ( "./sprite/ui/icon/" & core . lowercase ( screen_view ' image ( index ) ) & ".png" , 1 , 1 ) ;
end loop ;
2024-05-03 06:49:12 -04:00
a := core . import_sprite ( "./sprite/magic/fire/fireball.png" , 1 , 1 ) ;
b := core . import_sprite ( "./sprite/magic/light/heal.png" , 1 , 1 ) ;
c := core . import_sprite ( "./sprite/magic/dark/torment.png" , 1 , 1 ) ;
2024-05-03 07:55:17 -04:00
ui . active := ui . imp ;
2024-03-16 08:08:50 -04:00
------------------------------------------------------------------------------------------
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-05-03 07:55:17 -04:00
if not screen_view_list ( status_preview_panel ) then
side_panel := 0 ;
else
side_panel := core . window_width / 4 ;
end if ;
--
2024-05-01 15:19:12 -04:00
preview_width := core . window_width - side_panel ;
preview_height := core . window_height - text_box_height ;
text_box_height := 32 ;
--
2024-05-03 05:28:44 -04:00
core . camera . x := core . clip ( core . camera . x , 0 , world . map . width - 1 ) ;
core . camera . y := core . clip ( core . camera . y , 0 , world . map . height - 1 ) ;
2024-02-20 10:26:49 -05:00
--
2024-04-27 03:49:02 -04:00
world . draw ;
2024-02-20 10:26:49 -05:00
--
2024-05-03 07:55:17 -04:00
if screen_view_list ( map_preview_panel ) then
ui . draw_menu ( 0 , 0 , preview_width , preview_height ) ;
end if ;
--
if screen_view_list ( status_preview_panel ) then
ui . draw_tiny_menu ( preview_width , 0 , side_panel , preview_height ) ;
ui . draw_state_box ( preview_width + 32 , 32 ) ;
end if ;
--
if screen_view_list ( text_box_panel ) then
ui . draw_help_box ( 0 , core . window_height - text_box_height , core . window_width - core . icon * ( screen_view ' pos ( screen_view ' last ) + 1 ) , text_box_height ) ;
end if ;
--
2024-05-03 06:10:13 -04:00
for index in screen_view loop
ui . draw_icon ( screen_view_icon ( index ) , screen_view_text ( index ) ,
core . window_width - core . icon * ( screen_view ' pos ( screen_view ' last ) + 1 ) + core . icon * screen_view ' pos ( index ) ,
core . window_height - text_box_height ,
screen_view_show ( index ) ) ;
end loop ;
2024-03-10 16:41:31 -04:00
--
2024-03-16 08:08:50 -04:00
signal_list ( core . signal_code ' val ( core . signal_mode ) ) . all ;
--
2024-04-23 16:33:07 -04:00
--~magic.menu (0, 0, true);
--~might.menu (0, 0, true);
2024-03-24 09:14:54 -04:00
--
2024-04-29 04:56:47 -04:00
--~ui.draw_menu (60, 60, 256, 256);
--~ui.draw_tiny_menu (360, 60, 256, 256);
2024-04-27 12:34:16 -04:00
--
2024-05-03 07:55:17 -04:00
--~menu_render;
2024-03-16 08:08:50 -04:00
--
2024-05-03 06:49:12 -04:00
core . draw ( a , 64 * 1 , core . window_height - 56 - 64 ) ;
core . draw ( b , 64 * 2 , core . window_height - 56 - 64 ) ;
core . draw ( c , 64 * 3 , core . window_height - 56 - 64 ) ;
ui . draw_icon_menu ( "" , 64 * 1 , core . window_height - 56 - 64 , 64 , 64 , null ) ;
ui . draw_icon_menu ( "" , 64 * 2 , core . window_height - 56 - 64 , 64 , 64 , null ) ;
ui . draw_icon_menu ( "" , 64 * 3 , core . window_height - 56 - 64 , 64 , 64 , null ) ;
ui . draw_fill_bar ( 64 * 4 , core . window_height - 56 , 320 , 0.7 ) ;
2024-05-01 09:55:56 -04:00
--
2024-05-03 05:28:44 -04:00
chad . draw_alice ;
2024-05-01 14:41:55 -04:00
--
2024-05-01 09:26:06 -04:00
ui . synchronize ;
2024-02-15 21:03:09 -05:00
end loop gameplay ;
2024-03-16 08:08:50 -04:00
------------------------------------------------------------------------------------------
2024-02-16 09:59:19 -05:00
2024-03-17 15:15:18 -04:00
core . deinitialize ;
2024-03-21 19:03:15 -04:00
core . dash ;
2024-02-15 21:03:09 -05:00
end main ;