88 lines
2.7 KiB
C++
88 lines
2.7 KiB
C++
#include "AlchemyManager.h"
|
|
|
|
|
|
#include "AlchemyManager.h"
|
|
#include "Kismet/GameplayStatics.h"
|
|
#include "EleriPlayerController.h"
|
|
#include "EnhancedInputComponent.h"
|
|
#include "EnhancedInputSubsystems.h"
|
|
#include "ProjectEleri/Public/InventoryComponent.h"
|
|
#include "ProjectEleri/Items/DataAssets/ItemDataAsset.h"
|
|
#include "ProjectEleri/System/MainBlueprintFunctionLibrary.h"
|
|
|
|
AAlchemyManager::AAlchemyManager()
|
|
{
|
|
PrimaryActorTick.bCanEverTick = true;
|
|
}
|
|
|
|
// Called when the game starts or when spawned
|
|
void AAlchemyManager::BeginPlay()
|
|
{
|
|
Super::BeginPlay();
|
|
|
|
FilteredPotions.Empty();
|
|
PotionOutput = nullptr;
|
|
}
|
|
|
|
void AAlchemyManager::CalculateRewardStack() {
|
|
if (!PotionOutput) return;
|
|
|
|
FinalRewardStack.ItemId = PotionOutput->GetPrimaryAssetId();
|
|
FinalRewardStack.Seed = false;
|
|
FinalRewardStack.HQ = PotionMinigameHqScore >= 99.f;
|
|
FinalRewardStack.Stack = PotionMinigameStackNum;
|
|
}
|
|
|
|
void AAlchemyManager::CalculateFinalMultiplier() {
|
|
UEleriAbilitySystemComponent* ASC = UMainBlueprintFunctionLibrary::GetAbilitySystemComponentFromPlayer(this);
|
|
check(ASC);
|
|
|
|
FinalHqMultiplier = ASC->GetNumericAttribute(UPrimaryAttributeSet::GetAlchemyMultiplierAttribute());
|
|
if(FinalHqMultiplier <= 0.f)
|
|
FinalHqMultiplier = 1.f;
|
|
|
|
const float InTime = FMath::Clamp(PotionMixturePurity, 0.f, 1.f);
|
|
FinalHqMultiplier *= PurityCurve.GetRichCurveConst()->Eval(InTime);
|
|
|
|
if (PotionOutput) {
|
|
FinalHqMultiplier /= FMath::Clamp(PotionOutput->CraftableDifficulty, 0.001f, 99999.f);
|
|
}
|
|
}
|
|
|
|
void AAlchemyManager::SetStirringDirection(FVector2D NewDirection)
|
|
{
|
|
OnStirringDirection.Broadcast(NewDirection);
|
|
}
|
|
|
|
void AAlchemyManager::MinigameConfirmInput()
|
|
{
|
|
OnConfirmInputUsed.Broadcast();
|
|
}
|
|
|
|
void AAlchemyManager::ToggleMinigameInput(bool bEnable) {
|
|
AEleriPlayerController* PC = Cast<AEleriPlayerController>(UGameplayStatics::GetPlayerController(GetWorld(), 0));
|
|
if (!IsValid(PC)) return;
|
|
|
|
// Get the Enhanced Input Local Player Subsystem from the Local Player related to our Player Controller.
|
|
if (UEnhancedInputLocalPlayerSubsystem* Subsystem = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(PC->GetLocalPlayer())) {
|
|
Subsystem->RemoveMappingContext(PC->AlchemyMinigameContext);
|
|
if (bEnable) {
|
|
PC->SetInputMode(FInputModeGameOnly());
|
|
PC->SetShowMouseCursor(false);
|
|
Subsystem->AddMappingContext(PC->AlchemyMinigameContext, 99);
|
|
}
|
|
else {
|
|
PC->SetInputMode(FInputModeUIOnly());
|
|
PC->SetShowMouseCursor(true);
|
|
}
|
|
}
|
|
}
|
|
|
|
void AAlchemyManager::ToggleStirringMinigame(bool bEnable)
|
|
{
|
|
ToggleMinigameInput(bEnable);
|
|
bStirringMinigame = bEnable;
|
|
}
|
|
|
|
|