From 6307ec13378718af354cf3abce72ed9084bc9b16 Mon Sep 17 00:00:00 2001 From: Manuel Wagner Date: Tue, 23 Aug 2022 17:40:07 +0200 Subject: [PATCH] deleted workshop files --- .../Workshop/PerWorldServiceLocator.cpp | 21 -- .../Workshop/PerWorldServiceLocator.h | 20 -- Source/LyraGame/Workshop/RootedObject.cpp | 104 --------- Source/LyraGame/Workshop/RootedObject.h | 64 ------ Source/LyraGame/Workshop/ServiceLocator.cpp | 87 -------- Source/LyraGame/Workshop/ServiceLocator.h | 204 ------------------ 6 files changed, 500 deletions(-) delete mode 100644 Source/LyraGame/Workshop/PerWorldServiceLocator.cpp delete mode 100644 Source/LyraGame/Workshop/PerWorldServiceLocator.h delete mode 100644 Source/LyraGame/Workshop/RootedObject.cpp delete mode 100644 Source/LyraGame/Workshop/RootedObject.h delete mode 100644 Source/LyraGame/Workshop/ServiceLocator.cpp delete mode 100644 Source/LyraGame/Workshop/ServiceLocator.h diff --git a/Source/LyraGame/Workshop/PerWorldServiceLocator.cpp b/Source/LyraGame/Workshop/PerWorldServiceLocator.cpp deleted file mode 100644 index 6f9cac63..00000000 --- a/Source/LyraGame/Workshop/PerWorldServiceLocator.cpp +++ /dev/null @@ -1,21 +0,0 @@ -#include "PerWorldServiceLocator.h" - -#include "Engine/Engine.h" - -FServiceLocator* UPerWorldServiceLocator::Get(UObject* WorldContextObject) -{ - UWorld* World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::ReturnNull); - if(!World) - return nullptr; - - UPerWorldServiceLocator* PerWorldServiceLocator = World->GetSubsystem(); - if(!PerWorldServiceLocator) - return nullptr; - - return &PerWorldServiceLocator->GetServiceLocator(); -} - -FServiceLocator& UPerWorldServiceLocator::GetServiceLocator() -{ - return ServiceLocator; -} diff --git a/Source/LyraGame/Workshop/PerWorldServiceLocator.h b/Source/LyraGame/Workshop/PerWorldServiceLocator.h deleted file mode 100644 index 5410f097..00000000 --- a/Source/LyraGame/Workshop/PerWorldServiceLocator.h +++ /dev/null @@ -1,20 +0,0 @@ -#pragma once - -#include "CoreMinimal.h" -#include "ServiceLocator.h" -#include "Subsystems/WorldSubsystem.h" - -#include "PerWorldServiceLocator.generated.h" - -UCLASS() -class LYRAGAME_API UPerWorldServiceLocator : public UWorldSubsystem -{ - GENERATED_BODY() -public: - static FServiceLocator* Get(UObject* WorldContextObject); - - FServiceLocator& GetServiceLocator(); - -protected: - FServiceLocator ServiceLocator; -}; diff --git a/Source/LyraGame/Workshop/RootedObject.cpp b/Source/LyraGame/Workshop/RootedObject.cpp deleted file mode 100644 index 706d0245..00000000 --- a/Source/LyraGame/Workshop/RootedObject.cpp +++ /dev/null @@ -1,104 +0,0 @@ -#include "RootedObject.h" - - -#if WITH_DEV_AUTOMATION_TESTS - -template -struct TIsAssignableFrom -{ - struct TrueType {}; - - template - static T DeclVal(); // intentionally not implemented - - enum - { - Value = TIsSame() = DeclVal(), DeclVal()), TrueType>::Value - }; -}; - -static_assert(TIsConstructible>::Value, "TRootedObject should be default constructible"); - -static_assert(TIsConstructible, TRootedObject&&>::Value, "TRootedObject should be move constructible"); -static_assert(TIsAssignableFrom, TRootedObject&&>::Value, "TRootedObject should be move assignable"); - -static_assert(TIsAssignableFrom>::Value, "TRootedObject should implicitly castable to its inner type"); - -BEGIN_DEFINE_SPEC(TRootedObjectSpec, "Workshop.RootedObject", EAutomationTestFlags::ProductFilter | EAutomationTestFlags::ApplicationContextMask) - UObject* TheInnerObject; -END_DEFINE_SPEC(TRootedObjectSpec) - -void TRootedObjectSpec::Define() -{ - BeforeEach([this]() - { - TheInnerObject = NewObject(); - }); - - Describe("Construct", [this]() - { - It("Should add the rooted object to the root", [this]() - { - TRootedObject RootedObject(TheInnerObject); - TestTrue("TheInnerObject->IsRooted()", TheInnerObject->IsRooted()); - }); - - It("Should move correctly", [this]() - { - TRootedObject RootedObject(TheInnerObject); - TRootedObject OtherRootedObject; - - OtherRootedObject = MoveTemp(RootedObject); - - TestTrue("TheInnerObject->IsRooted()", TheInnerObject->IsRooted()); - TestFalse("RootedObject.IsValid()", RootedObject.IsValid()); - TestTrue("OtherRootedObject.IsValid()", OtherRootedObject.IsValid()); - }); - }); - - Describe("Destruct", [this]() - { - It("Should remove the rooted object from the root", [this]() - { - { - TRootedObject RootedObject(TheInnerObject); - TestTrue("TheInnerObject->IsRooted()", TheInnerObject->IsRooted()); - } - TestFalse("TheInnerObject->IsRooted()", TheInnerObject->IsRooted()); - }); - }); - - Describe("RetrieveObject", [this]() - { - It("Should invalidate the rooted object", [this]() - { - TRootedObject RootedObject(TheInnerObject); - RootedObject.RetrieveObject(); - TestFalse("RootedObject.IsValid()", RootedObject.IsValid()); - }); - - It("Should return the inner object", [this]() - { - TRootedObject RootedObject(TheInnerObject); - UObject* RetrievedObject = RootedObject.RetrieveObject(); - TestEqual("RootedObject.IsValid()", TheInnerObject, RetrievedObject); - }); - - It("Should remove the inner object from root", [this]() - { - TRootedObject RootedObject(TheInnerObject); - UObject* RetrievedObject = RootedObject.RetrieveObject(); - TestFalse("RetrievedObject->IsRooted()", RetrievedObject->IsRooted()); - }); - - It("Implicit Retrieve is same as explicit retrieve", [this]() - { - TRootedObject RootedObject(TheInnerObject); - UObject* RetrievedObject = RootedObject; - TestEqual("RootedObject.IsValid()", TheInnerObject, RetrievedObject); - TestFalse("RetrievedObject->IsRooted()", RetrievedObject->IsRooted()); - }); - }); -} - -#endif \ No newline at end of file diff --git a/Source/LyraGame/Workshop/RootedObject.h b/Source/LyraGame/Workshop/RootedObject.h deleted file mode 100644 index 4c507b6e..00000000 --- a/Source/LyraGame/Workshop/RootedObject.h +++ /dev/null @@ -1,64 +0,0 @@ -#pragma once - -#include "CoreMinimal.h" - -template -class TRootedObject -{ -public: - using SelfType = TRootedObject; - - static_assert(TIsDerivedFrom::Value, "This class only works with UObjects"); - - TRootedObject() = default; - - explicit TRootedObject(UObjectType* Object) - : OwnedObject(Object) - { - OwnedObject->AddToRoot(); - } - - TRootedObject(const SelfType& Other) = delete; - SelfType& operator=(const SelfType& Other) = delete; - - - TRootedObject(SelfType&& Other) - { - *this = Other; - } - - SelfType& operator=(SelfType&& Other) - { - Swap(OwnedObject, Other.OwnedObject); - return *this; - } - - ~TRootedObject() - { - if (::IsValid(OwnedObject)) - { - OwnedObject->RemoveFromRoot(); - } - } - - operator UObjectType*() - { - return RetrieveObject(); - } - - UObjectType* RetrieveObject() - { - UObjectType* Temp = OwnedObject; - OwnedObject = nullptr; - Temp->RemoveFromRoot(); - return Temp; - } - - bool IsValid() const - { - return ::IsValid(OwnedObject); - } - -private: - UObjectType* OwnedObject = nullptr; -}; diff --git a/Source/LyraGame/Workshop/ServiceLocator.cpp b/Source/LyraGame/Workshop/ServiceLocator.cpp deleted file mode 100644 index 5c2f4423..00000000 --- a/Source/LyraGame/Workshop/ServiceLocator.cpp +++ /dev/null @@ -1,87 +0,0 @@ -// Aesir Interactive GmbH, (c) 2019 - -#include "ServiceLocator.h" - - - -#if WITH_DEV_AUTOMATION_TESTS - -#include "Components/ActorComponent.h" -#include "Components/SceneComponent.h" - -static_assert(TModels::Value, "Actor component should have a static uclass"); -static_assert(TModels::Value); -static_assert(!TModels::Value); - -static_assert(TModels::Value); -static_assert(TIsUInterface::Value); -static_assert(TModels::Value); -static_assert(!TModels::Value); -static_assert(!TIsUInterface::Value); -static_assert(!TIsUInterface::Value); - - -class FServiceUser -{ -public: - USceneComponent* SceneComponent = nullptr; - UActorComponent* ActorComponent = nullptr; -}; - -BEGIN_DEFINE_SPEC(TServiceLocatorSpec, "Workshop.ServiceLocator", EAutomationTestFlags::ProductFilter | EAutomationTestFlags::ApplicationContextMask) - FServiceUser ServiceUser; - FServiceLocator ServiceLocator; - USceneComponent* SceneComponent = nullptr; - UActorComponent* ActorComponent = nullptr; -END_DEFINE_SPEC(TServiceLocatorSpec) - - -void TServiceLocatorSpec::Define() -{ - BeforeEach([this]() - { - SceneComponent = NewObject(); - ActorComponent = NewObject(); - }); - - Describe("ProvideService", [this]() - { - It("Should work for UObjects", [this]() - { - TestNull("GetService()", ServiceLocator.GetService()); - ServiceLocator.ProvideService(ActorComponent); - - TestEqual("GetService()", ServiceLocator.GetService(), ActorComponent); - }); - - It("Should work for UInterfaces", [this]() - { - TestNull("GetService()", ServiceLocator.GetService().GetInterface()); - ServiceLocator.ProvideService(ActorComponent); - - TestEqual("GetService()", - ServiceLocator.GetService().GetInterface(), - static_cast(ActorComponent)); - }); - }); - - Describe("GetServices", [this]() - { - BeforeEach([this]() - { - ServiceLocator.ProvideService(ActorComponent); - ServiceLocator.ProvideService(SceneComponent); - ServiceLocator.ProvideService(ActorComponent); - }); - It("Should get all the services", [this]() - { - auto [InjectedActorComponent, InjectedSceneComponent, InjectedInterface] = ServiceLocator.GetServices(); - TestEqual(TEXT("InjectedActorComponent"), InjectedActorComponent, ActorComponent); - TestEqual(TEXT("InjectedSceneComponent"), InjectedSceneComponent, SceneComponent); - TestEqual(TEXT("InjectedInterface"), InjectedInterface.GetInterface(), static_cast(ActorComponent)); - }); - }); - -} - -#endif \ No newline at end of file diff --git a/Source/LyraGame/Workshop/ServiceLocator.h b/Source/LyraGame/Workshop/ServiceLocator.h deleted file mode 100644 index 4a1442fb..00000000 --- a/Source/LyraGame/Workshop/ServiceLocator.h +++ /dev/null @@ -1,204 +0,0 @@ -// Aesir Interactive GmbH, (c) 2019 - -#pragma once - -#include "CoreMinimal.h" -#include "Templates/Casts.h" - - -/* -namespace TIsUBaseInterfacePrivate -{ - template - struct TIsUBaseInterfaceImpl; - template<> - struct TIsUBaseInterfaceImpl { enum { Value = false };}; - template<> - struct TIsUBaseInterfaceImpl { enum { Value = true };}; -} -template -struct TIsUBaseInterface { enum { Value = TIsUBaseInterfacePrivate::TIsUBaseInterfaceImpl::Value}; }; -*/ - -struct CHasStaticUClass -{ - template - auto Requires() -> decltype( - ObjectClass::StaticClass() - ); -}; - -struct CHasInterfaceUClass -{ - template - auto Requires() -> decltype( - InterfaceClass::UClassType::StaticClass() - ); -}; - - -template -struct TIsUInterface -{ - enum - { - Value = !TModels::Value && TModels::Value - }; -}; - -/** - * General purpose service locator that is available from the world settings - */ -class LYRAGAME_API FServiceLocator -{ -public: - DECLARE_EVENT_OneParam(FServiceLocator, FServiceRegisteredEvent, FServiceLocator&); - - /** - * @return the registered service cast to ServiceClass or nullptr if the service is not registered or the cast failed - */ - template - bool IsServiceProvided() const - { - const UClass* ServiceUClass = GetServiceUClass(); - return Services.Contains(ServiceUClass); - } - - /** - * @return the registered service cast to ServiceClass or nullptr if the service is not registered or the cast failed - */ - template - typename TEnableIf::Value, ServiceType*>::Type - GetService() const - { - const UClass* ServiceUClass = GetServiceUClass(); - UObject* const* ServiceInstance = Services.Find(ServiceUClass); - if (!ServiceInstance) - return nullptr; - - return Cast(*ServiceInstance); - } - - /** - * @return the registered service as TScriptInterface or nullptr if the service is not registered or the cast failed - */ - template - typename TEnableIf::Value, TScriptInterface>::Type - GetService() const - { - const UClass* ServiceUClass = GetServiceUClass(); - UObject* const* ServiceInstance = Services.Find(ServiceUClass); - if (!ServiceInstance) - return nullptr; - - return TScriptInterface(&**ServiceInstance); - } - - /** - * @return the registered service cast to ServiceClass. Crashes if the service is not available. - */ - template - typename TEnableIf::Value, ServiceClass*>::Type - GetServiceChecked() const - { - const UClass* ServiceUClass = GetServiceUClass(); - - UObject *const* ServiceObject = Services.Find(ServiceUClass); - checkf(ServiceObject, TEXT("No object was found for service %s"), *ServiceUClass->GetName()); - UObject *const ServiceCast = Cast(*ServiceObject); - checkf(IsValid(ServiceCast), TEXT("Object %s is not of type %s"), *((*ServiceObject)->GetName()), *ServiceUClass->GetName()); - return Cast(*ServiceObject); - } - - /** - * @return the registered service cast to ServiceClass. Crashes if the service is not available. - */ - template - typename TEnableIf::Value, TScriptInterface>::Type - GetServiceChecked() const - { - const UClass* ServiceUClass = GetServiceUClass(); - - UObject *const* ServiceObject = Services.Find(ServiceUClass); - checkf(ServiceObject, TEXT("No object was found for service %s"), *ServiceUClass->GetName()); - checkf(Cast(ServiceObject), TEXT("Object %s does not implement %s"), *(*ServiceObject)->GetName(), *ServiceUClass->GetName()); - return TScriptInterface(*ServiceObject); - } - - - - /** - * Registers the given object interface with the service locator. - * Will refuse to work if the type is not actually derived from the interface. - * Note: you should always explicitly provide the template list to make sure you register the service as the intended type - * @return void - */ - template - typename TEnableIf::Value, void>::Type - ProvideService(ChildType* ServiceInstance) - { - const UClass* ServiceUClass = GetServiceUClass(); - Services.Emplace(ServiceUClass, ServiceInstance); - NotifyServiceProvided(ServiceUClass); - } - - /** - * Unregisters the given object with the service locator - * Note: you should always explicitly provide the template list to make sure you unregister the service as the intended type - */ - template - void WithdrawService(ServiceClass* ServiceInstance) - { - const UClass* ServiceClassObject = GetServiceUClass(); - ensureMsgf(GetService() == ServiceInstance, TEXT("The service you are trying to unregister is not the one that has been provided!")); - Services.Remove(ServiceClassObject); - } - - /** Waits for the service class to be registered or calls the callback immediately if the service is already registerd */ - template - void WaitForService(FServiceRegisteredEvent::FDelegate Callback) - { - const UClass* ServiceUClass = GetServiceUClass(); - ServiceRegisteredCallbacks.FindOrAdd(ServiceUClass).Add(Callback); - } - - template - struct ServiceTypeMapper - { - using MappedType = decltype(DeclVal().GetService()); - }; - - template - auto GetServices() -> decltype(auto) - { - return MakeTuple::MappedType...>(GetService()...); - } - -private: - void NotifyServiceProvided(const UClass* ServiceUClass) - { - FServiceRegisteredEvent& ServiceRegisteredEvent = ServiceRegisteredCallbacks.FindOrAdd(ServiceUClass); - ServiceRegisteredEvent.Broadcast(*this); - ServiceRegisteredEvent.Clear(); - } - - /** This statically gets the UClass from any given IInterface-Type */ - template - static typename TEnableIf::Value,const UClass*>::Type - GetServiceUClass() - { - return ServiceInterface::UClassType::StaticClass(); - } - - /** This statically gets the UClass from any given UObject-Type */ - template - static typename TEnableIf::Value,const UClass*>::Type - GetServiceUClass() - { - return ServiceClass::StaticClass(); - } - - TMap ServiceRegisteredCallbacks; - - TMap Services; -};