468 lines
16 KiB
C++

// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "GameplayTagContainer.h"
#include "PawnWithSkill.h"
#include "DataAsset/ShapeAsset.h"
#include "UObject/Object.h"
#include "Definations.generated.h"
#define TRACE_FISHING ECC_GameTraceChannel1 //钓鱼点trace类型
UENUM(BlueprintType)
enum class ESkillEffectType: uint8
{
Damage UMETA(DisplayName = "拉力", ToolTip = "对对方耐力造成损耗"),
Heal UMETA(DisplayName = "恢复", ToolTip = "对我方耐力进行恢复"),
ModifyCooldown UMETA(DisplayName = "技能冷却修改", ToolTip = "修改技能冷却时间"),
Charge UMETA(DisplayName = "充能", ToolTip = "使技能的冷却进度加快 正数是增加技能的剩余冷却时间,负数是减少技能的剩余冷却时间"),
ModifySpeed UMETA(DisplayName = "速度修改", ToolTip = "使技能冷却进度倍率进展 持续指定时间"),
SkillEnduranceRestore UMETA(DisplayName = "技能耐久度恢复", ToolTip = "使技能耐久度恢复"),
EnhanceFishRod UMETA(DisplayName = "增强鱼竿", ToolTip = "使鱼竿上海增加"),
EnhanceSkill UMETA(DisplayName = "增强技能", ToolTip = "增强指定的技能数值"),
DamageReduce UMETA(DisplayName = "减伤", ToolTip = "减少所受的伤害"),
};
//技能选择器类型
UENUM(BlueprintType)
enum class EEffectTargetType: uint8
{
Target UMETA(DisplayName = "敌人"),
Self 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 EPassiveTriggerCondition: uint8
{
ItemTriggered UMETA(DisplayName = "指定物品触发时,激活"),
DealDamage UMETA(DisplayName = "造成伤害"),
SkillDurabilityDecrease UMETA(DisplayName = "物品耐久度减少"),
SkillDurabilityRestore UMETA(DisplayName = "物品耐久度回复"),
HealthFirstBelowPercent UMETA(DisplayName = "生命值百分比首次低于"),
};
// // 被动技能触发目标
// UENUM(BlueprintType)
// enum class EPassiveTriggerTarget: uint8
// {
// Self UMETA(DisplayName = "自身"),
// Enemy UMETA(DisplayName = "对方"),
// SelfSpecificItem UMETA(DisplayName = "我方指定装备"),
// EnemySpecificItem UMETA(DisplayName = "对方指定装备"),
// };
// 光环技能触发条件类型
UENUM(BlueprintType)
enum class EAuraTriggerCondition: uint8
{
None UMETA(DisplayName = "无条件"),
HealthBelowPercent UMETA(DisplayName = "生命值低于"),
HealthAbovePercent UMETA(DisplayName = "生命值高于"),
EquipmentCountNotMoreThan UMETA(DisplayName = "装备物品数量不多于"),
EquipmentCountNotLessThan UMETA(DisplayName = "装备物品数量不少于"),
};
// // 光环技能触发目标
// UENUM(BlueprintType)
// enum class EAuraTriggerTarget: uint8
// {
// Self UMETA(DisplayName = "自身"),
// Enemy UMETA(DisplayName = "对方")
// };
UENUM(BlueprintType)
enum class ESkillType: uint8
{
Type1 UMETA(DisplayName = "Type1"),
Type2 UMETA(DisplayName = "Type2"),
Type3 UMETA(DisplayName = "Type3"),
};
UENUM(BlueprintType)
enum class ESkillSize: uint8
{
Small UMETA(DisplayName = "", ToolTip = "技能占用格子 2x2"),
Medium UMETA(DisplayName = "", ToolTip = "技能占用格子 3x2"),
Large UMETA(DisplayName = "", ToolTip = "技能占用格子 4x2"),
};
static FIntPoint GetSkillSizeValue(ESkillSize SizeType)
{
switch (SizeType)
{
case ESkillSize::Small: return FIntPoint(2, 2);
case ESkillSize::Medium: return FIntPoint(3, 2);
case ESkillSize::Large: return FIntPoint(4, 2);
}
return FIntPoint();
}
//对象选择器
USTRUCT(BlueprintType)
struct FTargetSelector
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能选择器类型"))
EEffectTargetType SelecterType;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "指定技能的分类"
, EditConditionHides, EditCondition = "SelecterType == EEffectTargetType::SelfSkillType || SelecterType == EEffectTargetType::TargetSkillType"))
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 = "目标是否包含自身"
, EditConditionHides, EditCondition = "SelecterType == EEffectTargetType::SelfSkill || SelecterType == EEffectTargetType::SelfSkillType"))
bool bIncludeSelf = true;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "指定数目"
, EditConditionHides, EditCondition = "SelecterType != EEffectTargetType::Target && SelecterType != EEffectTargetType::Self && !bAll"))
int32 MaxEffectTargetNum = 1;
};
// 被动触发条件配置
USTRUCT(BlueprintType)
struct FPassiveTriggerConfig
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "触发条件类型"))
EPassiveTriggerCondition Condition = EPassiveTriggerCondition::ItemTriggered;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "触发目标"))
FTargetSelector Target ;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "百分比值 (0-1)", EditConditionHides,
EditCondition = "Condition == EPassiveTriggerCondition::HealthFirstBelowPercent",
ClampMin = 0, ClampMax = 1))
float PercentageValue = 0.5f;
// UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "指定物品", EditConditionHides,
// EditCondition = "Target == EPassiveTriggerTarget::SelfSpecificItem || Target == EPassiveTriggerTarget::EnemySpecificItem"))
// FGuid SpecificSkillID;
};
// 光环技能触发条件配置
USTRUCT(BlueprintType)
struct FAuraTriggerConfig
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "触发条件类型"))
EAuraTriggerCondition Condition = EAuraTriggerCondition::None;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "触发目标", EditConditionHides,
EditCondition = "Condition != EAuraTriggerCondition::None"))
EEffectTargetType Target = EEffectTargetType::Self;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "百分比值 (0-1)", EditConditionHides,
EditCondition = "Condition == EAuraTriggerCondition::HealthBelowPercent || Condition == EAuraTriggerCondition::HealthAbovePercent",
ClampMin = 0, ClampMax = 1))
float PercentageValue = 0.5f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "数量值", EditConditionHides,
EditCondition = "Condition == EAuraTriggerCondition::EquipmentCountNotMoreThan || Condition == EAuraTriggerCondition::EquipmentCountNotLessThan",
ClampMin = 0))
int32 CountValue = 5;
};
USTRUCT(BlueprintType)
struct FSkillContext
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "敌人"))
class USkillManager* SkillManager;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "所属的技能"))
class USkill* OwnerSkill;
};
//技能效果
USTRUCT(BlueprintType)
struct FSkillEffectData
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能类型"))
ESkillEffectType EffectType;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能值"))
float EffectValue;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能配置补充,不需要为空"))
FString ParamAddition;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能选择器"))
FTargetSelector SkillSelecter;
};
USTRUCT(BlueprintType)
struct FSkillData: public FTableRowBase
{
GENERATED_BODY()
public:
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能名称"))
FText SkillName;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta = (AllowedClasses = "Texture2D", ToolTip = "技能图片"))
FSoftObjectPath SkillTexture;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能Tag"))
FGameplayTag SkillTag;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "背包占用"))
FIntPoint SkillWeight = FIntPoint(1, 1);
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 = "被动技能触发器,没有配置的话为光环类技能默认进行触发", AllowedClasses = "SkillTrigger", EditConditionHides, EditCondition = "!bActiveSkill"))
TSubclassOf<class USkillTrigger> SkillTrigger;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能效果组"))
TArray<FSkillEffectData> SkillEffects;
};
USTRUCT(BlueprintType)
struct FSkillDataConfig
{
GENERATED_BODY()
public:
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (RowType = "FSkillData"))
UDataTable* DataTable;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
FName SkillRowName;
};
/**
*
*/
UCLASS()
class PROJECTFISH_API UDefinations : public UObject
{
GENERATED_BODY()
};
USTRUCT(BlueprintType)
struct FFishingRodSkill
{
GENERATED_BODY()
public:
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "鱼竿技能名称"))
FName SkillName;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta = (ToolTip = "鱼钩技能"))
TSubclassOf<class UFishingRodSKill_Base> SkillClass;
};
USTRUCT(BlueprintType)
struct FFishingRod: public FTableRowBase
{
GENERATED_BODY()
public:
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "鱼竿名称"))
FName FishingRod_Name;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "鱼竿伤害CD"))
int32 DamageCD;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "鱼竿伤害"))
int32 Damage;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "附加的耐力值"))
int32 Endurance_Add;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "附加的附加的韧性值"))
int32 Tenacity_Add;
// UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "物品背包大小"))
// FIntPoint BagSize;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "物品配置"))
class UBagConfigAsset* BagConfig;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能效果组"))
TArray<FFishingRodSkill> Skills;
};
USTRUCT(BlueprintType)
struct FShipDataConfig
{
GENERATED_BODY()
// UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Ship", meta = (ForceUnits = "cm", ToolTip = "船体长度"))
// int32 ShipLength = 100;
//
// UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Ship", meta = (ForceUnits = "cm", ToolTip = "船体宽度"))
// int32 ShipWidth = 100;
//
// UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Ship", meta = (ForceUnits = "cm", ToolTip = "船体高度"))
// int32 ShipHeight = 100;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Ship", meta = (FToolTip = "船体缩放"))
FVector ShipScale = FVector::One();
/*** Movement ***/
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ForceUnits = "cm/s", Category = "Character|Movement", ToolTip = "正常速度"))
float BaseSpeed = 600.f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Character|Movement", meta = (ForceUnits = "cm/s",ToolTip = "冲刺速度"))
float SprintSpeed = 1200.0f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Character|Movement", meta = (ForceUnits = "s", ToolTip = "加速到最大速度时间"))
float AccelerationTime = 0.3f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Character|Movement", meta = (ForceUnits = "s", ToolTip = "停止需要的减速时间"))
float DecelerationTime = 0.2f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Character|Movement", meta = (ToolTip = "转向灵敏度/阻尼"))
float TurnSensitivity = 1.0f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Character|Movement", meta = (ToolTip = "回弹系数"))
float BounceFactor= 1.0f;
/***Fishing***/
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Character|Movement", meta = (ToolTip = "鼠标移动速度"))
float MouseSpeed= 8.0f;
/*** Camera ***/
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Camera", meta = (ForceUnits = "Degrees", ToolTip = "视野范围"))
float CameraFiledOfView = 90.0f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Camera|Position", meta = (ForceUnits = "cm", ToolTip = "与角色距离"))
float CameraDistance = 1200.0f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Camera|Position", meta = (ForceUnits = "cm", ToolTip = "与角色高度差"))
float CameraHeightOffset = 600.0f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Camera|Position", meta = (ForceUnits = "Degrees",ToolTip = "镜头与地面夹角角度"))
float CameraGroundAngle = -45.0f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Camera|Rotation", meta = (ToolTip = "镜头转动灵敏度"))
float CameraRotationSensitivity = 1.0f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Camera|Rotation", meta = (ToolTip = "反转Y轴"))
bool FlipCameraYAxius = false;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Camera|Rotation", meta = (ForceUnits = "Degrees",ToolTip = "最大上仰角度"))
float MaxUpwardAngle = -20.0f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Camera|Rotation", meta = (ForceUnits = "Degrees", ToolTip = "最低下俯角度"))
float MaxDownwardAngle = -70.0f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Camera|Follow", meta = (ToolTip = "镜头跟随阻尼"))
float CameraFollowLagRatio = 3.0f;
// UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Camera|Collision", meta = (ToolTip = "镜头跟随阻尼"))
// float CameraCollisionLagRatio = 3.0f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Camera|Collision", meta = (ForceUnits = "cm", ToolTip = "与角色的最小距离"))
float CameraMinDistance = 500.0f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Camera|Collision", meta = (ForceUnits = "cm", ToolTip = "碰撞时的相机抖动类型"))
TSubclassOf<UCameraShakeBase> CollisionCameraShakeClass;
};
/*** 地图相关定义 ***/
UENUM(BlueprintType)
enum class EMapNodeType : uint8
{
Battle UMETA(DisplayName = "战斗"),
Skill UMETA(DisplayName = "技能道具"),
Boss UMETA(DisplayName = "关底Boss")
};
UENUM(BlueprintType)
enum class EMapNodeState : uint8
{
Moveable UMETA(DisplayName = "可移动到"),
Immovable UMETA(DisplayName = "不可移动到"),
};
//地图层
USTRUCT(BlueprintType)
struct FMapLayer
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite)
TArray<TObjectPtr<class UFishingMapNode>> Nodes;
void AddNode(TObjectPtr<class UFishingMapNode> Node) { Nodes.Add(Node); };
TObjectPtr<UFishingMapNode> GetNode(int32 index) {return Nodes[index];}
int32 GetNodeNum() {return Nodes.Num();}
};
// 连线
USTRUCT(BlueprintType)
struct FSimpleConnection
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite)
FGuid FromNodeID;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
FGuid ToNodeID;
FSimpleConnection()
{
}
FSimpleConnection(const FGuid& From, const FGuid& To)
: FromNodeID(From), ToNodeID(To)
{
}
};