using System;
using System.Collections.Generic;
using System.Text;

namespace StarEngine.Core
{
    /// <summary>
    /// ゲームを実行する環境です。
    /// </summary>
    public interface IGameEnvironment
    {
        /// <summary>
        /// 入力機器を取得します。
        /// </summary>
        IInput Input { get; }

        /// <summary>
        /// 描画対象となる画面を取得します。
        /// </summary>
        IScreen Screen { get; }

        /// <summary>
        /// オーディオを取得します。
        /// </summary>
        IAudio Audio { get; }

        /// <summary>
        /// 使用するテクスチャファクトリを取得します。
        /// </summary>
        ITextureFactory TextureFactory { get; }

        /// <summary>
        /// ゲームを実行します。
        /// </summary>
        /// <param name="game">実行するゲーム。</param>
        void Run(IGame game);

        /// <summary>
        /// ゲームが実行中かどうかを示す値を取得します。
        /// </summary>
        bool IsRunning { get; }

        /// <summary>
        /// ゲームを終了します。
        /// </summary>
        void Terminate();

        /// <summary>
        /// 実際の FPS を取得します。
        /// </summary>
        double RealFps { get; }

        /// <summary>
        /// タイトルを設定します。
        /// </summary>
        /// <remarks>
        /// ウィンドウの上部バーに表示する、などの目的に使用されます。
        /// Game の Title とは異なってもかまいません。
        /// </remarks>
        string Title { set; }

        /// <summary>
        /// ウィンドウタイプを取得します。
        /// </summary>
        WindowType WindowType { get; }
    }
}
