Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Fill out your copyright notice in the Description page of Project Settings.
- #include "ABCharacter.h"
- #include "ABAnimInstance.h"
- #include "ABWeapon.h"
- #include "ABCharacterStatComponent.h"
- #include "DrawDebugHelpers.h"
- #include "Components/WidgetComponent.h"
- #include "ABCharacterWidget.h"
- #include "ABAIController.h"
- #include "ABCharacterSetting.h"
- #include "ABGameInstance.h"
- #include "ABPlayerController.h"
- // Sets default values
- AABCharacter::AABCharacter()
- {
- ...
- DeadTimer = 5.0f;
- }
- void AABCharacter::SetCharacterState(ECharacterState NewState)
- {
- ABCHECK(CurrentState != NewState);
- CurrentState = NewState;
- switch (CurrentState)
- {
- case ECharacterState::LOADING:
- {
- if (bIsPlayer)
- {
- DisableInput(ABPlayerController);
- }
- SetActorHiddenInGame(true);
- HPBarWidget->SetHiddenInGame(true);
- bCanBeDamaged = false;
- break;
- }
- case ECharacterState::READY:
- {
- SetActorHiddenInGame(false);
- HPBarWidget->SetHiddenInGame(false);
- bCanBeDamaged = true;
- CharacterStat->OnHPIsZero.AddLambda([this]() -> void {
- SetCharacterState(ECharacterState::DEAD);
- });
- auto CharacterWidget = Cast<UABCharacterWidget>(HPBarWidget->GetUserWidgetObject());
- ABCHECK(nullptr != CharacterWidget);
- CharacterWidget->BindCharacterStat(CharacterStat);
- if (bIsPlayer)
- {
- SetControlMode(EControlMode::DIABLO);
- GetCharacterMovement()->MaxWalkSpeed = 600.0f;
- EnableInput(ABPlayerController);
- }
- else
- {
- SetControlMode(EControlMode::NPC);
- GetCharacterMovement()->MaxWalkSpeed = 400.0f;
- ABAIController->RunAI();
- }
- break;
- }
- case ECharacterState::DEAD:
- {
- SetActorEnableCollision(false);
- GetMesh()->SetHiddenInGame(false);
- HPBarWidget->SetHiddenInGame(true);
- ABAnim->SetDeadAnim();
- bCanBeDamaged = false;
- if (bIsPlayer)
- {
- DisableInput(ABPlayerController);
- }
- else
- {
- ABAIController->StopAI();
- }
- GetWorld()->GetTimerManager().SetTimer(DeadTimerHandle, FTimerDelegate::CreateLambda([this]() -> void {
- GetWorld()->GetTimerManager().ClearTimer(DeadTimerHandle);
- if (bIsPlayer)
- {
- ABPlayerController->RestartLevel();
- }
- else
- {
- Destroy();
- }
- }), DeadTimer, false);
- break;
- }
- }
- }
Add Comment
Please, Sign In to add comment