更新技能配置
This commit is contained in:
parent
a39e01cefa
commit
9a18402811
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -2,3 +2,23 @@
|
|||||||
|
|
||||||
|
|
||||||
#include "SkillAsset.h"
|
#include "SkillAsset.h"
|
||||||
|
#include "Misc/Guid.h"
|
||||||
|
|
||||||
|
USkillAsset::USkillAsset()
|
||||||
|
{
|
||||||
|
// Initialize with a new GUID
|
||||||
|
SkillID = FGuid::NewGuid();
|
||||||
|
}
|
||||||
|
|
||||||
|
#if WITH_EDITOR
|
||||||
|
void USkillAsset::PostInitProperties()
|
||||||
|
{
|
||||||
|
Super::PostInitProperties();
|
||||||
|
|
||||||
|
// Generate a new GUID if it's not valid (for new assets)
|
||||||
|
if (!SkillID.IsValid())
|
||||||
|
{
|
||||||
|
SkillID = FGuid::NewGuid();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|||||||
@ -17,37 +17,53 @@ class PROJECTFISH_API USkillAsset : public UDataAsset
|
|||||||
{
|
{
|
||||||
GENERATED_BODY()
|
GENERATED_BODY()
|
||||||
public:
|
public:
|
||||||
|
USkillAsset();
|
||||||
|
|
||||||
|
#if WITH_EDITOR
|
||||||
|
virtual void PostInitProperties() override;
|
||||||
|
#endif
|
||||||
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能ID"))
|
||||||
|
FGuid SkillID;
|
||||||
|
|
||||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能名称"))
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能名称"))
|
||||||
FText SkillName;
|
FText SkillName;
|
||||||
|
|
||||||
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能分类Tag"))
|
||||||
|
TArray<ESkillType> SkillTypes;
|
||||||
|
|
||||||
|
|
||||||
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta = (AllowedClasses = "Texture2D", ToolTip = "技能图片"))
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta = (AllowedClasses = "Texture2D", ToolTip = "技能图片"))
|
||||||
FSoftObjectPath SkillTexture;
|
FSoftObjectPath SkillTexture;
|
||||||
|
|
||||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能Tag"))
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能效果组"))
|
||||||
FGameplayTag SkillTag;
|
TArray<FSkillEffectData> SkillEffects;
|
||||||
|
|
||||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "背包占用"))
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能尺寸"))
|
||||||
ESkillSize SkillSize = ESkillSize::Small;
|
ESkillSize SkillSize = ESkillSize::Small;
|
||||||
|
|
||||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "是否为主动技能"))
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "卡牌稀有度"))
|
||||||
bool bActiveSkill = true;
|
ERarityType RarityType = ERarityType::Common;
|
||||||
|
|
||||||
//主动技能属性
|
|
||||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能CD", EditConditionHides, EditCondition = "bActiveSkill"))
|
|
||||||
float CD;
|
|
||||||
|
|
||||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能CD速度", EditConditionHides, EditCondition = "bActiveSkill"))
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能触发类型"))
|
||||||
float Speed = 1.0f;
|
ESkillTriggerType triggerType = ESkillTriggerType::ActiveSkill;
|
||||||
|
|
||||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能耐久度", EditConditionHides, EditCondition = "bActiveSkill"))
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能耐久度", EditConditionHides, EditCondition = "bActiveSkill"))
|
||||||
int32 Endurance;
|
int32 Endurance;
|
||||||
|
|
||||||
|
//主动技能属性
|
||||||
|
UPROPERTY( BlueprintReadWrite, meta = (ToolTip = "技能CD", EditConditionHides, EditCondition = "triggerType == ESkillTriggerType::ActiveSkill"))
|
||||||
|
float CD;
|
||||||
|
|
||||||
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能CD速度", EditConditionHides, EditCondition = "triggerType == ESkillTriggerType::ActiveSkill"))
|
||||||
|
float Speed = 1.0f;
|
||||||
|
|
||||||
|
|
||||||
//被动技能属性
|
//被动技能属性
|
||||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "被动技能触发器,没有配置的话为光环类技能默认进行触发", AllowedClasses = "SkillTrigger", EditConditionHides, EditCondition = "!bActiveSkill"))
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "被动技能触发器,没有配置的话为光环类技能默认进行触发", AllowedClasses = "SkillTrigger",
|
||||||
|
EditConditionHides, EditCondition = "triggerType == ESkillTriggerType::PassiveSkill"))
|
||||||
TSubclassOf<class USkillTrigger> SkillTrigger;
|
TSubclassOf<class USkillTrigger> SkillTrigger;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能效果组"))
|
|
||||||
TArray<FSkillEffectData> SkillEffects;
|
|
||||||
};
|
};
|
||||||
|
|||||||
@ -22,33 +22,43 @@ enum class ESkillEffectType: uint8
|
|||||||
DamageReduce UMETA(DisplayName = "减伤", ToolTip = "减少所受的伤害"),
|
DamageReduce UMETA(DisplayName = "减伤", ToolTip = "减少所受的伤害"),
|
||||||
};
|
};
|
||||||
|
|
||||||
//技能对象类型
|
|
||||||
UENUM(BlueprintType)
|
|
||||||
enum class ESkillTargetType: uint8
|
|
||||||
{
|
|
||||||
Self UMETA(DisplayName = "目标是自身角色"),
|
|
||||||
Other UMETA(DisplayName = "目标是对方角色"),
|
|
||||||
Around UMETA(DisplayName = "格子周围的技能")
|
|
||||||
// AdjacentLeft UMETA(DisplayName = "左侧相邻"),
|
|
||||||
// AdjacentRight UMETA(DisplayName = "右侧相邻"),
|
|
||||||
// AllLeft UMETA(DisplayName = "左侧全部"),
|
|
||||||
// AllRight UMETA(DisplayName = "右侧全部"),
|
|
||||||
};
|
|
||||||
//随机对象类型
|
|
||||||
UENUM(BlueprintType)
|
|
||||||
enum class ERandomTargetType: uint8
|
|
||||||
{
|
|
||||||
AllSelf UMETA(DisplayName = "我方全部技能"),
|
|
||||||
AllOther UMETA(DisplayName = "敌方全部技能"),
|
|
||||||
};
|
|
||||||
|
|
||||||
//技能选择器类型
|
//技能选择器类型
|
||||||
UENUM(BlueprintType)
|
UENUM(BlueprintType)
|
||||||
enum class ETargetSelecterType: uint8
|
enum class EEffectTargetType: uint8
|
||||||
{
|
{
|
||||||
SkillPos UMETA(DisplayName = "指定对象选择"),
|
Target UMETA(DisplayName = "对方本体"),
|
||||||
SkillTag UMETA(DisplayName = "根据技能Tag选择"),
|
Self UMETA(DisplayName = "自身"),
|
||||||
RandomScope UMETA(DisplayName = "指定技能组选择"),
|
TargetSkill UMETA(DisplayName = "对方的装备"),
|
||||||
|
SelfSkill UMETA(DisplayName = "自身的装备"),
|
||||||
|
AroundSkill UMETA(DisplayName = "当前装备周围的装备"),
|
||||||
|
SelfSkillType UMETA(DisplayName = "自身指定分类的装备"),
|
||||||
|
TargetSkillType UMETA(DisplayName = "对方指定分类的装备"),
|
||||||
|
};
|
||||||
|
|
||||||
|
UENUM(BlueprintType)
|
||||||
|
enum class ERarityType: uint8
|
||||||
|
{
|
||||||
|
Common UMETA(DisplayName = "普通"),
|
||||||
|
UnCommon UMETA(DisplayName = "精良"),
|
||||||
|
Rare UMETA(DisplayName = "稀有"),
|
||||||
|
};
|
||||||
|
|
||||||
|
UENUM(BlueprintType)
|
||||||
|
enum class ESkillTriggerType: uint8
|
||||||
|
{
|
||||||
|
ActiveSkill UMETA(DisplayName = "主动技能"),
|
||||||
|
PassiveSkill UMETA(DisplayName = "被动技能"),
|
||||||
|
AuraSkill UMETA(DisplayName = "光环技能"),
|
||||||
|
};
|
||||||
|
|
||||||
|
UENUM(BlueprintType)
|
||||||
|
enum class ESkillType: uint8
|
||||||
|
{
|
||||||
|
Type1 UMETA(DisplayName = "Type1"),
|
||||||
|
Type2 UMETA(DisplayName = "Type2"),
|
||||||
|
Type3 UMETA(DisplayName = "Type3"),
|
||||||
};
|
};
|
||||||
|
|
||||||
UENUM(BlueprintType)
|
UENUM(BlueprintType)
|
||||||
@ -89,19 +99,21 @@ struct FSkillTargetSelector
|
|||||||
{
|
{
|
||||||
GENERATED_BODY()
|
GENERATED_BODY()
|
||||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能选择器类型"))
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能选择器类型"))
|
||||||
ETargetSelecterType SelecterType;
|
EEffectTargetType SelecterType;
|
||||||
|
|
||||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能目标类型",
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "指定技能的分类"
|
||||||
EditConditionHides, EditCondition = "SelecterType == ETargetSelecterType::SkillPos"))
|
, EditConditionHides, EditCondition = "SelecterType == EEffectTargetType::SelfSkillType || SelecterType == EEffectTargetType::TargetSkillType"))
|
||||||
ESkillTargetType TargetType;
|
ESkillType SkillType = ESkillType::Type1;
|
||||||
|
|
||||||
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "目标是否全部还是指定数目"
|
||||||
|
, EditConditionHides, EditCondition = "SelecterType != EEffectTargetType::Target && SelecterType != EEffectTargetType::Self"))
|
||||||
|
bool bAll = true;
|
||||||
|
|
||||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "应用的技能tag",
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "指定数目"
|
||||||
EditConditionHides, EditCondition = "SelecterType == ETargetSelecterType::SkillTag"))
|
, EditConditionHides, EditCondition = "SelecterType != EEffectTargetType::Target && SelecterType != EEffectTargetType::Self && !bAll"))
|
||||||
FGameplayTagContainer ApplySkillTags;
|
int32 MaxEffectTargetNum = 1;
|
||||||
|
|
||||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "随机目标类型"
|
|
||||||
, EditConditionHides, EditCondition = "SelecterType == ETargetSelecterType::RandomScope"))
|
|
||||||
ERandomTargetType RandomType;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//技能效果
|
//技能效果
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include "Skill.h"
|
#include "Skill.h"
|
||||||
|
|
||||||
|
#include "InputTriggers.h"
|
||||||
#include "SkillTrigger.h"
|
#include "SkillTrigger.h"
|
||||||
#include "SkillEffects/SkillEffect_Charge.h"
|
#include "SkillEffects/SkillEffect_Charge.h"
|
||||||
#include "SkillEffects/SkillEffect_Damage.h"
|
#include "SkillEffects/SkillEffect_Damage.h"
|
||||||
@ -122,8 +123,9 @@ void USkill::InitSkill(class APawnWithSkill* owner, USkillManager* skillManager,
|
|||||||
|
|
||||||
void USkill::InitSkillTrigger()
|
void USkill::InitSkillTrigger()
|
||||||
{
|
{
|
||||||
if (!SkillData->bActiveSkill)
|
switch (SkillData->triggerType)
|
||||||
{
|
{
|
||||||
|
case ESkillTriggerType::PassiveSkill:
|
||||||
if (SkillData->SkillTrigger)
|
if (SkillData->SkillTrigger)
|
||||||
{
|
{
|
||||||
USkillTrigger* SkillTrigger = NewObject<USkillTrigger>(this, SkillData->SkillTrigger);
|
USkillTrigger* SkillTrigger = NewObject<USkillTrigger>(this, SkillData->SkillTrigger);
|
||||||
@ -132,19 +134,21 @@ void USkill::InitSkillTrigger()
|
|||||||
context.SkillManager = SkillManager;
|
context.SkillManager = SkillManager;
|
||||||
SkillTrigger->Init(context);
|
SkillTrigger->Init(context);
|
||||||
}
|
}
|
||||||
else
|
break;
|
||||||
{
|
case ESkillTriggerType::AuraSkill:
|
||||||
//UE_LOG(LogTemp, Warning, TEXT("没有Trigger的被动技能,直接触发"));
|
//UE_LOG(LogTemp, Warning, TEXT("没有Trigger的被动技能,直接触发"));
|
||||||
ExecuteSkill();
|
ExecuteSkill();
|
||||||
}
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool USkill::SkillTickAble()
|
bool USkill::SkillTickAble()
|
||||||
{
|
{
|
||||||
//剩余次数无限制或者拥有者没有被韧性眩晕
|
//剩余次数无限制或者拥有者没有被韧性眩晕
|
||||||
return (RemainingEndurance >0 || RemainingEndurance == -1 ) && Owner->CurrentTenacity > 0 && SkillData->bActiveSkill;
|
return (RemainingEndurance >0 || RemainingEndurance == -1 )
|
||||||
|
&& Owner->CurrentTenacity > 0 && SkillData->triggerType == ESkillTriggerType::ActiveSkill;
|
||||||
}
|
}
|
||||||
|
|
||||||
FIntPoint USkill::GetSkillSize()
|
FIntPoint USkill::GetSkillSize()
|
||||||
|
|||||||
@ -50,58 +50,121 @@ TArray<UObject*> USkillEffect::GetApplyTargets(const FSkillContext& context)
|
|||||||
TArray<UObject*> result;
|
TArray<UObject*> result;
|
||||||
switch (effectData.SkillSelecter.SelecterType)
|
switch (effectData.SkillSelecter.SelecterType)
|
||||||
{
|
{
|
||||||
case ETargetSelecterType::SkillPos:
|
case EEffectTargetType::Target:
|
||||||
{
|
{
|
||||||
GetEffectTargetsByTargetType(context, result);
|
//目标是敌人
|
||||||
|
result.Add(context.SkillManager->GetEnemyPawn(OwnerSkill->GetOwner()));
|
||||||
break;;
|
break;;
|
||||||
}
|
}
|
||||||
case ETargetSelecterType::SkillTag:
|
case EEffectTargetType::Self:
|
||||||
{
|
|
||||||
//根据Tag 决定应用对象
|
|
||||||
for (auto skill: context.SkillManager->GetAllSkills())
|
|
||||||
{
|
{
|
||||||
|
//目标是敌人
|
||||||
if (effectData.SkillSelecter.ApplySkillTags.HasTag(skill->GetSkillData()->SkillTag))
|
result.Add(OwnerSkill->GetOwner());
|
||||||
|
break;;
|
||||||
|
}
|
||||||
|
case EEffectTargetType::TargetSkill:
|
||||||
|
{
|
||||||
|
TArray<USkill*> Skills = context.SkillManager->GetSkillsByOwner(context.SkillManager->GetEnemyPawn(OwnerSkill->GetOwner()));
|
||||||
|
if (effectData.SkillSelecter.bAll)
|
||||||
|
{
|
||||||
|
result.Append(Skills);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int TargetNum = FMath::Min(effectData.SkillSelecter.MaxEffectTargetNum, Skills.Num());
|
||||||
|
for (int i = 0; i < TargetNum; i++)
|
||||||
|
{
|
||||||
|
int randomIndex = FMath::RandRange(0, Skills.Num() - 1);
|
||||||
|
result.Add(Skills[randomIndex]);
|
||||||
|
Skills.RemoveAt(randomIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;;
|
||||||
|
}
|
||||||
|
case EEffectTargetType::SelfSkill:
|
||||||
|
{
|
||||||
|
TArray<USkill*> Skills = context.SkillManager->GetSkillsByOwner(OwnerSkill->GetOwner());
|
||||||
|
if (effectData.SkillSelecter.bAll)
|
||||||
|
{
|
||||||
|
result.Append(Skills);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int TargetNum = FMath::Min(effectData.SkillSelecter.MaxEffectTargetNum, Skills.Num());
|
||||||
|
for (int i = 0; i < TargetNum; i++)
|
||||||
|
{
|
||||||
|
int randomIndex = FMath::RandRange(0, Skills.Num() - 1);
|
||||||
|
result.Add(Skills[randomIndex]);
|
||||||
|
Skills.RemoveAt(randomIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;;
|
||||||
|
}
|
||||||
|
case EEffectTargetType::AroundSkill:
|
||||||
|
{
|
||||||
|
TArray<USkill*> aroundSkills = context.SkillManager->GetSkillsAround(context.OwnerSkill);
|
||||||
|
for (auto skill: aroundSkills)
|
||||||
{
|
{
|
||||||
result.Add(skill);
|
result.Add(skill);
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;;
|
case EEffectTargetType::SelfSkillType:
|
||||||
}
|
|
||||||
case ETargetSelecterType::RandomScope:
|
|
||||||
{
|
|
||||||
//应用到随机技能
|
|
||||||
switch (effectData.SkillSelecter.RandomType)
|
|
||||||
{
|
{
|
||||||
case ERandomTargetType::AllSelf:
|
//筛选指定类型的技能
|
||||||
|
TArray<USkill*> Skills = context.SkillManager->GetSkillsByOwner(OwnerSkill->GetOwner());
|
||||||
|
for (int i = Skills.Num() - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
//所有我方的技能
|
if (!Skills[i]->GetSkillData()->SkillTypes.Contains(effectData.SkillSelecter.SkillType))
|
||||||
for (auto skill: context.SkillManager->GetAllSkills())
|
{
|
||||||
{
|
Skills.RemoveAt(i);
|
||||||
if (OwnerSkill->GetOwner() == skill->GetOwner())
|
}
|
||||||
{
|
|
||||||
result.Add(skill);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
case ERandomTargetType::AllOther:
|
|
||||||
|
if (effectData.SkillSelecter.bAll)
|
||||||
{
|
{
|
||||||
//所有地方的技能
|
result.Append(Skills);
|
||||||
for (auto skill: context.SkillManager->GetAllSkills())
|
|
||||||
{
|
|
||||||
if (OwnerSkill->GetOwner() != skill->GetOwner())
|
|
||||||
{
|
|
||||||
result.Add(skill);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int TargetNum = FMath::Min(effectData.SkillSelecter.MaxEffectTargetNum, Skills.Num());
|
||||||
|
for (int i = 0; i < TargetNum; i++)
|
||||||
|
{
|
||||||
|
int randomIndex = FMath::RandRange(0, Skills.Num() - 1);
|
||||||
|
result.Add(Skills[randomIndex]);
|
||||||
|
Skills.RemoveAt(randomIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case EEffectTargetType::TargetSkillType:
|
||||||
|
{
|
||||||
|
//筛选指定类型的技能
|
||||||
|
TArray<USkill*> Skills = context.SkillManager->GetSkillsByOwner(context.SkillManager->GetEnemyPawn(OwnerSkill->GetOwner()));
|
||||||
|
for (int i = Skills.Num() - 1; i >= 0; i--)
|
||||||
|
{
|
||||||
|
if (!Skills[i]->GetSkillData()->SkillTypes.Contains(effectData.SkillSelecter.SkillType))
|
||||||
|
{
|
||||||
|
Skills.RemoveAt(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (effectData.SkillSelecter.bAll)
|
||||||
|
{
|
||||||
|
result.Append(Skills);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int TargetNum = FMath::Min(effectData.SkillSelecter.MaxEffectTargetNum, Skills.Num());
|
||||||
|
for (int i = 0; i < TargetNum; i++)
|
||||||
|
{
|
||||||
|
int randomIndex = FMath::RandRange(0, Skills.Num() - 1);
|
||||||
|
result.Add(Skills[randomIndex]);
|
||||||
|
Skills.RemoveAt(randomIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -111,37 +174,3 @@ FString USkillEffect::GetSkillEffectDes()
|
|||||||
return FString();
|
return FString();
|
||||||
}
|
}
|
||||||
|
|
||||||
void USkillEffect::GetEffectTargetsByTargetType(const FSkillContext& context, TArray<UObject*>& result)
|
|
||||||
{
|
|
||||||
//根据位置决定应用对象
|
|
||||||
ESkillTargetType targetType = effectData.SkillSelecter.TargetType;
|
|
||||||
switch (targetType)
|
|
||||||
{
|
|
||||||
case ESkillTargetType::Self:
|
|
||||||
{
|
|
||||||
result.Add(OwnerSkill->GetOwner());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case ESkillTargetType::Other:
|
|
||||||
{
|
|
||||||
for (auto pawn: context.SkillManager->GetAllPawns())
|
|
||||||
{
|
|
||||||
if (pawn != OwnerSkill->GetOwner())
|
|
||||||
{
|
|
||||||
result.Add(pawn);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case ESkillTargetType::Around:
|
|
||||||
{
|
|
||||||
//技能左侧的技能
|
|
||||||
TArray<USkill*> aroundSkills = context.SkillManager->GetSkillsAround(context.OwnerSkill);
|
|
||||||
for (auto skill: aroundSkills)
|
|
||||||
{
|
|
||||||
result.Add(skill);
|
|
||||||
}
|
|
||||||
break;;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@ -27,8 +27,7 @@ public:
|
|||||||
{
|
{
|
||||||
return effectData;
|
return effectData;
|
||||||
}
|
}
|
||||||
private:
|
|
||||||
void GetEffectTargetsByTargetType(const FSkillContext& context, TArray<UObject*>& result);
|
|
||||||
protected:
|
protected:
|
||||||
UPROPERTY()
|
UPROPERTY()
|
||||||
class USkill* OwnerSkill;
|
class USkill* OwnerSkill;
|
||||||
|
|||||||
@ -112,15 +112,7 @@ void USkillManager::OnAllSkillAdded()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class USkill* USkillManager::GetSkillByTag(FGameplayTag Tag)
|
|
||||||
{
|
|
||||||
for (auto Skill : Skills)
|
|
||||||
{
|
|
||||||
if (Skill->GetSkillData()->SkillTag == Tag)
|
|
||||||
return Skill;
|
|
||||||
}
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
int32 USkillManager::GetSkillIndex(USkill* Skill)
|
int32 USkillManager::GetSkillIndex(USkill* Skill)
|
||||||
{
|
{
|
||||||
@ -168,6 +160,16 @@ TArray<APawnWithSkill*> USkillManager::GetAllPawns()
|
|||||||
return Pawns;
|
return Pawns;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
APawnWithSkill* USkillManager::GetEnemyPawn(const APawnWithSkill* SelfPawn)
|
||||||
|
{
|
||||||
|
for (auto info: PawnInfo)
|
||||||
|
{
|
||||||
|
if (SelfPawn != info.Key)
|
||||||
|
return info.Key;
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
TArray<class USkill*> USkillManager::GetSkillsByOwner(APawnWithSkill* Pawn)
|
TArray<class USkill*> USkillManager::GetSkillsByOwner(APawnWithSkill* Pawn)
|
||||||
{
|
{
|
||||||
TArray<class USkill*> skills;
|
TArray<class USkill*> skills;
|
||||||
|
|||||||
@ -32,9 +32,7 @@ public:
|
|||||||
|
|
||||||
UFUNCTION(BlueprintCallable)
|
UFUNCTION(BlueprintCallable)
|
||||||
void OnAllSkillAdded();
|
void OnAllSkillAdded();
|
||||||
|
|
||||||
UFUNCTION(BlueprintPure)
|
|
||||||
class USkill* GetSkillByTag(FGameplayTag Tag);
|
|
||||||
|
|
||||||
int32 GetSkillIndex(USkill* Skill);
|
int32 GetSkillIndex(USkill* Skill);
|
||||||
|
|
||||||
@ -47,6 +45,9 @@ public:
|
|||||||
UFUNCTION(BlueprintCallable)
|
UFUNCTION(BlueprintCallable)
|
||||||
TArray<APawnWithSkill*> GetAllPawns();
|
TArray<APawnWithSkill*> GetAllPawns();
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable)
|
||||||
|
APawnWithSkill* GetEnemyPawn(const APawnWithSkill* SelfPawn);
|
||||||
|
|
||||||
UFUNCTION(BlueprintPure)
|
UFUNCTION(BlueprintPure)
|
||||||
TArray<class USkill*> GetSkillsByOwner(APawnWithSkill* Pawn);
|
TArray<class USkill*> GetSkillsByOwner(APawnWithSkill* Pawn);
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user