From 642a0b5046847a9f8acc78ad394f15fd27311b06 Mon Sep 17 00:00:00 2001 From: xolatile Date: Fri, 10 May 2024 22:09:30 -0400 Subject: [PATCH] Some refactoring and experimental work... --- source/core.adb | 16 ++++++++++++++-- source/core.ads | 6 ++++-- source/main.adb | 54 +++++++++++++++++++----------------------------------- source/ray.ads | 31 +++++++++++++++++++++++++++++++ source/ui.ads | 2 ++ 5 files changed, 70 insertions(+), 39 deletions(-) diff --git a/source/core.adb b/source/core.adb index 39db876..4e0b6d2 100644 --- a/source/core.adb +++ b/source/core.adb @@ -195,6 +195,18 @@ package body core is ------------------------------------------------------------------------------------------ + function import_text (file_path : in string) return text_box_data is + this : text_box_data; + begin + this.data := ray.load_text (c_string (file_path)); + this.text := null_unbounded_string; + this.size := (0, 0); + -- + return this; + end import_text; + + ------------------------------------------------------------------------------------------ + procedure create_image (width, height : in integer) is begin global_mapshot := ray.image_colour (width * base, height * base, (0, 0, 0, 255)); @@ -327,14 +339,14 @@ package body core is function read_text_box return string is begin - return to_string (text_box.data); + return to_string (text_box.text); end read_text_box; ------------------------------------------------------------------------------------------ procedure write_text_box (text : in string) is begin - text_box.data := to_unbounded_string (text); + text_box.text := to_unbounded_string (text); end write_text_box; ------------------------------------------------------------------------------------------ diff --git a/source/core.ads b/source/core.ads index 9487119..d73a504 100644 --- a/source/core.ads +++ b/source/core.ads @@ -59,8 +59,9 @@ package core is end record; type text_box_data is record - data : unbounded_string := null_unbounded_string; - size : vector := (0, 0); + data : access string := null; + text : unbounded_string := null_unbounded_string; + size : vector := (0, 0); end record; ------------------------------------------------------------------------------------------ @@ -126,6 +127,7 @@ package core is function import_sprite (file_path : in string; frames, states : in integer) return sprite; function import_font (file_path : in string; scale, space : in integer) return font; function import_song (file_path : in string) return song; + function import_text (file_path : in string) return text_box_data; procedure create_image (width, height : in integer); procedure render_image (data : in sprite; x, y, u, v, width, height : in integer); diff --git a/source/main.adb b/source/main.adb index 66044f7..cff91ca 100644 --- a/source/main.adb +++ b/source/main.adb @@ -9,14 +9,12 @@ with core, ui, effect, attribute, skill, resource, faction, item, unit, construc use core; -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 - procedure main is ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + monospace : font; + side_panel : integer := 0; preview_width : integer := 0; preview_height : integer := 0; @@ -48,8 +46,8 @@ procedure main is swap_text_box_panel'access ); - game_title : sprite; - ashland_preview : sprite; + game_title : sprite; + game_preview : array (world.biome) of sprite; -- sand, grass, rough, snow, swamp ------------------------------------------------------------------------------------------ @@ -91,7 +89,7 @@ procedure main is 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)); + ui.active := ui.style'val ((ui.style'pos (ui.active) + 1) mod ui.style_count); end ui_main_style; procedure zoom_in is begin zoom := 2; end zoom_in; @@ -112,31 +110,24 @@ procedure main is procedure introduction 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); + draw (game_preview (world.ash), center_x (game_preview (world.ash).width * 2), center_y (game_preview (world.ash).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)); + ui.write ("[-- Please press Spacebar to continue]", 0, center_y (24), (102, 102, 102, 255)); end introduction; ------------------------------------------------------------------------------------------ - File : Ada.Text_IO.File_Type; - Line : Ada.Strings.Unbounded.unbounded_string; - - monospace : font; - 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); + draw (game_preview (world.ash), center_x (game_preview (world.ash).width * 2), center_y (game_preview (world.ash).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); + ui.write ("Main Menu", 0, 0); -- 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"); - -- - write (Ada.Strings.Unbounded.To_String (Line), 128, 64, (others => 255), 22, monospace); end main_menu; ------------------------------------------------------------------------------------------ @@ -189,14 +180,6 @@ procedure main is begin - Ada.Text_IO.Open(File, Ada.Text_IO.In_File, "./source/attribute.ads"); -- 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) & 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 - end loop; - Ada.Text_IO.Close(File); -- Close the file after reading - dash; echo (comment, "Copyright (C) 2024 -- Ognjen 'xolatile' Milan Robovic"); echo (comment, "Version -- 1.0.0"); @@ -208,6 +191,8 @@ begin monospace := import_font ("./sprite/ui/monospace.png", 11, 0); + ui.active := ui.main; + ui.configure; play (import_song (c_string ("./song/main_menu.ogg")).index); @@ -224,7 +209,7 @@ begin world.configure; --~ai.configure; - world.make (world.swamp, 240, 180); + world.make (world.grass, 240, 180); dash; echo (success, "Successfully initialized game data, entering main gameplay loop."); @@ -234,12 +219,11 @@ begin view_icon (index) := import_sprite ("./sprite/ui/icon/" & lowercase (view'image (index)) & ".png", 1, 1); end loop; - ui.active := ui.imp; + game_title := import_sprite ("./sprite/game_title.png", 1, 1); - camera := (1, 1); - - game_title := import_sprite ("./sprite/game_title.png", 1, 1); - ashland_preview := import_sprite ("./sprite/ashland_preview.png", 1, 1); + for index in world.biome loop + game_preview (index) := import_sprite ("./sprite/" & lowercase (world.biome'image (index)) & "land_preview.png", 1, 1); + end loop; ------------------------------------------------------------------------------------------ @@ -254,7 +238,7 @@ begin main_menu_loop: loop synchronize; -- - exit when signal_mode = signal_a; + exit when signal_mode = signal_space; -- main_menu; end loop main_menu_loop; diff --git a/source/ray.ads b/source/ray.ads index bd756ba..c601f41 100644 --- a/source/ray.ads +++ b/source/ray.ads @@ -163,6 +163,37 @@ package ray is procedure pause_sound (data : in sound) with import => true, convention => c, external_name => "PauseSound"; procedure resume_sound (data : in sound) with import => true, convention => c, external_name => "ResumeSound"; + --~void ToggleFullscreen(void); + --~void SetWindowIcon(Image image); + --~void SetWindowMinSize(int width, int height); + --~void SetWindowMaxSize(int width, int height); + --~void SetWindowSize(int width, int height); + --~void ShowCursor(void); + --~void HideCursor(void); + --~double GetTime(void); + --~void TakeScreenshot(const char *fileName); + --~void OpenURL(const char *url); + function load_text (file : in string) return access string with import => true, convention => c, external_name => "LoadFileText"; + --~procedure unload_file (data : in access string) with import => true, convention => c, external_name => "UnloadFileText"; + --~bool SaveFileText(const char *fileName, char *text); + --~FilePathList LoadDirectoryFilesEx(const char *basePath, const char *filter, bool scanSubdirs); + --~void UnloadDirectoryFiles(FilePathList files); + --~unsigned char *CompressData(const unsigned char *data, int dataSize, int *compDataSize); + --~unsigned char *DecompressData(const unsigned char *compData, int compDataSize, int *dataSize); + --~void ImageDrawPixel(Image *dst, int posX, int posY, Color color); + --~void SetTextLineSpacing(int spacing); + --~Vector2 MeasureTextEx(Font font, const char *text, float fontSize, float spacing); + --~bool CheckCollisionBoxes(BoundingBox box1, BoundingBox box2); + --~void SetMasterVolume(float volume); + --~Music LoadMusicStream(const char *fileName); + --~void UnloadMusicStream(Music music); + --~void PlayMusicStream(Music music); + --~void PauseMusicStream(Music music); + --~void ResumeMusicStream(Music music); + --~void SetMusicVolume(Music music, float volume); + --~float GetMusicTimeLength(Music music); + --~RLAPI float GetMusicTimePlayed(Music music); + ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ end ray; diff --git a/source/ui.ads b/source/ui.ads index 8d7a7b3..175263b 100644 --- a/source/ui.ads +++ b/source/ui.ads @@ -47,6 +47,8 @@ package ui is ------------------------------------------------------------------------------------------ + style_count : constant natural := style'pos (style'last) + 1; + active : style := main; prioritize : boolean := false;