ProjectM/Source/ProjectT/System/SinglePlay/Characters/Player/SPPyroMania.cpp

102 lines
2.8 KiB
C++

// Fill out your copyright notice in the Description page of Project Settings.
#include "SPPyroMania.h"
#include "ProjectT/System/Core/Characters/Player/Animations/AnimInstance/PlayerCharacterAnimInstance.h"
#include "ProjectT/System/Core/Characters/Skill/PyroAtk.h"
#include "ProjectT/System/Core/Components/PlayerStatusComponent.h"
ASPPyroMania::ASPPyroMania()
{
PrimaryActorTick.bCanEverTick = true;
}
void ASPPyroMania::BeginPlay()
{
Super::BeginPlay();
}
void ASPPyroMania::OnConstruction(const FTransform& Transform)
{
Super::OnConstruction(Transform);
}
void ASPPyroMania::SetSkillState(EPlayerSkillState InSkillState, FSkill InSkillData)
{
Super::SetSkillState(InSkillState, InSkillData);
switch(InSkillState)
{
case EPlayerSkillState::Start:
{
if(!bMovingAction) PlayActionMontage(*InSkillData.sSkillName,nullptr);
SetSkillState(EPlayerSkillState::Aim);
break;
}
case EPlayerSkillState::Aim:
{
StartMouseCursorLinear(true);
CurrentUsingSkill->AimSkill();
if(bMovingAction)
{
PlayerAnimInstance->SetActionState(false);
}
else
{
SetInputable(false);
GetWorld()->GetTimerManager().ClearTimer(MeshRotateCalibrateTimerHandle);
GetWorld()->GetTimerManager().SetTimer(MouseCursorTimerHandle, this, &ASPPyroMania::RotateMeshToMouseCursor, GetWorld()->DeltaTimeSeconds, true);
}
break;
}
case EPlayerSkillState::Cancel:
{
StartMouseCursorLinear(false);
GetWorld()->GetTimerManager().ClearTimer(MouseCursorTimerHandle);
break;
}
case EPlayerSkillState::Release:
{
StartMouseCursorLinear(false);
GetWorld()->GetTimerManager().ClearTimer(MouseCursorTimerHandle);
break;
}
case EPlayerSkillState::Activate:
{
CurrentUsingSkill->ActivateSkill();
StartMouseCursorLinear(false);
PlayerAnimInstance->SetActionState(true);
SetSkillCoolTime(CurrentUsingSkill.GetClass(), InSkillData);
GetWorld()->GetTimerManager().ClearTimer(MouseCursorTimerHandle);
SetActorRotationToMouseCursor();
CalibrateMeshMouseCursor();
SetInputable(false);
PlayActionMontage(*InSkillData.sSkillName.Append("Active"),FOnMontageEnded::CreateLambda([this](UAnimMontage* Montage, bool Interrupted)
{
if(!Interrupted)
{
PlayerStatusComponent->SetStatusCharMove(PlayerStatusComponent->GetStatusPreviousCharMove());
PlayerAnimInstance->SetActionState(false);
SetInputable(true);
}
}));
break;
}
case EPlayerSkillState::Finish: break;
default: NMT_LOG("PyroSkill State None"); break;
}
}
void ASPPyroMania::SetMeleeAtkSkillState(EPlayerSkillState InSkillState, FSkill InSkillData)
{
Super::SetMeleeAtkSkillState(InSkillState, InSkillData);
}
void ASPPyroMania::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}
void ASPPyroMania::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
}