Freeciv21
Develop your civilization from humble roots to a global empire
traderoutes.h File Reference
#include "support.h"
#include "specenum_gen.h"
#include "speclist.h"
+ Include dependency graph for traderoutes.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  trade_route_settings
 
struct  trade_route
 
struct  goods_type
 

Macros

#define SPECENUM_NAME   traderoute_bonus_type
 
#define SPECENUM_VALUE0   TBONUS_NONE
 
#define SPECENUM_VALUE0NAME   "None"
 
#define SPECENUM_VALUE1   TBONUS_GOLD
 
#define SPECENUM_VALUE1NAME   "Gold"
 
#define SPECENUM_VALUE2   TBONUS_SCIENCE
 
#define SPECENUM_VALUE2NAME   "Science"
 
#define SPECENUM_VALUE3   TBONUS_BOTH
 
#define SPECENUM_VALUE3NAME   "Both"
 
#define SPECENUM_NAME   route_direction
 
#define SPECENUM_VALUE0   RDIR_FROM
 
#define SPECENUM_VALUE0NAME   N_("?routedir:From")
 
#define SPECENUM_VALUE1   RDIR_TO
 
#define SPECENUM_VALUE1NAME   N_("?routedir:To")
 
#define SPECENUM_VALUE2   RDIR_BIDIRECTIONAL
 
#define SPECENUM_VALUE2NAME   N_("?routedir:Bidirectional")
 
#define SPECLIST_TAG   trade_route
 
#define SPECLIST_TYPE   struct trade_route
 
#define trade_route_list_iterate(trade_route_list, proute)    TYPED_LIST_ITERATE(struct trade_route, trade_route_list, proute)
 
#define trade_route_list_iterate_end   LIST_ITERATE_END
 
#define trade_routes_iterate(c, proute)
 
#define trade_routes_iterate_end
 
#define trade_routes_iterate_safe(c, proute)
 
#define trade_routes_iterate_safe_end
 
#define trade_partners_iterate(c, p)
 
#define trade_partners_iterate_end
 
#define SPECENUM_NAME   goods_flag_id
 
#define SPECENUM_VALUE0   GF_BIDIRECTIONAL
 
#define SPECENUM_VALUE0NAME   "Bidirectional"
 
#define SPECENUM_VALUE1   GF_DEPLETES
 
#define SPECENUM_VALUE1NAME   "Depletes"
 
#define SPECENUM_COUNT   GF_COUNT
 
#define SPECENUM_BITVECTOR   bv_goods_flags
 
#define goods_type_iterate(_p)
 
#define goods_type_iterate_end
 
#define goods_type_re_active_iterate(_p)
 
#define goods_type_re_active_iterate_end
 

Enumerations

enum  traderoute_illegal_cancelling { TRI_ACTIVE = 0 , TRI_INACTIVE = 1 , TRI_CANCEL = 2 , TRI_LAST = 3 }
 
enum  trade_route_type {
  TRT_NATIONAL = 0 , TRT_NATIONAL_IC = 1 , TRT_IN = 2 , TRT_IN_IC = 3 ,
  TRT_ALLY = 4 , TRT_ALLY_IC = 5 , TRT_ENEMY = 6 , TRT_ENEMY_IC = 7 ,
  TRT_TEAM = 8 , TRT_TEAM_IC = 9 , TRT_LAST = 10
}
 

Functions

int max_trade_routes (const struct city *pcity)
 Return current maximum number of trade routes city can have. More...
 
enum trade_route_type cities_trade_route_type (const struct city *pcity1, const struct city *pcity2)
 What is type of the traderoute between two cities. More...
 
int trade_route_type_trade_pct (enum trade_route_type type)
 Return percentage bonus for trade route type. More...
 
void trade_route_types_init ()
 Initialize trade route types. More...
 
const char * trade_route_type_name (enum trade_route_type type)
 Return human readable name of trade route type. More...
 
enum trade_route_type trade_route_type_by_name (const char *name)
 Get trade route type by name. More...
 
const char * traderoute_cancelling_type_name (enum traderoute_illegal_cancelling type)
 Return human readable name of traderoute cancelling type. More...
 
enum traderoute_illegal_cancelling traderoute_cancelling_type_by_name (const char *name)
 Get traderoute cancelling type by name. More...
 
struct trade_route_settingstrade_route_settings_by_type (enum trade_route_type type)
 Get trade route settings related to type. More...
 
bool can_cities_trade (const struct city *pc1, const struct city *pc2)
 Return TRUE iff the two cities are capable of trade; i.e., if a caravan from one city can enter the other to sell its goods. More...
 
bool can_establish_trade_route (const struct city *pc1, const struct city *pc2)
 Returns TRUE iff the two cities can establish a trade route. More...
 
bool have_cities_trade_route (const struct city *pc1, const struct city *pc2)
 Check if cities have an established trade route. More...
 
int trade_base_between_cities (const struct city *pc1, const struct city *pc2)
 Return the trade that exists between these cities, assuming they have a trade route. More...
 
int trade_from_route (const struct city *pc1, const struct trade_route *route, int base)
 Get trade income specific to route's good. More...
 
int city_num_trade_routes (const struct city *pcity)
 Return number of trade route city has. More...
 
int get_caravan_enter_city_trade_bonus (const struct city *pc1, const struct city *pc2, const player *seen_as, struct goods_type *pgood, const bool establish_trade)
 Returns the revenue trade bonus - you get this when establishing a trade route and also when you simply sell your trade goods at the new city. More...
 
int city_trade_removable (const struct city *pcity, struct trade_route_list *would_remove)
 Return the minimum value of the sum of trade routes which could be replaced by a new one. More...
 
void goods_init ()
 Initialize goods structures. More...
 
void goods_free ()
 Free the memory associated with goods. More...
 
Goods_type_id goods_index (const struct goods_type *pgood)
 Return the goods index. More...
 
Goods_type_id goods_number (const struct goods_type *pgood)
 Return the goods id. More...
 
struct goods_typegoods_by_number (Goods_type_id id)
 Return goods type of given id. More...
 
const char * goods_name_translation (struct goods_type *pgood)
 Return translated name of this goods type. More...
 
const char * goods_rule_name (struct goods_type *pgood)
 Return untranslated name of this goods type. More...
 
struct goods_typegoods_by_rule_name (const char *name)
 Returns goods type matching rule name or nullptr if there is no goods type with such name. More...
 
struct goods_typegoods_by_translated_name (const char *name)
 
bool goods_has_flag (const struct goods_type *pgood, enum goods_flag_id flag)
 Check if goods has given flag. More...
 
bool goods_can_be_provided (struct city *pcity, struct goods_type *pgood, struct unit *punit)
 Can the city provide goods. More...
 
struct goods_typegoods_from_city_to_unit (struct city *src, struct unit *punit)
 Return goods type for the new traderoute between given cities. More...
 
bool city_receives_goods (const struct city *pcity, const struct goods_type *pgood)
 Does city receive goods. More...
 

Macro Definition Documentation

◆ goods_type_iterate

#define goods_type_iterate (   _p)
Value:
{ \
int _i_; \
for (_i_ = 0; _i_ < game.control.num_goods_types; _i_++) { \
struct goods_type *_p = goods_by_number(_i_);
struct civ_game game
Definition: game.cpp:47
struct packet_ruleset_control control
Definition: game.h:74
struct goods_type * goods_by_number(Goods_type_id id)
Return goods type of given id.

Definition at line 218 of file traderoutes.h.

◆ goods_type_iterate_end

#define goods_type_iterate_end
Value:
} \
}

Definition at line 224 of file traderoutes.h.

◆ goods_type_re_active_iterate

#define goods_type_re_active_iterate (   _p)
Value:
{ \
if (!_p->ruledit_disabled) {
#define goods_type_iterate(_p)
Definition: traderoutes.h:218

Definition at line 228 of file traderoutes.h.

◆ goods_type_re_active_iterate_end

#define goods_type_re_active_iterate_end
Value:
} \
} \
goods_type_iterate_end;

Definition at line 233 of file traderoutes.h.

◆ SPECENUM_BITVECTOR

#define SPECENUM_BITVECTOR   bv_goods_flags

Definition at line 177 of file traderoutes.h.

◆ SPECENUM_COUNT

#define SPECENUM_COUNT   GF_COUNT

Definition at line 176 of file traderoutes.h.

◆ SPECENUM_NAME [1/3]

#define SPECENUM_NAME   traderoute_bonus_type

Definition at line 171 of file traderoutes.h.

◆ SPECENUM_NAME [2/3]

#define SPECENUM_NAME   route_direction

Definition at line 171 of file traderoutes.h.

◆ SPECENUM_NAME [3/3]

#define SPECENUM_NAME   goods_flag_id

Definition at line 171 of file traderoutes.h.

◆ SPECENUM_VALUE0 [1/3]

#define SPECENUM_VALUE0   TBONUS_NONE

Definition at line 172 of file traderoutes.h.

◆ SPECENUM_VALUE0 [2/3]

#define SPECENUM_VALUE0   RDIR_FROM

Definition at line 172 of file traderoutes.h.

◆ SPECENUM_VALUE0 [3/3]

#define SPECENUM_VALUE0   GF_BIDIRECTIONAL

Definition at line 172 of file traderoutes.h.

◆ SPECENUM_VALUE0NAME [1/3]

#define SPECENUM_VALUE0NAME   "None"

Definition at line 173 of file traderoutes.h.

◆ SPECENUM_VALUE0NAME [2/3]

#define SPECENUM_VALUE0NAME   N_("?routedir:From")

Definition at line 173 of file traderoutes.h.

◆ SPECENUM_VALUE0NAME [3/3]

#define SPECENUM_VALUE0NAME   "Bidirectional"

Definition at line 173 of file traderoutes.h.

◆ SPECENUM_VALUE1 [1/3]

#define SPECENUM_VALUE1   TBONUS_GOLD

Definition at line 174 of file traderoutes.h.

◆ SPECENUM_VALUE1 [2/3]

#define SPECENUM_VALUE1   RDIR_TO

Definition at line 174 of file traderoutes.h.

◆ SPECENUM_VALUE1 [3/3]

#define SPECENUM_VALUE1   GF_DEPLETES

Definition at line 174 of file traderoutes.h.

◆ SPECENUM_VALUE1NAME [1/3]

#define SPECENUM_VALUE1NAME   "Gold"

Definition at line 175 of file traderoutes.h.

◆ SPECENUM_VALUE1NAME [2/3]

#define SPECENUM_VALUE1NAME   N_("?routedir:To")

Definition at line 175 of file traderoutes.h.

◆ SPECENUM_VALUE1NAME [3/3]

#define SPECENUM_VALUE1NAME   "Depletes"

Definition at line 175 of file traderoutes.h.

◆ SPECENUM_VALUE2 [1/2]

#define SPECENUM_VALUE2   TBONUS_SCIENCE

Definition at line 60 of file traderoutes.h.

◆ SPECENUM_VALUE2 [2/2]

#define SPECENUM_VALUE2   RDIR_BIDIRECTIONAL

Definition at line 60 of file traderoutes.h.

◆ SPECENUM_VALUE2NAME [1/2]

#define SPECENUM_VALUE2NAME   "Science"

Definition at line 61 of file traderoutes.h.

◆ SPECENUM_VALUE2NAME [2/2]

#define SPECENUM_VALUE2NAME   N_("?routedir:Bidirectional")

Definition at line 61 of file traderoutes.h.

◆ SPECENUM_VALUE3

#define SPECENUM_VALUE3   TBONUS_BOTH

Definition at line 51 of file traderoutes.h.

◆ SPECENUM_VALUE3NAME

#define SPECENUM_VALUE3NAME   "Both"

Definition at line 52 of file traderoutes.h.

◆ SPECLIST_TAG

#define SPECLIST_TAG   trade_route

Definition at line 80 of file traderoutes.h.

◆ SPECLIST_TYPE

#define SPECLIST_TYPE   struct trade_route

Definition at line 81 of file traderoutes.h.

◆ trade_partners_iterate

#define trade_partners_iterate (   c,
 
)
Value:
do { \
trade_routes_iterate(c, _proute_) \
{ \
struct city *p = game_city_by_number(_proute_->partner); \
/* Maybe we haven't yet recieved info about this city */ \
if (!p) { \
continue; \
}
struct city * game_city_by_number(int id)
Often used function to get a city pointer from a city ID.
Definition: game.cpp:103
Definition: city.h:291

Definition at line 153 of file traderoutes.h.

◆ trade_partners_iterate_end

#define trade_partners_iterate_end
Value:
} \
trade_routes_iterate_end; \
} \
while (false) \
;

Definition at line 163 of file traderoutes.h.

◆ trade_route_list_iterate

#define trade_route_list_iterate (   trade_route_list,
  proute 
)     TYPED_LIST_ITERATE(struct trade_route, trade_route_list, proute)

Definition at line 84 of file traderoutes.h.

◆ trade_route_list_iterate_end

#define trade_route_list_iterate_end   LIST_ITERATE_END

Definition at line 86 of file traderoutes.h.

◆ trade_routes_iterate

#define trade_routes_iterate (   c,
  proute 
)
Value:
do { \
trade_route_list_iterate(c->routes, proute) \
{

Definition at line 122 of file traderoutes.h.

◆ trade_routes_iterate_end

#define trade_routes_iterate_end
Value:
} \
trade_route_list_iterate_end; \
} \
while (false)

Definition at line 127 of file traderoutes.h.

◆ trade_routes_iterate_safe

#define trade_routes_iterate_safe (   c,
  proute 
)
Value:
{ \
int _routes##_size = trade_route_list_size(c->routes); \
if (_routes##_size > 0) { \
struct trade_route *_routes##_saved[_routes##_size]; \
int _routes##_index = 0; \
trade_routes_iterate(c, _proute) \
{ \
_routes##_saved[_routes##_index++] = _proute; \
} \
trade_routes_iterate_end; \
for (_routes##_index = 0; _routes##_index < _routes##_size; \
_routes##_index++) { \
struct trade_route *proute = _routes##_saved[_routes##_index];

Definition at line 133 of file traderoutes.h.

◆ trade_routes_iterate_safe_end

#define trade_routes_iterate_safe_end
Value:
} \
} \
}

Definition at line 148 of file traderoutes.h.

Enumeration Type Documentation

◆ trade_route_type

Enumerator
TRT_NATIONAL 
TRT_NATIONAL_IC 
TRT_IN 
TRT_IN_IC 
TRT_ALLY 
TRT_ALLY_IC 
TRT_ENEMY 
TRT_ENEMY_IC 
TRT_TEAM 
TRT_TEAM_IC 
TRT_LAST 

Definition at line 30 of file traderoutes.h.

◆ traderoute_illegal_cancelling

Enumerator
TRI_ACTIVE 
TRI_INACTIVE 
TRI_CANCEL 
TRI_LAST 

Definition at line 23 of file traderoutes.h.

Function Documentation

◆ can_cities_trade()

bool can_cities_trade ( const struct city pc1,
const struct city pc2 
)

◆ can_establish_trade_route()

bool can_establish_trade_route ( const struct city pc1,
const struct city pc2 
)

Returns TRUE iff the two cities can establish a trade route.

We look at the distance and ownership of the cities as well as their existing trade routes. Should only be called if you already know that can_cities_trade().

Definition at line 267 of file traderoutes.cpp.

Referenced by trade_generator::calculate(), dai_manage_caravan(), popup_info_text(), reestablish_city_trade_routes(), trade_benefit(), and windfall_benefit().

◆ cities_trade_route_type()

enum trade_route_type cities_trade_route_type ( const struct city pcity1,
const struct city pcity2 
)

What is type of the traderoute between two cities.

Definition at line 41 of file traderoutes.cpp.

Referenced by can_cities_trade(), do_unit_establish_trade(), reestablish_city_trade_routes(), set_city_production(), trade_base_between_cities(), and update_city_activities().

◆ city_num_trade_routes()

int city_num_trade_routes ( const struct city pcity)

◆ city_receives_goods()

bool city_receives_goods ( const struct city pcity,
const struct goods_type pgood 
)

Does city receive goods.

Definition at line 684 of file traderoutes.cpp.

◆ city_trade_removable()

int city_trade_removable ( const struct city pcity,
struct trade_route_list *  would_remove 
)

Return the minimum value of the sum of trade routes which could be replaced by a new one.

The target routes to be removed will be put into 'would_remove', if set.

Definition at line 221 of file traderoutes.cpp.

Referenced by can_establish_trade_route(), do_unit_establish_trade(), and one_city_trade_benefit().

◆ get_caravan_enter_city_trade_bonus()

int get_caravan_enter_city_trade_bonus ( const struct city pc1,
const struct city pc2,
const player seen_as,
struct goods_type pgood,
const bool  establish_trade 
)

Returns the revenue trade bonus - you get this when establishing a trade route and also when you simply sell your trade goods at the new city.

pgood can be nullptr for ignoring good's onetime_pct.

pc2 can be nullptr for using an imaginary city at distance 10 with 75% of pc1's trade (for dai_choose_trade_route()).

Definition at line 446 of file traderoutes.cpp.

Referenced by dai_choose_trade_route(), do_unit_establish_trade(), get_act_sel_action_custom_text(), and windfall_benefit().

◆ goods_by_number()

struct goods_type* goods_by_number ( Goods_type_id  id)

◆ goods_by_rule_name()

struct goods_type* goods_by_rule_name ( const char *  name)

Returns goods type matching rule name or nullptr if there is no goods type with such name.

Definition at line 616 of file traderoutes.cpp.

Referenced by tab_good::initialize_new_good(), tab_good::select_good(), sg_load_player_city(), sg_load_player_unit(), and universal_by_number().

◆ goods_by_translated_name()

struct goods_type* goods_by_translated_name ( const char *  name)

Definition at line 641 of file traderoutes.cpp.

Referenced by help_widget::set_topic_goods().

◆ goods_can_be_provided()

bool goods_can_be_provided ( struct city pcity,
struct goods_type pgood,
struct unit punit 
)

Can the city provide goods.

Definition at line 665 of file traderoutes.cpp.

Referenced by goods_from_city_to_unit(), and update_city_activities().

◆ goods_free()

void goods_free ( )

Free the memory associated with goods.

Definition at line 552 of file traderoutes.cpp.

Referenced by game_ruleset_free().

◆ goods_from_city_to_unit()

struct goods_type* goods_from_city_to_unit ( struct city src,
struct unit punit 
)

Return goods type for the new traderoute between given cities.

Definition at line 702 of file traderoutes.cpp.

Referenced by do_unit_establish_trade(), and unit_get_goods().

◆ goods_has_flag()

bool goods_has_flag ( const struct goods_type pgood,
enum goods_flag_id  flag 
)

Check if goods has given flag.

Definition at line 657 of file traderoutes.cpp.

Referenced by do_unit_establish_trade(), save_game_ruleset(), and update_city_activities().

◆ goods_index()

Goods_type_id goods_index ( const struct goods_type pgood)

Return the goods index.

Currently same as goods_number(), paired with goods_count() indicates use as an array index.

Definition at line 579 of file traderoutes.cpp.

Referenced by load_game_names(), load_ruleset_game(), package_unit(), and tab_good::refresh().

◆ goods_init()

void goods_init ( )

Initialize goods structures.

Definition at line 536 of file traderoutes.cpp.

Referenced by game_ruleset_init().

◆ goods_name_translation()

const char* goods_name_translation ( struct goods_type pgood)

◆ goods_number()

Goods_type_id goods_number ( const struct goods_type pgood)

Return the goods id.

Definition at line 566 of file traderoutes.cpp.

Referenced by package_city(), send_ruleset_goods(), and universal_number().

◆ goods_rule_name()

◆ have_cities_trade_route()

bool have_cities_trade_route ( const struct city pc1,
const struct city pc2 
)

Check if cities have an established trade route.

Definition at line 520 of file traderoutes.cpp.

Referenced by trade_generator::calculate(), can_establish_trade_route(), do_unit_establish_trade(), and draw_calculated_trade_routes().

◆ max_trade_routes()

int max_trade_routes ( const struct city pcity)

◆ trade_base_between_cities()

int trade_base_between_cities ( const struct city pc1,
const struct city pc2 
)

Return the trade that exists between these cities, assuming they have a trade route.

Definition at line 314 of file traderoutes.cpp.

Referenced by can_establish_trade_route(), dai_effect_value(), do_unit_establish_trade(), get_act_sel_action_custom_text(), max_trade_prod(), popup_info_text(), set_city_production(), and trade_benefit().

◆ trade_from_route()

int trade_from_route ( const struct city pc1,
const struct trade_route route,
int  base 
)

Get trade income specific to route's good.

Definition at line 351 of file traderoutes.cpp.

Referenced by set_city_production().

◆ trade_route_settings_by_type()

◆ trade_route_type_by_name()

enum trade_route_type trade_route_type_by_name ( const char *  name)

Get trade route type by name.

Definition at line 140 of file traderoutes.cpp.

Referenced by load_ruleset_game().

◆ trade_route_type_name()

const char* trade_route_type_name ( enum trade_route_type  type)

Return human readable name of trade route type.

Definition at line 140 of file traderoutes.cpp.

Referenced by save_game_ruleset().

◆ trade_route_type_trade_pct()

int trade_route_type_trade_pct ( enum trade_route_type  type)

Return percentage bonus for trade route type.

Definition at line 115 of file traderoutes.cpp.

Referenced by can_cities_trade(), dai_choose_trade_route(), and trade_base_between_cities().

◆ trade_route_types_init()

void trade_route_types_init ( )

Initialize trade route types.

Definition at line 127 of file traderoutes.cpp.

Referenced by game_ruleset_init().

◆ traderoute_cancelling_type_by_name()

enum traderoute_illegal_cancelling traderoute_cancelling_type_by_name ( const char *  name)

Get traderoute cancelling type by name.

Definition at line 165 of file traderoutes.cpp.

Referenced by load_ruleset_game().

◆ traderoute_cancelling_type_name()

const char* traderoute_cancelling_type_name ( enum traderoute_illegal_cancelling  type)

Return human readable name of traderoute cancelling type.

Definition at line 165 of file traderoutes.cpp.

Referenced by save_game_ruleset().