MonoObject* ScriptEditorApplication::internal_SaveScene(MonoString* path)
	{
		Path nativePath = MonoUtil::monoToString(path);
		HSceneObject sceneRoot = gSceneManager().getRootNode();
		
		SPtr<ProjectResourceMeta> resMeta = gProjectLibrary().findResourceMeta(nativePath);
		HPrefab scene;
		if (resMeta != nullptr)
		{
			if (resMeta->getTypeID() != TID_Prefab)
				return nullptr;

			scene = static_resource_cast<Prefab>(gProjectLibrary().load(nativePath));
			scene->update(sceneRoot);

			gProjectLibrary().saveEntry(scene);
		}
		else
		{
			scene = Prefab::create(sceneRoot);
			gProjectLibrary().createEntry(scene, nativePath);
		}

		ScriptResourceBase* scriptPrefab = ScriptResourceManager::instance().getScriptResource(scene, true);
		return scriptPrefab->getManagedInstance();
	}
예제 #2
0
	void ScriptLight::destroy()
	{
		if (mLight->isDestroyed())
			return;

		gSceneManager()._unregisterLight(mLight);
		mLight->destroy();
	}
예제 #3
0
	void Application::showProfilerOverlay(ProfilerOverlayType type, const SPtr<Camera>& camera)
	{
		const SPtr<Camera>& overlayCamera = camera ? camera : gSceneManager().getMainCamera();
		if(!overlayCamera)
			return;

		if(!mProfilerOverlay)
			mProfilerOverlay = bs_shared_ptr_new<ProfilerOverlay>(overlayCamera);
		else
			mProfilerOverlay->setTarget(overlayCamera);

		mProfilerOverlay->show(type);
	}
예제 #4
0
	void ScriptGUIWidget::internal_SetCamera(ScriptGUIWidget* instance, ScriptCamera* camera)
	{
		SPtr<Camera> nativeCamera;
		if (camera != nullptr)
			nativeCamera = camera->getInternal();

		if(nativeCamera == nullptr)
			nativeCamera = gSceneManager().getMainCamera().camera;

		SPtr<GUIWidget> widget = instance->getInternal();
		if(widget != nullptr)
			widget->setCamera(nativeCamera);
	}
예제 #5
0
	ScriptGUIWidget::ScriptGUIWidget(MonoObject* managedInstance)
		:ScriptObject(managedInstance), mGUIWidget(nullptr), mLastUpdateHash((UINT32)-1)
	{
		SPtr<Camera> mainCamera = gSceneManager().getMainCamera().camera;

		mGUIWidget = GUIWidget::create(mainCamera);
		mGUIWidget->setSkin(BuiltinResources::instance().getGUISkin());

		MonoObject* guiPanel = ScriptGUIPanel::createFromExisting(mGUIWidget->getPanel());
		mPanel = ScriptGUILayout::toNative(guiPanel);

		sGUIPanelField->setValue(nullptr, guiPanel);
	}
예제 #6
0
	void RendererTask::wait()
	{
		// Task is about to be executed outside of normal rendering workflow. Make sure to manually sync all changes to
		// the core thread first.
		// Note: wait() might only get called during serialization, in which case we might call these methods just once
		// before a level save, instead for every individual component
		gSceneManager()._updateCoreObjectTransforms();
		CoreObjectManager::instance().syncToCore();

		auto worker = [this]()
		{
			gRenderer()->processTask(*this, true);
		};

		gCoreThread().queueCommand(worker);
		gCoreThread().submit(true);

		// Note: Tigger on complete callback and clear it from Renderer?
	}
	void EditorApplication::unloadProject()
	{
		if (!isProjectLoaded())
			return;

		saveProject();

		mProjectSettings = bs_shared_ptr_new<ProjectSettings>();
		BuildManager::instance().clear();
		UndoRedo::instance().clear();

		EditorWidgetManager::instance().closeAll();
		gProjectLibrary().unloadLibrary();
		Resources::instance().unloadAllUnused();
		gSceneManager().clearScene();

		mProjectPath = Path::BLANK;
		mProjectName = StringUtil::BLANK;
		mIsProjectLoaded = false;
	}
예제 #8
0
	ScriptLight::ScriptLight(MonoObject* managedInstance, const HSceneObject& parentSO)
		:ScriptObject(managedInstance), mLight(nullptr), mLastUpdateHash(0)
	{
		mLight = Light::create();
		gSceneManager()._registerLight(mLight, parentSO);
	}