// Copyright (c) 2024 Codemongous LLC. All Rights Reserved.

#pragma once

#include "ISCW_UWorld.h"
#include "ISCW_ULevel.h"
#include "SCW_UObject.h"

class UWorld;

namespace Sourcify
{
	class SCW_UWorld : public SCW_UObject, public virtual ISCW_UWorld
	{
	public:
		SCW_UWorld(UWorld* InWorld);

		void DestroyWorld(bool bInformEngineOfWorld, shared_ptr<ISCW_UWorld> NewWorld = nullptr) const override;
		
		ISCW_AActorPtr SpawnActor_AActor(ISCW_UClassPtr ActorClass) override;

		vector<ISCW_AActorPtr> GetActors(ISCW_UClassPtr ActorClass = nullptr) const override;

		ISCW_ULevelPtr GetPersistentLevel() const override;
		
		UWorld* ToUWorld() const;

		ISCW_UWorldPtr ToUWorldPtr() override;
		ISCW_UWorldConstPtr ToUWorldPtr() const override;

	protected:
		UWorld* World;
	};
} // namespace Sourcify