Skip to content

Commit

Permalink
fixed bikerack vehicle tracking
Browse files Browse the repository at this point in the history
fixed bikerack wiping overmap tracking for carried vehicles
  • Loading branch information
SeventhSandwich committed Jan 28, 2020
1 parent 0b2785f commit 9195a64
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 2 deletions.
29 changes: 29 additions & 0 deletions src/vehicle.cpp
Expand Up @@ -1957,6 +1957,10 @@ bool vehicle::merge_rackable_vehicle( vehicle *carry_veh, const std::vector<int>
carried_part.carry_names.push( unique_id );
carried_part.enabled = false;
carried_part.set_flag( vehicle_part::carried_flag );
//give each carried part a tracked_flag so that we can re-enable overmap tracking on unloading if necessary
if( carry_veh->tracking_on ) {
carried_part.set_flag( vehicle_part::tracked_flag );
}
parts[ carry_map.rack_part ].set_flag( vehicle_part::carrying_flag );
}

Expand Down Expand Up @@ -2157,6 +2161,20 @@ void vehicle::remove_carried_flag()
}
}

void vehicle::remove_tracked_flag()
{
for( vehicle_part &part : parts ) {
if( part.carry_names.empty() ) {
part.remove_flag( vehicle_part::tracked_flag );
} else {
part.carry_names.pop();
if( part.carry_names.empty() ) {
part.remove_flag( vehicle_part::tracked_flag );
}
}
}
}

bool vehicle::remove_carried_vehicle( const std::vector<int> &carried_parts )
{
if( carried_parts.empty() ) {
Expand All @@ -2165,8 +2183,15 @@ bool vehicle::remove_carried_vehicle( const std::vector<int> &carried_parts )
std::string veh_record;
tripoint new_pos3;
bool x_aligned = false;
bool tracked_parts =
false; // we will set this to true if any of the vehicle parts carry a tracked_flag
for( int carried_part : carried_parts ) {
std::string id_string = parts[ carried_part ].carry_names.top().substr( 0, 1 );
//check if selected part carries tracking flag
if( parts[carried_part].has_flag(
vehicle_part::tracked_flag ) ) { //this should only need to run once
tracked_parts = true;
}
if( id_string == "X" || id_string == "Y" ) {
veh_record = parts[ carried_part ].carry_names.top();
new_pos3 = global_part_pos3( carried_part );
Expand Down Expand Up @@ -2244,6 +2269,10 @@ bool vehicle::remove_carried_vehicle( const std::vector<int> &carried_parts )
//~ %s is the vehicle being loaded onto the bicycle rack
add_msg( _( "You unload the %s from the bike rack." ), new_vehicle->name );
new_vehicle->remove_carried_flag();
if( tracked_parts ) {
new_vehicle->toggle_tracking(); //turn on tracking for our newly created vehicle
new_vehicle->remove_tracked_flag(); //remove our tracking flags now that the vehicle isn't carried
}
g->m.dirty_vehicle_list.insert( this );
part_removal_cleanup();
} else {
Expand Down
7 changes: 5 additions & 2 deletions src/vehicle.h
Expand Up @@ -162,7 +162,8 @@ struct vehicle_part {
enum : int { passenger_flag = 1,
animal_flag = 2,
carried_flag = 4,
carrying_flag = 8
carrying_flag = 8,
tracked_flag = 16 //carried vehicle part with tracking enabled
};

vehicle_part(); /** DefaultConstructible */
Expand Down Expand Up @@ -837,8 +838,10 @@ class vehicle
bool remove_part( int p );
void part_removal_cleanup();

// remove the carried flag from a vehicle after it has bee removed from a rack
// remove the carried flag from a vehicle after it has been removed from a rack
void remove_carried_flag();
// remove the tracked flag from a tracked vehicle after it has been removed from a rack
void remove_tracked_flag();
// remove a vehicle specified by a list of part indices
bool remove_carried_vehicle( const std::vector<int> &carried_parts );
// split the current vehicle into up to four vehicles if they have no connection other
Expand Down
1 change: 1 addition & 0 deletions src/vehicle_use.cpp
Expand Up @@ -1832,6 +1832,7 @@ void vehicle::use_bike_rack( int part )
if( success ) {
for( const int &rack_part : carrying_racks[unload_carried] ) {
parts[ rack_part ].remove_flag( vehicle_part::carrying_flag );
parts[rack_part].remove_flag( vehicle_part::tracked_flag );
}
}
} else {
Expand Down

0 comments on commit 9195a64

Please sign in to comment.