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-04 07:22:16 -04:00
type view is (
2024-05-03 06:10:13 -04:00
map_preview_panel , status_preview_panel , text_box_panel
) ;
2024-05-07 02:58:56 -04:00
view_icon : array ( view ) of core . sprite := ( others => ( others => 0 ) ) ;
view_list : array ( view ) of boolean := ( others => true ) ;
2024-05-04 07:22:16 -04:00
view_text : array ( view ) of core . long_string := (
2024-05-03 06:10:13 -04:00
"Toggle map preview panel. " ,
"Toggle status preview panel. " ,
"Toggle text box panel. "
) ;
2024-05-04 07:22:16 -04:00
procedure swap_map_preview_panel is begin view_list ( map_preview_panel ) := ( if view_list ( map_preview_panel ) then false else true ) ; end swap_map_preview_panel ;
procedure swap_status_preview_panel is begin view_list ( status_preview_panel ) := ( if view_list ( status_preview_panel ) then false else true ) ; end swap_status_preview_panel ;
procedure swap_text_box_panel is begin view_list ( text_box_panel ) := ( if view_list ( text_box_panel ) then false else true ) ; end swap_text_box_panel ;
2024-05-03 06:10:13 -04:00
2024-05-04 07:22:16 -04:00
view_show : array ( view ) of access procedure := (
swap_map_preview_panel ' access ,
swap_status_preview_panel ' access ,
swap_text_box_panel ' access
2024-05-03 06:10:13 -04:00
) ;
------------------------------------------------------------------------------------------
2024-05-06 13:59:08 -04:00
procedure move_camera_up is
begin
core . move_camera_up ;
2024-05-07 02:58:56 -04:00
core . camera . y := core . clip ( core . camera . y , 0 , world . map . height - 1 ) ;
2024-05-06 13:59:08 -04:00
if world . map . clips ( core . camera . x , core . camera . y ) then
core . increment ( core . camera . y ) ;
end if ;
end move_camera_up ;
procedure move_camera_down is
begin
core . move_camera_down ;
2024-05-07 02:58:56 -04:00
core . camera . y := core . clip ( core . camera . y , 0 , world . map . height - 1 ) ;
2024-05-06 13:59:08 -04:00
if world . map . clips ( core . camera . x , core . camera . y ) then
core . decrement ( core . camera . y ) ;
end if ;
end move_camera_down ;
procedure move_camera_left is
begin
core . move_camera_left ;
2024-05-07 02:58:56 -04:00
core . camera . x := core . clip ( core . camera . x , 0 , world . map . width - 1 ) ;
2024-05-06 13:59:08 -04:00
if world . map . clips ( core . camera . x , core . camera . y ) then
core . increment ( core . camera . x ) ;
end if ;
end move_camera_left ;
procedure move_camera_right is
begin
core . move_camera_right ;
2024-05-07 02:58:56 -04:00
core . camera . x := core . clip ( core . camera . x , 0 , world . map . width - 1 ) ;
2024-05-06 13:59:08 -04:00
if world . map . clips ( core . camera . x , core . camera . y ) then
core . decrement ( core . camera . x ) ;
end if ;
end move_camera_right ;
2024-05-04 07:22:16 -04:00
procedure ui_main_style is
begin
ui . active := ui . style ' val ( ( ui . style ' pos ( ui . active ) + 1 ) mod ( ui . style ' pos ( ui . style ' last ) + 1 ) ) ;
end ui_main_style ;
2024-03-16 08:08:50 -04:00
2024-05-04 07:22:16 -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-05-01 10:16:25 -04:00
2024-03-16 08:08:50 -04:00
signal_list : constant array ( core . signal_code ) of access procedure := (
2024-05-06 08:38:47 -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-30 19:58:38 -04:00
core . signal_v => ui_main_style ' 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-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-07 02:58:56 -04:00
world . make ( world . swamp , 120 , 60 ) ;
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-04 07:22:16 -04:00
for index in view loop
view_icon ( index ) := core . import_sprite ( "./sprite/ui/icon/" & core . lowercase ( view ' image ( index ) ) & ".png" , 1 , 1 ) ;
2024-05-03 06:10:13 -04:00
end loop ;
2024-05-03 07:55:17 -04:00
ui . active := ui . imp ;
2024-05-07 02:58:56 -04:00
core . camera := ( 1 , 1 ) ;
2024-05-03 10:39:28 -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-05-04 07:22:16 -04:00
if not view_list ( status_preview_panel ) then
2024-05-03 07:55:17 -04:00
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-04-27 03:49:02 -04:00
world . draw ;
2024-02-20 10:26:49 -05:00
--
2024-05-04 07:22:16 -04:00
if view_list ( map_preview_panel ) then
2024-05-03 07:55:17 -04:00
ui . draw_menu ( 0 , 0 , preview_width , preview_height ) ;
end if ;
--
2024-05-04 07:22:16 -04:00
if view_list ( status_preview_panel ) then
2024-05-03 07:55:17 -04:00
ui . draw_tiny_menu ( preview_width , 0 , side_panel , preview_height ) ;
ui . draw_state_box ( preview_width + 32 , 32 ) ;
end if ;
--
2024-05-04 07:22:16 -04:00
if view_list ( text_box_panel ) then
ui . draw_help_box ( 0 , core . window_height - text_box_height , core . window_width - core . icon * ( view ' pos ( view ' last ) + 1 ) , text_box_height ) ;
2024-05-03 07:55:17 -04:00
end if ;
--
2024-05-04 07:22:16 -04:00
for index in view loop
ui . draw_icon ( view_icon ( index ) , view_text ( index ) ,
core . window_width - core . icon * ( view ' pos ( view ' last ) + 1 ) + core . icon * view ' pos ( index ) ,
core . window_height - text_box_height ,
view_show ( index ) ) ;
2024-05-03 06:10:13 -04:00
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-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 ;