protected override void OnSceneLoad(SceneOperationKind operation, ReadOnlyDictionary <int, ObjectCtrlInfo> loadedItems) { //Dispose of any textures when resetting the scene if (operation == SceneOperationKind.Clear) { FrameTex?.Dispose(); FrameTex = null; BGTex?.Dispose(); BGTex = null; return; } //On loading or importing a scene, check if the item has any patterns that exist in the pattern folder and use MaterialEditor to handle these textures instead foreach (var loadedItem in loadedItems.Values) { if (loadedItem is OCIItem item) { if (item.itemComponent != null) { for (int i = 0; i < 3; i++) { string filePath = item.GetPatternPath(i); SavePatternTex(item, i, filePath); } } if (item.panelComponent != null) { SaveBGTex(item, item.itemInfo.panel.filePath); } } } //On loading a scene load the saved frame texture, if any //Frames and BGs are not imported, only loaded if (operation == SceneOperationKind.Load) { FrameTex?.Dispose(); FrameTex = null; BGTex?.Dispose(); BGTex = null; var data = GetExtendedData(); if (data?.data != null) { if (data.data.TryGetValue("FrameData", out var frameObj) && frameObj != null) { FrameTex = new TextureContainer((byte[])frameObj); } if (data.data.TryGetValue("BGData", out var bgObj) && bgObj != null) { BGTex = new TextureContainer((byte[])bgObj); } } if (FrameTex != null) { var imageFrame = Traverse.Create(Studio.Studio.Instance.frameCtrl).Field("imageFrame").GetValue <RawImage>(); imageFrame.texture = FrameTex.Texture; imageFrame.enabled = true; var cameraUI = Traverse.Create(Studio.Studio.Instance.frameCtrl).Field("cameraUI").GetValue <Camera>(); cameraUI.enabled = true; } if (BGTex != null) { BackgroundCtrl m_BackgroundCtrl = Traverse.Create(Studio.Studio.Instance).Field("m_BackgroundCtrl").GetValue <BackgroundCtrl>(); MeshRenderer meshRenderer = Traverse.Create(m_BackgroundCtrl).Field("meshRenderer").GetValue <MeshRenderer>(); meshRenderer.material.SetTexture("_MainTex", BGTex.Texture); m_BackgroundCtrl.isVisible = true; } } }
protected override void OnSceneLoad(SceneOperationKind operation, ReadOnlyDictionary <int, ObjectCtrlInfo> loadedItems) { //Dispose of any Frame texture when resetting the scene if (operation == SceneOperationKind.Clear) { FrameTex?.Dispose(); FrameTex = null; return; } //On loading or importing a scene, check if the item has any patterns that exist in the pattern folder and use MaterialEditor to handle these textures instead foreach (var loadedItem in loadedItems.Values) { if (loadedItem is OCIItem item) { if (item?.itemComponent != null) { for (int i = 0; i < 3; i++) { string filePath = item.GetPatternPath(i); SavePatternTex(item, i, filePath); } } if (item?.panelComponent != null) { if (!item.itemInfo.panel.filePath.IsNullOrEmpty()) { Logger.LogInfo($"bg:{item.itemInfo.panel.filePath}"); } SaveBGTex(item, item.itemInfo.panel.filePath); } } } //On loading a scene load the saved frame texture, if any //Frames are not imported, only loaded if (operation == SceneOperationKind.Load) { FrameTex?.Dispose(); FrameTex = null; var data = GetExtendedData(); if (data?.data != null) { if (data.data.TryGetValue("FrameData", out var frameObj) && frameObj != null) { FrameTex = new TextureContainer((byte[])frameObj); } } if (FrameTex != null) { var imageFrame = Traverse.Create(Studio.Studio.Instance.frameCtrl).Field("imageFrame").GetValue <RawImage>(); imageFrame.texture = FrameTex.Texture; imageFrame.enabled = true; var cameraUI = Traverse.Create(Studio.Studio.Instance.frameCtrl).Field("cameraUI").GetValue <Camera>(); cameraUI.enabled = true; } } }