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-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 08:08:50 -04:00
------------------------------------------------------------------------------------------
2024-04-25 03:46:07 -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
if menu_count > 0 then
core . overlay ;
end if ;
--
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
------------------------------------------------------------------------------------------
procedure idle is begin null ; end idle ;
procedure move_camera_up is begin core . camera . y := core . camera . y - 1 ; end move_camera_up ;
procedure move_camera_down is begin core . camera . y := core . camera . y + 1 ; end move_camera_down ;
procedure move_camera_left is begin core . camera . x := core . camera . x - 1 ; end move_camera_left ;
procedure move_camera_right is begin core . camera . x := core . camera . x + 1 ; end move_camera_right ;
2024-04-25 03:46:07 -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 ;
procedure hide_top_menu is begin menu_remove ; end hide_top_menu ;
2024-03-16 08:08:50 -04:00
signal_list : constant array ( core . signal_code ) of access procedure := (
2024-03-16 06:52:32 -04:00
core . signal_up => move_camera_up ' access ,
core . signal_down => move_camera_down ' access ,
core . signal_left => move_camera_left ' access ,
core . signal_right => move_camera_right ' access ,
2024-04-25 03:46:07 -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 ,
core . signal_grave => hide_top_menu ' access ,
2024-03-16 06:52:32 -04:00
others => idle ' access
) ;
2024-03-16 06:14:28 -04:00
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-04-26 18:25:29 -04:00
world . make ( world . ash , 120 , 100 ) ;
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-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-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-03-21 19:03:15 -04:00
ui . active := ( if core . cursor_mode = 3 then ui . default else ui . steam ) ;
2024-03-17 17:52:59 -04:00
--
2024-04-26 19:46:09 -04:00
core . camera . x := core . clip ( core . camera . x , 0 , world . width - preview_width / core . base ) ;
core . camera . y := core . clip ( core . camera . y , 0 , world . height - preview_height / core . base ) ;
2024-02-20 10:26:49 -05:00
--
2024-04-26 18:25:29 -04:00
world . draw ( preview_x , preview_y , preview_width - 2 * preview_x , preview_height - 2 * preview_y - 32 ) ;
2024-02-20 10:26:49 -05:00
--
2024-03-20 07:47:59 -04: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-17 17:52:59 -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 ) ;
--
ui . draw_state_box ( preview_width + 32 , 32 ) ;
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-25 03:46:07 -04:00
menu_render ;
2024-03-16 08:08:50 -04:00
--
2024-04-25 03:46:07 -04:00
ui . write ( menu_count ' image , 16 , 16 ) ;
2024-03-20 07:41:40 -04:00
--
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-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 ;