소스 검색

Fix crash on defeating hero in boat

Ivan Savenko 2 년 전
부모
커밋
a78f7de9cd
1개의 변경된 파일22개의 추가작업 그리고 2개의 파일을 삭제
  1. 22 2
      client/mapView/MapViewController.cpp

+ 22 - 2
client/mapView/MapViewController.cpp

@@ -251,6 +251,26 @@ void MapViewController::fadeInObject(const CGObjectInstance * obj)
 
 void MapViewController::removeObject(const CGObjectInstance * obj)
 {
+	if (obj->ID == Obj::BOAT)
+	{
+		auto * boat = dynamic_cast<const CGBoat*>(obj);
+		if (boat->hero)
+		{
+			view->invalidate(context, boat->hero->id);
+			state->removeObject(boat->hero);
+		}
+	}
+
+	if (obj->ID == Obj::HERO)
+	{
+		auto * hero = dynamic_cast<const CGHeroInstance*>(obj);
+		if (hero->boat)
+		{
+			view->invalidate(context, hero->boat->id);
+			state->removeObject(hero->boat);
+		}
+	}
+
 	view->invalidate(context, obj->id);
 	state->removeObject(obj);
 }
@@ -265,7 +285,7 @@ void MapViewController::onBeforeHeroEmbark(const CGHeroInstance * obj, const int
 {
 	if(isEventVisible(obj, from, dest))
 	{
-		onObjectFadeOut(obj);
+		fadeOutObject(obj);
 		setViewCenter(obj->getSightCenter());
 	}
 	else
@@ -288,7 +308,7 @@ void MapViewController::onAfterHeroDisembark(const CGHeroInstance * obj, const i
 {
 	if(isEventVisible(obj, from, dest))
 	{
-		onObjectFadeIn(obj);
+		fadeInObject(obj);
 		setViewCenter(obj->getSightCenter());
 	}
 	addObject(obj);