添加被动技能及触发器
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()
|
||||
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<class USkillTrigger> SkillTrigger;
|
||||
|
||||
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能效果组"))
|
||||
TArray<FSkillEffectData> SkillEffects;
|
||||
};
|
||||
|
@ -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<USkillTrigger>(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();;
|
||||
|
@ -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();
|
||||
|
@ -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)
|
||||
|
@ -20,14 +20,19 @@ public:
|
||||
virtual bool IsTickable() const override;
|
||||
virtual TStatId GetStatId() const override;
|
||||
|
||||
// UFUNCTION(BlueprintCallable)
|
||||
// void InitPawns(TArray<APawnWithSkill*> 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);
|
||||
|
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