Skip to content

Commit

Permalink
Mark resource generator objects as visited for allies (ihhub#3560)
Browse files Browse the repository at this point in the history
  • Loading branch information
ihhub authored May 29, 2021
1 parent d73b657 commit 5eab8b2
Show file tree
Hide file tree
Showing 6 changed files with 28 additions and 8 deletions.
2 changes: 1 addition & 1 deletion VisualStudio/common.props
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>$(MSBuildThisFileDirectory)..\src\engine;$(MSBuildThisFileDirectory)..\src\fheroes2\gui;$(MSBuildThisFileDirectory)..\src\fheroes2\maps;$(MSBuildThisFileDirectory)..\src\fheroes2\kingdom;$(MSBuildThisFileDirectory)..\src\fheroes2\campaign;$(MSBuildThisFileDirectory)..\src\fheroes2\game;$(MSBuildThisFileDirectory)..\src\fheroes2\dialog;$(MSBuildThisFileDirectory)..\src\fheroes2\system;$(MSBuildThisFileDirectory)..\src\fheroes2\spell;$(MSBuildThisFileDirectory)..\src\fheroes2\monster;$(MSBuildThisFileDirectory)..\src\fheroes2\castle;$(MSBuildThisFileDirectory)..\src\fheroes2\agg;$(MSBuildThisFileDirectory)..\src\fheroes2\heroes;$(MSBuildThisFileDirectory)..\src\fheroes2\resource;$(MSBuildThisFileDirectory)..\src\fheroes2\ai;$(MSBuildThisFileDirectory)..\src\fheroes2\army;$(MSBuildThisFileDirectory)..\src\fheroes2\battle;$(MSBuildThisFileDirectory)..\src\fheroes2\pocketpc;$(MSBuildThisFileDirectory)..\src\fheroes2\objects;$(MSBuildThisFileDirectory)..\src\fheroes2\world;$(MSBuildThisFileDirectory)..\src\fheroes2\image;$(MSBuildThisFileDirectory)..\src\thirdparty\libsmacker;$(MSBuildThisFileDirectory)packages\installed\zlib\include\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;WITH_ZLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<TreatSpecificWarningsAsErrors>4018;4028;4100;4189;4245;4309;4319;4389;4456;4554;4592;4702;4706;4715;4800</TreatSpecificWarningsAsErrors>
<TreatSpecificWarningsAsErrors>4018;4028;4100;4189;4245;4309;4319;4389;4456;4458;4554;4592;4702;4706;4715;4800</TreatSpecificWarningsAsErrors>
</ClCompile>
<ResourceCompile>
<AdditionalIncludeDirectories>$(MSBuildThisFileDirectory)..\src\fheroes2\system;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
Expand Down
2 changes: 1 addition & 1 deletion src/fheroes2/ai/ai_hero_action.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -774,7 +774,7 @@ namespace AI
AIToCaptureObject( hero, obj, dst_index );

tile.QuantityReset();
hero.SetVisited( dst_index, Visit::GLOBAL );
hero.setVisitedForAllies( dst_index );

DEBUG_LOG( DBG_AI, DBG_INFO, hero.GetName() );
}
Expand Down
21 changes: 18 additions & 3 deletions src/fheroes2/heroes/heroes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -851,16 +851,31 @@ bool Heroes::isObjectTypeVisited( int object, Visit::type_t type ) const
return visit_object.end() != std::find_if( visit_object.begin(), visit_object.end(), [object]( const IndexObject & v ) { return v.isObject( object ); } );
}

/* set visited cell */
void Heroes::SetVisited( s32 index, Visit::type_t type )
{
const Maps::Tiles & tile = world.GetTiles( index );
int object = tile.GetObject( false );

if ( Visit::GLOBAL == type )
if ( Visit::GLOBAL == type ) {
GetKingdom().SetVisited( index, object );
else if ( !isVisited( tile ) && MP2::OBJ_ZERO != object )
}
else if ( !isVisited( tile ) && MP2::OBJ_ZERO != object ) {
visit_object.push_front( IndexObject( index, object ) );
}
}

void Heroes::setVisitedForAllies( const int32_t tileIndex ) const
{
const Maps::Tiles & tile = world.GetTiles( tileIndex );
const int objectId = tile.GetObject( false );

// Set visited to all allies as well.
const Colors friendColors( Players::GetPlayerFriends( GetColor() ) );
for ( const int friendColor : friendColors ) {
if ( friendColor != GetColor() ) {
world.GetKingdom( friendColor ).SetVisited( tileIndex, objectId );
}
}
}

void Heroes::SetVisitedWideTile( s32 index, int object, Visit::type_t type )
Expand Down
5 changes: 5 additions & 0 deletions src/fheroes2/heroes/heroes.h
Original file line number Diff line number Diff line change
Expand Up @@ -299,7 +299,12 @@ class Heroes : public HeroBase, public ColorBase
int GetDirection() const;
void setDirection( int directionToSet );

// set visited cell
void SetVisited( s32, Visit::type_t = Visit::LOCAL );

// Set global visited state for itself and for allies.
void setVisitedForAllies( const int32_t tileIndex ) const;

void SetVisitedWideTile( s32, int object, Visit::type_t = Visit::LOCAL );
bool isObjectTypeVisited( int object, Visit::type_t = Visit::LOCAL ) const;
bool isVisited( const Maps::Tiles &, Visit::type_t = Visit::LOCAL ) const;
Expand Down
2 changes: 1 addition & 1 deletion src/fheroes2/heroes/heroes_action.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1079,7 +1079,7 @@ void ActionToObjectResource( Heroes & hero, u32 obj, s32 dst_index )
}

tile.QuantityReset();
hero.SetVisited( dst_index, Visit::GLOBAL );
hero.setVisitedForAllies( dst_index );

DEBUG_LOG( DBG_GAME, DBG_INFO, hero.GetName() );
}
Expand Down
4 changes: 2 additions & 2 deletions src/fheroes2/maps/maps_tiles.h
Original file line number Diff line number Diff line change
Expand Up @@ -284,10 +284,10 @@ namespace Maps
Heroes * GetHeroes( void ) const;
void SetHeroes( Heroes * );

// If tile is empty (MP2::OBJ_UNKNOWN) then verify whether it is a coast and update the tile if needed.
// If tile is empty (MP2::OBJ_ZERO) then verify whether it is a coast and update the tile if needed.
void updateEmpty();

// Set tile to coast MP2::OBJ_COAST) if it's near water or to empty (MP2::OBJ_UNKNOWN)
// Set tile to coast MP2::OBJ_COAST) if it's near water or to empty (MP2::OBJ_ZERO)
void setAsEmpty();

static int ColorFromBarrierSprite( const uint8_t tileset, const uint8_t icnIndex );
Expand Down

0 comments on commit 5eab8b2

Please sign in to comment.