第一次提交

This commit is contained in:
不明不惑
2026-03-03 01:23:02 +08:00
commit 3e434877e8
1053 changed files with 102411 additions and 0 deletions

View File

@@ -0,0 +1,248 @@
// Copyright 2025 https://yuewu.dev/en All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "Components/PawnComponent.h"
#include "GCS_TargetingSystemComponent.generated.h"
class UTargetingPreset;
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FGCS_OnTargetLockOnSignature, AActor*, NewTargetActor);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FGCS_OnTargetLockOffSignature, AActor*, PrevTargetActor);
/**
* Component for managing combat targeting.
* 管理战斗目标的组件。
*/
UCLASS(ClassGroup=(GCS), AutoExpandCategories=("GCS"), meta=(BlueprintSpawnableComponent), Blueprintable)
class GENERICCOMBATSYSTEM_API UGCS_TargetingSystemComponent : public UPawnComponent
{
GENERATED_BODY()
public:
/**
* Default constructor.
* 默认构造函数。
*/
UGCS_TargetingSystemComponent(const FObjectInitializer& ObjectInitializer);
/**
* Gets the targeting system component from an actor.
* 从Actor获取目标系统组件。
* @param Actor The actor to query. 要查询的Actor。
* @return The targeting system component. 目标系统组件。
*/
UFUNCTION(BlueprintCallable, BlueprintPure, Category = "GCS|Targeting", Meta = (DefaultToSelf="Actor"))
static UGCS_TargetingSystemComponent* GetTargetingSystemComponent(const AActor* Actor);
/**
* Retrieves lifetime replicated properties.
* 获取生命周期复制属性。
* @param OutLifetimeProps The lifetime properties. 生命周期属性。
*/
virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;
protected:
/**
* Called when the game starts.
* 游戏开始时调用。
*/
virtual void BeginPlay() override;
/**
* The currently targeted actor.
* 当前目标Actor。
*/
UPROPERTY(VisibleInstanceOnly, BlueprintReadWrite, Replicated, Category = "GCS|Targeting")
TObjectPtr<AActor> TargetedActor = nullptr;
/**
* List of potential target actors (server-side only).
* 潜在目标Actor列表仅限服务器
*/
UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "GCS|Targeting", meta=(AllowPrivateAccess=true))
TArray<TObjectPtr<AActor>> PotentialTargets;
/**
* Whether to automatically update potential targets based on tick rate.
* 是否根据tick频率自动更新潜在目标。
*/
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "GCS|Targeting", meta=(AllowPrivateAccess=true))
bool bAutoUpdatePotentialTargets{true};
/**
* Targeting preset for searching and filtering targets.
* 用于搜索和过滤目标的目标预设。
* @note The component's owner is the SourceActor, and the component is the SourceObject.
* @注意 组件的Owner作为SourceActor组件本身作为SourceObject。
*/
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "GCS|Targeting", meta=(AllowPrivateAccess=true))
TObjectPtr<UTargetingPreset> TargetingPreset;
/**
* Flag to indicate we should be using async targeting
* 是否使用异步定位?
*/
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "GCS|Targeting", meta=(AllowPrivateAccess=true))
bool bUseAsyncTargeting{true};
public:
/**
* Called every frame.
* 每帧调用。
* @param DeltaTime Time since last frame. 上一帧以来的时间。
* @param TickType The type of tick. tick类型。
* @param ThisTickFunction The tick function. tick函数。
*/
virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;
/**
* Refreshes targeting based on the delta time.
* 根据时间增量刷新目标。
* @param DeltaTime Time since last frame. 上一帧以来的时间。
*/
virtual void RefreshTargeting(float DeltaTime);
/**
* Forces collection of potential targets and selects the best one.
* 强制收集潜在目标并选择最佳目标。
*/
UFUNCTION(BlueprintCallable, Category = "GCS|Targeting")
void SearchForActorToTarget();
/**
* Selects the closest actor from potential targets within a radius.
* 从潜在目标中选择指定范围内最近的Actor。
* @param Radius The search radius. 搜索半径。
* @return The closest actor. 最近的Actor。
*/
UFUNCTION(BlueprintCallable, Category = "GCS|Targeting")
AActor* SelectClosestActorFromPotentialTargets(float Radius = 100) const;
/**
* Filters actors using a targeting preset.
* 使用目标预设过滤Actor。
* @param InTargetingPreset The targeting preset. 目标预设。
* @param InTargets The input targets. 输入目标。
* @param OutActors The filtered actors (output). 过滤后的Actor输出
* @return True if filtering succeeded. 如果过滤成功返回true。
*/
UFUNCTION(BlueprintCallable, Category = "GCS|Targeting", meta=(ExpandBoolAsExecs="ReturnValue"))
bool FilterActorsWithPreset(UTargetingPreset* InTargetingPreset, const TArray<AActor*> InTargets, TArray<AActor*>& OutActors);
/**
* Selects a target from potential targets.
* 从潜在目标中选择一个目标。
*/
virtual void SelectFromPotentialTargets();
/**
* Switches to a new target based on direction.
* 根据方向切换到新目标。
* @param RightDirection Whether to switch to the right. 是否向右切换。
*/
UFUNCTION(BlueprintCallable, Category = "GCS|Targeting")
void StaticSwitchToNewTarget(bool RightDirection);
/**
* Refreshes the list of potential targets using the targeting preset.
* 使用目标预设刷新潜在目标列表。
*/
virtual void RefreshPotentialTargets();
/**
* Checks if an actor can be targeted.
* 检查Actor是否可以被目标。
* @param ActorToTarget The actor to check. 要检查的Actor。
* @return True if the actor can be targeted. 如果Actor可被目标返回true。
*/
UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "GCS|Targeting")
bool CanBeTargeted(AActor* ActorToTarget);
virtual bool CanBeTargeted_Implementation(AActor* ActorToTarget);
/**
* Gets the currently targeted actor.
* 获取当前目标Actor。
* @return The targeted actor. 目标Actor。
*/
UFUNCTION(BlueprintCallable, BlueprintPure, Category = "GCS|Targeting")
FORCEINLINE AActor* GetTargetedActor() { return TargetedActor; }
/**
* Sets the targeted actor.
* 设置目标Actor。
* @param NewActor The new target actor. 新目标Actor。
*/
UFUNCTION(BlueprintCallable, Category = "GCS|Targeting")
void SetTargetedActor(AActor* NewActor);
private:
/**
* Sets the targeted actor with optional RPC.
* 设置目标Actor可选择是否发送RPC。
* @param NewActor The new target actor. 新目标Actor。
* @param bSendRpc Whether to send RPC. 是否发送RPC。
*/
void SetTargetedActor(AActor* NewActor, bool bSendRpc);
/**
* Client RPC to set the targeted actor.
* 设置目标Actor的客户端RPC。
* @param NewActor The new target actor. 新目标Actor。
*/
UFUNCTION(Client, Reliable)
void ClientSetTargetedActor(AActor* NewActor);
virtual void ClientSetTargetedActor_Implementation(AActor* NewActor);
/**
* Server RPC to set the targeted actor.
* 设置目标Actor的服务器RPC。
* @param NewActor The new target actor. 新目标Actor。
*/
UFUNCTION(Server, Reliable)
void ServerSetTargetedActor(AActor* NewActor);
virtual void ServerSetTargetedActor_Implementation(AActor* NewActor);
protected:
/**
* Handles target lock-off events.
* 处理目标解锁事件。
*/
UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "GCS|Targeting")
void OnLockOff();
virtual void OnLockOff_Implementation();
/**
* Handles target lock-on events.
* 处理目标锁定事件。
*/
UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "GCS|Targeting")
void OnLockOn();
virtual void OnLockOn_Implementation();
/**
* Delegate for target lock-on events.
* 目标锁定事件的委托。
*/
UPROPERTY(BlueprintAssignable, Category="GCS|Targeting")
FGCS_OnTargetLockOnSignature OnTargetLockOnEvent;
/**
* Delegate for target lock-off events.
* 目标解锁事件的委托。
*/
UPROPERTY(BlueprintAssignable, Category="GCS|Targeting")
FGCS_OnTargetLockOffSignature OnTargetLockOffEvent;
/**
* Calculates the view angle to a target actor.
* 计算到目标Actor的视角角度。
* @param TargetActor The target actor. 目标Actor。
* @return The view angle. 视角角度。
*/
UFUNCTION(BlueprintCallable, BlueprintPure, Category = "GCS|Targeting")
virtual float CalculateViewAngle(const AActor* TargetActor);
};