Updated RTCombat for Shooting Accuracy via LineTrace

This commit is contained in:
Philip W 2022-11-21 20:59:29 +00:00
parent 1751ffd163
commit 6a041e4621
4 changed files with 42 additions and 9 deletions

Binary file not shown.

Binary file not shown.

View File

@ -22,9 +22,9 @@ ARealTimeCombat::ARealTimeCombat()
void ARealTimeCombat::StartCombat()
{
if (HUD->IsInViewport()) return;
HUD->AddToViewport();
bStartTimer = true;
//EnemyActor = Enemy;
// if (APlayerController* PC = Cast<APlayerController>(GetWorld()->GetFirstPlayerController()))
@ -116,6 +116,12 @@ void ARealTimeCombat::BeginPlay()
EnemyActor = Cast<AActor>(Actor);
}
UGameplayStatics::GetAllActorsOfClassWithTag(GetWorld(), AActor::StaticClass(), FName("Player"), AllCharacterActorsInScene);
for (AActor* Actor : AllCharacterActorsInScene)
{
PlayerActor = Cast<AActor>(Actor);
}
HUD = CreateWidget<UUserWidget>(GetWorld(), HUDWidget);
CurrentComboTextBlock = Cast<UTextBlock>(HUD->GetWidgetFromName("CurrentCombo"));
@ -158,6 +164,12 @@ void ARealTimeCombat::ExecuteCast(FString Combo)
RevertActionPoints();
UpdateActionPoints();
if (!HitEnemy())
{
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("Missed"));
return;
}
switch (bIsPlayerTurn)
{
case true:
@ -231,9 +243,7 @@ void ARealTimeCombat::UpdateProgressBars() const
void ARealTimeCombat::Tick(float DeltaSeconds)
{
Super::Tick(DeltaSeconds);
UE_LOG(LogTemp, Warning, TEXT( "%f" ), DeltaSeconds);
//Every second add 1 action point
if (ActionPointsTimer >= 1.0f && HeldActionPoints < MaxActionPoints)
if (ActionPointsTimer >= 1.0f && HeldActionPoints < MaxActionPoints && bStartTimer)
{
HeldActionPoints += 1;
ActiveActionPoints += 1;
@ -288,3 +298,22 @@ void ARealTimeCombat::UpdateResourceBars() const
IronResourceBar->SetPercent(IronResource / 10.0f);
SulfurResourceBar->SetPercent(SulfurResource / 10.0f);
}
bool ARealTimeCombat::HitEnemy() const
{
FHitResult HitResult;
FVector Start = PlayerActor->GetActorLocation();
FVector End = PlayerActor->GetActorForwardVector() * 1000.0f + Start;
FCollisionQueryParams CollisionParams;
CollisionParams.AddIgnoredActor(PlayerActor);
if (GetWorld()->LineTraceSingleByChannel(HitResult, Start, End, ECC_Pawn, CollisionParams))
{
DrawDebugLine(GetWorld(), Start, End, HitResult.bBlockingHit ? FColor::Green : FColor::Red, false, 5.0f, 0, 10.0f);
if (HitResult.GetActor() == EnemyActor)
{
return true;
}
}
DrawDebugLine(GetWorld(), Start, End, HitResult.bBlockingHit ? FColor::Green : FColor::Red, false, 5.0f, 0, 10.0f);
return false;
}

View File

@ -28,7 +28,8 @@ class THE_TWILIGHT_ABYSS_API ARealTimeCombat : public AGameStateBase
UPROPERTY(EditDefaultsOnly)
int SulfurResource = 10; // W
// AActor* PlayerActor;
UPROPERTY(VisibleAnywhere)
AActor* PlayerActor;
UPROPERTY(VisibleAnywhere)
AActor* EnemyActor;
// AActor* ActiveActor;
@ -120,4 +121,7 @@ private:
void ClearBattleLog();
void UpdateBattleLog();
void UpdateResourceBars() const;
bool HitEnemy() const;
bool bStartTimer = false;
};