diff --git a/ProjectFish/Content/DataTable/PawnSkills.uasset b/ProjectFish/Content/DataTable/PawnSkills.uasset index 6160351..11609e3 100644 Binary files a/ProjectFish/Content/DataTable/PawnSkills.uasset and b/ProjectFish/Content/DataTable/PawnSkills.uasset differ diff --git a/ProjectFish/Content/FishingRodSkills/UFRS_TriggerBySKill.uasset b/ProjectFish/Content/FishingRodSkills/UFRS_TriggerBySKill.uasset index ddb1650..79e3397 100644 Binary files a/ProjectFish/Content/FishingRodSkills/UFRS_TriggerBySKill.uasset and b/ProjectFish/Content/FishingRodSkills/UFRS_TriggerBySKill.uasset differ diff --git a/ProjectFish/Content/Gameplay/BP_Dabaza_GameMode.uasset b/ProjectFish/Content/Gameplay/BP_Dabaza_GameMode.uasset index 4bf6bd3..865b313 100644 Binary files a/ProjectFish/Content/Gameplay/BP_Dabaza_GameMode.uasset and b/ProjectFish/Content/Gameplay/BP_Dabaza_GameMode.uasset differ diff --git a/ProjectFish/Content/SkillTrigger/SkillTrigger_ByTag.uasset b/ProjectFish/Content/SkillTrigger/SkillTrigger_ByTag.uasset new file mode 100644 index 0000000..ba5844a Binary files /dev/null and b/ProjectFish/Content/SkillTrigger/SkillTrigger_ByTag.uasset differ diff --git a/ProjectFish/Content/UI/WBP_SkillContainer.uasset b/ProjectFish/Content/UI/WBP_SkillContainer.uasset index f29507a..188c100 100644 Binary files a/ProjectFish/Content/UI/WBP_SkillContainer.uasset and b/ProjectFish/Content/UI/WBP_SkillContainer.uasset differ diff --git a/ProjectFish/Content/__ExternalActors__/Maps/Dabaza/8/VO/DV1AKH9EUYVRMVYP3DYZVH.uasset b/ProjectFish/Content/__ExternalActors__/Maps/Dabaza/8/VO/DV1AKH9EUYVRMVYP3DYZVH.uasset index 6ef9b08..8360458 100644 Binary files a/ProjectFish/Content/__ExternalActors__/Maps/Dabaza/8/VO/DV1AKH9EUYVRMVYP3DYZVH.uasset and b/ProjectFish/Content/__ExternalActors__/Maps/Dabaza/8/VO/DV1AKH9EUYVRMVYP3DYZVH.uasset differ diff --git a/ProjectFish/Content/__ExternalActors__/Maps/Dabaza/9/GX/KCVNFI6L6PBCQ844W3A926.uasset b/ProjectFish/Content/__ExternalActors__/Maps/Dabaza/9/GX/KCVNFI6L6PBCQ844W3A926.uasset index 530c619..e41ef75 100644 Binary files a/ProjectFish/Content/__ExternalActors__/Maps/Dabaza/9/GX/KCVNFI6L6PBCQ844W3A926.uasset and b/ProjectFish/Content/__ExternalActors__/Maps/Dabaza/9/GX/KCVNFI6L6PBCQ844W3A926.uasset differ diff --git a/ProjectFish/Source/ProjectFish/Definations.h b/ProjectFish/Source/ProjectFish/Definations.h index 2525c0a..531e4e5 100644 --- a/ProjectFish/Source/ProjectFish/Definations.h +++ b/ProjectFish/Source/ProjectFish/Definations.h @@ -53,8 +53,8 @@ struct FSkillContext GENERATED_BODY() UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "敌人")) class USkillManager* SkillManager; - UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "自身")) - APawnWithSkill* Self; + UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "所属的技能")) + class USkill* OwnerSkill; }; @@ -111,15 +111,6 @@ struct FSkillData: public FTableRowBase UPROPERTY(BlueprintReadWrite, EditAnywhere, meta = (AllowedClasses = "Texture2D", ToolTip = "技能图片")) FSoftObjectPath SkillTexture; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能CD")) - float CD; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能CD速度")) - float Speed = 1.0f; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能耐久度")) - int32 Endurance; UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能Tag")) FGameplayTag SkillTag; @@ -127,6 +118,25 @@ struct FSkillData: public FTableRowBase UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "背包占用")) FIntPoint SkillWeight; + UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "是否为主动技能")) + bool bActiveSkill = true; + + //主动技能属性 + UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能CD", EditConditionHides, EditCondition = "bActiveSkill")) + float CD; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能CD速度", EditConditionHides, EditCondition = "bActiveSkill")) + float Speed = 1.0f; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能耐久度", EditConditionHides, EditCondition = "bActiveSkill")) + int32 Endurance; + + //被动技能属性 + UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能CD速度", AllowedClasses = "SkillTrigger", EditConditionHides, EditCondition = "!bActiveSkill")) + TSubclassOf SkillTrigger; + + + UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能效果组")) TArray SkillEffects; }; diff --git a/ProjectFish/Source/ProjectFish/Skill/Skill.cpp b/ProjectFish/Source/ProjectFish/Skill/Skill.cpp index 4ce33a6..3f1ed94 100644 --- a/ProjectFish/Source/ProjectFish/Skill/Skill.cpp +++ b/ProjectFish/Source/ProjectFish/Skill/Skill.cpp @@ -3,6 +3,7 @@ #include "Skill.h" +#include "SkillTrigger.h" #include "SkillEffects/SkillEffect_Charge.h" #include "SkillEffects/SkillEffect_Damage.h" #include "SkillEffects/SkillEffect_Heal.h" @@ -50,10 +51,23 @@ void USkill::InitSkill(APawnWithSkill* owner, USkillManager* skillManager, FSkil } } +void USkill::InitSkillTrigger() +{ + if (!SkillData.bActiveSkill) + { + USkillTrigger* SkillTrigger = NewObject(this, SkillData.SkillTrigger); + FSkillContext context; + context.OwnerSkill = this; + context.SkillManager = SkillManager; + SkillTrigger->Init(context); + } +} + + bool USkill::SkillTickAble() { //剩余次数无限制或者拥有者没有被韧性眩晕 - return (RemainingEndurance >0 || RemainingEndurance == -1) && Owner->CurrentTenacity > 0; + return (RemainingEndurance >0 || RemainingEndurance == -1 ) && Owner->CurrentTenacity > 0 && SkillData.bActiveSkill; } void USkill::TickSkill(float deltaTime) @@ -62,18 +76,7 @@ void USkill::TickSkill(float deltaTime) RemainingTime -= deltaTime * SkillData.Speed; if (RemainingTime <= 0 ) { - RemainingTime = 0; - if (RemainingEndurance >0) - --RemainingEndurance; - FSkillContext context; - context.Self = Owner; - context.SkillManager = SkillManager; - for (auto Effect: SkillEffects) - { - Effect->Execute(context); - } - RemainingTime = SkillData.CD; - OnSkillExecute.Broadcast(SkillData.SkillName.ToString()); + ExecuteSkill(); } if (RemainingEndurance == 0) { @@ -84,6 +87,22 @@ void USkill::TickSkill(float deltaTime) } } +void USkill::ExecuteSkill() +{ + RemainingTime = 0; + if (RemainingEndurance >0) + --RemainingEndurance; + FSkillContext context; + context.OwnerSkill = this; + context.SkillManager = SkillManager; + for (auto Effect: SkillEffects) + { + Effect->Execute(context); + } + RemainingTime = SkillData.CD; + OnSkillExecute.Broadcast(SkillData.SkillName.ToString()); +} + FString USkill::GetSkillName() const { return SkillData.SkillName.ToString();; diff --git a/ProjectFish/Source/ProjectFish/Skill/Skill.h b/ProjectFish/Source/ProjectFish/Skill/Skill.h index 517bd3a..3dfbcb1 100644 --- a/ProjectFish/Source/ProjectFish/Skill/Skill.h +++ b/ProjectFish/Source/ProjectFish/Skill/Skill.h @@ -20,7 +20,9 @@ class PROJECTFISH_API USkill : public UObject GENERATED_BODY() public: void InitSkill(class APawnWithSkill* owner, USkillManager* skillManager, FSkillData SkillData); + void InitSkillTrigger(); void TickSkill(float deltaTime); + void ExecuteSkill(); FString GetSkillName() const; class APawnWithSkill* GetOwner(); diff --git a/ProjectFish/Source/ProjectFish/Skill/SkillManager.cpp b/ProjectFish/Source/ProjectFish/Skill/SkillManager.cpp index 5bf5e68..f97a7b7 100644 --- a/ProjectFish/Source/ProjectFish/Skill/SkillManager.cpp +++ b/ProjectFish/Source/ProjectFish/Skill/SkillManager.cpp @@ -87,6 +87,24 @@ USkill* USkillManager::AddSkill(FSkillData data, APawnWithSkill* Pawn, FIntPoin return nullptr; } +void USkillManager::OnAllSkillAdded() +{ + //所有技能初始化后,初始化技能的触发器 + for (auto Skill : Skills) + { + Skill->InitSkillTrigger(); + } +} + +class USkill* USkillManager::GetSkillByTag(FGameplayTag Tag) +{ + for (auto Skill : Skills) + { + if (Skill->GetSkillData().SkillTag == Tag) + return Skill; + } + return nullptr; +} void USkillManager::RemoveSkill(USkill* Skill) diff --git a/ProjectFish/Source/ProjectFish/Skill/SkillManager.h b/ProjectFish/Source/ProjectFish/Skill/SkillManager.h index 14cdb5f..647407e 100644 --- a/ProjectFish/Source/ProjectFish/Skill/SkillManager.h +++ b/ProjectFish/Source/ProjectFish/Skill/SkillManager.h @@ -20,14 +20,19 @@ public: virtual bool IsTickable() const override; virtual TStatId GetStatId() const override; - // UFUNCTION(BlueprintCallable) - // void InitPawns(TArray Pawns); + UFUNCTION(BlueprintCallable) void AddPawn(class APawnWithSkill* Pawn, FIntPoint BagSize); UFUNCTION(BlueprintCallable) USkill* AddSkill(FSkillData data, APawnWithSkill* Pawn, FIntPoint& BagPos); + UFUNCTION(BlueprintCallable) + void OnAllSkillAdded(); + + UFUNCTION(BlueprintPure) + class USkill* GetSkillByTag(FGameplayTag Tag); + UFUNCTION(BlueprintCallable) void RemoveSkill(class USkill *Skill); diff --git a/ProjectFish/Source/ProjectFish/Skill/SkillTrigger.cpp b/ProjectFish/Source/ProjectFish/Skill/SkillTrigger.cpp new file mode 100644 index 0000000..7e575ab --- /dev/null +++ b/ProjectFish/Source/ProjectFish/Skill/SkillTrigger.cpp @@ -0,0 +1,17 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "SkillTrigger.h" + +#include "Skill.h" + + +void USkillTrigger::Init_Implementation(FSkillContext context) +{ + SkillContext = context; +} + +void USkillTrigger::OnTrigger() +{ + SkillContext.OwnerSkill->ExecuteSkill(); +} diff --git a/ProjectFish/Source/ProjectFish/Skill/SkillTrigger.h b/ProjectFish/Source/ProjectFish/Skill/SkillTrigger.h new file mode 100644 index 0000000..526c60f --- /dev/null +++ b/ProjectFish/Source/ProjectFish/Skill/SkillTrigger.h @@ -0,0 +1,26 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "ProjectFish/Definations.h" +#include "UObject/Object.h" +#include "SkillTrigger.generated.h" + +/** + * + */ +UCLASS(Blueprintable) +class PROJECTFISH_API USkillTrigger : public UObject +{ + GENERATED_BODY() +public: + UFUNCTION(BlueprintNativeEvent) + void Init(FSkillContext context); + UFUNCTION(BlueprintCallable) + void OnTrigger(); + +protected: + UPROPERTY(BlueprintReadOnly) + FSkillContext SkillContext; +};