2020-08-11 01:36:57 -04:00
|
|
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include "CoreMinimal.h"
|
2020-08-25 06:31:46 -04:00
|
|
|
#include "LevelInstance/ILevelInstanceEditorModule.h"
|
2024-02-22 08:26:27 -05:00
|
|
|
#include "PropertyEditorArchetypePolicy.h"
|
|
|
|
|
#include "PropertyEditorEditConstPolicy.h"
|
2021-11-29 14:47:15 -05:00
|
|
|
#include "Tools/Modes.h"
|
2020-08-11 01:36:57 -04:00
|
|
|
|
|
|
|
|
class AActor;
|
|
|
|
|
class ULevel;
|
|
|
|
|
enum class EMapChangeType : uint8;
|
|
|
|
|
|
|
|
|
|
/**
|
2020-08-25 06:31:46 -04:00
|
|
|
* The module holding all of the UI related pieces for LevelInstance management
|
2020-08-11 01:36:57 -04:00
|
|
|
*/
|
2020-08-25 06:31:46 -04:00
|
|
|
class FLevelInstanceEditorModule : public ILevelInstanceEditorModule
|
2020-08-11 01:36:57 -04:00
|
|
|
{
|
|
|
|
|
public:
|
2020-08-25 06:31:46 -04:00
|
|
|
virtual ~FLevelInstanceEditorModule(){}
|
2020-08-11 01:36:57 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Called right after the module DLL has been loaded and the module object has been created
|
|
|
|
|
*/
|
|
|
|
|
virtual void StartupModule();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Called before the module is unloaded, right before the module object is destroyed.
|
|
|
|
|
*/
|
|
|
|
|
virtual void ShutdownModule();
|
|
|
|
|
|
2022-01-13 11:53:38 -05:00
|
|
|
virtual void BroadcastTryExitEditorMode() override;
|
|
|
|
|
|
2021-11-29 14:47:15 -05:00
|
|
|
DECLARE_DERIVED_EVENT(FLevelInstanceEditorModule, ILevelInstanceEditorModule::FExitEditorModeEvent, FExitEditorModeEvent);
|
|
|
|
|
virtual FExitEditorModeEvent& OnExitEditorMode() override { return ExitEditorModeEvent; }
|
|
|
|
|
|
2022-01-13 11:53:38 -05:00
|
|
|
DECLARE_DERIVED_EVENT(FLevelInstanceEditorModule, ILevelInstanceEditorModule::FTryExitEditorModeEvent, FTryExitEditorModeEvent);
|
|
|
|
|
virtual FTryExitEditorModeEvent& OnTryExitEditorMode() override { return TryExitEditorModeEvent; }
|
|
|
|
|
|
2023-11-16 13:35:30 -05:00
|
|
|
virtual bool IsEditInPlaceStreamingEnabled() const override;
|
|
|
|
|
|
2020-08-11 01:36:57 -04:00
|
|
|
private:
|
2024-02-22 08:26:27 -05:00
|
|
|
virtual void UpdateEditorMode(bool bActivated) override;
|
|
|
|
|
|
2021-11-29 14:47:15 -05:00
|
|
|
void OnEditorModeIDChanged(const FEditorModeID& InModeID, bool bIsEnteringMode);
|
2020-08-11 01:36:57 -04:00
|
|
|
void OnLevelActorDeleted(AActor* Actor);
|
|
|
|
|
void CanMoveActorToLevel(const AActor* ActorToMove, const ULevel* DestLevel, bool& bOutCanMove);
|
|
|
|
|
|
|
|
|
|
void ExtendContextMenu();
|
2024-02-22 08:26:27 -05:00
|
|
|
|
|
|
|
|
class FPropertyEditorPolicy : public PropertyEditorPolicy::IEditConstPolicy,
|
|
|
|
|
public PropertyEditorPolicy::IArchetypePolicy
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
FPropertyEditorPolicy(ILevelInstanceEditorModule::IPropertyOverridePolicy* InPropertyOverridePolicy)
|
|
|
|
|
: PropertyOverridePolicy(InPropertyOverridePolicy)
|
|
|
|
|
{
|
|
|
|
|
check(PropertyOverridePolicy);
|
|
|
|
|
PropertyEditorPolicy::RegisterEditConstPolicy(this);
|
|
|
|
|
PropertyEditorPolicy::RegisterArchetypePolicy(this);
|
|
|
|
|
}
|
2021-11-29 14:47:15 -05:00
|
|
|
|
2024-02-22 08:26:27 -05:00
|
|
|
virtual ~FPropertyEditorPolicy()
|
|
|
|
|
{
|
|
|
|
|
PropertyEditorPolicy::UnregisterEditConstPolicy(this);
|
|
|
|
|
PropertyEditorPolicy::UnregisterArchetypePolicy(this);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
virtual UObject* GetArchetypeForObject(const UObject* Object) const override
|
|
|
|
|
{
|
|
|
|
|
return PropertyOverridePolicy->GetArchetypeForObject(Object);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
virtual bool CanEditProperty(const FEditPropertyChain& PropertyChain, const UObject* Object) const override
|
|
|
|
|
{
|
|
|
|
|
return PropertyOverridePolicy->CanEditProperty(PropertyChain, Object);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
virtual bool CanEditProperty(const FProperty* Property, const UObject* Object) const override
|
|
|
|
|
{
|
|
|
|
|
return PropertyOverridePolicy->CanEditProperty(Property, Object);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ILevelInstanceEditorModule::IPropertyOverridePolicy* PropertyOverridePolicy = nullptr;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
TUniquePtr<FPropertyEditorPolicy> PropertyEditorPolicy;
|
|
|
|
|
|
|
|
|
|
virtual bool IsPropertyEditConst(const FEditPropertyChain& PropertyChain, UObject* Object) override
|
|
|
|
|
{
|
|
|
|
|
return PropertyEditorPolicy::IsPropertyEditConst(PropertyChain, Object);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
virtual bool IsPropertyEditConst(const FProperty* Property, UObject* Object) override
|
|
|
|
|
{
|
|
|
|
|
return PropertyEditorPolicy::IsPropertyEditConst(Property, Object);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
virtual UObject* GetArchetype(const UObject* Object) override
|
|
|
|
|
{
|
|
|
|
|
return PropertyEditorPolicy::GetArchetype(Object);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
virtual void SetPropertyOverridePolicy(ILevelInstanceEditorModule::IPropertyOverridePolicy* InPropertyOverridePolicy) override
|
|
|
|
|
{
|
|
|
|
|
PropertyEditorPolicy.Reset();
|
|
|
|
|
if (InPropertyOverridePolicy)
|
|
|
|
|
{
|
|
|
|
|
PropertyEditorPolicy = MakeUnique<FPropertyEditorPolicy>(InPropertyOverridePolicy);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-29 14:47:15 -05:00
|
|
|
FExitEditorModeEvent ExitEditorModeEvent;
|
2022-01-13 11:53:38 -05:00
|
|
|
FTryExitEditorModeEvent TryExitEditorModeEvent;
|
2020-08-11 01:36:57 -04:00
|
|
|
};
|