Skip to content

Commit

Permalink
Fix consume menu losing selection
Browse files Browse the repository at this point in the history
  • Loading branch information
Ramza13 committed Jun 14, 2020
1 parent 706006e commit e400f52
Show file tree
Hide file tree
Showing 7 changed files with 37 additions and 23 deletions.
16 changes: 10 additions & 6 deletions src/activity_actor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1125,7 +1125,7 @@ void consume_activity_actor::start( player_activity &act, Character &guy )
if( consume_location ) {
const auto ret = g->u.will_eat( *consume_location, true );
if( !ret.success() ) {
open_consume_menu = false;
consume_menu_selections = std::vector<int>();
return;
} else {
force = true;
Expand All @@ -1134,7 +1134,7 @@ void consume_activity_actor::start( player_activity &act, Character &guy )
} else if( !consume_item.is_null() ) {
const auto ret = g->u.will_eat( consume_item, true );
if( !ret.success() ) {
open_consume_menu = false;
consume_menu_selections = std::vector<int>();
return;
} else {
force = true;
Expand Down Expand Up @@ -1166,9 +1166,12 @@ void consume_activity_actor::finish( player_activity &act, Character & )
if( g->u.get_value( "THIEF_MODE_KEEP" ) != "YES" ) {
g->u.set_value( "THIEF_MODE", "THIEF_ASK" );
}
//setting act to null clears these so back them up
std::vector<int> temp_selections = consume_menu_selections;
act.set_to_null();
if( open_consume_menu ) {
if( !temp_selections.empty() ) {
g->u.assign_activity( ACT_EAT_MENU );
g->u.activity.values = temp_selections;
}
}

Expand All @@ -1178,7 +1181,7 @@ void consume_activity_actor::serialize( JsonOut &jsout ) const

jsout.member( "consume_location", consume_location );
jsout.member( "consume_item", consume_item );
jsout.member( "open_consume_menu", open_consume_menu );
jsout.member( "consume_menu_selections", consume_menu_selections );
jsout.member( "force", force );

jsout.end_object();
Expand All @@ -1187,13 +1190,14 @@ void consume_activity_actor::serialize( JsonOut &jsout ) const
std::unique_ptr<activity_actor> consume_activity_actor::deserialize( JsonIn &jsin )
{
item_location null;
consume_activity_actor actor( null );
std::vector<int> values;
consume_activity_actor actor( null, values );

JsonObject data = jsin.get_object();

data.read( "consume_location", actor.consume_location );
data.read( "consume_item", actor.consume_item );
data.read( "open_consume_menu", actor.open_consume_menu );
data.read( "consume_menu_selections", actor.consume_menu_selections );
data.read( "force", actor.force );

return actor.clone();
Expand Down
15 changes: 9 additions & 6 deletions src/activity_actor.h
Original file line number Diff line number Diff line change
Expand Up @@ -513,23 +513,26 @@ class consume_activity_actor : public activity_actor
private:
item_location consume_location;
item consume_item;
bool open_consume_menu = false;
std::vector<int> consume_menu_selections;
bool force = false;
/**
* @pre @p other is a consume_activity_actor
*/
bool can_resume_with_internal( const activity_actor &other, const Character & ) const override {
const consume_activity_actor &c_actor = static_cast<const consume_activity_actor &>( other );
return ( consume_location == c_actor.consume_location &&
open_consume_menu == c_actor.open_consume_menu &&
force == c_actor.force && &consume_item == &c_actor.consume_item );
}
public:
consume_activity_actor( const item_location &consume_location, bool open_consume_menu = false ) :
consume_location( consume_location ), open_consume_menu( open_consume_menu ) {}
consume_activity_actor( const item_location &consume_location,
std::vector<int> consume_menu_selections ) :
consume_location( consume_location ), consume_menu_selections( consume_menu_selections ) {}

consume_activity_actor( item consume_item, bool open_consume_menu = false ) :
consume_item( consume_item ), open_consume_menu( open_consume_menu ) {}
consume_activity_actor( const item_location &consume_location ) :
consume_location( consume_location ), consume_menu_selections( std::vector<int>() ) {}

consume_activity_actor( item consume_item ) :
consume_item( consume_item ), consume_menu_selections( std::vector<int>() ) {}

activity_id get_type() const override {
return activity_id( "ACT_CONSUME" );
Expand Down
16 changes: 11 additions & 5 deletions src/avatar_action.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -892,7 +892,7 @@ bool avatar_action::eat_here( avatar &you )
g->m.ter_set( you.pos(), t_grass );
add_msg( _( "You eat the underbrush." ) );
item food( "underbrush", calendar::turn, 1 );
you.assign_activity( player_activity( consume_activity_actor( food, false ) ) );
you.assign_activity( player_activity( consume_activity_actor( food ) ) );
return true;
}
}
Expand All @@ -904,7 +904,7 @@ bool avatar_action::eat_here( avatar &you )
} else {
add_msg( _( "You eat the grass." ) );
item food( item( "grass", calendar::turn, 1 ) );
you.assign_activity( player_activity( consume_activity_actor( food, false ) ) );
you.assign_activity( player_activity( consume_activity_actor( food ) ) );
if( g->m.ter( you.pos() ) == t_grass_tall ) {
g->m.ter_set( you.pos(), t_grass_long );
} else if( g->m.ter( you.pos() ) == t_grass_long ) {
Expand Down Expand Up @@ -933,17 +933,23 @@ bool avatar_action::eat_here( avatar &you )
void avatar_action::eat( avatar &you )
{
item_location loc = game_menus::inv::consume( you );
avatar_action::eat( you, loc, true );
avatar_action::eat( you, loc, you.activity.values );
}

void avatar_action::eat( avatar &you, const item_location &loc, bool open_consume_menu )
void avatar_action::eat( avatar &you, const item_location &loc )
{
avatar_action::eat( you, loc, std::vector<int>() );
}

void avatar_action::eat( avatar &you, const item_location &loc,
std::vector<int> consume_menu_selections )
{
if( !loc ) {
you.cancel_activity();
add_msg( _( "Never mind." ) );
return;
}
you.assign_activity( player_activity( consume_activity_actor( loc, open_consume_menu ) ) );
you.assign_activity( player_activity( consume_activity_actor( loc, consume_menu_selections ) ) );
}

void avatar_action::plthrow( avatar &you, item_location loc,
Expand Down
3 changes: 2 additions & 1 deletion src/avatar_action.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ namespace avatar_action

/** Eat food or fuel 'E' (or 'a') */
void eat( avatar &you );
void eat( avatar &you, const item_location &loc, bool open_consume_menu = false );
void eat( avatar &you, const item_location &loc );
void eat( avatar &you, const item_location &loc, std::vector<int> consume_menu_selections );
// special rules for eating: grazing etc
// returns false if no rules are needed
bool eat_here( avatar &you );
Expand Down
2 changes: 1 addition & 1 deletion src/handle_liquid.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -330,7 +330,7 @@ static bool perform_liquid_transfer( item &liquid, const tripoint *const source_

switch( target.dest_opt ) {
case LD_CONSUME:
g->u.assign_activity( player_activity( consume_activity_actor( liquid, false ) ) );
g->u.assign_activity( player_activity( consume_activity_actor( liquid ) ) );
liquid.charges--;
transfer_ok = true;
break;
Expand Down
6 changes: 3 additions & 3 deletions src/iexamine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1661,7 +1661,7 @@ static bool drink_nectar( player &p )
if( can_drink_nectar( p ) ) {
add_msg( _( "You drink some nectar." ) );
item nectar( "nectar", calendar::turn, 1 );
p.assign_activity( player_activity( consume_activity_actor( nectar, false ) ) );
p.assign_activity( player_activity( consume_activity_actor( nectar ) ) );
return true;
}

Expand Down Expand Up @@ -1705,7 +1705,7 @@ void iexamine::flower_poppy( player &p, const tripoint &examp )
}
add_msg( _( "You slowly suck up the nectar." ) );
item poppy( "poppy_nectar", calendar::turn, 1 );
p.assign_activity( player_activity( consume_activity_actor( poppy, false ) ) );
p.assign_activity( player_activity( consume_activity_actor( poppy ) ) );
p.mod_fatigue( 20 );
p.add_effect( effect_pkill2, 7_minutes );
// Please drink poppy nectar responsibly.
Expand Down Expand Up @@ -3183,7 +3183,7 @@ void iexamine::keg( player &p, const tripoint &examp )
if( !p.can_consume( drink ) ) {
return; // They didn't actually drink
}
p.assign_activity( player_activity( consume_activity_actor( drink, false ) ) );
p.assign_activity( player_activity( consume_activity_actor( drink ) ) );
drink.charges--;
if( drink.charges == 0 ) {
add_msg( _( "You squeeze the last drops of %1$s from the %2$s." ),
Expand Down
2 changes: 1 addition & 1 deletion src/vehicle_use.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2071,7 +2071,7 @@ void vehicle::interact_with( const tripoint &pos, int interact_part )
case DRINK: {
item water( "water_clean", 0 );
if( g->u.can_consume( water ) ) {
g->u.assign_activity( player_activity( consume_activity_actor( water, false ) ) );
g->u.assign_activity( player_activity( consume_activity_actor( water ) ) );
drain( itype_water_clean, 1 );
}
return;
Expand Down

0 comments on commit e400f52

Please sign in to comment.