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(); }
void ScriptLight::destroy() { if (mLight->isDestroyed()) return; gSceneManager()._unregisterLight(mLight); mLight->destroy(); }
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); }
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); }
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); }
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; }
ScriptLight::ScriptLight(MonoObject* managedInstance, const HSceneObject& parentSO) :ScriptObject(managedInstance), mLight(nullptr), mLastUpdateHash(0) { mLight = Light::create(); gSceneManager()._registerLight(mLight, parentSO); }