@@ -18,6 +18,7 @@ void ATurnManager::Tick(float DeltaTime)
1818// broadcast TurnEnd and TeamTurnEnd
1919if (IsValid (CurrentComponent))
2020{
21+ CurrentComponent->OnTurnEnd ();
2122OnTurnEnd ().Broadcast (CurrentComponent);
2223if (!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{
5152if (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
7373NextComponent = nullptr ;
7474bStartNewTurn = false ;
@@ -88,6 +88,10 @@ void ATurnManager::UnregisterTurnComponent(UTurnComponent * TurnComponent)
8888CurrentComponent = nullptr ;
8989bStartNewTurn = true ;
9090}
91+ if (NextComponent == TurnComponent)
92+ {
93+ NextComponent = nullptr ;
94+ }
9195}
9296
9397void ATurnManager::EndTurn (UTurnComponent *Ender)
@@ -96,6 +100,17 @@ void ATurnManager::EndTurn(UTurnComponent *Ender)
96100{
97101bStartNewTurn = 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
101116void ATurnManager::EndTeamTurn (FGenericTeamId InTeamId)
@@ -151,7 +166,7 @@ UTurnComponent * ATurnManager::FindNextTeamMember(const FGenericTeamId & TeamId)
151166Teams.MultiFind (TeamId, TeamMembers, true );
152167int32 StartIndex;
153168TeamMembers.Find (CurrentComponent, StartIndex);
154- for (int32 Idx = 1 ; Idx < TeamMembers.Num (); Idx++)
169+ for (int32 Idx = 1 ; Idx <= TeamMembers.Num (); Idx++)
155170{
156171UTurnComponent *Candidate = TeamMembers[(StartIndex + Idx) % TeamMembers.Num ()];
157172if (Candidate->RemainingActionPoints > 0 )
0 commit comments