Space Plunder
Loading...
Searching...
No Matches
OptimizationManager.h
Go to the documentation of this file.
1// Copyright (C) 2021-2023 Space Raccoon Game Studio. All rights reserved. Contacts: <business@space-raccoon.com>
2// Created by AfroStalin
3
4#pragma once
5
6#include "CoreMinimal.h"
8#include "UObject/ObjectMacros.h"
9#include "Engine/World.h"
10#include "HAL/Runnable.h"
11#include "HAL/ThreadSafeBool.h"
12
13DECLARE_STATS_GROUP(TEXT("NPC_Optimizator"), STATGROUP_NPC_Optimizator, STATCAT_Advanced);
14
15class FRunnableThread;
16class UOptimizationProxyComponent;
17class APawn;
18class APlayerCameraManager;
19
20class FOptimizationThread : public FRunnable, public FGCObject
21{
22public:
23 FOptimizationThread(UWorld* World, class FOptimizationManager* InManager);
24public:
25 // FRunnable
26 virtual uint32 Run() override;
27 virtual void Exit() override;
28 //~FRunnable
29public:
30 // FGCObject
31 virtual void AddReferencedObjects(FReferenceCollector& Collector) override;
32 virtual FString GetReferencerName() const override;
33 //~FGCObject
34public:
35 void RegisterComponent(UOptimizationProxyComponent* Component);
36 void UnregisterComponent(const UOptimizationProxyComponent* Component);
37public:
39private:
40 void RemoveComponentByHandle(int32 Handle);
41 static EOptimizationWave GetOptimizationWave(const APawn* LocalPlayer, const APlayerCameraManager* Camera, IOptimizationProxy* Proxy, bool IsVisible);
42 static bool IsInCameraSight(const APlayerCameraManager* Camera, const APawn* LocalPlayer, IOptimizationProxy* Proxy, float InFOV);
43protected:
44 TArray<TObjectPtr<UOptimizationProxyComponent>> Components;
45
46 mutable FCriticalSection Mutex;
47 mutable FCriticalSection ProxyMutex;
48 TUniquePtr<FRunnableThread> Thread;
49 FThreadSafeBool bIsRunning = true;
50 TObjectPtr<UWorld> GameWorld = nullptr;
51 TObjectPtr<FOptimizationManager> Manager = nullptr;
52};
53
54class FOptimizationManager : public FGCObject
55{
56public:
57 FOptimizationManager(UWorld* InWorld);
58 virtual ~FOptimizationManager() override;
59public:
60 // FGCObject
61 virtual void AddReferencedObjects(FReferenceCollector& Collector) override;
62 virtual FString GetReferencerName() const override;
63 //~FGCObject
64public:
65 void RegisterComponent(UOptimizationProxyComponent* Component) const;
66 void UnregisterComponent(const UOptimizationProxyComponent* Component) const;
67protected:
68 void HandlePostGarbageCollect() const;
69protected:
71 FDelegateHandle PostGarbageCollectHandle;
72private:
73 TObjectPtr<UWorld> GameWorld = nullptr;
74 TUniquePtr<FOptimizationThread> OptimizationThread;
75 FCriticalSection Mutex;
76};
EOptimizationWave
Definition NPC_Optimizator_Types.h:12
DECLARE_STATS_GROUP(TEXT("NPC_Optimizator"), STATGROUP_NPC_Optimizator, STATCAT_Advanced)
Definition OptimizationManager.h:55
void UnregisterComponent(const UOptimizationProxyComponent *Component) const
Definition OptimizationManager.cpp:343
void HandlePostGarbageCollect() const
Definition OptimizationManager.cpp:351
TObjectPtr< UWorld > GameWorld
Definition OptimizationManager.h:73
virtual ~FOptimizationManager() override
Definition OptimizationManager.cpp:315
virtual FString GetReferencerName() const override
Definition OptimizationManager.cpp:330
virtual void AddReferencedObjects(FReferenceCollector &Collector) override
Definition OptimizationManager.cpp:325
void RegisterComponent(UOptimizationProxyComponent *Component) const
Definition OptimizationManager.cpp:335
FDelegateHandle OnWorldPreActorTickHandle
Definition OptimizationManager.h:70
FOptimizationManager(UWorld *InWorld)
Definition OptimizationManager.cpp:310
FDelegateHandle PostGarbageCollectHandle
Definition OptimizationManager.h:71
TUniquePtr< FOptimizationThread > OptimizationThread
Definition OptimizationManager.h:74
FCriticalSection Mutex
Definition OptimizationManager.h:75
Definition OptimizationManager.h:21
virtual FString GetReferencerName() const override
Definition OptimizationManager.cpp:148
virtual void AddReferencedObjects(FReferenceCollector &Collector) override
Definition OptimizationManager.cpp:138
void RegisterComponent(UOptimizationProxyComponent *Component)
Definition OptimizationManager.cpp:153
void RemoveComponentByHandle(int32 Handle)
Definition OptimizationManager.cpp:288
TObjectPtr< FOptimizationManager > Manager
Definition OptimizationManager.h:51
static bool IsInCameraSight(const APlayerCameraManager *Camera, const APawn *LocalPlayer, IOptimizationProxy *Proxy, float InFOV)
Definition OptimizationManager.cpp:205
FThreadSafeBool bIsRunning
Definition OptimizationManager.h:49
FCriticalSection Mutex
Definition OptimizationManager.h:46
virtual uint32 Run() override
Definition OptimizationManager.cpp:48
TObjectPtr< UWorld > GameWorld
Definition OptimizationManager.h:50
virtual void Exit() override
Definition OptimizationManager.cpp:132
void HandlePostGarbageCollect()
Definition OptimizationManager.cpp:184
FOptimizationThread(UWorld *World, class FOptimizationManager *InManager)
Definition OptimizationManager.cpp:40
TUniquePtr< FRunnableThread > Thread
Definition OptimizationManager.h:48
static EOptimizationWave GetOptimizationWave(const APawn *LocalPlayer, const APlayerCameraManager *Camera, IOptimizationProxy *Proxy, bool IsVisible)
Definition OptimizationManager.cpp:236
FCriticalSection ProxyMutex
Definition OptimizationManager.h:47
void UnregisterComponent(const UOptimizationProxyComponent *Component)
Definition OptimizationManager.cpp:169
TArray< TObjectPtr< UOptimizationProxyComponent > > Components
Definition OptimizationManager.h:44
Definition NPC_Optimizator_Types.h:88