コード例 #1
0
        public Game()
        {
            Settings settings = SettingsManager.instance;

            Log.Info("Initializing FFmpeg...");
            FFmpegHelper.Init();

            Log.Info("Initializing Audio...");
            audio = new AudioEngine(null, settings.audio.driver,
                                    (int)settings.audio.sampleRate, (int)settings.audio.bufferLength,
                                    settings.audio.resampleQuality);
            audio.SetVolume(Math.Min(settings.audio.volume, 100) / 100.0f);
            Log.Info("Audio driver: " + audio.audioDriver.ToString());

            if (settings.outputMode != OutputMode.Render)
            {
                //SDL.SDL_version sdlVersion;
                //SDL.SDL_VERSION(out sdlVersion);

                Log.Info("Initializing SDL video subsystem...");
                if (SDL.SDL_InitSubSystem(SDL.SDL_INIT_VIDEO) != 0)
                {
                    throw new ApplicationException("Failed to initialize video subsystem: " + SDL.SDL_GetError());
                }

                int display = 0;
                SDL.SDL_DisplayMode displayMode;

                if (SDL.SDL_GetCurrentDisplayMode(display, out displayMode) != 0)
                {
                    throw new ApplicationException("SDL_GetCurrentDisplayMode failed: " + SDL.SDL_GetError());
                }

                RendererFlags rendererFlags = RendererFlags.None;
                int           width         = (int)settings.video.width;
                int           height        = (int)settings.video.height;

                if (settings.video.vsync)
                {
                    rendererFlags |= RendererFlags.Vsync;
                }

                if (settings.video.mode == VideoMode.Fullscreen)
                {
                    rendererFlags |= RendererFlags.Fullscreen;
                }

                if (width * height == 0 || width > displayMode.w || height > displayMode.h)
                {
                    width  = displayMode.w;
                    height = displayMode.h;
                }

                Log.Info("Initializing Game window...");
                string windowTitle = string.Format("{0} {1} ({2}-bit)", Program.name, Program.versionDisplay, (IntPtr.Size * 8).ToString());
                window = new GameWindow(windowTitle, width, height, settings.video.mode);

                Log.Info("Initializing Renderer...");
                renderer = new Renderer(window, width, height, rendererFlags, settings.video.renderer);
                Log.Info("Renderer backend: " + renderer.rendererType.ToString());

                Log.Info("Initializing Input...");
                inputManager = new InputManager();

                Log.Info("Loading debug font...");
                debugFont = new Font(debugFontPath, 24, FontStyle.Normal, true);

                if (settings.engine.tickrate != 0)
                {
                    updateInterval = Math.Max(0.0, 1.0 / settings.engine.tickrate);
                }

                if (settings.video.fpsLimit == 0)
                {
                    renderInterval = 0.0;
                }
                else if (settings.video.fpsLimit == -1)
                {
                    renderInterval = 1.0 / displayMode.refresh_rate;
                }
                else
                {
                    renderInterval = Math.Max(0.0, 1.0 / settings.video.fpsLimit);
                }
            }


            Log.Clear();

            if (settings.outputMode == OutputMode.Render)
            {
                sceneManager.Push(new RenderAudioScene(this, settings.playPath, settings.outputPath));
            }
            else if (settings.outputMode == OutputMode.DumpTimestamps)
            {
                sceneManager.Push(new DumpTimestampsScene(this, settings.playPath, settings.outputPath));
            }
            else if (settings.playPath != null)
            {
                sceneManager.Push(new GameplayScene(this, settings.playPath));
            }
            else
            {
                sceneManager.Push(new FileSelectScene(this));
            }
        }