Files
ProjectEleri/Source/ProjectEleri/Private/AlchemyManager.cpp

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;
}