Prototype game engine for Heroes of Might & Magic, featuring a gameplay plot-twist...
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

126 行
5.1KB

  1. -- Copyright (c) 2024 - Ognjen 'xolatile' Milan Robovic
  2. --
  3. -- GNU General Public Licence (version 3 or later)
  4. with ada.text_io, ada.strings.unbounded;
  5. use ada.text_io, ada.strings.unbounded;
  6. package core is
  7. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  8. type echo_status is (
  9. failure, warning, success, comment, import, export
  10. );
  11. type signal_code is (
  12. signal_none, signal_space, signal_0, signal_1, signal_2, signal_3,
  13. signal_4, signal_5, signal_6, signal_7, signal_8, signal_9,
  14. signal_a, signal_b, signal_c, signal_d, signal_e, signal_f,
  15. signal_g, signal_h, signal_i, signal_j, signal_k, signal_l,
  16. signal_m, signal_n, signal_o, signal_p, signal_q, signal_r,
  17. signal_s, signal_t, signal_u, signal_v, signal_w, signal_x,
  18. signal_y, signal_z, signal_grave, signal_escape, signal_enter, signal_tab,
  19. signal_backspace, signal_right, signal_left, signal_down, signal_up, signal_kp_0,
  20. signal_kp_1, signal_kp_2, signal_kp_3, signal_kp_4, signal_kp_5, signal_kp_6,
  21. signal_kp_7, signal_kp_8, signal_kp_9, signal_kp_subtract, signal_kp_add, signal_left_shift,
  22. signal_left_control
  23. );
  24. subtype short_string is string (1 .. 24);
  25. subtype long_string is string (1 .. 72);
  26. type procedure_pointer is access procedure;
  27. type vector is record x, y : integer; end record;
  28. type sprite is record index, width, height, frames, states : integer; end record;
  29. type font is record index, scale, space : integer; end record;
  30. type song is record index : integer; end record;
  31. type text_box_data is record
  32. data : unbounded_string := null_unbounded_string;
  33. size : vector := (0, 0);
  34. end record;
  35. ------------------------------------------------------------------------------------------
  36. icon : constant natural := 32;
  37. base : constant natural := 16;
  38. gameplay_framerate : constant natural := 60;
  39. animation_framerate : constant natural := 4;
  40. echo_mark : constant array (echo_status) of boolean := (
  41. failure => true,
  42. warning => true,
  43. success => true,
  44. comment => true,
  45. import => true,
  46. export => true
  47. );
  48. engine_active : boolean := false;
  49. cursor : vector := (0, 0);
  50. camera : vector := (0, 0);
  51. cursor_mode : integer := 0;
  52. signal_mode : integer := 0;
  53. framerate : integer := 0;
  54. global_time : natural := 0;
  55. gameplay_time : natural := 0;
  56. animation_time : natural := 0;
  57. zoom : natural := 2;
  58. text_box : text_box_data;
  59. ------------------------------------------------------------------------------------------
  60. procedure echo (status : in echo_status; text : in string);
  61. procedure dash;
  62. procedure semi_dash;
  63. function c_string (ada_string : in string) return string;
  64. function random (minimum, maximum : in integer) return integer;
  65. function clip (value, minimum, maximum : in integer) return integer;
  66. function lowercase (text : in string) return string;
  67. procedure initialize;
  68. procedure deinitialize;
  69. procedure synchronize;
  70. function window_width return integer;
  71. function window_height return integer;
  72. function import_sprite (file_path : in string; frames, states : in integer) return sprite;
  73. function import_font (file_path : in string; scale, space : in integer) return font;
  74. function import_song (file_path : in string) return song;
  75. procedure draw (data : in sprite;
  76. x : in integer := 0;
  77. y : in integer := 0;
  78. u : in integer := 0;
  79. v : in integer := 0;
  80. width : in integer := 0;
  81. height : in integer := 0;
  82. state : in integer := 0);
  83. procedure write (text : in string := "";
  84. x : in integer := 0;
  85. y : in integer := 0;
  86. data : in font);
  87. procedure play (index : in integer);
  88. procedure stop (index : in integer);
  89. procedure overlay;
  90. function read_text_box return string;
  91. procedure write_text_box (text : in string);
  92. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  93. end core;