コード例 #1
0
ファイル: Manager.cs プロジェクト: jeanpierrenel/Effekseer
 public override void DpiChanged(float f)
 {
     Manager.UpdateFont();
 }
コード例 #2
0
ファイル: Manager.cs プロジェクト: jeanpierrenel/Effekseer
        public static void Update()
        {
            if (isFontSizeDirtied)
            {
                NativeManager.InvalidateFont();
                var appDirectory = Manager.GetEntryDirectory();
                var type         = Core.Option.Font.Value;

                NativeManager.ClearAllFonts();

                if (type == Data.FontType.Normal)
                {
                    NativeManager.AddFontFromFileTTF(System.IO.Path.Combine(appDirectory, MultiLanguageTextProvider.GetText("Font_Normal")), Core.Option.FontSize.Value);
                }
                else if (type == Data.FontType.Bold)
                {
                    NativeManager.AddFontFromFileTTF(System.IO.Path.Combine(appDirectory, MultiLanguageTextProvider.GetText("Font_Bold")), Core.Option.FontSize.Value);
                }

                NativeManager.AddFontFromAtlasImage(System.IO.Path.Combine(appDirectory, "resources/icons/MenuIcons.png"), 0xec00, 24, 24, 16, 16);

                isFontSizeDirtied = false;
            }

            // Reset

            IO.Update();
            Shortcuts.Update();
            Network.Update();

            var handle = false;

            if (!handle)
            {
                if (!NativeManager.IsAnyItemActive())
                {
                    Shortcuts.ProcessCmdKey(ref handle);
                }
            }

            var mousePos = NativeManager.GetMousePosition();

            if (isFirstUpdate)
            {
                mousePos_pre = mousePos;
            }

            if ((effectViewer == null && !NativeManager.IsAnyWindowHovered()) || (effectViewer != null && effectViewer.IsHovered))
            {
                var result = ControllViewport();

                if (result.Slide)
                {
                    var dx = mousePos.X - mousePos_pre.X;
                    var dy = mousePos.Y - mousePos_pre.Y;

                    if (Core.Option.ViewerMode.Value == Data.OptionValues.ViewMode._3D)
                    {
                        Viewer.Slide(dx / 30.0f, dy / 30.0f);
                    }
                    else if (Core.Option.ViewerMode.Value == Data.OptionValues.ViewMode._2D)
                    {
                        Viewer.Slide(dx / 16.0f, dy / 16.0f);
                    }
                }
                else if (NativeManager.GetMouseWheel() != 0)
                {
                    Viewer.Zoom(NativeManager.GetMouseWheel());
                }
                else if (result.Zoom)
                {
                    var dx = mousePos.X - mousePos_pre.X;
                    var dy = mousePos.Y - mousePos_pre.Y;
                    Viewer.Zoom(-dy * 0.25f);
                }
                else if (result.Rotate)
                {
                    var dx = mousePos.X - mousePos_pre.X;
                    var dy = mousePos.Y - mousePos_pre.Y;

                    if (Core.Option.ViewerMode.Value == Data.OptionValues.ViewMode._3D)
                    {
                        Viewer.Rotate(dx, dy);
                    }
                    else if (Core.Option.ViewerMode.Value == Data.OptionValues.ViewMode._2D)
                    {
                        Viewer.Slide(dx / 16.0f, dy / 16.0f);
                    }
                }
            }

            mousePos_pre = mousePos;

            Viewer.UpdateViewer();

            Native.UpdateWindow();

            Native.ClearWindow(50, 50, 50, 0);

            //if(effectViewer == null)
            //{
            //	Native.RenderWindow();
            //}

            NativeManager.ResetGUI();

            if (resetCount < 0)
            {
                resetCount++;
                if (resetCount == 0)
                {
                    Application.Current.OnResetWindowActually();
                }
            }

            if (resizedCount > 0)
            {
                resizedCount--;
            }

            Controls.Lock();

            foreach (var c in Controls.Internal)
            {
                c.Update();
            }

            foreach (var _ in Controls.Internal)
            {
                if (!_.ShouldBeRemoved)
                {
                    continue;
                }

                var dp = _ as Dock.DockPanel;
                if (dp != null)
                {
                    dp.DispatchDisposed();
                }
            }

            foreach (var _ in Controls.Internal)
            {
                if (!_.ShouldBeRemoved)
                {
                    continue;
                }
                Controls.Remove(_);
            }

            Controls.Unlock();

            for (int i = 0; i < dockTypes.Length; i++)
            {
                if (panels[i] != null && panels[i].ShouldBeRemoved)
                {
                    panels[i] = null;
                }
            }

            NativeManager.RenderGUI(resizedCount == 0);

            Native.Present();
            NativeManager.Present();

            isFirstUpdate = false;

            // TODO more smart
            // When minimized, suppress CPU activity
            if (actualWidth == 0)
            {
                System.Threading.Thread.Sleep(16);
            }
        }
コード例 #3
0
        public static void Update()
        {
            if (isFontSizeDirtied)
            {
                NativeManager.InvalidateFont();
                var appDirectory = Manager.GetEntryDirectory();
                var type         = Core.Option.Font.Value;

                if (type == Data.FontType.Normal)
                {
                    NativeManager.AddFontFromFileTTF(System.IO.Path.Combine(appDirectory, "resources/GenShinGothic-Monospace-Normal.ttf"), Core.Option.FontSize.Value);
                }
                else if (type == Data.FontType.Bold)
                {
                    NativeManager.AddFontFromFileTTF(System.IO.Path.Combine(appDirectory, "resources/fonts/GenShinGothic-Monospace-Bold.ttf"), Core.Option.FontSize.Value);
                }
                isFontSizeDirtied = false;
            }

            // Reset
            NativeManager.SetNextDockRate(0.5f);
            NativeManager.SetNextDock(swig.DockSlot.Tab);
            NativeManager.ResetNextParentDock();

            Shortcuts.Update();
            Network.Update();

            var handle = false;

            if (!handle)
            {
                var cursor = Manager.NativeManager.GetMouseCursor();
                if (cursor == swig.MouseCursor.None || cursor == swig.MouseCursor.Arrow)
                {
                    Shortcuts.ProcessCmdKey(ref handle);
                }
            }

            var mousePos = NativeManager.GetMousePosition();

            if (isFirstUpdate)
            {
                mousePos_pre = mousePos;
            }

            if ((effectViewer == null && !NativeManager.IsAnyWindowHovered()) || (effectViewer != null && effectViewer.IsHovered))
            {
                if (NativeManager.GetMouseButton(2) > 0)
                {
                    var dx = mousePos.X - mousePos_pre.X;
                    var dy = mousePos.Y - mousePos_pre.Y;

                    Viewer.Slide(dx / 30.0f, dy / 30.0f);
                }

                if (NativeManager.GetMouseButton(1) > 0)
                {
                    var dx = mousePos.X - mousePos_pre.X;
                    var dy = mousePos.Y - mousePos_pre.Y;

                    Viewer.Rotate(dx, dy);
                }

                if (NativeManager.GetMouseWheel() != 0)
                {
                    Viewer.Zoom(NativeManager.GetMouseWheel());
                }
            }

            mousePos_pre = mousePos;

            Viewer.UpdateViewer();

            Native.UpdateWindow();

            Native.ClearWindow(50, 50, 50, 0);

            if (effectViewer == null)
            {
                Native.RenderWindow();
            }

            NativeManager.ResetGUI();

            if (resetCount < 0)
            {
                resetCount++;
                if (resetCount == 0)
                {
                    ResetWindowActually();
                }
            }

            if (resizedCount > 0)
            {
                resizedCount--;
            }

            Controls.Lock();

            foreach (var c in Controls.Internal)
            {
                c.Update();
            }

            foreach (var _ in Controls.Internal)
            {
                if (!_.ShouldBeRemoved)
                {
                    continue;
                }

                var dp = _ as Dock.DockPanel;
                if (dp != null)
                {
                    dp.DispatchDisposed();
                }
            }

            foreach (var _ in Controls.Internal)
            {
                if (!_.ShouldBeRemoved)
                {
                    continue;
                }
                Controls.Remove(_);
            }

            Controls.Unlock();

            for (int i = 0; i < dockTypes.Length; i++)
            {
                if (panels[i] != null && panels[i].ShouldBeRemoved)
                {
                    panels[i] = null;
                }
            }

            NativeManager.RenderGUI(resizedCount == 0);

            Native.Present();
            NativeManager.Present();

            isFirstUpdate = false;

            // TODO more smart
            // When minimized, suppress CPU activity
            if (actualWidth == 0)
            {
                System.Threading.Thread.Sleep(16);
            }
        }
コード例 #4
0
ファイル: Manager.cs プロジェクト: jeanpierrenel/Effekseer
        public static bool Initialize(int width, int height, swig.DeviceType deviceType, Type[] dockTypes_)
        {
            dockTypes = dockTypes_;
            var appDirectory = Manager.GetEntryDirectory();

            swig.MainWindowState state = new swig.MainWindowState();

            if (System.Environment.OSVersion.Platform == PlatformID.Win32NT)
            {
                IsWindowFrameless = true;
            }

            // TODO : refactor
            var windowConfig = new Configs.WindowConfig();

            if (windowConfig.Load(System.IO.Path.Combine(appDirectory, "config.Dock.xml")))
            {
                state.PosX          = windowConfig.WindowPosX;
                state.PosY          = windowConfig.WindowPosY;
                state.Width         = windowConfig.WindowWidth;
                state.Height        = windowConfig.WindowHeight;
                state.IsMaximumMode = windowConfig.WindowIsMaximumMode;
            }
            else
            {
                state.PosX   = -10000;               // nodata
                state.Width  = 1280;
                state.Height = 720;
                windowConfig = null;
            }

            state.IsFrameless = IsWindowFrameless;

            if (!swig.MainWindow.Initialize("Effekseer", state, false, deviceType == swig.DeviceType.OpenGL))
            {
                return(false);
            }
            MainWindow = swig.MainWindow.GetInstance();

            swig.IO.Initialize(1000);
            IO         = swig.IO.GetInstance();
            ioCallback = new ManagerIOCallback();
            IO.AddCallback(ioCallback);

            Core.OnFileLoaded += (string path) => {
#if DEBUG
                Console.WriteLine("OnFileLoaded : " + path);
#endif

                var f = IO.LoadIPCFile(path);
                if (f == null)
                {
                    f = IO.LoadFile(path);
                }

                // TODO : refactor it
                // Permission error
                if (f != null && f.GetSize() == 0)
                {
                    var message = MultiLanguageTextProvider.GetText("PermissionError_File");

                    if (swig.GUIManager.IsMacOSX())
                    {
                        message += "\n";
                        message += MultiLanguageTextProvider.GetText("PermissionError_File_Mac");
                    }

                    message = string.Format(message, System.IO.Path.GetFileName(path));

                    throw new FileLoadPermissionException(message);
                }

                if (f == null)
                {
                    return(null);
                }

                byte[] ret = new byte[f.GetSize()];
                System.Runtime.InteropServices.Marshal.Copy(f.GetData(), ret, 0, ret.Length);
                f.Dispose();
                return(ret);
            };

            ThumbnailManager.Initialize();

            var mgr = new swig.GUIManager();
            if (mgr.Initialize(MainWindow, deviceType))
            {
            }
            else
            {
                mgr.Dispose();
                mgr = null;
                return(false);
            }

            Native = new swig.Native();

            Viewer = new Viewer(Native);
            if (!Viewer.ShowViewer(mgr.GetNativeHandle(), state.Width, state.Height, deviceType))
            {
                mgr.Dispose();
                mgr = null;
                return(false);
            }

            mgr.InitializeGUI(Native);

            NativeManager = mgr;

            Images.Load(GUI.Manager.Native);

            guiManagerCallback = new GUIManagerCallback();
            NativeManager.SetCallback(guiManagerCallback);

            panels = new Dock.DockPanel[dockTypes.Length];

            // Load font
            UpdateFont();

            // Load window icon
            NativeManager.SetWindowIcon(System.IO.Path.Combine(appDirectory, "resources/icon.png"));

            // Load config
            RecentFiles.LoadRecentConfig();
            Shortcuts.LoadShortcuts();
            Commands.Register();

            // Add controls
            Application.Current.OnCreateMainMenu();

            dockManager = new GUI.Dock.DockManager();
            GUI.Manager.AddControl(dockManager);

            // Default
            effectViewer = new Dock.EffectViwer();
            if (dockManager != null)
            {
                dockManager.Controls.Add(effectViewer);
            }
            else
            {
                AddControl(effectViewer);
            }

            if (LoadWindowConfig(System.IO.Path.Combine(appDirectory, "config.Dock.xml")))
            {
            }
            else
            {
                ResetWindow();
            }

            TextOffsetY = (NativeManager.GetTextLineHeightWithSpacing() - NativeManager.GetTextLineHeight()) / 2;

            Network = new Network(Native);
            Network.Load();

            Command.CommandManager.Changed += OnChanged;

            Core.EffectBehavior.Location.X.OnChanged += OnChanged;
            Core.EffectBehavior.Location.Y.OnChanged += OnChanged;
            Core.EffectBehavior.Location.Z.OnChanged += OnChanged;
            Core.EffectBehavior.Rotation.X.OnChanged += OnChanged;
            Core.EffectBehavior.Rotation.Y.OnChanged += OnChanged;
            Core.EffectBehavior.Rotation.Z.OnChanged += OnChanged;
            Core.EffectBehavior.Scale.X.OnChanged    += OnChanged;
            Core.EffectBehavior.Scale.Y.OnChanged    += OnChanged;
            Core.EffectBehavior.Scale.Z.OnChanged    += OnChanged;

            Core.EffectBehavior.LocationVelocity.X.OnChanged   += OnChanged;
            Core.EffectBehavior.LocationVelocity.Y.OnChanged   += OnChanged;
            Core.EffectBehavior.LocationVelocity.Z.OnChanged   += OnChanged;
            Core.EffectBehavior.RotationVelocity.X.OnChanged   += OnChanged;
            Core.EffectBehavior.RotationVelocity.Y.OnChanged   += OnChanged;
            Core.EffectBehavior.RotationVelocity.Z.OnChanged   += OnChanged;
            Core.EffectBehavior.ScaleVelocity.X.OnChanged      += OnChanged;
            Core.EffectBehavior.ScaleVelocity.Y.OnChanged      += OnChanged;
            Core.EffectBehavior.ScaleVelocity.Z.OnChanged      += OnChanged;
            Core.EffectBehavior.RemovedTime.Infinite.OnChanged += OnChanged;
            Core.EffectBehavior.RemovedTime.Value.OnChanged    += OnChanged;

            Core.EffectBehavior.TargetLocation.X.OnChanged += OnChanged;
            Core.EffectBehavior.TargetLocation.Y.OnChanged += OnChanged;
            Core.EffectBehavior.TargetLocation.Z.OnChanged += OnChanged;

            Core.EffectBehavior.CountX.OnChanged += OnChanged;
            Core.EffectBehavior.CountY.OnChanged += OnChanged;
            Core.EffectBehavior.CountZ.OnChanged += OnChanged;

            Core.EffectBehavior.Distance.OnChanged += OnChanged;

            Core.EffectBehavior.TimeSpan.OnChanged   += OnChanged;
            Core.EffectBehavior.ColorAll.R.OnChanged += OnChanged;
            Core.EffectBehavior.ColorAll.G.OnChanged += OnChanged;
            Core.EffectBehavior.ColorAll.B.OnChanged += OnChanged;
            Core.EffectBehavior.ColorAll.A.OnChanged += OnChanged;

            Core.EffectBehavior.PlaybackSpeed.OnChanged += OnChanged;

            Core.Option.Magnification.OnChanged += OnChanged;
            Core.Option.IsGridShown.OnChanged   += OnChanged;
            Core.Option.GridLength.OnChanged    += OnChanged;
            Core.Option.GridColor.R.OnChanged   += OnChanged;
            Core.Option.GridColor.G.OnChanged   += OnChanged;
            Core.Option.GridColor.B.OnChanged   += OnChanged;
            Core.Option.GridColor.A.OnChanged   += OnChanged;
            Core.Option.FPS.OnChanged           += OnChanged;

            Core.Option.DistortionType.OnChanged += OnChanged;
            Core.Option.Coordinate.OnChanged     += OnChanged;

            Core.Environment.Background.BackgroundColor.R.OnChanged += OnChanged;
            Core.Environment.Background.BackgroundColor.G.OnChanged += OnChanged;
            Core.Environment.Background.BackgroundColor.B.OnChanged += OnChanged;
            Core.Environment.Background.BackgroundColor.A.OnChanged += OnChanged;
            Core.Environment.Background.BackgroundImage.OnChanged   += OnChanged;

            Core.Environment.Ground.IsShown.OnChanged += OnChanged;
            Core.Environment.Ground.Height.OnChanged  += OnChanged;
            Core.Environment.Ground.Extent.OnChanged  += OnChanged;

            Core.Culling.IsShown.OnChanged           += OnChanged;
            Core.Culling.Type.OnChanged              += OnChanged;
            Core.Culling.Sphere.Location.X.OnChanged += OnChanged;
            Core.Culling.Sphere.Location.Y.OnChanged += OnChanged;
            Core.Culling.Sphere.Location.Z.OnChanged += OnChanged;
            Core.Culling.Sphere.Radius.OnChanged     += OnChanged;

            Core.OnAfterLoad += new EventHandler(Core_OnAfterLoad);
            Core.OnAfterNew  += new EventHandler(Core_OnAfterNew);
            Core.OnReload    += new EventHandler(Core_OnReload);

            // Set imgui path
            var entryDirectory = GetEntryDirectory();
            swig.GUIManager.SetIniFilename(entryDirectory + "/imgui.ini");

            // check files
            if (!System.IO.File.Exists(System.IO.Path.Combine(appDirectory, "resources/fonts/GenShinGothic-Monospace-Bold.ttf")))
            {
                ErrorUtils.ThrowFileNotfound();
            }

            if (!System.IO.File.Exists(System.IO.Path.Combine(appDirectory, "resources/icons/MenuIcons.png")))
            {
                ErrorUtils.ThrowFileNotfound();
            }

            return(true);
        }
コード例 #5
0
        public static bool Initialize(int width, int height, swig.DeviceType deviceType)
        {
            var mgr = new swig.GUIManager();

            if (mgr.Initialize("Effekseer", 1280, 720, deviceType, false))
            {
            }
            else
            {
                mgr.Dispose();
                mgr = null;
                return(false);
            }

            Native = new swig.Native();

            Viewer = new Viewer(Native);
            if (!Viewer.ShowViewer(mgr.GetNativeHandle(), 1280, 720, deviceType))
            {
                mgr.Dispose();
                mgr = null;
                return(false);
            }

            mgr.InitializeGUI(Native);

            NativeManager = mgr;

            Images.Load(GUI.Manager.Native);

            guiManagerCallback = new GUIManagerCallback();
            NativeManager.SetCallback(guiManagerCallback);

            panels = new Dock.DockPanel[dockTypes.Length];

            var appDirectory = Manager.GetEntryDirectory();

            // Load font
            UpdateFontSize();

            // Load window icon
            NativeManager.SetWindowIcon(System.IO.Path.Combine(appDirectory, "resources/icon.png"));

            // Load config
            RecentFiles.LoadRecentConfig();
            Shortcuts.LoadShortcuts();
            Commands.Register();

            // Add controls
            var mainMenu = new GUI.Menu.MainMenu();

            GUI.Manager.AddControl(mainMenu);

            dockManager = new GUI.Dock.DockManager();
            GUI.Manager.AddControl(dockManager);

            // Default
            effectViewer = new Dock.EffectViwer();
            if (dockManager != null)
            {
                effectViewer.InitialDockSlot = swig.DockSlot.None;
                dockManager.Controls.Add(effectViewer);
            }
            else
            {
                AddControl(effectViewer);
            }

            if (LoadWindowConfig(System.IO.Path.Combine(appDirectory, "config.Dock.xml")))
            {
                Manager.NativeManager.LoadDock(System.IO.Path.Combine(appDirectory, "config.Dock.config"));
            }
            else
            {
                ResetWindowActually();
            }

            TextOffsetY = (NativeManager.GetTextLineHeightWithSpacing() - NativeManager.GetTextLineHeight()) / 2;

            Network = new Network(Native);
            Network.Load();

            Command.CommandManager.Changed += OnChanged;

            Core.EffectBehavior.Location.X.OnChanged += OnChanged;
            Core.EffectBehavior.Location.Y.OnChanged += OnChanged;
            Core.EffectBehavior.Location.Z.OnChanged += OnChanged;
            Core.EffectBehavior.Rotation.X.OnChanged += OnChanged;
            Core.EffectBehavior.Rotation.Y.OnChanged += OnChanged;
            Core.EffectBehavior.Rotation.Z.OnChanged += OnChanged;
            Core.EffectBehavior.Scale.X.OnChanged    += OnChanged;
            Core.EffectBehavior.Scale.Y.OnChanged    += OnChanged;
            Core.EffectBehavior.Scale.Z.OnChanged    += OnChanged;

            Core.EffectBehavior.LocationVelocity.X.OnChanged   += OnChanged;
            Core.EffectBehavior.LocationVelocity.Y.OnChanged   += OnChanged;
            Core.EffectBehavior.LocationVelocity.Z.OnChanged   += OnChanged;
            Core.EffectBehavior.RotationVelocity.X.OnChanged   += OnChanged;
            Core.EffectBehavior.RotationVelocity.Y.OnChanged   += OnChanged;
            Core.EffectBehavior.RotationVelocity.Z.OnChanged   += OnChanged;
            Core.EffectBehavior.ScaleVelocity.X.OnChanged      += OnChanged;
            Core.EffectBehavior.ScaleVelocity.Y.OnChanged      += OnChanged;
            Core.EffectBehavior.ScaleVelocity.Z.OnChanged      += OnChanged;
            Core.EffectBehavior.RemovedTime.Infinite.OnChanged += OnChanged;
            Core.EffectBehavior.RemovedTime.Value.OnChanged    += OnChanged;

            Core.EffectBehavior.TargetLocation.X.OnChanged += OnChanged;
            Core.EffectBehavior.TargetLocation.Y.OnChanged += OnChanged;
            Core.EffectBehavior.TargetLocation.Z.OnChanged += OnChanged;

            Core.EffectBehavior.CountX.OnChanged += OnChanged;
            Core.EffectBehavior.CountY.OnChanged += OnChanged;
            Core.EffectBehavior.CountZ.OnChanged += OnChanged;

            Core.EffectBehavior.Distance.OnChanged += OnChanged;

            Core.EffectBehavior.TimeSpan.OnChanged   += OnChanged;
            Core.EffectBehavior.ColorAll.R.OnChanged += OnChanged;
            Core.EffectBehavior.ColorAll.G.OnChanged += OnChanged;
            Core.EffectBehavior.ColorAll.B.OnChanged += OnChanged;
            Core.EffectBehavior.ColorAll.A.OnChanged += OnChanged;

            Core.Option.Magnification.OnChanged += OnChanged;
            Core.Option.IsGridShown.OnChanged   += OnChanged;
            Core.Option.GridLength.OnChanged    += OnChanged;
            Core.Option.GridColor.R.OnChanged   += OnChanged;
            Core.Option.GridColor.G.OnChanged   += OnChanged;
            Core.Option.GridColor.B.OnChanged   += OnChanged;
            Core.Option.GridColor.A.OnChanged   += OnChanged;
            Core.Option.FPS.OnChanged           += OnChanged;

            Core.Option.DistortionType.OnChanged += OnChanged;
            Core.Option.Coordinate.OnChanged     += OnChanged;

            Core.Environment.Background.BackgroundColor.R.OnChanged += OnChanged;
            Core.Environment.Background.BackgroundColor.G.OnChanged += OnChanged;
            Core.Environment.Background.BackgroundColor.B.OnChanged += OnChanged;
            Core.Environment.Background.BackgroundColor.A.OnChanged += OnChanged;
            Core.Environment.Background.BackgroundImage.OnChanged   += OnChanged;

            Core.Culling.IsShown.OnChanged           += OnChanged;
            Core.Culling.Type.OnChanged              += OnChanged;
            Core.Culling.Sphere.Location.X.OnChanged += OnChanged;
            Core.Culling.Sphere.Location.Y.OnChanged += OnChanged;
            Core.Culling.Sphere.Location.Z.OnChanged += OnChanged;
            Core.Culling.Sphere.Radius.OnChanged     += OnChanged;

            Core.OnAfterLoad += new EventHandler(Core_OnAfterLoad);
            Core.OnAfterNew  += new EventHandler(Core_OnAfterNew);
            Core.OnReload    += new EventHandler(Core_OnReload);

            // Set imgui path
            var entryDirectory = GetEntryDirectory();

            swig.GUIManager.SetIniFilename(entryDirectory + "/imgui.ini");

            // check files
            if (!System.IO.File.Exists(System.IO.Path.Combine(appDirectory, "resources/fonts/GenShinGothic-Monospace-Bold.ttf")))
            {
                if (Core.Option.GuiLanguage.Value == Language.Japanese)
                {
                    throw new Exception("リソースファイルを更新してください。Script/setup.pyを呼ぶか、cmakeを使用し、ResourceDataをリビルドしてください。");
                }
                else
                {
                    throw new Exception("Please update resource files!. call Script/setup.py or use cmake and rebuild ResourceData.");
                }
            }

            return(true);
        }