Files
PHY/Plugins/GCS/Source/GenericCombatSystem/Public/Collision/GCS_AsyncAction_CollisionTrace.h
2026-03-03 01:23:02 +08:00

116 lines
3.5 KiB
C++

// Copyright 2025 https://yuewu.dev/en All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "GCS_TraceStructLibrary.h"
#include "Engine/CancellableAsyncAction.h"
#include "GCS_AsyncAction_CollisionTrace.generated.h"
class UGCS_TraceSystemComponent;
/**
* Async action for setting up and listening to collision trace hits.
* 设置并监听碰撞检测命中的异步动作。
*/
UCLASS()
class GENERICCOMBATSYSTEM_API UGCS_AsyncAction_CollisionTrace : public UCancellableAsyncAction
{
GENERATED_BODY()
public:
/**
* Creates and activates trace instances from definitions and listens for hits.
* 从定义创建并激活碰撞检测实例并监听命中。
* @param TraceSystem The collision trace system component. 碰撞检测系统组件。
* @param TraceDefinitions The traces definitions will be created and added to collision trace system. 要新建的碰撞实例的定义。
* @param PrimitiveComponent The primitive component for tracing. 用于追踪的原始组件。
* @param OptionalSourceObject The optional source object. 可选的源对象.
* @return The async action instance. 异步动作实例。
*/
UFUNCTION(BlueprintCallable, BlueprintCosmetic, Category="GUIS", meta = (WorldContext = "WorldContextObject", BlueprintInternalUseOnly = "true"))
static UGCS_AsyncAction_CollisionTrace* SetupAndListenForCollisionTraceHit(UGCS_TraceSystemComponent* TraceSystem, const TArray<FGCS_TraceDefinition>& TraceDefinitions,
UPrimitiveComponent* PrimitiveComponent, UObject* OptionalSourceObject = nullptr);
/**
* Activates the async action.
* 激活异步动作。
*/
virtual void Activate() override;
/**
* Cancels the async action.
* 取消异步动作。
*/
virtual void Cancel() override;
/**
* Delegate for collision trace hit events.
* 碰撞检测命中事件的委托。
*/
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FCollisionTraceSignature, const FGCS_TraceHandle, Handle, const FHitResult&, HitResult);
/**
* Called before trace instances are activated.
* 在激活碰撞检测实例前调用。
*/
/**
* Called before trace instances are activated.
* 在激活碰撞检测实例前调用。
*/
UPROPERTY(BlueprintAssignable)
FCollisionTraceSignature BeforeActive;
/**
* Fired when a trace instance hits something.
* 当碰撞检测实例命中某物时触发。
*/
UPROPERTY(BlueprintAssignable)
FCollisionTraceSignature OnHit;
protected:
/**
* Handles trace instance hit events.
* 处理碰撞检测实例命中事件。
* @param TraceHandle The trace instance. 碰撞检测实例。
* @param HitResult The hit result. 命中结果。
*/
UFUNCTION()
void TraceHitCallback(const FGCS_TraceHandle& TraceHandle, const FHitResult& HitResult);
/**
* The collision system component.
* 碰撞系统组件。
*/
UPROPERTY()
TWeakObjectPtr<UGCS_TraceSystemComponent> TraceSystem;
/**
* The primitive component for tracing.
* 用于追踪的原始组件。
*/
UPROPERTY()
TWeakObjectPtr<UPrimitiveComponent> SourceComponent;
/**
* The optional source object.
* 可选的源对象。
*/
UPROPERTY()
TWeakObjectPtr<UObject> SourceObject;
/**
* The trace definitions to create.
* 要创建的碰撞检测定义。
*/
UPROPERTY()
TArray<FGCS_TraceDefinition> TraceDefinitions;
/**
* The monitored trace instances.
* 监听的碰撞检测实例。
*/
UPROPERTY()
TArray<FGCS_TraceHandle> TraceHandles;
};