第一次提交

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,60 @@
// Copyright 2025 https://yuewu.dev/en All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "GCS_TraceStructLibrary.h"
#include "DrawDebugHelpers.h"
#include "WorldCollision.h"
#include "Kismet/KismetSystemLibrary.h"
#include "Subsystems/WorldSubsystem.h"
#include "GCS_TraceSubsystem.generated.h"
UCLASS()
class GENERICCOMBATSYSTEM_API UGCS_TraceSubsystem : public UTickableWorldSubsystem
{
GENERATED_BODY()
public:
virtual void Initialize(FSubsystemCollectionBase& Collection) override;
virtual void Tick(float DeltaTime) override;
virtual bool IsTickable() const override { return true; }
virtual TStatId GetStatId() const override { return TStatId(); }
FCriticalSection CriticalSection;
bool IsValidStateIdx(int32 StateIdx) const;
FGCS_TraceState& GetTraceStateAt(int Index);
int32 AddTraceState();
void RemoveTraceState(int Idx, FGuid Guid);
protected:
TArray<FGCS_TraceState> TraceStates;
bool RemovalLock = false;
uint32 TickIdx = 0;
void RemoveTraceStateAt(int Idx, FGuid Guid);
void PreTraceTick(const float DeltaTime);
void PostTraceTick();
// 计算所有用于碰撞检测的必须数据。
virtual void PrepareSubTicks(const float DeltaTime);
virtual void PerformSubTicks(const float DeltaTime);
static void PerformAsyncTrace(const FTransform& StartTransform, const FTransform& EndTransform, const FTransform& AverageTransform, UWorld* World,
const FGCS_TraceSweepSetting& TraceSettings,
const FCollisionShape& CollisionShape, const FCollisionQueryParams& CollisionParams,
const FCollisionResponseParams& CollisionResponseParams,
const FCollisionObjectQueryParams& ObjectQueryParams, const FTraceDelegate* InDelegate = nullptr);
virtual void HandleTraceResults(const FTraceHandle& InTraceHandle, FTraceDatum& InTraceDatum, int32 TraceStateIdx, uint32 InTickIdx, float InShapeTime);
#if ENABLE_DRAW_DEBUG
static void DrawDebug(const FVector& Start, const FVector& End, const FQuat& Rot, TArray<FHitResult> Hits, const FCollisionShape& CollisionShape, const UWorld* World,
const EDrawDebugTrace::Type DrawDebugType, float DrawDebugTime, const FLinearColor& DrawDebugColor, const FLinearColor& DrawDebugHitColor);
#endif
// 新增用于批量移除的Pending列表避免边遍历边修改
TArray<TPair<int32, FGuid>> PendingRemovals;
};