From 946b3e43b2b17eddd0f70336df47a451e21e6363 Mon Sep 17 00:00:00 2001
From: Yona-TYT <yonatan.el.amigo@gmail.com>
Date: Sun, 27 Nov 2022 23:22:39 -0400
Subject: [PATCH] ADD Get coord list all fields

---
 src/simutrans/script/api/api_factory.cc           | 13 +++++++++++++
 .../script/api/squirrel_types_scenario.awk        |  1 +
 src/simutrans/simfab.cc                           | 15 +++++++++++++++
 src/simutrans/simfab.h                            |  5 +++++
 4 files changed, 34 insertions(+)

diff --git a/src/simutrans/script/api/api_factory.cc b/src/simutrans/script/api/api_factory.cc
index cb2e83e91..dc2688ba0 100644
--- a/src/simutrans/script/api/api_factory.cc
+++ b/src/simutrans/script/api/api_factory.cc
@@ -106,6 +106,13 @@ vector_tpl<koord> const& factory_get_tile_list(fabrik_t *fab)
 	return list;
 }
 
+vector_tpl<grund_t*> const& factory_get_fields_list(fabrik_t *fab)
+{
+	static vector_tpl<grund_t*> list;
+	fab->get_fields_list(list);
+	return list;
+}
+
 vector_tpl<halthandle_t> const& square_get_halt_list(planquadrat_t *plan); // api_tiles.cc
 
 vector_tpl<halthandle_t> const& factory_get_halt_list(fabrik_t *fab)
@@ -345,6 +352,12 @@ void export_factory(HSQUIRRELVM vm)
 	 */
 	register_method(vm, &factory_get_tile_list, "get_tile_list", true);
 
+	/**
+	 * Get list of all tiles occupied by fields belonging to this factory.
+	 * @returns array of tile_x objects
+	 */
+	register_method(vm, &factory_get_fields_list, "get_tile_fields_list", true);
+
 	/**
 	 * Get list of all halts that serve this this factory.
 	 * @returns array of tile_x objects
diff --git a/src/simutrans/script/api/squirrel_types_scenario.awk b/src/simutrans/script/api/squirrel_types_scenario.awk
index ca4c5e309..264b7da07 100644
--- a/src/simutrans/script/api/squirrel_types_scenario.awk
+++ b/src/simutrans/script/api/squirrel_types_scenario.awk
@@ -90,6 +90,7 @@ BEGIN {
 	export_types_scenario["factory_x::get_mail_departed"] = "array<integer>()"
 	export_types_scenario["factory_x::get_mail_arrived"] = "array<integer>()"
 	export_types_scenario["factory_x::get_tile_list"] = "array<coord>()"
+	export_types_scenario["factory_x::get_tile_fields_list"] = "array<tile_x>()"
 	export_types_scenario["factory_x::get_halt_list"] = "array<halt_x>()"
 	export_types_scenario["factory_x::is_transformer_connected"] = "bool()"
 	export_types_scenario["factory_x::get_transformer"] = "powerline_x()"
diff --git a/src/simutrans/simfab.cc b/src/simutrans/simfab.cc
index dd921bf33..3ac9d80e9 100644
--- a/src/simutrans/simfab.cc
+++ b/src/simutrans/simfab.cc
@@ -3283,6 +3283,21 @@ void fabrik_t::get_tile_list( vector_tpl<koord> &tile_list ) const
 	}
 }
 
+void fabrik_t::get_fields_list( vector_tpl<grund_t*> &fields_list ) const
+{
+	fields_list.clear();
+	if(desc->get_field_group()) {
+		// if there are fields
+		if(  !fields.empty()  ) {
+			for(  uint16 i=0;  i<fields.get_count();  i++ ) {
+				const koord k = fields[i].location;
+				grund_t *gr=welt->lookup_kartenboden(k);
+				fields_list.append( gr );
+			}
+		}
+	}
+}
+
 // Returns a list of goods produced by this factory. The caller must delete
 // the list when done
 slist_tpl<const goods_desc_t*> *fabrik_t::get_produced_goods() const
diff --git a/src/simutrans/simfab.h b/src/simutrans/simfab.h
index c2e3e71ec..56ec2bfa2 100644
--- a/src/simutrans/simfab.h
+++ b/src/simutrans/simfab.h
@@ -623,6 +623,11 @@ public:
 	 */
 	void get_tile_list( vector_tpl<koord> &tile_list ) const;
 
+	/*
+	 * Fills the vector with the tile_t of the fields.
+	 */
+	void get_fields_list( vector_tpl<grund_t*> &fields_list ) const;
+
 	/// @returns a vector of factories within a rectangle
 	static vector_tpl<fabrik_t *> & sind_da_welche(koord min, koord max);
 
-- 
2.38.1

