Skip to content

Commit

Permalink
Merge pull request #74553 from Procyonae/VpslotTerrainTransformTypify
Browse files Browse the repository at this point in the history
Change vpslot_terrain_transform raw strings to string ids
  • Loading branch information
Maleclypse authored Oct 19, 2024
2 parents d125ec8 + 6dcba8e commit f1417b4
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 26 deletions.
14 changes: 7 additions & 7 deletions doc/JSON_INFO.md
Original file line number Diff line number Diff line change
Expand Up @@ -3175,13 +3175,13 @@ Vehicle components when installed on a vehicle.
// quality and the quality level, that the vehicle part provides.
// Only the "LIFT", "JACK", and "SELF_JACK" qualities are valid.
"transform_terrain": { // (Optional) This part can transform terrain, like a plow.
// One of "post_terain", "post_furniture", or "post_field" is required.
"pre_flags": [ "PLOWABLE" ], // List of flags for the terrain that can be transformed.
"post_terrain": "t_dirtmound", // (Optional, default to "t_null") The resulting terrain, if any.
"post_furniture": "f_boulder", // (Optional, default to "f_null") The resulting furniture, if any.
"post_field": "fd_fire", // (Optional, default to "fd_null") The resulting field, if any.
"post_field_intensity": 10, // (Optional, default to 0) The field's intensity, if any.
"post_field_age": "20 s" // (Optional, default to 0 turns) The field's time to live, if any.
"pre_flags": [ "PLOWABLE" ], // (Optional) List of flags for the terrain that can be transformed.
"post_terrain": "t_dirtmound", // (Optional*) The resulting terrain.
"post_furniture": "f_boulder", // (Optional*) The resulting furniture.
"post_field": "fd_fire", // (Optional*) The resulting field.
"post_field_intensity": 10, // (Mandatory if post_field is specified) The field's intensity.
"post_field_age": "20 s" // (Mandatory if post_field is specified) The field's time to live.
// *One of "post_terrain", "post_furniture", or "post_field" is required.
},
"variants_bases": [ // variant bases to generate (see below)
{ "id": "scooter", "label": "Scooter" },
Expand Down
18 changes: 13 additions & 5 deletions src/veh_type.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -432,11 +432,13 @@ void vpart_info::load( const JsonObject &jo, const std::string &src )
JsonObject jttd = jo.get_object( "transform_terrain" );
vpslot_terrain_transform &vtt = *transform_terrain_info;
optional( jttd, was_loaded, "pre_flags", vtt.pre_flags, {} );
optional( jttd, was_loaded, "post_terrain", vtt.post_terrain, "t_null" );
optional( jttd, was_loaded, "post_furniture", vtt.post_furniture, "f_null" );
optional( jttd, was_loaded, "post_field", vtt.post_field, "fd_null" );
optional( jttd, was_loaded, "post_field_intensity", vtt.post_field_intensity, 0 );
optional( jttd, was_loaded, "post_field_age", vtt.post_field_age, 0_seconds );
optional( jttd, was_loaded, "post_terrain", vtt.post_terrain );
optional( jttd, was_loaded, "post_furniture", vtt.post_furniture );
if( jttd.has_string( "post_field" ) ) {
mandatory( jttd, was_loaded, "post_field", vtt.post_field );
mandatory( jttd, was_loaded, "post_field_intensity", vtt.post_field_intensity );
mandatory( jttd, was_loaded, "post_field_age", vtt.post_field_age );
}
}
}

Expand Down Expand Up @@ -950,6 +952,12 @@ void vpart_info::check() const
id.c_str() );
}
}
if( !!transform_terrain_info && !( transform_terrain_info->post_terrain ||
transform_terrain_info->post_furniture ||
transform_terrain_info->post_field ) ) {
debugmsg( "transform_terrain_info must contain at least one of post_terrain, post_furniture and post_field for vehicle part %s",
id.c_str() );
}
}

void vehicles::parts::reset()
Expand Down
11 changes: 6 additions & 5 deletions src/veh_type.h
Original file line number Diff line number Diff line change
Expand Up @@ -162,11 +162,12 @@ struct vpslot_toolkit {

struct vpslot_terrain_transform {
std::set<std::string> pre_flags;
std::string post_terrain;
std::string post_furniture;
std::string post_field;
int post_field_intensity = 0;
time_duration post_field_age = 0_turns;
std::optional<ter_str_id> post_terrain;
std::optional<furn_str_id> post_furniture;
std::optional<field_type_str_id> post_field;
//Both only defined if(post_field)
int post_field_intensity;
time_duration post_field_age;
};

struct vp_control_req {
Expand Down
15 changes: 6 additions & 9 deletions src/vehicle_use.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1002,17 +1002,14 @@ void vehicle::transform_terrain()
}
}
if( prereq_fulfilled ) {
const ter_id new_ter = ter_id( ttd.post_terrain );
if( new_ter != ter_str_id::NULL_ID() ) {
here.ter_set( start_pos, new_ter );
if( !!ttd.post_terrain ) {
here.ter_set( start_pos, *ttd.post_terrain );
}
const furn_id new_furn = furn_id( ttd.post_furniture );
if( new_furn != furn_str_id::NULL_ID() ) {
here.furn_set( start_pos, new_furn );
if( !!ttd.post_furniture ) {
here.furn_set( start_pos, *ttd.post_furniture );
}
const field_type_id new_field = field_type_id( ttd.post_field );
if( new_field.id() ) {
here.add_field( start_pos, new_field, ttd.post_field_intensity, ttd.post_field_age );
if( !!ttd.post_field ) {
here.add_field( start_pos, *ttd.post_field, ttd.post_field_intensity, ttd.post_field_age );
}
} else {
const int speed = std::abs( velocity );
Expand Down

0 comments on commit f1417b4

Please sign in to comment.