public bool scene_set_bg_png_orig(string filepng)
 {
     if (this.scene_get_bg_png_orig() != filepng)
     {
         // return self.studio.sceneInfo.background
         // print self.studio.m_BackgroundCtrl.Load(ffile)
         // for obj in GameObject.FindObjectOfType(BackgroundCtrl):
         BackgroundCtrl obj = (BackgroundCtrl)GameObject.FindObjectOfType(typeof(BackgroundCtrl));
         return(obj.Load(filepng));
         // print self.studio.m_BackgroundCtrl.Load(ffile)
     }
     return(true);
 }
            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;
                    }
                }
            }
            private static bool Studio_InitScene(Studio.Studio __instance, bool _close, ref BackgroundCtrl ___m_BackgroundCtrl)
            {
                if (IsStudio)
                {
                    return(true);
                }

                __instance.ChangeCamera(null, false, true);
                Traverse.Create(__instance).Property("cameraCount").SetValue(0);
                __instance.treeNodeCtrl.DeleteAllNode();
                foreach (KeyValuePair <TreeNodeObject, ObjectCtrlInfo> item in __instance.dicInfo)
                {
                    switch (item.Value.kind)
                    {
                    case 0:
                    {
                        OCIChar oCIChar = item.Value as OCIChar;
                        oCIChar?.StopVoice();
                        break;
                    }

                    case 4:
                    {
                        OCIRoute oCIRoute = item.Value as OCIRoute;
                        oCIRoute?.DeleteLine();
                        break;
                    }
                    }
                    Destroy(item.Value.guideObject.transformTarget.gameObject);
                }
                __instance.dicInfo.Clear();
                __instance.dicChangeAmount.Clear();
                __instance.dicObjectCtrl.Clear();
                Singleton <Map> .Instance.ReleaseMap();

                __instance.cameraCtrl.CloerListCollider();
                __instance.bgmCtrl.Stop();
                __instance.envCtrl.Stop();
                __instance.outsideSoundCtrl.Stop();
                __instance.sceneInfo.Init();
                __instance.cameraCtrl.Reset(0);
                __instance.cameraLightCtrl.Reflect();
                __instance.onChangeMap?.Invoke();
                if (_close)
                {
                    Destroy(___m_BackgroundCtrl);
                    ___m_BackgroundCtrl = null;
                }
                return(false);
            }
            private static bool Studio_LoadScene(Studio.Studio __instance, string _path, ref bool __result, ref BackgroundCtrl ___m_BackgroundCtrl, ref Studio.CameraControl ___m_CameraCtrl)
            {
                if (IsStudio)
                {
                    return(true);
                }

                if (!File.Exists(_path))
                {
                    __result = false;
                    return(false);
                }
                __instance.InitScene(false);
                var sceneInfo = new SceneInfo();

                Traverse.Create(__instance).Property("sceneInfo").SetValue(sceneInfo);
                if (!sceneInfo.Load(_path))
                {
                    __result = false;
                    return(false);
                }
                LoadingScene = true;
                AddObjectAssist.LoadChild(sceneInfo.dicObject);
                ChangeAmount source = sceneInfo.caMap.Clone();

                __instance.AddMap(sceneInfo.map, false, false);
                sceneInfo.caMap.Copy(source);
                Singleton <MapCtrl> .Instance.Reflect();

                __instance.bgmCtrl.Play(__instance.bgmCtrl.no);
                __instance.envCtrl.Play(__instance.envCtrl.no);
                __instance.outsideSoundCtrl.Play(__instance.outsideSoundCtrl.fileName);
                //Add the component if it doesn't exist
                if (___m_BackgroundCtrl == null)
                {
                    ___m_BackgroundCtrl = Camera.main.gameObject.AddComponent <BackgroundCtrl>();
                }
                __instance.treeNodeCtrl.RefreshHierachy();
                if (sceneInfo.cameraSaveData != null)
                {
                    ___m_CameraCtrl.Import(sceneInfo.cameraSaveData);
                }
                __instance.cameraLightCtrl.Reflect();
                sceneInfo.dataVersion = sceneInfo.version;
                LoadingScene          = false;

                __result = true;
                return(false);
            }