// Distributed under the MIT License (MIT) (see accompanying LICENSE file)

#include "ImGuiPrivatePCH.h"

#include "ImGuiDelegatesContainer.h"

#include "Utilities/WorldContextIndex.h"


FImGuiDelegatesContainer FImGuiDelegatesContainer::DefaultInstance;

FImGuiDelegatesContainer* FImGuiDelegatesContainer::InstancePtr = &FImGuiDelegatesContainer::DefaultInstance;

void FImGuiDelegatesContainer::MoveContainer(FImGuiDelegatesContainer& Dst)
{
	// Only move data if pointer points to default instance, otherwise our data has already been moved and we only
	// keep pointer to a more recent version.
	if (InstancePtr == &DefaultInstance)
	{
		Dst = MoveTemp(DefaultInstance);
		DefaultInstance.Clear();
	}

	// Update pointer to the most recent version.
	InstancePtr = &Dst;
}

int32 FImGuiDelegatesContainer::GetContextIndex(UWorld* World)
{
	return Utilities::GetWorldContextIndex(*World);
}

void FImGuiDelegatesContainer::Clear()
{
	WorldEarlyDebugDelegates.Empty();
	WorldDebugDelegates.Empty();
	MultiContextEarlyDebugDelegate.Clear();
	MultiContextDebugDelegate.Clear();
}