Skip to content
This repository was archived by the owner on Dec 21, 2024. It is now read-only.

Commit 9aa7dc8

Browse files
committed
fix bug where some pawns would never get their turn
1 parent 136143b commit 9aa7dc8

File tree

1 file changed

+25
-10
lines changed

1 file changed

+25
-10
lines changed

Source/Navgrid/Private/TurnManager.cpp

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ void ATurnManager::Tick(float DeltaTime)
1818
// broadcast TurnEnd and TeamTurnEnd
1919
if (IsValid(CurrentComponent))
2020
{
21+
CurrentComponent->OnTurnEnd();
2122
OnTurnEnd().Broadcast(CurrentComponent);
2223
if (!IsValid(FindNextTeamMember(CurrentComponent->TeamId())))
2324
{
@@ -46,7 +47,7 @@ void ATurnManager::Tick(float DeltaTime)
4647
}
4748

4849
// figure out which component that has the next turn
49-
if (!IsValid(NextComponent))
50+
if (!IsValid(NextComponent) || NextComponent->RemainingActionPoints <= 0)
5051
{
5152
if (IsValid(CurrentComponent) && CurrentComponent->RemainingActionPoints > 0)
5253
{
@@ -59,16 +60,15 @@ void ATurnManager::Tick(float DeltaTime)
5960
}
6061

6162
// broadcast TurnStart and TeamTurnStart
62-
if (IsValid(NextComponent))
63+
check(IsValid(NextComponent))
64+
UTurnComponent *PreviousComponent = CurrentComponent;
65+
CurrentComponent = NextComponent;
66+
if (!IsValid(PreviousComponent) || CurrentComponent->TeamId() != PreviousComponent->TeamId())
6367
{
64-
UTurnComponent *PreviousComponent = CurrentComponent;
65-
CurrentComponent = NextComponent;
66-
if (!IsValid(PreviousComponent) || CurrentComponent->TeamId() != PreviousComponent->TeamId())
67-
{
68-
OnTeamTurnStart().Broadcast(CurrentComponent->TeamId());
69-
}
70-
OnTurnStart().Broadcast(CurrentComponent);
68+
OnTeamTurnStart().Broadcast(CurrentComponent->TeamId());
7169
}
70+
CurrentComponent->OnTurnStart();
71+
OnTurnStart().Broadcast(CurrentComponent);
7272

7373
NextComponent = nullptr;
7474
bStartNewTurn = false;
@@ -88,6 +88,10 @@ void ATurnManager::UnregisterTurnComponent(UTurnComponent * TurnComponent)
8888
CurrentComponent = nullptr;
8989
bStartNewTurn = true;
9090
}
91+
if (NextComponent == TurnComponent)
92+
{
93+
NextComponent = nullptr;
94+
}
9195
}
9296

9397
void ATurnManager::EndTurn(UTurnComponent *Ender)
@@ -96,6 +100,17 @@ void ATurnManager::EndTurn(UTurnComponent *Ender)
96100
{
97101
bStartNewTurn = true;
98102
}
103+
else
104+
{
105+
if (IsValid(CurrentComponent))
106+
{
107+
UE_LOG(NavGrid, Warning, TEXT("ATurnManager::EndTurn(%s): CurrentComopnent: %s"), *Ender->GetOwner()->GetName(), *CurrentComponent->GetOwner()->GetName());
108+
}
109+
else
110+
{
111+
UE_LOG(NavGrid, Warning, TEXT("ATurnManager::EndTurn(%s): CurrentComonent: null"), *Ender->GetOwner()->GetName());
112+
}
113+
}
99114
}
100115

101116
void ATurnManager::EndTeamTurn(FGenericTeamId InTeamId)
@@ -151,7 +166,7 @@ UTurnComponent * ATurnManager::FindNextTeamMember(const FGenericTeamId & TeamId)
151166
Teams.MultiFind(TeamId, TeamMembers, true);
152167
int32 StartIndex;
153168
TeamMembers.Find(CurrentComponent, StartIndex);
154-
for (int32 Idx = 1; Idx < TeamMembers.Num(); Idx++)
169+
for (int32 Idx = 1; Idx <= TeamMembers.Num(); Idx++)
155170
{
156171
UTurnComponent *Candidate = TeamMembers[(StartIndex + Idx) % TeamMembers.Num()];
157172
if (Candidate->RemainingActionPoints > 0)

0 commit comments

Comments
 (0)