-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathToonTanksGameMode.cpp
65 lines (60 loc) · 1.84 KB
/
ToonTanksGameMode.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
// Fill out your copyright notice in the Description page of Project Settings.
#include "ToonTanksGameMode.h"
#include "Kismet/GameplayStatics.h"
#include "Tank.h"
#include "Tower.h"
#include "ToonTanksPlayerController.h"
void AToonTanksGameMode::ActorDied(AActor *DeadActor)
{
if (DeadActor == Tank)
{
Tank->HandleDestruction();
if (ToonTanksPlayerController)
{
ToonTanksPlayerController->SetPlayerEnabledState(false);
}
GameOver(false);
}
else if (ATower* DestroyedTower = Cast<ATower>(DeadActor))
{
DestroyedTower->HandleDestruction();
--TargetTowers;
if (TargetTowers == 0)
{
GameOver(true);
}
}
}
void AToonTanksGameMode::BeginPlay()
{
Super::BeginPlay();
HandleGameStart();
}
void AToonTanksGameMode::HandleGameStart()
{
TargetTowers = GetTargetTowerCount();
Tank = Cast<ATank>(UGameplayStatics::GetPlayerPawn(this, 0));
ToonTanksPlayerController =Cast<AToonTanksPlayerController>(UGameplayStatics::GetPlayerController(this, 0));
StartGame();
if (ToonTanksPlayerController)
{
ToonTanksPlayerController->SetPlayerEnabledState(false);
FTimerHandle PlayerEnableTimerHandle;
FTimerDelegate PlayerEnableTimerDelegate = FTimerDelegate::CreateUObject(
ToonTanksPlayerController,
&AToonTanksPlayerController::SetPlayerEnabledState,
true
);
GetWorldTimerManager().SetTimer(PlayerEnableTimerHandle,
PlayerEnableTimerDelegate,
StartDelay,
false
);
}
}
int32 AToonTanksGameMode::GetTargetTowerCount()
{
TArray<AActor*> Towers;
UGameplayStatics::GetAllActorsOfClass(this, ATower::StaticClass(), Towers);
return Towers.Num();
}