@@ -13,10 +13,14 @@ TerrainType::TerrainType(
1313 colour_t new_colour,
1414 ModifierValue&& new_modifier,
1515 fixed_point_t new_movement_cost,
16+ fixed_point_t new_defence_bonus,
17+ fixed_point_t new_combat_width_percentage_change,
1618 bool new_is_water
1719) : Modifier { new_identifier, std::move (new_modifier), modifier_type_t ::TERRAIN },
1820 HasColour { new_colour, false },
1921 movement_cost { new_movement_cost },
22+ defence_bonus { new_defence_bonus },
23+ combat_width_percentage_change { new_combat_width_percentage_change },
2024 is_water { new_is_water } {}
2125
2226TerrainTypeMapping::TerrainTypeMapping (
@@ -68,6 +72,8 @@ bool TerrainTypeManager::add_terrain_type(
6872 colour_t colour,
6973 ModifierValue&& values,
7074 fixed_point_t movement_cost,
75+ fixed_point_t defence_bonus,
76+ fixed_point_t combat_width_percentage_change,
7177 bool is_water
7278) {
7379 if (identifier.empty ()) {
@@ -82,7 +88,9 @@ bool TerrainTypeManager::add_terrain_type(
8288 return false ;
8389 }
8490
85- return terrain_types.add_item ({ identifier, colour, std::move (values), movement_cost, is_water });
91+ return terrain_types.add_item ({
92+ identifier, colour, std::move (values), movement_cost, defence_bonus, combat_width_percentage_change, is_water
93+ });
8694}
8795
8896bool TerrainTypeManager::add_terrain_type_mapping (
@@ -133,18 +141,22 @@ node_callback_t TerrainTypeManager::_load_terrain_type_categories(ModifierManage
133141 const bool ret = expect_dictionary_reserve_length (terrain_types,
134142 [this , &modifier_manager](std::string_view type_key, ast::NodeCPtr type_node) -> bool {
135143 ModifierValue values;
136- fixed_point_t movement_cost;
144+ fixed_point_t movement_cost, defence_bonus, combat_width_percentage_change ;
137145 colour_t colour = colour_t::null ();
138146 bool is_water = false ;
139147
140148 bool ret = NodeTools::expect_dictionary_keys_and_default (
141149 modifier_manager.expect_terrain_modifier (values),
142150 " movement_cost" , ONE_EXACTLY, expect_fixed_point (assign_variable_callback (movement_cost)),
151+ " defence" , ZERO_OR_ONE, expect_fixed_point (assign_variable_callback (defence_bonus)),
152+ " combat_width" , ZERO_OR_ONE, expect_fixed_point (assign_variable_callback (combat_width_percentage_change)),
143153 " color" , ONE_EXACTLY, expect_colour (assign_variable_callback (colour)),
144154 " is_water" , ZERO_OR_ONE, expect_bool (assign_variable_callback (is_water))
145155 )(type_node);
146156
147- ret &= add_terrain_type (type_key, colour, std::move (values), movement_cost, is_water);
157+ ret &= add_terrain_type (
158+ type_key, colour, std::move (values), movement_cost, defence_bonus, combat_width_percentage_change, is_water
159+ );
148160
149161 return ret;
150162 }
0 commit comments