xhads/source/core.ads
2024-06-09 18:39:01 -04:00

228 lines
9.2 KiB
Ada

-- Copyright (c) 2024 - Ognjen 'xolatile' Milan Robovic
--
-- GNU General Public Licence (version 3 or later)
with ada.text_io, ada.strings.unbounded, interfaces.c, ray, system;
use ada.text_io, ada.strings.unbounded, interfaces.c, ray, system;
with ada.sequential_io;
package core is
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
type echo_status is (
failure, warning, success, comment, import, export
);
type cursor_code is (
cursor_none, cursor_left, cursor_right, cursor_middle
);
type signal_code is (
signal_none, signal_space, signal_0, signal_1, signal_2, signal_3,
signal_4, signal_5, signal_6, signal_7, signal_8, signal_9,
signal_a, signal_b, signal_c, signal_d, signal_e, signal_f,
signal_g, signal_h, signal_i, signal_j, signal_k, signal_l,
signal_m, signal_n, signal_o, signal_p, signal_q, signal_r,
signal_s, signal_t, signal_u, signal_v, signal_w, signal_x,
signal_y, signal_z, signal_grave, signal_escape, signal_enter, signal_tab,
signal_backspace, signal_right, signal_left, signal_down, signal_up, signal_kp_0,
signal_kp_1, signal_kp_2, signal_kp_3, signal_kp_4, signal_kp_5, signal_kp_6,
signal_kp_7, signal_kp_8, signal_kp_9, signal_kp_subtract, signal_kp_add, signal_left_shift,
signal_left_control, signal_f1, signal_f2, signal_f3, signal_f4, signal_f5,
signal_f6, signal_f7, signal_f8, signal_f9, signal_f10, signal_f11,
signal_f12
);
type animation is (
idle, walk, melee, shoot, wounded, dead
);
------------------------------------------------------------------------------------------
type colour_range is range 0 .. 2 ** 8 - 1;
for colour_range'size use 8;
type colour is record r, g, b, a : colour_range; end record;
type pointer is access procedure;
type address is new ray.pointer;
type vector is record x, y : integer; end record;
type sprite is record index, width, height, frames, states : integer; end record;
type font is record index, scale, space : integer; end record;
type song is record index : integer; end record;
type point is record
value, limit : natural;
end record;
type string_box_data is record
data : access string := null;
text : unbounded_string := null_unbounded_string;
size : vector := (0, 0);
end record;
package io is new ada.sequential_io (integer);
subtype unstring is ada.strings.unbounded.unbounded_string;
--
function bound (data : in unstring) return string renames ada.strings.unbounded.to_string;
function unbound (data : in string) return unstring renames ada.strings.unbounded.to_unbounded_string;
------------------------------------------------------------------------------------------
terminator : constant character := character'val (0);
tabulator : constant character := character'val (9);
line_feed : constant character := character'val (10);
folder : constant string := ".";
icon : constant natural := 32;
base : constant natural := 16;
gameplay_framerate : constant natural := 60;
animation_framerate : constant natural := 4;
echo_mark : constant array (echo_status) of boolean := (
failure => true,
warning => true,
success => true,
comment => true,
import => true,
export => true
);
engine_active : boolean := false;
cursor : vector := (0, 0);
camera : vector := (0, 0);
cursor_mode : cursor_code := cursor_none;
signal_mode : signal_code := signal_none;
framerate : integer := 0;
global_time : natural := 0;
gameplay_time : natural := 0;
animation_time : natural := 0;
wheel : float := 0.0;
zoom : natural := 1;
help_box : string_box_data;
text_box : string_box_data;
global_image : ray.image;
end_turn : boolean := false;
------------------------------------------------------------------------------------------
function "=" (a, b : in signal_code) return boolean;
function "=" (a, b : in cursor_code) return boolean;
function "/" (a, b : in signal_code) return boolean;
function "/" (a, b : in cursor_code) return boolean;
function "+" (data : in point; modifier : in natural) return point;
function "-" (data : in point; modifier : in natural) return point;
function "*" (data : in point; modifier : in natural) return point;
function "/" (data : in point; modifier : in natural) return point;
procedure echo ( status : in echo_status; text : in string);
procedure echo_when (condition : in boolean; status : in echo_status; text : in string);
procedure dash;
procedure semi_dash;
function time return float;
function compress (data : in address; size : in integer; used : out integer) return address;
function decompress (data : in address; size : in integer; used : out integer) return address;
--~procedure compress_file (file_path : in string);
--~procedure decompress_file (file_path : in string);
procedure zoom_in;
procedure zoom_out;
function c_string (ada_string : in string) return string;
function string_width (data : in string) return natural;
function string_height (data : in string) return natural;
function random (minimum, maximum : in integer) return integer;
procedure clip (value : in out integer; minimum, maximum : in integer);
function lowercase (text : in string) return string;
function window_width return integer;
function window_height return integer;
function center_x (width : in integer) return integer;
function center_y (height : in integer) return integer;
function cursor_inside (x, y, width, height : in integer) return boolean;
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;
procedure import_text (data : in out string_box_data; file_path : in string);
procedure create_image (width, height : in integer);
procedure render_image (data : in sprite; x, y, u, v, width, height : in integer);
procedure draw_pixel (x, y : in integer; tint : in colour);
procedure export_image (file_path : in string);
procedure draw (data : in sprite := (others => 0);
x : in integer := 0;
y : in integer := 0;
u : in integer := 0;
v : in integer := 0;
width : in integer := 0;
height : in integer := 0;
ignore : in boolean := false;
state : in animation := idle;
factor : in integer := zoom;
tint : in colour := (others => 255));
procedure draw_horizontally (data : in sprite; x, y, width, factor : in integer; tint : in colour := (others => 255));
procedure draw_vertically (data : in sprite; x, y, height, factor : in integer; tint : in colour := (others => 255));
procedure write (text : in string := "";
x : in integer := 0;
y : in integer := 0;
tint : in colour := (others => 255);
size : in integer := 0;
data : in font := (others => 0));
procedure play (index : in integer);
procedure stop (index : in integer);
procedure overlay;
function read_help_box return string;
function read_text_box return string;
procedure write_help_box (text : in string);
procedure write_text_box (text : in string);
procedure save_point (here : in core.io.file_type; data : in point);
procedure load_point (here : in core.io.file_type; data : out point);
procedure increment (value : in out integer; super : in natural := 1);
procedure decrement (value : in out integer; super : in natural := 1);
procedure idle_skip;
procedure toggle_fullscreen;
procedure initialize;
procedure deinitialize;
procedure synchronize;
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
end core;