// 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 "Quest/QuestTypes.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 SkillTrigger; UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能效果组")) TArray 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 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 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 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> Nodes; void AddNode(TObjectPtr Node) { Nodes.Add(Node); }; TObjectPtr 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) { } }; USTRUCT(BlueprintType) struct FMarketQuestDialogue: public FTableRowBase { GENERATED_BODY() public: UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "任务对话")) FText QuestTitle; UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "任务对话")) FText QuestDialogue; UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "任务ID")) int32 QuestID; }; USTRUCT(BlueprintType) struct FTutorialUIControlParam { GENERATED_BODY() public: UPROPERTY(EditAnywhere, BlueprintReadOnly) TSubclassOf TutorialControlUIClass; UPROPERTY(EditAnywhere, BlueprintReadOnly) TArray HiddenUINames; // UPROPERTY(EditAnywhere, BlueprintReadOnly) // TArray ShowUINames; }; USTRUCT(BlueprintType) struct FTutorialStep: public FTableRowBase { GENERATED_BODY() public: UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Tutorial Asset") FName StepName; //教程对话 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Tutorial Asset") class UDialogueAsset* Dialogue; //教程任务 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Tutorial Asset") class UQuestAsset* Quest; //需要显示的ui UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Tutorial Asset") TSubclassOf TutorialUI; //控制ui的显示 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Tutorial Asset") TArray UIControlParams; //引导task UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Tutorial Asset") TSubclassOf TutorialTaskClass; UPROPERTY() UTutorialTask_Base* TutorialTaskObject; };