Skip to content

Commit 13f1178

Browse files
committed
Improve check for starting fire near fireplace
1 parent d92a2a4 commit 13f1178

File tree

5 files changed

+29
-25
lines changed

5 files changed

+29
-25
lines changed

src/avatar.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,12 @@ const memorized_tile &avatar::get_memorized_tile( const tripoint_abs_ms &p ) con
263263
return mm_submap::default_tile;
264264
}
265265

266+
bool avatar::has_memory_at( const tripoint_abs_ms &p ) const
267+
{
268+
const memorized_tile &mt = get_memorized_tile( p );
269+
return !mt.get_ter_id().empty() || !mt.get_dec_id().empty();
270+
}
271+
266272
void avatar::memorize_terrain( const tripoint_abs_ms &p, std::string_view id,
267273
int subtile, int rotation )
268274
{

src/avatar.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ class avatar : public Character
146146
bool should_show_map_memory() const;
147147
void prepare_map_memory_region( const tripoint_abs_ms &p1, const tripoint_abs_ms &p2 );
148148
const memorized_tile &get_memorized_tile( const tripoint_abs_ms &p ) const;
149+
bool has_memory_at( const tripoint_abs_ms &p ) const;
149150
void memorize_terrain( const tripoint_abs_ms &p, std::string_view id,
150151
int subtile, int rotation );
151152
void memorize_decoration( const tripoint_abs_ms &p, std::string_view id,

src/cata_tiles.cpp

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1534,7 +1534,7 @@ void cata_tiles::draw( const point &dest, const tripoint_bub_ms &center, int wid
15341534
invisible[0] = false;
15351535

15361536
if( y < min_visible.y || y > max_visible.y || x < min_visible.x || x > max_visible.x ) {
1537-
if( has_memory_at( pos_global ) ) {
1537+
if( you.has_memory_at( pos_global ) ) {
15381538
ll = lit_level::MEMORIZED;
15391539
invisible[0] = true;
15401540
} else if( has_draw_override( pos ) ) {
@@ -1705,7 +1705,7 @@ void cata_tiles::draw( const point &dest, const tripoint_bub_ms &center, int wid
17051705
const visibility_type vis_type = here.get_visibility( ll, cache );
17061706
if( would_apply_vision_effects( vis_type ) ) {
17071707
const Creature *critter = creatures.creature_at( pos, true );
1708-
if( has_draw_override( pos ) || has_memory_at( pos_global ) ||
1708+
if( has_draw_override( pos ) || you.has_memory_at( pos_global ) ||
17091709
( critter &&
17101710
( critter->has_flag( mon_flag_ALWAYS_VISIBLE )
17111711
|| you.sees_with_specials( *critter ) ) ) ) {
@@ -3178,12 +3178,6 @@ bool cata_tiles::apply_vision_effects( const tripoint_bub_ms &pos,
31783178
return true;
31793179
}
31803180

3181-
bool cata_tiles::has_memory_at( const tripoint_abs_ms &p ) const
3182-
{
3183-
const memorized_tile &mt = get_avatar().get_memorized_tile( p );
3184-
return !mt.get_ter_id().empty() || !mt.get_dec_id().empty();
3185-
}
3186-
31873181
const memorized_tile &cata_tiles::get_terrain_memory_at( const tripoint_abs_ms &p ) const
31883182
{
31893183
const memorized_tile &mt = get_avatar().get_memorized_tile( p );

src/cata_tiles.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -577,7 +577,6 @@ class cata_tiles
577577
static int get_rotation_edge_ew( char rot_to );
578578

579579
/** Map memory */
580-
bool has_memory_at( const tripoint_abs_ms &p ) const;
581580
const memorized_tile &get_terrain_memory_at( const tripoint_abs_ms &p ) const;
582581
const memorized_tile &get_furniture_memory_at( const tripoint_abs_ms &p ) const;
583582
const memorized_tile &get_trap_memory_at( const tripoint_abs_ms &p ) const;

src/iuse_actor.cpp

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1520,22 +1520,26 @@ firestarter_actor::start_type firestarter_actor::prep_firestarter_use( Character
15201520
return start_type::NONE;
15211521
}
15221522
}
1523-
// Check for an adjacent fire container
1524-
for( const tripoint_bub_ms &query : here->points_in_radius( pos, 1 ) ) {
1525-
// Don't ask if we're setting a fire on top of a fireplace
1526-
if( here->has_flag_furn( "FIRE_CONTAINER", pos ) ) {
1527-
break;
1528-
}
1529-
// Skip the position we're trying to light on fire
1530-
if( query == pos ) {
1531-
continue;
1532-
}
1533-
if( here->has_flag_furn( "FIRE_CONTAINER", query ) ) {
1534-
if( !query_yn( _( "Are you sure you want to start fire here? There's a fireplace adjacent." ) ) ) {
1535-
return start_type::NONE;
1536-
} else {
1537-
// Don't ask multiple times if they say no and there are multiple fireplaces
1538-
break;
1523+
// Don't check if we're setting a fire on top of a fireplace
1524+
if( !here->has_flag_furn( "FIRE_CONTAINER", pos ) ) {
1525+
// Check for an adjacent fire container
1526+
for( const tripoint_bub_ms &query : here->points_in_radius( pos, 1 ) ) {
1527+
// Skip the position we're trying to light on fire
1528+
if( query == pos ) {
1529+
continue;
1530+
}
1531+
// Skip positions we've never seen
1532+
if( p.is_avatar() && !p.as_avatar()->has_memory_at( here->get_abs( query ) ) ) {
1533+
continue;
1534+
}
1535+
if( here->has_flag_ter_or_furn( "FIRE_CONTAINER", query ) ) {
1536+
if( !query_yn(
1537+
_( "Are you sure you want to start fire here? There's a much more appropriate spot adjacent." ) ) ) {
1538+
return start_type::NONE;
1539+
} else {
1540+
// Don't ask multiple times if they say no and there are multiple fireplaces
1541+
break;
1542+
}
15391543
}
15401544
}
15411545
}

0 commit comments

Comments
 (0)