using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace pcd_g1
{
	static class Program
	{
		/// <summary>
		/// アプリケーションのメイン エントリ ポイントです。
		/// </summary>
		[STAThread]
		static void Main()
		{
			Application.EnableVisualStyles();
			Application.SetCompatibleTextRenderingDefault(false);

#if !DEBUG
			var act = new ActivationDialog();
			if (act.ShowDialog() != System.Windows.Forms.DialogResult.OK)
			{
				return;
			}
#endif
			

			Debug dbg = new Debug();
#if DEBUG
			dbg.Show();
#endif

			string fname = StageManager.SaveFileName + ".testing";
			try
			{
				System.IO.File.WriteAllText(fname, "File System Checking...");
			}
			catch(Exception)
			{
				if (MessageBox.Show("アプリケーション ルートへの書き込みができません。\nセーブデータの作成先をマイドキュメントに設定しますか?", "確認", MessageBoxButtons.YesNo) == DialogResult.Yes)
				{
					StageManager.SaveFileName = System.Environment.GetFolderPath(Environment.SpecialFolder.Personal) + @"\pcd-g1.save.dat";
				}
			}
			finally
			{
				try
				{
					System.IO.File.Delete(fname);
				}
				catch (Exception)
				{

				}
			}

			MainForm fm = new MainForm();
			fm.Show();
			fm.start();
			loop(fm);
		}

		const float INTERVAL = 1000f / 60f;
		static void loop(MainForm fm)
		{
			double time, next;
			next = System.Environment.TickCount;
			while(fm.Created)
			{
				time = System.Environment.TickCount;
				if (time >= next)
				{
					next += INTERVAL;
					fm.Tick(next <= time);
					if (next + (next - time) * 20 <= time)
					{
						next = time + INTERVAL;
					}
				}
				Application.DoEvents();
			}
		}
	}
}
