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-05-08 15:43:44 -04:00
--~with core, ui, effect, attribute, skill, resource, faction, might, magic, item, unit, construction, chad, deity, world, ai;
with core , ui , effect , attribute , skill , resource , faction , item , unit , construction , chad , world ;
2024-02-15 21:03:09 -05:00
2024-05-08 16:45:08 -04:00
use core ;
2024-05-09 12:52:23 -04:00
--~with Ada.Text_IO; -- For text input/output operations
--~with Ada.Text_IO.Text_Streams; -- For text file handling
--~with Ada.Strings.Unbounded; -- For unbounded string handling
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-08 16:45:08 -04:00
view_icon : array ( view ) of sprite := ( others => ( others => 0 ) ) ;
view_list : array ( view ) of boolean := ( others => true ) ;
view_text : array ( view ) of long_string := (
2024-05-03 06:10:13 -04:00
"Toggle map preview panel. " ,
"Toggle status preview panel. " ,
"Toggle text box panel. "
) ;
2024-05-08 16:45:08 -04:00
procedure swap_map_preview_panel is begin view_list ( map_preview_panel ) := not view_list ( map_preview_panel ) ; end swap_map_preview_panel ;
procedure swap_status_preview_panel is begin view_list ( status_preview_panel ) := not view_list ( status_preview_panel ) ; end swap_status_preview_panel ;
procedure swap_text_box_panel is begin view_list ( text_box_panel ) := not view_list ( text_box_panel ) ; 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-09 09:11:26 -04:00
game_title : sprite ;
ashland_preview : sprite ;
2024-05-03 06:10:13 -04:00
------------------------------------------------------------------------------------------
2024-05-08 16:45:08 -04:00
procedure check_move_camera_up is
2024-05-06 13:59:08 -04:00
begin
2024-05-08 16:45:08 -04:00
move_camera_up ;
camera . y := clip ( camera . y , 0 , world . map . height - 1 ) ;
if world . map . clips ( camera . x , camera . y ) then
increment ( camera . y ) ;
2024-05-06 13:59:08 -04:00
end if ;
2024-05-08 16:45:08 -04:00
end check_move_camera_up ;
2024-05-06 13:59:08 -04:00
2024-05-08 16:45:08 -04:00
procedure check_move_camera_down is
2024-05-06 13:59:08 -04:00
begin
2024-05-08 16:45:08 -04:00
move_camera_down ;
camera . y := clip ( camera . y , 0 , world . map . height - 1 ) ;
if world . map . clips ( camera . x , camera . y ) then
decrement ( camera . y ) ;
2024-05-06 13:59:08 -04:00
end if ;
2024-05-08 16:45:08 -04:00
end check_move_camera_down ;
2024-05-06 13:59:08 -04:00
2024-05-08 16:45:08 -04:00
procedure check_move_camera_left is
2024-05-06 13:59:08 -04:00
begin
2024-05-08 16:45:08 -04:00
move_camera_left ;
camera . x := clip ( camera . x , 0 , world . map . width - 1 ) ;
if world . map . clips ( camera . x , camera . y ) then
increment ( camera . x ) ;
2024-05-06 13:59:08 -04:00
end if ;
2024-05-08 16:45:08 -04:00
end check_move_camera_left ;
2024-05-06 13:59:08 -04:00
2024-05-08 16:45:08 -04:00
procedure check_move_camera_right is
2024-05-06 13:59:08 -04:00
begin
2024-05-08 16:45:08 -04:00
move_camera_right ;
camera . x := clip ( camera . x , 0 , world . map . width - 1 ) ;
if world . map . clips ( camera . x , camera . y ) then
decrement ( camera . x ) ;
2024-05-06 13:59:08 -04:00
end if ;
2024-05-08 16:45:08 -04:00
end check_move_camera_right ;
2024-05-06 13:59:08 -04:00
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-08 16:45:08 -04:00
procedure zoom_in is begin zoom := 2 ; end zoom_in ;
procedure zoom_out is begin zoom := 1 ; end zoom_out ;
signal_list : constant array ( signal_code ) of access procedure := (
signal_up => check_move_camera_up ' access ,
signal_down => check_move_camera_down ' access ,
signal_left => check_move_camera_left ' access ,
signal_right => check_move_camera_right ' access ,
signal_v => ui_main_style ' access ,
signal_kp_add => zoom_in ' access ,
signal_kp_subtract => zoom_out ' access ,
2024-05-09 05:07:20 -04:00
others => idle_skip ' access
2024-03-16 06:52:32 -04:00
) ;
2024-03-16 06:14:28 -04:00
2024-05-08 16:17:47 -04:00
------------------------------------------------------------------------------------------
procedure introduction is
begin
2024-05-09 09:11:26 -04:00
draw ( ashland_preview , center_x ( ashland_preview . width * 2 ) , center_y ( ashland_preview . height * 2 ) , factor => 2 ) ;
draw ( game_title , center_x ( game_title . width * 2 ) , center_y ( game_title . height * 2 ) , factor => 2 ) ;
--
write ( "[-- Please press Spacebar to continue]" , 0 , center_y ( 24 ) , ( 102 , 102 , 102 , 255 ) ) ;
2024-05-08 16:17:47 -04:00
end introduction ;
------------------------------------------------------------------------------------------
2024-05-09 12:52:23 -04:00
--~File : Ada.Text_IO.File_Type;
--~Line : Ada.Strings.Unbounded.unbounded_string;
2024-05-09 11:03:39 -04:00
procedure main_menu is
begin
draw ( ashland_preview , center_x ( ashland_preview . width * 2 ) , center_y ( ashland_preview . height * 2 ) , factor => 2 ) ;
draw ( game_title , center_x ( game_title . width * 2 ) , center_y ( game_title . height * 2 ) , factor => 2 ) ;
--
write ( "Main Menu" , 0 , 0 ) ;
2024-05-09 12:52:23 -04:00
--~write (Ada.Strings.Unbounded.To_String (Line), 64, 64);
2024-05-09 11:28:40 -04:00
--
2024-05-09 12:52:23 -04:00
ui . draw_check_box ( 0 , 32 , view_list ( map_preview_panel ) , "map_preview_panel" ) ;
ui . draw_check_box ( 0 , 64 , view_list ( status_preview_panel ) , "status_preview_panel" ) ;
ui . draw_check_box ( 0 , 96 , view_list ( text_box_panel ) , "text_box_panel" ) ;
2024-05-09 11:03:39 -04:00
end main_menu ;
------------------------------------------------------------------------------------------
2024-05-08 16:17:47 -04:00
procedure gameplay is
begin
if not view_list ( status_preview_panel ) then
side_panel := 0 ;
else
2024-05-08 16:45:08 -04:00
side_panel := window_width / 4 ;
2024-05-08 16:17:47 -04:00
end if ;
--
2024-05-08 16:45:08 -04:00
preview_width := window_width - side_panel ;
preview_height := window_height - text_box_height ;
2024-05-08 16:17:47 -04:00
text_box_height := 32 ;
--
world . draw ;
--
if view_list ( map_preview_panel ) then
ui . draw_menu ( 0 , 0 , preview_width , preview_height ) ;
end if ;
--
if 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 view_list ( text_box_panel ) then
2024-05-08 16:45:08 -04:00
ui . draw_help_box ( 0 , window_height - text_box_height , window_width - icon * ( view ' pos ( view ' last ) + 1 ) , text_box_height ) ;
2024-05-08 16:17:47 -04:00
end if ;
--
for index in view loop
ui . draw_icon ( view_icon ( index ) , view_text ( index ) ,
2024-05-08 16:45:08 -04:00
window_width - icon * ( view ' pos ( view ' last ) + 1 ) + icon * view ' pos ( index ) ,
window_height - text_box_height ,
2024-05-08 16:17:47 -04:00
view_show ( index ) ) ;
end loop ;
--
2024-05-08 16:45:08 -04:00
signal_list ( signal_mode ) . all ;
2024-05-08 16:17:47 -04:00
--
--~magic.menu (0, 0, true);
--~might.menu (0, 0, true);
--
chad . draw_alice ;
--
ui . synchronize ;
end gameplay ;
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-05-09 12:52:23 -04:00
--~Ada.Text_IO.Open(File, Ada.Text_IO.In_File, "./design/core.txt"); -- Open the file for reading
--~while not Ada.Text_IO.End_Of_File(File) loop
--~Line := Ada.Strings.Unbounded.To_Unbounded_String (Ada.Strings.Unbounded.To_String (Line) & Character'Val (10) & Character'Val (10) & Ada.Text_IO.Get_Line(File)); -- Read a line from the file
--~Line := Line & Ada.Strings.Unbounded.To_Unbounded_String (Ada.Text_IO.Get_Line(File)); -- Read a line from the file
--~Ada.Text_IO.Put_Line(Ada.Strings.Unbounded.To_String (Line)); -- Output the line to the console
--~Ada.Text_IO.Put_Line (">");
--~end loop;
--~Ada.Text_IO.Close(File); -- Close the file after reading
2024-05-08 16:45:08 -04:00
dash ;
echo ( comment , "Copyright (C) 2024 -- Ognjen 'xolatile' Milan Robovic" ) ;
echo ( comment , "Version -- 1.0.0" ) ;
echo ( comment , "License -- GNU/GPLv3+" ) ;
echo ( 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." ) ;
dash ;
2024-03-11 08:42:25 -04:00
2024-05-08 16:45:08 -04:00
initialize ;
2024-03-17 15:15:18 -04:00
2024-02-15 21:03:09 -05:00
ui . configure ;
2024-03-11 14:37:26 -04:00
2024-05-08 16:45:08 -04:00
play ( import_song ( 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-05-08 15:43:44 -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-05-08 16:45:08 -04:00
dash ;
echo ( success , "Successfully initialized game data, entering main gameplay loop." ) ;
dash ;
2024-03-11 08:42:25 -04:00
2024-05-04 07:22:16 -04:00
for index in view loop
2024-05-08 16:45:08 -04:00
view_icon ( index ) := import_sprite ( "./sprite/ui/icon/" & 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-08 16:45:08 -04:00
camera := ( 1 , 1 ) ;
2024-05-03 10:39:28 -04:00
2024-05-09 09:11:26 -04:00
game_title := import_sprite ( "./sprite/game_title.png" , 1 , 1 ) ;
ashland_preview := import_sprite ( "./sprite/ashland_preview.png" , 1 , 1 ) ;
2024-03-16 08:08:50 -04:00
------------------------------------------------------------------------------------------
2024-05-08 16:17:47 -04:00
introduction_loop : loop
2024-05-08 16:45:08 -04:00
synchronize ;
2024-02-15 21:03:09 -05:00
--
2024-05-08 16:45:08 -04:00
exit when signal_mode = signal_space ;
2024-03-16 08:08:50 -04:00
--
2024-05-08 16:17:47 -04:00
introduction ;
end loop introduction_loop ;
2024-05-09 11:03:39 -04:00
main_menu_loop : loop
synchronize ;
--
exit when signal_mode = signal_a ;
--
main_menu ;
end loop main_menu_loop ;
2024-05-08 16:17:47 -04:00
gameplay_loop : loop
2024-05-08 16:45:08 -04:00
synchronize ;
2024-03-24 09:14:54 -04:00
--
2024-05-08 16:45:08 -04:00
exit when engine_active = false ;
2024-05-01 14:41:55 -04:00
--
2024-05-08 16:17:47 -04:00
gameplay ;
end loop gameplay_loop ;
2024-02-15 21:03:09 -05:00
2024-05-09 14:52:19 -04:00
mapshot ( "./test.png" ) ;
2024-03-16 08:08:50 -04:00
------------------------------------------------------------------------------------------
2024-02-16 09:59:19 -05:00
2024-05-08 16:45:08 -04:00
deinitialize ;
2024-03-17 15:15:18 -04:00
2024-05-08 16:45:08 -04:00
dash ;
2024-03-21 19:03:15 -04:00
2024-02-15 21:03:09 -05:00
end main ;