瀏覽代碼

Merge remote-tracking branch 'remotes/dydzio/CommanderArtifacts2' into develop

AlexVinS 9 年之前
父節點
當前提交
08252a1282
共有 1 個文件被更改,包括 15 次插入3 次删除
  1. 15 3
      client/CPlayerInterface.cpp

+ 15 - 3
client/CPlayerInterface.cpp

@@ -96,6 +96,18 @@ static bool objectBlitOrderSorter(const TerrainTileObject  & a, const TerrainTil
 	return CMapHandler::compareObjectBlitOrder(a.obj, b.obj);
 }
 
+struct HeroObjectRetriever : boost::static_visitor<const CGHeroInstance *>
+{
+	const CGHeroInstance * operator()(const ConstTransitivePtr<CGHeroInstance> &h) const
+	{
+		return h;
+	}
+	const CGHeroInstance * operator()(const ConstTransitivePtr<CStackInstance> &s) const
+	{
+		return nullptr;
+	}
+};
+
 CPlayerInterface::CPlayerInterface(PlayerColor Player)
 {
 	logGlobal->traceStream() << "\tHuman player interface for player " << Player << " being constructed";
@@ -2518,11 +2530,11 @@ void CPlayerInterface::stacksRebalanced(const StackLocation &src, const StackLoc
 
 void CPlayerInterface::askToAssembleArtifact(const ArtifactLocation &al)
 {
-	auto hero = dynamic_cast<const CGHeroInstance*>(al.relatedObj());
-	if (hero)
+	auto hero = boost::apply_visitor(HeroObjectRetriever(), al.artHolder);
+	if(hero)
 	{
 		auto art = hero->getArt(al.slot);
-		if (art == nullptr)
+		if(art == nullptr)
 		{
 			logGlobal->error("artifact location %d points to nothing",
 			                 al.slot.num);