From 1e75a583e4a12df54c1f8b08e63a5218a9c0691c Mon Sep 17 00:00:00 2001 From: xolatile Date: Sun, 9 Jun 2024 19:58:49 -0400 Subject: [PATCH] Refactored landmarks... --- source/landmark.ads | 8 ++++++++ source/world.adb | 53 ++++++++++++++++++++++++++++------------------------- source/world.ads | 6 +++--- 3 files changed, 39 insertions(+), 28 deletions(-) diff --git a/source/landmark.ads b/source/landmark.ads index 928f888..bc9caf3 100644 --- a/source/landmark.ads +++ b/source/landmark.ads @@ -25,6 +25,14 @@ package landmark is frames : integer; end record; + type information is record + index : enumeration; + x : integer; + y : integer; + end record; + + type informations is array (natural range <>) of information; + ------------------------------------------------------------------------------------------ count : constant natural := enumeration'pos (enumeration'last) + 1; diff --git a/source/world.adb b/source/world.adb index 55a19e5..f7ba86b 100644 --- a/source/world.adb +++ b/source/world.adb @@ -137,15 +137,15 @@ package body world is map.chad_limit := chad_limit; map.chad_count := 0; -- - map.tiles := new integer_matrix (0 .. map.width - 1, 0 .. map.height - 1); - map.clips := new boolean_matrix (0 .. map.width - 1, 0 .. map.height - 1); - map.views := new boolean_matrix (0 .. map.width - 1, 0 .. map.height - 1); - map.landmarks := new entity_array (1 .. landmark_limit); - map.locations := new entity_array (1 .. location_limit); - map.constructions := new entity_array (1 .. construction_limit); - map.equipments := new entity_array (1 .. equipment_limit); - map.units := new entity_array (1 .. unit_limit); - map.chads := new chad.informations (1 .. map.chad_limit); + map.tiles := new integer_matrix (0 .. map.width - 1, 0 .. map.height - 1); + map.clips := new boolean_matrix (0 .. map.width - 1, 0 .. map.height - 1); + map.views := new boolean_matrix (0 .. map.width - 1, 0 .. map.height - 1); + map.landmarks := new landmark.informations (1 .. landmark_limit); + map.locations := new entity_array (1 .. location_limit); + map.constructions := new entity_array (1 .. construction_limit); + map.equipments := new entity_array (1 .. equipment_limit); + map.units := new entity_array (1 .. unit_limit); + map.chads := new chad.informations (1 .. map.chad_limit); -- for x in 0 .. width - 1 loop for y in 0 .. height - 1 loop @@ -172,8 +172,7 @@ package body world is end loop; -- for index in 1 .. landmark_limit loop - map.landmarks (index).index := core.random (0, landmark.count - 1); - map.landmarks (index).state := 0; + map.landmarks (index).index := landmark.enumeration'val (core.random (0, landmark.count - 1)); <> map.landmarks (index).x := core.random (6, map.width - 6); map.landmarks (index).y := core.random (6, map.height - 6); @@ -182,9 +181,9 @@ package body world is goto repeat_landmark_generation; end if; -- - if landmark.description (landmark.enumeration'val (map.landmarks (index).index)).clip then - declare reach_x : constant natural := landmark.game (landmark.enumeration'val (map.landmarks (index).index)).width / core.base; - reach_y : constant natural := landmark.game (landmark.enumeration'val (map.landmarks (index).index)).height / core.base; + if landmark.description (map.landmarks (index).index).clip then + declare reach_x : constant natural := landmark.game (map.landmarks (index).index).width / core.base; + reach_y : constant natural := landmark.game (map.landmarks (index).index).height / core.base; begin for x in 0 .. reach_x - 1 loop for y in 0 .. reach_y - 1 loop @@ -273,7 +272,7 @@ package body world is ------------------------------------------------------------------------------------------ procedure save (file_name : in string) is - procedure save_entity (here : in core.io.file_type; data : in entity_description) is + procedure save_entity (here : in core.io.file_type; data : in entity) is begin core.io.write (here, data.index); core.io.write (here, data.state); @@ -299,7 +298,9 @@ package body world is end loop; end loop; -- - for index in 1 .. landmark_limit loop save_entity (file, map.landmarks (index)); end loop; + for index in 1 .. landmark_limit loop core.io.write (file, landmark.enumeration'pos (map.landmarks (index).index)); end loop; + for index in 1 .. landmark_limit loop core.io.write (file, map.landmarks (index).x); end loop; + for index in 1 .. landmark_limit loop core.io.write (file, map.landmarks (index).y); end loop; for index in 1 .. location_limit loop save_entity (file, map.locations (index)); end loop; for index in 1 .. construction_limit loop save_entity (file, map.constructions (index)); end loop; for index in 1 .. equipment_limit loop save_entity (file, map.equipments (index)); end loop; @@ -348,7 +349,7 @@ package body world is ------------------------------------------------------------------------------------------ procedure load (file_name : in string) is - procedure load_entity (here : in core.io.file_type; data : out entity_description) is + procedure load_entity (here : in core.io.file_type; data : out entity) is begin core.io.read (here, data.index); core.io.read (here, data.state); @@ -375,7 +376,9 @@ package body world is end loop; end loop; -- - for index in 1 .. landmark_limit loop load_entity (file, map.landmarks (index)); end loop; + for index in 1 .. landmark_limit loop core.io.read (file, this); map.landmarks (index).index := landmark.enumeration'val (this); end loop; + for index in 1 .. landmark_limit loop core.io.read (file, map.landmarks (index).x); end loop; + for index in 1 .. landmark_limit loop core.io.read (file, map.landmarks (index).y); end loop; for index in 1 .. location_limit loop load_entity (file, map.locations (index)); end loop; for index in 1 .. construction_limit loop load_entity (file, map.constructions (index)); end loop; for index in 1 .. equipment_limit loop load_entity (file, map.equipments (index)); end loop; @@ -513,13 +516,13 @@ package body world is end loop; -- for index in 1 .. landmark_limit loop - core.render_image (data => landmark.game (landmark.enumeration'val (map.landmarks (index).index)), + core.render_image (data => landmark.game (map.landmarks (index).index), x => map.landmarks (index).x * core.base, y => map.landmarks (index).y * core.base, u => 0, v => 0, - width => landmark.game (landmark.enumeration'val (map.landmarks (index).index)).width, - height => landmark.game (landmark.enumeration'val (map.landmarks (index).index)).height); + width => landmark.game (map.landmarks (index).index).width, + height => landmark.game (map.landmarks (index).index).height); end loop; -- for index in 1 .. location_limit loop @@ -846,7 +849,7 @@ package body world is if map.views (map.landmarks (index).x, map.landmarks (index).y) and map.landmarks (index).x > view_from.x and map.landmarks (index).x < view_from.x + view_to.x and map.landmarks (index).y > view_from.y and map.landmarks (index).y < view_from.y + view_to.y then - core.draw (data => landmark.game (landmark.enumeration'val (map.landmarks (index).index)), + core.draw (data => landmark.game (map.landmarks (index).index), x => offset.x + (map.landmarks (index).x - core.camera.x) * core.base * core.zoom, y => offset.y + (map.landmarks (index).y - core.camera.y) * core.base * core.zoom); -- @@ -854,11 +857,11 @@ package body world is -- if core.cursor_inside (x => offset.x + (map.landmarks (index).x - core.camera.x) * core.base * core.zoom, y => offset.y + (map.landmarks (index).y - core.camera.y) * core.base * core.zoom, - width => landmark.game (landmark.enumeration'val (map.landmarks (index).index)).width, - height => landmark.game (landmark.enumeration'val (map.landmarks (index).index)).height) + width => landmark.game (map.landmarks (index).index).width, + height => landmark.game (map.landmarks (index).index).height) and core.cursor_mode = core.cursor_middle and not ui.prioritize then - core.write_text_box (landmark.description (landmark.enumeration'val (map.landmarks (index).index)).name.all); + core.write_text_box (landmark.description (map.landmarks (index).index).name.all); end if; end if; end loop; diff --git a/source/world.ads b/source/world.ads index 0466785..7cf6fd5 100644 --- a/source/world.ads +++ b/source/world.ads @@ -12,7 +12,7 @@ package world is ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - type entity_description is record + type entity is record index : natural; state : natural; x, y : integer; @@ -20,7 +20,7 @@ package world is type integer_matrix is array (natural range <>, natural range <>) of integer; type boolean_matrix is array (natural range <>, natural range <>) of boolean; - type entity_array is array (natural range <>) of entity_description; + type entity_array is array (natural range <>) of entity; type definition is record kind : biome.enumeration; @@ -31,7 +31,7 @@ package world is tiles : access integer_matrix; clips : access boolean_matrix; views : access boolean_matrix; - landmarks : access entity_array; + landmarks : access landmark.informations; locations : access entity_array; constructions : access entity_array; equipments : access entity_array;