diff --git a/Content/Weapons/Garlic/BP_GarlicWeapon.uasset b/Content/Weapons/Garlic/BP_GarlicWeapon.uasset index 721b993..1ba03c9 100644 --- a/Content/Weapons/Garlic/BP_GarlicWeapon.uasset +++ b/Content/Weapons/Garlic/BP_GarlicWeapon.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4fdd9890fedfce0ca8761afe410dd617665a94f06c7d08f75c3d4fc645529246 -size 23475 +oid sha256:f727c25f2df8e1b07229b73d8e93789ab0abd670e460c4dc7bbe95109d098d50 +size 23913 diff --git a/Source/vampires/Weapon.cpp b/Source/vampires/Weapon.cpp index 4040058..0aaa5c8 100644 --- a/Source/vampires/Weapon.cpp +++ b/Source/vampires/Weapon.cpp @@ -23,7 +23,7 @@ void AWeapon::BeginPlay() if (expcomponent) { - expcomponent->OnEXPLevelUp.AddUniqueDynamic(this, &AWeapon::UpgradeWeapon); + //expcomponent->OnEXPLevelUp.AddUniqueDynamic(this, &AWeapon::UpgradeWeapon); } } @@ -34,15 +34,11 @@ void AWeapon::FireWeaponAction_Implementation() bool AWeapon::UpgradeWeapon() { - return UpgradeWeapon(CurrentLevel + 1); -} - -bool AWeapon::UpgradeWeapon(int newLevel) -{ - if (newLevel < Upgrades.Num()) + if (CurrentLevel + 1 <= Upgrades.Num()) { - WeaponCooldown *= Upgrades[newLevel].WeaponCooldownMultiplier; - Damage *= Upgrades[newLevel].WeaponDamageMultiplier; + CurrentLevel++; + WeaponCooldown *= Upgrades[CurrentLevel - 1].WeaponCooldownMultiplier; + Damage *= Upgrades[CurrentLevel - 1].WeaponDamageMultiplier; GetWorldTimerManager().ClearTimer(WeaponTimerHandle); GetWorldTimerManager().SetTimer(WeaponTimerHandle, this, &AWeapon::FireWeaponAction, WeaponCooldown, true); @@ -50,4 +46,4 @@ bool AWeapon::UpgradeWeapon(int newLevel) } return false; -} +} \ No newline at end of file diff --git a/Source/vampires/Weapon.h b/Source/vampires/Weapon.h index 1d27e7c..881226f 100644 --- a/Source/vampires/Weapon.h +++ b/Source/vampires/Weapon.h @@ -56,11 +56,12 @@ public: UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Weapon Properties") TArray Upgrades = TArray(); + + int CurrentLevel = 0; private: FTimerHandle WeaponTimerHandle; - int CurrentLevel = 0; public: // Sets default values for this actor's properties @@ -77,5 +78,4 @@ public: UFUNCTION() virtual bool UpgradeWeapon(); - virtual bool UpgradeWeapon(int newLevel); }; diff --git a/Source/vampires/Weapons/GarlicWeapon.cpp b/Source/vampires/Weapons/GarlicWeapon.cpp index 3056697..b439a0d 100644 --- a/Source/vampires/Weapons/GarlicWeapon.cpp +++ b/Source/vampires/Weapons/GarlicWeapon.cpp @@ -12,6 +12,7 @@ AGarlicWeapon::AGarlicWeapon() SphereComponent->SetupAttachment(RootComponent); SphereComponent->SetSphereRadius(150.0f); Damage = 51.0f; + Range = SphereComponent->GetScaledSphereRadius(); } void AGarlicWeapon::BeginPlay() @@ -87,3 +88,14 @@ void AGarlicWeapon::GarlicFireWeaponAction(FOverlappedEnemy EnemyCharacter) } } } + +bool AGarlicWeapon::UpgradeWeapon() +{ + if (Super::UpgradeWeapon()) + { + Range *= Upgrades[CurrentLevel - 1].WeaponRangeMultiplier; + SphereComponent->SetSphereRadius(Range); + return true; + } + return false; +} diff --git a/Source/vampires/Weapons/GarlicWeapon.h b/Source/vampires/Weapons/GarlicWeapon.h index 69bc1f4..f8f1ba0 100644 --- a/Source/vampires/Weapons/GarlicWeapon.h +++ b/Source/vampires/Weapons/GarlicWeapon.h @@ -26,12 +26,14 @@ UCLASS() class VAMPIRES_API AGarlicWeapon : public AWeapon { GENERATED_BODY() - +public: UPROPERTY(VisibleAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = "true")) USphereComponent* SphereComponent; TArray OverlappedEnemies; +private: + float Range; public: AGarlicWeapon(); @@ -43,7 +45,9 @@ public: UFUNCTION() void GarlicFireWeaponAction(FOverlappedEnemy EnemyCharacter); - + + virtual bool UpgradeWeapon() override; + protected: UFUNCTION() void OnBeginOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, diff --git a/Source/vampires/Widgets/LevelUpWidget.cpp b/Source/vampires/Widgets/LevelUpWidget.cpp index a306932..d777be1 100644 --- a/Source/vampires/Widgets/LevelUpWidget.cpp +++ b/Source/vampires/Widgets/LevelUpWidget.cpp @@ -38,17 +38,15 @@ void ULevelUpWidget::NativeConstruct() for (AWeapon* weapon : Inventory) { - UUpgradeButtonDataObject* Temp = NewObject(this); - Temp->SetData(weapon); - upgradeItems.Add(Temp); + if (weapon->CurrentLevel < weapon->Upgrades.Num()) + { + UUpgradeButtonDataObject* Temp = NewObject(this); + Temp->SetData(weapon, this); + upgradeItems.Add(Temp); + } } UpgradesListView->SetListItems(upgradeItems); - - // for (TSubclassOf item : UpgradeItems) - // { - // upgradeItems.Add(NewObject(this, item)); - // } } SetIsFocusable(true); } diff --git a/Source/vampires/Widgets/UpgradeButtonDataObject.cpp b/Source/vampires/Widgets/UpgradeButtonDataObject.cpp index 506ef66..cf954d2 100644 --- a/Source/vampires/Widgets/UpgradeButtonDataObject.cpp +++ b/Source/vampires/Widgets/UpgradeButtonDataObject.cpp @@ -5,15 +5,16 @@ #include "vampires/Weapon.h" -void UUpgradeButtonDataObject::SetData(AWeapon* Weapon) +void UUpgradeButtonDataObject::SetData(AWeapon* Weapon, UUserWidget* parent) { WeaponName = Weapon->Name; Description = Weapon->Description; WeaponIcon = Weapon->Icon; WeaponInstance = Weapon; + Parent = parent; } -void UUpgradeButtonDataObject::SetData(TSubclassOf Weapon) +void UUpgradeButtonDataObject::SetData(TSubclassOf Weapon, UUserWidget* parent) { AWeapon* temp = NewObject(this, Weapon); if (temp) @@ -22,5 +23,6 @@ void UUpgradeButtonDataObject::SetData(TSubclassOf Weapon) Description = temp->Description; WeaponIcon = temp->Icon; WeaponTemplate = Weapon; + Parent = parent; } } diff --git a/Source/vampires/Widgets/UpgradeButtonDataObject.h b/Source/vampires/Widgets/UpgradeButtonDataObject.h index 5e980d4..57a89a2 100644 --- a/Source/vampires/Widgets/UpgradeButtonDataObject.h +++ b/Source/vampires/Widgets/UpgradeButtonDataObject.h @@ -31,6 +31,9 @@ public: UPROPERTY(EditAnywhere, BlueprintReadWrite) TObjectPtr WeaponInstance; - void SetData(AWeapon* Weapon); - void SetData(TSubclassOf Weapon); + UPROPERTY(EditAnywhere, BlueprintReadWrite) + TObjectPtr Parent; + + void SetData(AWeapon* Weapon, UUserWidget* parent); + void SetData(TSubclassOf Weapon, UUserWidget* parent); }; diff --git a/Source/vampires/Widgets/UpgradeButtonWidget.cpp b/Source/vampires/Widgets/UpgradeButtonWidget.cpp index 09bd2bd..25708e8 100644 --- a/Source/vampires/Widgets/UpgradeButtonWidget.cpp +++ b/Source/vampires/Widgets/UpgradeButtonWidget.cpp @@ -4,18 +4,18 @@ #include "UpgradeButtonWidget.h" #include "UpgradeButtonDataObject.h" +#include "Blueprint/WidgetBlueprintLibrary.h" #include "Components/Button.h" #include "Components/Image.h" #include "Components/TextBlock.h" +#include "Kismet/GameplayStatics.h" +#include "Kismet/KismetSystemLibrary.h" +#include "vampires/Weapon.h" +#include "UObject/UObjectBase.h" void UUpgradeButtonWidget::NativeConstruct() { Super::NativeConstruct(); - - if (Body) - { - Body->OnClicked.AddUniqueDynamic(this, &UUpgradeButtonWidget::OnClicked); - } } void UUpgradeButtonWidget::NativeOnListItemObjectSet(UObject* ListItemObject) @@ -27,6 +27,24 @@ void UUpgradeButtonWidget::NativeOnListItemObjectSet(UObject* ListItemObject) WeaponNameTextBlock->SetText(Item->WeaponName); DescriptionTextBlock->SetText(Item->Description); WeaponIcon->SetBrushFromTexture(Item->WeaponIcon); + Parent = Item->Parent; + + if (Item->WeaponInstance != nullptr) + { + UpgradeType = EUpgradeType::Upgrade; + WeaponInstance = Item->WeaponInstance; + } + else if (Item->WeaponTemplate != nullptr) + { + UpgradeType = EUpgradeType::NewWeapon; + WeaponTemplate = Item->WeaponTemplate; + } + + + if (Body) + { + Body->OnClicked.AddUniqueDynamic(this, &UUpgradeButtonWidget::OnClicked); + } } @@ -43,4 +61,27 @@ void UUpgradeButtonWidget::NativeOnListItemObjectSet(UObject* ListItemObject) void UUpgradeButtonWidget::OnClicked() { + switch (UpgradeType) { + case Upgrade: + WeaponInstance->UpgradeWeapon(); + break; + case NewWeapon: + // TODO: Spawn weapon + break; + default: ; + } + + if (Parent) + { + Parent->RemoveFromParent(); + + if (APlayerController* playerController = UGameplayStatics::GetPlayerController(GetWorld(), 0)) + { + UWidgetBlueprintLibrary::SetInputMode_GameOnly(playerController); + playerController->bShowMouseCursor = false; + playerController->SetPause(false); + } + + Parent->SetIsFocusable(false); + } } diff --git a/Source/vampires/Widgets/UpgradeButtonWidget.h b/Source/vampires/Widgets/UpgradeButtonWidget.h index 730dcb0..818e8c7 100644 --- a/Source/vampires/Widgets/UpgradeButtonWidget.h +++ b/Source/vampires/Widgets/UpgradeButtonWidget.h @@ -7,6 +7,8 @@ #include "Blueprint/UserWidget.h" #include "UpgradeButtonWidget.generated.h" +class AWeapon; + UENUM(BlueprintType) enum EUpgradeType { @@ -48,6 +50,14 @@ public: UPROPERTY(EditDefaultsOnly) TEnumAsByte UpgradeType; + UPROPERTY(EditAnywhere, BlueprintReadWrite) + TSubclassOf WeaponTemplate; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + TObjectPtr WeaponInstance; + + TObjectPtr Parent; + private: UPROPERTY(meta=(BindWidget)) UImage* UpgradeTypeIcon;