// Copyright 2025 https://yuewu.dev/en All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "GCS_CombatStructLibrary.h" #include "Runtime/Launch/Resources/Version.h" #if ENGINE_MINOR_VERSION < 5 #include "InstancedStruct.h" #else #include "StructUtils/InstancedStruct.h" #endif #include "Collision/GCS_TraceStructLibrary.h" #include "UObject/Object.h" #include "GCS_BulletStructLibrary.generated.h" class UGCS_AttackRequest_Bullet; class UNiagaraSystem; class AGCS_BulletInstance; /** * Base struct allow you to extend the bullet definition's fields using C++. * 基础结构体,允许你通过C++拓展子弹定义的字段。 */ USTRUCT(BlueprintType, meta=(Hidden)) struct GENERICCOMBATSYSTEM_API FGCS_BulletDefinitionExtension { GENERATED_BODY() }; /** * Data structure defining bullet properties and behavior. * 定义子弹属性和行为的数据结构。 */ USTRUCT(BlueprintType, meta=(DisplayName="GCS Bullet Definition")) struct GENERICCOMBATSYSTEM_API FGCS_BulletDefinition : public FTableRowBase { GENERATED_BODY() /** * The bullet actor class. * 子弹Actor类。 */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Common", meta=(AllowAbstract="false")) TSoftClassPtr BulletActorClass; /** * Duration for which the bullet exists (-1 for infinite). * 子弹存在的持续时间(-1表示无限)。 */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Common") float Duration{3.0}; /** * Number of bullets fired at once. * 一次性发射的子弹数量。 */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Launch Configuration", meta=(ClampMin=1, UIMin=1)) int32 BulletCount{1}; /** * Yaw angle for bullet launch. * 子弹发射的水平角。 */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Launch Configuration") float LaunchAngle{0.0f}; /** * Yaw angle interval between bullets. * 子弹之间的水平角间隔。 */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Launch Configuration") float LaunchAngleInterval{10.0f}; /** * Pitch angle for bullet launch. * 子弹发射的仰角。 */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Launch Configuration") float LaunchElevationAngle{0.0f}; /** * Distance at which bullet attenuation begins. * 子弹开始衰减的距离。 */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Movement", meta=(Units="cm")) float AttenuationRange{800.0f}; /** * Gravity scale within the attenuation range. * 衰减范围内的重力系数。 */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Movement") float GravityScaleInRange{1.0f}; /** * Gravity scale outside the attenuation range. * 衰减范围外的重力系数。 */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Movement") float GravityScaleOutRage{1.0f}; /** * Initial hit radius for the bullet. * 子弹的初始命中半径。 */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Movement", meta=(Units="cm")) float InitialHitRadius{20.0f}; /** * Final hit radius for the bullet (-1 to use initial radius). * 子弹的最终命中半径(-1使用初始半径)。 */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Movement", meta=(Units="cm")) float FinalHitRadius{-1.0f}; /** * Initial speed of the bullet. * 子弹的初始速度。 */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Movement", meta=(Units="cm")) float InitialSpeed{1500.0f}; /** * Minimum speed of the bullet. * 子弹的最小速度。 */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Movement", meta=(Units="cm")) float MinSpeed{1500.0f}; /** * Maximum speed of the bullet. * 子弹的最大速度。 */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Movement", meta=(Units="cm")) float MaxSpeed{1500.0f}; /** * Handle to the attack definition for the bullet. * 子弹的攻击定义句柄。 */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Attack", meta=(RowType="/Script/GenericCombatSystem.GCS_AttackDefinition")) FDataTableRowHandle AttackDefinition; /** * Trace definitions for hit detection. * 用于命中检测的碰撞检测定义。 * @note Overrides trace definitions in the bullet instance class. * @注意 覆盖子弹实例类中的碰撞检测定义。 */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Trace") TArray TraceDefinitions; /** * Visual effect for the bullet projectile (Niagara). * 子弹的视觉效果(Niagara)。 */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="VFX") TSoftObjectPtr ProjectileFX; /** * Visual effect for the bullet projectile (Cascade). * 子弹的视觉效果(Cascade)。 */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="VFX") TSoftObjectPtr ProjectileFX_Cascade; /** * Visual effect for bullet impact (Niagara). * 子弹命中的视觉效果(Niagara)。 */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="VFX") TSoftObjectPtr ImpactFX; /** * Visual effect for bullet impact (Cascade). * 子弹命中的视觉效果(Cascade)。 */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="VFX") TSoftObjectPtr ImpactFX_Cascade; /** * Sound effect for bullet impact. * 子弹命中的音效。 */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SFX") TSoftObjectPtr ImpactSFX; /** * Sound effect attached to the bullet projectile. * 附着在子弹上的音效。 */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SFX") TSoftObjectPtr ProjectileSFX; /** * Sound effect played once when the bullet spawns. * 子弹生成时播放一次的音效。 */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SFX") TSoftObjectPtr SpawnSFX; /** * Whether the bullet penetrates characters/pawns. * 子弹是否穿透角色/Pawn。 */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Penetration") bool bPenetrateCharacter{false}; /** * Whether the bullet penetrates map geometry. * 子弹是否穿透地图几何体。 */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Penetration") bool bPenetrateMap{false}; /** * Handle to the bullet definition to spawn on hit/expiration. * 命中或失效时生成的子弹定义句柄。 * @note Cannot be the same as this bullet. * @注意 不能与此子弹相同。 */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Hit Configuration", meta=(RowType="/Script/GenericCombatSystem.GCS_BulletDefinition")) FDataTableRowHandle HitBulletDefinition; /** * Condition for launching bullet chains. * 子弹链的发射条件。 */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Hit Configuration", meta=(Categories="GGF.Combat.Bullet.LaunchCond")) FGameplayTag LaunchCondition{FGameplayTag::EmptyTag}; /** * Native Instanced struct for extending the bullet definition. * 实例化结构体用于扩充子弹定义的字段。 * @attention For C++ users only. 仅针对C++用户。 */ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Extension") TInstancedStruct NativeExtension; /** * Blueprint Instanced struct for extending the bullet definition. * 实例化结构体用于扩充子弹定义的字段。 * @attention For blueprint users only. 仅针对蓝图用户。 */ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Extension") FInstancedStruct Extension; /** * Custom user settings for extending the bullet definition. * 扩展子弹定义的自定义用户设置。 */ UE_DEPRECATED(1.5, "Using extension field to add custom fields!") UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Deprecated", meta=(ForceInlineRow, BaseStruct = "/Script/GenericCombatSystem.GCS_UserSetting")) TMap UserSettings; /** * Shares the hit history to sub bullet.(prevent repeat hit for whole bullet chains.) */ // UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Hit Configuration",meta=(Categories="GGF.Combat.Bullet.LaunchCond")) // bool bUseSharedHitList{true}; /** * The amount of time between a bullet hits something and when it explodes. */ // UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Hit Configuration", meta=(Units="s", ClampMin=0)) // float ExplosionDelay{0.0}; // Emitter will be added in next version. // UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Emitter", meta=(RowType="/Script/GenericCombatSystem.GCS_BulletDefinition")) // FDataTableRowHandle EmitterBulletDefinition; // // UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Emitter") // float EmitterInitialWaitTime{0}; // // UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Emitter") // float EmitterMinShootInterval{0}; // // UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Emitter") // float EmitterMaxShootInterval{0}; }; /** * Parameters for spawning bullets. * 子弹生成参数。 */ USTRUCT(BlueprintType) struct GENERICCOMBATSYSTEM_API FGCS_BulletSpawnParameters { GENERATED_BODY() /** * The owner of the bullet. * 子弹的拥有者。 */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="GCS") TObjectPtr Owner{nullptr}; /** * Handle to the bullet definition. * 子弹定义的句柄。 */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="GCS", meta=(RowType="/Script/GenericCombatSystem.GCS_BulletDefinition")) FDataTableRowHandle DefinitionHandle; /** * Transform for spawning the bullet. * 子弹生成时的变换。 */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="GCS") FTransform SpawnTransform{FTransform::Identity}; /** * The associated attack request. * 关联的攻击请求。 */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="GCS") TObjectPtr Request{nullptr}; /** * Whether the bullet is locally predicted. * 子弹是否为本地预测。 */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="GCS") bool bIsLocalPredicting{false}; /** * IDs for locally predicted bullets. * 本地预测子弹的ID。 */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="GCS", meta=(DisplayName="Local Predicting Bullet Ids")) TArray OverrideBulletIds; /** * ID of the parent bullet (for bullet chains). * 父子弹的ID(用于子弹链)。 */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="GCS") FGuid ParentId; /** * Returns a debug string representation. * 返回调试字符串表示。 * @return The debug string. 调试字符串。 */ FString ToDebugString() const; };