diff --git a/ProjectFish/Content/DataTable/PawnSkills.uasset b/ProjectFish/Content/DataTable/PawnSkills.uasset index 02cddfd..e30b637 100644 Binary files a/ProjectFish/Content/DataTable/PawnSkills.uasset and b/ProjectFish/Content/DataTable/PawnSkills.uasset differ diff --git a/ProjectFish/Source/ProjectFish/Components/FishingRodComponent.cpp b/ProjectFish/Source/ProjectFish/Components/FishingRodComponent.cpp index 11f8e8f..3c56324 100644 --- a/ProjectFish/Source/ProjectFish/Components/FishingRodComponent.cpp +++ b/ProjectFish/Source/ProjectFish/Components/FishingRodComponent.cpp @@ -18,6 +18,11 @@ UFishingRodComponent::UFishingRodComponent() // ... } +void UFishingRodComponent::AddFishRodDamage(int32 Damage) +{ + FishRodData.Damage += Damage; +} + // Called when the game starts void UFishingRodComponent::BeginPlay() diff --git a/ProjectFish/Source/ProjectFish/Components/FishingRodComponent.h b/ProjectFish/Source/ProjectFish/Components/FishingRodComponent.h index 36d03c2..f43cccf 100644 --- a/ProjectFish/Source/ProjectFish/Components/FishingRodComponent.h +++ b/ProjectFish/Source/ProjectFish/Components/FishingRodComponent.h @@ -17,7 +17,7 @@ class PROJECTFISH_API UFishingRodComponent : public UActorComponent public: // Sets default values for this component's properties UFishingRodComponent(); - + void AddFishRodDamage(int32 Damage); protected: // Called when the game starts virtual void BeginPlay() override; diff --git a/ProjectFish/Source/ProjectFish/Definations.h b/ProjectFish/Source/ProjectFish/Definations.h index f738b35..9864075 100644 --- a/ProjectFish/Source/ProjectFish/Definations.h +++ b/ProjectFish/Source/ProjectFish/Definations.h @@ -17,6 +17,7 @@ enum class ESkillEffectType: uint8 Charge UMETA(DisplayName = "充能", ToolTip = "使技能的冷却进度加快"), ModifySpeed UMETA(DisplayName = "速度修改", ToolTip = "使技能冷却进度倍率进展 持续指定时间"), SkillEnduranceRestore UMETA(DisplayName = "技能耐久度恢复", ToolTip = "使技能耐久度恢复"), + EnHanceFishRod UMETA(DisplayName = "增强鱼竿", ToolTip = "使鱼竿上海增加"), }; //技能对象类型 diff --git a/ProjectFish/Source/ProjectFish/Skill/Skill.cpp b/ProjectFish/Source/ProjectFish/Skill/Skill.cpp index 94cbd3f..92454ea 100644 --- a/ProjectFish/Source/ProjectFish/Skill/Skill.cpp +++ b/ProjectFish/Source/ProjectFish/Skill/Skill.cpp @@ -6,6 +6,7 @@ #include "SkillTrigger.h" #include "SkillEffects/SkillEffect_Charge.h" #include "SkillEffects/SkillEffect_Damage.h" +#include "SkillEffects/SkillEffect_EnhanceFishRod.h" #include "SkillEffects/SkillEffect_Heal.h" #include "SkillEffects/SkillEffect_ModifyCD.h" #include "SkillEffects/SkillEffect_ModifySpeed.h" @@ -42,6 +43,12 @@ void USkill::InitSkill(APawnWithSkill* owner, USkillManager* skillManager, FSkil case ESkillEffectType::SkillEnduranceRestore: skillEffect = NewObject(this, USkillEffect_SER::StaticClass()); break; + case ESkillEffectType::EnHanceFishRod: + skillEffect = NewObject(this, USkillEffect_EnhanceFishRod::StaticClass()); + break; + default: + const UEnum* EnumPtr = StaticEnum(); + UE_LOG(LogTemp, Error, TEXT("没有配置 %s类型的Skill Effect"), *EnumPtr->GetNameStringByValue(static_cast(effectData.EffectType))) } if (IsValid(skillEffect)) { @@ -56,11 +63,20 @@ void USkill::InitSkillTrigger() { if (!SkillData.bActiveSkill) { + USkillTrigger* SkillTrigger = NewObject(this, SkillData.SkillTrigger); - FSkillContext context; - context.OwnerSkill = this; - context.SkillManager = SkillManager; - SkillTrigger->Init(context); + if (SkillTrigger) + { + FSkillContext context; + context.OwnerSkill = this; + context.SkillManager = SkillManager; + SkillTrigger->Init(context); + } + else + { + UE_LOG(LogTemp, Warning, TEXT("没有Trigger的被动技能,直接触发")); + ExecuteSkill(); + } } } diff --git a/ProjectFish/Source/ProjectFish/Skill/SkillEffects/SkillEffect_EnhanceFishRod.cpp b/ProjectFish/Source/ProjectFish/Skill/SkillEffects/SkillEffect_EnhanceFishRod.cpp new file mode 100644 index 0000000..2e6aec4 --- /dev/null +++ b/ProjectFish/Source/ProjectFish/Skill/SkillEffects/SkillEffect_EnhanceFishRod.cpp @@ -0,0 +1,24 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "SkillEffect_EnhanceFishRod.h" + +#include "ProjectFish/Components/FishingRodComponent.h" +#include "ProjectFish/Skill/Skill.h" + +void USkillEffect_EnhanceFishRod::Execute(const FSkillContext& context) +{ + Super::Execute(context); + APawnWithSkill* OwnerPawn = context.OwnerSkill->GetOwner(); + if (OwnerPawn->GetComponentByClass(UFishingRodComponent::StaticClass()) != NULL) + { + UFishingRodComponent* rod = Cast(OwnerPawn->GetComponentByClass(UFishingRodComponent::StaticClass())); + rod->AddFishRodDamage( (int32)(effectData.EffectValue)); + } + +} + +FString USkillEffect_EnhanceFishRod::GetSkillEffectDes() +{ + return FString::Printf(TEXT("使鱼竿的伤害增加 %d点"), (int32)(effectData.EffectValue)); +} diff --git a/ProjectFish/Source/ProjectFish/Skill/SkillEffects/SkillEffect_EnhanceFishRod.h b/ProjectFish/Source/ProjectFish/Skill/SkillEffects/SkillEffect_EnhanceFishRod.h new file mode 100644 index 0000000..5dbb6c8 --- /dev/null +++ b/ProjectFish/Source/ProjectFish/Skill/SkillEffects/SkillEffect_EnhanceFishRod.h @@ -0,0 +1,19 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "ProjectFish/Skill/SkillEffect.h" +#include "SkillEffect_EnhanceFishRod.generated.h" + +/** + * + */ +UCLASS() +class PROJECTFISH_API USkillEffect_EnhanceFishRod : public USkillEffect +{ + GENERATED_BODY() +public: + void Execute(const FSkillContext& context) override; + FString GetSkillEffectDes() override; +};