OSDN Git Service

DeviceConstantConverter.KeyToKeys[], DeviceConstantConverter.DIKtoKey[] を実装。
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / 全体 / CDTXMania.cs
index f71f4f7..4ddd7fc 100644 (file)
@@ -5,17 +5,17 @@ using System.Text;
 using System.Windows.Forms;\r
 using System.Drawing;\r
 using System.Diagnostics;\r
-using System.Runtime.InteropServices;\r
 using System.IO;\r
 using System.Threading;\r
-using System.Runtime.Serialization.Formatters.Binary;\r
-using SlimDX;\r
-using SlimDX.Direct3D9;\r
+using SharpDX;\r
+using SharpDX.Direct3D9;\r
 using FDK;\r
 using SampleFramework;\r
 using System.Runtime.Serialization;\r
 using System.Xml;\r
-using System.Web;\r
+\r
+using Point = System.Drawing.Point;\r
+using Color = System.Drawing.Color;\r
 \r
 namespace DTXMania\r
 {\r
@@ -23,7 +23,7 @@ namespace DTXMania
        {\r
                // プロパティ\r
                #region [ properties ]\r
-               public static readonly string VERSION = "106(160822)";\r
+               public static readonly string VERSION = "108+(170506)";\r
                public static readonly string SLIMDXDLL = "c_net20x86_Jun2010";\r
                public static readonly string D3DXDLL = "d3dx9_43.dll";     // June 2010\r
                                                                                                                                                                                                                                                                //public static readonly string D3DXDLL = "d3dx9_42.dll";       // February 2010\r
@@ -222,6 +222,17 @@ namespace DTXMania
 \r
                        #region[座標値読み込み]\r
                        Coordinates = new Coordinates.CCoordinates();\r
+                       UpdateCoordinates();\r
+                       //Coordinates = (DTXMania.Coordinates.CCoordinates) CDTXMania.DeserializeXML( strEXEのあるフォルダ + "Coordinates.xml", typeof( DTXMania.Coordinates.CCoordinates ) );\r
+                       //if ( Coordinates == null )\r
+                       //{\r
+                       //      if ( File.Exists( strEXEのあるフォルダ + "Coordinates.xml" ) )\r
+                       //      {\r
+                       //              Trace.TraceInformation( "Coordinates.xmlファイルは存在します。" );\r
+                       //      }\r
+                       //      Trace.TraceInformation( "Coordiantes.xmlファイルの読み込みができませんでした。無視して進めます。" );\r
+                       //      Coordinates = new Coordinates.CCoordinates();\r
+                       //}\r
                        #endregion\r
 \r
                        #region [ ログ出力開始 ]\r
@@ -329,6 +340,7 @@ namespace DTXMania
                                        }\r
 \r
                                        CDTXMania.Instance.ConfigIni.bFullScreen.Value = false;\r
+                                       CDTXMania.Instance.ConfigIni.rcWindow_backup = CDTXMania.Instance.ConfigIni.rcWindow;           // #36612 2016.9.12 yyagi\r
                                        CDTXMania.Instance.ConfigIni.rcWindow.W = CDTXMania.Instance.ConfigIni.rcViewerWindow.W;\r
                                        CDTXMania.Instance.ConfigIni.rcWindow.H = CDTXMania.Instance.ConfigIni.rcViewerWindow.H;\r
                                        CDTXMania.Instance.ConfigIni.rcWindow.X = CDTXMania.Instance.ConfigIni.rcViewerWindow.X;\r
@@ -364,6 +376,10 @@ namespace DTXMania
                                        Trace.TraceInformation("コンパクトモードで起動します。[{0}]", strコンパクトモードファイル);\r
                                }\r
                        }\r
+                       else\r
+                       {\r
+                               Trace.TraceInformation( "通常モードで起動します。" );\r
+                       }\r
                        #endregion\r
 \r
                        #region [ Input管理 の初期化 ]\r
@@ -427,8 +443,8 @@ namespace DTXMania
                        base.Window.Location = new Point(ConfigIni.rcWindow.X, ConfigIni.rcWindow.Y);\r
                        // 事前にDTXVmodeの実体を作っておくこと\r
                        base.Window.Text = this.strWindowTitle;\r
-                       base.Window.StartPosition = FormStartPosition.Manual;\r
-                       base.Window.Location = new Point(ConfigIni.rcWindow.X, ConfigIni.rcWindow.Y);\r
+                       //base.Window.StartPosition = FormStartPosition.Manual;\r
+                       //base.Window.Location = new Point(ConfigIni.rcWindow.X, ConfigIni.rcWindow.Y);\r
 \r
                        // #34510 yyagi 2010.10.31 to change window size got from Config.ini\r
                        base.Window.ClientSize = new Size(ConfigIni.rcWindow.W, ConfigIni.rcWindow.H);\r
@@ -1068,7 +1084,7 @@ namespace DTXMania
                        #endregion\r
 \r
                        this.Device.BeginScene();\r
-                       this.Device.Clear(ClearFlags.ZBuffer | ClearFlags.Target, Color.Black, 1f, 0);\r
+                       this.Device.Clear(ClearFlags.ZBuffer | ClearFlags.Target, SharpDX.Color.Black, 1f, 0);\r
 \r
                        if (r現在のステージ != null)\r
                        {\r
@@ -1937,7 +1953,7 @@ namespace DTXMania
                        }\r
                        #endregion\r
 \r
-                       GC.Collect( 0, GCCollectionMode.Optimized, false );             // Rel105で処理が重くなっていることに対する、暫定処置。\r
+                       //GC.Collect( 0, GCCollectionMode.Optimized, false );           // Rel105で処理が重くなっていることに対する、暫定処置。\r
                                                                                                                                        // 重くなっている原因に対する適切な処置をして、処理が104程度に軽くなったら、\r
                                                                                                                                        // この暫定処置は削除します。\r
                }\r
@@ -1961,8 +1977,9 @@ namespace DTXMania
                                        }\r
                                }\r
                        }\r
-                       catch\r
+                       catch (Exception e)\r
                        {\r
+                               Trace.TraceWarning( e.Message );\r
                                ret = null;\r
                        }\r
                        return ret;\r
@@ -1980,7 +1997,7 @@ namespace DTXMania
                        settings.Indent = true;\r
                        settings.NewLineChars = Environment.NewLine;\r
                        settings.Encoding = new System.Text.UTF8Encoding(false);\r
-                       using (XmlWriter xw = XmlWriter.Create(xmlpath, settings))\r
+                       using ( XmlWriter xw = XmlWriter.Create( new FileStreamSSD( xmlpath ), settings ) )\r
                        {\r
                                DataContractSerializer serializer = new DataContractSerializer(obj.GetType());\r
                                serializer.WriteObject(xw, obj);\r
@@ -1989,7 +2006,6 @@ namespace DTXMania
 \r
                public void SaveConfig()\r
                {\r
-\r
                        #region [ Skinパスの絶対パス→相対パス変換 ]\r
                        string _strSystemSkinSubfolderPath = ConfigIni.strSystemSkinSubfolderPath.Value;\r
                        Uri uriRoot = new Uri( System.IO.Path.Combine( this.strEXEのあるフォルダ, "System" + System.IO.Path.DirectorySeparatorChar ) );\r
@@ -2046,6 +2062,121 @@ namespace DTXMania
                                }\r
                        }\r
                }\r
+               /// <summary>\r
+               /// 座標値を読み込む。Coordinates メンバ初期化後いつ呼び出しても構わない。\r
+               /// </summary>\r
+               public void UpdateCoordinates()\r
+               {\r
+                       string coordXml = strEXEのあるフォルダ + "Coordinates.xml";\r
\r
+                       // デシリアライズ\r
+                       if (File.Exists(coordXml))\r
+                       {\r
+                               using (XmlReader xr = XmlReader.Create(coordXml))\r
+                               {\r
+                                       DataContractSerializer serializer = new DataContractSerializer(typeof(Coordinates.CCoordinates));\r
+                                       try\r
+                                       {\r
+                                               Coordinates = (Coordinates.CCoordinates) serializer.ReadObject( xr );\r
+                                       }\r
+                                       catch (SerializationException e)\r
+                                       {\r
+                                               Trace.TraceWarning( "Rel107以前の古いフォーマットのCoordinates.xmlが読み込まれました。無視します。\n" + e.Message );\r
+                                       }\r
+                               }\r
+                       }\r
+                       // シリアライズ\r
+                       XmlWriterSettings settings = new XmlWriterSettings();\r
+                       settings.IndentChars = "  ";\r
+                       settings.Indent = true;\r
+                       settings.NewLineChars = Environment.NewLine;\r
+                       settings.Encoding = new System.Text.UTF8Encoding( false );\r
+                       using ( XmlWriter xw = XmlTextWriter.Create( coordXml, settings ) )\r
+                       {\r
+                               //XmlSerializerNamespaces ns = new XmlSerializerNamespaces();\r
+                               //ns.Add( String.Empty, String.Empty );\r
+\r
+                               //StreamWriter sw = new StreamWriter( "test2.xml", false, Encoding.UTF8 );\r
+                               //serializer.Serialize( sw, item, ns );\r
+                               //sw.Close\r
+\r
+                               DataContractSerializer serializer = new DataContractSerializer( typeof( Coordinates.CCoordinates ) );\r
+                               serializer.WriteObject( xw, Coordinates );\r
+                               //serializer.WriteStartObject( xw, Coordinates );\r
+                               //xw.WriteAttributeString( "xmlns", "d1p1", "http://www.w3.org/2000/xmlns/",\r
+                               //      "http://schemas.microsoft.com/2003/10/Serialization/" );\r
+                               //serializer.WriteObjectContent( xw, Coordinates );\r
+                               //serializer.WriteEndObject( xw );\r
+                       }\r
+\r
+                       // もう一度デシリアライズ\r
+                       if (File.Exists(coordXml))\r
+                       {\r
+                               using (XmlReader xr = XmlReader.Create(coordXml))\r
+                               {\r
+                                       DataContractSerializer serializer = new DataContractSerializer(typeof(Coordinates.CCoordinates));\r
+                                       Coordinates = (Coordinates.CCoordinates)serializer.ReadObject(xr);\r
+                               }\r
+                       }\r
+               }\r
+\r
+\r
+               /// <summary>\r
+               /// 保存するxmlからnamespaceを削除するためのXmlTextWriter\r
+               /// </summary>\r
+               //public class MyXmlTextWriter : XmlTextWriter\r
+               //{\r
+               //      private bool _ignoreAttr = false;\r
+\r
+               //      public MyXmlTextWriter( TextWriter w  )\r
+               //              : base( w )\r
+               //      {\r
+               //              Debug.WriteLine( "create" );\r
+               //      }\r
+\r
+               //      public override string LookupPrefix( string ns )\r
+               //      {\r
+               //              Debug.WriteLine( "luprefix" );\r
+               //              return string.Empty;\r
+               //      }\r
+\r
+               //      public override void WriteStartAttribute( string prefix, string localName, string ns )\r
+               //      {\r
+               //              Debug.WriteLine( "writestartattribute" );\r
+               //              if ( String.Compare( prefix, "xmlns", true ) == 0 )\r
+               //              {\r
+               //                      Debug.WriteLine( "[!]" );\r
+               //                      this._ignoreAttr = true;\r
+               //                      return;\r
+               //              }\r
+               //      }\r
+\r
+               //      public override void WriteEndAttribute()\r
+               //      {\r
+               //              if ( this._ignoreAttr )\r
+               //              {\r
+               //                      this._ignoreAttr = false;\r
+               //                      return;\r
+               //              }\r
+               //              base.WriteEndAttribute();\r
+               //      }\r
+\r
+               //      public override void WriteString( string text )\r
+               //      {\r
+               //              Debug.WriteLine( "ws" );\r
+               //              if ( String.Compare( text, "http://www.w3.org/2001/XMLSchema-instance", true ) == 0 )\r
+               //              {\r
+               //                      return;\r
+               //              }\r
+               //              base.WriteString( text );\r
+               //      }\r
+\r
+               //      public override void WriteStartElement( string prefix, string localName, string ns )\r
+               //      {\r
+               //              Debug.WriteLine( "wse" );\r
+               //              base.WriteStartElement( null, localName, null );\r
+               //      }\r
+               //}\r
 \r
                public void ShowWindowTitleWithSoundType()\r
                {\r
@@ -2071,7 +2202,7 @@ namespace DTXMania
                        {\r
                                if (DTXVmode.Enabled)\r
                                {\r
-                                       return "DTXViewer release " + VERSION;\r
+                                       return "DTXMViewer release " + VERSION;\r
                                }\r
                                else\r
                                {\r
@@ -2130,6 +2261,11 @@ namespace DTXMania
                                }\r
                                //---------------------\r
                                #endregion\r
+\r
+                               #region [ 選曲ステージの終了処理 ]\r
+                               stage選曲.On非活性化();\r
+                               #endregion\r
+\r
                                #region [ プラグインの終了処理 ]\r
                                //---------------------\r
                                if (this.listプラグイン != null && this.listプラグイン.Count > 0)\r
@@ -2354,7 +2490,7 @@ namespace DTXMania
                                                        ConfigIni.SwapGuitarBassInfos_PlaySettings();\r
                                        }\r
                                 */\r
-                               string str = strEXEのあるフォルダ + "Config.ini";\r
+                               string str = strEXEのあるフォルダ + "Config.xml";\r
                                Trace.Indent();\r
                                try\r
                                {\r
@@ -2402,7 +2538,12 @@ namespace DTXMania
                                }\r
                                //---------------------\r
                                #endregion\r
-                               Trace.TraceInformation("アプリケーションの終了処理を完了しました。");\r
+                               #region [ DirectXの終了処理 ]\r
+                               //---------------------\r
+                               base.GraphicsDeviceManager.Dispose();\r
+                               //---------------------\r
+                               #endregion\r
+                               Trace.TraceInformation( "アプリケーションの終了処理を完了しました。" );\r
 \r
 \r
                                this.b終了処理完了済み = true;\r
@@ -2473,9 +2614,9 @@ namespace DTXMania
                }\r
                private void tガベージコレクションを実行する()\r
                {\r
-                       GC.Collect();\r
+                       GC.Collect(0, GCCollectionMode.Optimized, true );\r
                        GC.WaitForPendingFinalizers();\r
-                       GC.Collect();\r
+                       GC.Collect(0, GCCollectionMode.Forced, true );\r
                        GC.WaitForPendingFinalizers();\r
                }\r
                private void tプラグイン検索と生成()\r
@@ -2618,14 +2759,17 @@ namespace DTXMania
                        {\r
                                for (int i = 0; i < CConfigXml.AssignableCodes; i++)\r
                                {\r
-                                       if (ConfigIni.KeyAssign[EPad.Capture][i].コード > 0 &&\r
-                                                        e.KeyCode == DeviceConstantConverter.KeyToKeyCode((SlimDX.DirectInput.Key)ConfigIni.KeyAssign[EPad.Capture][i].コード))\r
+                                       var captureCode = (SlimDX.DirectInput.Key) ConfigIni.KeyAssign[ EPad.Capture ][ i ].コード;\r
+\r
+                                       if( (int) captureCode > 0 &&\r
+                                               DeviceConstantConverter.KeyToKeys.ContainsKey( captureCode ) &&\r
+                                               e.KeyCode == DeviceConstantConverter.KeyToKeys[ captureCode ] )\r
                                        {\r
                                                // Debug.WriteLine( "capture: " + string.Format( "{0:2x}", (int) e.KeyCode ) + " " + (int) e.KeyCode );\r
                                                string strFullPath =\r
-                                                                Path.Combine(CDTXMania.Instance.strEXEのあるフォルダ, "Capture_img");\r
-                                               strFullPath = Path.Combine(strFullPath, DateTime.Now.ToString("yyyyMMddHHmmss") + ".png");\r
-                                               SaveResultScreen(strFullPath);\r
+                                                                Path.Combine( CDTXMania.Instance.strEXEのあるフォルダ, "Capture_img" );\r
+                                               strFullPath = Path.Combine( strFullPath, DateTime.Now.ToString( "yyyyMMddHHmmss" ) + ".png" );\r
+                                               SaveResultScreen( strFullPath );\r
                                        }\r
                                }\r
                        }\r