Skip to content

Commit

Permalink
Fix grabded furniture/vehicle destruction feature and tests for same
Browse files Browse the repository at this point in the history
  • Loading branch information
kevingranade committed Feb 6, 2021
1 parent 0fceedc commit 5c936e6
Show file tree
Hide file tree
Showing 4 changed files with 7 additions and 6 deletions.
2 changes: 1 addition & 1 deletion src/map.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1357,7 +1357,7 @@ void map::furn_set( const tripoint &p, const furn_id &new_furniture )
avatar &player_character = get_avatar();
// If player has grabbed this furniture and it's no longer grabbable, release the grab.
if( player_character.get_grab_type() == object_type::FURNITURE &&
player_character.grab_point == p && !new_t.is_movable() ) {
player_character.pos() + player_character.grab_point == p && !new_t.is_movable() ) {
add_msg( _( "The %s you were grabbing is destroyed!" ), old_t.name() );
player_character.grab( object_type::NONE );
}
Expand Down
2 changes: 1 addition & 1 deletion src/vehicle.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ class DefaultRemovePartHandler : public RemovePartHandler
// TODO: maybe do this for all the nearby NPCs as well?

if( player_character.get_grab_type() == object_type::VEHICLE &&
player_character.grab_point == veh.global_part_pos3( part ) ) {
player_character.pos() + player_character.grab_point == veh.global_part_pos3( part ) ) {
if( veh.parts_at_relative( veh.part( part ).mount, false ).empty() ) {
add_msg( m_info, _( "The vehicle part you were holding has been destroyed!" ) );
player_character.grab( object_type::NONE );
Expand Down
3 changes: 2 additions & 1 deletion tests/map_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ TEST_CASE( "destroy_grabbed_furniture" )
player_character.setpos( test_origin );
const tripoint grab_point = test_origin + tripoint_east;
here.furn_set( grab_point, furn_id( "f_chair" ) );
player_character.grab( object_type::FURNITURE, grab_point );
player_character.grab( object_type::FURNITURE, tripoint_east );
REQUIRE( player_character.get_grab_type() == object_type::FURNITURE );
WHEN( "The furniture grabbed by the player is destroyed" ) {
here.destroy( grab_point );
THEN( "The player's grab is released" ) {
Expand Down
6 changes: 3 additions & 3 deletions tests/vehicle_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,9 @@ TEST_CASE( "destroy_grabbed_vehicle_section" )
0, 0 );
REQUIRE( veh_ptr != nullptr );
tripoint grab_point = test_origin + tripoint_east;
player_character.grab( object_type::VEHICLE, grab_point );
REQUIRE( player_character.get_grab_type() != object_type::NONE );
REQUIRE( player_character.grab_point == grab_point );
player_character.grab( object_type::VEHICLE, tripoint_east );
REQUIRE( player_character.get_grab_type() == object_type::VEHICLE );
REQUIRE( player_character.grab_point == tripoint_east );
WHEN( "The vehicle section grabbed by the player is destroyed" ) {
here.destroy( grab_point );
REQUIRE( veh_ptr->get_parts_at( grab_point, "", part_status_flag::available ).empty() );
Expand Down

0 comments on commit 5c936e6

Please sign in to comment.