Simutrans-Squirrel-API  r11919
api_city.cc
Go to the documentation of this file.
1 /*
2  * This file is part of the Simutrans project under the Artistic License.
3  * (see LICENSE.txt)
4  */
5 
6 #include "api.h"
7 
10 #include "get_next.h"
11 #include "../api_class.h"
12 #include "../api_function.h"
13 #include "../../world/simcity.h"
14 #include "../../tool/simmenu.h"
15 #include "../../world/simworld.h"
16 #include "../../dataobj/scenario.h"
17 
18 using namespace script_api;
19 
20 
21 vector_tpl<sint64> const& get_city_stat(stadt_t* city, bool monthly, sint32 INDEX)
22 {
23  static vector_tpl<sint64> v;
24  v.clear();
25  if (city && 0<=INDEX && INDEX<MAX_CITY_HISTORY) {
26  uint16 maxi = monthly ? MAX_CITY_HISTORY_MONTHS :MAX_CITY_HISTORY_YEARS;
27  for(uint16 i = 0; i < maxi; i++) {
28  if (monthly) {
29  v.append( city->get_finance_history_month(i, INDEX) );
30  }
31  else {
32  v.append( city->get_finance_history_year(i, INDEX) );
33  }
34  }
35  }
36  return v;
37 }
38 
39 
40 SQInteger world_get_next_city(HSQUIRRELVM vm)
41 {
42  return generic_get_next(vm, welt->get_cities().get_count());
43 }
44 
45 namespace script_api {
46  declare_fake_param(city_list_t, "city_list_x");
47 }
48 
49 stadt_t* world_get_city_by_index(city_list_t, uint32 index)
50 {
51  return index < welt->get_cities().get_count() ? welt->get_cities()[index] : NULL;
52 }
53 
54 call_tool_init set_citygrowth(stadt_t *city, bool allow)
55 {
56  cbuffer_t buf;
57  buf.printf("g%hi,%hi,%hi", city->get_pos().x, city->get_pos().y, (short)allow );
58  return call_tool_init(TOOL_CHANGE_CITY | SIMPLE_TOOL, (const char*)buf, 0, welt->get_public_player());
59 }
60 
61 call_tool_init city_set_name(stadt_t* city, const char* name)
62 {
63  return command_rename(welt->get_public_player(), 't', welt->get_cities().index_of(city), name);
64 }
65 
66 
67 call_tool_work city_change_size(stadt_t *city, sint32 delta)
68 {
69  cbuffer_t buf;
70  buf.printf("%i", delta);
71  grund_t *gr = welt->lookup_kartenboden(city->get_pos());
72  if (gr) {
73  return call_tool_work(TOOL_CHANGE_CITY_SIZE | GENERAL_TOOL, (const char*)buf, 0, welt->get_public_player(), gr->get_pos());
74  }
75  else {
76  return "Invalid coordinate.";
77  }
78 }
79 
80 
81 void export_city(HSQUIRRELVM vm)
82 {
94  begin_class(vm, "city_list_x", 0);
98  register_function(vm, world_get_next_city, "_nexti", 2, "x o|i");
102  register_method(vm, &world_get_city_by_index, "_get", true);
103  end_class(vm);
104 
108  begin_class(vm, "city_x", "coord,extend_get,ingame_object");
109 
116  // actually defined in simutrans/script/script_base.nut
117  // register_function(..., "constructor", ...);
118 
122  export_is_valid<stadt_t*>(vm); //register_function("is_valid")
127  register_method(vm, &stadt_t::get_name, "get_name");
132  register_method(vm, &city_set_name, "set_name", true);
137  register_method_fv(vm, &get_city_stat, "get_citizens", freevariable<bool,sint32>(true, HIST_CITIZENS), true);
142  register_method_fv(vm, &get_city_stat, "get_growth", freevariable<bool,sint32>(true, HIST_GROWTH), true );
147  register_method_fv(vm, &get_city_stat, "get_buildings", freevariable<bool,sint32>(true, HIST_BUILDING), true );
152  register_method_fv(vm, &get_city_stat, "get_citycars", freevariable<bool,sint32>(true, HIST_CITYCARS), true );
157  register_method_fv(vm, &get_city_stat, "get_transported_pax", freevariable<bool,sint32>(true, HIST_PAS_TRANSPORTED), true );
162  register_method_fv(vm, &get_city_stat, "get_generated_pax", freevariable<bool,sint32>(true, HIST_PAS_GENERATED), true );
167  register_method_fv(vm, &get_city_stat, "get_transported_mail", freevariable<bool,sint32>(true, HIST_MAIL_TRANSPORTED), true );
172  register_method_fv(vm, &get_city_stat, "get_generated_mail", freevariable<bool,sint32>(true, HIST_MAIL_GENERATED), true );
177  register_method_fv(vm, &get_city_stat, "get_year_citizens", freevariable<bool,sint32>(false, HIST_CITIZENS), true );
182  register_method_fv(vm, &get_city_stat, "get_year_growth", freevariable<bool,sint32>(false, HIST_GROWTH), true );
187  register_method_fv(vm, &get_city_stat, "get_year_buildings", freevariable<bool,sint32>(false, HIST_BUILDING), true );
192  register_method_fv(vm, &get_city_stat, "get_year_citycars", freevariable<bool,sint32>(false, HIST_CITYCARS), true );
197  register_method_fv(vm, &get_city_stat, "get_year_transported_pax", freevariable<bool,sint32>(false, HIST_PAS_TRANSPORTED), true );
202  register_method_fv(vm, &get_city_stat, "get_year_generated_pax", freevariable<bool,sint32>(false, HIST_PAS_GENERATED), true );
207  register_method_fv(vm, &get_city_stat, "get_year_transported_mail", freevariable<bool,sint32>(false, HIST_MAIL_TRANSPORTED), true );
212  register_method_fv(vm, &get_city_stat, "get_year_generated_mail", freevariable<bool,sint32>(false, HIST_MAIL_GENERATED), true );
213 
218  register_method(vm, &stadt_t::get_citygrowth, "get_citygrowth_enabled");
219 
224  register_method(vm, &stadt_t::get_pos, "get_pos");
225 
234  register_method(vm, &stadt_t::get_linksoben, "get_pos_nw");
235 
244  register_method(vm, &stadt_t::get_rechtsunten, "get_pos_se");
245 
251  register_method(vm, city_change_size, "change_size", true);
252 
257  register_method(vm, &set_citygrowth, "set_citygrowth_enabled", true);
258 
259  end_class(vm);
260 }