2
0
Эх сурвалжийг харах

Throw runtime error explicitely

Tomasz Zieliński 2 жил өмнө
parent
commit
84436f7f18
1 өөрчлөгдсөн 18 нэмэгдсэн , 7 устгасан
  1. 18 7
      lib/NetPacksLib.cpp

+ 18 - 7
lib/NetPacksLib.cpp

@@ -38,6 +38,8 @@
 
 VCMI_LIB_NAMESPACE_BEGIN
 
+#define THROW_IF_NO_BATTLE if (!gs->curB) throw std::runtime_error("Trying to apply pack when no battle!");
+
 void CPack::visit(ICPackVisitor & visitor)
 {
 	visitBasic(visitor);
@@ -2127,16 +2129,19 @@ void BattleStart::applyGs(CGameState * gs) const
 
 void BattleNextRound::applyGs(CGameState * gs) const
 {
+	THROW_IF_NO_BATTLE
 	gs->curB->nextRound(round);
 }
 
 void BattleSetActiveStack::applyGs(CGameState * gs) const
 {
+	THROW_IF_NO_BATTLE
 	gs->curB->nextTurn(stack);
 }
 
 void BattleTriggerEffect::applyGs(CGameState * gs) const
 {
+	THROW_IF_NO_BATTLE
 	CStack * st = gs->curB->getStack(stackID);
 	assert(st);
 	switch(static_cast<BonusType>(effect))
@@ -2232,6 +2237,7 @@ void BattleLogMessage::applyBattle(IBattleState * battleState)
 
 void BattleStackMoved::applyGs(CGameState *gs)
 {
+	THROW_IF_NO_BATTLE
 	applyBattle(gs->curB);
 }
 
@@ -2242,6 +2248,7 @@ void BattleStackMoved::applyBattle(IBattleState * battleState)
 
 void BattleStackAttacked::applyGs(CGameState * gs)
 {
+	THROW_IF_NO_BATTLE
 	applyBattle(gs->curB);
 }
 
@@ -2252,6 +2259,7 @@ void BattleStackAttacked::applyBattle(IBattleState * battleState)
 
 void BattleAttack::applyGs(CGameState * gs)
 {
+	THROW_IF_NO_BATTLE
 	CStack * attacker = gs->curB->getStack(stackAttacking);
 	assert(attacker);
 
@@ -2265,8 +2273,7 @@ void BattleAttack::applyGs(CGameState * gs)
 
 void StartAction::applyGs(CGameState *gs)
 {
-	if (!gs->curB)
-		return;
+	THROW_IF_NO_BATTLE
 
 	CStack *st = gs->curB->getStack(ba.stackNumber);
 
@@ -2316,7 +2323,7 @@ void StartAction::applyGs(CGameState *gs)
 
 void BattleSpellCast::applyGs(CGameState * gs) const
 {
-	assert(gs->curB);
+	THROW_IF_NO_BATTLE
 
 	if(castByHero)
 	{
@@ -2329,6 +2336,7 @@ void BattleSpellCast::applyGs(CGameState * gs) const
 
 void SetStackEffect::applyGs(CGameState *gs)
 {
+	THROW_IF_NO_BATTLE
 	applyBattle(gs->curB);
 }
 
@@ -2347,6 +2355,7 @@ void SetStackEffect::applyBattle(IBattleState * battleState)
 
 void StacksInjured::applyGs(CGameState *gs)
 {
+	THROW_IF_NO_BATTLE
 	applyBattle(gs->curB);
 }
 
@@ -2358,6 +2367,7 @@ void StacksInjured::applyBattle(IBattleState * battleState)
 
 void BattleUnitsChanged::applyGs(CGameState *gs)
 {
+	THROW_IF_NO_BATTLE
 	applyBattle(gs->curB);
 }
 
@@ -2388,8 +2398,8 @@ void BattleUnitsChanged::applyBattle(IBattleState * battleState)
 
 void BattleObstaclesChanged::applyGs(CGameState * gs)
 {
-	if(gs->curB)
-		applyBattle(gs->curB);
+	THROW_IF_NO_BATTLE;
+	applyBattle(gs->curB);
 }
 
 void BattleObstaclesChanged::applyBattle(IBattleState * battleState)
@@ -2420,8 +2430,8 @@ CatapultAttack::~CatapultAttack() = default;
 
 void CatapultAttack::applyGs(CGameState * gs)
 {
-	if(gs->curB)
-		applyBattle(gs->curB);
+	THROW_IF_NO_BATTLE
+	applyBattle(gs->curB);
 }
 
 void CatapultAttack::visitTyped(ICPackVisitor & visitor)
@@ -2447,6 +2457,7 @@ void CatapultAttack::applyBattle(IBattleState * battleState)
 
 void BattleSetStackProperty::applyGs(CGameState * gs) const
 {
+	THROW_IF_NO_BATTLE
 	CStack * stack = gs->curB->getStack(stackID);
 	switch(which)
 	{