添加被动技能及触发器
This commit is contained in:
parent
2c30f24aad
commit
4e7af37166
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
ProjectFish/Content/SkillTrigger/SkillTrigger_ByTag.uasset
Normal file
BIN
ProjectFish/Content/SkillTrigger/SkillTrigger_ByTag.uasset
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -53,8 +53,8 @@ struct FSkillContext
|
|||||||
GENERATED_BODY()
|
GENERATED_BODY()
|
||||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "敌人"))
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "敌人"))
|
||||||
class USkillManager* SkillManager;
|
class USkillManager* SkillManager;
|
||||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "自身"))
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "所属的技能"))
|
||||||
APawnWithSkill* Self;
|
class USkill* OwnerSkill;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -111,15 +111,6 @@ struct FSkillData: public FTableRowBase
|
|||||||
|
|
||||||
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta = (AllowedClasses = "Texture2D", ToolTip = "技能图片"))
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta = (AllowedClasses = "Texture2D", ToolTip = "技能图片"))
|
||||||
FSoftObjectPath SkillTexture;
|
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"))
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能Tag"))
|
||||||
FGameplayTag SkillTag;
|
FGameplayTag SkillTag;
|
||||||
@ -127,6 +118,25 @@ struct FSkillData: public FTableRowBase
|
|||||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "背包占用"))
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "背包占用"))
|
||||||
FIntPoint SkillWeight;
|
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<class USkillTrigger> SkillTrigger;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能效果组"))
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能效果组"))
|
||||||
TArray<FSkillEffectData> SkillEffects;
|
TArray<FSkillEffectData> SkillEffects;
|
||||||
};
|
};
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include "Skill.h"
|
#include "Skill.h"
|
||||||
|
|
||||||
|
#include "SkillTrigger.h"
|
||||||
#include "SkillEffects/SkillEffect_Charge.h"
|
#include "SkillEffects/SkillEffect_Charge.h"
|
||||||
#include "SkillEffects/SkillEffect_Damage.h"
|
#include "SkillEffects/SkillEffect_Damage.h"
|
||||||
#include "SkillEffects/SkillEffect_Heal.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<USkillTrigger>(this, SkillData.SkillTrigger);
|
||||||
|
FSkillContext context;
|
||||||
|
context.OwnerSkill = this;
|
||||||
|
context.SkillManager = SkillManager;
|
||||||
|
SkillTrigger->Init(context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool USkill::SkillTickAble()
|
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)
|
void USkill::TickSkill(float deltaTime)
|
||||||
@ -62,18 +76,7 @@ void USkill::TickSkill(float deltaTime)
|
|||||||
RemainingTime -= deltaTime * SkillData.Speed;
|
RemainingTime -= deltaTime * SkillData.Speed;
|
||||||
if (RemainingTime <= 0 )
|
if (RemainingTime <= 0 )
|
||||||
{
|
{
|
||||||
RemainingTime = 0;
|
ExecuteSkill();
|
||||||
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());
|
|
||||||
}
|
}
|
||||||
if (RemainingEndurance == 0)
|
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
|
FString USkill::GetSkillName() const
|
||||||
{
|
{
|
||||||
return SkillData.SkillName.ToString();;
|
return SkillData.SkillName.ToString();;
|
||||||
|
@ -20,7 +20,9 @@ class PROJECTFISH_API USkill : public UObject
|
|||||||
GENERATED_BODY()
|
GENERATED_BODY()
|
||||||
public:
|
public:
|
||||||
void InitSkill(class APawnWithSkill* owner, USkillManager* skillManager, FSkillData SkillData);
|
void InitSkill(class APawnWithSkill* owner, USkillManager* skillManager, FSkillData SkillData);
|
||||||
|
void InitSkillTrigger();
|
||||||
void TickSkill(float deltaTime);
|
void TickSkill(float deltaTime);
|
||||||
|
void ExecuteSkill();
|
||||||
|
|
||||||
FString GetSkillName() const;
|
FString GetSkillName() const;
|
||||||
class APawnWithSkill* GetOwner();
|
class APawnWithSkill* GetOwner();
|
||||||
|
@ -87,6 +87,24 @@ USkill* USkillManager::AddSkill(FSkillData data, APawnWithSkill* Pawn, FIntPoin
|
|||||||
return nullptr;
|
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)
|
void USkillManager::RemoveSkill(USkill* Skill)
|
||||||
|
@ -20,14 +20,19 @@ public:
|
|||||||
virtual bool IsTickable() const override;
|
virtual bool IsTickable() const override;
|
||||||
virtual TStatId GetStatId() const override;
|
virtual TStatId GetStatId() const override;
|
||||||
|
|
||||||
// UFUNCTION(BlueprintCallable)
|
|
||||||
// void InitPawns(TArray<APawnWithSkill*> Pawns);
|
|
||||||
UFUNCTION(BlueprintCallable)
|
UFUNCTION(BlueprintCallable)
|
||||||
void AddPawn(class APawnWithSkill* Pawn, FIntPoint BagSize);
|
void AddPawn(class APawnWithSkill* Pawn, FIntPoint BagSize);
|
||||||
|
|
||||||
UFUNCTION(BlueprintCallable)
|
UFUNCTION(BlueprintCallable)
|
||||||
USkill* AddSkill(FSkillData data, APawnWithSkill* Pawn, FIntPoint& BagPos);
|
USkill* AddSkill(FSkillData data, APawnWithSkill* Pawn, FIntPoint& BagPos);
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable)
|
||||||
|
void OnAllSkillAdded();
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintPure)
|
||||||
|
class USkill* GetSkillByTag(FGameplayTag Tag);
|
||||||
|
|
||||||
|
|
||||||
UFUNCTION(BlueprintCallable)
|
UFUNCTION(BlueprintCallable)
|
||||||
void RemoveSkill(class USkill *Skill);
|
void RemoveSkill(class USkill *Skill);
|
||||||
|
17
ProjectFish/Source/ProjectFish/Skill/SkillTrigger.cpp
Normal file
17
ProjectFish/Source/ProjectFish/Skill/SkillTrigger.cpp
Normal file
@ -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();
|
||||||
|
}
|
26
ProjectFish/Source/ProjectFish/Skill/SkillTrigger.h
Normal file
26
ProjectFish/Source/ProjectFish/Skill/SkillTrigger.h
Normal file
@ -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;
|
||||||
|
};
|
Loading…
x
Reference in New Issue
Block a user