--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\r
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">\r
+ <dependency>\r
+ <dependentAssembly>\r
+ <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>\r
+ </dependentAssembly>\r
+ </dependency>\r
+</assembly>
\ No newline at end of file
--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 10.00\r
+# Visual C# Express 2008\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DTXManiaプロジェクト", "DTXManiaプロジェクト.csproj", "{81BEC512-8074-4BD1-8A3C-AC73BC7BF846}"\r
+EndProject\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FDK17", "..\FDK17プロジェクト\FDK17.csproj", "{BCD40908-F3E2-4707-BFAA-1DD99DF6357D}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|x86 = Debug|x86\r
+ Release|x86 = Release|x86\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {81BEC512-8074-4BD1-8A3C-AC73BC7BF846}.Debug|x86.ActiveCfg = Debug|x86\r
+ {81BEC512-8074-4BD1-8A3C-AC73BC7BF846}.Debug|x86.Build.0 = Debug|x86\r
+ {81BEC512-8074-4BD1-8A3C-AC73BC7BF846}.Release|x86.ActiveCfg = Release|x86\r
+ {81BEC512-8074-4BD1-8A3C-AC73BC7BF846}.Release|x86.Build.0 = Release|x86\r
+ {BCD40908-F3E2-4707-BFAA-1DD99DF6357D}.Debug|x86.ActiveCfg = Debug|x86\r
+ {BCD40908-F3E2-4707-BFAA-1DD99DF6357D}.Debug|x86.Build.0 = Debug|x86\r
+ {BCD40908-F3E2-4707-BFAA-1DD99DF6357D}.Release|x86.ActiveCfg = Release|x86\r
+ {BCD40908-F3E2-4707-BFAA-1DD99DF6357D}.Release|x86.Build.0 = Release|x86\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+ <PropertyGroup>\r
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>\r
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>\r
+ <ProductVersion>9.0.30729</ProductVersion>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectGuid>{81BEC512-8074-4BD1-8A3C-AC73BC7BF846}</ProjectGuid>\r
+ <OutputType>WinExe</OutputType>\r
+ <AppDesignerFolder>Properties</AppDesignerFolder>\r
+ <RootNamespace>DTXMania</RootNamespace>\r
+ <AssemblyName>DTXManiaGR</AssemblyName>\r
+ <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>\r
+ <FileAlignment>512</FileAlignment>\r
+ <TargetFrameworkSubset>\r
+ </TargetFrameworkSubset>\r
+ <ApplicationIcon>dtx.ico</ApplicationIcon>\r
+ <PublishUrl>publish\</PublishUrl>\r
+ <Install>true</Install>\r
+ <InstallFrom>Disk</InstallFrom>\r
+ <UpdateEnabled>false</UpdateEnabled>\r
+ <UpdateMode>Foreground</UpdateMode>\r
+ <UpdateInterval>7</UpdateInterval>\r
+ <UpdateIntervalUnits>Days</UpdateIntervalUnits>\r
+ <UpdatePeriodically>false</UpdatePeriodically>\r
+ <UpdateRequired>false</UpdateRequired>\r
+ <MapFileExtensions>true</MapFileExtensions>\r
+ <ApplicationRevision>0</ApplicationRevision>\r
+ <ApplicationVersion>1.0.0.%2a</ApplicationVersion>\r
+ <IsWebBootstrapper>false</IsWebBootstrapper>\r
+ <UseApplicationTrust>false</UseApplicationTrust>\r
+ <BootstrapperEnabled>true</BootstrapperEnabled>\r
+ <SignAssembly>false</SignAssembly>\r
+ <AssemblyOriginatorKeyFile>\r
+ </AssemblyOriginatorKeyFile>\r
+ <RunPostBuildEvent>OnOutputUpdated</RunPostBuildEvent>\r
+ <ApplicationManifest>DTXManiaGR.exe.x86.manifest</ApplicationManifest>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">\r
+ <DebugSymbols>true</DebugSymbols>\r
+ <OutputPath>bin\x86\Debug\</OutputPath>\r
+ <DefineConstants>DEBUG;TRACE</DefineConstants>\r
+ <DebugType>full</DebugType>\r
+ <PlatformTarget>x86</PlatformTarget>\r
+ <ErrorReport>prompt</ErrorReport>\r
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\r
+ <NoWarn>0219</NoWarn>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">\r
+ <OutputPath>bin\x86\Release\</OutputPath>\r
+ <DefineConstants>TRACE</DefineConstants>\r
+ <Optimize>true</Optimize>\r
+ <DebugType>pdbonly</DebugType>\r
+ <PlatformTarget>x86</PlatformTarget>\r
+ <ErrorReport>prompt</ErrorReport>\r
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\r
+ <NoWarn>0219</NoWarn>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Reference Include="SlimDXc_net20x86_Jun2010, Version=1002.0.10.43, Culture=neutral, PublicKeyToken=bd5d7f5e586685f5, processorArchitecture=x86">\r
+ <SpecificVersion>False</SpecificVersion>\r
+ <HintPath>..\実行時フォルダ\SlimDXc_net20x86_Jun2010.dll</HintPath>\r
+ </Reference>\r
+ <Reference Include="System" />\r
+ <Reference Include="System.Data" />\r
+ <Reference Include="System.Drawing" />\r
+ <Reference Include="System.Windows.Forms" />\r
+ <Reference Include="System.Xml" />\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <Compile Include="Properties\AssemblyInfo.cs" />\r
+ <EmbeddedResource Include="Properties\Resources.resx">\r
+ <Generator>ResXFileCodeGenerator</Generator>\r
+ <LastGenOutput>Resources.Designer.cs</LastGenOutput>\r
+ <SubType>Designer</SubType>\r
+ </EmbeddedResource>\r
+ <Compile Include="Properties\Resources.Designer.cs">\r
+ <AutoGen>True</AutoGen>\r
+ <DependentUpon>Resources.resx</DependentUpon>\r
+ <DesignTime>True</DesignTime>\r
+ </Compile>\r
+ <None Include="app.config" />\r
+ <None Include="DTXManiaGR.exe.x86.manifest" />\r
+ <None Include="Properties\Settings.settings">\r
+ <Generator>SettingsSingleFileGenerator</Generator>\r
+ <LastGenOutput>Settings.Designer.cs</LastGenOutput>\r
+ </None>\r
+ <Compile Include="Properties\Settings.Designer.cs">\r
+ <AutoGen>True</AutoGen>\r
+ <DependentUpon>Settings.settings</DependentUpon>\r
+ <DesignTimeSharedInput>True</DesignTimeSharedInput>\r
+ </Compile>\r
+ <Compile Include="コード\アイテム\CItemBase.cs" />\r
+ <Compile Include="コード\アイテム\CItemInteger.cs" />\r
+ <Compile Include="コード\アイテム\CItemList.cs" />\r
+ <Compile Include="コード\アイテム\CItemThreeState.cs" />\r
+ <Compile Include="コード\アイテム\CItemToggle.cs" />\r
+ <Compile Include="コード\スコア、曲\CBoxDef.cs" />\r
+ <Compile Include="コード\スコア、曲\CDTX.cs" />\r
+ <Compile Include="コード\スコア、曲\CScoreIni.cs" />\r
+ <Compile Include="コード\スコア、曲\CSetDef.cs" />\r
+ <Compile Include="コード\スコア、曲\CSong管理.cs" />\r
+ <Compile Include="コード\スコア、曲\Cスコア.cs" />\r
+ <Compile Include="コード\スコア、曲\C曲リストノード.cs" />\r
+ <Compile Include="コード\ステージ\01.起動\CStage起動.cs" />\r
+ <Compile Include="コード\ステージ\02.タイトル\CStageタイトル.cs" />\r
+ <Compile Include="コード\ステージ\03.オプション\CActOptionList.cs" />\r
+ <Compile Include="コード\ステージ\03.オプション\CStageオプション.cs" />\r
+ <Compile Include="コード\ステージ\04.コンフィグ\CActConfigKeyAssign.cs" />\r
+ <Compile Include="コード\ステージ\04.コンフィグ\CActConfigList.cs" />\r
+ <Compile Include="コード\ステージ\04.コンフィグ\CStageコンフィグ.cs" />\r
+ <Compile Include="コード\ステージ\05.選曲\CActSelectArtistComment.cs" />\r
+ <Compile Include="コード\ステージ\05.選曲\CActSelectInformation.cs" />\r
+ <Compile Include="コード\ステージ\05.選曲\CActSelectPreimageパネル.cs" />\r
+ <Compile Include="コード\ステージ\05.選曲\CActSelectPresound.cs" />\r
+ <Compile Include="コード\ステージ\05.選曲\CActSelectステータスパネル.cs" />\r
+ <Compile Include="コード\ステージ\05.選曲\CActSelect曲リスト.cs" />\r
+ <Compile Include="コード\ステージ\05.選曲\CActSelect演奏履歴パネル.cs" />\r
+ <Compile Include="コード\ステージ\05.選曲\CStage選曲.cs" />\r
+ <Compile Include="コード\ステージ\06.曲読み込み\CStage曲読み込み.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\CAct演奏AVI.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\CAct演奏BGA.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\CAct演奏Combo共通.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\CAct演奏RGB共通.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\CAct演奏スクロール速度.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\CAct演奏スコア共通.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\CAct演奏ステージ失敗.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\CAct演奏チップファイアGB.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\CAct演奏パネル文字列.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\CAct演奏レーンフラッシュGB共通.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\CAct演奏判定文字列共通.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\CAct演奏演奏情報.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\ギター画面\CAct演奏GuitarRGB.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\ギター画面\CAct演奏GuitarWailingBonus.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\ギター画面\CAct演奏Guitarゲージ.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\ギター画面\CAct演奏Guitarコンボ.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\ギター画面\CAct演奏Guitarスコア.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\ギター画面\CAct演奏Guitarステータスパネル.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\ギター画面\CAct演奏Guitarチップファイア.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\ギター画面\CAct演奏GuitarレーンフラッシュGB.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\ギター画面\CAct演奏Guitar判定文字列.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\ギター画面\CStage演奏ギター画面.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\ドラム画面\CAct演奏DrumsDanger.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\ドラム画面\CAct演奏DrumsRGB.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\ドラム画面\CAct演奏DrumsWailingBonus.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\ドラム画面\CAct演奏Drumsゲージ.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\ドラム画面\CAct演奏DrumsコンボDGB.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\ドラム画面\CAct演奏Drumsスコア.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\ドラム画面\CAct演奏Drumsステータスパネル.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\ドラム画面\CAct演奏DrumsチップファイアD.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\ドラム画面\CAct演奏DrumsチップファイアGB.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\ドラム画面\CAct演奏Drumsパッド.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\ドラム画面\CAct演奏DrumsレーンフラッシュD.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\ドラム画面\CAct演奏DrumsレーンフラッシュGB.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\ドラム画面\CAct演奏Drums判定文字列.cs" />\r
+ <Compile Include="コード\ステージ\07.演奏\ドラム画面\CStage演奏ドラム画面.cs" />\r
+ <Compile Include="コード\ステージ\08.結果\CActResultImage.cs" />\r
+ <Compile Include="コード\ステージ\08.結果\CActResultParameterPanel.cs" />\r
+ <Compile Include="コード\ステージ\08.結果\CActResultRank.cs" />\r
+ <Compile Include="コード\ステージ\08.結果\CActResultSongBar.cs" />\r
+ <Compile Include="コード\ステージ\08.結果\CStage結果.cs" />\r
+ <Compile Include="コード\ステージ\09.終了\CStage終了.cs" />\r
+ <Compile Include="コード\ステージ\CActDFPFont.cs" />\r
+ <Compile Include="コード\ステージ\CActFIFOBlack.cs" />\r
+ <Compile Include="コード\ステージ\CActFIFOWhite.cs" />\r
+ <Compile Include="コード\ステージ\CActオプションパネル.cs" />\r
+ <Compile Include="コード\ステージ\CStage.cs" />\r
+ <Compile Include="コード\プラグイン\CPluginHost.cs" />\r
+ <Compile Include="コード\プラグイン\IPluginActivity.cs" />\r
+ <Compile Include="コード\プラグイン\IPluginHost.cs" />\r
+ <Compile Include="コード\全体\CConfigIni.cs" />\r
+ <Compile Include="コード\全体\CDTXMania.cs" />\r
+ <Compile Include="コード\全体\CDTXVersion.cs" />\r
+ <Compile Include="コード\全体\CPad.cs" />\r
+ <Compile Include="コード\全体\CSkin.cs" />\r
+ <Compile Include="コード\全体\C定数.cs" />\r
+ <Compile Include="コード\全体\C文字コンソール.cs" />\r
+ <Compile Include="コード\全体\Program.cs" />\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <Content Include="dtx.ico" />\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <BootstrapperPackage Include="Microsoft.Net.Client.3.5">\r
+ <Visible>False</Visible>\r
+ <ProductName>.NET Framework Client Profile</ProductName>\r
+ <Install>false</Install>\r
+ </BootstrapperPackage>\r
+ <BootstrapperPackage Include="Microsoft.Net.Framework.2.0">\r
+ <Visible>False</Visible>\r
+ <ProductName>.NET Framework 2.0 %28x86%29</ProductName>\r
+ <Install>true</Install>\r
+ </BootstrapperPackage>\r
+ <BootstrapperPackage Include="Microsoft.Net.Framework.3.0">\r
+ <Visible>False</Visible>\r
+ <ProductName>.NET Framework 3.0 %28x86%29</ProductName>\r
+ <Install>false</Install>\r
+ </BootstrapperPackage>\r
+ <BootstrapperPackage Include="Microsoft.Net.Framework.3.5">\r
+ <Visible>False</Visible>\r
+ <ProductName>.NET Framework 3.5</ProductName>\r
+ <Install>false</Install>\r
+ </BootstrapperPackage>\r
+ <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">\r
+ <Visible>False</Visible>\r
+ <ProductName>.NET Framework 3.5 SP1</ProductName>\r
+ <Install>false</Install>\r
+ </BootstrapperPackage>\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <ProjectReference Include="..\FDK17プロジェクト\FDK17.csproj">\r
+ <Project>{BCD40908-F3E2-4707-BFAA-1DD99DF6357D}</Project>\r
+ <Name>FDK17</Name>\r
+ </ProjectReference>\r
+ </ItemGroup>\r
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />\r
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r
+ Other similar extension points exist, see Microsoft.Common.targets.\r
+ <Target Name="BeforeBuild">\r
+ </Target>\r
+ <Target Name="AfterBuild">\r
+ </Target>\r
+ -->\r
+ <PropertyGroup>\r
+ <PostBuildEvent>copy /Y "$(TargetPath)" "$(SolutionDir)..\実行時フォルダ"</PostBuildEvent>\r
+ </PropertyGroup>\r
+</Project>
\ No newline at end of file
--- /dev/null
+using System.Reflection;\r
+using System.Runtime.CompilerServices;\r
+using System.Runtime.InteropServices;\r
+using System.Resources;\r
+\r
+// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。\r
+// アセンブリに関連付けられている情報を変更するには、\r
+// これらの属性値を変更してください。\r
+[assembly: AssemblyTitle("DTXManiaGR")]\r
+[assembly: AssemblyDescription("")]\r
+[assembly: AssemblyConfiguration("")]\r
+[assembly: AssemblyCompany("")]\r
+[assembly: AssemblyProduct("DTXManiaGR")]\r
+[assembly: AssemblyCopyright("Copyright (C) 2000-2010 FROM / Kenji YAMAZAKI")]\r
+[assembly: AssemblyTrademark("")]\r
+[assembly: AssemblyCulture("")]\r
+\r
+// ComVisible を false に設定すると、その型はこのアセンブリ内で COM コンポーネントから \r
+// 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、\r
+// その型の ComVisible 属性を true に設定してください。\r
+[assembly: ComVisible(false)]\r
+\r
+// 次の GUID は、このプロジェクトが COM に公開される場合の、typelib の ID です\r
+[assembly: Guid("ee05cb8c-73a8-41c3-8677-a0afbe7401f7")]\r
+\r
+// アセンブリのバージョン情報は、以下の 4 つの値で構成されています:\r
+//\r
+// Major Version\r
+// Minor Version \r
+// Build Number\r
+// Revision\r
+//\r
+// すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を \r
+// 既定値にすることができます:\r
+// [assembly: AssemblyVersion("1.0.*")]\r
+[assembly: AssemblyVersion( "84.0.0.0" )]\r
+[assembly: AssemblyFileVersion( "84.0.0.0" )]\r
+[assembly: NeutralResourcesLanguageAttribute("ja-JP")]\r
+\r
+// このアセンブリは「ライブラリ」である(難読化ツールへの指示)。\r
+// → デフォルトの true のままだと、アセンブリ public なメンバもすべて難読化されてしまう。\r
+[assembly: ObfuscateAssembly( false )]\r
--- /dev/null
+//------------------------------------------------------------------------------\r
+// <auto-generated>\r
+// このコードはツールによって生成されました。\r
+// ランタイム バージョン:2.0.50727.4952\r
+//\r
+// このファイルへの変更は、以下の状況下で不正な動作の原因になったり、\r
+// コードが再生成されるときに損失したりします。\r
+// </auto-generated>\r
+//------------------------------------------------------------------------------\r
+\r
+namespace DTXMania.Properties {\r
+ using System;\r
+ \r
+ \r
+ /// <summary>\r
+ /// ローカライズされた文字列などを検索するための、厳密に型指定されたリソース クラスです。\r
+ /// </summary>\r
+ // このクラスは StronglyTypedResourceBuilder クラスが ResGen\r
+ // または Visual Studio のようなツールを使用して自動生成されました。\r
+ // メンバを追加または削除するには、.ResX ファイルを編集して、/str オプションと共に\r
+ // ResGen を実行し直すか、または VS プロジェクトをビルドし直します。\r
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]\r
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r
+ internal class Resources {\r
+ \r
+ private static global::System.Resources.ResourceManager resourceMan;\r
+ \r
+ private static global::System.Globalization.CultureInfo resourceCulture;\r
+ \r
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]\r
+ internal Resources() {\r
+ }\r
+ \r
+ /// <summary>\r
+ /// このクラスで使用されているキャッシュされた ResourceManager インスタンスを返します。\r
+ /// </summary>\r
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r
+ internal static global::System.Resources.ResourceManager ResourceManager {\r
+ get {\r
+ if (object.ReferenceEquals(resourceMan, null)) {\r
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("DTXMania.Properties.Resources", typeof(Resources).Assembly);\r
+ resourceMan = temp;\r
+ }\r
+ return resourceMan;\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// 厳密に型指定されたこのリソース クラスを使用して、すべての検索リソースに対し、\r
+ /// 現在のスレッドの CurrentUICulture プロパティをオーバーライドします。\r
+ /// </summary>\r
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r
+ internal static global::System.Globalization.CultureInfo Culture {\r
+ get {\r
+ return resourceCulture;\r
+ }\r
+ set {\r
+ resourceCulture = value;\r
+ }\r
+ }\r
+ \r
+ internal static System.Drawing.Icon dtx {\r
+ get {\r
+ object obj = ResourceManager.GetObject("dtx", resourceCulture);\r
+ return ((System.Drawing.Icon)(obj));\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<root>\r
+ <!-- \r
+ Microsoft ResX Schema \r
+ \r
+ Version 2.0\r
+ \r
+ The primary goals of this format is to allow a simple XML format \r
+ that is mostly human readable. The generation and parsing of the \r
+ various data types are done through the TypeConverter classes \r
+ associated with the data types.\r
+ \r
+ Example:\r
+ \r
+ ... ado.net/XML headers & schema ...\r
+ <resheader name="resmimetype">text/microsoft-resx</resheader>\r
+ <resheader name="version">2.0</resheader>\r
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>\r
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>\r
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">\r
+ <value>[base64 mime encoded serialized .NET Framework object]</value>\r
+ </data>\r
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r
+ <comment>This is a comment</comment>\r
+ </data>\r
+ \r
+ There are any number of "resheader" rows that contain simple \r
+ name/value pairs.\r
+ \r
+ Each data row contains a name, and value. The row also contains a \r
+ type or mimetype. Type corresponds to a .NET class that support \r
+ text/value conversion through the TypeConverter architecture. \r
+ Classes that don't support this are serialized and stored with the \r
+ mimetype set.\r
+ \r
+ The mimetype is used for serialized objects, and tells the \r
+ ResXResourceReader how to depersist the object. This is currently not \r
+ extensible. For a given mimetype the value must be set accordingly:\r
+ \r
+ Note - application/x-microsoft.net.object.binary.base64 is the format \r
+ that the ResXResourceWriter will generate, however the reader can \r
+ read any of the formats listed below.\r
+ \r
+ mimetype: application/x-microsoft.net.object.binary.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r
+ : and then encoded with base64 encoding.\r
+ \r
+ mimetype: application/x-microsoft.net.object.soap.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r
+ : and then encoded with base64 encoding.\r
+\r
+ mimetype: application/x-microsoft.net.object.bytearray.base64\r
+ value : The object must be serialized into a byte array \r
+ : using a System.ComponentModel.TypeConverter\r
+ : and then encoded with base64 encoding.\r
+ -->\r
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">\r
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />\r
+ <xsd:element name="root" msdata:IsDataSet="true">\r
+ <xsd:complexType>\r
+ <xsd:choice maxOccurs="unbounded">\r
+ <xsd:element name="metadata">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" use="required" type="xsd:string" />\r
+ <xsd:attribute name="type" type="xsd:string" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="assembly">\r
+ <xsd:complexType>\r
+ <xsd:attribute name="alias" type="xsd:string" />\r
+ <xsd:attribute name="name" type="xsd:string" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="data">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />\r
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="resheader">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:choice>\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:schema>\r
+ <resheader name="resmimetype">\r
+ <value>text/microsoft-resx</value>\r
+ </resheader>\r
+ <resheader name="version">\r
+ <value>2.0</value>\r
+ </resheader>\r
+ <resheader name="reader">\r
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <resheader name="writer">\r
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />\r
+ <data name="dtx" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+ <value>..\dtx.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+ </data>\r
+</root>
\ No newline at end of file
--- /dev/null
+//------------------------------------------------------------------------------\r
+// <auto-generated>\r
+// このコードはツールによって生成されました。\r
+// ランタイム バージョン:2.0.50727.4952\r
+//\r
+// このファイルへの変更は、以下の状況下で不正な動作の原因になったり、\r
+// コードが再生成されるときに損失したりします。\r
+// </auto-generated>\r
+//------------------------------------------------------------------------------\r
+\r
+namespace DTXMania.Properties {\r
+ \r
+ \r
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]\r
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {\r
+ \r
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));\r
+ \r
+ public static Settings Default {\r
+ get {\r
+ return defaultInstance;\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+<?xml version='1.0' encoding='utf-8'?>\r
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">\r
+ <Profiles>\r
+ <Profile Name="(Default)" />\r
+ </Profiles>\r
+ <Settings />\r
+</SettingsFile>\r
--- /dev/null
+<?xml version="1.0"?>\r
+<configuration>\r
+<startup><supportedRuntime version="v2.0.50727"/></startup></configuration>\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+\r
+namespace DTXMania\r
+{\r
+ /// <summary>\r
+ /// すべてのアイテムの基本クラス。\r
+ /// </summary>\r
+ internal class CItemBase\r
+ {\r
+ // プロパティ\r
+\r
+ public Eパネル種別 eパネル種別;\r
+ public enum Eパネル種別\r
+ {\r
+ 通常,\r
+ その他\r
+ }\r
+\r
+ public E種別 e種別;\r
+ public enum E種別\r
+ {\r
+ 基本形,\r
+ ONorOFFトグル,\r
+ ONorOFFor不定スリーステート,\r
+ 整数,\r
+ リスト\r
+ }\r
+\r
+ public string str項目名;\r
+ public string str説明文;\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public CItemBase()\r
+ {\r
+ this.str項目名 = "";\r
+ this.str説明文 = "";\r
+ }\r
+ public CItemBase( string str項目名 )\r
+ : this()\r
+ {\r
+ this.t初期化( str項目名 );\r
+ }\r
+ public CItemBase( string str項目名, Eパネル種別 eパネル種別 )\r
+ : this()\r
+ {\r
+ this.t初期化( str項目名, eパネル種別 );\r
+ }\r
+\r
+ \r
+ // メソッド;子クラスで実装する\r
+\r
+ public virtual void tEnter押下()\r
+ {\r
+ }\r
+ public virtual void t項目値を次へ移動()\r
+ {\r
+ }\r
+ public virtual void t項目値を前へ移動()\r
+ {\r
+ }\r
+ public virtual void t初期化( string str項目名 )\r
+ {\r
+ this.t初期化( str項目名, Eパネル種別.通常 );\r
+ }\r
+ public virtual void t初期化( string str項目名, Eパネル種別 eパネル種別 )\r
+ {\r
+ this.str項目名 = str項目名;\r
+ this.eパネル種別 = eパネル種別;\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+\r
+namespace DTXMania\r
+{\r
+ /// <summary>\r
+ /// 「整数」を表すアイテム。\r
+ /// </summary>\r
+ internal class CItemInteger : CItemBase\r
+ {\r
+ // プロパティ\r
+\r
+ public int n現在の値;\r
+ public bool b値がフォーカスされている;\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public CItemInteger()\r
+ {\r
+ base.e種別 = CItemBase.E種別.整数;\r
+ this.n最小値 = 0;\r
+ this.n最大値 = 0;\r
+ this.n現在の値 = 0;\r
+ this.b値がフォーカスされている = false;\r
+ }\r
+ public CItemInteger( string str項目名, int n最小値, int n最大値, int n初期値 )\r
+ : this()\r
+ {\r
+ this.t初期化( str項目名, n最小値, n最大値, n初期値 );\r
+ }\r
+ public CItemInteger( string str項目名, int n最小値, int n最大値, int n初期値, CItemBase.Eパネル種別 eパネル種別 )\r
+ : this()\r
+ {\r
+ this.t初期化( str項目名, n最小値, n最大値, n初期値, eパネル種別 );\r
+ }\r
+\r
+\r
+ // CItemBase 実装\r
+\r
+ public override void tEnter押下()\r
+ {\r
+ this.b値がフォーカスされている = !this.b値がフォーカスされている;\r
+ }\r
+ public override void t項目値を次へ移動()\r
+ {\r
+ if( ++this.n現在の値 > this.n最大値 )\r
+ {\r
+ this.n現在の値 = this.n最大値;\r
+ }\r
+ }\r
+ public override void t項目値を前へ移動()\r
+ {\r
+ if( --this.n現在の値 < this.n最小値 )\r
+ {\r
+ this.n現在の値 = this.n最小値;\r
+ }\r
+ }\r
+ public void t初期化( string str項目名, int n最小値, int n最大値, int n初期値 )\r
+ {\r
+ this.t初期化( str項目名, n最小値, n最大値, n初期値, CItemBase.Eパネル種別.通常 );\r
+ }\r
+ public void t初期化( string str項目名, int n最小値, int n最大値, int n初期値, CItemBase.Eパネル種別 eパネル種別 )\r
+ {\r
+ base.t初期化( str項目名, eパネル種別 );\r
+ this.n最小値 = n最小値;\r
+ this.n最大値 = n最大値;\r
+ this.n現在の値 = n初期値;\r
+ this.b値がフォーカスされている = false;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private int n最小値;\r
+ private int n最大値;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+\r
+namespace DTXMania\r
+{\r
+ /// <summary>\r
+ /// 「リスト」(複数の固定値からの1つを選択可能)を表すアイテム。\r
+ /// </summary>\r
+ internal class CItemList : CItemBase\r
+ {\r
+ // プロパティ\r
+\r
+ public List<string> list項目値;\r
+ public int n現在選択されている項目番号;\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public CItemList()\r
+ {\r
+ base.e種別 = CItemBase.E種別.リスト;\r
+ this.n現在選択されている項目番号 = 0;\r
+ this.list項目値 = new List<string>();\r
+ }\r
+ public CItemList( string str項目名 )\r
+ : this()\r
+ {\r
+ this.t初期化( str項目名 );\r
+ }\r
+ public CItemList( string str項目名, CItemBase.Eパネル種別 eパネル種別 )\r
+ : this()\r
+ {\r
+ this.t初期化( str項目名, eパネル種別 );\r
+ }\r
+ public CItemList( string str項目名, CItemBase.Eパネル種別 eパネル種別, int n初期インデックス値, params string[] arg項目リスト )\r
+ : this()\r
+ {\r
+ this.t初期化( str項目名, eパネル種別, n初期インデックス値, arg項目リスト );\r
+ }\r
+\r
+\r
+ // CItemBase 実装\r
+\r
+ public override void tEnter押下()\r
+ {\r
+ this.t項目値を次へ移動();\r
+ }\r
+ public override void t項目値を次へ移動()\r
+ {\r
+ if( ++this.n現在選択されている項目番号 >= this.list項目値.Count )\r
+ {\r
+ this.n現在選択されている項目番号 = 0;\r
+ }\r
+ }\r
+ public override void t項目値を前へ移動()\r
+ {\r
+ if( --this.n現在選択されている項目番号 < 0 )\r
+ {\r
+ this.n現在選択されている項目番号 = this.list項目値.Count - 1;\r
+ }\r
+ }\r
+ public override void t初期化( string str項目名, CItemBase.Eパネル種別 eパネル種別 )\r
+ {\r
+ base.t初期化( str項目名, eパネル種別 );\r
+ this.n現在選択されている項目番号 = 0;\r
+ this.list項目値.Clear();\r
+ }\r
+ public void t初期化( string str項目名, CItemBase.Eパネル種別 eパネル種別, int n初期インデックス値, params string[] arg項目リスト )\r
+ {\r
+ base.t初期化( str項目名, eパネル種別 );\r
+ this.n現在選択されている項目番号 = n初期インデックス値;\r
+ foreach( string str in arg項目リスト )\r
+ {\r
+ this.list項目値.Add( str );\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+\r
+namespace DTXMania\r
+{\r
+ /// <summary>\r
+ /// 「スリーステート」(ON, OFF, 不定 の3状態)を表すアイテム。\r
+ /// </summary>\r
+ internal class CItemThreeState : CItemBase\r
+ {\r
+ // プロパティ\r
+\r
+ public E状態 e現在の状態;\r
+ public enum E状態\r
+ {\r
+ ON,\r
+ OFF,\r
+ 不定\r
+ }\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public CItemThreeState()\r
+ {\r
+ base.e種別 = CItemBase.E種別.ONorOFFor不定スリーステート;\r
+ this.e現在の状態 = E状態.不定;\r
+ }\r
+ public CItemThreeState( string str項目名, E状態 e初期状態 )\r
+ : this()\r
+ {\r
+ this.t初期化( str項目名, e初期状態 );\r
+ }\r
+ public CItemThreeState( string str項目名, E状態 e初期状態, CItemBase.Eパネル種別 eパネル種別 )\r
+ : this()\r
+ {\r
+ this.t初期化( str項目名, e初期状態, eパネル種別 );\r
+ }\r
+\r
+\r
+ // CItemBase 実装\r
+\r
+ public override void tEnter押下()\r
+ {\r
+ this.t項目値を次へ移動();\r
+ }\r
+ public override void t項目値を次へ移動()\r
+ {\r
+ switch( this.e現在の状態 )\r
+ {\r
+ case E状態.ON:\r
+ this.e現在の状態 = E状態.OFF;\r
+ return;\r
+\r
+ case E状態.OFF:\r
+ this.e現在の状態 = E状態.ON;\r
+ return;\r
+\r
+ case E状態.不定:\r
+ this.e現在の状態 = E状態.ON;\r
+ return;\r
+ }\r
+ }\r
+ public override void t項目値を前へ移動()\r
+ {\r
+ switch( this.e現在の状態 )\r
+ {\r
+ case E状態.ON:\r
+ this.e現在の状態 = E状態.OFF;\r
+ return;\r
+\r
+ case E状態.OFF:\r
+ this.e現在の状態 = E状態.ON;\r
+ return;\r
+\r
+ case E状態.不定:\r
+ this.e現在の状態 = E状態.OFF;\r
+ return;\r
+ }\r
+ }\r
+ public void t初期化( string str項目名, E状態 e初期状態 )\r
+ {\r
+ this.t初期化( str項目名, e初期状態, CItemBase.Eパネル種別.通常 );\r
+ }\r
+ public void t初期化( string str項目名, E状態 e初期状態, CItemBase.Eパネル種別 eパネル種別 )\r
+ {\r
+ base.t初期化( str項目名, eパネル種別 );\r
+ this.e現在の状態 = e初期状態;\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+\r
+namespace DTXMania\r
+{\r
+ /// <summary>\r
+ /// 「トグル」(ON, OFF の2状態)を表すアイテム。\r
+ /// </summary>\r
+ internal class CItemToggle : CItemBase\r
+ {\r
+ // プロパティ\r
+\r
+ public bool bON;\r
+\r
+ \r
+ // コンストラクタ\r
+\r
+ public CItemToggle()\r
+ {\r
+ base.e種別 = CItemBase.E種別.ONorOFFトグル;\r
+ this.bON = false;\r
+ }\r
+ public CItemToggle( string str項目名, bool b初期状態 )\r
+ : this()\r
+ {\r
+ this.t初期化( str項目名, b初期状態 );\r
+ }\r
+ public CItemToggle( string str項目名, bool b初期状態, CItemBase.Eパネル種別 eパネル種別 )\r
+ : this()\r
+ {\r
+ this.t初期化( str項目名, b初期状態, eパネル種別 );\r
+ }\r
+\r
+\r
+ // CItemBase 実装\r
+\r
+ public override void tEnter押下()\r
+ {\r
+ this.t項目値を次へ移動();\r
+ }\r
+ public override void t項目値を次へ移動()\r
+ {\r
+ this.bON = !this.bON;\r
+ }\r
+ public override void t項目値を前へ移動()\r
+ {\r
+ this.t項目値を次へ移動();\r
+ }\r
+ public void t初期化( string str項目名, bool b初期状態 )\r
+ {\r
+ this.t初期化( str項目名, b初期状態, CItemBase.Eパネル種別.通常 );\r
+ }\r
+ public void t初期化( string str項目名, bool b初期状態, CItemBase.Eパネル種別 eパネル種別 )\r
+ {\r
+ base.t初期化( str項目名, eパネル種別 );\r
+ this.bON = b初期状態;\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.IO;\r
+using System.Drawing;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CBoxDef\r
+ {\r
+ // プロパティ\r
+\r
+ public string Artist;\r
+ public Color Color;\r
+ public string Comment;\r
+ public string Genre;\r
+ public int GoodRange;\r
+ public int GreatRange;\r
+ public int PerfectRange;\r
+ public int PoorRange;\r
+ public string Preimage;\r
+ public string Premovie;\r
+ public string Presound;\r
+ public string Title;\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public CBoxDef()\r
+ {\r
+ this.Title = "";\r
+ this.Artist = "";\r
+ this.Comment = "BOX に移動します。";\r
+ this.Genre = "";\r
+ this.Preimage = "";\r
+ this.Premovie = "";\r
+ this.Presound = "";\r
+ this.Color = ColorTranslator.FromHtml( "White" );\r
+ this.PerfectRange = -1;\r
+ this.GreatRange = -1;\r
+ this.GoodRange = -1;\r
+ this.PoorRange = -1;\r
+ }\r
+ public CBoxDef( string boxdefファイル名 )\r
+ : this()\r
+ {\r
+ this.t読み込み( boxdefファイル名 );\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ public void t読み込み( string boxdefファイル名 )\r
+ {\r
+ StreamReader reader = new StreamReader( boxdefファイル名, Encoding.GetEncoding( "shift-jis" ) );\r
+ string str = null;\r
+ while( ( str = reader.ReadLine() ) != null )\r
+ {\r
+ if( str.Length != 0 )\r
+ {\r
+ try\r
+ {\r
+ str = str.TrimStart( new char[] { ' ', '\t' } );\r
+ if( ( str[ 0 ] == '#' ) && ( str[ 0 ] != ';' ) )\r
+ {\r
+ if( str.IndexOf( ';' ) != -1 )\r
+ {\r
+ str = str.Substring( 0, str.IndexOf( ';' ) );\r
+ }\r
+ if( str.StartsWith( "#TITLE", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ this.Title = str.Substring( 6 ).Trim( new char[] { ':', ' ', '\t' } );\r
+ }\r
+ else if( str.StartsWith( "#ARTIST", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ this.Artist = str.Substring( 7 ).Trim( new char[] { ':', ' ', '\t' } );\r
+ }\r
+ else if( str.StartsWith( "#COMMENT", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ this.Comment = str.Substring( 8 ).Trim( new char[] { ':', ' ', '\t' } );\r
+ }\r
+ else if( str.StartsWith( "#GENRE", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ this.Genre = str.Substring( 6 ).Trim( new char[] { ':', ' ', '\t' } );\r
+ }\r
+ else if( str.StartsWith( "#PREVIEW", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ this.Presound = str.Substring( 8 ).Trim( new char[] { ':', ' ', '\t' } );\r
+ }\r
+ else if( str.StartsWith( "#PREIMAGE", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ this.Preimage = str.Substring( 9 ).Trim( new char[] { ':', ' ', '\t' } );\r
+ }\r
+ else if( str.StartsWith( "#PREMOVIE", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ this.Premovie = str.Substring( 9 ).Trim( new char[] { ':', ' ', '\t' } );\r
+ }\r
+ else if( str.StartsWith( "#FONTCOLOR", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ this.Color = ColorTranslator.FromHtml( str.Substring( 10 ).Trim( new char[] { ':', ' ', '\t' } ) );\r
+ }\r
+ else if( str.StartsWith( "#PERFECTRANGE", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ int result = 0;\r
+ if( int.TryParse( str.Substring( 13 ).Trim( new char[] { ':', ' ', '\t' } ), out result ) && ( result >= 0 ) )\r
+ {\r
+ this.PerfectRange = result;\r
+ }\r
+ }\r
+ else if( str.StartsWith( "#GREATRANGE", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ int num2 = 0;\r
+ if( int.TryParse( str.Substring( 11 ).Trim( new char[] { ':', ' ', '\t' } ), out num2 ) && ( num2 >= 0 ) )\r
+ {\r
+ this.GreatRange = num2;\r
+ }\r
+ }\r
+ else if( str.StartsWith( "#GOODRANGE", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ int num3 = 0;\r
+ if( int.TryParse( str.Substring( 10 ).Trim( new char[] { ':', ' ', '\t' } ), out num3 ) && ( num3 >= 0 ) )\r
+ {\r
+ this.GoodRange = num3;\r
+ }\r
+ }\r
+ else if( str.StartsWith( "#POORRANGE", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ int num4 = 0;\r
+ if( int.TryParse( str.Substring( 10 ).Trim( new char[] { ':', ' ', '\t' } ), out num4 ) && ( num4 >= 0 ) )\r
+ {\r
+ this.PoorRange = num4;\r
+ }\r
+ }\r
+ }\r
+ continue;\r
+ }\r
+ catch\r
+ {\r
+ continue;\r
+ }\r
+ }\r
+ }\r
+ reader.Close();\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using System.Drawing;\r
+using System.Diagnostics;\r
+using System.IO;\r
+using System.Security.Cryptography;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CDTX : CActivity\r
+ {\r
+ // 定数\r
+\r
+ public enum E種別\r
+ {\r
+ DTX,\r
+ GDA,\r
+ G2D,\r
+ BMS,\r
+ BME,\r
+ SMF\r
+ }\r
+\r
+ // クラス\r
+\r
+ public class CAVI : IDisposable\r
+ {\r
+ public CAvi avi;\r
+ private bool bDisposed;\r
+ public int n番号;\r
+ public string strコメント文 = "";\r
+ public string strファイル名 = "";\r
+\r
+ public void OnDeviceCreated()\r
+ {\r
+ string str;\r
+ string str2 = CDTXMania.DTX.PATH_WAV;\r
+ if( ( str2 != null ) && ( str2.Length > 0 ) )\r
+ {\r
+ str = str2 + this.strファイル名;\r
+ }\r
+ else\r
+ {\r
+ str = CDTXMania.DTX.strフォルダ名 + this.strファイル名;\r
+ }\r
+ if( File.Exists( str ) )\r
+ {\r
+ try\r
+ {\r
+ this.avi = new CAvi( str );\r
+ Trace.TraceInformation( "動画を生成しました。({0})({1})({2}frames)", new object[] { this.strコメント文, str, this.avi.GetMaxFrameCount() } );\r
+ }\r
+ catch( Exception exception )\r
+ {\r
+ Trace.TraceError( exception.Message );\r
+ Trace.TraceError( "動画の生成に失敗しました。({0})({1})", new object[] { this.strコメント文, str } );\r
+ this.avi = null;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ Trace.TraceWarning( "ファイルが存在しません。({0})({1})", new object[] { this.strコメント文, str } );\r
+ this.avi = null;\r
+ }\r
+ }\r
+ public override string ToString()\r
+ {\r
+ return string.Format( "CAVI{0}: File:{1}, Comment:{2}", CDTX.tZZ( this.n番号 ), this.strファイル名, this.strコメント文 );\r
+ }\r
+\r
+ #region [ IDisposable 実装 ]\r
+ //-----------------\r
+ public void Dispose()\r
+ {\r
+ if( !this.bDisposed )\r
+ {\r
+ if( this.avi != null )\r
+ {\r
+ string str;\r
+ string str2 = CDTXMania.DTX.PATH_WAV;\r
+ if( ( str2 != null ) && ( str2.Length > 0 ) )\r
+ {\r
+ str = str2 + this.strファイル名;\r
+ }\r
+ else\r
+ {\r
+ str = CDTXMania.DTX.strフォルダ名 + this.strファイル名;\r
+ }\r
+ this.avi.Dispose();\r
+ this.avi = null;\r
+ Trace.TraceInformation( "動画を解放しました。({0})({1})", new object[] { this.strコメント文, str } );\r
+ }\r
+ this.bDisposed = true;\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+ public class CAVIPAN\r
+ {\r
+ public int nAVI番号;\r
+ public int n移動時間ct;\r
+ public int n番号;\r
+ public Point pt動画側開始位置 = new Point( 0, 0 );\r
+ public Point pt動画側終了位置 = new Point( 0, 0 );\r
+ public Point pt表示側開始位置 = new Point( 0, 0 );\r
+ public Point pt表示側終了位置 = new Point( 0, 0 );\r
+ public Size sz開始サイズ = new Size( 0, 0 );\r
+ public Size sz終了サイズ = new Size( 0, 0 );\r
+\r
+ public override string ToString()\r
+ {\r
+ return string.Format( "CAVIPAN{0}: AVI:{14}, 開始サイズ:{1}x{2}, 終了サイズ:{3}x{4}, 動画側開始位置:{5}x{6}, 動画側終了位置:{7}x{8}, 表示側開始位置:{9}x{10}, 表示側終了位置:{11}x{12}, 移動時間:{13}ct", new object[] { CDTX.tZZ( this.n番号 ), this.sz開始サイズ.Width, this.sz開始サイズ.Height, this.sz終了サイズ.Width, this.sz終了サイズ.Height, this.pt動画側開始位置.X, this.pt動画側開始位置.Y, this.pt動画側終了位置.X, this.pt動画側終了位置.Y, this.pt表示側開始位置.X, this.pt表示側開始位置.Y, this.pt表示側終了位置.X, this.pt表示側終了位置.Y, this.n移動時間ct, CDTX.tZZ( this.nAVI番号 ) } );\r
+ }\r
+ }\r
+ public class CBGA\r
+ {\r
+ public int nBMP番号;\r
+ public int n番号;\r
+ public Point pt画像側右下座標 = new Point( 0, 0 );\r
+ public Point pt画像側左上座標 = new Point( 0, 0 );\r
+ public Point pt表示座標 = new Point( 0, 0 );\r
+\r
+ public override string ToString()\r
+ {\r
+ return string.Format( "CBGA{0}, BMP:{1}, 画像側左上座標:{2}x{3}, 画像側右下座標:{4}x{5}, 表示座標:{6}x{7}", new object[] { CDTX.tZZ( this.n番号 ), CDTX.tZZ( this.nBMP番号 ), this.pt画像側左上座標.X, this.pt画像側左上座標.Y, this.pt画像側右下座標.X, this.pt画像側右下座標.Y, this.pt表示座標.X, this.pt表示座標.Y } );\r
+ }\r
+ }\r
+ public class CBGAPAN\r
+ {\r
+ public int nBMP番号;\r
+ public int n移動時間ct;\r
+ public int n番号;\r
+ public Point pt画像側開始位置 = new Point( 0, 0 );\r
+ public Point pt画像側終了位置 = new Point( 0, 0 );\r
+ public Point pt表示側開始位置 = new Point( 0, 0 );\r
+ public Point pt表示側終了位置 = new Point( 0, 0 );\r
+ public Size sz開始サイズ = new Size( 0, 0 );\r
+ public Size sz終了サイズ = new Size( 0, 0 );\r
+\r
+ public override string ToString()\r
+ {\r
+ return string.Format( "CBGAPAN{0}: BMP:{14}, 開始サイズ:{1}x{2}, 終了サイズ:{3}x{4}, 画像側開始位置:{5}x{6}, 画像側終了位置:{7}x{8}, 表示側開始位置:{9}x{10}, 表示側終了位置:{11}x{12}, 移動時間:{13}ct", new object[] { CDTX.tZZ( this.nBMP番号 ), this.sz開始サイズ.Width, this.sz開始サイズ.Height, this.sz終了サイズ.Width, this.sz終了サイズ.Height, this.pt画像側開始位置.X, this.pt画像側開始位置.Y, this.pt画像側終了位置.X, this.pt画像側終了位置.Y, this.pt表示側開始位置.X, this.pt表示側開始位置.Y, this.pt表示側終了位置.X, this.pt表示側終了位置.Y, this.n移動時間ct, CDTX.tZZ( this.nBMP番号 ) } );\r
+ }\r
+ }\r
+ public class CBMP : IDisposable\r
+ {\r
+ public bool bUse;\r
+ public int n番号;\r
+ public string strコメント文 = "";\r
+ public string strファイル名 = "";\r
+ public CTexture tx画像;\r
+ public int n高さ\r
+ {\r
+ get\r
+ {\r
+ return this.tx画像.sz画像サイズ.Height;\r
+ }\r
+ }\r
+ public int n幅\r
+ {\r
+ get\r
+ {\r
+ return this.tx画像.sz画像サイズ.Width;\r
+ }\r
+ }\r
+\r
+ public void OnDeviceCreated()\r
+ {\r
+ string str;\r
+ string str2 = CDTXMania.DTX.PATH_WAV;\r
+ if( ( str2 != null ) && ( str2.Length > 0 ) )\r
+ {\r
+ str = str2 + this.strファイル名;\r
+ }\r
+ else\r
+ {\r
+ str = CDTXMania.DTX.strフォルダ名 + this.strファイル名;\r
+ }\r
+ if( File.Exists( str ) )\r
+ {\r
+ this.tx画像 = CDTXMania.tテクスチャの生成( str, true );\r
+ if( this.tx画像 != null )\r
+ {\r
+ if( CDTXMania.ConfigIni.bLog作成解放ログ出力 )\r
+ {\r
+ Trace.TraceInformation( "テクスチャを生成しました。({0})({1})({2}x{3})", new object[] { this.strコメント文, str, this.n幅, this.n高さ } );\r
+ }\r
+ this.bUse = true;\r
+ }\r
+ else\r
+ {\r
+ Trace.TraceError( "テクスチャの生成に失敗しました。({0})({1})", new object[] { this.strコメント文, str } );\r
+ this.tx画像 = null;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ Trace.TraceWarning( "ファイルが存在しません。({0})({1})", new object[] { this.strコメント文, str } );\r
+ this.tx画像 = null;\r
+ }\r
+ }\r
+ public override string ToString()\r
+ {\r
+ return string.Format( "CBMP{0}: File:{1}, Comment:{2}", CDTX.tZZ( this.n番号 ), this.strファイル名, this.strコメント文 );\r
+ }\r
+\r
+ #region [ IDisposable 実装 ]\r
+ //-----------------\r
+ public void Dispose()\r
+ {\r
+ if( !this.bDisposed済み )\r
+ {\r
+ if( this.tx画像 != null )\r
+ {\r
+ string str;\r
+ string str2 = CDTXMania.DTX.PATH_WAV;\r
+ if( ( str2 != null ) && ( str2.Length > 0 ) )\r
+ {\r
+ str = str2 + this.strファイル名;\r
+ }\r
+ else\r
+ {\r
+ str = CDTXMania.DTX.strフォルダ名 + this.strファイル名;\r
+ }\r
+ CDTXMania.tテクスチャの解放( ref this.tx画像 );\r
+ if( CDTXMania.ConfigIni.bLog作成解放ログ出力 )\r
+ {\r
+ Trace.TraceInformation( "テクスチャを解放しました。({0})({1})", new object[] { this.strコメント文, str } );\r
+ }\r
+ }\r
+ this.bUse = false;\r
+ this.bDisposed済み = true;\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private bool bDisposed済み;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+ public class CBMPTEX : IDisposable\r
+ {\r
+ public bool bUse;\r
+ public int n番号;\r
+ public string strコメント文 = "";\r
+ public string strファイル名 = "";\r
+ public CTexture tx画像;\r
+ public int n高さ\r
+ {\r
+ get\r
+ {\r
+ return this.tx画像.sz画像サイズ.Height;\r
+ }\r
+ }\r
+ public int n幅\r
+ {\r
+ get\r
+ {\r
+ return this.tx画像.sz画像サイズ.Width;\r
+ }\r
+ }\r
+\r
+ public void OnDeviceCreated()\r
+ {\r
+ string str;\r
+ string str2 = CDTXMania.DTX.PATH_WAV;\r
+ if( ( str2 != null ) && ( str2.Length > 0 ) )\r
+ {\r
+ str = str2 + this.strファイル名;\r
+ }\r
+ else\r
+ {\r
+ str = CDTXMania.DTX.strフォルダ名 + this.strファイル名;\r
+ }\r
+ if( File.Exists( str ) )\r
+ {\r
+ this.tx画像 = CDTXMania.tテクスチャの生成( str );\r
+ if( this.tx画像 != null )\r
+ {\r
+ if( CDTXMania.ConfigIni.bLog作成解放ログ出力 )\r
+ {\r
+ Trace.TraceInformation( "テクスチャを生成しました。({0})({1})(Gr:{2}x{3})(Tx:{4}x{5})", new object[] { this.strコメント文, str, this.tx画像.sz画像サイズ.Width, this.tx画像.sz画像サイズ.Height, this.tx画像.szテクスチャサイズ.Width, this.tx画像.szテクスチャサイズ.Height } );\r
+ }\r
+ this.bUse = true;\r
+ }\r
+ else\r
+ {\r
+ Trace.TraceError( "テクスチャの生成に失敗しました。({0})({1})", new object[] { this.strコメント文, str } );\r
+ }\r
+ }\r
+ else\r
+ {\r
+ Trace.TraceWarning( "ファイルが存在しません。({0})({1})", new object[] { this.strコメント文, str } );\r
+ this.tx画像 = null;\r
+ }\r
+ }\r
+ public override string ToString()\r
+ {\r
+ return string.Format( "CBMPTEX{0}: File:{1}, Comment:{2}", CDTX.tZZ( this.n番号 ), this.strファイル名, this.strコメント文 );\r
+ }\r
+\r
+ #region [ IDisposable 実装 ]\r
+ //-----------------\r
+ public void Dispose()\r
+ {\r
+ if( !this.bDisposed済み )\r
+ {\r
+ if( this.tx画像 != null )\r
+ {\r
+ string str;\r
+ string str2 = CDTXMania.DTX.PATH_WAV;\r
+ if( ( str2 != null ) && ( str2.Length > 0 ) )\r
+ {\r
+ str = str2 + this.strファイル名;\r
+ }\r
+ else\r
+ {\r
+ str = CDTXMania.DTX.strフォルダ名 + this.strファイル名;\r
+ }\r
+ CDTXMania.tテクスチャの解放( ref this.tx画像 );\r
+ if( CDTXMania.ConfigIni.bLog作成解放ログ出力 )\r
+ {\r
+ Trace.TraceInformation( "テクスチャを解放しました。({0})({1})", new object[] { this.strコメント文, str } );\r
+ }\r
+ }\r
+ this.bUse = false;\r
+ this.bDisposed済み = true;\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private bool bDisposed済み;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+ public class CBPM\r
+ {\r
+ public double dbBPM値;\r
+ public int n内部番号;\r
+ public int n表記上の番号;\r
+\r
+ public override string ToString()\r
+ {\r
+ StringBuilder builder = new StringBuilder( 0x80 );\r
+ if( this.n内部番号 != this.n表記上の番号 )\r
+ {\r
+ builder.Append( string.Format( "CBPM{0}(内部{1})", CDTX.tZZ( this.n表記上の番号 ), this.n内部番号 ) );\r
+ }\r
+ else\r
+ {\r
+ builder.Append( string.Format( "CBPM{0}", CDTX.tZZ( this.n表記上の番号 ) ) );\r
+ }\r
+ builder.Append( string.Format( ", BPM:{0}", this.dbBPM値 ) );\r
+ return builder.ToString();\r
+ }\r
+ }\r
+ public class CChip : IComparable<CDTX.CChip>\r
+ {\r
+ public bool bHit;\r
+ public bool b可視 = true;\r
+ public double dbチップサイズ倍率 = 1.0;\r
+ public double db実数値;\r
+ public EAVI種別 eAVI種別;\r
+ public EBGA種別 eBGA種別;\r
+ public E楽器パート e楽器パート = E楽器パート.UNKNOWN;\r
+ public int nチャンネル番号;\r
+ public STDGBVALUE<int> nバーからの距離dot;\r
+ public int n整数値;\r
+ public int n整数値・内部番号;\r
+ public int n総移動時間;\r
+ public int n透明度 = 0xff;\r
+ public int n発声位置;\r
+ public int n発声時刻ms;\r
+ public CDTX.CAVI rAVI;\r
+ public CDTX.CAVIPAN rAVIPan;\r
+ public CDTX.CBGA rBGA;\r
+ public CDTX.CBGAPAN rBGAPan;\r
+ public CDTX.CBMP rBMP;\r
+ public CDTX.CBMPTEX rBMPTEX;\r
+ public bool bBPMチップである\r
+ {\r
+ get\r
+ {\r
+ if( this.nチャンネル番号 != 3 )\r
+ {\r
+ return ( this.nチャンネル番号 == 8 );\r
+ }\r
+ return true;\r
+ }\r
+ }\r
+ public bool bWAVを使うチャンネルである\r
+ {\r
+ get\r
+ {\r
+ switch( this.nチャンネル番号 )\r
+ {\r
+ case 1:\r
+ case 0x11:\r
+ case 0x12:\r
+ case 0x13:\r
+ case 20:\r
+ case 0x15:\r
+ case 0x16:\r
+ case 0x17:\r
+ case 0x18:\r
+ case 0x19:\r
+ case 0x1a:\r
+ case 0x1f:\r
+ case 0x20:\r
+ case 0x21:\r
+ case 0x22:\r
+ case 0x23:\r
+ case 0x24:\r
+ case 0x25:\r
+ case 0x26:\r
+ case 0x27:\r
+ case 0x2f:\r
+ case 0x31:\r
+ case 50:\r
+ case 0x33:\r
+ case 0x34:\r
+ case 0x35:\r
+ case 0x36:\r
+ case 0x37:\r
+ case 0x38:\r
+ case 0x39:\r
+ case 0x3a:\r
+ case 0x61:\r
+ case 0x62:\r
+ case 0x63:\r
+ case 100:\r
+ case 0x65:\r
+ case 0x66:\r
+ case 0x67:\r
+ case 0x68:\r
+ case 0x69:\r
+ case 0x70:\r
+ case 0x71:\r
+ case 0x72:\r
+ case 0x73:\r
+ case 0x74:\r
+ case 0x75:\r
+ case 0x76:\r
+ case 0x77:\r
+ case 120:\r
+ case 0x79:\r
+ case 0x80:\r
+ case 0x81:\r
+ case 130:\r
+ case 0x83:\r
+ case 0x84:\r
+ case 0x85:\r
+ case 0x86:\r
+ case 0x87:\r
+ case 0x88:\r
+ case 0x89:\r
+ case 0x90:\r
+ case 0x91:\r
+ case 0x92:\r
+ case 160:\r
+ case 0xa1:\r
+ case 0xa2:\r
+ case 0xa3:\r
+ case 0xa4:\r
+ case 0xa5:\r
+ case 0xa6:\r
+ case 0xa7:\r
+ case 0xaf:\r
+ case 0xb1:\r
+ case 0xb2:\r
+ case 0xb3:\r
+ case 180:\r
+ case 0xb5:\r
+ case 0xb6:\r
+ case 0xb7:\r
+ case 0xb8:\r
+ case 0xb9:\r
+ case 0xba:\r
+ case 0xbb:\r
+ case 0xbc:\r
+ return true;\r
+ }\r
+ return false;\r
+ }\r
+ }\r
+ public bool b自動再生音チャンネルである\r
+ {\r
+ get\r
+ {\r
+ int num = this.nチャンネル番号;\r
+ if( ( ( ( num != 1 ) && ( ( 0x61 > num ) || ( num > 0x69 ) ) ) && ( ( 0x70 > num ) || ( num > 0x79 ) ) ) && ( ( 0x80 > num ) || ( num > 0x89 ) ) )\r
+ {\r
+ return ( ( 0x90 <= num ) && ( num <= 0x92 ) );\r
+ }\r
+ return true;\r
+ }\r
+ }\r
+\r
+ public CChip()\r
+ {\r
+ STDGBVALUE<int> stdgbvalue = new STDGBVALUE<int>();\r
+ stdgbvalue.Drums = 0;\r
+ stdgbvalue.Guitar = 0;\r
+ stdgbvalue.Bass = 0;\r
+ this.nバーからの距離dot = stdgbvalue;\r
+ }\r
+ public void t初期化()\r
+ {\r
+ this.nチャンネル番号 = 0;\r
+ this.n整数値 = 0;\r
+ this.n整数値・内部番号 = 0;\r
+ this.db実数値 = 0.0;\r
+ this.n発声位置 = 0;\r
+ this.n発声時刻ms = 0;\r
+ this.dbチップサイズ倍率 = 1.0;\r
+ this.bHit = false;\r
+ this.b可視 = true;\r
+ this.e楽器パート = E楽器パート.UNKNOWN;\r
+ this.n透明度 = 0xff;\r
+ this.nバーからの距離dot.Drums = 0;\r
+ this.nバーからの距離dot.Guitar = 0;\r
+ this.nバーからの距離dot.Bass = 0;\r
+ this.n総移動時間 = 0;\r
+ }\r
+ public override string ToString()\r
+ {\r
+ string str = "";\r
+ switch( this.nチャンネル番号 )\r
+ {\r
+ case 1:\r
+ str = "バックコーラス";\r
+ break;\r
+\r
+ case 2:\r
+ str = "小節長変更";\r
+ break;\r
+\r
+ case 3:\r
+ str = "BPM変更";\r
+ break;\r
+\r
+ case 4:\r
+ str = "BMPレイヤ1";\r
+ break;\r
+\r
+ case 7:\r
+ str = "BMPレイヤ2";\r
+ break;\r
+\r
+ case 8:\r
+ str = "BPM変更(拡張)";\r
+ break;\r
+\r
+ case 0x11:\r
+ str = "HHClose";\r
+ break;\r
+\r
+ case 0x12:\r
+ str = "Snare";\r
+ break;\r
+\r
+ case 0x13:\r
+ str = "Kick";\r
+ break;\r
+\r
+ case 20:\r
+ str = "HiTom";\r
+ break;\r
+\r
+ case 0x15:\r
+ str = "LowTom";\r
+ break;\r
+\r
+ case 0x16:\r
+ str = "Cymbal";\r
+ break;\r
+\r
+ case 0x17:\r
+ str = "FloorTom";\r
+ break;\r
+\r
+ case 0x18:\r
+ str = "HHOpen";\r
+ break;\r
+\r
+ case 0x19:\r
+ str = "RideCymbal";\r
+ break;\r
+\r
+ case 0x1a:\r
+ str = "LeftCymbal";\r
+ break;\r
+\r
+ case 0x1f:\r
+ str = "ドラム歓声切替";\r
+ break;\r
+\r
+ case 0x20:\r
+ str = "ギターOPEN";\r
+ break;\r
+\r
+ case 0x21:\r
+ str = "ギター - - B";\r
+ break;\r
+\r
+ case 0x22:\r
+ str = "ギター - G -";\r
+ break;\r
+\r
+ case 0x23:\r
+ str = "ギター - G B";\r
+ break;\r
+\r
+ case 0x24:\r
+ str = "ギター R - -";\r
+ break;\r
+\r
+ case 0x25:\r
+ str = "ギター R - B";\r
+ break;\r
+\r
+ case 0x26:\r
+ str = "ギター R G -";\r
+ break;\r
+\r
+ case 0x27:\r
+ str = "ギター R G B";\r
+ break;\r
+\r
+ case 40:\r
+ str = "ギターWailing";\r
+ break;\r
+\r
+ case 0x2f:\r
+ str = "ギターWailing音切替";\r
+ break;\r
+\r
+ case 0x31:\r
+ str = "HHClose(不可視)";\r
+ break;\r
+\r
+ case 50:\r
+ str = "Snare(不可視)";\r
+ break;\r
+\r
+ case 0x33:\r
+ str = "Kick(不可視)";\r
+ break;\r
+\r
+ case 0x34:\r
+ str = "HiTom(不可視)";\r
+ break;\r
+\r
+ case 0x35:\r
+ str = "LowTom(不可視)";\r
+ break;\r
+\r
+ case 0x36:\r
+ str = "Cymbal(不可視)";\r
+ break;\r
+\r
+ case 0x37:\r
+ str = "FloorTom(不可視)";\r
+ break;\r
+\r
+ case 0x38:\r
+ str = "HHOpen(不可視)";\r
+ break;\r
+\r
+ case 0x39:\r
+ str = "RideCymbal(不可視)";\r
+ break;\r
+\r
+ case 0x3a:\r
+ str = "LeftCymbal(不可視)";\r
+ break;\r
+\r
+ case 80:\r
+ str = "小節線";\r
+ break;\r
+\r
+ case 0x51:\r
+ str = "拍線";\r
+ break;\r
+\r
+ case 0x52:\r
+ str = "MIDIコーラス";\r
+ break;\r
+\r
+ case 0x53:\r
+ str = "フィルイン";\r
+ break;\r
+\r
+ case 0x54:\r
+ str = "AVI";\r
+ break;\r
+\r
+ case 0x55:\r
+ str = "BMPレイヤ3";\r
+ break;\r
+\r
+ case 0x56:\r
+ str = "BMPレイヤ4";\r
+ break;\r
+\r
+ case 0x57:\r
+ str = "BMPレイヤ5";\r
+ break;\r
+\r
+ case 0x58:\r
+ str = "BMPレイヤ6";\r
+ break;\r
+\r
+ case 0x59:\r
+ str = "BMPレイヤ7";\r
+ break;\r
+\r
+ case 0x60:\r
+ str = "BMPレイヤ8";\r
+ break;\r
+\r
+ case 0x61:\r
+ str = "SE01";\r
+ break;\r
+\r
+ case 0x62:\r
+ str = "SE02";\r
+ break;\r
+\r
+ case 0x63:\r
+ str = "SE03";\r
+ break;\r
+\r
+ case 100:\r
+ str = "SE04";\r
+ break;\r
+\r
+ case 0x65:\r
+ str = "SE05";\r
+ break;\r
+\r
+ case 0x66:\r
+ str = "SE06";\r
+ break;\r
+\r
+ case 0x67:\r
+ str = "SE07";\r
+ break;\r
+\r
+ case 0x68:\r
+ str = "SE08";\r
+ break;\r
+\r
+ case 0x69:\r
+ str = "SE09";\r
+ break;\r
+\r
+ case 0x70:\r
+ str = "SE10";\r
+ break;\r
+\r
+ case 0x71:\r
+ str = "SE11";\r
+ break;\r
+\r
+ case 0x72:\r
+ str = "SE12";\r
+ break;\r
+\r
+ case 0x73:\r
+ str = "SE13";\r
+ break;\r
+\r
+ case 0x74:\r
+ str = "SE14";\r
+ break;\r
+\r
+ case 0x75:\r
+ str = "SE15";\r
+ break;\r
+\r
+ case 0x76:\r
+ str = "SE16";\r
+ break;\r
+\r
+ case 0x77:\r
+ str = "SE17";\r
+ break;\r
+\r
+ case 120:\r
+ str = "SE18";\r
+ break;\r
+\r
+ case 0x79:\r
+ str = "SE19";\r
+ break;\r
+\r
+ case 0x80:\r
+ str = "SE20";\r
+ break;\r
+\r
+ case 0x81:\r
+ str = "SE21";\r
+ break;\r
+\r
+ case 130:\r
+ str = "SE22";\r
+ break;\r
+\r
+ case 0x83:\r
+ str = "SE23";\r
+ break;\r
+\r
+ case 0x84:\r
+ str = "SE24";\r
+ break;\r
+\r
+ case 0x85:\r
+ str = "SE25";\r
+ break;\r
+\r
+ case 0x86:\r
+ str = "SE26";\r
+ break;\r
+\r
+ case 0x87:\r
+ str = "SE27";\r
+ break;\r
+\r
+ case 0x88:\r
+ str = "SE28";\r
+ break;\r
+\r
+ case 0x89:\r
+ str = "SE29";\r
+ break;\r
+\r
+ case 0x90:\r
+ str = "SE30";\r
+ break;\r
+\r
+ case 0x91:\r
+ str = "SE31";\r
+ break;\r
+\r
+ case 0x92:\r
+ str = "SE32";\r
+ break;\r
+\r
+ case 160:\r
+ str = "ベースOPEN";\r
+ break;\r
+\r
+ case 0xa1:\r
+ str = "ベース - - B";\r
+ break;\r
+\r
+ case 0xa2:\r
+ str = "ベース - G -";\r
+ break;\r
+\r
+ case 0xa3:\r
+ str = "ベース - G B";\r
+ break;\r
+\r
+ case 0xa4:\r
+ str = "ベース R - -";\r
+ break;\r
+\r
+ case 0xa5:\r
+ str = "ベース R - B";\r
+ break;\r
+\r
+ case 0xa6:\r
+ str = "ベース R G -";\r
+ break;\r
+\r
+ case 0xa7:\r
+ str = "ベース R G B";\r
+ break;\r
+\r
+ case 0xa8:\r
+ str = "ベースWailing";\r
+ break;\r
+\r
+ case 0xaf:\r
+ str = "ベースWailing音切替";\r
+ break;\r
+\r
+ case 0xb1:\r
+ str = "HHClose(空うち)";\r
+ break;\r
+\r
+ case 0xb2:\r
+ str = "Snare(空うち)";\r
+ break;\r
+\r
+ case 0xb3:\r
+ str = "Kick(空うち)";\r
+ break;\r
+\r
+ case 180:\r
+ str = "HiTom(空うち)";\r
+ break;\r
+\r
+ case 0xb5:\r
+ str = "LowTom(空うち)";\r
+ break;\r
+\r
+ case 0xb6:\r
+ str = "Cymbal(空うち)";\r
+ break;\r
+\r
+ case 0xb7:\r
+ str = "FloorTom(空うち)";\r
+ break;\r
+\r
+ case 0xb8:\r
+ str = "HHOpen(空うち)";\r
+ break;\r
+\r
+ case 0xb9:\r
+ str = "RideCymbal(空うち)";\r
+ break;\r
+\r
+ case 0xba:\r
+ str = "ギター(空打ち)";\r
+ break;\r
+\r
+ case 0xbb:\r
+ str = "ベース(空打ち)";\r
+ break;\r
+\r
+ case 0xbc:\r
+ str = "LeftCymbal(空うち)";\r
+ break;\r
+\r
+ case 0xc4:\r
+ str = "BGAスコープ画像切替1";\r
+ break;\r
+\r
+ case 0xc7:\r
+ str = "BGAスコープ画像切替2";\r
+ break;\r
+\r
+ case 0xd5:\r
+ str = "BGAスコープ画像切替3";\r
+ break;\r
+\r
+ case 0xd6:\r
+ str = "BGAスコープ画像切替4";\r
+ break;\r
+\r
+ case 0xd7:\r
+ str = "BGAスコープ画像切替5";\r
+ break;\r
+\r
+ case 0xd8:\r
+ str = "BGAスコープ画像切替6";\r
+ break;\r
+\r
+ case 0xd9:\r
+ str = "BGAスコープ画像切替7";\r
+ break;\r
+\r
+ case 0xe0:\r
+ str = "BGAスコープ画像切替8";\r
+ break;\r
+\r
+ default:\r
+ str = "??";\r
+ break;\r
+ }\r
+ return string.Format( "CChip: 位置:{0:D4}.{1:D3}, 時刻{2:D6}, Ch:{3:X2}({4}), Pn:{5}({11})(内部{6}), Pd:{7}, Sz:{8}, UseWav:{9}, Auto:{10}", new object[] { this.n発声位置 / 0x180, this.n発声位置 % 0x180, this.n発声時刻ms, this.nチャンネル番号, str, this.n整数値, this.n整数値・内部番号, this.db実数値, this.dbチップサイズ倍率, this.bWAVを使うチャンネルである, this.b自動再生音チャンネルである, CDTX.tZZ( this.n整数値 ) } );\r
+ }\r
+\r
+ #region [ IComparable 実装 ]\r
+ //-----------------\r
+ public int CompareTo( CDTX.CChip other )\r
+ {\r
+ byte[] buffer = new byte[] { \r
+ 5, 5, 3, 3, 5, 5, 5, 5, 3, 5, 5, 5, 5, 5, 5, 5, \r
+ 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 5, 5, 5, 5, \r
+ 7, 7, 7, 7, 7, 7, 7, 7, 5, 5, 5, 5, 5, 5, 5, 5, \r
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, \r
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, \r
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, \r
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, \r
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, \r
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, \r
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, \r
+ 7, 7, 7, 7, 7, 7, 7, 7, 5, 5, 5, 5, 5, 5, 5, 5, \r
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, \r
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, \r
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, \r
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, \r
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5\r
+ };\r
+ if( this.n発声位置 < other.n発声位置 )\r
+ {\r
+ return -1;\r
+ }\r
+ if( this.n発声位置 > other.n発声位置 )\r
+ {\r
+ return 1;\r
+ }\r
+ if( buffer[ this.nチャンネル番号 ] < buffer[ other.nチャンネル番号 ] )\r
+ {\r
+ return -1;\r
+ }\r
+ if( buffer[ this.nチャンネル番号 ] > buffer[ other.nチャンネル番号 ] )\r
+ {\r
+ return 1;\r
+ }\r
+ return 0;\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+ public class CWAV : IDisposable\r
+ {\r
+ public bool bBGMとして使う;\r
+ public List<int> listこのWAVを使用するチャンネル番号の集合 = new List<int>( 0x10 );\r
+ public int nチップサイズ = 100;\r
+ public int n位置;\r
+ public long[] n一時停止時刻 = new long[ 4 ];\r
+ public int n音量 = 100;\r
+ public int n現在再生中のサウンド番号;\r
+ public long[] n再生開始時刻 = new long[ 4 ];\r
+ public int n内部番号;\r
+ public int n表記上の番号;\r
+ public CSound[] rSound = new CSound[ 4 ];\r
+ public string strコメント文 = "";\r
+ public string strファイル名 = "";\r
+ public bool bBGMとして使わない\r
+ {\r
+ get\r
+ {\r
+ return !this.bBGMとして使う;\r
+ }\r
+ set\r
+ {\r
+ this.bBGMとして使う = !value;\r
+ }\r
+ }\r
+\r
+ public override string ToString()\r
+ {\r
+ StringBuilder builder = new StringBuilder( 0x80 );\r
+ if( this.n表記上の番号 == this.n内部番号 )\r
+ {\r
+ builder.Append( string.Format( "CWAV{0}: ", CDTX.tZZ( this.n表記上の番号 ) ) );\r
+ }\r
+ else\r
+ {\r
+ builder.Append( string.Format( "CWAV{0}(内部{1}): ", CDTX.tZZ( this.n表記上の番号 ), this.n内部番号 ) );\r
+ }\r
+ builder.Append( string.Format( "音量:{0}, 位置:{1}, サイズ:{2}, BGM:{3}, File:{4}, Comment:{5}", new object[] { this.n音量, this.n位置, this.nチップサイズ, this.bBGMとして使う ? 'Y' : 'N', this.strファイル名, this.strコメント文 } ) );\r
+ return builder.ToString();\r
+ }\r
+\r
+ #region [ IDisposable+α実装 ]\r
+ //-----------------\r
+ public void Dispose()\r
+ {\r
+ this.Dispose( true );\r
+ }\r
+ public void Dispose( bool bサウンドのDisposeも行う )\r
+ {\r
+ if( !this.bDisposed済み )\r
+ {\r
+ for( int i = 0; i < 4; i++ )\r
+ {\r
+ if( bサウンドのDisposeも行う && ( this.rSound[ i ] != null ) )\r
+ {\r
+ CDTXMania.Sound管理.tサウンドを破棄する( this.rSound[ i ] );\r
+ }\r
+ this.rSound[ i ] = null;\r
+ if( ( i == 0 ) && CDTXMania.ConfigIni.bLog作成解放ログ出力 )\r
+ {\r
+ Trace.TraceInformation( "サウンドを解放しました。({0})({1})", new object[] { this.strコメント文, this.strファイル名 } );\r
+ }\r
+ }\r
+ this.bDisposed済み = true;\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private bool bDisposed済み;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+ \r
+\r
+ // 構造体\r
+\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ public struct STLANEINT\r
+ {\r
+ public int HH;\r
+ public int SD;\r
+ public int BD;\r
+ public int HT;\r
+ public int LT;\r
+ public int CY;\r
+ public int FT;\r
+ public int HHO;\r
+ public int RD;\r
+ public int LC;\r
+ public int Guitar;\r
+ public int Bass;\r
+ public int this[ int index ]\r
+ {\r
+ get\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ return this.HH;\r
+\r
+ case 1:\r
+ return this.SD;\r
+\r
+ case 2:\r
+ return this.BD;\r
+\r
+ case 3:\r
+ return this.HT;\r
+\r
+ case 4:\r
+ return this.LT;\r
+\r
+ case 5:\r
+ return this.CY;\r
+\r
+ case 6:\r
+ return this.FT;\r
+\r
+ case 7:\r
+ return this.HHO;\r
+\r
+ case 8:\r
+ return this.RD;\r
+\r
+ case 9:\r
+ return this.LC;\r
+\r
+ case 10:\r
+ return this.Guitar;\r
+\r
+ case 11:\r
+ return this.Bass;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ set\r
+ {\r
+ if( value < 0 )\r
+ {\r
+ throw new ArgumentOutOfRangeException();\r
+ }\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ this.HH = value;\r
+ return;\r
+\r
+ case 1:\r
+ this.SD = value;\r
+ return;\r
+\r
+ case 2:\r
+ this.BD = value;\r
+ return;\r
+\r
+ case 3:\r
+ this.HT = value;\r
+ return;\r
+\r
+ case 4:\r
+ this.LT = value;\r
+ return;\r
+\r
+ case 5:\r
+ this.CY = value;\r
+ return;\r
+\r
+ case 6:\r
+ this.FT = value;\r
+ return;\r
+\r
+ case 7:\r
+ this.HHO = value;\r
+ return;\r
+\r
+ case 8:\r
+ this.RD = value;\r
+ return;\r
+\r
+ case 9:\r
+ this.LC = value;\r
+ return;\r
+\r
+ case 10:\r
+ this.Guitar = value;\r
+ return;\r
+\r
+ case 11:\r
+ this.Bass = value;\r
+ return;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ }\r
+ public int Drums\r
+ {\r
+ get\r
+ {\r
+ return ( ( ( ( ( ( ( ( ( this.HH + this.SD ) + this.BD ) + this.HT ) + this.LT ) + this.CY ) + this.FT ) + this.HHO ) + this.RD ) + this.LC );\r
+ }\r
+ }\r
+ }\r
+ \r
+ [StructLayout( LayoutKind.Sequential )]\r
+ public struct STRESULT\r
+ {\r
+ public string SS;\r
+ public string S;\r
+ public string A;\r
+ public string B;\r
+ public string C;\r
+ public string D;\r
+ public string E;\r
+ public string this[ int index ]\r
+ {\r
+ get\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ return this.SS;\r
+\r
+ case 1:\r
+ return this.S;\r
+\r
+ case 2:\r
+ return this.A;\r
+\r
+ case 3:\r
+ return this.B;\r
+\r
+ case 4:\r
+ return this.C;\r
+\r
+ case 5:\r
+ return this.D;\r
+\r
+ case 6:\r
+ return this.E;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ set\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ this.SS = value;\r
+ return;\r
+\r
+ case 1:\r
+ this.S = value;\r
+ return;\r
+\r
+ case 2:\r
+ this.A = value;\r
+ return;\r
+\r
+ case 3:\r
+ this.B = value;\r
+ return;\r
+\r
+ case 4:\r
+ this.C = value;\r
+ return;\r
+\r
+ case 5:\r
+ this.D = value;\r
+ return;\r
+\r
+ case 6:\r
+ this.E = value;\r
+ return;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ }\r
+ }\r
+ \r
+ [StructLayout( LayoutKind.Sequential )]\r
+ public struct STチップがある\r
+ {\r
+ public bool Drums;\r
+ public bool Guitar;\r
+ public bool Bass;\r
+ public bool HHOpen;\r
+ public bool Ride;\r
+ public bool LeftCymbal;\r
+ public bool OpenGuitar;\r
+ public bool OpenBass;\r
+ public bool this[ int index ]\r
+ {\r
+ get\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ return this.Drums;\r
+\r
+ case 1:\r
+ return this.Guitar;\r
+\r
+ case 2:\r
+ return this.Bass;\r
+\r
+ case 3:\r
+ return this.HHOpen;\r
+\r
+ case 4:\r
+ return this.Ride;\r
+\r
+ case 5:\r
+ return this.LeftCymbal;\r
+\r
+ case 6:\r
+ return this.OpenGuitar;\r
+\r
+ case 7:\r
+ return this.OpenBass;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ set\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ this.Drums = value;\r
+ return;\r
+\r
+ case 1:\r
+ this.Guitar = value;\r
+ return;\r
+\r
+ case 2:\r
+ this.Bass = value;\r
+ return;\r
+\r
+ case 3:\r
+ this.HHOpen = value;\r
+ return;\r
+\r
+ case 4:\r
+ this.Ride = value;\r
+ return;\r
+\r
+ case 5:\r
+ this.LeftCymbal = value;\r
+ return;\r
+\r
+ case 6:\r
+ this.OpenGuitar = value;\r
+ return;\r
+\r
+ case 7:\r
+ this.OpenBass = value;\r
+ return;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ }\r
+ }\r
+\r
+\r
+ // プロパティ\r
+\r
+ public int nBGMAdjust\r
+ {\r
+ get; \r
+ private set;\r
+ }\r
+ public string ARTIST;\r
+ public string BACKGROUND;\r
+ public string BACKGROUND_GR;\r
+ public double BASEBPM;\r
+ public bool BLACKCOLORKEY;\r
+ public double BPM;\r
+ public STチップがある bチップがある;\r
+ public string COMMENT;\r
+ public double db再生速度;\r
+ public E種別 e種別;\r
+ public string GENRE;\r
+ public bool HIDDENLEVEL;\r
+ public STDGBVALUE<int> LEVEL;\r
+ public Dictionary<int, CAVI> listAVI;\r
+ public Dictionary<int, CAVIPAN> listAVIPAN;\r
+ public Dictionary<int, CBGA> listBGA;\r
+ public Dictionary<int, CBGAPAN> listBGAPAN;\r
+ public Dictionary<int, CBMP> listBMP;\r
+ public Dictionary<int, CBMPTEX> listBMPTEX;\r
+ public Dictionary<int, CBPM> listBPM;\r
+ public List<CChip> listChip;\r
+ public Dictionary<int, CWAV> listWAV;\r
+ public string MIDIFILE;\r
+ public bool MIDINOTE;\r
+ public int MIDIレベル;\r
+ public STLANEINT n可視チップ数;\r
+ public const int n最大音数 = 4;\r
+ public const int n小節の解像度 = 0x180;\r
+ public string PANEL;\r
+ public string PATH_WAV;\r
+ public string PREIMAGE;\r
+ public string PREMOVIE;\r
+ public string PREVIEW;\r
+ public STRESULT RESULTIMAGE;\r
+ public STRESULT RESULTMOVIE;\r
+ public STRESULT RESULTSOUND;\r
+ public string SOUND_AUDIENCE;\r
+ public string SOUND_FULLCOMBO;\r
+ public string SOUND_NOWLOADING;\r
+ public string SOUND_STAGEFAILED;\r
+ public string STAGEFILE;\r
+ public string strハッシュofDTXファイル;\r
+ public string strファイル名;\r
+ public string strファイル名の絶対パス;\r
+ public string strフォルダ名;\r
+ public string TITLE;\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public CDTX()\r
+ {\r
+ this.TITLE = "";\r
+ this.ARTIST = "";\r
+ this.COMMENT = "";\r
+ this.PANEL = "";\r
+ this.GENRE = "";\r
+ this.PREVIEW = "";\r
+ this.PREIMAGE = "";\r
+ this.PREMOVIE = "";\r
+ this.STAGEFILE = "";\r
+ this.BACKGROUND = "";\r
+ this.BACKGROUND_GR = "";\r
+ this.PATH_WAV = "";\r
+ this.MIDIFILE = "";\r
+ this.SOUND_STAGEFAILED = "";\r
+ this.SOUND_FULLCOMBO = "";\r
+ this.SOUND_NOWLOADING = "";\r
+ this.SOUND_AUDIENCE = "";\r
+ this.BPM = 120.0;\r
+ this.BLACKCOLORKEY = true;\r
+ STDGBVALUE<int> stdgbvalue = new STDGBVALUE<int>();\r
+ stdgbvalue.Drums = 0;\r
+ stdgbvalue.Guitar = 0;\r
+ stdgbvalue.Bass = 0;\r
+ this.LEVEL = stdgbvalue;\r
+ STRESULT stresult4 = new STRESULT();\r
+ STRESULT stresult = stresult4;\r
+ stresult.SS = "";\r
+ stresult.S = "";\r
+ stresult.A = "";\r
+ stresult.B = "";\r
+ stresult.C = "";\r
+ stresult.D = "";\r
+ stresult.E = "";\r
+ this.RESULTIMAGE = stresult;\r
+ stresult4 = new STRESULT();\r
+ STRESULT stresult2 = stresult4;\r
+ stresult2.SS = "";\r
+ stresult2.S = "";\r
+ stresult2.A = "";\r
+ stresult2.B = "";\r
+ stresult2.C = "";\r
+ stresult2.D = "";\r
+ stresult2.E = "";\r
+ this.RESULTMOVIE = stresult2;\r
+ STRESULT stresult3 = new STRESULT();\r
+ stresult3.SS = "";\r
+ stresult3.S = "";\r
+ stresult3.A = "";\r
+ stresult3.B = "";\r
+ stresult3.C = "";\r
+ stresult3.D = "";\r
+ stresult3.E = "";\r
+ this.RESULTSOUND = stresult3;\r
+ this.db再生速度 = 1.0;\r
+ this.strハッシュofDTXファイル = "";\r
+ STチップがある stチップがある = new STチップがある();\r
+ stチップがある.Drums = false;\r
+ stチップがある.Guitar = false;\r
+ stチップがある.Bass = false;\r
+ stチップがある.HHOpen = false;\r
+ stチップがある.Ride = false;\r
+ stチップがある.LeftCymbal = false;\r
+ stチップがある.OpenGuitar = false;\r
+ stチップがある.OpenBass = false;\r
+ this.bチップがある = stチップがある;\r
+ this.strファイル名 = "";\r
+ this.strフォルダ名 = "";\r
+ this.strファイル名の絶対パス = "";\r
+ this.n無限管理WAV = new int[ 0x510 ];\r
+ this.n無限管理BPM = new int[ 0x510 ];\r
+ this.n無限管理VOL = new int[ 0x510 ];\r
+ this.n無限管理PAN = new int[ 0x510 ];\r
+ this.n無限管理SIZE = new int[ 0x510 ];\r
+ this.nRESULTIMAGE用優先順位 = new int[ 7 ];\r
+ this.nRESULTMOVIE用優先順位 = new int[ 7 ];\r
+ this.nRESULTSOUND用優先順位 = new int[ 7 ];\r
+ STGDAPARAM[] stgdaparamArray = new STGDAPARAM[ 0x3d ];\r
+ STGDAPARAM stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam = stgdaparam62;\r
+ stgdaparam.s = "TC";\r
+ stgdaparam.c = 3;\r
+ stgdaparamArray[ 0 ] = stgdaparam;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam2 = stgdaparam62;\r
+ stgdaparam2.s = "BL";\r
+ stgdaparam2.c = 2;\r
+ stgdaparamArray[ 1 ] = stgdaparam2;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam3 = stgdaparam62;\r
+ stgdaparam3.s = "GS";\r
+ stgdaparam3.c = 0x29;\r
+ stgdaparamArray[ 2 ] = stgdaparam3;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam4 = stgdaparam62;\r
+ stgdaparam4.s = "DS";\r
+ stgdaparam4.c = 0x30;\r
+ stgdaparamArray[ 3 ] = stgdaparam4;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam5 = stgdaparam62;\r
+ stgdaparam5.s = "FI";\r
+ stgdaparam5.c = 0x53;\r
+ stgdaparamArray[ 4 ] = stgdaparam5;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam6 = stgdaparam62;\r
+ stgdaparam6.s = "HH";\r
+ stgdaparam6.c = 0x11;\r
+ stgdaparamArray[ 5 ] = stgdaparam6;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam7 = stgdaparam62;\r
+ stgdaparam7.s = "SD";\r
+ stgdaparam7.c = 0x12;\r
+ stgdaparamArray[ 6 ] = stgdaparam7;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam8 = stgdaparam62;\r
+ stgdaparam8.s = "BD";\r
+ stgdaparam8.c = 0x13;\r
+ stgdaparamArray[ 7 ] = stgdaparam8;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam9 = stgdaparam62;\r
+ stgdaparam9.s = "HT";\r
+ stgdaparam9.c = 20;\r
+ stgdaparamArray[ 8 ] = stgdaparam9;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam10 = stgdaparam62;\r
+ stgdaparam10.s = "LT";\r
+ stgdaparam10.c = 0x15;\r
+ stgdaparamArray[ 9 ] = stgdaparam10;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam11 = stgdaparam62;\r
+ stgdaparam11.s = "CY";\r
+ stgdaparam11.c = 0x16;\r
+ stgdaparamArray[ 10 ] = stgdaparam11;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam12 = stgdaparam62;\r
+ stgdaparam12.s = "G1";\r
+ stgdaparam12.c = 0x21;\r
+ stgdaparamArray[ 11 ] = stgdaparam12;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam13 = stgdaparam62;\r
+ stgdaparam13.s = "G2";\r
+ stgdaparam13.c = 0x22;\r
+ stgdaparamArray[ 12 ] = stgdaparam13;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam14 = stgdaparam62;\r
+ stgdaparam14.s = "G3";\r
+ stgdaparam14.c = 0x23;\r
+ stgdaparamArray[ 13 ] = stgdaparam14;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam15 = stgdaparam62;\r
+ stgdaparam15.s = "G4";\r
+ stgdaparam15.c = 0x24;\r
+ stgdaparamArray[ 14 ] = stgdaparam15;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam16 = stgdaparam62;\r
+ stgdaparam16.s = "G5";\r
+ stgdaparam16.c = 0x25;\r
+ stgdaparamArray[ 15 ] = stgdaparam16;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam17 = stgdaparam62;\r
+ stgdaparam17.s = "G6";\r
+ stgdaparam17.c = 0x26;\r
+ stgdaparamArray[ 0x10 ] = stgdaparam17;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam18 = stgdaparam62;\r
+ stgdaparam18.s = "G7";\r
+ stgdaparam18.c = 0x27;\r
+ stgdaparamArray[ 0x11 ] = stgdaparam18;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam19 = stgdaparam62;\r
+ stgdaparam19.s = "GW";\r
+ stgdaparam19.c = 40;\r
+ stgdaparamArray[ 0x12 ] = stgdaparam19;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam20 = stgdaparam62;\r
+ stgdaparam20.s = "01";\r
+ stgdaparam20.c = 0x61;\r
+ stgdaparamArray[ 0x13 ] = stgdaparam20;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam21 = stgdaparam62;\r
+ stgdaparam21.s = "02";\r
+ stgdaparam21.c = 0x62;\r
+ stgdaparamArray[ 20 ] = stgdaparam21;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam22 = stgdaparam62;\r
+ stgdaparam22.s = "03";\r
+ stgdaparam22.c = 0x63;\r
+ stgdaparamArray[ 0x15 ] = stgdaparam22;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam23 = stgdaparam62;\r
+ stgdaparam23.s = "04";\r
+ stgdaparam23.c = 100;\r
+ stgdaparamArray[ 0x16 ] = stgdaparam23;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam24 = stgdaparam62;\r
+ stgdaparam24.s = "05";\r
+ stgdaparam24.c = 0x65;\r
+ stgdaparamArray[ 0x17 ] = stgdaparam24;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam25 = stgdaparam62;\r
+ stgdaparam25.s = "06";\r
+ stgdaparam25.c = 0x66;\r
+ stgdaparamArray[ 0x18 ] = stgdaparam25;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam26 = stgdaparam62;\r
+ stgdaparam26.s = "07";\r
+ stgdaparam26.c = 0x67;\r
+ stgdaparamArray[ 0x19 ] = stgdaparam26;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam27 = stgdaparam62;\r
+ stgdaparam27.s = "08";\r
+ stgdaparam27.c = 0x68;\r
+ stgdaparamArray[ 0x1a ] = stgdaparam27;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam28 = stgdaparam62;\r
+ stgdaparam28.s = "09";\r
+ stgdaparam28.c = 0x69;\r
+ stgdaparamArray[ 0x1b ] = stgdaparam28;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam29 = stgdaparam62;\r
+ stgdaparam29.s = "0A";\r
+ stgdaparam29.c = 0x70;\r
+ stgdaparamArray[ 0x1c ] = stgdaparam29;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam30 = stgdaparam62;\r
+ stgdaparam30.s = "0B";\r
+ stgdaparam30.c = 0x71;\r
+ stgdaparamArray[ 0x1d ] = stgdaparam30;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam31 = stgdaparam62;\r
+ stgdaparam31.s = "0C";\r
+ stgdaparam31.c = 0x72;\r
+ stgdaparamArray[ 30 ] = stgdaparam31;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam32 = stgdaparam62;\r
+ stgdaparam32.s = "0D";\r
+ stgdaparam32.c = 0x73;\r
+ stgdaparamArray[ 0x1f ] = stgdaparam32;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam33 = stgdaparam62;\r
+ stgdaparam33.s = "0E";\r
+ stgdaparam33.c = 0x74;\r
+ stgdaparamArray[ 0x20 ] = stgdaparam33;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam34 = stgdaparam62;\r
+ stgdaparam34.s = "0F";\r
+ stgdaparam34.c = 0x75;\r
+ stgdaparamArray[ 0x21 ] = stgdaparam34;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam35 = stgdaparam62;\r
+ stgdaparam35.s = "10";\r
+ stgdaparam35.c = 0x76;\r
+ stgdaparamArray[ 0x22 ] = stgdaparam35;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam36 = stgdaparam62;\r
+ stgdaparam36.s = "11";\r
+ stgdaparam36.c = 0x77;\r
+ stgdaparamArray[ 0x23 ] = stgdaparam36;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam37 = stgdaparam62;\r
+ stgdaparam37.s = "12";\r
+ stgdaparam37.c = 120;\r
+ stgdaparamArray[ 0x24 ] = stgdaparam37;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam38 = stgdaparam62;\r
+ stgdaparam38.s = "13";\r
+ stgdaparam38.c = 0x79;\r
+ stgdaparamArray[ 0x25 ] = stgdaparam38;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam39 = stgdaparam62;\r
+ stgdaparam39.s = "14";\r
+ stgdaparam39.c = 0x80;\r
+ stgdaparamArray[ 0x26 ] = stgdaparam39;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam40 = stgdaparam62;\r
+ stgdaparam40.s = "15";\r
+ stgdaparam40.c = 0x81;\r
+ stgdaparamArray[ 0x27 ] = stgdaparam40;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam41 = stgdaparam62;\r
+ stgdaparam41.s = "16";\r
+ stgdaparam41.c = 130;\r
+ stgdaparamArray[ 40 ] = stgdaparam41;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam42 = stgdaparam62;\r
+ stgdaparam42.s = "17";\r
+ stgdaparam42.c = 0x83;\r
+ stgdaparamArray[ 0x29 ] = stgdaparam42;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam43 = stgdaparam62;\r
+ stgdaparam43.s = "18";\r
+ stgdaparam43.c = 0x84;\r
+ stgdaparamArray[ 0x2a ] = stgdaparam43;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam44 = stgdaparam62;\r
+ stgdaparam44.s = "19";\r
+ stgdaparam44.c = 0x85;\r
+ stgdaparamArray[ 0x2b ] = stgdaparam44;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam45 = stgdaparam62;\r
+ stgdaparam45.s = "1A";\r
+ stgdaparam45.c = 0x86;\r
+ stgdaparamArray[ 0x2c ] = stgdaparam45;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam46 = stgdaparam62;\r
+ stgdaparam46.s = "1B";\r
+ stgdaparam46.c = 0x87;\r
+ stgdaparamArray[ 0x2d ] = stgdaparam46;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam47 = stgdaparam62;\r
+ stgdaparam47.s = "1C";\r
+ stgdaparam47.c = 0x88;\r
+ stgdaparamArray[ 0x2e ] = stgdaparam47;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam48 = stgdaparam62;\r
+ stgdaparam48.s = "1D";\r
+ stgdaparam48.c = 0x89;\r
+ stgdaparamArray[ 0x2f ] = stgdaparam48;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam49 = stgdaparam62;\r
+ stgdaparam49.s = "1E";\r
+ stgdaparam49.c = 0x90;\r
+ stgdaparamArray[ 0x30 ] = stgdaparam49;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam50 = stgdaparam62;\r
+ stgdaparam50.s = "1F";\r
+ stgdaparam50.c = 0x91;\r
+ stgdaparamArray[ 0x31 ] = stgdaparam50;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam51 = stgdaparam62;\r
+ stgdaparam51.s = "20";\r
+ stgdaparam51.c = 0x92;\r
+ stgdaparamArray[ 50 ] = stgdaparam51;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam52 = stgdaparam62;\r
+ stgdaparam52.s = "B1";\r
+ stgdaparam52.c = 0xa1;\r
+ stgdaparamArray[ 0x33 ] = stgdaparam52;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam53 = stgdaparam62;\r
+ stgdaparam53.s = "B2";\r
+ stgdaparam53.c = 0xa2;\r
+ stgdaparamArray[ 0x34 ] = stgdaparam53;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam54 = stgdaparam62;\r
+ stgdaparam54.s = "B3";\r
+ stgdaparam54.c = 0xa3;\r
+ stgdaparamArray[ 0x35 ] = stgdaparam54;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam55 = stgdaparam62;\r
+ stgdaparam55.s = "B4";\r
+ stgdaparam55.c = 0xa4;\r
+ stgdaparamArray[ 0x36 ] = stgdaparam55;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam56 = stgdaparam62;\r
+ stgdaparam56.s = "B5";\r
+ stgdaparam56.c = 0xa5;\r
+ stgdaparamArray[ 0x37 ] = stgdaparam56;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam57 = stgdaparam62;\r
+ stgdaparam57.s = "B6";\r
+ stgdaparam57.c = 0xa6;\r
+ stgdaparamArray[ 0x38 ] = stgdaparam57;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam58 = stgdaparam62;\r
+ stgdaparam58.s = "B7";\r
+ stgdaparam58.c = 0xa7;\r
+ stgdaparamArray[ 0x39 ] = stgdaparam58;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam59 = stgdaparam62;\r
+ stgdaparam59.s = "BW";\r
+ stgdaparam59.c = 0xa8;\r
+ stgdaparamArray[ 0x3a ] = stgdaparam59;\r
+ stgdaparam62 = new STGDAPARAM();\r
+ STGDAPARAM stgdaparam60 = stgdaparam62;\r
+ stgdaparam60.s = "G0";\r
+ stgdaparam60.c = 0x20;\r
+ stgdaparamArray[ 0x3b ] = stgdaparam60;\r
+ STGDAPARAM stgdaparam61 = new STGDAPARAM();\r
+ stgdaparam61.s = "B0";\r
+ stgdaparam61.c = 160;\r
+ stgdaparamArray[ 60 ] = stgdaparam61;\r
+ this.stGDAParam = stgdaparamArray;\r
+ this.nBGMAdjust = 0;\r
+ }\r
+ public CDTX( string str全入力文字列 )\r
+ : this()\r
+ {\r
+ this.On活性化();\r
+ this.t入力・全入力文字列から( str全入力文字列 );\r
+ }\r
+ public CDTX( string strファイル名, bool bヘッダのみ )\r
+ : this()\r
+ {\r
+ this.On活性化();\r
+ this.t入力( strファイル名, bヘッダのみ );\r
+ }\r
+ public CDTX( string str全入力文字列, double db再生速度, int nBGMAdjust )\r
+ : this()\r
+ {\r
+ this.On活性化();\r
+ this.t入力・全入力文字列から( str全入力文字列, db再生速度, nBGMAdjust );\r
+ }\r
+ public CDTX( string strファイル名, bool bヘッダのみ, double db再生速度, int nBGMAdjust )\r
+ : this()\r
+ {\r
+ this.On活性化();\r
+ this.t入力( strファイル名, bヘッダのみ, db再生速度, nBGMAdjust );\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ public int nモニタを考慮した音量( E楽器パート part )\r
+ {\r
+ CConfigIni configIni = CDTXMania.ConfigIni;\r
+ switch( part )\r
+ {\r
+ case E楽器パート.DRUMS:\r
+ if( configIni.b演奏音を強調する.Drums )\r
+ {\r
+ return configIni.n自動再生音量;\r
+ }\r
+ return configIni.n手動再生音量;\r
+\r
+ case E楽器パート.GUITAR:\r
+ if( configIni.b演奏音を強調する.Guitar )\r
+ {\r
+ return configIni.n自動再生音量;\r
+ }\r
+ return configIni.n手動再生音量;\r
+\r
+ case E楽器パート.BASS:\r
+ if( configIni.b演奏音を強調する.Bass )\r
+ {\r
+ return configIni.n自動再生音量;\r
+ }\r
+ return configIni.n手動再生音量;\r
+ }\r
+ if( ( !configIni.b演奏音を強調する.Drums && !configIni.b演奏音を強調する.Guitar ) && !configIni.b演奏音を強調する.Bass )\r
+ {\r
+ return configIni.n手動再生音量;\r
+ }\r
+ return configIni.n自動再生音量;\r
+ }\r
+ public void tAVIの読み込み()\r
+ {\r
+ if( this.listAVI != null )\r
+ {\r
+ foreach( CAVI cavi in this.listAVI.Values )\r
+ {\r
+ cavi.OnDeviceCreated();\r
+ }\r
+ }\r
+ if( !this.bヘッダのみ )\r
+ {\r
+ foreach( CChip chip in this.listChip )\r
+ {\r
+ if( chip.nチャンネル番号 == 0x54 )\r
+ {\r
+ chip.eAVI種別 = EAVI種別.Unknown;\r
+ chip.rAVI = null;\r
+ chip.rAVIPan = null;\r
+ if( this.listAVIPAN.ContainsKey( chip.n整数値 ) )\r
+ {\r
+ CAVIPAN cavipan = this.listAVIPAN[ chip.n整数値 ];\r
+ if( this.listAVI.ContainsKey( cavipan.nAVI番号 ) && ( this.listAVI[ cavipan.nAVI番号 ].avi != null ) )\r
+ {\r
+ chip.eAVI種別 = EAVI種別.AVIPAN;\r
+ chip.rAVI = this.listAVI[ cavipan.nAVI番号 ];\r
+ chip.rAVIPan = cavipan;\r
+ continue;\r
+ }\r
+ }\r
+ if( this.listAVI.ContainsKey( chip.n整数値 ) && ( this.listAVI[ chip.n整数値 ].avi != null ) )\r
+ {\r
+ chip.eAVI種別 = EAVI種別.AVI;\r
+ chip.rAVI = this.listAVI[ chip.n整数値 ];\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ public void tBMP_BMPTEXの読み込み()\r
+ {\r
+ if( this.listBMP != null )\r
+ {\r
+ foreach( CBMP cbmp in this.listBMP.Values )\r
+ {\r
+ cbmp.OnDeviceCreated();\r
+ }\r
+ }\r
+ if( this.listBMPTEX != null )\r
+ {\r
+ foreach( CBMPTEX cbmptex in this.listBMPTEX.Values )\r
+ {\r
+ cbmptex.OnDeviceCreated();\r
+ }\r
+ }\r
+ if( !this.bヘッダのみ )\r
+ {\r
+ foreach( CChip chip in this.listChip )\r
+ {\r
+ if( ( ( ( chip.nチャンネル番号 == 4 ) || ( chip.nチャンネル番号 == 7 ) ) || ( ( chip.nチャンネル番号 >= 0x55 ) && ( chip.nチャンネル番号 <= 0x59 ) ) ) || ( chip.nチャンネル番号 == 0x60 ) )\r
+ {\r
+ chip.eBGA種別 = EBGA種別.Unknown;\r
+ chip.rBMP = null;\r
+ chip.rBMPTEX = null;\r
+ chip.rBGA = null;\r
+ chip.rBGAPan = null;\r
+ if( this.listBGAPAN.ContainsKey( chip.n整数値 ) )\r
+ {\r
+ CBGAPAN cbgapan = this.listBGAPAN[ chip.n整数値 ];\r
+ if( this.listBMPTEX.ContainsKey( cbgapan.nBMP番号 ) && this.listBMPTEX[ cbgapan.nBMP番号 ].bUse )\r
+ {\r
+ chip.eBGA種別 = EBGA種別.BGAPAN;\r
+ chip.rBMPTEX = this.listBMPTEX[ cbgapan.nBMP番号 ];\r
+ chip.rBGAPan = cbgapan;\r
+ continue;\r
+ }\r
+ if( this.listBMP.ContainsKey( cbgapan.nBMP番号 ) && this.listBMP[ cbgapan.nBMP番号 ].bUse )\r
+ {\r
+ chip.eBGA種別 = EBGA種別.BGAPAN;\r
+ chip.rBMP = this.listBMP[ cbgapan.nBMP番号 ];\r
+ chip.rBGAPan = cbgapan;\r
+ continue;\r
+ }\r
+ }\r
+ if( this.listBGA.ContainsKey( chip.n整数値 ) )\r
+ {\r
+ CBGA cbga = this.listBGA[ chip.n整数値 ];\r
+ if( this.listBMPTEX.ContainsKey( cbga.nBMP番号 ) && this.listBMPTEX[ cbga.nBMP番号 ].bUse )\r
+ {\r
+ chip.eBGA種別 = EBGA種別.BGA;\r
+ chip.rBMPTEX = this.listBMPTEX[ cbga.nBMP番号 ];\r
+ chip.rBGA = cbga;\r
+ continue;\r
+ }\r
+ if( this.listBMP.ContainsKey( cbga.nBMP番号 ) && this.listBMP[ cbga.nBMP番号 ].bUse )\r
+ {\r
+ chip.eBGA種別 = EBGA種別.BGA;\r
+ chip.rBMP = this.listBMP[ cbga.nBMP番号 ];\r
+ chip.rBGA = cbga;\r
+ continue;\r
+ }\r
+ }\r
+ if( this.listBMPTEX.ContainsKey( chip.n整数値 ) && this.listBMPTEX[ chip.n整数値 ].bUse )\r
+ {\r
+ chip.eBGA種別 = EBGA種別.BMPTEX;\r
+ chip.rBMPTEX = this.listBMPTEX[ chip.n整数値 ];\r
+ continue;\r
+ }\r
+ if( this.listBMP.ContainsKey( chip.n整数値 ) && this.listBMP[ chip.n整数値 ].bUse )\r
+ {\r
+ chip.eBGA種別 = EBGA種別.BMP;\r
+ chip.rBMP = this.listBMP[ chip.n整数値 ];\r
+ continue;\r
+ }\r
+ }\r
+ if( ( ( ( chip.nチャンネル番号 == 0xc4 ) || ( chip.nチャンネル番号 == 0xc7 ) ) || ( ( chip.nチャンネル番号 >= 0xd5 ) && ( chip.nチャンネル番号 <= 0xd9 ) ) ) || ( chip.nチャンネル番号 == 0xe0 ) )\r
+ {\r
+ chip.eBGA種別 = EBGA種別.Unknown;\r
+ chip.rBMP = null;\r
+ chip.rBMPTEX = null;\r
+ chip.rBGA = null;\r
+ chip.rBGAPan = null;\r
+ if( this.listBMPTEX.ContainsKey( chip.n整数値 ) && this.listBMPTEX[ chip.n整数値 ].bUse )\r
+ {\r
+ chip.eBGA種別 = EBGA種別.BMPTEX;\r
+ chip.rBMPTEX = this.listBMPTEX[ chip.n整数値 ];\r
+ }\r
+ else if( this.listBMP.ContainsKey( chip.n整数値 ) && this.listBMP[ chip.n整数値 ].bUse )\r
+ {\r
+ chip.eBGA種別 = EBGA種別.BMP;\r
+ chip.rBMP = this.listBMP[ chip.n整数値 ];\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ public void tWave再生位置自動補正()\r
+ {\r
+ foreach( CWAV cwav in this.listWAV.Values )\r
+ {\r
+ this.tWave再生位置自動補正( cwav );\r
+ }\r
+ }\r
+ public void tWave再生位置自動補正( CWAV wc )\r
+ {\r
+ for( int i = 0; i < 4; i++ )\r
+ {\r
+ if( ( ( wc.rSound[ i ] != null ) && wc.rSound[ i ].b再生中 ) && ( wc.rSound[ i ].n総演奏時間ms >= 0x1388 ) )\r
+ {\r
+ long num2 = CDTXMania.Timer.nシステム時刻;\r
+ if( num2 > wc.n再生開始時刻[ i ] )\r
+ {\r
+ long num3 = num2 - wc.n再生開始時刻[ i ];\r
+ wc.rSound[ i ].t再生位置を変更する( wc.rSound[ i ].t時刻から位置を返す( num3 ) );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ public void tWavの再生停止( int nWaveの内部番号 )\r
+ {\r
+ if( this.listWAV.ContainsKey( nWaveの内部番号 ) )\r
+ {\r
+ CWAV cwav = this.listWAV[ nWaveの内部番号 ];\r
+ for( int i = 0; i < 4; i++ )\r
+ {\r
+ if( cwav.rSound[ i ] != null )\r
+ {\r
+ cwav.rSound[ i ].t再生を停止する();\r
+ }\r
+ }\r
+ }\r
+ }\r
+ public void tWAVの読み込み()\r
+ {\r
+ foreach( CWAV cwav in this.listWAV.Values )\r
+ {\r
+ string str = string.IsNullOrEmpty( this.PATH_WAV ) ? this.strフォルダ名 : this.PATH_WAV;\r
+ str = str + cwav.strファイル名;\r
+ try\r
+ {\r
+ for( int i = 0; i < 4; i++ )\r
+ {\r
+ try\r
+ {\r
+ cwav.rSound[ i ] = CDTXMania.Sound管理.tサウンドを生成する( str );\r
+ cwav.rSound[ i ].n音量 = 100;\r
+ if( ( i == 0 ) && CDTXMania.ConfigIni.bLog作成解放ログ出力 )\r
+ {\r
+ Trace.TraceInformation( "サウンドを作成しました。({3})({0})({1})({2}bytes)", new object[] { cwav.strコメント文, str, cwav.rSound[ i ].nサウンドバッファサイズ, cwav.rSound[ i ].bストリーム再生する ? "Stream" : "OnMemory" } );\r
+ }\r
+ }\r
+ catch\r
+ {\r
+ cwav.rSound[ i ] = null;\r
+ if( i == 0 )\r
+ {\r
+ Trace.TraceError( "サウンドの作成に失敗しました。({0})({1})", new object[] { cwav.strコメント文, str } );\r
+ }\r
+ }\r
+ if( ( cwav.rSound[ i ] != null ) && cwav.rSound[ i ].bストリーム再生する )\r
+ {\r
+ break;\r
+ }\r
+ }\r
+ continue;\r
+ }\r
+ catch( Exception exception )\r
+ {\r
+ Trace.TraceError( "サウンドの生成に失敗しました。({0})({1})({2})", new object[] { exception.Message, cwav.strコメント文, str } );\r
+ for( int j = 0; j < 4; j++ )\r
+ {\r
+ cwav.rSound[ j ] = null;\r
+ }\r
+ continue;\r
+ }\r
+ }\r
+ }\r
+ public static string tZZ( int n )\r
+ {\r
+ if( ( n < 0 ) || ( n >= 0x510 ) )\r
+ {\r
+ return "!!";\r
+ }\r
+ string str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";\r
+ return new string( new char[] { str[ n / 0x24 ], str[ n % 0x24 ] } );\r
+ }\r
+\r
+ /// <summary>\r
+ /// ギターのレーンビットパターン\r
+ /// </summary>\r
+ public enum Eレーンビットパターン\r
+ {\r
+ OPEN = 0,\r
+ xxB = 1,\r
+ xGx = 2,\r
+ xGB = 3,\r
+ Rxx = 4,\r
+ RxB = 5,\r
+ RGx = 6,\r
+ RGB = 7\r
+ };\r
+ public void tギターとベースのランダム化(E楽器パート part, Eランダムモード eRandom)\r
+ {\r
+ if( ( ( part == E楽器パート.GUITAR ) || ( part == E楽器パート.BASS ) ) && ( eRandom != Eランダムモード.OFF ) )\r
+ {\r
+ int[,] nランダムレーン候補 = new int[ , ] { { 0, 1, 2, 3, 4, 5, 6, 7 }, { 0, 2, 1, 3, 4, 6, 5, 7 }, { 0, 1, 4, 5, 2, 3, 6, 7 }, { 0, 2, 4, 6, 1, 3, 5, 7 }, { 0, 4, 1, 5, 2, 6, 3, 7 }, { 0, 4, 2, 6, 1, 5, 3, 7 } };\r
+ int n小節番号 = -10000;\r
+ int n小節内乱数6通り = 0;\r
+ // int GOTO_END = 0; // gotoの飛び先のダミーコードで使うダミー変数\r
+ foreach( CChip chip in this.listChip )\r
+ {\r
+ int nRGBレーンビットパターン;\r
+ int n新RGBレーンビットパターン = 0; // 「未割り当てのローカル変数」ビルドエラー回避のために0を初期値に設定\r
+ bool flag;\r
+ if( ( chip.n発声位置 / 384 ) != n小節番号 ) // 小節が変化したら\r
+ {\r
+ n小節番号 = chip.n発声位置 / 384;\r
+ n小節内乱数6通り = CDTXMania.Random.Next( 6 );\r
+ }\r
+ int nランダム化前チャンネル番号 = chip.nチャンネル番号;\r
+ if( ( ( ( part != E楽器パート.GUITAR ) || ( 0x20 > nランダム化前チャンネル番号 ) ) || ( nランダム化前チャンネル番号 > 0x27 ) )\r
+ && ( ( ( part != E楽器パート.BASS ) || ( 0xA0 > nランダム化前チャンネル番号 ) ) || ( nランダム化前チャンネル番号 > 0xa7 ) )\r
+ )\r
+ {\r
+ continue;\r
+ }\r
+ switch( eRandom )\r
+ {\r
+ case Eランダムモード.RANDOM: // 1小節単位でレーンのR/G/Bがランダムに入れ替わる\r
+ chip.nチャンネル番号 = ( nランダム化前チャンネル番号 & 0xF0 ) | nランダムレーン候補[ n小節内乱数6通り, nランダム化前チャンネル番号 & 0x07 ];\r
+ continue; // goto Label_02C4;\r
+\r
+ case Eランダムモード.SUPERRANDOM: // チップごとにR/G/Bがランダムで入れ替わる(レーンの本数までは変わらない)。\r
+ chip.nチャンネル番号 = ( nランダム化前チャンネル番号 & 0xF0 ) | nランダムレーン候補[ CDTXMania.Random.Next( 6 ), nランダム化前チャンネル番号 & 0x07 ];\r
+ continue; // goto Label_02C4;\r
+\r
+ case Eランダムモード.HYPERRANDOM: // レーンの本数も変わる\r
+ nRGBレーンビットパターン = nランダム化前チャンネル番号 & 7;\r
+ // n新RGBレーンビットパターン = (int)Eレーンビットパターン.OPEN; // この値は結局未使用なので削除\r
+ flag = ((part == E楽器パート.GUITAR) && this.bチップがある.OpenGuitar) || ((part == E楽器パート.BASS) && this.bチップがある.OpenBass); // #23546 2010.10.28 yyagi fixed (bチップがある.Bass→bチップがある.OpenBass)\r
+ if (((nRGBレーンビットパターン != (int)Eレーンビットパターン.xxB) && (nRGBレーンビットパターン != (int)Eレーンビットパターン.xGx)) && (nRGBレーンビットパターン != (int)Eレーンビットパターン.Rxx)) // xxB, xGx, Rxx レーン1本相当\r
+ {\r
+ break; // レーン1本相当でなければ、とりあえず先に進む\r
+ }\r
+ n新RGBレーンビットパターン = CDTXMania.Random.Next( 6 ) + 1; // レーン1本相当なら、レーン1本か2本(1~6)に変化して終了\r
+ goto Label_02B2;\r
+\r
+ default:\r
+ continue; // goto Label_02C4;\r
+ }\r
+ switch( nRGBレーンビットパターン )\r
+ {\r
+ case (int)Eレーンビットパターン.xGB: // xGB レーン2本相当\r
+ case (int)Eレーンビットパターン.RxB: // RxB\r
+ case (int)Eレーンビットパターン.RGx: // RGx\r
+ n新RGBレーンビットパターン = flag ? CDTXMania.Random.Next( 8 ) : ( CDTXMania.Random.Next( 7 ) + 1 ); // OPENあり譜面ならOPENを含むランダム, OPENなし譜面ならOPENを含まないランダム\r
+ goto Label_02B2;\r
+\r
+ default:\r
+ if( nRGBレーンビットパターン == (int)Eレーンビットパターン.RGB ) // RGB レーン3本相当\r
+ {\r
+ if( flag ) // OPENあり譜面の場合\r
+ {\r
+ int n乱数パーセント = CDTXMania.Random.Next( 100 );\r
+ if( n乱数パーセント < 30 )\r
+ {\r
+ n新RGBレーンビットパターン = (int)Eレーンビットパターン.OPEN;\r
+ }\r
+ else if( n乱数パーセント < 60 )\r
+ {\r
+ n新RGBレーンビットパターン = (int)Eレーンビットパターン.RGB;\r
+ }\r
+ else if( n乱数パーセント < 85 )\r
+ {\r
+ switch( CDTXMania.Random.Next( 3 ) )\r
+ {\r
+ case 0:\r
+ n新RGBレーンビットパターン = (int)Eレーンビットパターン.xGB;\r
+ goto Label_02B2;\r
+\r
+ case 1:\r
+ n新RGBレーンビットパターン = (int)Eレーンビットパターン.RxB;\r
+ goto Label_02B2;\r
+ }\r
+ n新RGBレーンビットパターン = (int)Eレーンビットパターン.RGx;\r
+ }\r
+ else // OPENでない場合\r
+ {\r
+ switch( CDTXMania.Random.Next( 3 ) )\r
+ {\r
+ case 0:\r
+ n新RGBレーンビットパターン = (int)Eレーンビットパターン.xxB;\r
+ goto Label_02B2;\r
+\r
+ case 1:\r
+ n新RGBレーンビットパターン = (int)Eレーンビットパターン.xGx;\r
+ goto Label_02B2;\r
+ }\r
+ n新RGBレーンビットパターン = (int)Eレーンビットパターン.Rxx;\r
+ }\r
+ }\r
+ else // OPENなし譜面の場合\r
+ {\r
+ int n乱数パーセント = CDTXMania.Random.Next( 100 );\r
+ if( n乱数パーセント < 60 )\r
+ {\r
+ n新RGBレーンビットパターン = (int)Eレーンビットパターン.RGB;\r
+ }\r
+ else if( n乱数パーセント < 85 )\r
+ {\r
+ switch( CDTXMania.Random.Next( 3 ) )\r
+ {\r
+ case 0:\r
+ n新RGBレーンビットパターン = (int)Eレーンビットパターン.xGB;\r
+ goto Label_02B2;\r
+\r
+ case 1:\r
+ n新RGBレーンビットパターン = (int)Eレーンビットパターン.RxB;\r
+ goto Label_02B2;\r
+ }\r
+ n新RGBレーンビットパターン = (int)Eレーンビットパターン.RGx;\r
+ }\r
+ else\r
+ {\r
+ switch( CDTXMania.Random.Next( 3 ) )\r
+ {\r
+ case 0:\r
+ n新RGBレーンビットパターン = (int)Eレーンビットパターン.xxB;\r
+ goto Label_02B2;\r
+\r
+ case 1:\r
+ n新RGBレーンビットパターン = (int)Eレーンビットパターン.xGx;\r
+ goto Label_02B2;\r
+ }\r
+ n新RGBレーンビットパターン = (int)Eレーンビットパターン.Rxx;\r
+ }\r
+ }\r
+ }\r
+ goto Label_02B2;\r
+ }\r
+ Label_02B2:\r
+ chip.nチャンネル番号 = ( nランダム化前チャンネル番号 & 0xF0 ) | n新RGBレーンビットパターン;\r
+// Label_02C4:\r
+// GOTO_END++; // goto用のダミーコード\r
+ }\r
+ }\r
+ }\r
+ public void tチップの再生( CChip rChip, long n再生開始システム時刻ms, int nLane )\r
+ {\r
+ this.tチップの再生( rChip, n再生開始システム時刻ms, nLane, CDTXMania.ConfigIni.n自動再生音量, false, false );\r
+ }\r
+ public void tチップの再生( CChip rChip, long n再生開始システム時刻ms, int nLane, int nVol )\r
+ {\r
+ this.tチップの再生( rChip, n再生開始システム時刻ms, nLane, nVol, false, false );\r
+ }\r
+ public void tチップの再生( CChip rChip, long n再生開始システム時刻ms, int nLane, int nVol, bool bMIDIMonitor )\r
+ {\r
+ this.tチップの再生( rChip, n再生開始システム時刻ms, nLane, nVol, bMIDIMonitor, false );\r
+ }\r
+ public void tチップの再生( CChip pChip, long n再生開始システム時刻ms, int nLane, int nVol, bool bMIDIMonitor, bool bBad )\r
+ {\r
+ if( pChip.n整数値・内部番号 >= 0 )\r
+ {\r
+ if( ( nLane < 0 ) || ( nLane > 10 ) )\r
+ {\r
+ throw new ArgumentOutOfRangeException();\r
+ }\r
+ if( this.listWAV.ContainsKey( pChip.n整数値・内部番号 ) )\r
+ {\r
+ CWAV wc = this.listWAV[ pChip.n整数値・内部番号 ];\r
+ int index = wc.n現在再生中のサウンド番号 = ( wc.n現在再生中のサウンド番号 + 1 ) % 4;\r
+ if( ( wc.rSound[ 0 ] != null ) && wc.rSound[ 0 ].bストリーム再生する )\r
+ {\r
+ index = wc.n現在再生中のサウンド番号 = 0;\r
+ }\r
+ CSound sound = wc.rSound[ index ];\r
+ if( sound != null )\r
+ {\r
+ sound.n音量 = (int) ( ( (double) ( nVol * wc.n音量 ) ) / 100.0 );\r
+ sound.n位置 = wc.n位置;\r
+ if( bBad )\r
+ {\r
+ sound.db周波数倍率 = ( (float) ( 100 + ( ( ( CDTXMania.Random.Next( 3 ) + 1 ) * 7 ) * ( 1 - ( CDTXMania.Random.Next( 2 ) * 2 ) ) ) ) ) / 100f;\r
+ }\r
+ else\r
+ {\r
+ sound.db周波数倍率 = 1.0;\r
+ }\r
+ sound.db再生速度 = ( (double) CDTXMania.ConfigIni.n演奏速度 ) / 20.0;\r
+ sound.t再生を開始する();\r
+ }\r
+ wc.n再生開始時刻[ wc.n現在再生中のサウンド番号 ] = n再生開始システム時刻ms;\r
+ this.tWave再生位置自動補正( wc );\r
+ }\r
+ }\r
+ }\r
+ public void t各自動再生音チップの再生時刻を変更する( int nBGMAdjustの増減値 )\r
+ {\r
+ this.nBGMAdjust += nBGMAdjustの増減値;\r
+ for( int i = 0; i < this.listChip.Count; i++ )\r
+ {\r
+ int num2 = this.listChip[ i ].nチャンネル番号;\r
+ if( ( ( ( num2 == 1 ) || ( ( 0x61 <= num2 ) && ( num2 <= 0x69 ) ) ) || ( ( 0x70 <= num2 ) && ( num2 <= 0x79 ) ) ) || ( ( ( 0x80 <= num2 ) && ( num2 <= 0x89 ) ) || ( ( 0x90 <= num2 ) && ( num2 <= 0x92 ) ) ) )\r
+ {\r
+ CChip local1 = this.listChip[ i ];\r
+ local1.n発声時刻ms += nBGMAdjustの増減値;\r
+ }\r
+ }\r
+ foreach( CWAV cwav in this.listWAV.Values )\r
+ {\r
+ for( int j = 0; j < 4; j++ )\r
+ {\r
+ if( ( cwav.rSound[ j ] != null ) && cwav.rSound[ j ].b再生中 )\r
+ {\r
+ cwav.n再生開始時刻[ j ] += nBGMAdjustの増減値;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ public void t全チップの再生一時停止()\r
+ {\r
+ foreach( CWAV cwav in this.listWAV.Values )\r
+ {\r
+ for( int i = 0; i < 4; i++ )\r
+ {\r
+ if( ( cwav.rSound[ i ] != null ) && cwav.rSound[ i ].b再生中 )\r
+ {\r
+ cwav.rSound[ i ].t再生を一時停止する();\r
+ cwav.n一時停止時刻[ i ] = CDTXMania.Timer.nシステム時刻;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ public void t全チップの再生再開()\r
+ {\r
+ foreach( CWAV cwav in this.listWAV.Values )\r
+ {\r
+ for( int i = 0; i < 4; i++ )\r
+ {\r
+ if( ( cwav.rSound[ i ] != null ) && cwav.rSound[ i ].b一時停止中 )\r
+ {\r
+ long num1 = cwav.n一時停止時刻[ i ];\r
+ long num2 = cwav.n再生開始時刻[ i ];\r
+ cwav.rSound[ i ].t再生を再開する( cwav.n一時停止時刻[ i ] - cwav.n再生開始時刻[ i ] );\r
+ cwav.n再生開始時刻[ i ] += CDTXMania.Timer.nシステム時刻 - cwav.n一時停止時刻[ i ];\r
+ }\r
+ }\r
+ }\r
+ }\r
+ public void t全チップの再生停止()\r
+ {\r
+ foreach( CWAV cwav in this.listWAV.Values )\r
+ {\r
+ this.tWavの再生停止( cwav.n内部番号 );\r
+ }\r
+ }\r
+ public void t入力( string strファイル名, bool bヘッダのみ )\r
+ {\r
+ this.t入力( strファイル名, bヘッダのみ, 1.0, 0 );\r
+ }\r
+ public void t入力( string strファイル名, bool bヘッダのみ, double db再生速度, int nBGMAdjust )\r
+ {\r
+ this.bヘッダのみ = bヘッダのみ;\r
+ this.strファイル名の絶対パス = Path.GetFullPath( strファイル名 );\r
+ this.strファイル名 = Path.GetFileName( this.strファイル名の絶対パス );\r
+ this.strフォルダ名 = Path.GetDirectoryName( this.strファイル名の絶対パス ) + @"\";\r
+ string str3 = Path.GetExtension( this.strファイル名 ).ToLower();\r
+ if( str3 != null )\r
+ {\r
+ if( !( str3 == ".dtx" ) )\r
+ {\r
+ if( str3 == ".gda" )\r
+ {\r
+ this.e種別 = E種別.GDA;\r
+ }\r
+ else if( str3 == ".g2d" )\r
+ {\r
+ this.e種別 = E種別.G2D;\r
+ }\r
+ else if( str3 == ".bms" )\r
+ {\r
+ this.e種別 = E種別.BMS;\r
+ }\r
+ else if( str3 == ".bme" )\r
+ {\r
+ this.e種別 = E種別.BME;\r
+ }\r
+ else if( str3 == ".mid" )\r
+ {\r
+ this.e種別 = E種別.SMF;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ this.e種別 = E種別.DTX;\r
+ }\r
+ }\r
+ if( this.e種別 != E種別.SMF )\r
+ {\r
+ StreamReader reader = new StreamReader( strファイル名, Encoding.GetEncoding( "shift-jis" ) );\r
+ string str2 = reader.ReadToEnd();\r
+ reader.Close();\r
+ this.t入力・全入力文字列から( str2, db再生速度, nBGMAdjust );\r
+ }\r
+ else\r
+ {\r
+ Trace.TraceWarning( "SMF の演奏は未対応です。(検討中)" );\r
+ }\r
+ }\r
+ public void t入力・全入力文字列から( string str全入力文字列 )\r
+ {\r
+ this.t入力・全入力文字列から( str全入力文字列, 1.0, 0 );\r
+ }\r
+ public unsafe void t入力・全入力文字列から( string str全入力文字列, double db再生速度, int nBGMAdjust )\r
+ {\r
+ if( !string.IsNullOrEmpty( str全入力文字列 ) )\r
+ {\r
+ this.db再生速度 = db再生速度;\r
+ str全入力文字列 = str全入力文字列.Replace( Environment.NewLine, "\n" );\r
+ str全入力文字列 = str全入力文字列.Replace( '\t', ' ' );\r
+ str全入力文字列 = str全入力文字列 + "\n";\r
+ for( int j = 0; j < 0x510; j++ )\r
+ {\r
+ this.n無限管理WAV[ j ] = -j;\r
+ this.n無限管理BPM[ j ] = -j;\r
+ this.n無限管理VOL[ j ] = -j;\r
+ this.n無限管理PAN[ j ] = -10000 - j;\r
+ this.n無限管理SIZE[ j ] = -j;\r
+ }\r
+ this.n内部番号WAV1to = 1;\r
+ this.n内部番号BPM1to = 1;\r
+ this.bstackIFからENDIFをスキップする = new Stack<bool>();\r
+ this.bstackIFからENDIFをスキップする.Push( false );\r
+ this.n現在の乱数 = 0;\r
+ for( int k = 0; k < 7; k++ )\r
+ {\r
+ this.nRESULTIMAGE用優先順位[ k ] = 0;\r
+ this.nRESULTMOVIE用優先順位[ k ] = 0;\r
+ this.nRESULTSOUND用優先順位[ k ] = 0;\r
+ }\r
+ CharEnumerator ce = str全入力文字列.GetEnumerator();\r
+ if( ce.MoveNext() )\r
+ {\r
+ this.n現在の行数 = 1;\r
+ do\r
+ {\r
+ if( !this.t入力・空白と改行をスキップする( ref ce ) )\r
+ {\r
+ break;\r
+ }\r
+ if( ce.Current == '#' )\r
+ {\r
+ if( ce.MoveNext() )\r
+ {\r
+ StringBuilder builder = new StringBuilder( 0x20 );\r
+ if( this.t入力・コマンド文字列を抜き出す( ref ce, ref builder ) )\r
+ {\r
+ StringBuilder builder2 = new StringBuilder( 0x400 );\r
+ if( this.t入力・パラメータ文字列を抜き出す( ref ce, ref builder2 ) )\r
+ {\r
+ StringBuilder builder3 = new StringBuilder( 0x400 );\r
+ if( this.t入力・コメント文字列を抜き出す( ref ce, ref builder3 ) )\r
+ {\r
+ this.t入力・行解析( ref builder, ref builder2, ref builder3 );\r
+ this.n現在の行数++;\r
+ continue;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ break;\r
+ }\r
+ }\r
+ while( this.t入力・コメントをスキップする( ref ce ) );\r
+ this.n無限管理WAV = null;\r
+ this.n無限管理BPM = null;\r
+ this.n無限管理VOL = null;\r
+ this.n無限管理PAN = null;\r
+ this.n無限管理SIZE = null;\r
+ if( !this.bヘッダのみ )\r
+ {\r
+ int num26;\r
+ CBPM cbpm = null;\r
+ foreach( CBPM cbpm2 in this.listBPM.Values )\r
+ {\r
+ if( cbpm2.n表記上の番号 == 0 )\r
+ {\r
+ cbpm = cbpm2;\r
+ break;\r
+ }\r
+ }\r
+ if( cbpm == null )\r
+ {\r
+ cbpm = new CBPM();\r
+ cbpm.n内部番号 = this.n内部番号BPM1to++;\r
+ cbpm.n表記上の番号 = 0;\r
+ cbpm.dbBPM値 = 120.0;\r
+ this.listBPM.Add( cbpm.n内部番号, cbpm );\r
+ CChip item = new CChip();\r
+ item.n発声位置 = 0;\r
+ item.nチャンネル番号 = 8;\r
+ item.n整数値 = 0;\r
+ item.n整数値・内部番号 = cbpm.n内部番号;\r
+ this.listChip.Add( item );\r
+ }\r
+ else\r
+ {\r
+ CChip chip2 = new CChip();\r
+ chip2.n発声位置 = 0;\r
+ chip2.nチャンネル番号 = 8;\r
+ chip2.n整数値 = 0;\r
+ chip2.n整数値・内部番号 = cbpm.n内部番号;\r
+ this.listChip.Add( chip2 );\r
+ }\r
+ if( this.listBMP.ContainsKey( 0 ) )\r
+ {\r
+ CChip chip4 = new CChip();\r
+ chip4.n発声位置 = 0;\r
+ chip4.nチャンネル番号 = 4;\r
+ chip4.n整数値 = 0;\r
+ chip4.n整数値・内部番号 = 0;\r
+ CChip chip3 = chip4;\r
+ this.listChip.Add( chip3 );\r
+ }\r
+ foreach( CWAV cwav in this.listWAV.Values )\r
+ {\r
+ if( cwav.nチップサイズ < 0 )\r
+ {\r
+ cwav.nチップサイズ = 100;\r
+ }\r
+ if( cwav.n位置 <= -10000 )\r
+ {\r
+ cwav.n位置 = 0;\r
+ }\r
+ if( cwav.n音量 < 0 )\r
+ {\r
+ cwav.n音量 = 100;\r
+ }\r
+ }\r
+ foreach( CWAV cwav2 in this.listWAV.Values )\r
+ {\r
+ foreach( CChip chip5 in this.listChip )\r
+ {\r
+ if( chip5.n整数値・内部番号 == cwav2.n内部番号 )\r
+ {\r
+ chip5.dbチップサイズ倍率 = ( (double) cwav2.nチップサイズ ) / 100.0;\r
+ }\r
+ }\r
+ }\r
+ for( int m = 0xb1; m <= 0xbb; m++ )\r
+ {\r
+ foreach( CChip chip6 in this.listChip )\r
+ {\r
+ if( chip6.nチャンネル番号 == m )\r
+ {\r
+ CChip chip7 = new CChip();\r
+ chip7.n発声位置 = 0;\r
+ chip7.nチャンネル番号 = chip6.nチャンネル番号;\r
+ chip7.n整数値 = chip6.n整数値;\r
+ chip7.n整数値・内部番号 = chip6.n整数値・内部番号;\r
+ this.listChip.Add( chip7 );\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ if( this.listChip.Count > 0 )\r
+ {\r
+ this.listChip.Sort();\r
+ double num4 = 1.0;\r
+ int num5 = ( this.listChip[ this.listChip.Count - 1 ].n発声位置 + 0x180 ) - ( this.listChip[ this.listChip.Count - 1 ].n発声位置 % 0x180 );\r
+ for( int num6 = 0; num6 <= num5; num6 += 0x180 )\r
+ {\r
+ CChip chip8 = new CChip();\r
+ chip8.n発声位置 = num6;\r
+ chip8.nチャンネル番号 = 80;\r
+ chip8.n整数値 = 0x50f;\r
+ this.listChip.Add( chip8 );\r
+ }\r
+ this.listChip.Sort();\r
+ int num7 = 0;\r
+ int num8 = 0;\r
+ for( int num9 = 0; num9 < num5; num9 += 0x180 )\r
+ {\r
+ int num10 = 0;\r
+ while( ( num8 < this.listChip.Count ) && ( this.listChip[ num8 ].n発声位置 < ( num9 + 0x180 ) ) )\r
+ {\r
+ if( this.listChip[ num8 ].nチャンネル番号 == 0xc1 )\r
+ {\r
+ num10 = this.listChip[ num8 ].n発声位置 - num9;\r
+ }\r
+ num8++;\r
+ }\r
+ if( ( this.e種別 == E種別.BMS ) || ( this.e種別 == E種別.BME ) )\r
+ {\r
+ num4 = 1.0;\r
+ }\r
+ while( ( num7 < this.listChip.Count ) && ( this.listChip[ num7 ].n発声位置 <= num9 ) )\r
+ {\r
+ if( this.listChip[ num7 ].nチャンネル番号 == 2 )\r
+ {\r
+ num4 = this.listChip[ num7 ].db実数値;\r
+ }\r
+ num7++;\r
+ }\r
+ for( int num11 = 0; num11 < 100; num11++ )\r
+ {\r
+ int num12 = (int) ( ( (double) ( 0x180 * num11 ) ) / ( 4.0 * num4 ) );\r
+ if( ( num12 + num10 ) >= 0x180 )\r
+ {\r
+ break;\r
+ }\r
+ if( ( ( num12 + num10 ) % 0x180 ) != 0 )\r
+ {\r
+ CChip chip9 = new CChip();\r
+ chip9.n発声位置 = ( num9 + num12 ) + num10;\r
+ chip9.nチャンネル番号 = 0x51;\r
+ chip9.n整数値 = 0x50f;\r
+ this.listChip.Add( chip9 );\r
+ }\r
+ }\r
+ }\r
+ this.listChip.Sort();\r
+ }\r
+ bool flag = true;\r
+ Predicate<CChip> match = null;\r
+ for( int i = 0; i < this.listChip.Count; i++ )\r
+ {\r
+ int startIndex = i;\r
+ while( true )\r
+ {\r
+ if( match == null )\r
+ {\r
+ match = delegate( CChip c )\r
+ {\r
+ return ( c.nチャンネル番号 == 0xc2 ) && ( c.n発声位置 == this.listChip[ i ].n発声位置 );\r
+ };\r
+ }\r
+ startIndex = this.listChip.FindIndex( startIndex, match );\r
+ if( startIndex == -1 )\r
+ {\r
+ break;\r
+ }\r
+ if( this.listChip[ startIndex ].n整数値 == 1 )\r
+ {\r
+ flag = true;\r
+ }\r
+ if( this.listChip[ startIndex ].n整数値 == 2 )\r
+ {\r
+ flag = false;\r
+ }\r
+ startIndex++;\r
+ }\r
+ if( ( ( this.listChip[ i ].nチャンネル番号 == 80 ) || ( this.listChip[ i ].nチャンネル番号 == 0x51 ) ) && ( this.listChip[ i ].n整数値 == 0x50f ) )\r
+ {\r
+ this.listChip[ i ].b可視 = flag;\r
+ }\r
+ }\r
+ double num14 = 120.0;\r
+ double num15 = 1.0;\r
+ int num16 = 0;\r
+ int num17 = 0;\r
+ int num18 = 0;\r
+ foreach( CChip chip10 in this.listChip )\r
+ {\r
+ chip10.n発声時刻ms = num17 + ( (int) ( ( ( 0x271 * ( chip10.n発声位置 - num16 ) ) * num15 ) / num14 ) );\r
+ if( ( ( this.e種別 == E種別.BMS ) || ( this.e種別 == E種別.BME ) ) && ( ( num15 != 1.0 ) && ( ( chip10.n発声位置 / 0x180 ) != num18 ) ) )\r
+ {\r
+ num16 = chip10.n発声位置;\r
+ num17 = chip10.n発声時刻ms;\r
+ num15 = 1.0;\r
+ }\r
+ num18 = chip10.n発声位置 / 0x180;\r
+ num26 = chip10.nチャンネル番号;\r
+ switch( num26 )\r
+ {\r
+ case 2:\r
+ {\r
+ num16 = chip10.n発声位置;\r
+ num17 = chip10.n発声時刻ms;\r
+ num15 = chip10.db実数値;\r
+ continue;\r
+ }\r
+ case 3:\r
+ {\r
+ num16 = chip10.n発声位置;\r
+ num17 = chip10.n発声時刻ms;\r
+ num14 = this.BASEBPM + chip10.n整数値;\r
+ continue;\r
+ }\r
+ case 4:\r
+ case 7:\r
+ case 0x55:\r
+ case 0x56:\r
+ case 0x57:\r
+ case 0x58:\r
+ case 0x59:\r
+ case 0x60:\r
+ break;\r
+\r
+ case 5:\r
+ case 6:\r
+ case 90:\r
+ case 0x5b:\r
+ case 0x5c:\r
+ case 0x5d:\r
+ case 0x5e:\r
+ case 0x5f:\r
+ {\r
+ continue;\r
+ }\r
+ case 8:\r
+ {\r
+ num16 = chip10.n発声位置;\r
+ num17 = chip10.n発声時刻ms;\r
+ if( this.listBPM.ContainsKey( chip10.n整数値・内部番号 ) )\r
+ {\r
+ num14 = ( ( this.listBPM[ chip10.n整数値・内部番号 ].n表記上の番号 == 0 ) ? 0.0 : this.BASEBPM ) + this.listBPM[ chip10.n整数値・内部番号 ].dbBPM値;\r
+ }\r
+ continue;\r
+ }\r
+ case 0x54:\r
+ {\r
+ if( this.listAVIPAN.ContainsKey( chip10.n整数値 ) )\r
+ {\r
+ int num21 = num17 + ( (int) ( ( ( 0x271 * ( chip10.n発声位置 - num16 ) ) * num15 ) / num14 ) );\r
+ int num22 = num17 + ( (int) ( ( ( 0x271 * ( ( chip10.n発声位置 + this.listAVIPAN[ chip10.n整数値 ].n移動時間ct ) - num16 ) ) * num15 ) / num14 ) );\r
+ chip10.n総移動時間 = num22 - num21;\r
+ }\r
+ continue;\r
+ }\r
+ default:\r
+ {\r
+ continue;\r
+ }\r
+ }\r
+ if( this.listBGAPAN.ContainsKey( chip10.n整数値 ) )\r
+ {\r
+ int num19 = num17 + ( (int) ( ( ( 0x271 * ( chip10.n発声位置 - num16 ) ) * num15 ) / num14 ) );\r
+ int num20 = num17 + ( (int) ( ( ( 0x271 * ( ( chip10.n発声位置 + this.listBGAPAN[ chip10.n整数値 ].n移動時間ct ) - num16 ) ) * num15 ) / num14 ) );\r
+ chip10.n総移動時間 = num20 - num19;\r
+ }\r
+ }\r
+ if( this.db再生速度 > 0.0 )\r
+ {\r
+ foreach( CChip chip11 in this.listChip )\r
+ {\r
+ chip11.n発声時刻ms = (int) ( ( (double) chip11.n発声時刻ms ) / this.db再生速度 );\r
+ }\r
+ }\r
+ this.nBGMAdjust = 0;\r
+ this.t各自動再生音チップの再生時刻を変更する( nBGMAdjust );\r
+ for( int n = 0; n < 12; n++ )\r
+ {\r
+ this.n可視チップ数[ n ] = 0;\r
+ }\r
+ foreach( CChip chip12 in this.listChip )\r
+ {\r
+ int num24 = chip12.nチャンネル番号;\r
+ if( ( 0x11 <= num24 ) && ( num24 <= 0x1a ) )\r
+ {\r
+ this.n可視チップ数[ num24 - 0x11 ]++;\r
+ }\r
+ if( ( 0x20 <= num24 ) && ( num24 <= 0x27 ) )\r
+ {\r
+ this.n可視チップ数.Guitar++;\r
+ }\r
+ if( ( 160 <= num24 ) && ( num24 <= 0xa7 ) )\r
+ {\r
+ this.n可視チップ数.Bass++;\r
+ }\r
+ }\r
+ foreach( CChip chip13 in this.listChip )\r
+ {\r
+ if( ( chip13.bWAVを使うチャンネルである && this.listWAV.ContainsKey( chip13.n整数値・内部番号 ) ) && !this.listWAV[ chip13.n整数値・内部番号 ].listこのWAVを使用するチャンネル番号の集合.Contains( chip13.nチャンネル番号 ) )\r
+ {\r
+ this.listWAV[ chip13.n整数値・内部番号 ].listこのWAVを使用するチャンネル番号の集合.Add( chip13.nチャンネル番号 );\r
+ }\r
+ }\r
+ byte[] buffer = null;\r
+ try\r
+ {\r
+ FileStream stream = new FileStream( this.strファイル名の絶対パス, FileMode.Open, FileAccess.Read );\r
+ buffer = new byte[ stream.Length ];\r
+ stream.Read( buffer, 0, (int) stream.Length );\r
+ stream.Close();\r
+ }\r
+ catch( Exception exception )\r
+ {\r
+ Trace.TraceError( exception.Message );\r
+ Trace.TraceError( "DTXのハッシュの計算に失敗しました。({0})", new object[] { this.strファイル名の絶対パス } );\r
+ }\r
+ if( buffer != null )\r
+ {\r
+ byte[] buffer2 = new MD5CryptoServiceProvider().ComputeHash( buffer );\r
+ StringBuilder builder4 = new StringBuilder();\r
+ foreach( byte num25 in buffer2 )\r
+ {\r
+ builder4.Append( num25.ToString( "x2" ) );\r
+ }\r
+ this.strハッシュofDTXファイル = builder4.ToString();\r
+ }\r
+ else\r
+ {\r
+ this.strハッシュofDTXファイル = "00000000000000000000000000000000";\r
+ }\r
+ if( CDTXMania.ConfigIni.bLogDTX詳細ログ出力 )\r
+ {\r
+ foreach( CWAV cwav3 in this.listWAV.Values )\r
+ {\r
+ Trace.TraceInformation( cwav3.ToString() );\r
+ }\r
+ foreach( CAVI cavi in this.listAVI.Values )\r
+ {\r
+ Trace.TraceInformation( cavi.ToString() );\r
+ }\r
+ foreach( CAVIPAN cavipan in this.listAVIPAN.Values )\r
+ {\r
+ Trace.TraceInformation( cavipan.ToString() );\r
+ }\r
+ foreach( CBGA cbga in this.listBGA.Values )\r
+ {\r
+ Trace.TraceInformation( cbga.ToString() );\r
+ }\r
+ foreach( CBGAPAN cbgapan in this.listBGAPAN.Values )\r
+ {\r
+ Trace.TraceInformation( cbgapan.ToString() );\r
+ }\r
+ foreach( CBMP cbmp in this.listBMP.Values )\r
+ {\r
+ Trace.TraceInformation( cbmp.ToString() );\r
+ }\r
+ foreach( CBMPTEX cbmptex in this.listBMPTEX.Values )\r
+ {\r
+ Trace.TraceInformation( cbmptex.ToString() );\r
+ }\r
+ foreach( CBPM cbpm3 in this.listBPM.Values )\r
+ {\r
+ Trace.TraceInformation( cbpm3.ToString() );\r
+ }\r
+ foreach( CChip chip14 in this.listChip )\r
+ {\r
+ Trace.TraceInformation( chip14.ToString() );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ this.listWAV = new Dictionary<int, CWAV>();\r
+ this.listBMP = new Dictionary<int, CBMP>();\r
+ this.listBMPTEX = new Dictionary<int, CBMPTEX>();\r
+ this.listBPM = new Dictionary<int, CBPM>();\r
+ this.listBGAPAN = new Dictionary<int, CBGAPAN>();\r
+ this.listBGA = new Dictionary<int, CBGA>();\r
+ this.listAVIPAN = new Dictionary<int, CAVIPAN>();\r
+ this.listAVI = new Dictionary<int, CAVI>();\r
+ this.listChip = new List<CChip>();\r
+ base.On活性化();\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ if( this.listWAV != null )\r
+ {\r
+ foreach( CWAV cwav in this.listWAV.Values )\r
+ {\r
+ cwav.Dispose();\r
+ }\r
+ this.listWAV = null;\r
+ }\r
+ if( this.listBMP != null )\r
+ {\r
+ foreach( CBMP cbmp in this.listBMP.Values )\r
+ {\r
+ cbmp.Dispose();\r
+ }\r
+ this.listBMP = null;\r
+ }\r
+ if( this.listBMPTEX != null )\r
+ {\r
+ foreach( CBMPTEX cbmptex in this.listBMPTEX.Values )\r
+ {\r
+ cbmptex.Dispose();\r
+ }\r
+ this.listBMPTEX = null;\r
+ }\r
+ if( this.listAVI != null )\r
+ {\r
+ foreach( CAVI cavi in this.listAVI.Values )\r
+ {\r
+ cavi.Dispose();\r
+ }\r
+ this.listAVI = null;\r
+ }\r
+ if( this.listBPM != null )\r
+ {\r
+ this.listBPM.Clear();\r
+ this.listBPM = null;\r
+ }\r
+ if( this.listBGAPAN != null )\r
+ {\r
+ this.listBGAPAN.Clear();\r
+ this.listBGAPAN = null;\r
+ }\r
+ if( this.listBGA != null )\r
+ {\r
+ this.listBGA.Clear();\r
+ this.listBGA = null;\r
+ }\r
+ if( this.listAVIPAN != null )\r
+ {\r
+ this.listAVIPAN.Clear();\r
+ this.listAVIPAN = null;\r
+ }\r
+ if( this.listChip != null )\r
+ {\r
+ this.listChip.Clear();\r
+ }\r
+ base.On非活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.tBMP_BMPTEXの読み込み();\r
+ this.tAVIの読み込み();\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ if( this.listBMP != null )\r
+ {\r
+ foreach( CBMP cbmp in this.listBMP.Values )\r
+ {\r
+ cbmp.Dispose();\r
+ }\r
+ }\r
+ if( this.listBMPTEX != null )\r
+ {\r
+ foreach( CBMPTEX cbmptex in this.listBMPTEX.Values )\r
+ {\r
+ cbmptex.Dispose();\r
+ }\r
+ }\r
+ if( this.listAVI != null )\r
+ {\r
+ foreach( CAVI cavi in this.listAVI.Values )\r
+ {\r
+ cavi.Dispose();\r
+ }\r
+ }\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+\r
+\r
+ // その他\r
+ \r
+ #region [ private ]\r
+ //-----------------\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ private struct STGDAPARAM\r
+ {\r
+ public string s;\r
+ public int c;\r
+ }\r
+\r
+ private readonly STGDAPARAM[] stGDAParam;\r
+ private bool bヘッダのみ;\r
+ private Stack<bool> bstackIFからENDIFをスキップする;\r
+ \r
+ private int n現在の行数;\r
+ private int n現在の乱数;\r
+\r
+ private int n内部番号BPM1to;\r
+ private int n内部番号WAV1to;\r
+ private int[] n無限管理BPM;\r
+ private int[] n無限管理PAN;\r
+ private int[] n無限管理SIZE;\r
+ private int[] n無限管理VOL;\r
+ private int[] n無限管理WAV;\r
+ private int[] nRESULTIMAGE用優先順位;\r
+ private int[] nRESULTMOVIE用優先順位;\r
+ private int[] nRESULTSOUND用優先順位;\r
+\r
+ private bool t入力・コマンド文字列を抜き出す( ref CharEnumerator ce, ref StringBuilder sb文字列 )\r
+ {\r
+ if( this.t入力・空白をスキップする( ref ce ) )\r
+ {\r
+ while( ( ( ce.Current != ':' ) && ( ce.Current != ' ' ) ) && ( ( ce.Current != ';' ) && ( ce.Current != '\n' ) ) )\r
+ {\r
+ sb文字列.Append( ce.Current );\r
+ if( !ce.MoveNext() )\r
+ {\r
+ return false;\r
+ }\r
+ }\r
+ if( ce.Current == ':' )\r
+ {\r
+ if( !ce.MoveNext() )\r
+ {\r
+ return false;\r
+ }\r
+ if( !this.t入力・空白をスキップする( ref ce ) )\r
+ {\r
+ return false;\r
+ }\r
+ }\r
+ return true;\r
+ }\r
+ return false;\r
+ }\r
+ private bool t入力・コメントをスキップする( ref CharEnumerator ce )\r
+ {\r
+ while( ce.Current != '\n' )\r
+ {\r
+ if( !ce.MoveNext() )\r
+ {\r
+ return false;\r
+ }\r
+ }\r
+ return ce.MoveNext();\r
+ }\r
+ private bool t入力・コメント文字列を抜き出す( ref CharEnumerator ce, ref StringBuilder sb文字列 )\r
+ {\r
+ if( ce.Current != ';' )\r
+ {\r
+ return true;\r
+ }\r
+ if( ce.MoveNext() )\r
+ {\r
+ while( ce.Current != '\n' )\r
+ {\r
+ sb文字列.Append( ce.Current );\r
+ if( !ce.MoveNext() )\r
+ {\r
+ return false;\r
+ }\r
+ }\r
+ return true;\r
+ }\r
+ return false;\r
+ }\r
+ private void t入力・パラメータ食い込みチェック( string strコマンド名, ref string strコマンド, ref string strパラメータ )\r
+ {\r
+ if( ( strコマンド.Length > strコマンド名.Length ) && strコマンド.StartsWith( strコマンド名, StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ strパラメータ = strコマンド.Substring( strコマンド名.Length ).Trim();\r
+ strコマンド = strコマンド.Substring( 0, strコマンド名.Length );\r
+ }\r
+ }\r
+ private bool t入力・パラメータ文字列を抜き出す( ref CharEnumerator ce, ref StringBuilder sb文字列 )\r
+ {\r
+ if( this.t入力・空白をスキップする( ref ce ) )\r
+ {\r
+ while( ( ce.Current != '\n' ) && ( ce.Current != ';' ) )\r
+ {\r
+ sb文字列.Append( ce.Current );\r
+ if( !ce.MoveNext() )\r
+ {\r
+ return false;\r
+ }\r
+ }\r
+ return true;\r
+ }\r
+ return false;\r
+ }\r
+ private bool t入力・空白と改行をスキップする( ref CharEnumerator ce )\r
+ {\r
+ while( ( ce.Current == ' ' ) || ( ce.Current == '\n' ) )\r
+ {\r
+ if( ce.Current == '\n' )\r
+ {\r
+ this.n現在の行数++;\r
+ }\r
+ if( !ce.MoveNext() )\r
+ {\r
+ return false;\r
+ }\r
+ }\r
+ return true;\r
+ }\r
+ private bool t入力・空白をスキップする( ref CharEnumerator ce )\r
+ {\r
+ while( ce.Current == ' ' )\r
+ {\r
+ if( !ce.MoveNext() )\r
+ {\r
+ return false;\r
+ }\r
+ }\r
+ return true;\r
+ }\r
+ private void t入力・行解析( ref StringBuilder sbコマンド, ref StringBuilder sbパラメータ, ref StringBuilder sbコメント )\r
+ {\r
+ string str = sbコマンド.ToString();\r
+ string str2 = sbパラメータ.ToString().Trim();\r
+ string str3 = sbコメント.ToString();\r
+ if( str.StartsWith( "IF", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ this.t入力・パラメータ食い込みチェック( "IF", ref str, ref str2 );\r
+ if( this.bstackIFからENDIFをスキップする.Count == 0xff )\r
+ {\r
+ Trace.TraceWarning( "#IF の入れ子の数が 255 を超えました。この #IF を無視します。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
+ }\r
+ else if( this.bstackIFからENDIFをスキップする.Peek() )\r
+ {\r
+ this.bstackIFからENDIFをスキップする.Push( true );\r
+ }\r
+ else\r
+ {\r
+ int result = 0;\r
+ if( !int.TryParse( str2, out result ) )\r
+ {\r
+ result = 1;\r
+ }\r
+ this.bstackIFからENDIFをスキップする.Push( result != this.n現在の乱数 );\r
+ }\r
+ }\r
+ else if( str.StartsWith( "ENDIF", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ this.t入力・パラメータ食い込みチェック( "ENDIF", ref str, ref str2 );\r
+ if( this.bstackIFからENDIFをスキップする.Count > 1 )\r
+ {\r
+ this.bstackIFからENDIFをスキップする.Pop();\r
+ }\r
+ else\r
+ {\r
+ Trace.TraceWarning( "#ENDIF に対応する #IF がありません。この #ENDIF を無視します。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
+ }\r
+ }\r
+ else if( !this.bstackIFからENDIFをスキップする.Peek() )\r
+ {\r
+ if( str.StartsWith( "PATH_WAV", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ this.t入力・パラメータ食い込みチェック( "PATH_WAV", ref str, ref str2 );\r
+ this.PATH_WAV = str2;\r
+ }\r
+ else if( str.StartsWith( "TITLE", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ this.t入力・パラメータ食い込みチェック( "TITLE", ref str, ref str2 );\r
+ this.TITLE = str2;\r
+ }\r
+ else if( str.StartsWith( "ARTIST", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ this.t入力・パラメータ食い込みチェック( "ARTIST", ref str, ref str2 );\r
+ this.ARTIST = str2;\r
+ }\r
+ else if( str.StartsWith( "COMMENT", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ this.t入力・パラメータ食い込みチェック( "COMMENT", ref str, ref str2 );\r
+ this.COMMENT = str2;\r
+ }\r
+ else if( str.StartsWith( "DLEVEL", StringComparison.OrdinalIgnoreCase ) || str.StartsWith( "PLAYLEVEL", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ int num2;\r
+ this.t入力・パラメータ食い込みチェック( "DLEVEL", ref str, ref str2 );\r
+ this.t入力・パラメータ食い込みチェック( "PLAYLEVEL", ref str, ref str2 );\r
+ if( int.TryParse( str2, out num2 ) )\r
+ {\r
+ if( num2 < 0 )\r
+ {\r
+ num2 = 0;\r
+ }\r
+ else if( num2 > 100 )\r
+ {\r
+ num2 = 100;\r
+ }\r
+ this.LEVEL.Drums = num2;\r
+ }\r
+ }\r
+ else if( str.StartsWith( "GLEVEL", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ int num3;\r
+ this.t入力・パラメータ食い込みチェック( "GLEVEL", ref str, ref str2 );\r
+ if( int.TryParse( str2, out num3 ) )\r
+ {\r
+ if( num3 < 0 )\r
+ {\r
+ num3 = 0;\r
+ }\r
+ else if( num3 > 100 )\r
+ {\r
+ num3 = 100;\r
+ }\r
+ this.LEVEL.Guitar = num3;\r
+ }\r
+ }\r
+ else if( str.StartsWith( "BLEVEL", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ int num4;\r
+ this.t入力・パラメータ食い込みチェック( "BLEVEL", ref str, ref str2 );\r
+ if( int.TryParse( str2, out num4 ) )\r
+ {\r
+ if( num4 < 0 )\r
+ {\r
+ num4 = 0;\r
+ }\r
+ else if( num4 > 100 )\r
+ {\r
+ num4 = 100;\r
+ }\r
+ this.LEVEL.Bass = num4;\r
+ }\r
+ }\r
+ else if( str.StartsWith( "GENRE", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ this.t入力・パラメータ食い込みチェック( "GENRE", ref str, ref str2 );\r
+ this.GENRE = str2;\r
+ }\r
+ else\r
+ {\r
+ if( str.StartsWith( "HIDDENLEVEL", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ this.t入力・パラメータ食い込みチェック( "HIDDENLEVEL", ref str, ref str2 );\r
+ this.HIDDENLEVEL = str2.ToLower().Equals( "on" );\r
+ }\r
+ if( str.StartsWith( "STAGEFILE", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ this.t入力・パラメータ食い込みチェック( "STAGEFILE", ref str, ref str2 );\r
+ this.STAGEFILE = str2;\r
+ }\r
+ else if( str.StartsWith( "PREVIEW", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ this.t入力・パラメータ食い込みチェック( "PREVIEW", ref str, ref str2 );\r
+ this.PREVIEW = str2;\r
+ }\r
+ else if( str.StartsWith( "PREIMAGE", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ this.t入力・パラメータ食い込みチェック( "PREIMAGE", ref str, ref str2 );\r
+ this.PREIMAGE = str2;\r
+ }\r
+ else if( str.StartsWith( "PREMOVIE", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ this.t入力・パラメータ食い込みチェック( "PREMOVIE", ref str, ref str2 );\r
+ this.PREMOVIE = str2;\r
+ }\r
+ else if( str.StartsWith( "BACKGROUND_GR", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ this.t入力・パラメータ食い込みチェック( "BACKGROUND_GR", ref str, ref str2 );\r
+ this.BACKGROUND_GR = str2;\r
+ }\r
+ else if( str.StartsWith( "BACKGROUND", StringComparison.OrdinalIgnoreCase ) || str.StartsWith( "WALL", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ this.t入力・パラメータ食い込みチェック( "BACKGROUND", ref str, ref str2 );\r
+ this.t入力・パラメータ食い込みチェック( "WALL", ref str, ref str2 );\r
+ this.BACKGROUND = str2;\r
+ }\r
+ else\r
+ {\r
+ if( str.StartsWith( "RANDOM", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ this.t入力・パラメータ食い込みチェック( "RANDOM", ref str, ref str2 );\r
+ int num5 = 1;\r
+ if( !int.TryParse( str2, out num5 ) )\r
+ {\r
+ num5 = 1;\r
+ }\r
+ this.n現在の乱数 = CDTXMania.Random.Next( num5 ) + 1;\r
+ }\r
+ if( str.StartsWith( "SOUND_NOWLOADING", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ this.t入力・パラメータ食い込みチェック( "SOUND_NOWLOADING", ref str, ref str2 );\r
+ this.SOUND_NOWLOADING = str2;\r
+ }\r
+ else if( !this.bヘッダのみ )\r
+ {\r
+ if( str.StartsWith( "MIDIFILE", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ this.t入力・パラメータ食い込みチェック( "MIDIFILE", ref str, ref str2 );\r
+ this.MIDIFILE = str2;\r
+ }\r
+ else if( str.StartsWith( "PANEL", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ this.t入力・パラメータ食い込みチェック( "PANEL", ref str, ref str2 );\r
+ this.PANEL = str2;\r
+ }\r
+ else\r
+ {\r
+ if( str.StartsWith( "MIDINOTE", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ this.t入力・パラメータ食い込みチェック( "MIDINOTE", ref str, ref str2 );\r
+ this.MIDINOTE = str2.ToLower().Equals( "on" );\r
+ }\r
+ if( str.StartsWith( "BLACKCOLORKEY", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ this.t入力・パラメータ食い込みチェック( "BLACKCOLORKEY", ref str, ref str2 );\r
+ this.BLACKCOLORKEY = str2.ToLower().Equals( "on" );\r
+ }\r
+ if( str.StartsWith( "BASEBPM", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ this.t入力・パラメータ食い込みチェック( "BASEBPM", ref str, ref str2 );\r
+ double num6 = 0.0;\r
+ if( double.TryParse( str2, out num6 ) && ( num6 > 0.0 ) )\r
+ {\r
+ this.BASEBPM = num6;\r
+ }\r
+ }\r
+ else if( str.StartsWith( "SOUND_STAGEFAILED", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ this.t入力・パラメータ食い込みチェック( "SOUND_STAGEFAILED", ref str, ref str2 );\r
+ this.SOUND_STAGEFAILED = str2;\r
+ }\r
+ else if( str.StartsWith( "SOUND_FULLCOMBO", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ this.t入力・パラメータ食い込みチェック( "SOUND_FULLCOMBO", ref str, ref str2 );\r
+ this.SOUND_FULLCOMBO = str2;\r
+ }\r
+ else if( str.StartsWith( "SOUND_AUDIENCE", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ this.t入力・パラメータ食い込みチェック( "SOUND_AUDIENCE", ref str, ref str2 );\r
+ this.SOUND_AUDIENCE = str2;\r
+ }\r
+ else if( ( ( ( ( ( ( ( ( ( ( ( ( !this.t入力・行解析・WAVVOL_VOLUME( str, str2, str3 ) && !this.t入力・行解析・WAVPAN_PAN( str, str2, str3 ) ) && !this.t入力・行解析・WAV( str, str2, str3 ) ) && !this.t入力・行解析・BMPTEX( str, str2, str3 ) ) && !this.t入力・行解析・BMP( str, str2, str3 ) ) && !this.t入力・行解析・BGAPAN( str, str2, str3 ) ) && !this.t入力・行解析・BGA( str, str2, str3 ) ) && !this.t入力・行解析・AVIPAN( str, str2, str3 ) ) && !this.t入力・行解析・AVI_VIDEO( str, str2, str3 ) ) && !this.t入力・行解析・BPM_BPMzz( str, str2, str3 ) ) && !this.t入力・行解析・RESULTIMAGE( str, str2, str3 ) ) && !this.t入力・行解析・RESULTMOVIE( str, str2, str3 ) ) && !this.t入力・行解析・RESULTSOUND( str, str2, str3 ) ) && !this.t入力・行解析・SIZE( str, str2, str3 ) )\r
+ {\r
+ this.t入力・行解析・チップ配置( str, str2, str3 );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ private bool t入力・行解析・AVI_VIDEO( string strコマンド, string strパラメータ, string strコメント )\r
+ {\r
+ if( strコマンド.StartsWith( "AVI", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ strコマンド = strコマンド.Substring( 3 );\r
+ }\r
+ else if( strコマンド.StartsWith( "VIDEO", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ strコマンド = strコマンド.Substring( 5 );\r
+ }\r
+ else\r
+ {\r
+ return false;\r
+ }\r
+ if( strコマンド.Length < 2 )\r
+ {\r
+ return false;\r
+ }\r
+ int key = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
+ if( ( key < 0 ) || ( key >= 0x510 ) )\r
+ {\r
+ Trace.TraceError( "AVI(VIDEO)番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
+ return false;\r
+ }\r
+ CAVI cavi = new CAVI();\r
+ cavi.n番号 = key;\r
+ cavi.strファイル名 = strパラメータ;\r
+ cavi.strコメント文 = strコメント;\r
+ if( this.listAVI.ContainsKey( key ) )\r
+ {\r
+ this.listAVI.Remove( key );\r
+ }\r
+ this.listAVI.Add( key, cavi );\r
+ return true;\r
+ }\r
+ private bool t入力・行解析・AVIPAN( string strコマンド, string strパラメータ, string strコメント )\r
+ {\r
+ if( strコマンド.StartsWith( "AVIPAN", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ strコマンド = strコマンド.Substring( 6 );\r
+ }\r
+ else\r
+ {\r
+ return false;\r
+ }\r
+ if( strコマンド.Length < 2 )\r
+ {\r
+ return false;\r
+ }\r
+ int key = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
+ if( ( key < 0 ) || ( key >= 0x510 ) )\r
+ {\r
+ Trace.TraceError( "AVIPAN番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
+ return false;\r
+ }\r
+ CAVIPAN cavipan = new CAVIPAN();\r
+ cavipan.n番号 = key;\r
+ string[] strArray = strパラメータ.Split( new char[] { ' ', ',', '(', ')', '[', ']', 'x', '|' }, StringSplitOptions.RemoveEmptyEntries );\r
+ if( strArray.Length < 14 )\r
+ {\r
+ Trace.TraceError( "AVIPAN: 引数が足りません。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
+ return false;\r
+ }\r
+ int index = 0;\r
+ int result = 0;\r
+ if( ( strArray[ index ].Length == 0 ) || ( strArray[ index ].Length > 2 ) )\r
+ {\r
+ Trace.TraceError( "AVIPAN: {2}番目の数(AVI番号)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ cavipan.nAVI番号 = C変換.n36進数2桁の文字列を数値に変換して返す( strArray[ index ] );\r
+ if( ( cavipan.nAVI番号 < 1 ) || ( cavipan.nAVI番号 >= 0x510 ) )\r
+ {\r
+ Trace.TraceError( "AVIPAN: {2}番目の数(AVI番号)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ index++;\r
+ result = 0;\r
+ if( !int.TryParse( strArray[ index ], out result ) )\r
+ {\r
+ Trace.TraceError( "AVIPAN: {2}番目の引数(開始転送サイズ・幅)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ cavipan.sz開始サイズ.Width = result;\r
+ index++;\r
+ result = 0;\r
+ if( !int.TryParse( strArray[ index ], out result ) )\r
+ {\r
+ Trace.TraceError( "AVIPAN: {2}番目の引数(開始転送サイズ・高さ)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ cavipan.sz開始サイズ.Height = result;\r
+ index++;\r
+ result = 0;\r
+ if( !int.TryParse( strArray[ index ], out result ) )\r
+ {\r
+ Trace.TraceError( "AVIPAN: {2}番目の引数(終了転送サイズ・幅)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ cavipan.sz終了サイズ.Width = result;\r
+ index++;\r
+ result = 0;\r
+ if( !int.TryParse( strArray[ index ], out result ) )\r
+ {\r
+ Trace.TraceError( "AVIPAN: {2}番目の引数(終了転送サイズ・幅)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ cavipan.sz終了サイズ.Height = result;\r
+ index++;\r
+ result = 0;\r
+ if( !int.TryParse( strArray[ index ], out result ) )\r
+ {\r
+ Trace.TraceError( "AVIPAN: {2}番目の引数(画像側開始位置・X)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ cavipan.pt動画側開始位置.X = result;\r
+ index++;\r
+ result = 0;\r
+ if( !int.TryParse( strArray[ index ], out result ) )\r
+ {\r
+ Trace.TraceError( "AVIPAN: {2}番目の引数(画像側開始位置・Y)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ cavipan.pt動画側開始位置.Y = result;\r
+ index++;\r
+ result = 0;\r
+ if( !int.TryParse( strArray[ index ], out result ) )\r
+ {\r
+ Trace.TraceError( "AVIPAN: {2}番目の引数(画像側終了位置・X)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ cavipan.pt動画側終了位置.X = result;\r
+ index++;\r
+ result = 0;\r
+ if( !int.TryParse( strArray[ index ], out result ) )\r
+ {\r
+ Trace.TraceError( "AVIPAN: {2}番目の引数(画像側終了位置・Y)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ cavipan.pt動画側終了位置.Y = result;\r
+ index++;\r
+ result = 0;\r
+ if( !int.TryParse( strArray[ index ], out result ) )\r
+ {\r
+ Trace.TraceError( "AVIPAN: {2}番目の引数(表示側開始位置・X)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ cavipan.pt表示側開始位置.X = result;\r
+ index++;\r
+ result = 0;\r
+ if( !int.TryParse( strArray[ index ], out result ) )\r
+ {\r
+ Trace.TraceError( "AVIPAN: {2}番目の引数(表示側開始位置・Y)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ cavipan.pt表示側開始位置.Y = result;\r
+ index++;\r
+ result = 0;\r
+ if( !int.TryParse( strArray[ index ], out result ) )\r
+ {\r
+ Trace.TraceError( "AVIPAN: {2}番目の引数(表示側終了位置・X)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ cavipan.pt表示側終了位置.X = result;\r
+ index++;\r
+ result = 0;\r
+ if( !int.TryParse( strArray[ index ], out result ) )\r
+ {\r
+ Trace.TraceError( "AVIPAN: {2}番目の引数(表示側終了位置・Y)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ cavipan.pt表示側終了位置.Y = result;\r
+ index++;\r
+ result = 0;\r
+ if( !int.TryParse( strArray[ index ], out result ) )\r
+ {\r
+ Trace.TraceError( "AVIPAN: {2}番目の引数(移動時間)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ if( result < 0 )\r
+ {\r
+ result = 0;\r
+ }\r
+ cavipan.n移動時間ct = result;\r
+ index++;\r
+ if( this.listAVIPAN.ContainsKey( key ) )\r
+ {\r
+ this.listAVIPAN.Remove( key );\r
+ }\r
+ this.listAVIPAN.Add( key, cavipan );\r
+ return true;\r
+ }\r
+ private bool t入力・行解析・BGA( string strコマンド, string strパラメータ, string strコメント )\r
+ {\r
+ if( strコマンド.StartsWith( "BGA", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ strコマンド = strコマンド.Substring( 3 );\r
+ }\r
+ else\r
+ {\r
+ return false;\r
+ }\r
+ if( strコマンド.Length < 2 )\r
+ {\r
+ return false;\r
+ }\r
+ int key = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
+ if( ( key < 0 ) || ( key >= 0x510 ) )\r
+ {\r
+ Trace.TraceError( "BGA番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
+ return false;\r
+ }\r
+ CBGA cbga = new CBGA();\r
+ cbga.n番号 = key;\r
+ string[] strArray = strパラメータ.Split( new char[] { ' ', ',', '(', ')', '[', ']', 'x', '|' }, StringSplitOptions.RemoveEmptyEntries );\r
+ if( strArray.Length < 7 )\r
+ {\r
+ Trace.TraceError( "BGA: 引数が足りません。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
+ return false;\r
+ }\r
+ int index = 0;\r
+ int result = 0;\r
+ if( ( strArray[ index ].Length == 0 ) || ( strArray[ index ].Length > 2 ) )\r
+ {\r
+ Trace.TraceError( "BGA: {2}番目の数(BMP番号)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ cbga.nBMP番号 = C変換.n36進数2桁の文字列を数値に変換して返す( strArray[ index ] );\r
+ if( ( cbga.nBMP番号 < 1 ) || ( cbga.nBMP番号 >= 0x510 ) )\r
+ {\r
+ Trace.TraceError( "BGAPAN: {2}番目の数(BMP番号)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ index++;\r
+ result = 0;\r
+ if( !int.TryParse( strArray[ index ], out result ) )\r
+ {\r
+ Trace.TraceError( "BGA: {2}番目の引数(画像側位置1・X)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ cbga.pt画像側左上座標.X = result;\r
+ index++;\r
+ result = 0;\r
+ if( !int.TryParse( strArray[ index ], out result ) )\r
+ {\r
+ Trace.TraceError( "BGA: {2}番目の引数(画像側位置1・Y)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ cbga.pt画像側左上座標.Y = result;\r
+ index++;\r
+ result = 0;\r
+ if( !int.TryParse( strArray[ index ], out result ) )\r
+ {\r
+ Trace.TraceError( "BGA: {2}番目の引数(画像側座標2・X)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ cbga.pt画像側右下座標.X = result;\r
+ index++;\r
+ result = 0;\r
+ if( !int.TryParse( strArray[ index ], out result ) )\r
+ {\r
+ Trace.TraceError( "BGA: {2}番目の引数(画像側座標2・Y)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ cbga.pt画像側右下座標.Y = result;\r
+ index++;\r
+ result = 0;\r
+ if( !int.TryParse( strArray[ index ], out result ) )\r
+ {\r
+ Trace.TraceError( "BGA: {2}番目の引数(表示位置・X)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ cbga.pt表示座標.X = result;\r
+ index++;\r
+ result = 0;\r
+ if( !int.TryParse( strArray[ index ], out result ) )\r
+ {\r
+ Trace.TraceError( "BGA: {2}番目の引数(表示位置・Y)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ cbga.pt表示座標.Y = result;\r
+ index++;\r
+ if( cbga.pt画像側左上座標.X > cbga.pt画像側右下座標.X )\r
+ {\r
+ result = cbga.pt画像側左上座標.X;\r
+ cbga.pt画像側左上座標.X = cbga.pt画像側右下座標.X;\r
+ cbga.pt画像側右下座標.X = result;\r
+ }\r
+ if( cbga.pt画像側左上座標.Y > cbga.pt画像側右下座標.Y )\r
+ {\r
+ result = cbga.pt画像側左上座標.Y;\r
+ cbga.pt画像側左上座標.Y = cbga.pt画像側右下座標.Y;\r
+ cbga.pt画像側右下座標.Y = result;\r
+ }\r
+ if( this.listBGA.ContainsKey( key ) )\r
+ {\r
+ this.listBGA.Remove( key );\r
+ }\r
+ this.listBGA.Add( key, cbga );\r
+ return true;\r
+ }\r
+ private bool t入力・行解析・BGAPAN( string strコマンド, string strパラメータ, string strコメント )\r
+ {\r
+ if( strコマンド.StartsWith( "BGAPAN", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ strコマンド = strコマンド.Substring( 6 );\r
+ }\r
+ else\r
+ {\r
+ return false;\r
+ }\r
+ if( strコマンド.Length < 2 )\r
+ {\r
+ return false;\r
+ }\r
+ int key = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
+ if( ( key < 0 ) || ( key >= 0x510 ) )\r
+ {\r
+ Trace.TraceError( "BGAPAN番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
+ return false;\r
+ }\r
+ CBGAPAN cbgapan = new CBGAPAN();\r
+ cbgapan.n番号 = key;\r
+ string[] strArray = strパラメータ.Split( new char[] { ' ', ',', '(', ')', '[', ']', 'x', '|' }, StringSplitOptions.RemoveEmptyEntries );\r
+ if( strArray.Length < 14 )\r
+ {\r
+ Trace.TraceError( "BGAPAN: 引数が足りません。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
+ return false;\r
+ }\r
+ int index = 0;\r
+ int result = 0;\r
+ if( ( strArray[ index ].Length == 0 ) || ( strArray[ index ].Length > 2 ) )\r
+ {\r
+ Trace.TraceError( "BGAPAN: {2}番目の数(BMP番号)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ cbgapan.nBMP番号 = C変換.n36進数2桁の文字列を数値に変換して返す( strArray[ index ] );\r
+ if( ( cbgapan.nBMP番号 < 1 ) || ( cbgapan.nBMP番号 >= 0x510 ) )\r
+ {\r
+ Trace.TraceError( "BGAPAN: {2}番目の数(BMP番号)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ index++;\r
+ result = 0;\r
+ if( !int.TryParse( strArray[ index ], out result ) )\r
+ {\r
+ Trace.TraceError( "BGAPAN: {2}番目の引数(開始転送サイズ・幅)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ cbgapan.sz開始サイズ.Width = result;\r
+ index++;\r
+ result = 0;\r
+ if( !int.TryParse( strArray[ index ], out result ) )\r
+ {\r
+ Trace.TraceError( "BGAPAN: {2}番目の引数(開始転送サイズ・高さ)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ cbgapan.sz開始サイズ.Height = result;\r
+ index++;\r
+ result = 0;\r
+ if( !int.TryParse( strArray[ index ], out result ) )\r
+ {\r
+ Trace.TraceError( "BGAPAN: {2}番目の引数(終了転送サイズ・幅)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ cbgapan.sz終了サイズ.Width = result;\r
+ index++;\r
+ result = 0;\r
+ if( !int.TryParse( strArray[ index ], out result ) )\r
+ {\r
+ Trace.TraceError( "BGAPAN: {2}番目の引数(終了転送サイズ・幅)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ cbgapan.sz終了サイズ.Height = result;\r
+ index++;\r
+ result = 0;\r
+ if( !int.TryParse( strArray[ index ], out result ) )\r
+ {\r
+ Trace.TraceError( "BGAPAN: {2}番目の引数(画像側開始位置・X)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ cbgapan.pt画像側開始位置.X = result;\r
+ index++;\r
+ result = 0;\r
+ if( !int.TryParse( strArray[ index ], out result ) )\r
+ {\r
+ Trace.TraceError( "BGAPAN: {2}番目の引数(画像側開始位置・Y)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ cbgapan.pt画像側開始位置.Y = result;\r
+ index++;\r
+ result = 0;\r
+ if( !int.TryParse( strArray[ index ], out result ) )\r
+ {\r
+ Trace.TraceError( "BGAPAN: {2}番目の引数(画像側終了位置・X)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ cbgapan.pt画像側終了位置.X = result;\r
+ index++;\r
+ result = 0;\r
+ if( !int.TryParse( strArray[ index ], out result ) )\r
+ {\r
+ Trace.TraceError( "BGAPAN: {2}番目の引数(画像側終了位置・Y)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ cbgapan.pt画像側終了位置.Y = result;\r
+ index++;\r
+ result = 0;\r
+ if( !int.TryParse( strArray[ index ], out result ) )\r
+ {\r
+ Trace.TraceError( "BGAPAN: {2}番目の引数(表示側開始位置・X)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ cbgapan.pt表示側開始位置.X = result;\r
+ index++;\r
+ result = 0;\r
+ if( !int.TryParse( strArray[ index ], out result ) )\r
+ {\r
+ Trace.TraceError( "BGAPAN: {2}番目の引数(表示側開始位置・Y)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ cbgapan.pt表示側開始位置.Y = result;\r
+ index++;\r
+ result = 0;\r
+ if( !int.TryParse( strArray[ index ], out result ) )\r
+ {\r
+ Trace.TraceError( "BGAPAN: {2}番目の引数(表示側終了位置・X)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ cbgapan.pt表示側終了位置.X = result;\r
+ index++;\r
+ result = 0;\r
+ if( !int.TryParse( strArray[ index ], out result ) )\r
+ {\r
+ Trace.TraceError( "BGAPAN: {2}番目の引数(表示側終了位置・Y)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ cbgapan.pt表示側終了位置.Y = result;\r
+ index++;\r
+ result = 0;\r
+ if( !int.TryParse( strArray[ index ], out result ) )\r
+ {\r
+ Trace.TraceError( "BGAPAN: {2}番目の引数(移動時間)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
+ return false;\r
+ }\r
+ if( result < 0 )\r
+ {\r
+ result = 0;\r
+ }\r
+ cbgapan.n移動時間ct = result;\r
+ index++;\r
+ if( this.listBGAPAN.ContainsKey( key ) )\r
+ {\r
+ this.listBGAPAN.Remove( key );\r
+ }\r
+ this.listBGAPAN.Add( key, cbgapan );\r
+ return true;\r
+ }\r
+ private bool t入力・行解析・BMP( string strコマンド, string strパラメータ, string strコメント )\r
+ {\r
+ if( strコマンド.StartsWith( "BMP", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ strコマンド = strコマンド.Substring( 3 );\r
+ }\r
+ else\r
+ {\r
+ return false;\r
+ }\r
+ int key = 0;\r
+ if( strコマンド.Length < 2 )\r
+ {\r
+ key = 0;\r
+ }\r
+ else\r
+ {\r
+ key = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
+ if( ( key < 0 ) || ( key >= 0x510 ) )\r
+ {\r
+ Trace.TraceError( "BMP番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
+ return false;\r
+ }\r
+ }\r
+ CBMP cbmp = new CBMP();\r
+ cbmp.n番号 = key;\r
+ cbmp.strファイル名 = strパラメータ;\r
+ cbmp.strコメント文 = strコメント;\r
+ if( this.listBMP.ContainsKey( key ) )\r
+ {\r
+ this.listBMP.Remove( key );\r
+ }\r
+ this.listBMP.Add( key, cbmp );\r
+ return true;\r
+ }\r
+ private bool t入力・行解析・BMPTEX( string strコマンド, string strパラメータ, string strコメント )\r
+ {\r
+ if( strコマンド.StartsWith( "BMPTEX", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ strコマンド = strコマンド.Substring( 6 );\r
+ }\r
+ else\r
+ {\r
+ return false;\r
+ }\r
+ if( strコマンド.Length < 2 )\r
+ {\r
+ return false;\r
+ }\r
+ int key = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
+ if( ( key < 0 ) || ( key >= 0x510 ) )\r
+ {\r
+ Trace.TraceError( "BMPTEX番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
+ return false;\r
+ }\r
+ CBMPTEX cbmptex = new CBMPTEX();\r
+ cbmptex.n番号 = key;\r
+ cbmptex.strファイル名 = strパラメータ;\r
+ cbmptex.strコメント文 = strコメント;\r
+ if( this.listBMPTEX.ContainsKey( key ) )\r
+ {\r
+ this.listBMPTEX.Remove( key );\r
+ }\r
+ this.listBMPTEX.Add( key, cbmptex );\r
+ return true;\r
+ }\r
+ private bool t入力・行解析・BPM_BPMzz( string strコマンド, string strパラメータ, string strコメント )\r
+ {\r
+ if( strコマンド.StartsWith( "BPM", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ strコマンド = strコマンド.Substring( 3 );\r
+ }\r
+ else\r
+ {\r
+ return false;\r
+ }\r
+ int index = 0;\r
+ if( strコマンド.Length < 2 )\r
+ {\r
+ index = 0;\r
+ }\r
+ else\r
+ {\r
+ index = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
+ if( ( index < 0 ) || ( index >= 0x510 ) )\r
+ {\r
+ Trace.TraceError( "BPM番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
+ return false;\r
+ }\r
+ }\r
+ double result = 0.0;\r
+ if( !double.TryParse( strパラメータ, out result ) )\r
+ {\r
+ return false;\r
+ }\r
+ if( result <= 0.0 )\r
+ {\r
+ return false;\r
+ }\r
+ if( index == 0 )\r
+ {\r
+ this.BPM = result;\r
+ }\r
+ CBPM cbpm = new CBPM();\r
+ cbpm.n内部番号 = this.n内部番号BPM1to;\r
+ cbpm.n表記上の番号 = index;\r
+ cbpm.dbBPM値 = result;\r
+ this.listBPM.Add( this.n内部番号BPM1to, cbpm );\r
+ if( this.n無限管理BPM[ index ] == -index )\r
+ {\r
+ for( int i = 0; i < this.listChip.Count; i++ )\r
+ {\r
+ CChip chip = this.listChip[ i ];\r
+ if( chip.bBPMチップである && ( chip.n整数値・内部番号 == -index ) )\r
+ {\r
+ chip.n整数値・内部番号 = this.n内部番号BPM1to;\r
+ }\r
+ }\r
+ }\r
+ this.n無限管理BPM[ index ] = this.n内部番号BPM1to;\r
+ this.n内部番号BPM1to++;\r
+ return true;\r
+ }\r
+ private bool t入力・行解析・RESULTIMAGE( string strコマンド, string strパラメータ, string strコメント )\r
+ {\r
+ if( strコマンド.StartsWith( "RESULTIMAGE", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ strコマンド = strコマンド.Substring( 11 );\r
+ }\r
+ else\r
+ {\r
+ return false;\r
+ }\r
+ if( strコマンド.Length < 2 )\r
+ {\r
+ for( int i = 0; i < 7; i++ )\r
+ {\r
+ if( this.nRESULTIMAGE用優先順位[ i ] == 0 )\r
+ {\r
+ this.RESULTIMAGE[ i ] = strパラメータ.Trim();\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ switch( strコマンド.ToUpper() )\r
+ {\r
+ case "_SS":\r
+ this.t入力・行解析・RESULTIMAGE・ファイルを設定する( 0, strパラメータ );\r
+ goto Label_0142;\r
+\r
+ case "_S":\r
+ this.t入力・行解析・RESULTIMAGE・ファイルを設定する( 1, strパラメータ );\r
+ goto Label_0142;\r
+\r
+ case "_A":\r
+ this.t入力・行解析・RESULTIMAGE・ファイルを設定する( 2, strパラメータ );\r
+ goto Label_0142;\r
+\r
+ case "_B":\r
+ this.t入力・行解析・RESULTIMAGE・ファイルを設定する( 3, strパラメータ );\r
+ goto Label_0142;\r
+\r
+ case "_C":\r
+ this.t入力・行解析・RESULTIMAGE・ファイルを設定する( 4, strパラメータ );\r
+ goto Label_0142;\r
+\r
+ case "_D":\r
+ this.t入力・行解析・RESULTIMAGE・ファイルを設定する( 5, strパラメータ );\r
+ goto Label_0142;\r
+\r
+ case "_E":\r
+ this.t入力・行解析・RESULTIMAGE・ファイルを設定する( 6, strパラメータ );\r
+ goto Label_0142;\r
+ }\r
+ }\r
+ Label_0142:\r
+ return true;\r
+ }\r
+ private void t入力・行解析・RESULTIMAGE・ファイルを設定する( int nランク0to6, string strファイル名 )\r
+ {\r
+ if( ( nランク0to6 >= 0 ) && ( nランク0to6 <= 6 ) )\r
+ {\r
+ for( int i = nランク0to6; i >= 0; i-- )\r
+ {\r
+ if( this.nRESULTIMAGE用優先順位[ i ] < ( 7 - nランク0to6 ) )\r
+ {\r
+ this.nRESULTIMAGE用優先順位[ i ] = 7 - nランク0to6;\r
+ this.RESULTIMAGE[ i ] = strファイル名;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ private bool t入力・行解析・RESULTMOVIE( string strコマンド, string strパラメータ, string strコメント )\r
+ {\r
+ if( strコマンド.StartsWith( "RESULTMOVIE", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ strコマンド = strコマンド.Substring( 11 );\r
+ }\r
+ else\r
+ {\r
+ return false;\r
+ }\r
+ if( strコマンド.Length < 2 )\r
+ {\r
+ for( int i = 0; i < 7; i++ )\r
+ {\r
+ if( this.nRESULTMOVIE用優先順位[ i ] == 0 )\r
+ {\r
+ this.RESULTMOVIE[ i ] = strパラメータ.Trim();\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ switch( strコマンド.ToUpper() )\r
+ {\r
+ case "_SS":\r
+ this.t入力・行解析・RESULTMOVIE・ファイルを設定する( 0, strパラメータ );\r
+ goto Label_0142;\r
+\r
+ case "_S":\r
+ this.t入力・行解析・RESULTMOVIE・ファイルを設定する( 1, strパラメータ );\r
+ goto Label_0142;\r
+\r
+ case "_A":\r
+ this.t入力・行解析・RESULTMOVIE・ファイルを設定する( 2, strパラメータ );\r
+ goto Label_0142;\r
+\r
+ case "_B":\r
+ this.t入力・行解析・RESULTMOVIE・ファイルを設定する( 3, strパラメータ );\r
+ goto Label_0142;\r
+\r
+ case "_C":\r
+ this.t入力・行解析・RESULTMOVIE・ファイルを設定する( 4, strパラメータ );\r
+ goto Label_0142;\r
+\r
+ case "_D":\r
+ this.t入力・行解析・RESULTMOVIE・ファイルを設定する( 5, strパラメータ );\r
+ goto Label_0142;\r
+\r
+ case "_E":\r
+ this.t入力・行解析・RESULTMOVIE・ファイルを設定する( 6, strパラメータ );\r
+ goto Label_0142;\r
+ }\r
+ }\r
+ Label_0142:\r
+ return true;\r
+ }\r
+ private void t入力・行解析・RESULTMOVIE・ファイルを設定する( int nランク0to6, string strファイル名 )\r
+ {\r
+ if( ( nランク0to6 >= 0 ) && ( nランク0to6 <= 6 ) )\r
+ {\r
+ for( int i = nランク0to6; i >= 0; i-- )\r
+ {\r
+ if( this.nRESULTMOVIE用優先順位[ i ] < ( 7 - nランク0to6 ) )\r
+ {\r
+ this.nRESULTMOVIE用優先順位[ i ] = 7 - nランク0to6;\r
+ this.RESULTMOVIE[ i ] = strファイル名;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ private bool t入力・行解析・RESULTSOUND( string strコマンド, string strパラメータ, string strコメント )\r
+ {\r
+ if( strコマンド.StartsWith( "RESULTSOUND", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ strコマンド = strコマンド.Substring( 11 );\r
+ }\r
+ else\r
+ {\r
+ return false;\r
+ }\r
+ if( strコマンド.Length < 2 )\r
+ {\r
+ for( int i = 0; i < 7; i++ )\r
+ {\r
+ if( this.nRESULTSOUND用優先順位[ i ] == 0 )\r
+ {\r
+ this.RESULTSOUND[ i ] = strパラメータ.Trim();\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ switch( strコマンド.ToUpper() )\r
+ {\r
+ case "_SS":\r
+ this.t入力・行解析・RESULTSOUND・ファイルを設定する( 0, strパラメータ );\r
+ goto Label_0142;\r
+\r
+ case "_S":\r
+ this.t入力・行解析・RESULTSOUND・ファイルを設定する( 1, strパラメータ );\r
+ goto Label_0142;\r
+\r
+ case "_A":\r
+ this.t入力・行解析・RESULTSOUND・ファイルを設定する( 2, strパラメータ );\r
+ goto Label_0142;\r
+\r
+ case "_B":\r
+ this.t入力・行解析・RESULTSOUND・ファイルを設定する( 3, strパラメータ );\r
+ goto Label_0142;\r
+\r
+ case "_C":\r
+ this.t入力・行解析・RESULTSOUND・ファイルを設定する( 4, strパラメータ );\r
+ goto Label_0142;\r
+\r
+ case "_D":\r
+ this.t入力・行解析・RESULTSOUND・ファイルを設定する( 5, strパラメータ );\r
+ goto Label_0142;\r
+\r
+ case "_E":\r
+ this.t入力・行解析・RESULTSOUND・ファイルを設定する( 6, strパラメータ );\r
+ goto Label_0142;\r
+ }\r
+ }\r
+ Label_0142:\r
+ return true;\r
+ }\r
+ private void t入力・行解析・RESULTSOUND・ファイルを設定する( int nランク0to6, string strファイル名 )\r
+ {\r
+ if( ( nランク0to6 >= 0 ) && ( nランク0to6 <= 6 ) )\r
+ {\r
+ for( int i = nランク0to6; i >= 0; i-- )\r
+ {\r
+ if( this.nRESULTSOUND用優先順位[ i ] < ( 7 - nランク0to6 ) )\r
+ {\r
+ this.nRESULTSOUND用優先順位[ i ] = 7 - nランク0to6;\r
+ this.RESULTSOUND[ i ] = strファイル名;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ private bool t入力・行解析・SIZE( string strコマンド, string strパラメータ, string strコメント )\r
+ {\r
+ int num2;\r
+ if( strコマンド.StartsWith( "SIZE", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ strコマンド = strコマンド.Substring( 4 );\r
+ }\r
+ else\r
+ {\r
+ return false;\r
+ }\r
+ if( strコマンド.Length < 2 )\r
+ {\r
+ return false;\r
+ }\r
+ int index = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
+ if( ( index < 0 ) || ( index >= 0x510 ) )\r
+ {\r
+ Trace.TraceError( "SIZE番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
+ return false;\r
+ }\r
+ if( int.TryParse( strパラメータ, out num2 ) )\r
+ {\r
+ if( num2 < 0 )\r
+ {\r
+ num2 = 0;\r
+ }\r
+ else if( num2 > 100 )\r
+ {\r
+ num2 = 100;\r
+ }\r
+ if( this.n無限管理SIZE[ index ] == -index )\r
+ {\r
+ foreach( CWAV cwav in this.listWAV.Values )\r
+ {\r
+ if( cwav.nチップサイズ == -index )\r
+ {\r
+ cwav.nチップサイズ = num2;\r
+ }\r
+ }\r
+ }\r
+ this.n無限管理SIZE[ index ] = num2;\r
+ }\r
+ return true;\r
+ }\r
+ private bool t入力・行解析・WAV( string strコマンド, string strパラメータ, string strコメント )\r
+ {\r
+ if( strコマンド.StartsWith( "WAV", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ strコマンド = strコマンド.Substring( 3 );\r
+ }\r
+ else\r
+ {\r
+ return false;\r
+ }\r
+ if( strコマンド.Length < 2 )\r
+ {\r
+ return false;\r
+ }\r
+ int index = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
+ if( ( index < 0 ) || ( index >= 0x510 ) )\r
+ {\r
+ Trace.TraceError( "WAV番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
+ return false;\r
+ }\r
+ CWAV cwav = new CWAV();\r
+ cwav.n内部番号 = this.n内部番号WAV1to;\r
+ cwav.n表記上の番号 = index;\r
+ cwav.nチップサイズ = this.n無限管理SIZE[ index ];\r
+ cwav.n位置 = this.n無限管理PAN[ index ];\r
+ cwav.n音量 = this.n無限管理VOL[ index ];\r
+ cwav.strファイル名 = strパラメータ;\r
+ cwav.strコメント文 = strコメント;\r
+ this.listWAV.Add( this.n内部番号WAV1to, cwav );\r
+ if( this.n無限管理WAV[ index ] == -index )\r
+ {\r
+ for( int i = 0; i < this.listChip.Count; i++ )\r
+ {\r
+ CChip chip = this.listChip[ i ];\r
+ if( chip.bWAVを使うチャンネルである && ( chip.n整数値・内部番号 == -index ) )\r
+ {\r
+ chip.n整数値・内部番号 = this.n内部番号WAV1to;\r
+ }\r
+ }\r
+ }\r
+ this.n無限管理WAV[ index ] = this.n内部番号WAV1to;\r
+ this.n内部番号WAV1to++;\r
+ return true;\r
+ }\r
+ private bool t入力・行解析・WAVPAN_PAN( string strコマンド, string strパラメータ, string strコメント )\r
+ {\r
+ int num2;\r
+ if( strコマンド.StartsWith( "WAVPAN", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ strコマンド = strコマンド.Substring( 6 );\r
+ }\r
+ else if( strコマンド.StartsWith( "PAN", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ strコマンド = strコマンド.Substring( 3 );\r
+ }\r
+ else\r
+ {\r
+ return false;\r
+ }\r
+ if( strコマンド.Length < 2 )\r
+ {\r
+ return false;\r
+ }\r
+ int index = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
+ if( ( index < 0 ) || ( index >= 0x510 ) )\r
+ {\r
+ Trace.TraceError( "WAV番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
+ return false;\r
+ }\r
+ if( int.TryParse( strパラメータ, out num2 ) )\r
+ {\r
+ if( num2 < -100 )\r
+ {\r
+ num2 = -100;\r
+ }\r
+ else if( num2 >= 100 )\r
+ {\r
+ num2 = 100;\r
+ }\r
+ if( this.n無限管理PAN[ index ] == ( -10000 - index ) )\r
+ {\r
+ foreach( CWAV cwav in this.listWAV.Values )\r
+ {\r
+ if( cwav.n位置 == ( -10000 - index ) )\r
+ {\r
+ cwav.n位置 = num2;\r
+ }\r
+ }\r
+ }\r
+ this.n無限管理PAN[ index ] = num2;\r
+ }\r
+ return true;\r
+ }\r
+ private bool t入力・行解析・WAVVOL_VOLUME( string strコマンド, string strパラメータ, string strコメント )\r
+ {\r
+ int num2;\r
+ if( strコマンド.StartsWith( "WAVVOL", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ strコマンド = strコマンド.Substring( 6 );\r
+ }\r
+ else if( strコマンド.StartsWith( "VOLUME", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ strコマンド = strコマンド.Substring( 6 );\r
+ }\r
+ else\r
+ {\r
+ return false;\r
+ }\r
+ if( strコマンド.Length < 2 )\r
+ {\r
+ return false;\r
+ }\r
+ int index = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
+ if( ( index < 0 ) || ( index >= 0x510 ) )\r
+ {\r
+ Trace.TraceError( "WAV番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
+ return false;\r
+ }\r
+ if( int.TryParse( strパラメータ, out num2 ) )\r
+ {\r
+ if( num2 < 0 )\r
+ {\r
+ num2 = 0;\r
+ }\r
+ else if( num2 >= 100 )\r
+ {\r
+ num2 = 100;\r
+ }\r
+ if( this.n無限管理VOL[ index ] == -index )\r
+ {\r
+ foreach( CWAV cwav in this.listWAV.Values )\r
+ {\r
+ if( cwav.n音量 == -index )\r
+ {\r
+ cwav.n音量 = num2;\r
+ }\r
+ }\r
+ }\r
+ this.n無限管理VOL[ index ] = num2;\r
+ }\r
+ return true;\r
+ }\r
+ private bool t入力・行解析・チップ配置( string strコマンド, string strパラメータ, string strコメント )\r
+ {\r
+ if( strコマンド.Length != 5 )\r
+ {\r
+ return false;\r
+ }\r
+ int num = C変換.n小節番号の文字列3桁を数値に変換して返す( strコマンド.Substring( 0, 3 ) );\r
+ if( num < 0 )\r
+ {\r
+ return false;\r
+ }\r
+ num++;\r
+ int c = -1;\r
+ if( ( this.e種別 != E種別.GDA ) && ( this.e種別 != E種別.G2D ) )\r
+ {\r
+ c = C変換.n16進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 3, 2 ) );\r
+ if( c < 0 )\r
+ {\r
+ return false;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ string str = strコマンド.Substring( 3, 2 );\r
+ foreach( STGDAPARAM stgdaparam in this.stGDAParam )\r
+ {\r
+ if( str.Equals( stgdaparam.s, StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ c = stgdaparam.c;\r
+ break;\r
+ }\r
+ }\r
+ if( c < 0 )\r
+ {\r
+ return false;\r
+ }\r
+ }\r
+ if( ( c >= 0x11 ) && ( c <= 0x1a ) )\r
+ {\r
+ this.bチップがある.Drums = true;\r
+ }\r
+ else if( ( c >= 0x20 ) && ( c <= 0x27 ) )\r
+ {\r
+ this.bチップがある.Guitar = true;\r
+ }\r
+ else if( ( c >= 160 ) && ( c <= 0xa7 ) )\r
+ {\r
+ this.bチップがある.Bass = true;\r
+ }\r
+ if( c == 0x18 )\r
+ {\r
+ this.bチップがある.HHOpen = true;\r
+ }\r
+ switch( c )\r
+ {\r
+ case 0x19:\r
+ this.bチップがある.Ride = true;\r
+ break;\r
+\r
+ case 0x1a:\r
+ this.bチップがある.LeftCymbal = true;\r
+ break;\r
+\r
+ case 0x20:\r
+ this.bチップがある.OpenGuitar = true;\r
+ break;\r
+\r
+ case 160:\r
+ this.bチップがある.OpenBass = true;\r
+ break;\r
+\r
+ case 2:\r
+ {\r
+ double result = 0.0;\r
+ if( !double.TryParse( strパラメータ, out result ) )\r
+ {\r
+ Trace.TraceError( "小節長倍率に不正な値を指定しました。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
+ return false;\r
+ }\r
+ CChip item = new CChip();\r
+ item.n発声位置 = num * 0x180;\r
+ item.nチャンネル番号 = c;\r
+ item.db実数値 = result;\r
+ this.listChip.Add( item );\r
+ return true;\r
+ }\r
+ }\r
+ if( string.IsNullOrEmpty( strパラメータ ) )\r
+ {\r
+ return false;\r
+ }\r
+ int num4 = 0;\r
+ StringBuilder builder = new StringBuilder( strパラメータ.Length );\r
+ CharEnumerator enumerator = strパラメータ.GetEnumerator();\r
+ while( enumerator.MoveNext() )\r
+ {\r
+ if( enumerator.Current != '_' )\r
+ {\r
+ if( "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".IndexOf( enumerator.Current ) < 0 )\r
+ {\r
+ Trace.TraceError( "不正なオブジェクト指定があります。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
+ return false;\r
+ }\r
+ builder.Append( enumerator.Current );\r
+ num4++;\r
+ }\r
+ }\r
+ strパラメータ = builder.ToString();\r
+ if( ( num4 % 2 ) != 0 )\r
+ {\r
+ num4--;\r
+ }\r
+ for( int i = 0; i < ( num4 / 2 ); i++ )\r
+ {\r
+ int index = 0;\r
+ if( c == 3 )\r
+ {\r
+ index = C変換.n16進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( i * 2, 2 ) );\r
+ }\r
+ else\r
+ {\r
+ index = C変換.n36進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( i * 2, 2 ) );\r
+ }\r
+ if( index != 0 )\r
+ {\r
+ CChip chip2 = new CChip();\r
+ chip2.n発声位置 = ( num * 0x180 ) + ( ( 0x180 * i ) / ( num4 / 2 ) );\r
+ chip2.nチャンネル番号 = c;\r
+ chip2.n整数値 = index;\r
+ chip2.n整数値・内部番号 = index;\r
+ if( ( c >= 0x11 ) && ( c <= 0x1a ) )\r
+ {\r
+ chip2.e楽器パート = E楽器パート.DRUMS;\r
+ }\r
+ if( ( c >= 0x20 ) && ( c <= 0x27 ) )\r
+ {\r
+ chip2.e楽器パート = E楽器パート.GUITAR;\r
+ }\r
+ if( ( c >= 160 ) && ( c <= 0xa7 ) )\r
+ {\r
+ chip2.e楽器パート = E楽器パート.BASS;\r
+ }\r
+ if( chip2.bWAVを使うチャンネルである )\r
+ {\r
+ chip2.n整数値・内部番号 = this.n無限管理WAV[ index ];\r
+ }\r
+ else if( chip2.bBPMチップである )\r
+ {\r
+ chip2.n整数値・内部番号 = this.n無限管理BPM[ index ];\r
+ }\r
+ if( c == 0x53 )\r
+ {\r
+ if( ( index > 0 ) && ( index != 2 ) )\r
+ {\r
+ chip2.n発声位置 -= 0x20;\r
+ }\r
+ else if( index == 2 )\r
+ {\r
+ chip2.n発声位置 += 0x20;\r
+ }\r
+ }\r
+ this.listChip.Add( chip2 );\r
+ }\r
+ }\r
+ return true;\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using System.Drawing;\r
+using System.Drawing.Imaging;\r
+using System.Diagnostics;\r
+using System.IO;\r
+using System.Security.Cryptography;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ public class CScoreIni\r
+ {\r
+ // プロパティ\r
+\r
+ // [File] セクション\r
+ public STファイル stファイル;\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ public struct STファイル\r
+ {\r
+ public string Title;\r
+ public string Name;\r
+ public string Hash;\r
+ public int PlayCountDrums;\r
+ public int PlayCountGuitar;\r
+ public int PlayCountBass;\r
+ public int HistoryCount;\r
+ public string[] History;\r
+ public int BGMAdjust;\r
+ }\r
+\r
+ // 演奏記録セクション(6種類)\r
+ public STセクション stセクション;\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ public struct STセクション\r
+ {\r
+ public CScoreIni.C演奏記録 HiScoreDrums;\r
+ public CScoreIni.C演奏記録 HiSkillDrums;\r
+ public CScoreIni.C演奏記録 HiScoreGuitar;\r
+ public CScoreIni.C演奏記録 HiSkillGuitar;\r
+ public CScoreIni.C演奏記録 HiScoreBass;\r
+ public CScoreIni.C演奏記録 HiSkillBass;\r
+ public CScoreIni.C演奏記録 this[ int index ]\r
+ {\r
+ get\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ return this.HiScoreDrums;\r
+\r
+ case 1:\r
+ return this.HiSkillDrums;\r
+\r
+ case 2:\r
+ return this.HiScoreGuitar;\r
+\r
+ case 3:\r
+ return this.HiSkillGuitar;\r
+\r
+ case 4:\r
+ return this.HiScoreBass;\r
+\r
+ case 5:\r
+ return this.HiSkillBass;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ set\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ this.HiScoreDrums = value;\r
+ return;\r
+\r
+ case 1:\r
+ this.HiSkillDrums = value;\r
+ return;\r
+\r
+ case 2:\r
+ this.HiScoreGuitar = value;\r
+ return;\r
+\r
+ case 3:\r
+ this.HiSkillGuitar = value;\r
+ return;\r
+\r
+ case 4:\r
+ this.HiScoreBass = value;\r
+ return;\r
+\r
+ case 5:\r
+ this.HiSkillBass = value;\r
+ return;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ }\r
+ }\r
+ public enum Eセクション種別 : int\r
+ {\r
+ Unknown = -2,\r
+ File = -1,\r
+ HiScoreDrums = 0,\r
+ HiSkillDrums = 1,\r
+ HiScoreGuitar = 2,\r
+ HiSkillGuitar = 3,\r
+ HiScoreBass = 4,\r
+ HiSkillBass = 5,\r
+ }\r
+ public class C演奏記録\r
+ {\r
+ public STAUTOPLAY bAutoPlay;\r
+ public bool bDrums有効;\r
+ public bool bGuitar有効;\r
+ public STDGBVALUE<bool> bHidden;\r
+ public STDGBVALUE<bool> bLeft;\r
+ public STDGBVALUE<bool> bLight;\r
+ public STDGBVALUE<bool> bReverse;\r
+ public bool bSTAGEFAILED有効;\r
+ public STDGBVALUE<bool> bSudden;\r
+ public bool bTight;\r
+ public bool b演奏にMIDI入力を使用した;\r
+ public bool b演奏にキーボードを使用した;\r
+ public bool b演奏にジョイパッドを使用した;\r
+ public bool b演奏にマウスを使用した;\r
+ public double dbゲーム型スキル値;\r
+ public double db演奏型スキル値;\r
+ public ECYGroup eCYGroup;\r
+ public Eダークモード eDark;\r
+ public EFTGroup eFTGroup;\r
+ public EHHGroup eHHGroup;\r
+ public E打ち分け時の再生の優先順位 eHitSoundPriorityCY;\r
+ public E打ち分け時の再生の優先順位 eHitSoundPriorityFT;\r
+ public E打ち分け時の再生の優先順位 eHitSoundPriorityHH;\r
+ public STDGBVALUE<Eランダムモード> eRandom;\r
+ public Eダメージレベル eダメージレベル;\r
+ public STDGBVALUE<float> f譜面スクロール速度;\r
+ public string Hash;\r
+ public int nGoodになる範囲ms;\r
+ public int nGood数;\r
+ public int nGreatになる範囲ms;\r
+ public int nGreat数;\r
+ public int nMiss数;\r
+ public int nPerfectになる範囲ms;\r
+ public int nPerfect数;\r
+ public int nPoorになる範囲ms;\r
+ public int nPoor数;\r
+ public long nスコア;\r
+ public int n演奏速度分子;\r
+ public int n演奏速度分母;\r
+ public int n最大コンボ数;\r
+ public int n全チップ数;\r
+ public string strDTXManiaのバージョン;\r
+ public bool レーン9モード;\r
+ public string 最終更新日時;\r
+\r
+ public C演奏記録()\r
+ {\r
+ STAUTOPLAY stautoplay = new STAUTOPLAY();\r
+ stautoplay.LC = false;\r
+ stautoplay.HH = false;\r
+ stautoplay.SD = false;\r
+ stautoplay.BD = false;\r
+ stautoplay.HT = false;\r
+ stautoplay.LT = false;\r
+ stautoplay.FT = false;\r
+ stautoplay.CY = false;\r
+ stautoplay.Guitar = false;\r
+ stautoplay.Bass = false;\r
+ this.bAutoPlay = stautoplay;\r
+ STDGBVALUE<bool> stdgbvalue = new STDGBVALUE<bool>();\r
+ stdgbvalue.Drums = false;\r
+ stdgbvalue.Guitar = false;\r
+ stdgbvalue.Bass = false;\r
+ this.bSudden = stdgbvalue;\r
+ STDGBVALUE<bool> stdgbvalue2 = new STDGBVALUE<bool>();\r
+ stdgbvalue2.Drums = false;\r
+ stdgbvalue2.Guitar = false;\r
+ stdgbvalue2.Bass = false;\r
+ this.bHidden = stdgbvalue2;\r
+ STDGBVALUE<bool> stdgbvalue3 = new STDGBVALUE<bool>();\r
+ stdgbvalue3.Drums = false;\r
+ stdgbvalue3.Guitar = false;\r
+ stdgbvalue3.Bass = false;\r
+ this.bReverse = stdgbvalue3;\r
+ STDGBVALUE<Eランダムモード> stdgbvalue4 = new STDGBVALUE<Eランダムモード>();\r
+ stdgbvalue4.Drums = Eランダムモード.OFF;\r
+ stdgbvalue4.Guitar = Eランダムモード.OFF;\r
+ stdgbvalue4.Bass = Eランダムモード.OFF;\r
+ this.eRandom = stdgbvalue4;\r
+ STDGBVALUE<bool> stdgbvalue5 = new STDGBVALUE<bool>();\r
+ stdgbvalue5.Drums = false;\r
+ stdgbvalue5.Guitar = false;\r
+ stdgbvalue5.Bass = false;\r
+ this.bLight = stdgbvalue5;\r
+ STDGBVALUE<bool> stdgbvalue6 = new STDGBVALUE<bool>();\r
+ stdgbvalue6.Drums = false;\r
+ stdgbvalue6.Guitar = false;\r
+ stdgbvalue6.Bass = false;\r
+ this.bLeft = stdgbvalue6;\r
+ STDGBVALUE<float> stdgbvalue7 = new STDGBVALUE<float>();\r
+ stdgbvalue7.Drums = 1f;\r
+ stdgbvalue7.Guitar = 1f;\r
+ stdgbvalue7.Bass = 1f;\r
+ this.f譜面スクロール速度 = stdgbvalue7;\r
+ this.n演奏速度分子 = 20;\r
+ this.n演奏速度分母 = 20;\r
+ this.bGuitar有効 = true;\r
+ this.bDrums有効 = true;\r
+ this.bSTAGEFAILED有効 = true;\r
+ this.eダメージレベル = Eダメージレベル.普通;\r
+ this.nPerfectになる範囲ms = 0x22;\r
+ this.nGreatになる範囲ms = 0x43;\r
+ this.nGoodになる範囲ms = 0x54;\r
+ this.nPoorになる範囲ms = 0x75;\r
+ this.strDTXManiaのバージョン = "Unknown";\r
+ this.最終更新日時 = "";\r
+ this.Hash = "00000000000000000000000000000000";\r
+ this.レーン9モード = true;\r
+ }\r
+\r
+ public bool bフルコンボじゃない\r
+ {\r
+ get\r
+ {\r
+ return !this.bフルコンボである;\r
+ }\r
+ }\r
+ public bool bフルコンボである\r
+ {\r
+ get\r
+ {\r
+ return ( ( this.n最大コンボ数 > 0 ) && ( this.n最大コンボ数 == ( ( ( ( this.nPerfect数 + this.nGreat数 ) + this.nGood数 ) + this.nPoor数 ) + this.nMiss数 ) ) );\r
+ }\r
+ }\r
+\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ public struct STAUTOPLAY\r
+ {\r
+ public bool LC;\r
+ public bool HH;\r
+ public bool SD;\r
+ public bool BD;\r
+ public bool HT;\r
+ public bool LT;\r
+ public bool FT;\r
+ public bool CY;\r
+ public bool Guitar;\r
+ public bool Bass;\r
+ public bool this[ int index ]\r
+ {\r
+ get\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ return this.LC;\r
+\r
+ case 1:\r
+ return this.HH;\r
+\r
+ case 2:\r
+ return this.SD;\r
+\r
+ case 3:\r
+ return this.BD;\r
+\r
+ case 4:\r
+ return this.HT;\r
+\r
+ case 5:\r
+ return this.LT;\r
+\r
+ case 6:\r
+ return this.FT;\r
+\r
+ case 7:\r
+ return this.CY;\r
+\r
+ case 8:\r
+ return this.Guitar;\r
+\r
+ case 9:\r
+ return this.Bass;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ set\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ this.LC = value;\r
+ return;\r
+\r
+ case 1:\r
+ this.HH = value;\r
+ return;\r
+\r
+ case 2:\r
+ this.SD = value;\r
+ return;\r
+\r
+ case 3:\r
+ this.BD = value;\r
+ return;\r
+\r
+ case 4:\r
+ this.HT = value;\r
+ return;\r
+\r
+ case 5:\r
+ this.LT = value;\r
+ return;\r
+\r
+ case 6:\r
+ this.FT = value;\r
+ return;\r
+\r
+ case 7:\r
+ this.CY = value;\r
+ return;\r
+\r
+ case 8:\r
+ this.Guitar = value;\r
+ return;\r
+\r
+ case 9:\r
+ this.Bass = value;\r
+ return;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// <para>.score.ini の存在するフォルダ(絶対パス;末尾に '\' はついていない)。</para>\r
+ /// <para>未保存などでファイル名がない場合は null。</para>\r
+ /// </summary>\r
+ public string iniファイルのあるフォルダ名\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// <para>.score.ini のファイル名(絶対パス)。</para>\r
+ /// <para>未保存などでファイル名がない場合は null。</para>\r
+ /// </summary>\r
+ public string iniファイル名\r
+ {\r
+ get; \r
+ private set;\r
+ }\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public CScoreIni()\r
+ {\r
+ this.iniファイルのあるフォルダ名 = null;\r
+ this.iniファイル名 = null;\r
+ STファイル stファイル = new STファイル();\r
+ stファイル.Title = "";\r
+ stファイル.Name = "";\r
+ stファイル.Hash = "";\r
+ stファイル.History = new string[] { "", "", "", "", "" };\r
+ this.stファイル = stファイル;\r
+ STセクション stセクション = new STセクション();\r
+ stセクション.HiScoreDrums = new C演奏記録();\r
+ stセクション.HiSkillDrums = new C演奏記録();\r
+ stセクション.HiScoreGuitar = new C演奏記録();\r
+ stセクション.HiSkillGuitar = new C演奏記録();\r
+ stセクション.HiScoreBass = new C演奏記録();\r
+ stセクション.HiSkillBass = new C演奏記録();\r
+ this.stセクション = stセクション;\r
+ }\r
+\r
+ /// <summary>\r
+ /// <para>初期化後にiniファイルを読み込むコンストラクタ。</para>\r
+ /// <para>読み込んだiniに不正値があれば、それが含まれるセクションをリセットする。</para>\r
+ /// </summary>\r
+ public CScoreIni( string str読み込むiniファイル )\r
+ : this()\r
+ {\r
+ this.t読み込み( str読み込むiniファイル );\r
+ this.t全演奏記録セクションの整合性をチェックし不整合があればリセットする();\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ /// <summary>\r
+ /// <para>現在の this.Record[] オブジェクトの、指定されたセクションの情報が正当であるか否かを判定する。\r
+ /// 真偽どちらでも、その内容は書き換えない。</para>\r
+ /// </summary>\r
+ /// <param name="eセクション">判定するセクション。</param>\r
+ /// <returns>正当である(整合性がある)場合は true。</returns>\r
+ public bool b整合性がある( Eセクション種別 eセクション )\r
+ {\r
+ return true; // オープンソース化に伴い、整合性チェックを無効化。(2010.10.21)\r
+ }\r
+ \r
+ /// <summary>\r
+ /// 指定されたファイルの内容から MD5 値を求め、それを16進数に変換した文字列を返す。\r
+ /// </summary>\r
+ /// <param name="ファイル名">MD5 を求めるファイル名。</param>\r
+ /// <returns>算出結果の MD5 を16進数で並べた文字列。</returns>\r
+ public static string tファイルのMD5を求めて返す( string ファイル名 )\r
+ {\r
+ byte[] buffer = null;\r
+ FileStream stream = new FileStream( ファイル名, FileMode.Open, FileAccess.Read );\r
+ buffer = new byte[ stream.Length ];\r
+ stream.Read( buffer, 0, (int) stream.Length );\r
+ stream.Close();\r
+ byte[] buffer2 = new MD5CryptoServiceProvider().ComputeHash( buffer );\r
+\r
+ StringBuilder builder = new StringBuilder( 0x21 );\r
+ foreach( byte num in buffer2 )\r
+ builder.Append( num.ToString( "x2" ) );\r
+\r
+ return builder.ToString();\r
+ }\r
+ \r
+ /// <summary>\r
+ /// 指定された .score.ini を読み込む。内容の真偽は判定しない。\r
+ /// </summary>\r
+ /// <param name="iniファイル名">読み込む .score.ini ファイルを指定します(絶対パスが安全)。</param>\r
+ public void t読み込み( string iniファイル名 )\r
+ {\r
+ this.iniファイルのあるフォルダ名 = Path.GetDirectoryName( iniファイル名 );\r
+ this.iniファイル名 = Path.GetFileName( iniファイル名 );\r
+\r
+ Eセクション種別 unknown = Eセクション種別.Unknown;\r
+ if( File.Exists( iniファイル名 ) )\r
+ {\r
+ string str;\r
+ StreamReader reader = new StreamReader( iniファイル名, Encoding.GetEncoding( "shift-jis" ) );\r
+ while( ( str = reader.ReadLine() ) != null )\r
+ {\r
+ str = str.Replace( '\t', ' ' ).TrimStart( new char[] { '\t', ' ' } );\r
+ if( ( str.Length != 0 ) && ( str[ 0 ] != ';' ) )\r
+ {\r
+ try\r
+ {\r
+ string str3;\r
+ string str4;\r
+ C演奏記録 c演奏記録;\r
+ if( str[ 0 ] == '[' )\r
+ {\r
+ StringBuilder builder = new StringBuilder( 0x20 );\r
+ int num = 1;\r
+ while( ( num < str.Length ) && ( str[ num ] != ']' ) )\r
+ {\r
+ builder.Append( str[ num++ ] );\r
+ }\r
+ string str2 = builder.ToString();\r
+ if( str2.Equals( "File" ) )\r
+ {\r
+ unknown = Eセクション種別.File;\r
+ }\r
+ else if( str2.Equals( "HiScore.Drums" ) )\r
+ {\r
+ unknown = Eセクション種別.HiScoreDrums;\r
+ }\r
+ else if( str2.Equals( "HiSkill.Drums" ) )\r
+ {\r
+ unknown = Eセクション種別.HiSkillDrums;\r
+ }\r
+ else if( str2.Equals( "HiScore.Guitar" ) )\r
+ {\r
+ unknown = Eセクション種別.HiScoreGuitar;\r
+ }\r
+ else if( str2.Equals( "HiSkill.Guitar" ) )\r
+ {\r
+ unknown = Eセクション種別.HiSkillGuitar;\r
+ }\r
+ else if( str2.Equals( "HiScore.Bass" ) )\r
+ {\r
+ unknown = Eセクション種別.HiScoreBass;\r
+ }\r
+ else if( str2.Equals( "HiSkill.Bass" ) )\r
+ {\r
+ unknown = Eセクション種別.HiSkillBass;\r
+ }\r
+ else\r
+ {\r
+ unknown = Eセクション種別.Unknown;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ string[] strArray = str.Split( new char[] { '=' } );\r
+ if( strArray.Length == 2 )\r
+ {\r
+ str3 = strArray[ 0 ].Trim();\r
+ str4 = strArray[ 1 ].Trim();\r
+ switch( unknown )\r
+ {\r
+ case Eセクション種別.File:\r
+ {\r
+ if( !str3.Equals( "Title" ) )\r
+ {\r
+ goto Label_01C7;\r
+ }\r
+ this.stファイル.Title = str4;\r
+ continue;\r
+ }\r
+ case Eセクション種別.HiScoreDrums:\r
+ case Eセクション種別.HiSkillDrums:\r
+ case Eセクション種別.HiScoreGuitar:\r
+ case Eセクション種別.HiSkillGuitar:\r
+ case Eセクション種別.HiScoreBass:\r
+ case Eセクション種別.HiSkillBass:\r
+ {\r
+ c演奏記録 = this.stセクション[ (int) unknown ];\r
+ if( !str3.Equals( "Score" ) )\r
+ {\r
+ goto Label_03B9;\r
+ }\r
+ c演奏記録.nスコア = long.Parse( str4 );\r
+ continue;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ continue;\r
+ Label_01C7:\r
+ if( str3.Equals( "Name" ) )\r
+ {\r
+ this.stファイル.Name = str4;\r
+ }\r
+ else if( str3.Equals( "Hash" ) )\r
+ {\r
+ this.stファイル.Hash = str4;\r
+ }\r
+ else if( str3.Equals( "PlayCountDrums" ) )\r
+ {\r
+ this.stファイル.PlayCountDrums = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 0x5f5e0ff, 0 );\r
+ }\r
+ else if( str3.Equals( "PlayCountGuitar" ) )\r
+ {\r
+ this.stファイル.PlayCountGuitar = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 0x5f5e0ff, 0 );\r
+ }\r
+ else if( str3.Equals( "PlayCountBass" ) )\r
+ {\r
+ this.stファイル.PlayCountBass = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 0x5f5e0ff, 0 );\r
+ }\r
+ else if( str3.Equals( "History0" ) )\r
+ {\r
+ this.stファイル.History[ 0 ] = str4;\r
+ }\r
+ else if( str3.Equals( "History1" ) )\r
+ {\r
+ this.stファイル.History[ 1 ] = str4;\r
+ }\r
+ else if( str3.Equals( "History2" ) )\r
+ {\r
+ this.stファイル.History[ 2 ] = str4;\r
+ }\r
+ else if( str3.Equals( "History3" ) )\r
+ {\r
+ this.stファイル.History[ 3 ] = str4;\r
+ }\r
+ else if( str3.Equals( "History4" ) )\r
+ {\r
+ this.stファイル.History[ 4 ] = str4;\r
+ }\r
+ else if( str3.Equals( "HistoryCount" ) )\r
+ {\r
+ this.stファイル.HistoryCount = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 0x5f5e0ff, 0 );\r
+ }\r
+ else if( str3.Equals( "BGMAdjust" ) )\r
+ {\r
+ this.stファイル.BGMAdjust = C変換.n値を文字列から取得して返す( str4, 0 );\r
+ }\r
+ continue;\r
+ Label_03B9:\r
+ if( str3.Equals( "PlaySkill" ) )\r
+ {\r
+ c演奏記録.db演奏型スキル値 = (double) decimal.Parse( str4 );\r
+ }\r
+ else if( str3.Equals( "Skill" ) )\r
+ {\r
+ c演奏記録.dbゲーム型スキル値 = (double) decimal.Parse( str4 );\r
+ }\r
+ else if( str3.Equals( "Perfect" ) )\r
+ {\r
+ c演奏記録.nPerfect数 = int.Parse( str4 );\r
+ }\r
+ else if( str3.Equals( "Great" ) )\r
+ {\r
+ c演奏記録.nGreat数 = int.Parse( str4 );\r
+ }\r
+ else if( str3.Equals( "Good" ) )\r
+ {\r
+ c演奏記録.nGood数 = int.Parse( str4 );\r
+ }\r
+ else if( str3.Equals( "Poor" ) )\r
+ {\r
+ c演奏記録.nPoor数 = int.Parse( str4 );\r
+ }\r
+ else if( str3.Equals( "Miss" ) )\r
+ {\r
+ c演奏記録.nMiss数 = int.Parse( str4 );\r
+ }\r
+ else if( str3.Equals( "MaxCombo" ) )\r
+ {\r
+ c演奏記録.n最大コンボ数 = int.Parse( str4 );\r
+ }\r
+ else if( str3.Equals( "TotalChips" ) )\r
+ {\r
+ c演奏記録.n全チップ数 = int.Parse( str4 );\r
+ }\r
+ else if( str3.Equals( "AutoPlay" ) )\r
+ {\r
+ if( str4.Length == 9 )\r
+ {\r
+ for( int i = 0; i < 9; i++ )\r
+ {\r
+ c演奏記録.bAutoPlay[ i ] = this.ONorOFF( str4[ i ] );\r
+ }\r
+ }\r
+ else if( str4.Length == 10 )\r
+ {\r
+ for( int j = 0; j < 10; j++ )\r
+ {\r
+ c演奏記録.bAutoPlay[ j ] = this.ONorOFF( str4[ j ] );\r
+ }\r
+ }\r
+ }\r
+ else if( str3.Equals( "TightDrums" ) )\r
+ {\r
+ c演奏記録.bTight = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "SuddenDrums" ) )\r
+ {\r
+ c演奏記録.bSudden.Drums = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "SuddenGuitar" ) )\r
+ {\r
+ c演奏記録.bSudden.Guitar = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "SuddenBass" ) )\r
+ {\r
+ c演奏記録.bSudden.Bass = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "HiddenDrums" ) )\r
+ {\r
+ c演奏記録.bHidden.Drums = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "HiddenGuitar" ) )\r
+ {\r
+ c演奏記録.bHidden.Guitar = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "HiddenBass" ) )\r
+ {\r
+ c演奏記録.bHidden.Bass = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "ReverseDrums" ) )\r
+ {\r
+ c演奏記録.bReverse.Drums = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "ReverseGuitar" ) )\r
+ {\r
+ c演奏記録.bReverse.Guitar = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "ReverseBass" ) )\r
+ {\r
+ c演奏記録.bReverse.Bass = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else\r
+ {\r
+ if( str3.Equals( "RandomGuitar" ) )\r
+ {\r
+ switch( int.Parse( str4 ) )\r
+ {\r
+ case 0:\r
+ {\r
+ c演奏記録.eRandom.Guitar = Eランダムモード.OFF;\r
+ continue;\r
+ }\r
+ case 1:\r
+ {\r
+ c演奏記録.eRandom.Guitar = Eランダムモード.RANDOM;\r
+ continue;\r
+ }\r
+ case 2:\r
+ {\r
+ c演奏記録.eRandom.Guitar = Eランダムモード.SUPERRANDOM;\r
+ continue;\r
+ }\r
+ }\r
+ throw new Exception( "RandomGuitar の値が無効です。" );\r
+ }\r
+ if( str3.Equals( "RandomBass" ) )\r
+ {\r
+ switch( int.Parse( str4 ) )\r
+ {\r
+ case 0:\r
+ {\r
+ c演奏記録.eRandom.Bass = Eランダムモード.OFF;\r
+ continue;\r
+ }\r
+ case 1:\r
+ {\r
+ c演奏記録.eRandom.Bass = Eランダムモード.RANDOM;\r
+ continue;\r
+ }\r
+ case 2:\r
+ {\r
+ c演奏記録.eRandom.Bass = Eランダムモード.SUPERRANDOM;\r
+ continue;\r
+ }\r
+ }\r
+ throw new Exception( "RandomBass の値が無効です。" );\r
+ }\r
+ if( str3.Equals( "LightGuitar" ) )\r
+ {\r
+ c演奏記録.bLight.Guitar = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "LightBass" ) )\r
+ {\r
+ c演奏記録.bLight.Bass = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "LeftGuitar" ) )\r
+ {\r
+ c演奏記録.bLeft.Guitar = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "LeftBass" ) )\r
+ {\r
+ c演奏記録.bLeft.Bass = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else\r
+ {\r
+ if( str3.Equals( "Dark" ) )\r
+ {\r
+ switch( int.Parse( str4 ) )\r
+ {\r
+ case 0:\r
+ {\r
+ c演奏記録.eDark = Eダークモード.OFF;\r
+ continue;\r
+ }\r
+ case 1:\r
+ {\r
+ c演奏記録.eDark = Eダークモード.HALF;\r
+ continue;\r
+ }\r
+ case 2:\r
+ {\r
+ c演奏記録.eDark = Eダークモード.FULL;\r
+ continue;\r
+ }\r
+ }\r
+ throw new Exception( "Dark の値が無効です。" );\r
+ }\r
+ if( str3.Equals( "ScrollSpeedDrums" ) )\r
+ {\r
+ c演奏記録.f譜面スクロール速度.Drums = (float) decimal.Parse( str4 );\r
+ }\r
+ else if( str3.Equals( "ScrollSpeedGuitar" ) )\r
+ {\r
+ c演奏記録.f譜面スクロール速度.Guitar = (float) decimal.Parse( str4 );\r
+ }\r
+ else if( str3.Equals( "ScrollSpeedBass" ) )\r
+ {\r
+ c演奏記録.f譜面スクロール速度.Bass = (float) decimal.Parse( str4 );\r
+ }\r
+ else if( str3.Equals( "PlaySpeed" ) )\r
+ {\r
+ string[] strArray2 = str4.Split( new char[] { '/' } );\r
+ if( strArray2.Length == 2 )\r
+ {\r
+ c演奏記録.n演奏速度分子 = int.Parse( strArray2[ 0 ] );\r
+ c演奏記録.n演奏速度分母 = int.Parse( strArray2[ 1 ] );\r
+ }\r
+ }\r
+ else\r
+ {\r
+ if( str3.Equals( "HHGroup" ) )\r
+ {\r
+ switch( int.Parse( str4 ) )\r
+ {\r
+ case 0:\r
+ {\r
+ c演奏記録.eHHGroup = EHHGroup.全部打ち分ける;\r
+ continue;\r
+ }\r
+ case 1:\r
+ {\r
+ c演奏記録.eHHGroup = EHHGroup.ハイハットのみ打ち分ける;\r
+ continue;\r
+ }\r
+ case 2:\r
+ {\r
+ c演奏記録.eHHGroup = EHHGroup.左シンバルのみ打ち分ける;\r
+ continue;\r
+ }\r
+ case 3:\r
+ {\r
+ c演奏記録.eHHGroup = EHHGroup.全部共通;\r
+ continue;\r
+ }\r
+ }\r
+ throw new Exception( "HHGroup の値が無効です。" );\r
+ }\r
+ if( str3.Equals( "FTGroup" ) )\r
+ {\r
+ switch( int.Parse( str4 ) )\r
+ {\r
+ case 0:\r
+ {\r
+ c演奏記録.eFTGroup = EFTGroup.打ち分ける;\r
+ continue;\r
+ }\r
+ case 1:\r
+ {\r
+ c演奏記録.eFTGroup = EFTGroup.共通;\r
+ continue;\r
+ }\r
+ }\r
+ throw new Exception( "FTGroup の値が無効です。" );\r
+ }\r
+ if( str3.Equals( "CYGroup" ) )\r
+ {\r
+ switch( int.Parse( str4 ) )\r
+ {\r
+ case 0:\r
+ {\r
+ c演奏記録.eCYGroup = ECYGroup.打ち分ける;\r
+ continue;\r
+ }\r
+ case 1:\r
+ {\r
+ c演奏記録.eCYGroup = ECYGroup.共通;\r
+ continue;\r
+ }\r
+ }\r
+ throw new Exception( "CYGroup の値が無効です。" );\r
+ }\r
+ if( str3.Equals( "HitSoundPriorityHH" ) )\r
+ {\r
+ switch( int.Parse( str4 ) )\r
+ {\r
+ case 0:\r
+ {\r
+ c演奏記録.eHitSoundPriorityHH = E打ち分け時の再生の優先順位.ChipがPadより優先;\r
+ continue;\r
+ }\r
+ case 1:\r
+ {\r
+ c演奏記録.eHitSoundPriorityHH = E打ち分け時の再生の優先順位.PadがChipより優先;\r
+ continue;\r
+ }\r
+ }\r
+ throw new Exception( "HitSoundPriorityHH の値が無効です。" );\r
+ }\r
+ if( str3.Equals( "HitSoundPriorityFT" ) )\r
+ {\r
+ switch( int.Parse( str4 ) )\r
+ {\r
+ case 0:\r
+ {\r
+ c演奏記録.eHitSoundPriorityFT = E打ち分け時の再生の優先順位.ChipがPadより優先;\r
+ continue;\r
+ }\r
+ case 1:\r
+ {\r
+ c演奏記録.eHitSoundPriorityFT = E打ち分け時の再生の優先順位.PadがChipより優先;\r
+ continue;\r
+ }\r
+ }\r
+ throw new Exception( "HitSoundPriorityFT の値が無効です。" );\r
+ }\r
+ if( str3.Equals( "HitSoundPriorityCY" ) )\r
+ {\r
+ switch( int.Parse( str4 ) )\r
+ {\r
+ case 0:\r
+ {\r
+ c演奏記録.eHitSoundPriorityCY = E打ち分け時の再生の優先順位.ChipがPadより優先;\r
+ continue;\r
+ }\r
+ case 1:\r
+ {\r
+ c演奏記録.eHitSoundPriorityCY = E打ち分け時の再生の優先順位.PadがChipより優先;\r
+ continue;\r
+ }\r
+ }\r
+ throw new Exception( "HitSoundPriorityCY の値が無効です。" );\r
+ }\r
+ if( str3.Equals( "Guitar" ) )\r
+ {\r
+ c演奏記録.bGuitar有効 = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "Drums" ) )\r
+ {\r
+ c演奏記録.bDrums有効 = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "StageFailed" ) )\r
+ {\r
+ c演奏記録.bSTAGEFAILED有効 = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else\r
+ {\r
+ if( str3.Equals( "DamageLevel" ) )\r
+ {\r
+ switch( int.Parse( str4 ) )\r
+ {\r
+ case 0:\r
+ {\r
+ c演奏記録.eダメージレベル = Eダメージレベル.少ない;\r
+ continue;\r
+ }\r
+ case 1:\r
+ {\r
+ c演奏記録.eダメージレベル = Eダメージレベル.普通;\r
+ continue;\r
+ }\r
+ case 2:\r
+ {\r
+ c演奏記録.eダメージレベル = Eダメージレベル.大きい;\r
+ continue;\r
+ }\r
+ }\r
+ throw new Exception( "DamageLevel の値が無効です。" );\r
+ }\r
+ if( str3.Equals( "UseKeyboard" ) )\r
+ {\r
+ c演奏記録.b演奏にキーボードを使用した = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "UseMIDIIN" ) )\r
+ {\r
+ c演奏記録.b演奏にMIDI入力を使用した = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "UseJoypad" ) )\r
+ {\r
+ c演奏記録.b演奏にジョイパッドを使用した = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "UseMouse" ) )\r
+ {\r
+ c演奏記録.b演奏にマウスを使用した = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "PerfectRange" ) )\r
+ {\r
+ c演奏記録.nPerfectになる範囲ms = int.Parse( str4 );\r
+ }\r
+ else if( str3.Equals( "GreatRange" ) )\r
+ {\r
+ c演奏記録.nGreatになる範囲ms = int.Parse( str4 );\r
+ }\r
+ else if( str3.Equals( "GoodRange" ) )\r
+ {\r
+ c演奏記録.nGoodになる範囲ms = int.Parse( str4 );\r
+ }\r
+ else if( str3.Equals( "PoorRange" ) )\r
+ {\r
+ c演奏記録.nPoorになる範囲ms = int.Parse( str4 );\r
+ }\r
+ else if( str3.Equals( "DTXManiaVersion" ) )\r
+ {\r
+ c演奏記録.strDTXManiaのバージョン = str4;\r
+ }\r
+ else if( str3.Equals( "DateTime" ) )\r
+ {\r
+ c演奏記録.最終更新日時 = str4;\r
+ }\r
+ else if( str3.Equals( "Hash" ) )\r
+ {\r
+ c演奏記録.Hash = str4;\r
+ }\r
+ else if( str3.Equals( "9LaneMode" ) )\r
+ {\r
+ c演奏記録.レーン9モード = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ continue;\r
+ }\r
+ catch( Exception exception )\r
+ {\r
+ Trace.TraceError( "{0}読み込みを中断します。({1})", new object[] { exception.Message, iniファイル名 } );\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ reader.Close();\r
+ }\r
+ }\r
+\r
+ internal void tヒストリを追加する( string str追加文字列 )\r
+ {\r
+ this.stファイル.HistoryCount++;\r
+ for( int i = 3; i >= 0; i-- )\r
+ this.stファイル.History[ i + 1 ] = this.stファイル.History[ i ];\r
+ DateTime now = DateTime.Now;\r
+ this.stファイル.History[ 0 ] = string.Format( "{0:0}.{1:D2}/{2}/{3} {4}", new object[] { this.stファイル.HistoryCount, now.Year % 100, now.Month, now.Day, str追加文字列 } );\r
+ }\r
+ internal void t書き出し( string iniファイル名 )\r
+ {\r
+ this.iniファイルのあるフォルダ名 = Path.GetDirectoryName( iniファイル名 );\r
+ this.iniファイル名 = Path.GetFileName( iniファイル名 );\r
+\r
+ StreamWriter writer = new StreamWriter( iniファイル名, false, Encoding.GetEncoding( "shift-jis" ) );\r
+ writer.WriteLine( "[File]" );\r
+ writer.WriteLine( "Title={0}", this.stファイル.Title );\r
+ writer.WriteLine( "Name={0}", this.stファイル.Name );\r
+ writer.WriteLine( "Hash={0}", this.stファイル.Hash );\r
+ writer.WriteLine( "PlayCountDrums={0}", this.stファイル.PlayCountDrums );\r
+ writer.WriteLine( "PlayCountGuitars={0}", this.stファイル.PlayCountGuitar );\r
+ writer.WriteLine( "PlayCountBass={0}", this.stファイル.PlayCountBass );\r
+ writer.WriteLine( "HistoryCount={0}", this.stファイル.HistoryCount );\r
+ writer.WriteLine( "History0={0}", this.stファイル.History[ 0 ] );\r
+ writer.WriteLine( "History1={0}", this.stファイル.History[ 1 ] );\r
+ writer.WriteLine( "History2={0}", this.stファイル.History[ 2 ] );\r
+ writer.WriteLine( "History3={0}", this.stファイル.History[ 3 ] );\r
+ writer.WriteLine( "History4={0}", this.stファイル.History[ 4 ] );\r
+ writer.WriteLine( "BGMAdjust={0}", this.stファイル.BGMAdjust );\r
+ writer.WriteLine();\r
+ for( int i = 0; i < 6; i++ )\r
+ {\r
+ string[] strArray = new string[] { "HiScore.Drums", "HiSkill.Drums", "HiScore.Guitar", "HiSkill.Guitar", "HiScore.Bass", "HiSkill.Bass" };\r
+ writer.WriteLine( "[{0}]", strArray[ i ] );\r
+ writer.WriteLine( "Score={0}", this.stセクション[ i ].nスコア );\r
+ writer.WriteLine( "PlaySkill={0}", this.stセクション[ i ].db演奏型スキル値 );\r
+ writer.WriteLine( "Skill={0}", this.stセクション[ i ].dbゲーム型スキル値 );\r
+ writer.WriteLine( "Perfect={0}", this.stセクション[ i ].nPerfect数 );\r
+ writer.WriteLine( "Great={0}", this.stセクション[ i ].nGreat数 );\r
+ writer.WriteLine( "Good={0}", this.stセクション[ i ].nGood数 );\r
+ writer.WriteLine( "Poor={0}", this.stセクション[ i ].nPoor数 );\r
+ writer.WriteLine( "Miss={0}", this.stセクション[ i ].nMiss数 );\r
+ writer.WriteLine( "MaxCombo={0}", this.stセクション[ i ].n最大コンボ数 );\r
+ writer.WriteLine( "TotalChips={0}", this.stセクション[ i ].n全チップ数 );\r
+ writer.Write( "AutoPlay=" );\r
+ for( int j = 0; j < 10; j++ )\r
+ {\r
+ writer.Write( this.stセクション[ i ].bAutoPlay[ j ] ? 1 : 0 );\r
+ }\r
+ writer.WriteLine();\r
+ writer.WriteLine( "SuddenDrums={0}", this.stセクション[ i ].bSudden.Drums ? 1 : 0 );\r
+ writer.WriteLine( "SuddenGuitar={0}", this.stセクション[ i ].bSudden.Guitar ? 1 : 0 );\r
+ writer.WriteLine( "SuddenBass={0}", this.stセクション[ i ].bSudden.Bass ? 1 : 0 );\r
+ writer.WriteLine( "HiddenDrums={0}", this.stセクション[ i ].bHidden.Drums ? 1 : 0 );\r
+ writer.WriteLine( "HiddenGuitar={0}", this.stセクション[ i ].bHidden.Guitar ? 1 : 0 );\r
+ writer.WriteLine( "HiddenBass={0}", this.stセクション[ i ].bHidden.Bass ? 1 : 0 );\r
+ writer.WriteLine( "ReverseDrums={0}", this.stセクション[ i ].bReverse.Drums ? 1 : 0 );\r
+ writer.WriteLine( "ReverseGuitar={0}", this.stセクション[ i ].bReverse.Guitar ? 1 : 0 );\r
+ writer.WriteLine( "ReverseBass={0}", this.stセクション[ i ].bReverse.Bass ? 1 : 0 );\r
+ writer.WriteLine( "TightDrums={0}", this.stセクション[ i ].bTight ? 1 : 0 );\r
+ writer.WriteLine( "RandomGuitar={0}", (int) this.stセクション[ i ].eRandom.Guitar );\r
+ writer.WriteLine( "RandomBass={0}", (int) this.stセクション[ i ].eRandom.Bass );\r
+ writer.WriteLine( "LightGuitar={0}", this.stセクション[ i ].bLight.Guitar ? 1 : 0 );\r
+ writer.WriteLine( "LightBass={0}", this.stセクション[ i ].bLight.Bass ? 1 : 0 );\r
+ writer.WriteLine( "LeftGuitar={0}", this.stセクション[ i ].bLeft.Guitar ? 1 : 0 );\r
+ writer.WriteLine( "LeftBass={0}", this.stセクション[ i ].bLeft.Bass ? 1 : 0 );\r
+ writer.WriteLine( "Dark={0}", (int) this.stセクション[ i ].eDark );\r
+ writer.WriteLine( "ScrollSpeedDrums={0}", this.stセクション[ i ].f譜面スクロール速度.Drums );\r
+ writer.WriteLine( "ScrollSpeedGuitar={0}", this.stセクション[ i ].f譜面スクロール速度.Guitar );\r
+ writer.WriteLine( "ScrollSpeedBass={0}", this.stセクション[ i ].f譜面スクロール速度.Bass );\r
+ writer.WriteLine( "PlaySpeed={0}/{1}", this.stセクション[ i ].n演奏速度分子, this.stセクション[ i ].n演奏速度分母 );\r
+ writer.WriteLine( "HHGroup={0}", (int) this.stセクション[ i ].eHHGroup );\r
+ writer.WriteLine( "FTGroup={0}", (int) this.stセクション[ i ].eFTGroup );\r
+ writer.WriteLine( "CYGroup={0}", (int) this.stセクション[ i ].eCYGroup );\r
+ writer.WriteLine( "HitSoundPriorityHH={0}", (int) this.stセクション[ i ].eHitSoundPriorityHH );\r
+ writer.WriteLine( "HitSoundPriorityFT={0}", (int) this.stセクション[ i ].eHitSoundPriorityFT );\r
+ writer.WriteLine( "HitSoundPriorityCY={0}", (int) this.stセクション[ i ].eHitSoundPriorityCY );\r
+ writer.WriteLine( "Guitar={0}", this.stセクション[ i ].bGuitar有効 ? 1 : 0 );\r
+ writer.WriteLine( "Drums={0}", this.stセクション[ i ].bDrums有効 ? 1 : 0 );\r
+ writer.WriteLine( "StageFailed={0}", this.stセクション[ i ].bSTAGEFAILED有効 ? 1 : 0 );\r
+ writer.WriteLine( "DamageLevel={0}", (int) this.stセクション[ i ].eダメージレベル );\r
+ writer.WriteLine( "UseKeyboard={0}", this.stセクション[ i ].b演奏にキーボードを使用した ? 1 : 0 );\r
+ writer.WriteLine( "UseMIDIIN={0}", this.stセクション[ i ].b演奏にMIDI入力を使用した ? 1 : 0 );\r
+ writer.WriteLine( "UseJoypad={0}", this.stセクション[ i ].b演奏にジョイパッドを使用した ? 1 : 0 );\r
+ writer.WriteLine( "UseMouse={0}", this.stセクション[ i ].b演奏にマウスを使用した ? 1 : 0 );\r
+ writer.WriteLine( "PerfectRange={0}", this.stセクション[ i ].nPerfectになる範囲ms );\r
+ writer.WriteLine( "GreatRange={0}", this.stセクション[ i ].nGreatになる範囲ms );\r
+ writer.WriteLine( "GoodRange={0}", this.stセクション[ i ].nGoodになる範囲ms );\r
+ writer.WriteLine( "PoorRange={0}", this.stセクション[ i ].nPoorになる範囲ms );\r
+ writer.WriteLine( "DTXManiaVersion={0}", this.stセクション[ i ].strDTXManiaのバージョン );\r
+ writer.WriteLine( "DateTime={0}", this.stセクション[ i ].最終更新日時 );\r
+ writer.WriteLine( "Hash={0}", this.stセクション[ i ].Hash );\r
+ }\r
+ writer.Close();\r
+ }\r
+ internal void t全演奏記録セクションの整合性をチェックし不整合があればリセットする()\r
+ {\r
+ for( int i = 0; i < 6; i++ )\r
+ {\r
+ if( !this.b整合性がある( (Eセクション種別) i ) )\r
+ this.stセクション[ i ] = new C演奏記録();\r
+ }\r
+ }\r
+ internal static int tランク値を計算して返す( C演奏記録 part )\r
+ {\r
+ if( part.b演奏にMIDI入力を使用した || part.b演奏にキーボードを使用した || part.b演奏にジョイパッドを使用した || part.b演奏にマウスを使用した ) // 2010.9.11\r
+ {\r
+ int nTotal = ( ( ( part.nPerfect数 + part.nGreat数 ) + part.nGood数 ) + part.nPoor数 ) + part.nMiss数;\r
+ return tランク値を計算して返す( nTotal, part.nPerfect数, part.nGreat数, part.nGood数, part.nPoor数, part.nMiss数 );\r
+ }\r
+ return 99;\r
+ }\r
+ internal static int tランク値を計算して返す( int nTotal, int nPerfect, int nGreat, int nGood, int nPoor, int nMiss )\r
+ {\r
+ if( nTotal <= 0 )\r
+ return 99;\r
+\r
+ int num = 6;\r
+ int num2 = nTotal - ( ( ( ( nPerfect + nGreat ) + nGood ) + nPoor ) + nMiss );\r
+ if( nTotal == num2 )\r
+ {\r
+ return 0;\r
+ }\r
+ double num3 = ( (double) ( nPerfect + nGreat ) ) / ( (double) ( nTotal - num2 ) );\r
+ if( num3 == 1.0 )\r
+ {\r
+ return 0;\r
+ }\r
+ if( num3 >= 0.95 )\r
+ {\r
+ return 1;\r
+ }\r
+ if( num3 >= 0.9 )\r
+ {\r
+ return 2;\r
+ }\r
+ if( num3 >= 0.85 )\r
+ {\r
+ return 3;\r
+ }\r
+ if( num3 >= 0.8 )\r
+ {\r
+ return 4;\r
+ }\r
+ if( num3 >= 0.7 )\r
+ {\r
+ return 5;\r
+ }\r
+ return 6;\r
+ }\r
+ internal static double tゲーム型スキルを計算して返す( int nLevel, int nTotal, int nPerfect, int nCombo )\r
+ {\r
+ if( ( nTotal == 0 ) || ( ( nPerfect == 0 ) && ( nCombo == 0 ) ) )\r
+ return 0.0;\r
+\r
+ return ( ( nLevel * ( ( ( nPerfect * 0.8 ) + ( nCombo * 0.2 ) ) / ( (double) nTotal ) ) ) / 2.0 );\r
+ }\r
+ internal static double t演奏型スキルを計算して返す( int nTotal, int nPerfect, int nGreat, int nGood, int nPoor, int nMiss )\r
+ {\r
+ if( nTotal == 0 )\r
+ return 0.0;\r
+\r
+ int num = nTotal - ( ( ( ( nPerfect + nGreat ) + nGood ) + nPoor ) + nMiss );\r
+ double y = ( ( ( ( ( ( ( nPerfect * 1.0 ) + ( nGreat * 0.8 ) ) + ( nGood * 0.5 ) ) + ( nPoor * 0.2 ) ) + ( nMiss * 0.0 ) ) + ( num * 0.0 ) ) * 100.0 ) / ( (double) nTotal );\r
+ return ( 100.0 * ( ( Math.Pow( 1.03, y ) - 1.0 ) / ( Math.Pow( 1.03, 100.0 ) - 1.0 ) ) );\r
+ }\r
+ internal static string t演奏セクションのMD5を求めて返す( C演奏記録 cc )\r
+ {\r
+ StringBuilder builder = new StringBuilder();\r
+ builder.Append( cc.nスコア.ToString() );\r
+ builder.Append( cc.dbゲーム型スキル値.ToString( ".000000" ) );\r
+ builder.Append( cc.db演奏型スキル値.ToString( ".000000" ) );\r
+ builder.Append( cc.nPerfect数 );\r
+ builder.Append( cc.nGreat数 );\r
+ builder.Append( cc.nGood数 );\r
+ builder.Append( cc.nPoor数 );\r
+ builder.Append( cc.nMiss数 );\r
+ builder.Append( cc.n最大コンボ数 );\r
+ builder.Append( cc.n全チップ数 );\r
+ for( int i = 0; i < 10; i++ )\r
+ builder.Append( boolToChar( cc.bAutoPlay[ i ] ) );\r
+ builder.Append( boolToChar( cc.bTight ) );\r
+ builder.Append( boolToChar( cc.bSudden.Drums ) );\r
+ builder.Append( boolToChar( cc.bSudden.Guitar ) );\r
+ builder.Append( boolToChar( cc.bSudden.Bass ) );\r
+ builder.Append( boolToChar( cc.bHidden.Drums ) );\r
+ builder.Append( boolToChar( cc.bHidden.Guitar ) );\r
+ builder.Append( boolToChar( cc.bHidden.Bass ) );\r
+ builder.Append( boolToChar( cc.bReverse.Drums ) );\r
+ builder.Append( boolToChar( cc.bReverse.Guitar ) );\r
+ builder.Append( boolToChar( cc.bReverse.Bass ) );\r
+ builder.Append( (int) cc.eRandom.Guitar );\r
+ builder.Append( (int) cc.eRandom.Bass );\r
+ builder.Append( boolToChar( cc.bLight.Guitar ) );\r
+ builder.Append( boolToChar( cc.bLight.Bass ) );\r
+ builder.Append( boolToChar( cc.bLeft.Guitar ) );\r
+ builder.Append( boolToChar( cc.bLeft.Bass ) );\r
+ builder.Append( (int) cc.eDark );\r
+ builder.Append( cc.f譜面スクロール速度.Drums.ToString( ".000000" ) );\r
+ builder.Append( cc.f譜面スクロール速度.Guitar.ToString( ".000000" ) );\r
+ builder.Append( cc.f譜面スクロール速度.Bass.ToString( ".000000" ) );\r
+ builder.Append( cc.n演奏速度分子 );\r
+ builder.Append( cc.n演奏速度分母 );\r
+ builder.Append( (int) cc.eHHGroup );\r
+ builder.Append( (int) cc.eFTGroup );\r
+ builder.Append( (int) cc.eCYGroup );\r
+ builder.Append( (int) cc.eHitSoundPriorityHH );\r
+ builder.Append( (int) cc.eHitSoundPriorityFT );\r
+ builder.Append( (int) cc.eHitSoundPriorityCY );\r
+ builder.Append( boolToChar( cc.bGuitar有効 ) );\r
+ builder.Append( boolToChar( cc.bDrums有効 ) );\r
+ builder.Append( boolToChar( cc.bSTAGEFAILED有効 ) );\r
+ builder.Append( (int) cc.eダメージレベル );\r
+ builder.Append( boolToChar( cc.b演奏にキーボードを使用した ) );\r
+ builder.Append( boolToChar( cc.b演奏にMIDI入力を使用した ) );\r
+ builder.Append( boolToChar( cc.b演奏にジョイパッドを使用した ) );\r
+ builder.Append( boolToChar( cc.b演奏にマウスを使用した ) );\r
+ builder.Append( cc.nPerfectになる範囲ms );\r
+ builder.Append( cc.nGreatになる範囲ms );\r
+ builder.Append( cc.nGoodになる範囲ms );\r
+ builder.Append( cc.nPoorになる範囲ms );\r
+ builder.Append( cc.strDTXManiaのバージョン );\r
+ builder.Append( cc.最終更新日時 );\r
+\r
+ byte[] bytes = Encoding.GetEncoding( "shift-jis" ).GetBytes( builder.ToString() );\r
+ byte[] buffer2 = new MD5CryptoServiceProvider().ComputeHash( bytes );\r
+ StringBuilder builder2 = new StringBuilder( 0x21 );\r
+ foreach( byte num2 in buffer2 )\r
+ builder2.Append( num2.ToString( "x2" ) );\r
+\r
+ return builder2.ToString();\r
+ }\r
+ internal static void t更新条件を取得する( out bool bDrumsを更新する, out bool bGuitarを更新する, out bool bBassを更新する )\r
+ {\r
+ bDrumsを更新する = ( CDTXMania.ConfigIni.bDrums有効 && CDTXMania.DTX.bチップがある.Drums ) && !CDTXMania.ConfigIni.bドラムが全部オートプレイである;\r
+ bGuitarを更新する = ( CDTXMania.ConfigIni.bGuitar有効 && CDTXMania.DTX.bチップがある.Guitar ) && !CDTXMania.ConfigIni.bAutoPlay.Guitar;\r
+ bBassを更新する = ( CDTXMania.ConfigIni.bGuitar有効 && CDTXMania.DTX.bチップがある.Bass ) && !CDTXMania.ConfigIni.bAutoPlay.Bass;\r
+ }\r
+ internal static int t総合ランク値を計算して返す( C演奏記録 Drums, C演奏記録 Guitar, C演奏記録 Bass )\r
+ {\r
+ int nPerfect = ( Drums.nPerfect数 + Guitar.nPerfect数 ) + Bass.nPerfect数;\r
+ int nGreat = ( Drums.nGreat数 + Guitar.nGreat数 ) + Bass.nGreat数;\r
+ int nGood = ( Drums.nGood数 + Guitar.nGood数 ) + Bass.nGood数;\r
+ int nPoor = ( Drums.nPoor数 + Guitar.nPoor数 ) + Bass.nPoor数;\r
+ int nMiss = ( Drums.nMiss数 + Guitar.nMiss数 ) + Bass.nMiss数;\r
+ return tランク値を計算して返す( ( ( ( nPerfect + nGreat ) + nGood ) + nPoor ) + nMiss, nPerfect, nGreat, nGood, nPoor, nMiss );\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private bool ONorOFF( char c )\r
+ {\r
+ return ( c != '0' );\r
+ }\r
+ private static char boolToChar( bool b )\r
+ {\r
+ if( !b )\r
+ {\r
+ return '0';\r
+ }\r
+ return '1';\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Drawing;\r
+using System.IO;\r
+\r
+namespace DTXMania\r
+{\r
+ public class CSetDef\r
+ {\r
+ // プロパティ\r
+\r
+ public List<CBlock> blocks;\r
+ public class CBlock\r
+ {\r
+ /// <summary>\r
+ /// このブロックが有効である(何かのプロパティがセットされた)場合、true を示す。\r
+ /// </summary>\r
+ public bool b使用中 { get; private set; }\r
+\r
+ /// <summary>\r
+ /// スコアファイル名(#LxFILE)を保持する。配列は [0~4] で、存在しないレベルは null となる。\r
+ /// </summary>\r
+ public string[] File\r
+ {\r
+ get\r
+ {\r
+ return this._file;\r
+ }\r
+ set\r
+ {\r
+ this._file = value;\r
+ this.b使用中 = true;\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// スコアのフォント色(#FONTCOLOR)を保持する。\r
+ /// </summary>\r
+ public Color FontColor\r
+ {\r
+ get\r
+ {\r
+ return this._fontcolor;\r
+ }\r
+ set\r
+ {\r
+ this._fontcolor = value;\r
+ this.b使用中 = true;\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// スコアのジャンル名を保持する。(現在は使われていない。)\r
+ /// </summary>\r
+ public string Genre\r
+ {\r
+ get\r
+ {\r
+ return this._genre;\r
+ }\r
+ set\r
+ {\r
+ this._genre = value;\r
+ this.b使用中 = true;\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// スコアのラベル(#LxLABEL)を保持する。配列は[0~4] で、存在しないレベルは null となる。\r
+ /// </summary>\r
+ public string[] Label\r
+ {\r
+ get\r
+ {\r
+ return this._label;\r
+ }\r
+ set\r
+ {\r
+ this._label = value;\r
+ this.b使用中 = true;\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// スコアのタイトル(#TITLE)を保持する。\r
+ /// </summary>\r
+ public string Title\r
+ {\r
+ get\r
+ {\r
+ return this._title;\r
+ }\r
+ set\r
+ {\r
+ this._title = value;\r
+ this.b使用中 = true;\r
+ }\r
+ }\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private string[] _file = new string[ 5 ];\r
+ private Color _fontcolor = Color.White;\r
+ private string _genre = "";\r
+ private string[] _label = new string[ 5 ];\r
+ private string _title = "";\r
+ //-----------------\r
+ #endregion\r
+ }\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public CSetDef()\r
+ {\r
+ this.blocks = new List<CBlock>();\r
+ }\r
+ public CSetDef( string setdefファイル名 )\r
+ : this()\r
+ {\r
+ this.t読み込み( setdefファイル名 );\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ public void t読み込み( string setdefファイル名 )\r
+ {\r
+ var reader = new StreamReader( setdefファイル名, Encoding.GetEncoding( "shift-jis" ) );\r
+ CBlock block = new CBlock();\r
+ string str = null;\r
+ while( ( str = reader.ReadLine() ) != null )\r
+ {\r
+ if( str.Length != 0 )\r
+ {\r
+ try\r
+ {\r
+ str = str.TrimStart( new char[] { ' ', '\t' } );\r
+ if( ( str[ 0 ] == '#' ) && ( str[ 0 ] != ';' ) )\r
+ {\r
+ if( str.IndexOf( ';' ) != -1 )\r
+ {\r
+ str = str.Substring( 0, str.IndexOf( ';' ) );\r
+ }\r
+ if( str.StartsWith( "#TITLE", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ if( block.b使用中 )\r
+ {\r
+ this.tFILEの指定があるのにLxLABELが省略されているときはデフォルトの名前をセットする( block );\r
+ this.tLxLABELの指定があるのにFILEが省略されているときはなかったものとする( block );\r
+ this.blocks.Add( block );\r
+ block = new CBlock();\r
+ }\r
+ block.Title = str.Substring( 6 ).TrimStart( new char[] { ':', ' ', '\t' } );\r
+ }\r
+ else if( str.StartsWith( "#FONTCOLOR", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ block.FontColor = ColorTranslator.FromHtml( "#" + str.Substring( 10 ).Trim( new char[] { ':', '#', ' ', '\t' } ) );\r
+ }\r
+ else if( str.StartsWith( "#L1FILE", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ block.File[ 0 ] = str.Substring( 7 ).Trim( new char[] { ':', ' ', '\t' } );\r
+ }\r
+ else if( str.StartsWith( "#L2FILE", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ block.File[ 1 ] = str.Substring( 7 ).Trim( new char[] { ':', ' ', '\t' } );\r
+ }\r
+ else if( str.StartsWith( "#L3FILE", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ block.File[ 2 ] = str.Substring( 7 ).Trim( new char[] { ':', ' ', '\t' } );\r
+ }\r
+ else if( str.StartsWith( "#L4FILE", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ block.File[ 3 ] = str.Substring( 7 ).Trim( new char[] { ':', ' ', '\t' } );\r
+ }\r
+ else if( str.StartsWith( "#L5FILE", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ block.File[ 4 ] = str.Substring( 7 ).Trim( new char[] { ':', ' ', '\t' } );\r
+ }\r
+ else if( str.StartsWith( "#L1LABEL", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ block.Label[ 0 ] = str.Substring( 8 ).Trim( new char[] { ':', ' ', '\t' } );\r
+ }\r
+ else if( str.StartsWith( "#L2LABEL", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ block.Label[ 1 ] = str.Substring( 8 ).Trim( new char[] { ':', ' ', '\t' } );\r
+ }\r
+ else if( str.StartsWith( "#L3LABEL", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ block.Label[ 2 ] = str.Substring( 8 ).Trim( new char[] { ':', ' ', '\t' } );\r
+ }\r
+ else if( str.StartsWith( "#L4LABEL", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ block.Label[ 3 ] = str.Substring( 8 ).Trim( new char[] { ':', ' ', '\t' } );\r
+ }\r
+ else if( str.StartsWith( "#L5LABEL", StringComparison.OrdinalIgnoreCase ) )\r
+ {\r
+ block.Label[ 4 ] = str.Substring( 8 ).Trim( new char[] { ':', ' ', '\t' } );\r
+ }\r
+ }\r
+ continue;\r
+ }\r
+ catch\r
+ {\r
+ continue;\r
+ }\r
+ }\r
+ }\r
+ reader.Close();\r
+ if( block.b使用中 )\r
+ {\r
+ this.tFILEの指定があるのにLxLABELが省略されているときはデフォルトの名前をセットする( block );\r
+ this.tLxLABELの指定があるのにFILEが省略されているときはなかったものとする( block );\r
+ this.blocks.Add( block );\r
+ }\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private void tFILEの指定があるのにLxLABELが省略されているときはデフォルトの名前をセットする( CBlock block )\r
+ {\r
+ string[] strArray = new string[] { "BASIC", "ADVANCED", "EXTREME", "HYPER", "ULTIMATE" };\r
+ for( int i = 0; i < 5; i++ )\r
+ {\r
+ if( ( ( block.File[ i ] != null ) && ( block.File[ i ].Length > 0 ) ) && string.IsNullOrEmpty( block.Label[ i ] ) )\r
+ {\r
+ block.Label[ i ] = strArray[ i ];\r
+ }\r
+ }\r
+ }\r
+ private void tLxLABELの指定があるのにFILEが省略されているときはなかったものとする( CBlock block )\r
+ {\r
+ for( int i = 0; i < 5; i++ )\r
+ {\r
+ if( ( ( block.Label[ i ] != null ) && ( block.Label[ i ].Length > 0 ) ) && string.IsNullOrEmpty( block.File[ i ] ) )\r
+ {\r
+ block.Label[ i ] = "";\r
+ }\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Diagnostics;\r
+using System.IO;\r
+using System.Drawing;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CSongs管理\r
+ {\r
+ // プロパティ\r
+\r
+ public int nSongsDBから取得できたスコア数\r
+ {\r
+ get; \r
+ set; \r
+ }\r
+ public int nSongsDBへ出力できたスコア数\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+ public int nスコアキャッシュから反映できたスコア数 \r
+ {\r
+ get;\r
+ set; \r
+ }\r
+ public int nファイルから反映できたスコア数\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+ public int n検索されたスコア数 \r
+ { \r
+ get;\r
+ set;\r
+ }\r
+ public int n検索された曲ノード数\r
+ {\r
+ get; \r
+ set;\r
+ }\r
+ public List<Cスコア> listSongsDB;\r
+ public List<C曲リストノード> list曲ルート;\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public CSongs管理()\r
+ {\r
+ this.listSongsDB = new List<Cスコア>();\r
+ this.list曲ルート = new List<C曲リストノード>();\r
+ this.n検索された曲ノード数 = 0;\r
+ this.n検索されたスコア数 = 0;\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ #region [ SongsDB(songs.db) を読み込む ]\r
+ //-----------------\r
+ public void tSongsDBを読み込む( string SongsDBファイル名 )\r
+ {\r
+ this.nSongsDBから取得できたスコア数 = 0;\r
+ if( File.Exists( SongsDBファイル名 ) )\r
+ {\r
+ BinaryReader br = null;\r
+ try\r
+ {\r
+ br = new BinaryReader( File.OpenRead( SongsDBファイル名 ) );\r
+ if( !br.ReadString().Equals( "SongsDB2" ) )\r
+ {\r
+ throw new InvalidDataException( "ヘッダが異なります。" );\r
+ }\r
+ this.listSongsDB = new List<Cスコア>();\r
+\r
+ while( true )\r
+ {\r
+ try\r
+ {\r
+ Cスコア item = this.tSongsDBからスコアを1つ読み込む( br );\r
+ this.listSongsDB.Add( item );\r
+ this.nSongsDBから取得できたスコア数++;\r
+ }\r
+ catch( EndOfStreamException )\r
+ {\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ finally\r
+ {\r
+ if( br != null )\r
+ br.Close();\r
+ }\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ #region [ 曲を検索してリストを作成する ]\r
+ //-----------------\r
+ public void t曲を検索してリストを作成する( string str基点フォルダ, bool b子BOXへ再帰する )\r
+ {\r
+ this.t曲を検索してリストを作成する( str基点フォルダ, b子BOXへ再帰する, this.list曲ルート, null );\r
+ }\r
+ private void t曲を検索してリストを作成する( string str基点フォルダ, bool b子BOXへ再帰する, List<C曲リストノード> listノードリスト, C曲リストノード node親 )\r
+ {\r
+ if( !str基点フォルダ.EndsWith( @"\" ) )\r
+ str基点フォルダ = str基点フォルダ + @"\";\r
+\r
+ DirectoryInfo info = new DirectoryInfo( str基点フォルダ );\r
+\r
+ if( CDTXMania.ConfigIni.bLog曲検索ログ出力 )\r
+ Trace.TraceInformation( "基点フォルダ: " + str基点フォルダ );\r
+\r
+ #region [ a.フォルダ内に set.def が存在する場合 → set.def からノード作成]\r
+ //-----------------------------\r
+ string path = str基点フォルダ + "set.def";\r
+ if( File.Exists( path ) )\r
+ {\r
+ CSetDef def = new CSetDef( path );\r
+ new FileInfo( path );\r
+ if( CDTXMania.ConfigIni.bLog曲検索ログ出力 )\r
+ {\r
+ Trace.TraceInformation( "set.def検出 : {0}", new object[] { path } );\r
+ Trace.Indent();\r
+ }\r
+ try\r
+ {\r
+ for( int i = 0; i < def.blocks.Count; i++ )\r
+ {\r
+ CSetDef.CBlock block = def.blocks[ i ];\r
+ C曲リストノード item = new C曲リストノード();\r
+ item.eノード種別 = C曲リストノード.Eノード種別.SCORE;\r
+ item.strタイトル = block.Title;\r
+ item.strジャンル = block.Genre;\r
+ item.nスコア数 = 0;\r
+ item.col文字色 = block.FontColor;\r
+ item.SetDefのブロック番号 = i;\r
+ item.pathSetDefの絶対パス = path;\r
+ item.r親ノード = node親;\r
+ for( int j = 0; j < 5; j++ )\r
+ {\r
+ if( !string.IsNullOrEmpty( block.File[ j ] ) )\r
+ {\r
+ string str2 = str基点フォルダ + block.File[ j ];\r
+ if( File.Exists( str2 ) )\r
+ {\r
+ item.ar難易度ラベル[ j ] = block.Label[ j ];\r
+ item.arスコア[ j ] = new Cスコア();\r
+ item.arスコア[ j ].ファイル情報.ファイルの絶対パス = str2;\r
+ item.arスコア[ j ].ファイル情報.フォルダの絶対パス = Path.GetFullPath( Path.GetDirectoryName( str2 ) ) + @"\";\r
+ FileInfo info2 = new FileInfo( str2 );\r
+ item.arスコア[ j ].ファイル情報.ファイルサイズ = info2.Length;\r
+ item.arスコア[ j ].ファイル情報.最終更新日時 = info2.LastWriteTime;\r
+ string str3 = str2 + ".score.ini";\r
+ if( File.Exists( str3 ) )\r
+ {\r
+ FileInfo info3 = new FileInfo( str3 );\r
+ item.arスコア[ j ].ScoreIni情報.ファイルサイズ = info3.Length;\r
+ item.arスコア[ j ].ScoreIni情報.最終更新日時 = info3.LastWriteTime;\r
+ }\r
+ item.nスコア数++;\r
+ this.n検索されたスコア数++;\r
+ }\r
+ else\r
+ {\r
+ item.arスコア[ j ] = null;\r
+ }\r
+ }\r
+ }\r
+ if( item.nスコア数 > 0 )\r
+ {\r
+ listノードリスト.Add( item );\r
+ this.n検索された曲ノード数++;\r
+ if( CDTXMania.ConfigIni.bLog曲検索ログ出力 )\r
+ {\r
+ StringBuilder builder = new StringBuilder( 0x200 );\r
+ builder.Append( string.Format( "nID#{0:D3}", item.nID ) );\r
+ if( item.r親ノード != null )\r
+ {\r
+ builder.Append( string.Format( "(in#{0:D3}):", item.r親ノード.nID ) );\r
+ }\r
+ else\r
+ {\r
+ builder.Append( "(onRoot):" );\r
+ }\r
+ if( ( item.strタイトル != null ) && ( item.strタイトル.Length > 0 ) )\r
+ {\r
+ builder.Append( " SONG, Title=" + item.strタイトル );\r
+ }\r
+ if( ( item.strジャンル != null ) && ( item.strジャンル.Length > 0 ) )\r
+ {\r
+ builder.Append( ", Genre=" + item.strジャンル );\r
+ }\r
+ if( item.col文字色 != Color.White )\r
+ {\r
+ builder.Append( ", FontColor=" + item.col文字色 );\r
+ }\r
+ Trace.TraceInformation( builder.ToString() );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ for( int k = 0; k < 5; k++ )\r
+ {\r
+ if( item.arスコア[ k ] != null )\r
+ {\r
+ Cスコア cスコア = item.arスコア[ k ];\r
+ builder.Remove( 0, builder.Length );\r
+ builder.Append( string.Format( "ブロック{0}-{1}:", item.SetDefのブロック番号 + 1, k + 1 ) );\r
+ builder.Append( " Label=" + item.ar難易度ラベル[ k ] );\r
+ builder.Append( ", File=" + cスコア.ファイル情報.ファイルの絶対パス );\r
+ builder.Append( ", Size=" + cスコア.ファイル情報.ファイルサイズ );\r
+ builder.Append( ", LastUpdate=" + cスコア.ファイル情報.最終更新日時 );\r
+ Trace.TraceInformation( builder.ToString() );\r
+ }\r
+ }\r
+ }\r
+ finally\r
+ {\r
+ Trace.Unindent();\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ finally\r
+ {\r
+ if( CDTXMania.ConfigIni.bLog曲検索ログ出力 )\r
+ {\r
+ Trace.Unindent();\r
+ }\r
+ }\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ #region [ b.フォルダ内に set.def が存在しない場合 → 個別ファイルからノード作成 ]\r
+ //-----------------------------\r
+ else\r
+ {\r
+ foreach( FileInfo info4 in info.GetFiles() )\r
+ {\r
+ string str4 = info4.Extension.ToLower();\r
+ if( ( str4.Equals( ".dtx" ) || str4.Equals( ".gda" ) ) || ( ( str4.Equals( ".g2d" ) || str4.Equals( ".bms" ) ) || str4.Equals( ".bme" ) ) )\r
+ {\r
+ C曲リストノード c曲リストノード2 = new C曲リストノード();\r
+ c曲リストノード2.eノード種別 = C曲リストノード.Eノード種別.SCORE;\r
+ c曲リストノード2.nスコア数 = 1;\r
+ c曲リストノード2.r親ノード = node親;\r
+ c曲リストノード2.arスコア[ 0 ] = new Cスコア();\r
+ c曲リストノード2.arスコア[ 0 ].ファイル情報.ファイルの絶対パス = str基点フォルダ + info4.Name;\r
+ c曲リストノード2.arスコア[ 0 ].ファイル情報.フォルダの絶対パス = str基点フォルダ;\r
+ c曲リストノード2.arスコア[ 0 ].ファイル情報.ファイルサイズ = info4.Length;\r
+ c曲リストノード2.arスコア[ 0 ].ファイル情報.最終更新日時 = info4.LastWriteTime;\r
+ string str5 = c曲リストノード2.arスコア[ 0 ].ファイル情報.ファイルの絶対パス + ".score.ini";\r
+ if( File.Exists( str5 ) )\r
+ {\r
+ FileInfo info5 = new FileInfo( str5 );\r
+ c曲リストノード2.arスコア[ 0 ].ScoreIni情報.ファイルサイズ = info5.Length;\r
+ c曲リストノード2.arスコア[ 0 ].ScoreIni情報.最終更新日時 = info5.LastWriteTime;\r
+ }\r
+ this.n検索されたスコア数++;\r
+ listノードリスト.Add( c曲リストノード2 );\r
+ this.n検索された曲ノード数++;\r
+ if( CDTXMania.ConfigIni.bLog曲検索ログ出力 )\r
+ {\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ StringBuilder builder2 = new StringBuilder( 0x100 );\r
+ builder2.Append( string.Format( "nID#{0:D3}", c曲リストノード2.nID ) );\r
+ if( c曲リストノード2.r親ノード != null )\r
+ {\r
+ builder2.Append( string.Format( "(in#{0:D3}):", c曲リストノード2.r親ノード.nID ) );\r
+ }\r
+ else\r
+ {\r
+ builder2.Append( "(onRoot):" );\r
+ }\r
+ builder2.Append( " SONG, File=" + c曲リストノード2.arスコア[ 0 ].ファイル情報.ファイルの絶対パス );\r
+ builder2.Append( ", Size=" + c曲リストノード2.arスコア[ 0 ].ファイル情報.ファイルサイズ );\r
+ builder2.Append( ", LastUpdate=" + c曲リストノード2.arスコア[ 0 ].ファイル情報.最終更新日時 );\r
+ Trace.TraceInformation( builder2.ToString() );\r
+ }\r
+ finally\r
+ {\r
+ Trace.Unindent();\r
+ }\r
+ }\r
+ }\r
+ else if( !str4.Equals( ".mid" ) )\r
+ {\r
+ str4.Equals( ".smf" );\r
+ }\r
+ }\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ foreach( DirectoryInfo info6 in info.GetDirectories() )\r
+ {\r
+ #region [ a. "dtxfiles." で始まるフォルダの場合 ]\r
+ //-----------------------------\r
+ if( info6.Name.ToLower().StartsWith( "dtxfiles." ) )\r
+ {\r
+ C曲リストノード c曲リストノード3 = new C曲リストノード();\r
+ c曲リストノード3.eノード種別 = C曲リストノード.Eノード種別.BOX;\r
+ c曲リストノード3.bDTXFilesで始まるフォルダ名のBOXである = true;\r
+ c曲リストノード3.strタイトル = info6.Name.Substring( 9 );\r
+ c曲リストノード3.nスコア数 = 1;\r
+ c曲リストノード3.r親ノード = node親;\r
+ c曲リストノード3.list子リスト = new List<C曲リストノード>();\r
+ c曲リストノード3.arスコア[ 0 ] = new Cスコア();\r
+ c曲リストノード3.arスコア[ 0 ].ファイル情報.フォルダの絶対パス = info6.FullName + @"\";\r
+ c曲リストノード3.arスコア[ 0 ].譜面情報.タイトル = c曲リストノード3.strタイトル;\r
+ c曲リストノード3.arスコア[ 0 ].譜面情報.コメント = "BOX に移動します。";\r
+ listノードリスト.Add( c曲リストノード3 );\r
+ if( File.Exists( info6.FullName + @"\box.def" ) )\r
+ {\r
+ CBoxDef def2 = new CBoxDef( info6.FullName + @"\box.def" );\r
+ if( ( def2.Title != null ) && ( def2.Title.Length > 0 ) )\r
+ {\r
+ c曲リストノード3.strタイトル = def2.Title;\r
+ }\r
+ if( ( def2.Genre != null ) && ( def2.Genre.Length > 0 ) )\r
+ {\r
+ c曲リストノード3.strジャンル = def2.Genre;\r
+ }\r
+ if( def2.Color != Color.White )\r
+ {\r
+ c曲リストノード3.col文字色 = def2.Color;\r
+ }\r
+ if( ( def2.Artist != null ) && ( def2.Artist.Length > 0 ) )\r
+ {\r
+ c曲リストノード3.arスコア[ 0 ].譜面情報.アーティスト名 = def2.Artist;\r
+ }\r
+ if( ( def2.Comment != null ) && ( def2.Comment.Length > 0 ) )\r
+ {\r
+ c曲リストノード3.arスコア[ 0 ].譜面情報.コメント = def2.Comment;\r
+ }\r
+ if( ( def2.Preimage != null ) && ( def2.Preimage.Length > 0 ) )\r
+ {\r
+ c曲リストノード3.arスコア[ 0 ].譜面情報.Preimage = def2.Preimage;\r
+ }\r
+ if( ( def2.Premovie != null ) && ( def2.Premovie.Length > 0 ) )\r
+ {\r
+ c曲リストノード3.arスコア[ 0 ].譜面情報.Premovie = def2.Premovie;\r
+ }\r
+ if( ( def2.Presound != null ) && ( def2.Presound.Length > 0 ) )\r
+ {\r
+ c曲リストノード3.arスコア[ 0 ].譜面情報.Presound = def2.Presound;\r
+ }\r
+ if( def2.PerfectRange >= 0 )\r
+ {\r
+ c曲リストノード3.nPerfect範囲ms = def2.PerfectRange;\r
+ }\r
+ if( def2.GreatRange >= 0 )\r
+ {\r
+ c曲リストノード3.nGreat範囲ms = def2.GreatRange;\r
+ }\r
+ if( def2.GoodRange >= 0 )\r
+ {\r
+ c曲リストノード3.nGood範囲ms = def2.GoodRange;\r
+ }\r
+ if( def2.PoorRange >= 0 )\r
+ {\r
+ c曲リストノード3.nPoor範囲ms = def2.PoorRange;\r
+ }\r
+ }\r
+ if( CDTXMania.ConfigIni.bLog曲検索ログ出力 )\r
+ {\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ StringBuilder builder3 = new StringBuilder( 0x100 );\r
+ builder3.Append( string.Format( "nID#{0:D3}", c曲リストノード3.nID ) );\r
+ if( c曲リストノード3.r親ノード != null )\r
+ {\r
+ builder3.Append( string.Format( "(in#{0:D3}):", c曲リストノード3.r親ノード.nID ) );\r
+ }\r
+ else\r
+ {\r
+ builder3.Append( "(onRoot):" );\r
+ }\r
+ builder3.Append( " BOX, Title=" + c曲リストノード3.strタイトル );\r
+ builder3.Append( ", Folder=" + c曲リストノード3.arスコア[ 0 ].ファイル情報.フォルダの絶対パス );\r
+ builder3.Append( ", Comment=" + c曲リストノード3.arスコア[ 0 ].譜面情報.コメント );\r
+ Trace.TraceInformation( builder3.ToString() );\r
+ }\r
+ finally\r
+ {\r
+ Trace.Unindent();\r
+ }\r
+ }\r
+ if( b子BOXへ再帰する )\r
+ {\r
+ this.t曲を検索してリストを作成する( info6.FullName + @"\", b子BOXへ再帰する, c曲リストノード3.list子リスト, c曲リストノード3 );\r
+ }\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ #region [ b.box.def を含むフォルダの場合 ]\r
+ //-----------------------------\r
+ else if( File.Exists( info6.FullName + @"\box.def" ) )\r
+ {\r
+ CBoxDef def3 = new CBoxDef( info6.FullName + @"\box.def" );\r
+ C曲リストノード c曲リストノード4 = new C曲リストノード();\r
+ c曲リストノード4.eノード種別 = C曲リストノード.Eノード種別.BOX;\r
+ c曲リストノード4.bDTXFilesで始まるフォルダ名のBOXである = false;\r
+ c曲リストノード4.strタイトル = def3.Title;\r
+ c曲リストノード4.strジャンル = def3.Genre;\r
+ c曲リストノード4.col文字色 = def3.Color;\r
+ c曲リストノード4.nスコア数 = 1;\r
+ c曲リストノード4.arスコア[ 0 ] = new Cスコア();\r
+ c曲リストノード4.arスコア[ 0 ].ファイル情報.フォルダの絶対パス = info6.FullName + @"\";\r
+ c曲リストノード4.arスコア[ 0 ].譜面情報.タイトル = def3.Title;\r
+ c曲リストノード4.arスコア[ 0 ].譜面情報.ジャンル = def3.Genre;\r
+ c曲リストノード4.arスコア[ 0 ].譜面情報.アーティスト名 = def3.Artist;\r
+ c曲リストノード4.arスコア[ 0 ].譜面情報.コメント = def3.Comment;\r
+ c曲リストノード4.arスコア[ 0 ].譜面情報.Preimage = def3.Preimage;\r
+ c曲リストノード4.arスコア[ 0 ].譜面情報.Premovie = def3.Premovie;\r
+ c曲リストノード4.arスコア[ 0 ].譜面情報.Presound = def3.Presound;\r
+ c曲リストノード4.r親ノード = node親;\r
+ c曲リストノード4.list子リスト = new List<C曲リストノード>();\r
+ c曲リストノード4.nPerfect範囲ms = def3.PerfectRange;\r
+ c曲リストノード4.nGreat範囲ms = def3.GreatRange;\r
+ c曲リストノード4.nGood範囲ms = def3.GoodRange;\r
+ c曲リストノード4.nPoor範囲ms = def3.PoorRange;\r
+ listノードリスト.Add( c曲リストノード4 );\r
+ if( CDTXMania.ConfigIni.bLog曲検索ログ出力 )\r
+ {\r
+ Trace.TraceInformation( "box.def検出 : {0}", new object[] { info6.FullName + @"\box.def" } );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ StringBuilder builder4 = new StringBuilder( 0x400 );\r
+ builder4.Append( string.Format( "nID#{0:D3}", c曲リストノード4.nID ) );\r
+ if( c曲リストノード4.r親ノード != null )\r
+ {\r
+ builder4.Append( string.Format( "(in#{0:D3}):", c曲リストノード4.r親ノード.nID ) );\r
+ }\r
+ else\r
+ {\r
+ builder4.Append( "(onRoot):" );\r
+ }\r
+ builder4.Append( "BOX, Title=" + c曲リストノード4.strタイトル );\r
+ if( ( c曲リストノード4.strジャンル != null ) && ( c曲リストノード4.strジャンル.Length > 0 ) )\r
+ {\r
+ builder4.Append( ", Genre=" + c曲リストノード4.strジャンル );\r
+ }\r
+ if( ( c曲リストノード4.arスコア[ 0 ].譜面情報.アーティスト名 != null ) && ( c曲リストノード4.arスコア[ 0 ].譜面情報.アーティスト名.Length > 0 ) )\r
+ {\r
+ builder4.Append( ", Artist=" + c曲リストノード4.arスコア[ 0 ].譜面情報.アーティスト名 );\r
+ }\r
+ if( ( c曲リストノード4.arスコア[ 0 ].譜面情報.コメント != null ) && ( c曲リストノード4.arスコア[ 0 ].譜面情報.コメント.Length > 0 ) )\r
+ {\r
+ builder4.Append( ", Comment=" + c曲リストノード4.arスコア[ 0 ].譜面情報.コメント );\r
+ }\r
+ if( ( c曲リストノード4.arスコア[ 0 ].譜面情報.Preimage != null ) && ( c曲リストノード4.arスコア[ 0 ].譜面情報.Preimage.Length > 0 ) )\r
+ {\r
+ builder4.Append( ", Preimage=" + c曲リストノード4.arスコア[ 0 ].譜面情報.Preimage );\r
+ }\r
+ if( ( c曲リストノード4.arスコア[ 0 ].譜面情報.Premovie != null ) && ( c曲リストノード4.arスコア[ 0 ].譜面情報.Premovie.Length > 0 ) )\r
+ {\r
+ builder4.Append( ", Premovie=" + c曲リストノード4.arスコア[ 0 ].譜面情報.Premovie );\r
+ }\r
+ if( ( c曲リストノード4.arスコア[ 0 ].譜面情報.Presound != null ) && ( c曲リストノード4.arスコア[ 0 ].譜面情報.Presound.Length > 0 ) )\r
+ {\r
+ builder4.Append( ", Presound=" + c曲リストノード4.arスコア[ 0 ].譜面情報.Presound );\r
+ }\r
+ if( c曲リストノード4.col文字色 != ColorTranslator.FromHtml( "White" ) )\r
+ {\r
+ builder4.Append( ", FontColor=" + c曲リストノード4.col文字色 );\r
+ }\r
+ if( c曲リストノード4.nPerfect範囲ms != -1 )\r
+ {\r
+ builder4.Append( ", Perfect=" + c曲リストノード4.nPerfect範囲ms + "ms" );\r
+ }\r
+ if( c曲リストノード4.nGreat範囲ms != -1 )\r
+ {\r
+ builder4.Append( ", Great=" + c曲リストノード4.nGreat範囲ms + "ms" );\r
+ }\r
+ if( c曲リストノード4.nGood範囲ms != -1 )\r
+ {\r
+ builder4.Append( ", Good=" + c曲リストノード4.nGood範囲ms + "ms" );\r
+ }\r
+ if( c曲リストノード4.nPoor範囲ms != -1 )\r
+ {\r
+ builder4.Append( ", Poor=" + c曲リストノード4.nPoor範囲ms + "ms" );\r
+ }\r
+ Trace.TraceInformation( builder4.ToString() );\r
+ }\r
+ finally\r
+ {\r
+ Trace.Unindent();\r
+ }\r
+ }\r
+ if( b子BOXへ再帰する )\r
+ {\r
+ this.t曲を検索してリストを作成する( info6.FullName + @"\", b子BOXへ再帰する, c曲リストノード4.list子リスト, c曲リストノード4 );\r
+ }\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ #region [ c.通常フォルダの場合 ]\r
+ //-----------------------------\r
+ else\r
+ {\r
+ this.t曲を検索してリストを作成する( info6.FullName + @"\", b子BOXへ再帰する, listノードリスト, node親 );\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ #region [ スコアキャッシュを曲リストに反映する ]\r
+ //-----------------\r
+ public void tスコアキャッシュを曲リストに反映する()\r
+ {\r
+ this.nスコアキャッシュから反映できたスコア数 = 0;\r
+ this.tスコアキャッシュを曲リストに反映する( this.list曲ルート );\r
+ }\r
+ private void tスコアキャッシュを曲リストに反映する( List<C曲リストノード> ノードリスト )\r
+ {\r
+ using( List<C曲リストノード>.Enumerator enumerator = ノードリスト.GetEnumerator() )\r
+ {\r
+ while( enumerator.MoveNext() )\r
+ {\r
+ C曲リストノード node = enumerator.Current;\r
+ if( node.eノード種別 == C曲リストノード.Eノード種別.BOX )\r
+ {\r
+ this.tスコアキャッシュを曲リストに反映する( node.list子リスト );\r
+ }\r
+ else if( ( node.eノード種別 == C曲リストノード.Eノード種別.SCORE ) || ( node.eノード種別 == C曲リストノード.Eノード種別.SCORE_MIDI ) )\r
+ {\r
+ Predicate<Cスコア> match = null;\r
+ for( int lv = 0; lv < 5; lv++ )\r
+ {\r
+ if( node.arスコア[ lv ] != null )\r
+ {\r
+ if( match == null )\r
+ {\r
+ match = delegate( Cスコア sc )\r
+ {\r
+ return ( ( sc.ファイル情報.ファイルの絶対パス.Equals( node.arスコア[ lv ].ファイル情報.ファイルの絶対パス )\r
+ && sc.ファイル情報.ファイルサイズ.Equals( node.arスコア[ lv ].ファイル情報.ファイルサイズ ) )\r
+ && ( sc.ファイル情報.最終更新日時.Equals( node.arスコア[ lv ].ファイル情報.最終更新日時 )\r
+ && sc.ScoreIni情報.ファイルサイズ.Equals( node.arスコア[ lv ].ScoreIni情報.ファイルサイズ ) ) )\r
+ && sc.ScoreIni情報.最終更新日時.Equals( node.arスコア[ lv ].ScoreIni情報.最終更新日時 );\r
+ };\r
+ }\r
+ int num = this.listSongsDB.FindIndex( match );\r
+ if( num == -1 )\r
+ {\r
+ if( CDTXMania.ConfigIni.bLog曲検索ログ出力 )\r
+ {\r
+ Trace.TraceInformation( "songs.db に存在しません。({0})", new object[] { node.arスコア[ lv ].ファイル情報.ファイルの絶対パス } );\r
+ }\r
+ }\r
+ else\r
+ {\r
+ node.arスコア[ lv ].譜面情報 = this.listSongsDB[ num ].譜面情報;\r
+ node.arスコア[ lv ].bSongDBにキャッシュがあった = true;\r
+ if( CDTXMania.ConfigIni.bLog曲検索ログ出力 )\r
+ {\r
+ Trace.TraceInformation( "songs.db から転記しました。({0})", new object[] { node.arスコア[ lv ].ファイル情報.ファイルの絶対パス } );\r
+ }\r
+ this.nスコアキャッシュから反映できたスコア数++;\r
+ if( node.arスコア[ lv ].ScoreIni情報.最終更新日時 != this.listSongsDB[ num ].ScoreIni情報.最終更新日時 )\r
+ {\r
+ string str = node.arスコア[ lv ].ファイル情報.ファイルの絶対パス + ".score.ini";\r
+ try\r
+ {\r
+ CScoreIni ini = new CScoreIni( str );\r
+ ini.t全演奏記録セクションの整合性をチェックし不整合があればリセットする();\r
+ for( int i = 0; i < 3; i++ )\r
+ {\r
+ int num3 = ( i * 2 ) + 1;\r
+ if( ( ini.stセクション[ num3 ].b演奏にMIDI入力を使用した || ini.stセクション[ num3 ].b演奏にキーボードを使用した ) || ( ini.stセクション[ num3 ].b演奏にジョイパッドを使用した || ini.stセクション[ num3 ].b演奏にマウスを使用した ) )\r
+ {\r
+ node.arスコア[ lv ].譜面情報.最大ランク[ i ] = CScoreIni.tランク値を計算して返す( ini.stセクション[ num3 ] );\r
+ }\r
+ else\r
+ {\r
+ node.arスコア[ lv ].譜面情報.最大ランク[ i ] = 0x63;\r
+ }\r
+ node.arスコア[ lv ].譜面情報.最大スキル[ i ] = ini.stセクション[ num3 ].db演奏型スキル値;\r
+ node.arスコア[ lv ].譜面情報.フルコンボ[ i ] = ini.stセクション[ num3 ].bフルコンボである;\r
+ }\r
+ node.arスコア[ lv ].譜面情報.演奏回数.Drums = ini.stファイル.PlayCountDrums;\r
+ node.arスコア[ lv ].譜面情報.演奏回数.Guitar = ini.stファイル.PlayCountGuitar;\r
+ node.arスコア[ lv ].譜面情報.演奏回数.Bass = ini.stファイル.PlayCountBass;\r
+ for( int j = 0; j < 5; j++ )\r
+ {\r
+ node.arスコア[ lv ].譜面情報.演奏履歴[ j ] = ini.stファイル.History[ j ];\r
+ }\r
+ if( CDTXMania.ConfigIni.bLog曲検索ログ出力 )\r
+ {\r
+ Trace.TraceInformation( "演奏記録ファイルから HiSkill 情報と演奏履歴を取得しました。({0})", new object[] { str } );\r
+ }\r
+ }\r
+ catch\r
+ {\r
+ Trace.TraceError( "演奏記録ファイルの読み込みに失敗しました。({0})", new object[] { str } );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ private Cスコア tSongsDBからスコアを1つ読み込む( BinaryReader br )\r
+ {\r
+ Cスコア cスコア = new Cスコア();\r
+ cスコア.ファイル情報.ファイルの絶対パス = br.ReadString();\r
+ cスコア.ファイル情報.フォルダの絶対パス = br.ReadString();\r
+ cスコア.ファイル情報.最終更新日時 = new DateTime( br.ReadInt64() );\r
+ cスコア.ファイル情報.ファイルサイズ = br.ReadInt64();\r
+ cスコア.ScoreIni情報.最終更新日時 = new DateTime( br.ReadInt64() );\r
+ cスコア.ScoreIni情報.ファイルサイズ = br.ReadInt64();\r
+ cスコア.譜面情報.タイトル = br.ReadString();\r
+ cスコア.譜面情報.アーティスト名 = br.ReadString();\r
+ cスコア.譜面情報.コメント = br.ReadString();\r
+ cスコア.譜面情報.ジャンル = br.ReadString();\r
+ cスコア.譜面情報.Preimage = br.ReadString();\r
+ cスコア.譜面情報.Premovie = br.ReadString();\r
+ cスコア.譜面情報.Presound = br.ReadString();\r
+ cスコア.譜面情報.Backgound = br.ReadString();\r
+ cスコア.譜面情報.レベル.Drums = br.ReadInt32();\r
+ cスコア.譜面情報.レベル.Guitar = br.ReadInt32();\r
+ cスコア.譜面情報.レベル.Bass = br.ReadInt32();\r
+ cスコア.譜面情報.最大ランク.Drums = br.ReadInt32();\r
+ cスコア.譜面情報.最大ランク.Guitar = br.ReadInt32();\r
+ cスコア.譜面情報.最大ランク.Bass = br.ReadInt32();\r
+ cスコア.譜面情報.最大スキル.Drums = br.ReadDouble();\r
+ cスコア.譜面情報.最大スキル.Guitar = br.ReadDouble();\r
+ cスコア.譜面情報.最大スキル.Bass = br.ReadDouble();\r
+ cスコア.譜面情報.フルコンボ.Drums = br.ReadBoolean();\r
+ cスコア.譜面情報.フルコンボ.Guitar = br.ReadBoolean();\r
+ cスコア.譜面情報.フルコンボ.Bass = br.ReadBoolean();\r
+ cスコア.譜面情報.演奏回数.Drums = br.ReadInt32();\r
+ cスコア.譜面情報.演奏回数.Guitar = br.ReadInt32();\r
+ cスコア.譜面情報.演奏回数.Bass = br.ReadInt32();\r
+ cスコア.譜面情報.演奏履歴.行1 = br.ReadString();\r
+ cスコア.譜面情報.演奏履歴.行2 = br.ReadString();\r
+ cスコア.譜面情報.演奏履歴.行3 = br.ReadString();\r
+ cスコア.譜面情報.演奏履歴.行4 = br.ReadString();\r
+ cスコア.譜面情報.演奏履歴.行5 = br.ReadString();\r
+ cスコア.譜面情報.レベルを非表示にする = br.ReadBoolean();\r
+ cスコア.譜面情報.曲種別 = (CDTX.E種別) br.ReadInt32();\r
+ return cスコア;\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ #region [ SongsDBになかった曲をファイルから読み込んで反映する ]\r
+ //-----------------\r
+ public void tSongsDBになかった曲をファイルから読み込んで反映する()\r
+ {\r
+ this.nファイルから反映できたスコア数 = 0;\r
+ this.tSongsDBになかった曲をファイルから読み込んで反映する( this.list曲ルート );\r
+ }\r
+ private void tSongsDBになかった曲をファイルから読み込んで反映する( List<C曲リストノード> ノードリスト )\r
+ {\r
+ foreach( C曲リストノード c曲リストノード in ノードリスト )\r
+ {\r
+ if( c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.BOX )\r
+ {\r
+ this.tSongsDBになかった曲をファイルから読み込んで反映する( c曲リストノード.list子リスト );\r
+ }\r
+ else if( ( c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.SCORE ) || ( c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.SCORE_MIDI ) )\r
+ {\r
+ for( int i = 0; i < 5; i++ )\r
+ {\r
+ if( ( c曲リストノード.arスコア[ i ] != null ) && !c曲リストノード.arスコア[ i ].bSongDBにキャッシュがあった )\r
+ {\r
+ string path = c曲リストノード.arスコア[ i ].ファイル情報.ファイルの絶対パス;\r
+ if( File.Exists( path ) )\r
+ {\r
+ try\r
+ {\r
+ CDTX cdtx = new CDTX( c曲リストノード.arスコア[ i ].ファイル情報.ファイルの絶対パス, true );\r
+ c曲リストノード.arスコア[ i ].譜面情報.タイトル = cdtx.TITLE;\r
+ c曲リストノード.arスコア[ i ].譜面情報.アーティスト名 = cdtx.ARTIST;\r
+ c曲リストノード.arスコア[ i ].譜面情報.コメント = cdtx.COMMENT;\r
+ c曲リストノード.arスコア[ i ].譜面情報.ジャンル = cdtx.GENRE;\r
+ c曲リストノード.arスコア[ i ].譜面情報.Preimage = cdtx.PREIMAGE;\r
+ c曲リストノード.arスコア[ i ].譜面情報.Premovie = cdtx.PREMOVIE;\r
+ c曲リストノード.arスコア[ i ].譜面情報.Presound = cdtx.PREVIEW;\r
+ c曲リストノード.arスコア[ i ].譜面情報.Backgound = ( ( cdtx.BACKGROUND != null ) && ( cdtx.BACKGROUND.Length > 0 ) ) ? cdtx.BACKGROUND : cdtx.BACKGROUND_GR;\r
+ c曲リストノード.arスコア[ i ].譜面情報.レベル.Drums = cdtx.LEVEL.Drums;\r
+ c曲リストノード.arスコア[ i ].譜面情報.レベル.Guitar = cdtx.LEVEL.Guitar;\r
+ c曲リストノード.arスコア[ i ].譜面情報.レベル.Bass = cdtx.LEVEL.Bass;\r
+ c曲リストノード.arスコア[ i ].譜面情報.レベルを非表示にする = cdtx.HIDDENLEVEL;\r
+ c曲リストノード.arスコア[ i ].譜面情報.曲種別 = cdtx.e種別;\r
+ this.nファイルから反映できたスコア数++;\r
+ cdtx.On非活性化();\r
+ if( CDTXMania.ConfigIni.bLog曲検索ログ出力 )\r
+ {\r
+ StringBuilder builder = new StringBuilder( 0x400 );\r
+ builder.Append( string.Format( "曲データファイルから譜面情報を転記しました。({0})", path ) );\r
+ builder.Append( "(title=" + c曲リストノード.arスコア[ i ].譜面情報.タイトル );\r
+ builder.Append( ", artist=" + c曲リストノード.arスコア[ i ].譜面情報.アーティスト名 );\r
+ builder.Append( ", comment=" + c曲リストノード.arスコア[ i ].譜面情報.コメント );\r
+ builder.Append( ", genre=" + c曲リストノード.arスコア[ i ].譜面情報.ジャンル );\r
+ builder.Append( ", preimage=" + c曲リストノード.arスコア[ i ].譜面情報.Preimage );\r
+ builder.Append( ", premovie=" + c曲リストノード.arスコア[ i ].譜面情報.Premovie );\r
+ builder.Append( ", presound=" + c曲リストノード.arスコア[ i ].譜面情報.Presound );\r
+ builder.Append( ", background=" + c曲リストノード.arスコア[ i ].譜面情報.Backgound );\r
+ builder.Append( ", lvDr=" + c曲リストノード.arスコア[ i ].譜面情報.レベル.Drums );\r
+ builder.Append( ", lvGt=" + c曲リストノード.arスコア[ i ].譜面情報.レベル.Guitar );\r
+ builder.Append( ", lvBs=" + c曲リストノード.arスコア[ i ].譜面情報.レベル.Bass );\r
+ builder.Append( ", lvHide=" + c曲リストノード.arスコア[ i ].譜面情報.レベルを非表示にする );\r
+ builder.Append( ", type=" + c曲リストノード.arスコア[ i ].譜面情報.曲種別 );\r
+ Trace.TraceInformation( builder.ToString() );\r
+ }\r
+ }\r
+ catch( Exception exception )\r
+ {\r
+ Trace.TraceError( exception.Message );\r
+ c曲リストノード.arスコア[ i ] = null;\r
+ c曲リストノード.nスコア数--;\r
+ this.n検索されたスコア数--;\r
+ Trace.TraceError( "曲データファイルの読み込みに失敗しました。({0})", new object[] { path } );\r
+ }\r
+ }\r
+ string str2 = c曲リストノード.arスコア[ i ].ファイル情報.ファイルの絶対パス + ".score.ini";\r
+ if( File.Exists( str2 ) )\r
+ {\r
+ try\r
+ {\r
+ CScoreIni ini = new CScoreIni( str2 );\r
+ ini.t全演奏記録セクションの整合性をチェックし不整合があればリセットする();\r
+ for( int j = 0; j < 3; j++ )\r
+ {\r
+ int num3 = ( j * 2 ) + 1;\r
+ if( ( ini.stセクション[ num3 ].b演奏にMIDI入力を使用した || ini.stセクション[ num3 ].b演奏にキーボードを使用した ) || ( ini.stセクション[ num3 ].b演奏にジョイパッドを使用した || ini.stセクション[ num3 ].b演奏にマウスを使用した ) )\r
+ {\r
+ c曲リストノード.arスコア[ i ].譜面情報.最大ランク[ j ] = CScoreIni.tランク値を計算して返す( ini.stセクション[ num3 ].n全チップ数, ini.stセクション[ num3 ].nPerfect数, ini.stセクション[ num3 ].nGreat数, ini.stセクション[ num3 ].nGood数, ini.stセクション[ num3 ].nPoor数, ini.stセクション[ num3 ].nMiss数 );\r
+ }\r
+ else\r
+ {\r
+ c曲リストノード.arスコア[ i ].譜面情報.最大ランク[ j ] = 0x63;\r
+ }\r
+ c曲リストノード.arスコア[ i ].譜面情報.最大スキル[ j ] = ini.stセクション[ num3 ].db演奏型スキル値;\r
+ c曲リストノード.arスコア[ i ].譜面情報.フルコンボ[ j ] = ini.stセクション[ num3 ].bフルコンボである;\r
+ }\r
+ c曲リストノード.arスコア[ i ].譜面情報.演奏回数.Drums = ini.stファイル.PlayCountDrums;\r
+ c曲リストノード.arスコア[ i ].譜面情報.演奏回数.Guitar = ini.stファイル.PlayCountGuitar;\r
+ c曲リストノード.arスコア[ i ].譜面情報.演奏回数.Bass = ini.stファイル.PlayCountBass;\r
+ for( int k = 0; k < 5; k++ )\r
+ {\r
+ c曲リストノード.arスコア[ i ].譜面情報.演奏履歴[ k ] = ini.stファイル.History[ k ];\r
+ }\r
+ }\r
+ catch\r
+ {\r
+ Trace.TraceError( "演奏記録ファイルの読み込みに失敗しました。[{0}]", new object[] { str2 } );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ #region [ 曲リストへ後処理を適用する ]\r
+ //-----------------\r
+ public void t曲リストへ後処理を適用する()\r
+ {\r
+ this.t曲リストへ後処理を適用する( this.list曲ルート );\r
+ }\r
+ private void t曲リストへ後処理を適用する( List<C曲リストノード> ノードリスト )\r
+ {\r
+ #region [ リストに1つ以上の曲があるなら RANDOM BOX を入れる ]\r
+ //-----------------------------\r
+ if( ノードリスト.Count > 0 )\r
+ {\r
+ C曲リストノード item = new C曲リストノード();\r
+ item.eノード種別 = C曲リストノード.Eノード種別.RANDOM;\r
+ item.strタイトル = "< RANDOM SELECT >";\r
+ item.nスコア数 = 5;\r
+ item.r親ノード = ノードリスト[ 0 ].r親ノード;\r
+ for( int i = 0; i < 5; i++ )\r
+ {\r
+ item.arスコア[ i ] = new Cスコア();\r
+ item.arスコア[ i ].譜面情報.タイトル = string.Format( "< RANDOM SELECT Lv.{0} >", i + 1 );\r
+ item.arスコア[ i ].譜面情報.コメント = string.Format( "難易度レベル {0} 付近の曲をランダムに選択します。難易度レベルを持たない曲も選択候補となります。", i + 1 );\r
+ item.ar難易度ラベル[ i ] = string.Format( "L{0}", i + 1 );\r
+ }\r
+ ノードリスト.Add( item );\r
+\r
+ #region [ ログ出力 ]\r
+ //-----------------------------\r
+ if( CDTXMania.ConfigIni.bLog曲検索ログ出力 )\r
+ {\r
+ StringBuilder builder = new StringBuilder( 0x100 );\r
+ builder.Append( string.Format( "nID#{0:D3}", item.nID ) );\r
+ if( item.r親ノード != null )\r
+ {\r
+ builder.Append( string.Format( "(in#{0:D3}):", item.r親ノード.nID ) );\r
+ }\r
+ else\r
+ {\r
+ builder.Append( "(onRoot):" );\r
+ }\r
+ builder.Append( " RANDOM" );\r
+ Trace.TraceInformation( builder.ToString() );\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ // すべてのノードについて…\r
+ foreach( C曲リストノード c曲リストノード2 in ノードリスト )\r
+ {\r
+ #region [ BOXノードなら子リストに <<BACK を入れ、子リストに後処理を適用する ]\r
+ //-----------------------------\r
+ if( c曲リストノード2.eノード種別 == C曲リストノード.Eノード種別.BOX )\r
+ {\r
+ C曲リストノード c曲リストノード3 = new C曲リストノード();\r
+ c曲リストノード3.eノード種別 = C曲リストノード.Eノード種別.BACKBOX;\r
+ c曲リストノード3.strタイトル = "<< BACK";\r
+ c曲リストノード3.nスコア数 = 1;\r
+ c曲リストノード3.r親ノード = c曲リストノード2;\r
+ c曲リストノード3.arスコア[ 0 ] = new Cスコア();\r
+ c曲リストノード3.arスコア[ 0 ].ファイル情報.フォルダの絶対パス = "";\r
+ c曲リストノード3.arスコア[ 0 ].譜面情報.タイトル = c曲リストノード3.strタイトル;\r
+ c曲リストノード3.arスコア[ 0 ].譜面情報.コメント = "BOX を出ます。";\r
+ c曲リストノード2.list子リスト.Insert( 0, c曲リストノード3 );\r
+\r
+ #region [ ログ出力 ]\r
+ //-----------------------------\r
+ if( CDTXMania.ConfigIni.bLog曲検索ログ出力 )\r
+ {\r
+ StringBuilder builder2 = new StringBuilder( 0x100 );\r
+ builder2.Append( string.Format( "nID#{0:D3}", c曲リストノード3.nID ) );\r
+ if( c曲リストノード3.r親ノード != null )\r
+ {\r
+ builder2.Append( string.Format( "(in#{0:D3}):", c曲リストノード3.r親ノード.nID ) );\r
+ }\r
+ else\r
+ {\r
+ builder2.Append( "(onRoot):" );\r
+ }\r
+ builder2.Append( " BACKBOX" );\r
+ Trace.TraceInformation( builder2.ToString() );\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ this.t曲リストへ後処理を適用する( c曲リストノード2.list子リスト );\r
+ continue;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ #region [ ノードにタイトルがないなら、最初に見つけたスコアのタイトルを設定する ]\r
+ //-----------------------------\r
+ if( string.IsNullOrEmpty( c曲リストノード2.strタイトル ) )\r
+ {\r
+ for( int j = 0; j < 5; j++ )\r
+ {\r
+ if( ( c曲リストノード2.arスコア[ j ] != null ) && !string.IsNullOrEmpty( c曲リストノード2.arスコア[ j ].譜面情報.タイトル ) )\r
+ {\r
+ c曲リストノード2.strタイトル = c曲リストノード2.arスコア[ j ].譜面情報.タイトル;\r
+\r
+ if( CDTXMania.ConfigIni.bLog曲検索ログ出力 )\r
+ Trace.TraceInformation( "タイトルを設定しました。(nID#{0:D3}, title={1})", new object[] { c曲リストノード2.nID, c曲リストノード2.strタイトル } );\r
+\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ }\r
+\r
+ #region [ ノードをソートする ]\r
+ //-----------------------------\r
+ this.t曲リストのソート1_絶対パス順( ノードリスト );\r
+ //-----------------------------\r
+ #endregion\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ #region [ スコアキャッシュをSongsDBに出力する ]\r
+ //-----------------\r
+ public void tスコアキャッシュをSongsDBに出力する( string SongsDBファイル名 )\r
+ {\r
+ this.nSongsDBへ出力できたスコア数 = 0;\r
+ try\r
+ {\r
+ BinaryWriter bw = new BinaryWriter( new FileStream( SongsDBファイル名, FileMode.Create, FileAccess.Write ) );\r
+ bw.Write( "SongsDB2" );\r
+ this.tSongsDBにリストを1つ出力する( bw, this.list曲ルート );\r
+ bw.Close();\r
+ }\r
+ catch\r
+ {\r
+ Trace.TraceError( "songs.dbの出力に失敗しました。" );\r
+ }\r
+ }\r
+ private void tSongsDBにノードを1つ出力する( BinaryWriter bw, C曲リストノード node )\r
+ {\r
+ for( int i = 0; i < 5; i++ )\r
+ {\r
+ if( node.arスコア[ i ] != null )\r
+ {\r
+ bw.Write( node.arスコア[ i ].ファイル情報.ファイルの絶対パス );\r
+ bw.Write( node.arスコア[ i ].ファイル情報.フォルダの絶対パス );\r
+ bw.Write( node.arスコア[ i ].ファイル情報.最終更新日時.Ticks );\r
+ bw.Write( node.arスコア[ i ].ファイル情報.ファイルサイズ );\r
+ bw.Write( node.arスコア[ i ].ScoreIni情報.最終更新日時.Ticks );\r
+ bw.Write( node.arスコア[ i ].ScoreIni情報.ファイルサイズ );\r
+ bw.Write( node.arスコア[ i ].譜面情報.タイトル );\r
+ bw.Write( node.arスコア[ i ].譜面情報.アーティスト名 );\r
+ bw.Write( node.arスコア[ i ].譜面情報.コメント );\r
+ bw.Write( node.arスコア[ i ].譜面情報.ジャンル );\r
+ bw.Write( node.arスコア[ i ].譜面情報.Preimage );\r
+ bw.Write( node.arスコア[ i ].譜面情報.Premovie );\r
+ bw.Write( node.arスコア[ i ].譜面情報.Presound );\r
+ bw.Write( node.arスコア[ i ].譜面情報.Backgound );\r
+ bw.Write( node.arスコア[ i ].譜面情報.レベル.Drums );\r
+ bw.Write( node.arスコア[ i ].譜面情報.レベル.Guitar );\r
+ bw.Write( node.arスコア[ i ].譜面情報.レベル.Bass );\r
+ bw.Write( node.arスコア[ i ].譜面情報.最大ランク.Drums );\r
+ bw.Write( node.arスコア[ i ].譜面情報.最大ランク.Guitar );\r
+ bw.Write( node.arスコア[ i ].譜面情報.最大ランク.Bass );\r
+ bw.Write( node.arスコア[ i ].譜面情報.最大スキル.Drums );\r
+ bw.Write( node.arスコア[ i ].譜面情報.最大スキル.Guitar );\r
+ bw.Write( node.arスコア[ i ].譜面情報.最大スキル.Bass );\r
+ bw.Write( node.arスコア[ i ].譜面情報.フルコンボ.Drums );\r
+ bw.Write( node.arスコア[ i ].譜面情報.フルコンボ.Guitar );\r
+ bw.Write( node.arスコア[ i ].譜面情報.フルコンボ.Bass );\r
+ bw.Write( node.arスコア[ i ].譜面情報.演奏回数.Drums );\r
+ bw.Write( node.arスコア[ i ].譜面情報.演奏回数.Guitar );\r
+ bw.Write( node.arスコア[ i ].譜面情報.演奏回数.Bass );\r
+ bw.Write( node.arスコア[ i ].譜面情報.演奏履歴.行1 );\r
+ bw.Write( node.arスコア[ i ].譜面情報.演奏履歴.行2 );\r
+ bw.Write( node.arスコア[ i ].譜面情報.演奏履歴.行3 );\r
+ bw.Write( node.arスコア[ i ].譜面情報.演奏履歴.行4 );\r
+ bw.Write( node.arスコア[ i ].譜面情報.演奏履歴.行5 );\r
+ bw.Write( node.arスコア[ i ].譜面情報.レベルを非表示にする );\r
+ bw.Write( (int) node.arスコア[ i ].譜面情報.曲種別 );\r
+ this.nSongsDBへ出力できたスコア数++;\r
+ }\r
+ }\r
+ }\r
+ private void tSongsDBにリストを1つ出力する( BinaryWriter bw, List<C曲リストノード> list )\r
+ {\r
+ foreach( C曲リストノード c曲リストノード in list )\r
+ {\r
+ if( ( c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.SCORE ) || ( c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.SCORE_MIDI ) )\r
+ {\r
+ this.tSongsDBにノードを1つ出力する( bw, c曲リストノード );\r
+ }\r
+ if( c曲リストノード.list子リスト != null )\r
+ {\r
+ this.tSongsDBにリストを1つ出力する( bw, c曲リストノード.list子リスト );\r
+ }\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+\r
+ #region [ 曲リストソート ]\r
+ //-----------------\r
+ public void t曲リストのソート1_絶対パス順( List<C曲リストノード> ノードリスト )\r
+ {\r
+ ノードリスト.Sort( delegate( C曲リストノード n1, C曲リストノード n2 )\r
+ {\r
+ if( n1 == n2 )\r
+ {\r
+ return 0;\r
+ }\r
+ int num = this.t比較0_共通( n1, n2 );\r
+ if( num != 0 )\r
+ {\r
+ return num;\r
+ }\r
+ if( ( n1.eノード種別 == C曲リストノード.Eノード種別.BOX ) && ( n2.eノード種別 == C曲リストノード.Eノード種別.BOX ) )\r
+ {\r
+ return n1.arスコア[ 0 ].ファイル情報.フォルダの絶対パス.CompareTo( n2.arスコア[ 0 ].ファイル情報.フォルダの絶対パス );\r
+ }\r
+ string str = "";\r
+ if( string.IsNullOrEmpty( n1.pathSetDefの絶対パス ) )\r
+ {\r
+ for( int i = 0; i < 5; i++ )\r
+ {\r
+ if( n1.arスコア[ i ] != null )\r
+ {\r
+ str = n1.arスコア[ i ].ファイル情報.ファイルの絶対パス;\r
+ if( str == null )\r
+ {\r
+ str = "";\r
+ }\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ str = n1.pathSetDefの絶対パス + n1.SetDefのブロック番号.ToString( "00" );\r
+ }\r
+ string strB = "";\r
+ if( string.IsNullOrEmpty( n2.pathSetDefの絶対パス ) )\r
+ {\r
+ for( int j = 0; j < 5; j++ )\r
+ {\r
+ if( n2.arスコア[ j ] != null )\r
+ {\r
+ strB = n2.arスコア[ j ].ファイル情報.ファイルの絶対パス;\r
+ if( strB == null )\r
+ {\r
+ strB = "";\r
+ }\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ strB = n2.pathSetDefの絶対パス + n2.SetDefのブロック番号.ToString( "00" );\r
+ }\r
+ return str.CompareTo( strB );\r
+ } );\r
+ foreach( C曲リストノード c曲リストノード in ノードリスト )\r
+ {\r
+ if( ( c曲リストノード.list子リスト != null ) && ( c曲リストノード.list子リスト.Count > 1 ) )\r
+ {\r
+ this.t曲リストのソート1_絶対パス順( c曲リストノード.list子リスト );\r
+ }\r
+ }\r
+ }\r
+ public void t曲リストのソート2_タイトル順( List<C曲リストノード> ノードリスト )\r
+ {\r
+ ノードリスト.Sort( delegate( C曲リストノード n1, C曲リストノード n2 )\r
+ {\r
+ if( n1 == n2 )\r
+ {\r
+ return 0;\r
+ }\r
+ int num = this.t比較0_共通( n1, n2 );\r
+ if( num != 0 )\r
+ {\r
+ return num;\r
+ }\r
+ return n1.strタイトル.CompareTo( n2.strタイトル );\r
+ } );\r
+ foreach( C曲リストノード c曲リストノード in ノードリスト )\r
+ {\r
+ if( ( c曲リストノード.list子リスト != null ) && ( c曲リストノード.list子リスト.Count > 1 ) )\r
+ {\r
+ this.t曲リストのソート2_タイトル順( c曲リストノード.list子リスト );\r
+ }\r
+ }\r
+ }\r
+ public void t曲リストのソート3_演奏回数の多い順( List<C曲リストノード> ノードリスト, E楽器パート part )\r
+ {\r
+ if( part != E楽器パート.UNKNOWN )\r
+ {\r
+ ノードリスト.Sort( delegate( C曲リストノード n1, C曲リストノード n2 )\r
+ {\r
+ if( n1 == n2 )\r
+ {\r
+ return 0;\r
+ }\r
+ int num = 0;\r
+ num = this.t比較0_共通( n1, n2 );\r
+ if( num != 0 )\r
+ {\r
+ return num;\r
+ }\r
+ if( ( n1.eノード種別 == C曲リストノード.Eノード種別.BOX ) && ( n2.eノード種別 == C曲リストノード.Eノード種別.BOX ) )\r
+ {\r
+ return n1.arスコア[ 0 ].ファイル情報.フォルダの絶対パス.CompareTo( n2.arスコア[ 0 ].ファイル情報.フォルダの絶対パス );\r
+ }\r
+ int num2 = 0;\r
+ int num3 = 0;\r
+ for( int i = 0; i < 5; i++ )\r
+ {\r
+ if( n1.arスコア[ i ] != null )\r
+ {\r
+ num2 += n1.arスコア[ i ].譜面情報.演奏回数[ (int) part ];\r
+ }\r
+ if( n2.arスコア[ i ] != null )\r
+ {\r
+ num3 += n2.arスコア[ i ].譜面情報.演奏回数[ (int) part ];\r
+ }\r
+ }\r
+ num = num3 - num2;\r
+ if( num != 0 )\r
+ {\r
+ return num;\r
+ }\r
+ return n1.strタイトル.CompareTo( n2.strタイトル );\r
+ } );\r
+ foreach( C曲リストノード c曲リストノード in ノードリスト )\r
+ {\r
+ if( ( c曲リストノード.list子リスト != null ) && ( c曲リストノード.list子リスト.Count > 1 ) )\r
+ {\r
+ this.t曲リストのソート3_演奏回数の多い順( c曲リストノード.list子リスト, part );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private const string SONGSDB_VERSION = "SongsDB2";\r
+\r
+ private int t比較0_共通( C曲リストノード n1, C曲リストノード n2 )\r
+ {\r
+ if( n1.eノード種別 == C曲リストノード.Eノード種別.BACKBOX )\r
+ {\r
+ return -1;\r
+ }\r
+ if( n2.eノード種別 == C曲リストノード.Eノード種別.BACKBOX )\r
+ {\r
+ return 1;\r
+ }\r
+ if( n1.eノード種別 == C曲リストノード.Eノード種別.RANDOM )\r
+ {\r
+ return 1;\r
+ }\r
+ if( n2.eノード種別 == C曲リストノード.Eノード種別.RANDOM )\r
+ {\r
+ return -1;\r
+ }\r
+ if( ( n1.eノード種別 == C曲リストノード.Eノード種別.BOX ) && ( n2.eノード種別 != C曲リストノード.Eノード種別.BOX ) )\r
+ {\r
+ return -1;\r
+ }\r
+ if( ( n1.eノード種別 != C曲リストノード.Eノード種別.BOX ) && ( n2.eノード種別 == C曲リストノード.Eノード種別.BOX ) )\r
+ {\r
+ return 1;\r
+ }\r
+ return 0;\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class Cスコア\r
+ {\r
+ // プロパティ\r
+\r
+ public STScoreIni情報 ScoreIni情報;\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ public struct STScoreIni情報\r
+ {\r
+ public DateTime 最終更新日時;\r
+ public long ファイルサイズ;\r
+\r
+ public STScoreIni情報( DateTime 最終更新日時, long ファイルサイズ )\r
+ {\r
+ this.最終更新日時 = 最終更新日時;\r
+ this.ファイルサイズ = ファイルサイズ;\r
+ }\r
+ }\r
+\r
+ public STファイル情報 ファイル情報;\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ public struct STファイル情報\r
+ {\r
+ public string ファイルの絶対パス;\r
+ public string フォルダの絶対パス;\r
+ public DateTime 最終更新日時;\r
+ public long ファイルサイズ;\r
+\r
+ public STファイル情報( string ファイルの絶対パス, string フォルダの絶対パス, DateTime 最終更新日時, long ファイルサイズ )\r
+ {\r
+ this.ファイルの絶対パス = ファイルの絶対パス;\r
+ this.フォルダの絶対パス = フォルダの絶対パス;\r
+ this.最終更新日時 = 最終更新日時;\r
+ this.ファイルサイズ = ファイルサイズ;\r
+ }\r
+ }\r
+\r
+ public ST譜面情報 譜面情報;\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ public struct ST譜面情報\r
+ {\r
+ public string タイトル;\r
+ public string アーティスト名;\r
+ public string コメント;\r
+ public string ジャンル;\r
+ public string Preimage;\r
+ public string Premovie;\r
+ public string Presound;\r
+ public string Backgound;\r
+ public STDGBVALUE<int> レベル;\r
+ public STRANK 最大ランク;\r
+ public STSKILL 最大スキル;\r
+ public STDGBVALUE<bool> フルコンボ;\r
+ public STDGBVALUE<int> 演奏回数;\r
+ public STHISTORY 演奏履歴;\r
+ public bool レベルを非表示にする;\r
+ public CDTX.E種別 曲種別;\r
+\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ public struct STHISTORY\r
+ {\r
+ public string 行1;\r
+ public string 行2;\r
+ public string 行3;\r
+ public string 行4;\r
+ public string 行5;\r
+ public string this[ int index ]\r
+ {\r
+ get\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ return this.行1;\r
+\r
+ case 1:\r
+ return this.行2;\r
+\r
+ case 2:\r
+ return this.行3;\r
+\r
+ case 3:\r
+ return this.行4;\r
+\r
+ case 4:\r
+ return this.行5;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ set\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ this.行1 = value;\r
+ return;\r
+\r
+ case 1:\r
+ this.行2 = value;\r
+ return;\r
+\r
+ case 2:\r
+ this.行3 = value;\r
+ return;\r
+\r
+ case 3:\r
+ this.行4 = value;\r
+ return;\r
+\r
+ case 4:\r
+ this.行5 = value;\r
+ return;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ }\r
+ }\r
+\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ public struct STRANK\r
+ {\r
+ public int Drums;\r
+ public int Guitar;\r
+ public int Bass;\r
+ public int this[ int index ]\r
+ {\r
+ get\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ return this.Drums;\r
+\r
+ case 1:\r
+ return this.Guitar;\r
+\r
+ case 2:\r
+ return this.Bass;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ set\r
+ {\r
+ if( ( value < 0 ) || ( ( value != 0x63 ) && ( value > 6 ) ) )\r
+ {\r
+ throw new ArgumentOutOfRangeException();\r
+ }\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ this.Drums = value;\r
+ return;\r
+\r
+ case 1:\r
+ this.Guitar = value;\r
+ return;\r
+\r
+ case 2:\r
+ this.Bass = value;\r
+ return;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ }\r
+ }\r
+\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ public struct STSKILL\r
+ {\r
+ public double Drums;\r
+ public double Guitar;\r
+ public double Bass;\r
+ public double this[ int index ]\r
+ {\r
+ get\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ return this.Drums;\r
+\r
+ case 1:\r
+ return this.Guitar;\r
+\r
+ case 2:\r
+ return this.Bass;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ set\r
+ {\r
+ if( ( value < 0.0 ) || ( value > 100.0 ) )\r
+ {\r
+ throw new ArgumentOutOfRangeException();\r
+ }\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ this.Drums = value;\r
+ return;\r
+\r
+ case 1:\r
+ this.Guitar = value;\r
+ return;\r
+\r
+ case 2:\r
+ this.Bass = value;\r
+ return;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ public bool bSongDBにキャッシュがあった;\r
+ public bool bスコアが有効である\r
+ {\r
+ get\r
+ {\r
+ return ( ( ( this.譜面情報.レベル[ 0 ] + this.譜面情報.レベル[ 1 ] ) + this.譜面情報.レベル[ 2 ] ) != 0 );\r
+ }\r
+ }\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public Cスコア()\r
+ {\r
+ this.ScoreIni情報 = new STScoreIni情報( DateTime.MinValue, 0L );\r
+ this.bSongDBにキャッシュがあった = false;\r
+ this.ファイル情報 = new STファイル情報( "", "", DateTime.MinValue, 0L );\r
+ ST譜面情報 st譜面情報 = new ST譜面情報();\r
+ st譜面情報.タイトル = "";\r
+ st譜面情報.アーティスト名 = "";\r
+ st譜面情報.コメント = "";\r
+ st譜面情報.ジャンル = "";\r
+ st譜面情報.Preimage = "";\r
+ st譜面情報.Premovie = "";\r
+ st譜面情報.Presound = "";\r
+ st譜面情報.Backgound = "";\r
+ st譜面情報.レベル = new STDGBVALUE<int>();\r
+ ST譜面情報.STRANK strank = new ST譜面情報.STRANK();\r
+ strank.Drums = 0x63;\r
+ strank.Guitar = 0x63;\r
+ strank.Bass = 0x63;\r
+ st譜面情報.最大ランク = strank;\r
+ st譜面情報.フルコンボ = new STDGBVALUE<bool>();\r
+ st譜面情報.演奏回数 = new STDGBVALUE<int>();\r
+ ST譜面情報.STHISTORY sthistory = new ST譜面情報.STHISTORY();\r
+ sthistory.行1 = "";\r
+ sthistory.行2 = "";\r
+ sthistory.行3 = "";\r
+ sthistory.行4 = "";\r
+ sthistory.行5 = "";\r
+ st譜面情報.演奏履歴 = sthistory;\r
+ st譜面情報.レベルを非表示にする = false;\r
+ st譜面情報.最大スキル = new ST譜面情報.STSKILL();\r
+ st譜面情報.曲種別 = CDTX.E種別.DTX;\r
+ this.譜面情報 = st譜面情報;\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Drawing;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class C曲リストノード\r
+ {\r
+ // プロパティ\r
+\r
+ public Eノード種別 eノード種別 = Eノード種別.UNKNOWN;\r
+ public enum Eノード種別\r
+ {\r
+ SCORE,\r
+ SCORE_MIDI,\r
+ BOX,\r
+ BACKBOX,\r
+ RANDOM,\r
+ UNKNOWN\r
+ }\r
+ public int nID { get; private set; }\r
+ public Cスコア[] arスコア = new Cスコア[ 5 ];\r
+ public string[] ar難易度ラベル = new string[ 5 ];\r
+ public bool bDTXFilesで始まるフォルダ名のBOXである;\r
+ public bool bBoxDefで作成されたBOXである\r
+ {\r
+ get\r
+ {\r
+ return !this.bDTXFilesで始まるフォルダ名のBOXである;\r
+ }\r
+ set\r
+ {\r
+ this.bDTXFilesで始まるフォルダ名のBOXである = !value;\r
+ }\r
+ }\r
+ public Color col文字色 = Color.White;\r
+ public List<C曲リストノード> listランダム用ノードリスト;\r
+ public List<C曲リストノード> list子リスト;\r
+ public int nGood範囲ms = -1;\r
+ public int nGreat範囲ms = -1;\r
+ public int nPerfect範囲ms = -1;\r
+ public int nPoor範囲ms = -1;\r
+ public int nスコア数;\r
+ public string pathSetDefの絶対パス = "";\r
+ public C曲リストノード r親ノード;\r
+ public int SetDefのブロック番号;\r
+ public Stack<int> stackランダム演奏番号 = new Stack<int>();\r
+ public string strジャンル = "";\r
+ public string strタイトル = "";\r
+\r
+ \r
+ // コンストラクタ\r
+\r
+ public C曲リストノード()\r
+ {\r
+ this.nID = id++;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private static int id;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Diagnostics;\r
+using System.Threading;\r
+using System.IO;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CStage起動 : CStage\r
+ {\r
+ // コンストラクタ\r
+\r
+ public CStage起動()\r
+ {\r
+ base.eステージID = CStage.Eステージ.起動;\r
+ base.b活性化してない = true;\r
+ }\r
+\r
+\r
+ // CStage 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ Trace.TraceInformation( "起動ステージを活性化します。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ this.list進行文字列 = new List<string>();\r
+ base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
+ base.On活性化();\r
+ Trace.TraceInformation( "起動ステージの活性化を完了しました。" );\r
+ }\r
+ finally\r
+ {\r
+ Trace.Unindent();\r
+ }\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ Trace.TraceInformation( "起動ステージを非活性化します。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ this.list進行文字列 = null;\r
+ if( ( this.thリスト構築 != null ) && this.thリスト構築.IsAlive )\r
+ {\r
+ Trace.TraceWarning( "リスト構築スレッドを強制停止します。" );\r
+ this.thリスト構築.Abort();\r
+ this.thリスト構築.Join();\r
+ }\r
+ base.On非活性化();\r
+ Trace.TraceInformation( "起動ステージの非活性化を完了しました。" );\r
+ }\r
+ finally\r
+ {\r
+ Trace.Unindent();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.tx背景 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSetup background.jpg" ), false );\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.tx背景 );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ if( base.b初めての進行描画 )\r
+ {\r
+ this.list進行文字列.Add( "DTXMania powered by YAMAHA Silent Session Drums\n" );\r
+ this.list進行文字列.Add( "Release: " + CDTXMania.VERSION + " [" + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString() + "]" );\r
+ this.thリスト構築 = new Thread( new ThreadStart( this.t曲リストの構築 ) );\r
+ this.thリスト構築.Name = "曲リストの構築";\r
+ this.thリスト構築.IsBackground = true;\r
+ this.thリスト構築.Start();\r
+ base.b初めての進行描画 = false;\r
+ return 0;\r
+ }\r
+\r
+ CSongs管理 s管理 = CDTXMania.Songs管理;\r
+\r
+ if( this.tx背景 != null )\r
+ this.tx背景.t2D描画( CDTXMania.app.Device, 0, 0 );\r
+\r
+ #region [ this.str現在進行中 の決定 ]\r
+ //-----------------\r
+ switch( base.eフェーズID )\r
+ {\r
+ case CStage.Eフェーズ.起動0_システムサウンドを構築:\r
+ this.str現在進行中 = "Loading system sounds ... ";\r
+ break;\r
+\r
+ case CStage.Eフェーズ.起動1_SongsDBからスコアキャッシュを構築:\r
+ this.str現在進行中 = "Loading songs.db ... ";\r
+ break;\r
+\r
+ case CStage.Eフェーズ.起動2_曲を検索してリストを作成する:\r
+ this.str現在進行中 = string.Format( "{0} ... {1}", "Enumerating songs", s管理.n検索されたスコア数 );\r
+ break;\r
+\r
+ case CStage.Eフェーズ.起動3_スコアキャッシュをリストに反映する:\r
+ this.str現在進行中 = string.Format( "{0} ... {1}/{2}", "Loading score properties from songs.db", CDTXMania.Songs管理.nスコアキャッシュから反映できたスコア数, s管理.n検索されたスコア数 );\r
+ break;\r
+\r
+ case CStage.Eフェーズ.起動4_スコアキャッシュになかった曲をファイルから読み込んで反映する:\r
+ this.str現在進行中 = string.Format( "{0} ... {1}/{2}", "Loading score properties from files", CDTXMania.Songs管理.nファイルから反映できたスコア数, CDTXMania.Songs管理.n検索されたスコア数 - s管理.nスコアキャッシュから反映できたスコア数 );\r
+ break;\r
+\r
+ case CStage.Eフェーズ.起動5_曲リストへ後処理を適用する:\r
+ this.str現在進行中 = string.Format( "{0} ... ", "Building songlists" );\r
+ break;\r
+\r
+ case CStage.Eフェーズ.起動6_スコアキャッシュをSongsDBに出力する:\r
+ this.str現在進行中 = string.Format( "{0} ... ", "Saving songs.db" );\r
+ break;\r
+\r
+ case CStage.Eフェーズ.起動7_完了:\r
+ this.str現在進行中 = "Setup done.";\r
+ break;\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ #region [ this.list進行文字列+this.現在進行中 の表示 ]\r
+ //-----------------\r
+ lock( this.list進行文字列 )\r
+ {\r
+ int x = 0;\r
+ int y = 0;\r
+ foreach( string str in this.list進行文字列 )\r
+ {\r
+ CDTXMania.act文字コンソール.tPrint( x, y, C文字コンソール.Eフォント種別.灰細, str );\r
+ y += 14;\r
+ }\r
+ CDTXMania.act文字コンソール.tPrint( x, y, C文字コンソール.Eフォント種別.灰細, this.str現在進行中 );\r
+ }\r
+ //-----------------\r
+ #endregion\r
+\r
+ if( !this.thリスト構築.IsAlive )\r
+ {\r
+ return 1;\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private List<string> list進行文字列;\r
+ private const string MSG進行0 = "Loading system sounds";\r
+ private const string MSG進行1 = "Loading songs.db";\r
+ private const string MSG進行2 = "Enumerating songs";\r
+ private const string MSG進行3 = "Loading score properties from songs.db";\r
+ private const string MSG進行4 = "Loading score properties from files";\r
+ private const string MSG進行5 = "Loading score properties from socre.ini";\r
+ private const string MSG進行6 = "Building songlists";\r
+ private const string MSG進行7 = "Saving songs.db";\r
+ private string str現在進行中 = "";\r
+ private Thread thリスト構築;\r
+ private CTexture tx背景;\r
+\r
+ private void t曲リストの構築()\r
+ {\r
+ // !注意!\r
+ // 本メソッドは別スレッドで動作するが、プラグイン側でカレントディレクトリを変更しても大丈夫なように、\r
+ // すべてのファイルアクセスは「絶対パス」で行うこと。(2010.9.16)\r
+\r
+ DateTime now = DateTime.Now;\r
+ string str = CDTXMania.strEXEのあるフォルダ + "songs.db";\r
+\r
+ try\r
+ {\r
+ #region [ 0) システムサウンドの構築 ]\r
+ //-----------------------------\r
+ base.eフェーズID = CStage.Eフェーズ.起動0_システムサウンドを構築;\r
+\r
+ Trace.TraceInformation( "0) システムサウンドを構築します。" );\r
+ Trace.Indent();\r
+\r
+ try\r
+ {\r
+ for( int i = 0; i < CDTXMania.Skin.nシステムサウンド数; i++ )\r
+ {\r
+ CSkin.Cシステムサウンド cシステムサウンド = CDTXMania.Skin[ i ];\r
+ if( !CDTXMania.bコンパクトモード || cシステムサウンド.bCompact対象 )\r
+ {\r
+ try\r
+ {\r
+ cシステムサウンド.t読み込み();\r
+ Trace.TraceInformation( "システムサウンドを読み込みました。({0})", new object[] { cシステムサウンド.strファイル名 } );\r
+ if( ( cシステムサウンド == CDTXMania.Skin.bgm起動画面 ) && cシステムサウンド.b読み込み成功 )\r
+ {\r
+ cシステムサウンド.t再生する();\r
+ }\r
+ }\r
+ catch( FileNotFoundException )\r
+ {\r
+ Trace.TraceWarning( "システムサウンドが存在しません。({0})", new object[] { cシステムサウンド.strファイル名 } );\r
+ }\r
+ catch( Exception exception )\r
+ {\r
+ Trace.TraceError( exception.Message );\r
+ Trace.TraceWarning( "システムサウンドの読み込みに失敗しました。({0})", new object[] { cシステムサウンド.strファイル名 } );\r
+ }\r
+ }\r
+ }\r
+ lock( this.list進行文字列 )\r
+ {\r
+ this.list進行文字列.Add( "Loading system sounds ... OK " );\r
+ }\r
+ }\r
+ finally\r
+ {\r
+ Trace.Unindent();\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ if( CDTXMania.bコンパクトモード )\r
+ {\r
+ Trace.TraceInformation( "コンパクトモードなので残りの起動処理は省略します。" );\r
+ return;\r
+ }\r
+\r
+ #region [ 1) songs.db の読み込み ]\r
+ //-----------------------------\r
+ base.eフェーズID = CStage.Eフェーズ.起動1_SongsDBからスコアキャッシュを構築;\r
+\r
+ Trace.TraceInformation( "1) songs.db を読み込みます。" );\r
+ Trace.Indent();\r
+\r
+ try\r
+ {\r
+ if( !CDTXMania.ConfigIni.bConfigIniがないかDTXManiaのバージョンが異なる )\r
+ {\r
+ try\r
+ {\r
+ CDTXMania.Songs管理.tSongsDBを読み込む( str );\r
+ }\r
+ catch\r
+ {\r
+ Trace.TraceError( "songs.db の読み込みに失敗しました。" );\r
+ }\r
+ Trace.TraceInformation( "songs.db の読み込みを完了しました。[{0}スコア]", new object[] { CDTXMania.Songs管理.nSongsDBから取得できたスコア数 } );\r
+ lock( this.list進行文字列 )\r
+ {\r
+ this.list進行文字列.Add( "Loading songs.db ... OK" );\r
+ }\r
+ }\r
+ else\r
+ {\r
+ Trace.TraceInformation( "初回の起動であるかまたはDTXManiaのバージョンが上がったため、songs.db の読み込みをスキップします。" );\r
+ lock( this.list進行文字列 )\r
+ {\r
+ this.list進行文字列.Add( "Loading songs.db ... Skip" );\r
+ }\r
+ }\r
+ }\r
+ finally\r
+ {\r
+ Trace.Unindent();\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ #region [ 2) 曲データの検索 ]\r
+ //-----------------------------\r
+ base.eフェーズID = CStage.Eフェーズ.起動2_曲を検索してリストを作成する;\r
+\r
+ Trace.TraceInformation( "2) 曲データを検索します。" );\r
+ Trace.Indent();\r
+\r
+ try\r
+ {\r
+ if( !string.IsNullOrEmpty( CDTXMania.ConfigIni.str曲データ検索パス ) )\r
+ {\r
+ string[] strArray = CDTXMania.ConfigIni.str曲データ検索パス.Split( new char[] { ';' } );\r
+ if( strArray.Length > 0 )\r
+ {\r
+ // 全パスについて…\r
+ foreach( string str2 in strArray )\r
+ {\r
+ string path = str2;\r
+ if( !Path.IsPathRooted( path ) )\r
+ {\r
+ path = CDTXMania.strEXEのあるフォルダ + str2; // 相対パスの場合、絶対パスに直す(2010.9.16)\r
+ }\r
+\r
+ if( !string.IsNullOrEmpty( path ) )\r
+ {\r
+ Trace.TraceInformation( "検索パス: " + path );\r
+ Trace.Indent();\r
+\r
+ try\r
+ {\r
+ CDTXMania.Songs管理.t曲を検索してリストを作成する( path, true );\r
+ }\r
+ catch( Exception exception2 )\r
+ {\r
+ Trace.TraceError( exception2.Message );\r
+ Trace.TraceError( exception2.StackTrace );\r
+ Trace.TraceError( "例外が発生しましたが処理を継続します。" );\r
+ }\r
+ finally\r
+ {\r
+ Trace.Unindent();\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ Trace.TraceWarning( "曲データの検索パス(DTXPath)の指定がありません。" );\r
+ }\r
+ }\r
+ finally\r
+ {\r
+ Trace.TraceInformation( "曲データの検索を完了しました。[{0}曲{1}スコア]", new object[] { CDTXMania.Songs管理.n検索された曲ノード数, CDTXMania.Songs管理.n検索されたスコア数 } );\r
+ Trace.Unindent();\r
+ }\r
+ lock( this.list進行文字列 )\r
+ {\r
+ this.list進行文字列.Add( string.Format( "{0} ... {1} scores ({2} songs)", "Enumerating songs", CDTXMania.Songs管理.n検索されたスコア数, CDTXMania.Songs管理.n検索された曲ノード数 ) );\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ #region [ 3) songs.db 情報の曲リストへの反映 ]\r
+ //-----------------------------\r
+ base.eフェーズID = CStage.Eフェーズ.起動3_スコアキャッシュをリストに反映する;\r
+\r
+ Trace.TraceInformation( "3) songs.db の情報を曲リストへ反映します。" );\r
+ Trace.Indent();\r
+\r
+ try\r
+ {\r
+ CDTXMania.Songs管理.tスコアキャッシュを曲リストに反映する();\r
+ }\r
+ catch( Exception exception3 )\r
+ {\r
+ Trace.TraceError( exception3.Message );\r
+ Trace.TraceError( exception3.StackTrace );\r
+ Trace.TraceError( "例外が発生しましたが処理を継続します。" );\r
+ }\r
+ finally\r
+ {\r
+ Trace.TraceInformation( "曲リストへの反映を完了しました。[{0}/{1}スコア]", new object[] { CDTXMania.Songs管理.nスコアキャッシュから反映できたスコア数, CDTXMania.Songs管理.n検索されたスコア数 } );\r
+ Trace.Unindent();\r
+ }\r
+ lock( this.list進行文字列 )\r
+ {\r
+ this.list進行文字列.Add( string.Format( "{0} ... {1}/{2}", "Loading score properties from songs.db", CDTXMania.Songs管理.nスコアキャッシュから反映できたスコア数, CDTXMania.Songs管理.n検索されたスコア数 ) );\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ #region [ 4) songs.db になかった曲データをファイルから読み込んで反映 ]\r
+ //-----------------------------\r
+ base.eフェーズID = CStage.Eフェーズ.起動4_スコアキャッシュになかった曲をファイルから読み込んで反映する;\r
+\r
+ int num2 = CDTXMania.Songs管理.n検索されたスコア数 - CDTXMania.Songs管理.nスコアキャッシュから反映できたスコア数;\r
+\r
+ Trace.TraceInformation( "4) songs.db になかった曲データ[{0}スコア]の情報をファイルから読み込んで反映します。", new object[] { num2 } );\r
+ Trace.Indent();\r
+\r
+ try\r
+ {\r
+ CDTXMania.Songs管理.tSongsDBになかった曲をファイルから読み込んで反映する();\r
+ }\r
+ catch( Exception exception4 )\r
+ {\r
+ Trace.TraceError( exception4.Message );\r
+ Trace.TraceError( exception4.StackTrace );\r
+ Trace.TraceError( "例外が発生しましたが処理を継続します。" );\r
+ }\r
+ finally\r
+ {\r
+ Trace.TraceInformation( "曲データへの反映を完了しました。[{0}/{1}スコア]", new object[] { CDTXMania.Songs管理.nファイルから反映できたスコア数, num2 } );\r
+ Trace.Unindent();\r
+ }\r
+ lock( this.list進行文字列 )\r
+ {\r
+ this.list進行文字列.Add( string.Format( "{0} ... {1}/{2}", "Loading score properties from files", CDTXMania.Songs管理.nファイルから反映できたスコア数, CDTXMania.Songs管理.n検索されたスコア数 - CDTXMania.Songs管理.nスコアキャッシュから反映できたスコア数 ) );\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ #region [ 5) 曲リストへの後処理の適用 ]\r
+ //-----------------------------\r
+ base.eフェーズID = CStage.Eフェーズ.起動5_曲リストへ後処理を適用する;\r
+\r
+ Trace.TraceInformation( "5) 曲リストへの後処理を適用します。" );\r
+ Trace.Indent();\r
+\r
+ try\r
+ {\r
+ CDTXMania.Songs管理.t曲リストへ後処理を適用する();\r
+ }\r
+ catch( Exception exception5 )\r
+ {\r
+ Trace.TraceError( exception5.Message );\r
+ Trace.TraceError( exception5.StackTrace );\r
+ Trace.TraceError( "例外が発生しましたが処理を継続します。" );\r
+ }\r
+ finally\r
+ {\r
+ Trace.TraceInformation( "曲リストへの後処理を完了しました。" );\r
+ Trace.Unindent();\r
+ }\r
+ lock( this.list進行文字列 )\r
+ {\r
+ this.list進行文字列.Add( string.Format( "{0} ... OK", "Building songlists" ) );\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ #region [ 6) songs.db への保存 ]\r
+ //-----------------------------\r
+ base.eフェーズID = CStage.Eフェーズ.起動6_スコアキャッシュをSongsDBに出力する;\r
+\r
+ Trace.TraceInformation( "6) 曲データの情報を songs.db へ出力します。" );\r
+ Trace.Indent();\r
+\r
+ try\r
+ {\r
+ CDTXMania.Songs管理.tスコアキャッシュをSongsDBに出力する( str );\r
+ }\r
+ catch( Exception exception6 )\r
+ {\r
+ Trace.TraceError( exception6.Message );\r
+ Trace.TraceError( exception6.StackTrace );\r
+ Trace.TraceError( "例外が発生しましたが処理を継続します。" );\r
+ }\r
+ finally\r
+ {\r
+ Trace.TraceInformation( "songs.db への出力を完了しました。[{0}スコア]", new object[] { CDTXMania.Songs管理.nSongsDBへ出力できたスコア数 } );\r
+ Trace.Unindent();\r
+ }\r
+ lock( this.list進行文字列 )\r
+ {\r
+ this.list進行文字列.Add( string.Format( "{0} ... OK", "Saving songs.db" ) );\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ }\r
+ finally\r
+ {\r
+ base.eフェーズID = CStage.Eフェーズ.起動7_完了;\r
+ TimeSpan span = (TimeSpan) ( DateTime.Now - now );\r
+ Trace.TraceInformation( "起動所要時間: {0}", new object[] { span.ToString() } );\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using System.Diagnostics;\r
+using System.Drawing;\r
+using SlimDX.DirectInput;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CStageタイトル : CStage\r
+ {\r
+ // コンストラクタ\r
+\r
+ public CStageタイトル()\r
+ {\r
+ base.eステージID = CStage.Eステージ.タイトル;\r
+ base.b活性化してない = true;\r
+ base.list子Activities.Add( this.actFIfromSetup = new CActFIFOWhite() );\r
+ base.list子Activities.Add( this.actFI = new CActFIFOWhite() );\r
+ base.list子Activities.Add( this.actFO = new CActFIFOWhite() );\r
+ }\r
+\r
+\r
+ // CStage 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ Trace.TraceInformation( "タイトルステージを活性化します。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ for( int i = 0; i < 4; i++ )\r
+ {\r
+ this.ctキー反復用[ i ] = new CCounter( 0, 0, 0, CDTXMania.Timer );\r
+ }\r
+ this.ct上移動用 = new CCounter();\r
+ this.ct下移動用 = new CCounter();\r
+ this.ctカーソルフラッシュ用 = new CCounter();\r
+ base.On活性化();\r
+ }\r
+ finally\r
+ {\r
+ Trace.TraceInformation( "タイトルステージの活性化を完了しました。" );\r
+ Trace.Unindent();\r
+ }\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ Trace.TraceInformation( "タイトルステージを非活性化します。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ for( int i = 0; i < 4; i++ )\r
+ {\r
+ this.ctキー反復用[ i ] = null;\r
+ }\r
+ this.ct上移動用 = null;\r
+ this.ct下移動用 = null;\r
+ this.ctカーソルフラッシュ用 = null;\r
+ }\r
+ finally\r
+ {\r
+ Trace.TraceInformation( "タイトルステージの非活性化を完了しました。" );\r
+ Trace.Unindent();\r
+ }\r
+ base.On非活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.tx背景 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenTitle background.jpg" ), false );\r
+ this.txメニュー = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenTitle menu.png" ), false );\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.tx背景 );\r
+ CDTXMania.tテクスチャの解放( ref this.txメニュー );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ #region [ 初めての進行描画 ]\r
+ //---------------------\r
+ if( base.b初めての進行描画 )\r
+ {\r
+ if( CDTXMania.r直前のステージ == CDTXMania.stage起動 )\r
+ {\r
+ this.actFIfromSetup.tフェードイン開始();\r
+ base.eフェーズID = CStage.Eフェーズ.タイトル_起動画面からのフェードイン;\r
+ }\r
+ else\r
+ {\r
+ this.actFI.tフェードイン開始();\r
+ base.eフェーズID = CStage.Eフェーズ.共通_フェードイン;\r
+ }\r
+ this.ctカーソルフラッシュ用.t開始( 0, 700, 5, CDTXMania.Timer );\r
+ this.ctカーソルフラッシュ用.n現在の値 = 100;\r
+ base.b初めての進行描画 = false;\r
+ }\r
+ //---------------------\r
+ #endregion\r
+\r
+ // 進行\r
+\r
+ #region [ カーソル上移動 ]\r
+ //---------------------\r
+ if( this.ct上移動用.b進行中 )\r
+ {\r
+ this.ct上移動用.t進行();\r
+ if( this.ct上移動用.b終了値に達した )\r
+ {\r
+ this.ct上移動用.t停止();\r
+ }\r
+ }\r
+ //---------------------\r
+ #endregion\r
+ #region [ カーソル下移動 ]\r
+ //---------------------\r
+ if( this.ct下移動用.b進行中 )\r
+ {\r
+ this.ct下移動用.t進行();\r
+ if( this.ct下移動用.b終了値に達した )\r
+ {\r
+ this.ct下移動用.t停止();\r
+ }\r
+ }\r
+ //---------------------\r
+ #endregion\r
+ #region [ カーソルフラッシュ ]\r
+ //---------------------\r
+ this.ctカーソルフラッシュ用.t進行Loop();\r
+ //---------------------\r
+ #endregion\r
+\r
+ // キー入力\r
+\r
+ if( base.eフェーズID == CStage.Eフェーズ.共通_通常状態 // 通常状態、かつ\r
+ && CDTXMania.act現在入力を占有中のプラグイン == null ) // プラグインの入力占有がない\r
+ {\r
+ if( CDTXMania.Input管理.Keyboard.bキーが押された( (int) Key.Escape ) )\r
+ return 4;\r
+\r
+ this.ctキー反復用.Up.tキー反復( CDTXMania.Input管理.Keyboard.bキーが押されている( 0x84 ), new CCounter.DGキー処理( this.tカーソルを上へ移動する ) );\r
+ this.ctキー反復用.R.tキー反復( CDTXMania.Pad.b押されているGB( Eパッド.HH ), new CCounter.DGキー処理( this.tカーソルを上へ移動する ) );\r
+ if( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.SD ) )\r
+ this.tカーソルを上へ移動する();\r
+\r
+ this.ctキー反復用.Down.tキー反復( CDTXMania.Input管理.Keyboard.bキーが押されている( 50 ), new CCounter.DGキー処理( this.tカーソルを下へ移動する ) );\r
+ this.ctキー反復用.B.tキー反復( CDTXMania.Pad.b押されているGB( Eパッド.BD ), new CCounter.DGキー処理( this.tカーソルを下へ移動する ) );\r
+ if( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.LT ) )\r
+ this.tカーソルを下へ移動する();\r
+\r
+ if( ( CDTXMania.Pad.b押されたDGB( Eパッド.CY ) || CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.RD ) ) || ( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.LC ) || ( CDTXMania.ConfigIni.bEnterがキー割り当てのどこにも使用されていない && CDTXMania.Input管理.Keyboard.bキーが押された( 0x75 ) ) ) )\r
+ {\r
+ if( ( this.n現在のカーソル行 == 0 ) && CDTXMania.Skin.soundゲーム開始音.b読み込み成功 )\r
+ {\r
+ CDTXMania.Skin.soundゲーム開始音.t再生する();\r
+ }\r
+ else\r
+ {\r
+ CDTXMania.Skin.sound決定音.t再生する();\r
+ }\r
+ if( this.n現在のカーソル行 == 3 )\r
+ {\r
+ return 4;\r
+ }\r
+ this.actFO.tフェードアウト開始();\r
+ base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
+ }\r
+ }\r
+\r
+ // 描画\r
+\r
+ if( this.tx背景 != null )\r
+ this.tx背景.t2D描画( CDTXMania.app.Device, 0, 0 );\r
+\r
+ if( this.txメニュー != null )\r
+ {\r
+ int x = 0xce;\r
+ int y = 0xcb + ( this.n現在のカーソル行 * 0x27 );\r
+ if( this.ct上移動用.b進行中 )\r
+ {\r
+ y += (int) ( 19.5 * ( Math.Cos( 3.1415926535897931 * ( ( (double) this.ct上移動用.n現在の値 ) / 100.0 ) ) + 1.0 ) );\r
+ }\r
+ else if( this.ct下移動用.b進行中 )\r
+ {\r
+ y -= (int) ( 19.5 * ( Math.Cos( 3.1415926535897931 * ( ( (double) this.ct下移動用.n現在の値 ) / 100.0 ) ) + 1.0 ) );\r
+ }\r
+ if( this.ctカーソルフラッシュ用.n現在の値 <= 100 )\r
+ {\r
+ float num3 = (float) ( 1.0 + ( ( ( (double) this.ctカーソルフラッシュ用.n現在の値 ) / 100.0 ) * 0.5 ) );\r
+ this.txメニュー.vc拡大縮小倍率.X = num3;\r
+ this.txメニュー.vc拡大縮小倍率.Y = num3;\r
+ this.txメニュー.n透明度 = (int) ( 255.0 * ( 1.0 - ( ( (double) this.ctカーソルフラッシュ用.n現在の値 ) / 100.0 ) ) );\r
+ int num4 = x + ( (int) ( ( 227.0 * ( 1.0 - num3 ) ) / 2.0 ) );\r
+ int num5 = y + ( (int) ( ( 39.0 * ( 1.0 - num3 ) ) / 2.0 ) );\r
+ this.txメニュー.t2D描画( CDTXMania.app.Device, num4, num5, new Rectangle( 0, 0xc3, 0xe3, 0x27 ) );\r
+ }\r
+ this.txメニュー.vc拡大縮小倍率.X = 1f;\r
+ this.txメニュー.vc拡大縮小倍率.Y = 1f;\r
+ this.txメニュー.n透明度 = 0xff;\r
+ this.txメニュー.t2D描画( CDTXMania.app.Device, x, y, new Rectangle( 0, 0x9c, 0xe3, 0x27 ) );\r
+ }\r
+ if( this.txメニュー != null )\r
+ {\r
+ this.txメニュー.t2D描画( CDTXMania.app.Device, 0xce, 0xcb, new Rectangle( 0, 0, 0xe3, 0x9c ) );\r
+ }\r
+ CStage.Eフェーズ eフェーズid = base.eフェーズID;\r
+ switch( eフェーズid )\r
+ {\r
+ case CStage.Eフェーズ.共通_フェードイン:\r
+ if( this.actFI.On進行描画() != 0 )\r
+ {\r
+ CDTXMania.Skin.soundタイトル音.t再生する();\r
+ base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
+ }\r
+ break;\r
+\r
+ case CStage.Eフェーズ.共通_フェードアウト:\r
+ if( this.actFO.On進行描画() == 0 )\r
+ {\r
+ break;\r
+ }\r
+ base.eフェーズID = CStage.Eフェーズ.共通_終了状態;\r
+ return ( this.n現在のカーソル行 + 1 );\r
+\r
+ case CStage.Eフェーズ.タイトル_起動画面からのフェードイン:\r
+ if( this.actFIfromSetup.On進行描画() != 0 )\r
+ {\r
+ CDTXMania.Skin.soundタイトル音.t再生する();\r
+ base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
+ }\r
+ break;\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+ public enum E戻り値\r
+ {\r
+ 継続,\r
+ GAMESTART,\r
+ OPTION,\r
+ CONFIG,\r
+ EXIT\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ private struct STキー反復用カウンタ\r
+ {\r
+ public CCounter Up;\r
+ public CCounter Down;\r
+ public CCounter R;\r
+ public CCounter B;\r
+ public CCounter this[ int index ]\r
+ {\r
+ get\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ return this.Up;\r
+\r
+ case 1:\r
+ return this.Down;\r
+\r
+ case 2:\r
+ return this.R;\r
+\r
+ case 3:\r
+ return this.B;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ set\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ this.Up = value;\r
+ return;\r
+\r
+ case 1:\r
+ this.Down = value;\r
+ return;\r
+\r
+ case 2:\r
+ this.R = value;\r
+ return;\r
+\r
+ case 3:\r
+ this.B = value;\r
+ return;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ }\r
+ }\r
+\r
+ private CActFIFOWhite actFI;\r
+ private CActFIFOWhite actFIfromSetup;\r
+ private CActFIFOWhite actFO;\r
+ private CCounter ctカーソルフラッシュ用;\r
+ private STキー反復用カウンタ ctキー反復用;\r
+ private CCounter ct下移動用;\r
+ private CCounter ct上移動用;\r
+ private const int MENU_H = 0x27;\r
+ private const int MENU_W = 0xe3;\r
+ private const int MENU_X = 0xce;\r
+ private const int MENU_Y = 0xcb;\r
+ private int n現在のカーソル行;\r
+ private CTexture txメニュー;\r
+ private CTexture tx背景;\r
+ \r
+ private void tカーソルを下へ移動する()\r
+ {\r
+ if( this.n現在のカーソル行 != 3 )\r
+ {\r
+ CDTXMania.Skin.soundカーソル移動音.t再生する();\r
+ this.n現在のカーソル行++;\r
+ this.ct下移動用.t開始( 0, 100, 1, CDTXMania.Timer );\r
+ if( this.ct上移動用.b進行中 )\r
+ {\r
+ this.ct下移動用.n現在の値 = 100 - this.ct上移動用.n現在の値;\r
+ this.ct上移動用.t停止();\r
+ }\r
+ }\r
+ }\r
+ private void tカーソルを上へ移動する()\r
+ {\r
+ if( this.n現在のカーソル行 != 0 )\r
+ {\r
+ CDTXMania.Skin.soundカーソル移動音.t再生する();\r
+ this.n現在のカーソル行--;\r
+ this.ct上移動用.t開始( 0, 100, 1, CDTXMania.Timer );\r
+ if( this.ct下移動用.b進行中 )\r
+ {\r
+ this.ct上移動用.n現在の値 = 100 - this.ct下移動用.n現在の値;\r
+ this.ct下移動用.t停止();\r
+ }\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Drawing;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CActOptionList : CActivity\r
+ {\r
+ // プロパティ\r
+\r
+ public int n現在の選択項目;\r
+ public bool b現在選択されている項目はReturnToMenuである\r
+ {\r
+ get\r
+ {\r
+ CItemBase base2 = this.list項目リスト[ this.n現在の選択項目 ];\r
+ if( ( ( base2 != this.iCommonReturnToMenu ) && ( base2 != this.iDrumsReturnToMenu ) ) && ( base2 != this.iGuitarReturnToMenu ) )\r
+ {\r
+ return ( base2 == this.iBassReturnToMenu );\r
+ }\r
+ return true;\r
+ }\r
+ }\r
+ public CItemBase ib現在の選択項目\r
+ {\r
+ get\r
+ {\r
+ return this.list項目リスト[ this.n現在の選択項目 ];\r
+ }\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ public void t項目リストの設定・Bass()\r
+ {\r
+ this.tConfigIniへ記録する();\r
+ this.list項目リスト.Clear();\r
+ this.iBassReturnToMenu = new CItemBase( "<< ReturnTo Menu", CItemBase.Eパネル種別.その他 );\r
+ this.iBassReturnToMenu.str説明文 = "左側のメニューに戻ります。";\r
+ this.list項目リスト.Add( this.iBassReturnToMenu );\r
+ this.iBassAutoPlay = new CItemToggle( "AutoPlay", CDTXMania.ConfigIni.bAutoPlay.Bass );\r
+ this.iBassAutoPlay.str説明文 = "ベースパートを自動で演奏します。";\r
+ this.list項目リスト.Add( this.iBassAutoPlay );\r
+ this.iBassScrollSpeed = new CItemInteger( "ScrollSpeed", 0, 0x7cf, CDTXMania.ConfigIni.n譜面スクロール速度.Bass );\r
+ this.iBassScrollSpeed.str説明文 = "演奏時のベース譜面のスクロールの\n速度を指定します。\nx0.5 ~ x1000.0 までを指定可能です。";\r
+ this.list項目リスト.Add( this.iBassScrollSpeed );\r
+ this.iBassSudden = new CItemToggle( "Sudden", CDTXMania.ConfigIni.bSudden.Bass );\r
+ this.iBassSudden.str説明文 = "ベースチップがヒットバー付近にくる\nまで表示されなくなります。";\r
+ this.list項目リスト.Add( this.iBassSudden );\r
+ this.iBassHidden = new CItemToggle( "Hidden", CDTXMania.ConfigIni.bHidden.Bass );\r
+ this.iBassHidden.str説明文 = "ベースチップがヒットバー付近で表示\nされなくなります。";\r
+ this.list項目リスト.Add( this.iBassHidden );\r
+ this.iBassReverse = new CItemToggle( "Reverse", CDTXMania.ConfigIni.bReverse.Bass );\r
+ this.iBassReverse.str説明文 = "ベースチップが譜面の上から下に流\nれるようになります。";\r
+ this.list項目リスト.Add( this.iBassReverse );\r
+ this.iBassPosition = new CItemList( "Position", CItemBase.Eパネル種別.通常, (int) CDTXMania.ConfigIni.判定文字表示位置.Bass, new string[] { "P-A", "P-B", "OFF" } );\r
+ this.iBassPosition.str説明文 = "ベースの判定文字の表示位置を指定\nします。\n P-A: レーン上\n P-B: COMBO の下\n OFF: 表示しない";\r
+ this.list項目リスト.Add( this.iBassPosition );\r
+ this.iBassRandom = new CItemList( "Random", CItemBase.Eパネル種別.通常, (int) CDTXMania.ConfigIni.eRandom.Bass, new string[] { "OFF", "Part", "Super", "Hyper" } );\r
+ this.iBassRandom.str説明文 = "ベースのチップがランダムに降ってき\nます。\n Part: 小節・レーン単位で交換\n Super: チップ単位で交換\n Hyper: 全部完全に変更";\r
+ this.list項目リスト.Add( this.iBassRandom );\r
+ this.iBassLight = new CItemToggle( "Light", CDTXMania.ConfigIni.bLight.Bass );\r
+ this.iBassLight.str説明文 = "ベースチップのないところでピッキン\nグしても BAD になりません。";\r
+ this.list項目リスト.Add( this.iBassLight );\r
+ this.iBassLeft = new CItemToggle( "Left", CDTXMania.ConfigIni.bLeft.Bass );\r
+ this.iBassLeft.str説明文 = "ベースの RGB の並びが左右反転し\nます。(左利きモード)";\r
+ this.list項目リスト.Add( this.iBassLeft );\r
+ this.n現在の選択項目 = 0;\r
+ this.eメニュー種別 = Eメニュー種別.Bass;\r
+ }\r
+ public void t項目リストの設定・Common()\r
+ {\r
+ this.tConfigIniへ記録する();\r
+ this.list項目リスト.Clear();\r
+ this.iCommonReturnToMenu = new CItemBase( "<< ReturnTo Menu", CItemBase.Eパネル種別.その他 );\r
+ this.iCommonReturnToMenu.str説明文 = "左側のメニューに戻ります。";\r
+ this.list項目リスト.Add( this.iCommonReturnToMenu );\r
+ this.iCommonDark = new CItemList( "DARK", CItemBase.Eパネル種別.通常, (int) CDTXMania.ConfigIni.eDark, new string[] { "OFF", "HALF", "FULL" } );\r
+ this.iCommonDark.str説明文 = "HALF: 背景、レーン、ゲージが表示\nされなくなります。\nFULL: さらに小節線、拍線、判定ラ\nイン、パッドも表示されなくなります。";\r
+ this.list項目リスト.Add( this.iCommonDark );\r
+ this.iCommonPlaySpeed = new CItemInteger( "PlaySpeed", 5, 40, CDTXMania.ConfigIni.n演奏速度 );\r
+ this.iCommonPlaySpeed.str説明文 = "曲の演奏速度を、速くしたり遅くした\nりすることができます。\n(※一部のサウンドカードでは正しく\n 再生できない可能性があります。)";\r
+ this.list項目リスト.Add( this.iCommonPlaySpeed );\r
+ this.n現在の選択項目 = 0;\r
+ this.eメニュー種別 = Eメニュー種別.Common;\r
+ }\r
+ public void t項目リストの設定・Drums()\r
+ {\r
+ this.tConfigIniへ記録する();\r
+ this.list項目リスト.Clear();\r
+ this.iDrumsReturnToMenu = new CItemBase( "<< ReturnTo Menu", CItemBase.Eパネル種別.その他 );\r
+ this.iDrumsReturnToMenu.str説明文 = "左側のメニューに戻ります。";\r
+ this.list項目リスト.Add( this.iDrumsReturnToMenu );\r
+ this.iDrumsAutoPlayAll = new CItemThreeState( "AutoPlay (All)", CItemThreeState.E状態.不定 );\r
+ this.iDrumsAutoPlayAll.str説明文 = "全パッドの自動演奏の ON/OFF を\nまとめて切り替えます。";\r
+ this.list項目リスト.Add( this.iDrumsAutoPlayAll );\r
+ this.iDrumsLeftCymbal = new CItemToggle( " LeftCymbal", CDTXMania.ConfigIni.bAutoPlay.LC );\r
+ this.iDrumsLeftCymbal.str説明文 = "左シンバルを自動で演奏します。";\r
+ this.list項目リスト.Add( this.iDrumsLeftCymbal );\r
+ this.iDrumsHiHat = new CItemToggle( " HiHat", CDTXMania.ConfigIni.bAutoPlay.HH );\r
+ this.iDrumsHiHat.str説明文 = "ハイハットを自動で演奏します。\n(クローズ、オープンとも)";\r
+ this.list項目リスト.Add( this.iDrumsHiHat );\r
+ this.iDrumsSnare = new CItemToggle( " Snare", CDTXMania.ConfigIni.bAutoPlay.SD );\r
+ this.iDrumsSnare.str説明文 = "スネアを自動で演奏します。";\r
+ this.list項目リスト.Add( this.iDrumsSnare );\r
+ this.iDrumsBass = new CItemToggle( " BassDrum", CDTXMania.ConfigIni.bAutoPlay.BD );\r
+ this.iDrumsBass.str説明文 = "バスドラムを自動で演奏します。";\r
+ this.list項目リスト.Add( this.iDrumsBass );\r
+ this.iDrumsHighTom = new CItemToggle( " HighTom", CDTXMania.ConfigIni.bAutoPlay.HT );\r
+ this.iDrumsHighTom.str説明文 = "ハイタムを自動で演奏します。";\r
+ this.list項目リスト.Add( this.iDrumsHighTom );\r
+ this.iDrumsLowTom = new CItemToggle( " LowTom", CDTXMania.ConfigIni.bAutoPlay.LT );\r
+ this.iDrumsLowTom.str説明文 = "ロータムを自動で演奏します。";\r
+ this.list項目リスト.Add( this.iDrumsLowTom );\r
+ this.iDrumsFloorTom = new CItemToggle( " FloorTom", CDTXMania.ConfigIni.bAutoPlay.FT );\r
+ this.iDrumsFloorTom.str説明文 = "フロアタムを自動で演奏します。";\r
+ this.list項目リスト.Add( this.iDrumsFloorTom );\r
+ this.iDrumsCymbalRide = new CItemToggle( " Cym/Ride", CDTXMania.ConfigIni.bAutoPlay.CY );\r
+ this.iDrumsCymbalRide.str説明文 = "右シンバルとライドシンバルを自動で\n演奏します。";\r
+ this.list項目リスト.Add( this.iDrumsCymbalRide );\r
+ this.iDrumsScrollSpeed = new CItemInteger( "ScrollSpeed", 0, 0x7cf, CDTXMania.ConfigIni.n譜面スクロール速度.Drums );\r
+ this.iDrumsScrollSpeed.str説明文 = "演奏時のドラム譜面のスクロールの\n速度を指定します。\nx0.5 ~ x1000.0 を指定可能です。";\r
+ this.list項目リスト.Add( this.iDrumsScrollSpeed );\r
+ this.iDrumsComboPosition = new CItemList( "ComboPosition", CItemBase.Eパネル種別.通常, (int) CDTXMania.ConfigIni.ドラムコンボ文字の表示位置, new string[] { "Left", "Center", "Right", "OFF" } );\r
+ this.iDrumsComboPosition.str説明文 = "演奏時のドラムコンボ文字列の位置\nを指定します。";\r
+ this.list項目リスト.Add( this.iDrumsComboPosition );\r
+ this.iDrumsSudden = new CItemToggle( "Sudden", CDTXMania.ConfigIni.bSudden.Drums );\r
+ this.iDrumsSudden.str説明文 = "ドラムチップが譜面の下の方から表\n示されるようになります。";\r
+ this.list項目リスト.Add( this.iDrumsSudden );\r
+ this.iDrumsHidden = new CItemToggle( "Hidden", CDTXMania.ConfigIni.bHidden.Drums );\r
+ this.iDrumsHidden.str説明文 = "ドラムチップが譜面の下の方で表示\nされなくなります。";\r
+ this.list項目リスト.Add( this.iDrumsHidden );\r
+ this.iDrumsReverse = new CItemToggle( "Reverse", CDTXMania.ConfigIni.bReverse.Drums );\r
+ this.iDrumsReverse.str説明文 = "ドラムチップが譜面の下から上に流\nれるようになります。";\r
+ this.list項目リスト.Add( this.iDrumsReverse );\r
+ this.iDrumsPosition = new CItemList( "Position", CItemBase.Eパネル種別.通常, (int) CDTXMania.ConfigIni.判定文字表示位置.Drums, new string[] { "P-A", "P-B", "OFF" } );\r
+ this.iDrumsPosition.str説明文 = "ドラムの判定文字の表示位置を指定\nします。\n P-A: レーン上\n P-B: 判定ライン下\n OFF: 表示しない";\r
+ this.list項目リスト.Add( this.iDrumsPosition );\r
+ this.iDrumsTight = new CItemToggle( "Tight", CDTXMania.ConfigIni.bTight );\r
+ this.iDrumsTight.str説明文 = "ドラムチップのないところでパッドを\n叩くとミスになります。";\r
+ this.list項目リスト.Add( this.iDrumsTight );\r
+ this.n現在の選択項目 = 0;\r
+ this.eメニュー種別 = Eメニュー種別.Drums;\r
+ }\r
+ public void t項目リストの設定・Exit()\r
+ {\r
+ this.tConfigIniへ記録する();\r
+ this.eメニュー種別 = Eメニュー種別.Unknown;\r
+ }\r
+ public void t項目リストの設定・Guitar()\r
+ {\r
+ this.tConfigIniへ記録する();\r
+ this.list項目リスト.Clear();\r
+ this.iGuitarReturnToMenu = new CItemBase( "<< ReturnTo Menu", CItemBase.Eパネル種別.その他 );\r
+ this.iGuitarReturnToMenu.str説明文 = "左側のメニューに戻ります。";\r
+ this.list項目リスト.Add( this.iGuitarReturnToMenu );\r
+ this.iGuitarAutoPlay = new CItemToggle( "AutoPlay", CDTXMania.ConfigIni.bAutoPlay.Guitar );\r
+ this.iGuitarAutoPlay.str説明文 = "ギターパートを自動で演奏します。";\r
+ this.list項目リスト.Add( this.iGuitarAutoPlay );\r
+ this.iGuitarScrollSpeed = new CItemInteger( "ScrollSpeed", 0, 0x7cf, CDTXMania.ConfigIni.n譜面スクロール速度.Guitar );\r
+ this.iGuitarScrollSpeed.str説明文 = "演奏時のギター譜面のスクロールの\n速度を指定します。\nx0.5 ~ x1000.0 までを指定可能です。";\r
+ this.list項目リスト.Add( this.iGuitarScrollSpeed );\r
+ this.iGuitarSudden = new CItemToggle( "Sudden", CDTXMania.ConfigIni.bSudden.Guitar );\r
+ this.iGuitarSudden.str説明文 = "ギターチップがヒットバー付近にくる\nまで表示されなくなります。";\r
+ this.list項目リスト.Add( this.iGuitarSudden );\r
+ this.iGuitarHidden = new CItemToggle( "Hidden", CDTXMania.ConfigIni.bHidden.Guitar );\r
+ this.iGuitarHidden.str説明文 = "ギターチップがヒットバー付近で表示\nされなくなります。";\r
+ this.list項目リスト.Add( this.iGuitarHidden );\r
+ this.iGuitarReverse = new CItemToggle( "Reverse", CDTXMania.ConfigIni.bReverse.Guitar );\r
+ this.iGuitarReverse.str説明文 = "ギターチップが譜面の上から下に流\nれるようになります。";\r
+ this.list項目リスト.Add( this.iGuitarReverse );\r
+ this.iGuitarPosition = new CItemList( "Position", CItemBase.Eパネル種別.通常, (int) CDTXMania.ConfigIni.判定文字表示位置.Guitar, new string[] { "P-A", "P-B", "OFF" } );\r
+ this.iGuitarPosition.str説明文 = "ギターの判定文字の表示位置を指定\nします。\n P-A: レーン上\n P-B: COMBO の下\n OFF: 表示しない";\r
+ this.list項目リスト.Add( this.iGuitarPosition );\r
+ this.iGuitarRandom = new CItemList( "Random", CItemBase.Eパネル種別.通常, (int) CDTXMania.ConfigIni.eRandom.Guitar, new string[] { "OFF", "Part", "Super", "Hyper" } );\r
+ this.iGuitarRandom.str説明文 = "ギターのチップがランダムに降ってき\nます。\n Part: 小節・レーン単位で交換\n Super: チップ単位で交換\n Hyper: 全部完全に変更";\r
+ this.list項目リスト.Add( this.iGuitarRandom );\r
+ this.iGuitarLight = new CItemToggle( "Light", CDTXMania.ConfigIni.bLight.Guitar );\r
+ this.iGuitarLight.str説明文 = "ギターチップのないところでピッキン\nグしても BAD になりません。";\r
+ this.list項目リスト.Add( this.iGuitarLight );\r
+ this.iGuitarLeft = new CItemToggle( "Left", CDTXMania.ConfigIni.bLeft.Guitar );\r
+ this.iGuitarLeft.str説明文 = "ギターの RGB の並びが左右反転し\nます。(左利きモード)";\r
+ this.list項目リスト.Add( this.iGuitarLeft );\r
+ this.n現在の選択項目 = 0;\r
+ this.eメニュー種別 = Eメニュー種別.Guitar;\r
+ }\r
+ public void tEnter押下()\r
+ {\r
+ if( this.b要素値にフォーカス中 )\r
+ {\r
+ this.b要素値にフォーカス中 = false;\r
+ }\r
+ else if( this.list項目リスト[ this.n現在の選択項目 ].e種別 == CItemBase.E種別.整数 )\r
+ {\r
+ this.b要素値にフォーカス中 = true;\r
+ }\r
+ else if( this.b現在選択されている項目はReturnToMenuである )\r
+ {\r
+ this.tConfigIniへ記録する();\r
+ }\r
+ else\r
+ {\r
+ this.list項目リスト[ this.n現在の選択項目 ].tEnter押下();\r
+ if( this.list項目リスト[ this.n現在の選択項目 ] == this.iDrumsAutoPlayAll )\r
+ {\r
+ this.t全部のドラムパッドのAutoを切り替える( this.iDrumsAutoPlayAll.e現在の状態 == CItemThreeState.E状態.ON );\r
+ }\r
+ }\r
+ }\r
+ public void t次に移動()\r
+ {\r
+ if( this.b要素値にフォーカス中 )\r
+ {\r
+ this.list項目リスト[ this.n現在の選択項目 ].t項目値を前へ移動();\r
+ }\r
+ else\r
+ {\r
+ this.n目標のスクロールカウンタ += 100;\r
+ }\r
+ }\r
+ public void t前に移動()\r
+ {\r
+ if( this.b要素値にフォーカス中 )\r
+ {\r
+ this.list項目リスト[ this.n現在の選択項目 ].t項目値を次へ移動();\r
+ }\r
+ else\r
+ {\r
+ this.n目標のスクロールカウンタ -= 100;\r
+ }\r
+ }\r
+\r
+ \r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ this.list項目リスト = new List<CItemBase>();\r
+ this.eメニュー種別 = Eメニュー種別.Unknown;\r
+ this.t項目リストの設定・Common();\r
+ this.b要素値にフォーカス中 = false;\r
+ this.n目標のスクロールカウンタ = 0;\r
+ this.n現在のスクロールカウンタ = 0;\r
+ this.nスクロール用タイマ値 = -1;\r
+ this.ct三角矢印アニメ = new CCounter();\r
+ base.On活性化();\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ this.tConfigIniへ記録する();\r
+ this.list項目リスト.Clear();\r
+ this.ct三角矢印アニメ = null;\r
+ base.On非活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.tx通常項目行パネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenOption itembox.png" ), false );\r
+ this.txその他項目行パネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenOption itembox other.png" ), false );\r
+ this.tx三角矢印 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenOption triangle arrow.png" ), false );\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.tx通常項目行パネル );\r
+ CDTXMania.tテクスチャの解放( ref this.txその他項目行パネル );\r
+ CDTXMania.tテクスチャの解放( ref this.tx三角矢印 );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ throw new InvalidOperationException( "t進行描画(bool)のほうを使用してください。" );\r
+ }\r
+ public int t進行描画( bool b項目リスト側にフォーカスがある )\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ if( base.b初めての進行描画 )\r
+ {\r
+ this.nスクロール用タイマ値 = CDTXMania.Timer.n現在時刻;\r
+ this.ct三角矢印アニメ.t開始( 0, 9, 50, CDTXMania.Timer );\r
+ base.b初めての進行描画 = false;\r
+ }\r
+ this.b項目リスト側にフォーカスがある = b項目リスト側にフォーカスがある;\r
+ long num = CDTXMania.Timer.n現在時刻;\r
+ if( num < this.nスクロール用タイマ値 )\r
+ {\r
+ this.nスクロール用タイマ値 = num;\r
+ }\r
+ while( ( num - this.nスクロール用タイマ値 ) >= 2 )\r
+ {\r
+ int num2 = Math.Abs( (int) ( this.n目標のスクロールカウンタ - this.n現在のスクロールカウンタ ) );\r
+ int num3 = 0;\r
+ if( num2 <= 100 )\r
+ {\r
+ num3 = 2;\r
+ }\r
+ else if( num2 <= 300 )\r
+ {\r
+ num3 = 3;\r
+ }\r
+ else if( num2 <= 500 )\r
+ {\r
+ num3 = 4;\r
+ }\r
+ else\r
+ {\r
+ num3 = 8;\r
+ }\r
+ if( this.n現在のスクロールカウンタ < this.n目標のスクロールカウンタ )\r
+ {\r
+ this.n現在のスクロールカウンタ += num3;\r
+ if( this.n現在のスクロールカウンタ > this.n目標のスクロールカウンタ )\r
+ {\r
+ this.n現在のスクロールカウンタ = this.n目標のスクロールカウンタ;\r
+ }\r
+ }\r
+ else if( this.n現在のスクロールカウンタ > this.n目標のスクロールカウンタ )\r
+ {\r
+ this.n現在のスクロールカウンタ -= num3;\r
+ if( this.n現在のスクロールカウンタ < this.n目標のスクロールカウンタ )\r
+ {\r
+ this.n現在のスクロールカウンタ = this.n目標のスクロールカウンタ;\r
+ }\r
+ }\r
+ if( this.n現在のスクロールカウンタ >= 100 )\r
+ {\r
+ this.n現在の選択項目 = this.t次の項目( this.n現在の選択項目 );\r
+ this.n現在のスクロールカウンタ -= 100;\r
+ this.n目標のスクロールカウンタ -= 100;\r
+ if( this.n目標のスクロールカウンタ == 0 )\r
+ {\r
+ CDTXMania.stageオプション.t項目変更通知();\r
+ }\r
+ }\r
+ else if( this.n現在のスクロールカウンタ <= -100 )\r
+ {\r
+ this.n現在の選択項目 = this.t前の項目( this.n現在の選択項目 );\r
+ this.n現在のスクロールカウンタ += 100;\r
+ this.n目標のスクロールカウンタ += 100;\r
+ if( this.n目標のスクロールカウンタ == 0 )\r
+ {\r
+ CDTXMania.stageオプション.t項目変更通知();\r
+ }\r
+ }\r
+ this.nスクロール用タイマ値 += 2;\r
+ }\r
+ if( this.b項目リスト側にフォーカスがある && ( this.n目標のスクロールカウンタ == 0 ) )\r
+ {\r
+ this.ct三角矢印アニメ.t進行Loop();\r
+ }\r
+ this.ptパネルの基本座標[ 4 ].X = this.b項目リスト側にフォーカスがある ? 0x114 : 0x12d;\r
+ int nItem = this.n現在の選択項目;\r
+ for( int i = 0; i < 4; i++ )\r
+ {\r
+ nItem = this.t前の項目( nItem );\r
+ }\r
+ for( int j = -4; j < 6; j++ )\r
+ {\r
+ if( ( ( j == -4 ) && ( this.n現在のスクロールカウンタ > 0 ) ) || ( ( j == 5 ) && ( this.n現在のスクロールカウンタ < 0 ) ) )\r
+ {\r
+ nItem = this.t次の項目( nItem );\r
+ continue;\r
+ }\r
+ int index = j + 4;\r
+ int num8 = ( this.n現在のスクロールカウンタ <= 0 ) ? ( ( ( j + 4 ) + 1 ) % 10 ) : ( ( ( ( j + 4 ) - 1 ) + 10 ) % 10 );\r
+ int x = this.ptパネルの基本座標[ index ].X + ( (int) ( ( this.ptパネルの基本座標[ num8 ].X - this.ptパネルの基本座標[ index ].X ) * ( ( (double) Math.Abs( this.n現在のスクロールカウンタ ) ) / 100.0 ) ) );\r
+ int y = this.ptパネルの基本座標[ index ].Y + ( (int) ( ( this.ptパネルの基本座標[ num8 ].Y - this.ptパネルの基本座標[ index ].Y ) * ( ( (double) Math.Abs( this.n現在のスクロールカウンタ ) ) / 100.0 ) ) );\r
+ switch( this.list項目リスト[ nItem ].eパネル種別 )\r
+ {\r
+ case CItemBase.Eパネル種別.通常:\r
+ if( this.tx通常項目行パネル != null )\r
+ {\r
+ this.tx通常項目行パネル.t2D描画( CDTXMania.app.Device, x, y );\r
+ }\r
+ break;\r
+\r
+ case CItemBase.Eパネル種別.その他:\r
+ if( this.txその他項目行パネル != null )\r
+ {\r
+ this.txその他項目行パネル.t2D描画( CDTXMania.app.Device, x, y );\r
+ }\r
+ break;\r
+ }\r
+ CDTXMania.stageオプション.actFont.t文字列描画( x + 0x12, y + 12, this.list項目リスト[ nItem ].str項目名 );\r
+ switch( this.list項目リスト[ nItem ].e種別 )\r
+ {\r
+ case CItemBase.E種別.ONorOFFトグル:\r
+ CDTXMania.stageオプション.actFont.t文字列描画( x + 210, y + 12, ( (CItemToggle) this.list項目リスト[ nItem ] ).bON ? "ON" : "OFF" );\r
+ break;\r
+\r
+ case CItemBase.E種別.ONorOFFor不定スリーステート:\r
+ switch( ( (CItemThreeState) this.list項目リスト[ nItem ] ).e現在の状態 )\r
+ {\r
+ case CItemThreeState.E状態.ON:\r
+ CDTXMania.stageオプション.actFont.t文字列描画( x + 210, y + 12, "ON" );\r
+ break;\r
+\r
+ case CItemThreeState.E状態.不定:\r
+ CDTXMania.stageオプション.actFont.t文字列描画( x + 210, y + 12, "- -" );\r
+ break;\r
+\r
+ default:\r
+ CDTXMania.stageオプション.actFont.t文字列描画( x + 210, y + 12, "OFF" );\r
+ break;\r
+ }\r
+ break;\r
+\r
+ case CItemBase.E種別.整数:\r
+ {\r
+ if( this.list項目リスト[ nItem ] != this.iCommonPlaySpeed )\r
+ {\r
+ if( ( ( this.list項目リスト[ nItem ] == this.iDrumsScrollSpeed ) || ( this.list項目リスト[ nItem ] == this.iGuitarScrollSpeed ) ) || ( this.list項目リスト[ nItem ] == this.iBassScrollSpeed ) )\r
+ {\r
+ float num15 = ( ( (CItemInteger) this.list項目リスト[ nItem ] ).n現在の値 + 1 ) * 0.5f;\r
+ CDTXMania.stageオプション.actFont.t文字列描画( x + 210, y + 12, num15.ToString( "x0.0" ), ( j == 0 ) && this.b要素値にフォーカス中 );\r
+ }\r
+ else\r
+ {\r
+ CDTXMania.stageオプション.actFont.t文字列描画( x + 210, y + 12, ( (CItemInteger) this.list項目リスト[ nItem ] ).n現在の値.ToString(), ( j == 0 ) && this.b要素値にフォーカス中 );\r
+ }\r
+ break;\r
+ }\r
+ double num14 = ( (double) ( (CItemInteger) this.list項目リスト[ nItem ] ).n現在の値 ) / 20.0;\r
+ CDTXMania.stageオプション.actFont.t文字列描画( x + 210, y + 12, num14.ToString( "0.000" ), ( j == 0 ) && this.b要素値にフォーカス中 );\r
+ break;\r
+ }\r
+ case CItemBase.E種別.リスト:\r
+ {\r
+ CItemList list = (CItemList) this.list項目リスト[ nItem ];\r
+ CDTXMania.stageオプション.actFont.t文字列描画( x + 210, y + 12, list.list項目値[ list.n現在選択されている項目番号 ] );\r
+ break;\r
+ }\r
+ }\r
+ nItem = this.t次の項目( nItem );\r
+ }\r
+ if( this.b項目リスト側にフォーカスがある && ( this.n目標のスクロールカウンタ == 0 ) )\r
+ {\r
+ int num11;\r
+ int num12;\r
+ int num13;\r
+ if( !this.b要素値にフォーカス中 )\r
+ {\r
+ num11 = 0x114;\r
+ num12 = 0xba - this.ct三角矢印アニメ.n現在の値;\r
+ num13 = 0xfe + this.ct三角矢印アニメ.n現在の値;\r
+ }\r
+ else\r
+ {\r
+ num11 = 0x210;\r
+ num12 = 0xc6 - this.ct三角矢印アニメ.n現在の値;\r
+ num13 = 0xf2 + this.ct三角矢印アニメ.n現在の値;\r
+ }\r
+ if( this.tx三角矢印 != null )\r
+ {\r
+ this.tx三角矢印.t2D描画( CDTXMania.app.Device, num11, num12, new Rectangle( 0, 0, 0x20, 0x10 ) );\r
+ this.tx三角矢印.t2D描画( CDTXMania.app.Device, num11, num13, new Rectangle( 0, 0x10, 0x20, 0x10 ) );\r
+ }\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private enum Eメニュー種別\r
+ {\r
+ Common,\r
+ Drums,\r
+ Guitar,\r
+ Bass,\r
+ Unknown\r
+ }\r
+\r
+ private bool b項目リスト側にフォーカスがある;\r
+ private bool b要素値にフォーカス中;\r
+ private CCounter ct三角矢印アニメ;\r
+ private Eメニュー種別 eメニュー種別;\r
+ private CItemToggle iBassAutoPlay;\r
+ private CItemToggle iBassHidden;\r
+ private CItemToggle iBassLeft;\r
+ private CItemToggle iBassLight;\r
+ private CItemList iBassPosition;\r
+ private CItemList iBassRandom;\r
+ private CItemBase iBassReturnToMenu;\r
+ private CItemToggle iBassReverse;\r
+ private CItemInteger iBassScrollSpeed;\r
+ private CItemToggle iBassSudden;\r
+ private CItemList iCommonDark;\r
+ private CItemInteger iCommonPlaySpeed;\r
+ private CItemBase iCommonReturnToMenu;\r
+ private CItemThreeState iDrumsAutoPlayAll;\r
+ private CItemToggle iDrumsBass;\r
+ private CItemList iDrumsComboPosition;\r
+ private CItemToggle iDrumsCymbalRide;\r
+ private CItemToggle iDrumsFloorTom;\r
+ private CItemToggle iDrumsHidden;\r
+ private CItemToggle iDrumsHighTom;\r
+ private CItemToggle iDrumsHiHat;\r
+ private CItemToggle iDrumsLeftCymbal;\r
+ private CItemToggle iDrumsLowTom;\r
+ private CItemList iDrumsPosition;\r
+ private CItemBase iDrumsReturnToMenu;\r
+ private CItemToggle iDrumsReverse;\r
+ private CItemInteger iDrumsScrollSpeed;\r
+ private CItemToggle iDrumsSnare;\r
+ private CItemToggle iDrumsSudden;\r
+ private CItemToggle iDrumsTight;\r
+ private CItemToggle iGuitarAutoPlay;\r
+ private CItemToggle iGuitarHidden;\r
+ private CItemToggle iGuitarLeft;\r
+ private CItemToggle iGuitarLight;\r
+ private CItemList iGuitarPosition;\r
+ private CItemList iGuitarRandom;\r
+ private CItemBase iGuitarReturnToMenu;\r
+ private CItemToggle iGuitarReverse;\r
+ private CItemInteger iGuitarScrollSpeed;\r
+ private CItemToggle iGuitarSudden;\r
+ private List<CItemBase> list項目リスト;\r
+ private long nスクロール用タイマ値;\r
+ private int n現在のスクロールカウンタ;\r
+ private int n目標のスクロールカウンタ;\r
+ private Point[] ptパネルの基本座標 = new Point[] { new Point( 0x12d, 3 ), new Point( 0x12d, 0x35 ), new Point( 0x12d, 0x67 ), new Point( 0x12d, 0x99 ), new Point( 0x114, 0xcb ), new Point( 0x12d, 0xfd ), new Point( 0x12d, 0x12f ), new Point( 0x12d, 0x161 ), new Point( 0x12d, 0x193 ), new Point( 0x12d, 0x1c5 ) };\r
+ private CTexture txその他項目行パネル;\r
+ private CTexture tx三角矢印;\r
+ private CTexture tx通常項目行パネル;\r
+\r
+ private int t前の項目( int nItem )\r
+ {\r
+ if( --nItem < 0 )\r
+ {\r
+ nItem = this.list項目リスト.Count - 1;\r
+ }\r
+ return nItem;\r
+ }\r
+ private int t次の項目( int nItem )\r
+ {\r
+ if( ++nItem >= this.list項目リスト.Count )\r
+ {\r
+ nItem = 0;\r
+ }\r
+ return nItem;\r
+ }\r
+ private void t全部のドラムパッドのAutoを切り替える( bool bAutoON )\r
+ {\r
+ this.iDrumsLeftCymbal.bON = this.iDrumsHiHat.bON = this.iDrumsSnare.bON = this.iDrumsBass.bON = this.iDrumsHighTom.bON = this.iDrumsLowTom.bON = this.iDrumsFloorTom.bON = this.iDrumsCymbalRide.bON = bAutoON;\r
+ }\r
+ private void tConfigIniへ記録する()\r
+ {\r
+ switch( this.eメニュー種別 )\r
+ {\r
+ case Eメニュー種別.Common:\r
+ this.tConfigIniへ記録する・Common();\r
+ return;\r
+\r
+ case Eメニュー種別.Drums:\r
+ this.tConfigIniへ記録する・Drums();\r
+ return;\r
+\r
+ case Eメニュー種別.Guitar:\r
+ this.tConfigIniへ記録する・Guitar();\r
+ return;\r
+\r
+ case Eメニュー種別.Bass:\r
+ this.tConfigIniへ記録する・Bass();\r
+ return;\r
+ }\r
+ }\r
+ private void tConfigIniへ記録する・Bass()\r
+ {\r
+ CDTXMania.ConfigIni.bAutoPlay.Bass = this.iBassAutoPlay.bON;\r
+ CDTXMania.ConfigIni.n譜面スクロール速度.Bass = this.iBassScrollSpeed.n現在の値;\r
+ CDTXMania.ConfigIni.bSudden.Bass = this.iBassSudden.bON;\r
+ CDTXMania.ConfigIni.bHidden.Bass = this.iBassHidden.bON;\r
+ CDTXMania.ConfigIni.bReverse.Bass = this.iBassReverse.bON;\r
+ CDTXMania.ConfigIni.判定文字表示位置.Bass = (E判定文字表示位置) this.iBassPosition.n現在選択されている項目番号;\r
+ CDTXMania.ConfigIni.eRandom.Bass = (Eランダムモード) this.iBassRandom.n現在選択されている項目番号;\r
+ CDTXMania.ConfigIni.bLight.Bass = this.iBassLight.bON;\r
+ CDTXMania.ConfigIni.bLeft.Bass = this.iBassLeft.bON;\r
+ }\r
+ private void tConfigIniへ記録する・Common()\r
+ {\r
+ CDTXMania.ConfigIni.eDark = (Eダークモード) this.iCommonDark.n現在選択されている項目番号;\r
+ CDTXMania.ConfigIni.n演奏速度 = this.iCommonPlaySpeed.n現在の値;\r
+ }\r
+ private void tConfigIniへ記録する・Drums()\r
+ {\r
+ CDTXMania.ConfigIni.bAutoPlay.LC = this.iDrumsLeftCymbal.bON;\r
+ CDTXMania.ConfigIni.bAutoPlay.HH = this.iDrumsHiHat.bON;\r
+ CDTXMania.ConfigIni.bAutoPlay.SD = this.iDrumsSnare.bON;\r
+ CDTXMania.ConfigIni.bAutoPlay.BD = this.iDrumsBass.bON;\r
+ CDTXMania.ConfigIni.bAutoPlay.HT = this.iDrumsHighTom.bON;\r
+ CDTXMania.ConfigIni.bAutoPlay.LT = this.iDrumsLowTom.bON;\r
+ CDTXMania.ConfigIni.bAutoPlay.FT = this.iDrumsFloorTom.bON;\r
+ CDTXMania.ConfigIni.bAutoPlay.CY = this.iDrumsCymbalRide.bON;\r
+ CDTXMania.ConfigIni.n譜面スクロール速度.Drums = this.iDrumsScrollSpeed.n現在の値;\r
+ CDTXMania.ConfigIni.ドラムコンボ文字の表示位置 = (Eドラムコンボ文字の表示位置) this.iDrumsComboPosition.n現在選択されている項目番号;\r
+ CDTXMania.ConfigIni.bSudden.Drums = this.iDrumsSudden.bON;\r
+ CDTXMania.ConfigIni.bHidden.Drums = this.iDrumsHidden.bON;\r
+ CDTXMania.ConfigIni.bReverse.Drums = this.iDrumsReverse.bON;\r
+ CDTXMania.ConfigIni.判定文字表示位置.Drums = (E判定文字表示位置) this.iDrumsPosition.n現在選択されている項目番号;\r
+ CDTXMania.ConfigIni.bTight = this.iDrumsTight.bON;\r
+ }\r
+ private void tConfigIniへ記録する・Guitar()\r
+ {\r
+ CDTXMania.ConfigIni.bAutoPlay.Guitar = this.iGuitarAutoPlay.bON;\r
+ CDTXMania.ConfigIni.n譜面スクロール速度.Guitar = this.iGuitarScrollSpeed.n現在の値;\r
+ CDTXMania.ConfigIni.bSudden.Guitar = this.iGuitarSudden.bON;\r
+ CDTXMania.ConfigIni.bHidden.Guitar = this.iGuitarHidden.bON;\r
+ CDTXMania.ConfigIni.bReverse.Guitar = this.iGuitarReverse.bON;\r
+ CDTXMania.ConfigIni.判定文字表示位置.Guitar = (E判定文字表示位置) this.iGuitarPosition.n現在選択されている項目番号;\r
+ CDTXMania.ConfigIni.eRandom.Guitar = (Eランダムモード) this.iGuitarRandom.n現在選択されている項目番号;\r
+ CDTXMania.ConfigIni.bLight.Guitar = this.iGuitarLight.bON;\r
+ CDTXMania.ConfigIni.bLeft.Guitar = this.iGuitarLeft.bON;\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using System.Drawing;\r
+using System.Diagnostics;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CStageオプション : CStage\r
+ {\r
+ // プロパティ\r
+\r
+ public CActDFPFont actFont { get; private set; }\r
+\r
+\r
+ // メソッド\r
+\r
+ public CStageオプション()\r
+ {\r
+ CActDFPFont font;\r
+ base.eステージID = CStage.Eステージ.オプション;\r
+ base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
+ base.b活性化してない = true;\r
+ this.actFont = font = new CActDFPFont();\r
+ base.list子Activities.Add( font );\r
+ base.list子Activities.Add( this.actFIFO = new CActFIFOWhite() );\r
+ base.list子Activities.Add( this.actList = new CActOptionList() );\r
+ base.list子Activities.Add( this.actオプションパネル = new CActオプションパネル() );\r
+ }\r
+ public void t項目変更通知()\r
+ {\r
+ this.t説明文パネルに現在選択されている項目の説明を描画する();\r
+ }\r
+\r
+ \r
+ // CStage 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ Trace.TraceInformation( "オプションステージを活性化します。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ this.n現在のメニュー番号 = 0;\r
+ this.ftフォント = new Font( "MS PGothic", 26f, GraphicsUnit.Pixel );\r
+ for( int i = 0; i < 4; i++ )\r
+ {\r
+ this.ctキー反復用[ i ] = new CCounter( 0, 0, 0, CDTXMania.Timer );\r
+ }\r
+ this.bメニューにフォーカス中 = true;\r
+ }\r
+ finally\r
+ {\r
+ Trace.TraceInformation( "オプションステージの活性化を完了しました。" );\r
+ Trace.Unindent();\r
+ }\r
+ base.On活性化();\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ Trace.TraceInformation( "オプションステージを非活性化します。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ if( this.ftフォント != null )\r
+ {\r
+ this.ftフォント.Dispose();\r
+ this.ftフォント = null;\r
+ }\r
+ for( int i = 0; i < 4; i++ )\r
+ {\r
+ this.ctキー反復用[ i ] = null;\r
+ }\r
+ }\r
+ finally\r
+ {\r
+ Trace.TraceInformation( "オプションステージの非活性化を完了しました。" );\r
+ Trace.Unindent();\r
+ }\r
+ base.On非活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.tx背景 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenOption background.jpg" ), false );\r
+ this.tx上部パネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenOption header panel.png" ), true );\r
+ this.tx下部パネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenOption footer panel.png" ), true );\r
+ this.txMenuカーソル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenOption menu cursor.png" ), false );\r
+ if( this.bメニューにフォーカス中 )\r
+ {\r
+ this.t説明文パネルに現在選択されているメニューの説明を描画する();\r
+ }\r
+ else\r
+ {\r
+ this.t説明文パネルに現在選択されている項目の説明を描画する();\r
+ }\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.ConfigIni.t書き出し( CDTXMania.strEXEのあるフォルダ + "Config.ini" );\r
+ CDTXMania.tテクスチャの解放( ref this.tx背景 );\r
+ CDTXMania.tテクスチャの解放( ref this.tx上部パネル );\r
+ CDTXMania.tテクスチャの解放( ref this.tx下部パネル );\r
+ CDTXMania.tテクスチャの解放( ref this.txMenuカーソル );\r
+ CDTXMania.tテクスチャの解放( ref this.tx説明文パネル );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ #region [ 初めての進行描画 ]\r
+ //---------------------\r
+ if( base.b初めての進行描画 )\r
+ {\r
+ base.eフェーズID = CStage.Eフェーズ.共通_フェードイン;\r
+ this.actFIFO.tフェードイン開始();\r
+ base.b初めての進行描画 = false;\r
+ }\r
+ //---------------------\r
+ #endregion\r
+\r
+ // キー入力\r
+\r
+ if( base.eフェーズID == CStage.Eフェーズ.共通_通常状態 // 通常状態、かつ\r
+ && CDTXMania.act現在入力を占有中のプラグイン == null ) // プラグインの入力占有がない\r
+ {\r
+ if( ( CDTXMania.Input管理.Keyboard.bキーが押された( 0x35 ) || CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.FT ) ) || CDTXMania.Pad.b押されたGB( Eパッド.FT ) )\r
+ {\r
+ CDTXMania.Skin.sound取消音.t再生する();\r
+ if( this.bメニューにフォーカス中 )\r
+ {\r
+ this.actFIFO.tフェードアウト開始();\r
+ base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
+ }\r
+ else\r
+ {\r
+ this.bメニューにフォーカス中 = true;\r
+ this.t説明文パネルに現在選択されているメニューの説明を描画する();\r
+ }\r
+ }\r
+ else if( ( CDTXMania.Pad.b押されたDGB( Eパッド.CY ) || CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.RD ) ) || ( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.LC ) || ( CDTXMania.ConfigIni.bEnterがキー割り当てのどこにも使用されていない && CDTXMania.Input管理.Keyboard.bキーが押された( 0x75 ) ) ) )\r
+ {\r
+ CDTXMania.Skin.sound決定音.t再生する();\r
+ if( this.n現在のメニュー番号 == 4 )\r
+ {\r
+ this.actFIFO.tフェードアウト開始();\r
+ base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
+ }\r
+ else if( this.bメニューにフォーカス中 )\r
+ {\r
+ this.bメニューにフォーカス中 = false;\r
+ this.t説明文パネルに現在選択されている項目の説明を描画する();\r
+ }\r
+ else\r
+ {\r
+ this.actList.tEnter押下();\r
+ if( this.actList.b現在選択されている項目はReturnToMenuである )\r
+ {\r
+ this.bメニューにフォーカス中 = true;\r
+ this.t説明文パネルに現在選択されているメニューの説明を描画する();\r
+ }\r
+ }\r
+ }\r
+ this.ctキー反復用.Up.tキー反復( CDTXMania.Input管理.Keyboard.bキーが押されている( 0x84 ), new CCounter.DGキー処理( this.tカーソルを上へ移動する ) );\r
+ this.ctキー反復用.R.tキー反復( CDTXMania.Pad.b押されているGB( Eパッド.HH ), new CCounter.DGキー処理( this.tカーソルを上へ移動する ) );\r
+ if( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.SD ) )\r
+ {\r
+ this.tカーソルを上へ移動する();\r
+ }\r
+ this.ctキー反復用.Down.tキー反復( CDTXMania.Input管理.Keyboard.bキーが押されている( 50 ), new CCounter.DGキー処理( this.tカーソルを下へ移動する ) );\r
+ this.ctキー反復用.B.tキー反復( CDTXMania.Pad.b押されているGB( Eパッド.BD ), new CCounter.DGキー処理( this.tカーソルを下へ移動する ) );\r
+ if( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.LT ) )\r
+ {\r
+ this.tカーソルを下へ移動する();\r
+ }\r
+ }\r
+\r
+ // 描画\r
+\r
+ if( this.tx背景 != null )\r
+ this.tx背景.t2D描画( CDTXMania.app.Device, 0, 0 );\r
+\r
+ if( this.txMenuカーソル != null )\r
+ {\r
+ Rectangle rectangle;\r
+ this.txMenuカーソル.n透明度 = this.bメニューにフォーカス中 ? 0xff : 0x80;\r
+ int x = 0x4b;\r
+ int y = 0x61 + ( this.n現在のメニュー番号 * 0x19 );\r
+ int num3 = 130;\r
+ this.txMenuカーソル.t2D描画( CDTXMania.app.Device, x, y, new Rectangle( 0, 0, 0x10, 0x20 ) );\r
+ this.txMenuカーソル.t2D描画( CDTXMania.app.Device, ( x + num3 ) - 0x10, y, new Rectangle( 10, 0, 0x10, 0x20 ) );\r
+ x += 0x10;\r
+ for( num3 -= 0x20; num3 > 0; num3 -= rectangle.Width )\r
+ {\r
+ rectangle = new Rectangle( 8, 0, 0x10, 0x20 );\r
+ if( num3 < 0x10 )\r
+ {\r
+ rectangle.Width -= 0x10 - num3;\r
+ }\r
+ this.txMenuカーソル.t2D描画( CDTXMania.app.Device, x, y, rectangle );\r
+ x += rectangle.Width;\r
+ }\r
+ }\r
+ string str = "Common";\r
+ int num4 = this.actFont.n文字列長dot( str );\r
+ bool flag = this.n現在のメニュー番号 == 0;\r
+ this.actFont.t文字列描画( 0x8a - ( num4 / 2 ), 100, str, flag );\r
+ str = "Drums";\r
+ num4 = this.actFont.n文字列長dot( str );\r
+ flag = this.n現在のメニュー番号 == 1;\r
+ this.actFont.t文字列描画( 0x8a - ( num4 / 2 ), 0x7d, str, flag );\r
+ str = "Guitar";\r
+ num4 = this.actFont.n文字列長dot( str );\r
+ flag = this.n現在のメニュー番号 == 2;\r
+ this.actFont.t文字列描画( 0x8a - ( num4 / 2 ), 150, str, flag );\r
+ str = "Bass";\r
+ num4 = this.actFont.n文字列長dot( str );\r
+ flag = this.n現在のメニュー番号 == 3;\r
+ this.actFont.t文字列描画( 0x8a - ( num4 / 2 ), 0xaf, str, flag );\r
+ str = "Exit";\r
+ num4 = this.actFont.n文字列長dot( str );\r
+ flag = this.n現在のメニュー番号 == 4;\r
+ this.actFont.t文字列描画( 0x8a - ( num4 / 2 ), 200, str, flag );\r
+ if( this.tx説明文パネル != null )\r
+ {\r
+ this.tx説明文パネル.t2D描画( CDTXMania.app.Device, 0x1d, 0xf8 );\r
+ }\r
+ this.actList.t進行描画( !this.bメニューにフォーカス中 );\r
+ if( this.tx上部パネル != null )\r
+ {\r
+ this.tx上部パネル.t2D描画( CDTXMania.app.Device, 0, 0 );\r
+ }\r
+ if( this.tx下部パネル != null )\r
+ {\r
+ this.tx下部パネル.t2D描画( CDTXMania.app.Device, 0, 480 - this.tx下部パネル.szテクスチャサイズ.Height );\r
+ }\r
+ this.actオプションパネル.On進行描画();\r
+ switch( base.eフェーズID )\r
+ {\r
+ case CStage.Eフェーズ.共通_フェードイン:\r
+ if( this.actFIFO.On進行描画() != 0 )\r
+ {\r
+ CDTXMania.Skin.bgmオプション画面.t再生する();\r
+ base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
+ }\r
+ break;\r
+\r
+ case CStage.Eフェーズ.共通_フェードアウト:\r
+ if( this.actFIFO.On進行描画() == 0 )\r
+ {\r
+ break;\r
+ }\r
+ return 1;\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ private struct STキー反復用カウンタ\r
+ {\r
+ public CCounter Up;\r
+ public CCounter Down;\r
+ public CCounter R;\r
+ public CCounter B;\r
+ public CCounter this[ int index ]\r
+ {\r
+ get\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ return this.Up;\r
+\r
+ case 1:\r
+ return this.Down;\r
+\r
+ case 2:\r
+ return this.R;\r
+\r
+ case 3:\r
+ return this.B;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ set\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ this.Up = value;\r
+ return;\r
+\r
+ case 1:\r
+ this.Down = value;\r
+ return;\r
+\r
+ case 2:\r
+ this.R = value;\r
+ return;\r
+\r
+ case 3:\r
+ this.B = value;\r
+ return;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ }\r
+ }\r
+\r
+ private CActFIFOWhite actFIFO;\r
+ private CActOptionList actList;\r
+ private CActオプションパネル actオプションパネル;\r
+ private bool bメニューにフォーカス中;\r
+ private STキー反復用カウンタ ctキー反復用;\r
+ private const int DESC_H = 0x80;\r
+ private const int DESC_W = 220;\r
+ private Font ftフォント;\r
+ private int n現在のメニュー番号;\r
+ private CTexture txMenuカーソル;\r
+ private CTexture tx下部パネル;\r
+ private CTexture tx上部パネル;\r
+ private CTexture tx説明文パネル;\r
+ private CTexture tx背景;\r
+\r
+ private void tカーソルを下へ移動する()\r
+ {\r
+ CDTXMania.Skin.soundカーソル移動音.t再生する();\r
+ if( !this.bメニューにフォーカス中 )\r
+ {\r
+ this.actList.t次に移動();\r
+ }\r
+ else\r
+ {\r
+ this.n現在のメニュー番号 = ( this.n現在のメニュー番号 + 1 ) % 5;\r
+ switch( this.n現在のメニュー番号 )\r
+ {\r
+ case 0:\r
+ this.actList.t項目リストの設定・Common();\r
+ break;\r
+\r
+ case 1:\r
+ this.actList.t項目リストの設定・Drums();\r
+ break;\r
+\r
+ case 2:\r
+ this.actList.t項目リストの設定・Guitar();\r
+ break;\r
+\r
+ case 3:\r
+ this.actList.t項目リストの設定・Bass();\r
+ break;\r
+\r
+ case 4:\r
+ this.actList.t項目リストの設定・Exit();\r
+ break;\r
+ }\r
+ this.t説明文パネルに現在選択されているメニューの説明を描画する();\r
+ }\r
+ }\r
+ private void tカーソルを上へ移動する()\r
+ {\r
+ CDTXMania.Skin.soundカーソル移動音.t再生する();\r
+ if( !this.bメニューにフォーカス中 )\r
+ {\r
+ this.actList.t前に移動();\r
+ }\r
+ else\r
+ {\r
+ this.n現在のメニュー番号 = ( ( this.n現在のメニュー番号 - 1 ) + 5 ) % 5;\r
+ switch( this.n現在のメニュー番号 )\r
+ {\r
+ case 0:\r
+ this.actList.t項目リストの設定・Common();\r
+ break;\r
+\r
+ case 1:\r
+ this.actList.t項目リストの設定・Drums();\r
+ break;\r
+\r
+ case 2:\r
+ this.actList.t項目リストの設定・Guitar();\r
+ break;\r
+\r
+ case 3:\r
+ this.actList.t項目リストの設定・Bass();\r
+ break;\r
+\r
+ case 4:\r
+ this.actList.t項目リストの設定・Exit();\r
+ break;\r
+ }\r
+ this.t説明文パネルに現在選択されているメニューの説明を描画する();\r
+ }\r
+ }\r
+ private void t説明文パネルに現在選択されているメニューの説明を描画する()\r
+ {\r
+ try\r
+ {\r
+ Bitmap image = new Bitmap( 440, 0x100 );\r
+ Graphics graphics = Graphics.FromImage( image );\r
+ switch( this.n現在のメニュー番号 )\r
+ {\r
+ case 0:\r
+ graphics.DrawString( "ドラム、ギター、ベースに共通する項", this.ftフォント, Brushes.White, new PointF( 4f, 0f ) );\r
+ graphics.DrawString( "目を設定します。", this.ftフォント, Brushes.White, new PointF( 4f, 30f ) );\r
+ break;\r
+\r
+ case 1:\r
+ graphics.DrawString( "ドラムの演奏に関する項目を設定し", this.ftフォント, Brushes.White, new PointF( 4f, 0f ) );\r
+ graphics.DrawString( "ます。", this.ftフォント, Brushes.White, new PointF( 4f, 30f ) );\r
+ break;\r
+\r
+ case 2:\r
+ graphics.DrawString( "ギターの演奏に関する項目を設定し", this.ftフォント, Brushes.White, new PointF( 4f, 0f ) );\r
+ graphics.DrawString( "ます。", this.ftフォント, Brushes.White, new PointF( 4f, 30f ) );\r
+ break;\r
+\r
+ case 3:\r
+ graphics.DrawString( "ベースの演奏に関する項目を設定し", this.ftフォント, Brushes.White, new PointF( 4f, 0f ) );\r
+ graphics.DrawString( "ます。", this.ftフォント, Brushes.White, new PointF( 4f, 30f ) );\r
+ break;\r
+\r
+ case 4:\r
+ graphics.DrawString( "設定を保存し、オプション画面を終了", this.ftフォント, Brushes.White, new PointF( 4f, 0f ) );\r
+ graphics.DrawString( "します。", this.ftフォント, Brushes.White, new PointF( 4f, 30f ) );\r
+ break;\r
+ }\r
+ graphics.Dispose();\r
+ if( this.tx説明文パネル != null )\r
+ {\r
+ this.tx説明文パネル.Dispose();\r
+ }\r
+ this.tx説明文パネル = new CTexture( CDTXMania.app.Device, image, CDTXMania.TextureFormat );\r
+ this.tx説明文パネル.vc拡大縮小倍率.X = 0.5f;\r
+ this.tx説明文パネル.vc拡大縮小倍率.Y = 0.5f;\r
+ image.Dispose();\r
+ }\r
+ catch( CTextureCreateFailedException )\r
+ {\r
+ Trace.TraceError( "説明文パネルテクスチャの作成に失敗しました。" );\r
+ this.tx説明文パネル = null;\r
+ }\r
+ }\r
+ private void t説明文パネルに現在選択されている項目の説明を描画する()\r
+ {\r
+ try\r
+ {\r
+ Bitmap image = new Bitmap( 440, 0x100 );\r
+ Graphics graphics = Graphics.FromImage( image );\r
+ CItemBase base2 = this.actList.ib現在の選択項目;\r
+ if( ( base2.str説明文 != null ) && ( base2.str説明文.Length > 0 ) )\r
+ {\r
+ int num = 0;\r
+ foreach( string str in base2.str説明文.Split( new char[] { '\n' } ) )\r
+ {\r
+ graphics.DrawString( str, this.ftフォント, Brushes.White, new PointF( 4f, (float) num ) );\r
+ num += 30;\r
+ }\r
+ }\r
+ graphics.Dispose();\r
+ if( this.tx説明文パネル != null )\r
+ {\r
+ this.tx説明文パネル.Dispose();\r
+ }\r
+ this.tx説明文パネル = new CTexture( CDTXMania.app.Device, image, CDTXMania.TextureFormat );\r
+ this.tx説明文パネル.vc拡大縮小倍率.X = 0.5f;\r
+ this.tx説明文パネル.vc拡大縮小倍率.Y = 0.5f;\r
+ image.Dispose();\r
+ }\r
+ catch( CTextureCreateFailedException )\r
+ {\r
+ Trace.TraceError( "説明文パネルテクスチャの作成に失敗しました。" );\r
+ this.tx説明文パネル = null;\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using System.Drawing;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CActConfigKeyAssign : CActivity\r
+ {\r
+ // プロパティ\r
+\r
+ public bool bキー入力待ちの最中である\r
+ {\r
+ get\r
+ {\r
+ return this.bキー入力待ち;\r
+ }\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ public void t開始( E楽器パート part, Eパッド pad, string strパッド名 )\r
+ {\r
+ if( part != E楽器パート.UNKNOWN )\r
+ {\r
+ this.part = part;\r
+ this.pad = pad;\r
+ this.strパッド名 = strパッド名;\r
+ for( int i = 0; i < 0x10; i++ )\r
+ {\r
+ this.structReset用KeyAssign[ i ].入力デバイス = CDTXMania.ConfigIni.KeyAssign[ (int) part ][ (int) pad ][ i ].入力デバイス;\r
+ this.structReset用KeyAssign[ i ].ID = CDTXMania.ConfigIni.KeyAssign[ (int) part ][ (int) pad ][ i ].ID;\r
+ this.structReset用KeyAssign[ i ].コード = CDTXMania.ConfigIni.KeyAssign[ (int) part ][ (int) pad ][ i ].コード;\r
+ }\r
+ }\r
+ }\r
+ public void tEnter押下()\r
+ {\r
+ if( !this.bキー入力待ち )\r
+ {\r
+ CDTXMania.Skin.sound決定音.t再生する();\r
+ switch( this.n現在の選択行 )\r
+ {\r
+ case 0x10:\r
+ for( int i = 0; i < 0x10; i++ )\r
+ {\r
+ CDTXMania.ConfigIni.KeyAssign[ (int) this.part ][ (int) this.pad ][ i ].入力デバイス = this.structReset用KeyAssign[ i ].入力デバイス;\r
+ CDTXMania.ConfigIni.KeyAssign[ (int) this.part ][ (int) this.pad ][ i ].ID = this.structReset用KeyAssign[ i ].ID;\r
+ CDTXMania.ConfigIni.KeyAssign[ (int) this.part ][ (int) this.pad ][ i ].コード = this.structReset用KeyAssign[ i ].コード;\r
+ }\r
+ return;\r
+\r
+ case 0x11:\r
+ CDTXMania.stageコンフィグ.tアサイン完了通知();\r
+ return;\r
+ }\r
+ this.bキー入力待ち = true;\r
+ }\r
+ }\r
+ public void t次に移動()\r
+ {\r
+ if( !this.bキー入力待ち )\r
+ {\r
+ CDTXMania.Skin.soundカーソル移動音.t再生する();\r
+ this.n現在の選択行 = ( this.n現在の選択行 + 1 ) % 0x12;\r
+ }\r
+ }\r
+ public void t前に移動()\r
+ {\r
+ if( !this.bキー入力待ち )\r
+ {\r
+ CDTXMania.Skin.soundカーソル移動音.t再生する();\r
+ this.n現在の選択行 = ( ( this.n現在の選択行 - 1 ) + 0x12 ) % 0x12;\r
+ }\r
+ }\r
+\r
+ \r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ this.part = E楽器パート.UNKNOWN;\r
+ this.pad = Eパッド.UNKNOWN;\r
+ this.strパッド名 = "";\r
+ this.n現在の選択行 = 0;\r
+ this.bキー入力待ち = false;\r
+ this.structReset用KeyAssign = new CConfigIni.CKeyAssign.STKEYASSIGN[ 0x10 ];\r
+ base.On活性化();\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.txカーソル );\r
+ CDTXMania.tテクスチャの解放( ref this.txHitKeyダイアログ );\r
+ base.On非活性化();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.txカーソル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenConfig menu cursor.png" ), false );\r
+ this.txHitKeyダイアログ = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenConfig hit key to assign dialog.png" ), false );\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ if( this.bキー入力待ち )\r
+ {\r
+ if( CDTXMania.Input管理.Keyboard.bキーが押された( 0x35 ) )\r
+ {\r
+ CDTXMania.Skin.sound取消音.t再生する();\r
+ this.bキー入力待ち = false;\r
+ CDTXMania.Input管理.tポーリング( CDTXMania.app.bApplicationActive, false );\r
+ }\r
+ else if( ( this.tキーチェックとアサイン・Keyboard() || this.tキーチェックとアサイン・MidiIn() ) || ( this.tキーチェックとアサイン・Joypad() || this.tキーチェックとアサイン・Mouse() ) )\r
+ {\r
+ this.bキー入力待ち = false;\r
+ CDTXMania.Input管理.tポーリング( CDTXMania.app.bApplicationActive, false );\r
+ }\r
+ }\r
+ else if( ( CDTXMania.Input管理.Keyboard.bキーが押された( 0x31 ) && ( this.n現在の選択行 >= 0 ) ) && ( this.n現在の選択行 <= 15 ) )\r
+ {\r
+ CDTXMania.Skin.sound決定音.t再生する();\r
+ CDTXMania.ConfigIni.KeyAssign[ (int) this.part ][ (int) this.pad ][ this.n現在の選択行 ].入力デバイス = E入力デバイス.不明;\r
+ CDTXMania.ConfigIni.KeyAssign[ (int) this.part ][ (int) this.pad ][ this.n現在の選択行 ].ID = 0;\r
+ CDTXMania.ConfigIni.KeyAssign[ (int) this.part ][ (int) this.pad ][ this.n現在の選択行 ].コード = 0;\r
+ }\r
+ if( this.txカーソル != null )\r
+ {\r
+ int num = 20;\r
+ int num2 = 0x144;\r
+ int num3 = 0x3e + ( num * ( this.n現在の選択行 + 1 ) );\r
+ this.txカーソル.t2D描画( CDTXMania.app.Device, num2, num3, new Rectangle( 0, 0, 0x10, 0x20 ) );\r
+ num2 += 0x10;\r
+ Rectangle rectangle = new Rectangle( 8, 0, 0x10, 0x20 );\r
+ for( int j = 0; j < 14; j++ )\r
+ {\r
+ this.txカーソル.t2D描画( CDTXMania.app.Device, num2, num3, rectangle );\r
+ num2 += 0x10;\r
+ }\r
+ this.txカーソル.t2D描画( CDTXMania.app.Device, num2, num3, new Rectangle( 0x10, 0, 0x10, 0x20 ) );\r
+ }\r
+ int num5 = 20;\r
+ int x = 0x134;\r
+ int y = 0x40;\r
+ CDTXMania.stageコンフィグ.actFont.t文字列描画( x, y, this.strパッド名, false, 0.75f );\r
+ y += num5;\r
+ CConfigIni.CKeyAssign.STKEYASSIGN[] stkeyassignArray = CDTXMania.ConfigIni.KeyAssign[ (int) this.part ][ (int) this.pad ];\r
+ for( int i = 0; i < 0x10; i++ )\r
+ {\r
+ switch( stkeyassignArray[ i ].入力デバイス )\r
+ {\r
+ case E入力デバイス.キーボード:\r
+ this.tアサインコードの描画・Keyboard( i + 1, x + 20, y, stkeyassignArray[ i ].ID, stkeyassignArray[ i ].コード, this.n現在の選択行 == i );\r
+ break;\r
+\r
+ case E入力デバイス.MIDI入力:\r
+ this.tアサインコードの描画・MidiIn( i + 1, x + 20, y, stkeyassignArray[ i ].ID, stkeyassignArray[ i ].コード, this.n現在の選択行 == i );\r
+ break;\r
+\r
+ case E入力デバイス.ジョイパッド:\r
+ this.tアサインコードの描画・Joypad( i + 1, x + 20, y, stkeyassignArray[ i ].ID, stkeyassignArray[ i ].コード, this.n現在の選択行 == i );\r
+ break;\r
+\r
+ case E入力デバイス.マウス:\r
+ this.tアサインコードの描画・Mouse( i + 1, x + 20, y, stkeyassignArray[ i ].ID, stkeyassignArray[ i ].コード, this.n現在の選択行 == i );\r
+ break;\r
+\r
+ default:\r
+ CDTXMania.stageコンフィグ.actFont.t文字列描画( x + 20, y, string.Format( "{0,2}.", i + 1 ), this.n現在の選択行 == i, 0.75f );\r
+ break;\r
+ }\r
+ y += num5;\r
+ }\r
+ CDTXMania.stageコンフィグ.actFont.t文字列描画( x + 20, y, "Reset", this.n現在の選択行 == 0x10, 0.75f );\r
+ y += num5;\r
+ CDTXMania.stageコンフィグ.actFont.t文字列描画( x + 20, y, "<< Returnto List", this.n現在の選択行 == 0x11, 0.75f );\r
+ y += num5;\r
+ if( this.bキー入力待ち && ( this.txHitKeyダイアログ != null ) )\r
+ {\r
+ this.txHitKeyダイアログ.t2D描画( CDTXMania.app.Device, 0x185, 0xd7 );\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ private struct STKEYLABEL\r
+ {\r
+ public int nCode;\r
+ public string strLabel;\r
+ public STKEYLABEL( int nCode, string strLabel )\r
+ {\r
+ this.nCode = nCode;\r
+ this.strLabel = strLabel;\r
+ }\r
+ }\r
+\r
+ private bool bキー入力待ち;\r
+ private STKEYLABEL[] KeyLabel = new STKEYLABEL[] { \r
+ new STKEYLABEL(0x35, "[ESC]"), new STKEYLABEL(1, "[ 1 ]"), new STKEYLABEL(2, "[ 2 ]"), new STKEYLABEL(3, "[ 3 ]"), new STKEYLABEL(4, "[ 4 ]"), new STKEYLABEL(5, "[ 5 ]"), new STKEYLABEL(6, "[ 6 ]"), new STKEYLABEL(7, "[ 7 ]"), new STKEYLABEL(8, "[ 8 ]"), new STKEYLABEL(9, "[ 9 ]"), new STKEYLABEL(0, "[ 0 ]"), new STKEYLABEL(0x53, "[ - ]"), new STKEYLABEL(0x34, "[ = ]"), new STKEYLABEL(0x2a, "[BSC]"), new STKEYLABEL(0x81, "[TAB]"), new STKEYLABEL(0x1a, "[ Q ]"), \r
+ new STKEYLABEL(0x20, "[ W ]"), new STKEYLABEL(14, "[ E ]"), new STKEYLABEL(0x1b, "[ R ]"), new STKEYLABEL(0x1d, "[ T ]"), new STKEYLABEL(0x22, "[ Y ]"), new STKEYLABEL(30, "[ U ]"), new STKEYLABEL(0x12, "[ I ]"), new STKEYLABEL(0x18, "[ O ]"), new STKEYLABEL(0x19, "[ P ]"), new STKEYLABEL(0x4a, "[ [ ]"), new STKEYLABEL(0x73, "[ ] ]"), new STKEYLABEL(0x75, "[Enter]"), new STKEYLABEL(0x4b, "[L-Ctrl]"), new STKEYLABEL(10, "[ A ]"), new STKEYLABEL(0x1c, "[ S ]"), new STKEYLABEL(13, "[ D ]"), \r
+ new STKEYLABEL(15, "[ F ]"), new STKEYLABEL(0x10, "[ G ]"), new STKEYLABEL(0x11, "[ H ]"), new STKEYLABEL(0x13, "[ J ]"), new STKEYLABEL(20, "[ K ]"), new STKEYLABEL(0x15, "[ L ]"), new STKEYLABEL(0x7b, "[ ; ]"), new STKEYLABEL(0x26, "[ ' ]"), new STKEYLABEL(0x45, "[ ` ]"), new STKEYLABEL(0x4e, "[L-Shift]"), new STKEYLABEL(0x2b, @"[ \]"), new STKEYLABEL(0x23, "[ Z ]"), new STKEYLABEL(0x21, "[ X ]"), new STKEYLABEL(12, "[ C ]"), new STKEYLABEL(0x1f, "[ V ]"), new STKEYLABEL(11, "[ B ]"), \r
+ new STKEYLABEL(0x17, "[ N ]"), new STKEYLABEL(0x16, "[ M ]"), new STKEYLABEL(0x2f, "[ , ]"), new STKEYLABEL(0x6f, "[ . ]"), new STKEYLABEL(0x7c, "[ / ]"), new STKEYLABEL(120, "[R-Shift]"), new STKEYLABEL(0x6a, "[ * ]"), new STKEYLABEL(0x4d, "[L-Alt]"), new STKEYLABEL(0x7e, "[Space]"), new STKEYLABEL(0x2d, "[CAPS]"), new STKEYLABEL(0x36, "[F1]"), new STKEYLABEL(0x37, "[F2]"), new STKEYLABEL(0x38, "[F3]"), new STKEYLABEL(0x39, "[F4]"), new STKEYLABEL(0x3a, "[F5]"), new STKEYLABEL(0x3b, "[F6]"), \r
+ new STKEYLABEL(60, "[F7]"), new STKEYLABEL(0x3d, "[F8]"), new STKEYLABEL(0x3e, "[F9]"), new STKEYLABEL(0x3f, "[F10]"), new STKEYLABEL(0x58, "[NumLock]"), new STKEYLABEL(0x7a, "[Scroll]"), new STKEYLABEL(0x60, "[NPad7]"), new STKEYLABEL(0x61, "[NPad8]"), new STKEYLABEL(0x62, "[NPad9]"), new STKEYLABEL(0x66, "[NPad-]"), new STKEYLABEL(0x5d, "[NPad4]"), new STKEYLABEL(0x5e, "[NPad5]"), new STKEYLABEL(0x5f, "[NPad6]"), new STKEYLABEL(0x68, "[NPad+]"), new STKEYLABEL(90, "[NPad1]"), new STKEYLABEL(0x5b, "[NPad2]"), \r
+ new STKEYLABEL(0x5c, "[NPad3]"), new STKEYLABEL(0x59, "[NPad0]"), new STKEYLABEL(0x67, "[NPad.]"), new STKEYLABEL(0x40, "[F11]"), new STKEYLABEL(0x41, "[F12]"), new STKEYLABEL(0x42, "[F13]"), new STKEYLABEL(0x43, "[F14]"), new STKEYLABEL(0x44, "[F15]"), new STKEYLABEL(0x48, "[Kana]"), new STKEYLABEL(0x24, "[ ? ]"), new STKEYLABEL(0x30, "[Henkan]"), new STKEYLABEL(0x57, "[MuHenkan]"), new STKEYLABEL(0x8f, @"[ \ ]"), new STKEYLABEL(0x25, "[NPad.]"), new STKEYLABEL(0x65, "[NPad=]"), new STKEYLABEL(0x72, "[ ^ ]"), \r
+ new STKEYLABEL(40, "[ @ ]"), new STKEYLABEL(0x2e, "[ : ]"), new STKEYLABEL(130, "[ _ ]"), new STKEYLABEL(0x49, "[Kanji]"), new STKEYLABEL(0x7f, "[Stop]"), new STKEYLABEL(0x29, "[AX]"), new STKEYLABEL(100, "[NPEnter]"), new STKEYLABEL(0x74, "[R-Ctrl]"), new STKEYLABEL(0x54, "[Mute]"), new STKEYLABEL(0x2c, "[Calc]"), new STKEYLABEL(0x70, "[PlayPause]"), new STKEYLABEL(0x52, "[MediaStop]"), new STKEYLABEL(0x85, "[Volume-]"), new STKEYLABEL(0x86, "[Volume+]"), new STKEYLABEL(0x8b, "[WebHome]"), new STKEYLABEL(0x63, "[NPad,]"), \r
+ new STKEYLABEL(0x69, "[ / ]"), new STKEYLABEL(0x80, "[PrtScn]"), new STKEYLABEL(0x77, "[R-Alt]"), new STKEYLABEL(110, "[Pause]"), new STKEYLABEL(70, "[Home]"), new STKEYLABEL(0x84, "[Up]"), new STKEYLABEL(0x6d, "[PageUp]"), new STKEYLABEL(0x4c, "[Left]"), new STKEYLABEL(0x76, "[Right]"), new STKEYLABEL(0x33, "[End]"), new STKEYLABEL(50, "[Down]"), new STKEYLABEL(0x6c, "[PageDown]"), new STKEYLABEL(0x47, "[Insert]"), new STKEYLABEL(0x31, "[Delete]"), new STKEYLABEL(0x4f, "[L-Win]"), new STKEYLABEL(0x79, "[R-Win]"), \r
+ new STKEYLABEL(0x27, "[APP]"), new STKEYLABEL(0x71, "[Power]"), new STKEYLABEL(0x7d, "[Sleep]"), new STKEYLABEL(0x87, "[Wake]")\r
+ };\r
+ private int n現在の選択行;\r
+ private Eパッド pad;\r
+ private E楽器パート part;\r
+ private CConfigIni.CKeyAssign.STKEYASSIGN[] structReset用KeyAssign;\r
+ private string strパッド名;\r
+ private CTexture txHitKeyダイアログ;\r
+ private CTexture txカーソル;\r
+\r
+ private void tアサインコードの描画・Joypad( int line, int x, int y, int nID, int nCode, bool b強調 )\r
+ {\r
+ string str = "";\r
+ switch( nCode )\r
+ {\r
+ case 0:\r
+ str = "Left";\r
+ break;\r
+\r
+ case 1:\r
+ str = "Right";\r
+ break;\r
+\r
+ case 2:\r
+ str = "Up";\r
+ break;\r
+\r
+ case 3:\r
+ str = "Down";\r
+ break;\r
+\r
+ case 4:\r
+ str = "Forward";\r
+ break;\r
+\r
+ case 5:\r
+ str = "Back";\r
+ break;\r
+\r
+ default:\r
+ if( ( nCode >= 6 ) && ( nCode <= 0x85 ) )\r
+ {\r
+ str = string.Format( "Button{0}", nCode - 5 );\r
+ }\r
+ else\r
+ {\r
+ str = string.Format( "Code{0}", nCode );\r
+ }\r
+ break;\r
+ }\r
+ CDTXMania.stageコンフィグ.actFont.t文字列描画( x, y, string.Format( "{0,2}. Joypad #{1} ", line, nID ) + str, b強調, 0.75f );\r
+ }\r
+ private void tアサインコードの描画・Keyboard( int line, int x, int y, int nID, int nCode, bool b強調 )\r
+ {\r
+ string str = null;\r
+ foreach( STKEYLABEL stkeylabel in this.KeyLabel )\r
+ {\r
+ if( stkeylabel.nCode == nCode )\r
+ {\r
+ str = string.Format( "{0,2}. Key {1}", line, stkeylabel.strLabel );\r
+ break;\r
+ }\r
+ }\r
+ if( str == null )\r
+ {\r
+ str = string.Format( "{0,2}. Key 0x{1:X2}", line, nCode );\r
+ }\r
+ CDTXMania.stageコンフィグ.actFont.t文字列描画( x, y, str, b強調, 0.75f );\r
+ }\r
+ private void tアサインコードの描画・MidiIn( int line, int x, int y, int nID, int nCode, bool b強調 )\r
+ {\r
+ CDTXMania.stageコンフィグ.actFont.t文字列描画( x, y, string.Format( "{0,2}. MidiIn #{1} code.{2}", line, nID, nCode ), b強調, 0.75f );\r
+ }\r
+ private void tアサインコードの描画・Mouse( int line, int x, int y, int nID, int nCode, bool b強調 )\r
+ {\r
+ CDTXMania.stageコンフィグ.actFont.t文字列描画( x, y, string.Format( "{0,2}. Mouse Button{1}", line, nCode ), b強調, 0.75f );\r
+ }\r
+ private bool tキーチェックとアサイン・Joypad()\r
+ {\r
+ foreach( IInputDevice device in CDTXMania.Input管理.list入力デバイス )\r
+ {\r
+ if( device.e入力デバイス種別 == E入力デバイス種別.Joystick )\r
+ {\r
+ for( int i = 0; i < 0x80; i++ )\r
+ {\r
+ if( device.bキーが押された( 6 + i ) )\r
+ {\r
+ CDTXMania.Skin.sound決定音.t再生する();\r
+ CDTXMania.ConfigIni.t指定した入力が既にアサイン済みである場合はそれを全削除する( E入力デバイス.ジョイパッド, device.ID, 6 + i );\r
+ CDTXMania.ConfigIni.KeyAssign[ (int) this.part ][ (int) this.pad ][ this.n現在の選択行 ].入力デバイス = E入力デバイス.ジョイパッド;\r
+ CDTXMania.ConfigIni.KeyAssign[ (int) this.part ][ (int) this.pad ][ this.n現在の選択行 ].ID = device.ID;\r
+ CDTXMania.ConfigIni.KeyAssign[ (int) this.part ][ (int) this.pad ][ this.n現在の選択行 ].コード = 6 + i;\r
+ return true;\r
+ }\r
+ }\r
+ for( int j = 0; j < 6; j++ )\r
+ {\r
+ if( device.bキーが押された( j ) )\r
+ {\r
+ CDTXMania.Skin.sound決定音.t再生する();\r
+ CDTXMania.ConfigIni.t指定した入力が既にアサイン済みである場合はそれを全削除する( E入力デバイス.ジョイパッド, device.ID, j );\r
+ CDTXMania.ConfigIni.KeyAssign[ (int) this.part ][ (int) this.pad ][ this.n現在の選択行 ].入力デバイス = E入力デバイス.ジョイパッド;\r
+ CDTXMania.ConfigIni.KeyAssign[ (int) this.part ][ (int) this.pad ][ this.n現在の選択行 ].ID = device.ID;\r
+ CDTXMania.ConfigIni.KeyAssign[ (int) this.part ][ (int) this.pad ][ this.n現在の選択行 ].コード = j;\r
+ return true;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ return false;\r
+ }\r
+ private bool tキーチェックとアサイン・Keyboard()\r
+ {\r
+ for( int i = 0; i < 0x100; i++ )\r
+ {\r
+ if( ( ( ( i != 0x35 ) && ( i != 0x84 ) ) && ( ( i != 50 ) && ( i != 0x4c ) ) ) && ( ( ( i != 0x76 ) && ( i != 0x31 ) ) && CDTXMania.Input管理.Keyboard.bキーが押された( i ) ) )\r
+ {\r
+ CDTXMania.Skin.sound決定音.t再生する();\r
+ CDTXMania.ConfigIni.t指定した入力が既にアサイン済みである場合はそれを全削除する( E入力デバイス.キーボード, 0, i );\r
+ CDTXMania.ConfigIni.KeyAssign[ (int) this.part ][ (int) this.pad ][ this.n現在の選択行 ].入力デバイス = E入力デバイス.キーボード;\r
+ CDTXMania.ConfigIni.KeyAssign[ (int) this.part ][ (int) this.pad ][ this.n現在の選択行 ].ID = 0;\r
+ CDTXMania.ConfigIni.KeyAssign[ (int) this.part ][ (int) this.pad ][ this.n現在の選択行 ].コード = i;\r
+ return true;\r
+ }\r
+ }\r
+ return false;\r
+ }\r
+ private bool tキーチェックとアサイン・MidiIn()\r
+ {\r
+ foreach( IInputDevice device in CDTXMania.Input管理.list入力デバイス )\r
+ {\r
+ if( device.e入力デバイス種別 == E入力デバイス種別.MidiIn )\r
+ {\r
+ for( int i = 0; i < 0x100; i++ )\r
+ {\r
+ if( device.bキーが押された( i ) )\r
+ {\r
+ CDTXMania.Skin.sound決定音.t再生する();\r
+ CDTXMania.ConfigIni.t指定した入力が既にアサイン済みである場合はそれを全削除する( E入力デバイス.MIDI入力, device.ID, i );\r
+ CDTXMania.ConfigIni.KeyAssign[ (int) this.part ][ (int) this.pad ][ this.n現在の選択行 ].入力デバイス = E入力デバイス.MIDI入力;\r
+ CDTXMania.ConfigIni.KeyAssign[ (int) this.part ][ (int) this.pad ][ this.n現在の選択行 ].ID = device.ID;\r
+ CDTXMania.ConfigIni.KeyAssign[ (int) this.part ][ (int) this.pad ][ this.n現在の選択行 ].コード = i;\r
+ return true;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ return false;\r
+ }\r
+ private bool tキーチェックとアサイン・Mouse()\r
+ {\r
+ for( int i = 0; i < 8; i++ )\r
+ {\r
+ if( CDTXMania.Input管理.Mouse.bキーが押された( i ) )\r
+ {\r
+ CDTXMania.ConfigIni.t指定した入力が既にアサイン済みである場合はそれを全削除する( E入力デバイス.マウス, 0, i );\r
+ CDTXMania.ConfigIni.KeyAssign[ (int) this.part ][ (int) this.pad ][ this.n現在の選択行 ].入力デバイス = E入力デバイス.マウス;\r
+ CDTXMania.ConfigIni.KeyAssign[ (int) this.part ][ (int) this.pad ][ this.n現在の選択行 ].ID = 0;\r
+ CDTXMania.ConfigIni.KeyAssign[ (int) this.part ][ (int) this.pad ][ this.n現在の選択行 ].コード = i;\r
+ }\r
+ }\r
+ return false;\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Drawing;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CActConfigList : CActivity\r
+ {\r
+ // プロパティ\r
+\r
+ public bool b現在選択されている項目はReturnToMenuである\r
+ {\r
+ get\r
+ {\r
+ CItemBase base2 = this.list項目リスト[ this.n現在の選択項目 ];\r
+ if( ( ( base2 != this.iSystemReturnToMenu ) && ( base2 != this.iKeyAssignDrumsReturnToMenu ) ) && ( base2 != this.iKeyAssignGuitarReturnToMenu ) )\r
+ {\r
+ return ( base2 == this.iKeyAssignBassReturnToMenu );\r
+ }\r
+ return true;\r
+ }\r
+ }\r
+ public CItemBase ib現在の選択項目\r
+ {\r
+ get\r
+ {\r
+ return this.list項目リスト[ this.n現在の選択項目 ];\r
+ }\r
+ }\r
+ public int n現在の選択項目;\r
+\r
+\r
+ // メソッド\r
+\r
+ public void tEnter押下()\r
+ {\r
+ CDTXMania.Skin.sound決定音.t再生する();\r
+ if( this.b要素値にフォーカス中 )\r
+ {\r
+ this.b要素値にフォーカス中 = false;\r
+ }\r
+ else if( this.list項目リスト[ this.n現在の選択項目 ].e種別 == CItemBase.E種別.整数 )\r
+ {\r
+ this.b要素値にフォーカス中 = true;\r
+ }\r
+ else if( this.b現在選択されている項目はReturnToMenuである )\r
+ {\r
+ this.tConfigIniへ記録する();\r
+ }\r
+ else if( ( this.list項目リスト[ this.n現在の選択項目 ] == this.iSystemGuitar ) || ( this.list項目リスト[ this.n現在の選択項目 ] == this.iSystemDrums ) )\r
+ {\r
+ this.list項目リスト[ this.n現在の選択項目 ].tEnter押下();\r
+ if( !this.iSystemGuitar.bON && !this.iSystemDrums.bON )\r
+ {\r
+ if( this.list項目リスト[ this.n現在の選択項目 ] == this.iSystemGuitar )\r
+ {\r
+ this.iSystemDrums.bON = true;\r
+ }\r
+ else\r
+ {\r
+ this.iSystemGuitar.bON = true;\r
+ }\r
+ }\r
+ }\r
+ else if( this.list項目リスト[ this.n現在の選択項目 ] == this.iKeyAssignDrumsLC )\r
+ {\r
+ CDTXMania.stageコンフィグ.tパッド選択通知( E楽器パート.DRUMS, Eパッド.LC );\r
+ }\r
+ else if( this.list項目リスト[ this.n現在の選択項目 ] == this.iKeyAssignDrumsHHC )\r
+ {\r
+ CDTXMania.stageコンフィグ.tパッド選択通知( E楽器パート.DRUMS, Eパッド.HH );\r
+ }\r
+ else if( this.list項目リスト[ this.n現在の選択項目 ] == this.iKeyAssignDrumsHHO )\r
+ {\r
+ CDTXMania.stageコンフィグ.tパッド選択通知( E楽器パート.DRUMS, Eパッド.HHO );\r
+ }\r
+ else if( this.list項目リスト[ this.n現在の選択項目 ] == this.iKeyAssignDrumsSD )\r
+ {\r
+ CDTXMania.stageコンフィグ.tパッド選択通知( E楽器パート.DRUMS, Eパッド.SD );\r
+ }\r
+ else if( this.list項目リスト[ this.n現在の選択項目 ] == this.iKeyAssignDrumsBD )\r
+ {\r
+ CDTXMania.stageコンフィグ.tパッド選択通知( E楽器パート.DRUMS, Eパッド.BD );\r
+ }\r
+ else if( this.list項目リスト[ this.n現在の選択項目 ] == this.iKeyAssignDrumsHT )\r
+ {\r
+ CDTXMania.stageコンフィグ.tパッド選択通知( E楽器パート.DRUMS, Eパッド.HT );\r
+ }\r
+ else if( this.list項目リスト[ this.n現在の選択項目 ] == this.iKeyAssignDrumsLT )\r
+ {\r
+ CDTXMania.stageコンフィグ.tパッド選択通知( E楽器パート.DRUMS, Eパッド.LT );\r
+ }\r
+ else if( this.list項目リスト[ this.n現在の選択項目 ] == this.iKeyAssignDrumsFT )\r
+ {\r
+ CDTXMania.stageコンフィグ.tパッド選択通知( E楽器パート.DRUMS, Eパッド.FT );\r
+ }\r
+ else if( this.list項目リスト[ this.n現在の選択項目 ] == this.iKeyAssignDrumsCY )\r
+ {\r
+ CDTXMania.stageコンフィグ.tパッド選択通知( E楽器パート.DRUMS, Eパッド.CY );\r
+ }\r
+ else if( this.list項目リスト[ this.n現在の選択項目 ] == this.iKeyAssignDrumsRD )\r
+ {\r
+ CDTXMania.stageコンフィグ.tパッド選択通知( E楽器パート.DRUMS, Eパッド.RD );\r
+ }\r
+ else if( this.list項目リスト[ this.n現在の選択項目 ] == this.iKeyAssignGuitarR )\r
+ {\r
+ CDTXMania.stageコンフィグ.tパッド選択通知( E楽器パート.GUITAR, Eパッド.HH );\r
+ }\r
+ else if( this.list項目リスト[ this.n現在の選択項目 ] == this.iKeyAssignGuitarG )\r
+ {\r
+ CDTXMania.stageコンフィグ.tパッド選択通知( E楽器パート.GUITAR, Eパッド.SD );\r
+ }\r
+ else if( this.list項目リスト[ this.n現在の選択項目 ] == this.iKeyAssignGuitarB )\r
+ {\r
+ CDTXMania.stageコンフィグ.tパッド選択通知( E楽器パート.GUITAR, Eパッド.BD );\r
+ }\r
+ else if( this.list項目リスト[ this.n現在の選択項目 ] == this.iKeyAssignGuitarPick )\r
+ {\r
+ CDTXMania.stageコンフィグ.tパッド選択通知( E楽器パート.GUITAR, Eパッド.HT );\r
+ }\r
+ else if( this.list項目リスト[ this.n現在の選択項目 ] == this.iKeyAssignGuitarWail )\r
+ {\r
+ CDTXMania.stageコンフィグ.tパッド選択通知( E楽器パート.GUITAR, Eパッド.LT );\r
+ }\r
+ else if( this.list項目リスト[ this.n現在の選択項目 ] == this.iKeyAssignGuitarDecide )\r
+ {\r
+ CDTXMania.stageコンフィグ.tパッド選択通知( E楽器パート.GUITAR, Eパッド.CY );\r
+ }\r
+ else if( this.list項目リスト[ this.n現在の選択項目 ] == this.iKeyAssignGuitarCancel )\r
+ {\r
+ CDTXMania.stageコンフィグ.tパッド選択通知( E楽器パート.GUITAR, Eパッド.FT );\r
+ }\r
+ else if( this.list項目リスト[ this.n現在の選択項目 ] == this.iKeyAssignBassR )\r
+ {\r
+ CDTXMania.stageコンフィグ.tパッド選択通知( E楽器パート.BASS, Eパッド.HH );\r
+ }\r
+ else if( this.list項目リスト[ this.n現在の選択項目 ] == this.iKeyAssignBassG )\r
+ {\r
+ CDTXMania.stageコンフィグ.tパッド選択通知( E楽器パート.BASS, Eパッド.SD );\r
+ }\r
+ else if( this.list項目リスト[ this.n現在の選択項目 ] == this.iKeyAssignBassB )\r
+ {\r
+ CDTXMania.stageコンフィグ.tパッド選択通知( E楽器パート.BASS, Eパッド.BD );\r
+ }\r
+ else if( this.list項目リスト[ this.n現在の選択項目 ] == this.iKeyAssignBassPick )\r
+ {\r
+ CDTXMania.stageコンフィグ.tパッド選択通知( E楽器パート.BASS, Eパッド.HT );\r
+ }\r
+ else if( this.list項目リスト[ this.n現在の選択項目 ] == this.iKeyAssignBassWail )\r
+ {\r
+ CDTXMania.stageコンフィグ.tパッド選択通知( E楽器パート.BASS, Eパッド.LT );\r
+ }\r
+ else if( this.list項目リスト[ this.n現在の選択項目 ] == this.iKeyAssignBassDecide )\r
+ {\r
+ CDTXMania.stageコンフィグ.tパッド選択通知( E楽器パート.BASS, Eパッド.CY );\r
+ }\r
+ else if( this.list項目リスト[ this.n現在の選択項目 ] == this.iKeyAssignBassCancel )\r
+ {\r
+ CDTXMania.stageコンフィグ.tパッド選択通知( E楽器パート.BASS, Eパッド.FT );\r
+ }\r
+ else\r
+ {\r
+ this.list項目リスト[ this.n現在の選択項目 ].tEnter押下();\r
+ if( this.list項目リスト[ this.n現在の選択項目 ] == this.iSystemFullscreen )\r
+ {\r
+ CDTXMania.app.b次のタイミングで全画面・ウィンドウ切り替えを行う = true;\r
+ }\r
+ else if( this.list項目リスト[ this.n現在の選択項目 ] == this.iSystemVSyncWait )\r
+ {\r
+ CDTXMania.ConfigIni.b垂直帰線待ちを行う = this.iSystemVSyncWait.bON;\r
+ CDTXMania.app.b次のタイミングで垂直帰線同期切り替えを行う = true;\r
+ }\r
+ }\r
+ }\r
+ public void t項目リストの設定・Exit()\r
+ {\r
+ this.tConfigIniへ記録する();\r
+ this.eメニュー種別 = Eメニュー種別.Unknown;\r
+ }\r
+ public void t項目リストの設定・KeyAssignBass()\r
+ {\r
+ this.tConfigIniへ記録する();\r
+ this.list項目リスト.Clear();\r
+ this.iKeyAssignBassReturnToMenu = new CItemBase( "<< ReturnTo Menu", CItemBase.Eパネル種別.その他 );\r
+ this.iKeyAssignBassReturnToMenu.str説明文 = "左側のメニューに戻ります。";\r
+ this.list項目リスト.Add( this.iKeyAssignBassReturnToMenu );\r
+ this.iKeyAssignBassR = new CItemBase( "R" );\r
+ this.iKeyAssignBassR.str説明文 = "ベースのキー設定:\nRボタンへのキーの割り当てを設定し\nます。";\r
+ this.list項目リスト.Add( this.iKeyAssignBassR );\r
+ this.iKeyAssignBassG = new CItemBase( "G" );\r
+ this.iKeyAssignBassG.str説明文 = "ベースのキー設定:\nGボタンへのキーの割り当てを設定し\nます。";\r
+ this.list項目リスト.Add( this.iKeyAssignBassG );\r
+ this.iKeyAssignBassB = new CItemBase( "B" );\r
+ this.iKeyAssignBassB.str説明文 = "ベースのキー設定:\nBボタンへのキーの割り当てを設定し\nます。";\r
+ this.list項目リスト.Add( this.iKeyAssignBassB );\r
+ this.iKeyAssignBassPick = new CItemBase( "Pick" );\r
+ this.iKeyAssignBassPick.str説明文 = "ベースのキー設定:\nピックボタンへのキーの割り当てを設\n定します。";\r
+ this.list項目リスト.Add( this.iKeyAssignBassPick );\r
+ this.iKeyAssignBassWail = new CItemBase( "Wailing" );\r
+ this.iKeyAssignBassWail.str説明文 = "ベースのキー設定:\nWailingボタンへのキーの割り当てを設\n定します。";\r
+ this.list項目リスト.Add( this.iKeyAssignBassWail );\r
+ this.iKeyAssignBassDecide = new CItemBase( "Decide" );\r
+ this.iKeyAssignBassDecide.str説明文 = "ベースのキー設定:\n決定ボタンへのキーの割り当てを設\n定します。";\r
+ this.list項目リスト.Add( this.iKeyAssignBassDecide );\r
+ this.iKeyAssignBassCancel = new CItemBase( "Cancel" );\r
+ this.iKeyAssignBassCancel.str説明文 = "ベースのキー設定:\nキャンセルボタンへのキーの割り当\nてを設定します。";\r
+ this.list項目リスト.Add( this.iKeyAssignBassCancel );\r
+ this.n現在の選択項目 = 0;\r
+ this.eメニュー種別 = Eメニュー種別.KeyAssignBass;\r
+ }\r
+ public void t項目リストの設定・KeyAssignDrums()\r
+ {\r
+ this.tConfigIniへ記録する();\r
+ this.list項目リスト.Clear();\r
+ this.iKeyAssignDrumsReturnToMenu = new CItemBase( "<< ReturnTo Menu", CItemBase.Eパネル種別.その他 );\r
+ this.iKeyAssignDrumsReturnToMenu.str説明文 = "左側のメニューに戻ります。";\r
+ this.list項目リスト.Add( this.iKeyAssignDrumsReturnToMenu );\r
+ this.iKeyAssignDrumsLC = new CItemBase( "LeftCymbal" );\r
+ this.iKeyAssignDrumsLC.str説明文 = "ドラムのキー設定:\n左シンバルへのキーの割り当てを設\n定します。";\r
+ this.list項目リスト.Add( this.iKeyAssignDrumsLC );\r
+ this.iKeyAssignDrumsHHC = new CItemBase( "HiHat(Close)" );\r
+ this.iKeyAssignDrumsHHC.str説明文 = "ドラムのキー設定:\nハイハット(クローズ)へのキーの割り\n当てを設定します。";\r
+ this.list項目リスト.Add( this.iKeyAssignDrumsHHC );\r
+ this.iKeyAssignDrumsHHO = new CItemBase( "HiHat(Open)" );\r
+ this.iKeyAssignDrumsHHO.str説明文 = "ドラムのキー設定:\nハイハット(オープン)へのキーの割り\n当てを設定します。";\r
+ this.list項目リスト.Add( this.iKeyAssignDrumsHHO );\r
+ this.iKeyAssignDrumsSD = new CItemBase( "Snare" );\r
+ this.iKeyAssignDrumsSD.str説明文 = "ドラムのキー設定:\nスネアへのキーの割り当てを設定し\nます。";\r
+ this.list項目リスト.Add( this.iKeyAssignDrumsSD );\r
+ this.iKeyAssignDrumsBD = new CItemBase( "Bass" );\r
+ this.iKeyAssignDrumsBD.str説明文 = "ドラムのキー設定:\nバスドラムへのキーの割り当てを設定\nします。";\r
+ this.list項目リスト.Add( this.iKeyAssignDrumsBD );\r
+ this.iKeyAssignDrumsHT = new CItemBase( "HighTom" );\r
+ this.iKeyAssignDrumsHT.str説明文 = "ドラムのキー設定:\nハイタムへのキーの割り当てを設定\nします。";\r
+ this.list項目リスト.Add( this.iKeyAssignDrumsHT );\r
+ this.iKeyAssignDrumsLT = new CItemBase( "LowTom" );\r
+ this.iKeyAssignDrumsLT.str説明文 = "ドラムのキー設定:\nロータムへのキーの割り当てを設定\nします。";\r
+ this.list項目リスト.Add( this.iKeyAssignDrumsLT );\r
+ this.iKeyAssignDrumsFT = new CItemBase( "FloorTom" );\r
+ this.iKeyAssignDrumsFT.str説明文 = "ドラムのキー設定:\nフロアタムへのキーの割り当てを設\n定します。";\r
+ this.list項目リスト.Add( this.iKeyAssignDrumsFT );\r
+ this.iKeyAssignDrumsCY = new CItemBase( "RightCymbal" );\r
+ this.iKeyAssignDrumsCY.str説明文 = "ドラムのキー設定:\n右シンバルへのキーの割り当てを設\n定します。";\r
+ this.list項目リスト.Add( this.iKeyAssignDrumsCY );\r
+ this.iKeyAssignDrumsRD = new CItemBase( "RideCymbal" );\r
+ this.iKeyAssignDrumsRD.str説明文 = "ドラムのキー設定:\nライドシンバルへのキーの割り当て\nを設定します。";\r
+ this.list項目リスト.Add( this.iKeyAssignDrumsRD );\r
+ this.n現在の選択項目 = 0;\r
+ this.eメニュー種別 = Eメニュー種別.KeyAssignDrums;\r
+ }\r
+ public void t項目リストの設定・KeyAssignGuitar()\r
+ {\r
+ this.tConfigIniへ記録する();\r
+ this.list項目リスト.Clear();\r
+ this.iKeyAssignGuitarReturnToMenu = new CItemBase( "<< ReturnTo Menu", CItemBase.Eパネル種別.その他 );\r
+ this.iKeyAssignGuitarReturnToMenu.str説明文 = "左側のメニューに戻ります。";\r
+ this.list項目リスト.Add( this.iKeyAssignGuitarReturnToMenu );\r
+ this.iKeyAssignGuitarR = new CItemBase( "R" );\r
+ this.iKeyAssignGuitarR.str説明文 = "ギターのキー設定:\nRボタンへのキーの割り当てを設定し\nます。";\r
+ this.list項目リスト.Add( this.iKeyAssignGuitarR );\r
+ this.iKeyAssignGuitarG = new CItemBase( "G" );\r
+ this.iKeyAssignGuitarG.str説明文 = "ギターのキー設定:\nGボタンへのキーの割り当てを設定し\nます。";\r
+ this.list項目リスト.Add( this.iKeyAssignGuitarG );\r
+ this.iKeyAssignGuitarB = new CItemBase( "B" );\r
+ this.iKeyAssignGuitarB.str説明文 = "ギターのキー設定:\nBボタンへのキーの割り当てを設定し\nます。";\r
+ this.list項目リスト.Add( this.iKeyAssignGuitarB );\r
+ this.iKeyAssignGuitarPick = new CItemBase( "Pick" );\r
+ this.iKeyAssignGuitarPick.str説明文 = "ギターのキー設定:\nピックボタンへのキーの割り当てを設\n定します。";\r
+ this.list項目リスト.Add( this.iKeyAssignGuitarPick );\r
+ this.iKeyAssignGuitarWail = new CItemBase( "Wailing" );\r
+ this.iKeyAssignGuitarWail.str説明文 = "ギターのキー設定:\nWailingボタンへのキーの割り当てを\n設定します。";\r
+ this.list項目リスト.Add( this.iKeyAssignGuitarWail );\r
+ this.iKeyAssignGuitarDecide = new CItemBase( "Decide" );\r
+ this.iKeyAssignGuitarDecide.str説明文 = "ギターのキー設定:\n決定ボタンへのキーの割り当てを設\n定します。";\r
+ this.list項目リスト.Add( this.iKeyAssignGuitarDecide );\r
+ this.iKeyAssignGuitarCancel = new CItemBase( "Cancel" );\r
+ this.iKeyAssignGuitarCancel.str説明文 = "ギターのキー設定:\nキャンセルボタンへのキーの割り当\nてを設定します。";\r
+ this.list項目リスト.Add( this.iKeyAssignGuitarCancel );\r
+ this.n現在の選択項目 = 0;\r
+ this.eメニュー種別 = Eメニュー種別.KeyAssignGuitar;\r
+ }\r
+ public void t項目リストの設定・System()\r
+ {\r
+ this.tConfigIniへ記録する();\r
+ this.list項目リスト.Clear();\r
+ this.iSystemReturnToMenu = new CItemBase( "<< ReturnTo Menu", CItemBase.Eパネル種別.その他 );\r
+ this.iSystemReturnToMenu.str説明文 = "左側のメニューに戻ります。";\r
+ this.list項目リスト.Add( this.iSystemReturnToMenu );\r
+ this.iSystemGuitar = new CItemToggle( "Guitar", CDTXMania.ConfigIni.bGuitar有効 );\r
+ this.iSystemGuitar.str説明文 = "ギター有効:\nこれを OFF にすると、ギターとベース\nに関するすべてが無効になります。\nつまりは DTXMania がドラム専用の\nゲームとなります。";\r
+ this.list項目リスト.Add( this.iSystemGuitar );\r
+ this.iSystemDrums = new CItemToggle( "Drums", CDTXMania.ConfigIni.bDrums有効 );\r
+ this.iSystemDrums.str説明文 = "ドラム有効:\nこれを OFF にすると、ドラムに関する\nすべてが無効になります。\nつまりは DTXMania がギター専用の\nゲームとなります。";\r
+ this.list項目リスト.Add( this.iSystemDrums );\r
+ this.iSystemFullscreen = new CItemToggle( "Fullscreen", CDTXMania.ConfigIni.b全画面モード );\r
+ this.iSystemFullscreen.str説明文 = "画面モード設定:\nON で全画面モード、OFF でウィンド\nウモードになります。";\r
+ this.list項目リスト.Add( this.iSystemFullscreen );\r
+ this.iSystemStageFailed = new CItemToggle( "StageFailed", CDTXMania.ConfigIni.bSTAGEFAILED有効 );\r
+ this.iSystemStageFailed.str説明文 = "STAGE FAILED 有効:\nON にすると、ゲージがなくなった時\nに STAGE FAILED となり演奏が中断\nされます。OFF の場合は、ゲージが\nなくなっても最後まで演奏できます。";\r
+ this.list項目リスト.Add( this.iSystemStageFailed );\r
+ this.iSystemRandomFromSubBox = new CItemToggle( "RandSubBox", CDTXMania.ConfigIni.bランダムセレクトで子BOXを検索対象とする );\r
+ this.iSystemRandomFromSubBox.str説明文 = "子BOXをRANDOMの対象とする:\nON にすると、RANDOM SELECT 時\nに子BOXも選択対象とします。";\r
+ this.list項目リスト.Add( this.iSystemRandomFromSubBox );\r
+ this.iSystemHHGroup = new CItemList( "HH Group", CItemBase.Eパネル種別.通常, (int) CDTXMania.ConfigIni.eHHGroup, new string[] { "HH-0", "HH-1", "HH-2", "HH-3" } );\r
+ this.iSystemHHGroup.str説明文 = "ハイハットレーン打ち分け設定:\n左シンバル、ハイハットオープン、ハ\nイハットクローズの打ち分け方法を指\n定します。\n HH-0 ... LC | HHC | HHO\n HH-1 ... LC & ( HHC | HHO )\n HH-2 ... LC | ( HHC & HHO )\n HH-3 ... LC & HHC & HHO\n";\r
+ this.list項目リスト.Add( this.iSystemHHGroup );\r
+ this.iSystemFTGroup = new CItemList( "FT Group", CItemBase.Eパネル種別.通常, (int) CDTXMania.ConfigIni.eFTGroup, new string[] { "FT-0", "FT-1" } );\r
+ this.iSystemFTGroup.str説明文 = "フロアタム打ち分け設定:\nロータムとフロアタムの打ち分け方法\nを指定します。\n FT-0 ... LT | FT\n FT-1 ... LT & FT\n";\r
+ this.list項目リスト.Add( this.iSystemFTGroup );\r
+ this.iSystemCYGroup = new CItemList( "CY Group", CItemBase.Eパネル種別.通常, (int) CDTXMania.ConfigIni.eCYGroup, new string[] { "CY-0", "CY-1" } );\r
+ this.iSystemCYGroup.str説明文 = "シンバルレーン打ち分け設定:\n右シンバルとライドシンバルの打ち分\nけ方法を指定します。\n CY-0 ... CY | RD\n CY-1 ... CY & RD\n";\r
+ this.list項目リスト.Add( this.iSystemCYGroup );\r
+ this.iSystemHitSoundPriorityHH = new CItemList( "HH Priority", CItemBase.Eパネル種別.通常, (int) CDTXMania.ConfigIni.eHitSoundPriorityHH, new string[] { "C>P", "P>C" } );\r
+ this.iSystemHitSoundPriorityHH.str説明文 = "発声音決定の優先順位:\nハイハットレーン打ち分け有効時に、\nチップの発声音をどのように決定する\nかを指定します。\n C > P ... チップの音が優先\n P > C ... 叩いたパッドの音が優先";\r
+ this.list項目リスト.Add( this.iSystemHitSoundPriorityHH );\r
+ this.iSystemHitSoundPriorityFT = new CItemList( "FT Priority", CItemBase.Eパネル種別.通常, (int) CDTXMania.ConfigIni.eHitSoundPriorityFT, new string[] { "C>P", "P>C" } );\r
+ this.iSystemHitSoundPriorityFT.str説明文 = "発声音決定の優先順位:\nフロアタム打ち分け有効時に、チップ\nの発声音をどのように決定するかを\n指定します。\n C > P ... チップの音が優先\n P > C ... 叩いたパッドの音が優先";\r
+ this.list項目リスト.Add( this.iSystemHitSoundPriorityFT );\r
+ this.iSystemHitSoundPriorityCY = new CItemList( "CY Priority", CItemBase.Eパネル種別.通常, (int) CDTXMania.ConfigIni.eHitSoundPriorityCY, new string[] { "C>P", "P>C" } );\r
+ this.iSystemHitSoundPriorityCY.str説明文 = "発声音決定の優先順位\nシンバルレーン打ち分け有効時に、\nチップの発声音をどのように決定する\nかを指定します。\n C > P ... チップの音が優先\n P > C ... 叩いたパッドの音が優先";\r
+ this.list項目リスト.Add( this.iSystemHitSoundPriorityCY );\r
+ this.iSystemAdjustWaves = new CItemToggle( "AdjustWaves", CDTXMania.ConfigIni.bWave再生位置自動調整機能有効 );\r
+ this.iSystemAdjustWaves.str説明文 = "サウンド再生位置自動補正:\nハードウェアやOSに起因するサウン\nドのずれを強制的に補正します。\nBGM のように再生時間の長い音声\nデータが使用されている曲で効果が\nあります。";\r
+ this.list項目リスト.Add( this.iSystemAdjustWaves );\r
+ this.iSystemVSyncWait = new CItemToggle( "VSyncWait", CDTXMania.ConfigIni.b垂直帰線待ちを行う );\r
+ this.iSystemVSyncWait.str説明文 = "垂直帰線同期:\n画面の描画をディスプレイの垂直帰\n線中に行なう場合には ON を指定し\nます。ON にすると、ガタつきのない\n滑らかな画面描画が実現されます。";\r
+ this.list項目リスト.Add( this.iSystemVSyncWait );\r
+ this.iSystemAVI = new CItemToggle( "AVI", CDTXMania.ConfigIni.bAVI有効 );\r
+ this.iSystemAVI.str説明文 = "AVIの使用:\n動画(AVI)を再生可能にする場合に\nON にします。AVI の再生には、それ\nなりのマシンパワーが必要とされます。";\r
+ this.list項目リスト.Add( this.iSystemAVI );\r
+ this.iSystemBGA = new CItemToggle( "BGA", CDTXMania.ConfigIni.bBGA有効 );\r
+ this.iSystemBGA.str説明文 = "BGAの使用:\n画像(BGA)を表示可能にする場合に\nON にします。BGA の再生には、それ\nなりのマシンパワーが必要とされます。";\r
+ this.list項目リスト.Add( this.iSystemBGA );\r
+ this.iSystemFillIn = new CItemToggle( "FillIn", CDTXMania.ConfigIni.bフィルイン有効 );\r
+ this.iSystemFillIn.str説明文 = "フィルインエフェクトの使用:\nフィルイン区間の爆発パターンに特別\nのエフェクトを使用します。\nフィルインエフェクトの描画にはそれな\nりのマシンパワーが必要とされます。";\r
+ this.list項目リスト.Add( this.iSystemFillIn );\r
+ this.iSystemSoundMonitorDrums = new CItemToggle( "DrumsMonitor", CDTXMania.ConfigIni.b演奏音を強調する.Drums );\r
+ this.iSystemSoundMonitorDrums.str説明文 = "ドラム音モニタ:\nドラム音を他の音より大きめの音量で\n発声します。\nただし、オートプレイの場合は通常音\n量で発声されます。";\r
+ this.list項目リスト.Add( this.iSystemSoundMonitorDrums );\r
+ this.iSystemSoundMonitorGuitar = new CItemToggle( "GuitarMonitor", CDTXMania.ConfigIni.b演奏音を強調する.Guitar );\r
+ this.iSystemSoundMonitorGuitar.str説明文 = "ギター音モニタ:\nギター音を他の音より大きめの音量\nで発声します。\nただし、オートプレイの場合は通常音\n量で発声されます。";\r
+ this.list項目リスト.Add( this.iSystemSoundMonitorGuitar );\r
+ this.iSystemSoundMonitorBass = new CItemToggle( "BassMonitor", CDTXMania.ConfigIni.b演奏音を強調する.Bass );\r
+ this.iSystemSoundMonitorBass.str説明文 = "ベース音モニタ:\nベース音を他の音より大きめの音量\nで発声します。\nただし、オートプレイの場合は通常音\n量で発声されます。";\r
+ this.list項目リスト.Add( this.iSystemSoundMonitorBass );\r
+ this.iSystemPreviewSoundWait = new CItemInteger( "PreSoundWait", 0, 0x2710, CDTXMania.ConfigIni.n曲が選択されてからプレビュー音が鳴るまでのウェイトms );\r
+ this.iSystemPreviewSoundWait.str説明文 = "プレビュー音演奏までの時間:\n曲にカーソルが合わされてからプレ\nビュー音が鳴り始めるまでの時間を\n指定します。\n0 ~ 10000 [ms] が指定可能です。";\r
+ this.list項目リスト.Add( this.iSystemPreviewSoundWait );\r
+ this.iSystemPreviewImageWait = new CItemInteger( "PreImageWait", 0, 0x2710, CDTXMania.ConfigIni.n曲が選択されてからプレビュー画像が表示開始されるまでのウェイトms );\r
+ this.iSystemPreviewImageWait.str説明文 = "プレビュー画像表示までの時間:\n曲にカーソルが合わされてからプレ\nビュー画像が表示されるまでの時間\nを指定します。\n0 ~ 10000 [ms] が指定可能です。";\r
+ this.list項目リスト.Add( this.iSystemPreviewImageWait );\r
+ this.iSystemDebugInfo = new CItemToggle( "Debug Info", CDTXMania.ConfigIni.b演奏情報を表示する );\r
+ this.iSystemDebugInfo.str説明文 = "演奏情報の表示:\n演奏中、BGA領域の下部に演奏情報\n(FPS、BPM、演奏時間など)を表示し\nます。\nまた、小節線の横に小節番号が表示\nされるようになります。";\r
+ this.list項目リスト.Add( this.iSystemDebugInfo );\r
+ this.iSystemBGAlpha = new CItemInteger( "BG Alpha", 0, 0xff, CDTXMania.ConfigIni.n背景の透過度 );\r
+ this.iSystemBGAlpha.str説明文 = "背景画像の半透明割合:\n背景画像をDTXManiaのフレーム画像\nと合成する際の、背景画像の透明度\nを指定します。\n0 が完全透明で、255 が完全不透明\nとなります。";\r
+ this.list項目リスト.Add( this.iSystemBGAlpha );\r
+ this.iSystemBGMSound = new CItemToggle( "BGM Sound", CDTXMania.ConfigIni.bBGM音を発声する );\r
+ this.iSystemBGMSound.str説明文 = "BGMの再生:\nこれをOFFにすると、BGM を再生しな\nくなります。";\r
+ this.list項目リスト.Add( this.iSystemBGMSound );\r
+ this.iSystemHitSound = new CItemToggle( "HitSound", CDTXMania.ConfigIni.bドラム打音を発声する );\r
+ this.iSystemHitSound.str説明文 = "打撃音の再生:\nこれをOFFにすると、パッドを叩いた\nときの音を再生しなくなります(ドラム\nのみ)。\nDTX の音色で演奏したい場合などに\nOFF にします。";\r
+ this.list項目リスト.Add( this.iSystemHitSound );\r
+ this.iSystemAudienceSound = new CItemToggle( "Audience", CDTXMania.ConfigIni.b歓声を発声する );\r
+ this.iSystemAudienceSound.str説明文 = "歓声の再生:\nこれをOFFにすると、歓声を再生しな\nくなります。";\r
+ this.list項目リスト.Add( this.iSystemAudienceSound );\r
+ this.iSystemDamageLevel = new CItemList( "DamageLevel", CItemBase.Eパネル種別.通常, (int) CDTXMania.ConfigIni.eダメージレベル, new string[] { "Small", "Normal", "Large" } );\r
+ this.iSystemDamageLevel.str説明文 = "ゲージ減少割合:\nMiss ヒット時のゲージの減少度合い\nを指定します。\n";\r
+ this.list項目リスト.Add( this.iSystemDamageLevel );\r
+ this.iSystemSaveScore = new CItemToggle( "SaveScore", CDTXMania.ConfigIni.bScoreIniを出力する );\r
+ this.iSystemSaveScore.str説明文 = "演奏記録の保存:\nON で演奏記録を ~.score.ini ファイ\nルに保存します。\n";\r
+ this.list項目リスト.Add( this.iSystemSaveScore );\r
+ this.iSystemMinComboDrums = new CItemInteger( "D-MinCombo", 1, 0x1869f, CDTXMania.ConfigIni.n表示可能な最小コンボ数.Drums );\r
+ this.iSystemMinComboDrums.str説明文 = "表示可能な最小コンボ数(ドラム):\n画面に表示されるコンボの最小の数\nを指定します。\n1 ~ 99999 の値が指定可能です。";\r
+ this.list項目リスト.Add( this.iSystemMinComboDrums );\r
+ this.iSystemMinComboGuitar = new CItemInteger( "G-MinCombo", 1, 0x1869f, CDTXMania.ConfigIni.n表示可能な最小コンボ数.Guitar );\r
+ this.iSystemMinComboGuitar.str説明文 = "表示可能な最小コンボ数(ギター):\n画面に表示されるコンボの最小の数\nを指定します。\n1 ~ 99999 の値が指定可能です。";\r
+ this.list項目リスト.Add( this.iSystemMinComboGuitar );\r
+ this.iSystemMinComboBass = new CItemInteger( "B-MinCombo", 1, 0x1869f, CDTXMania.ConfigIni.n表示可能な最小コンボ数.Bass );\r
+ this.iSystemMinComboBass.str説明文 = "表示可能な最小コンボ数(ベース):\n画面に表示されるコンボの最小の数\nを指定します。\n1 ~ 99999 の値が指定可能です。";\r
+ this.list項目リスト.Add( this.iSystemMinComboBass );\r
+ this.iSystemChipVolume = new CItemInteger( "ChipVolume", 0, 100, CDTXMania.ConfigIni.n手動再生音量 );\r
+ this.iSystemChipVolume.str説明文 = "打音の音量:\n入力に反応して再生されるチップの音\n量を指定します。\n0 ~ 100 % の値が指定可能です。\n";\r
+ this.list項目リスト.Add( this.iSystemChipVolume );\r
+ this.iSystemAutoChipVolume = new CItemInteger( "AutoVolume", 0, 100, CDTXMania.ConfigIni.n自動再生音量 );\r
+ this.iSystemAutoChipVolume.str説明文 = "自動再生音の音量:\n自動的に再生されるチップの音量を指\n定します。\n0 ~ 100 % の値が指定可能です。\n";\r
+ this.list項目リスト.Add( this.iSystemAutoChipVolume );\r
+ this.iSystemStoicMode = new CItemToggle( "StoicMode", CDTXMania.ConfigIni.bストイックモード );\r
+ this.iSystemStoicMode.str説明文 = "ストイック(禁欲)モード:\n以下をまとめて表示ON/OFFします。\n・プレビュー画像/動画\n・リザルト画像/動画\n・NowLoading画像\n・演奏画面の背景画像\n・BGA 画像\n・AVI 動画\n";\r
+ this.list項目リスト.Add( this.iSystemStoicMode );\r
+ this.iSystemCymbalFree = new CItemToggle( "CymbalFree", CDTXMania.ConfigIni.bシンバルフリー );\r
+ this.iSystemCymbalFree.str説明文 = "シンバルフリーモード:\n左シンバル・右シンバルの区別をなく\nします。ライドシンバルまで区別をな\nくすか否かは、CYGroup に従います。\n";\r
+ this.list項目リスト.Add( this.iSystemCymbalFree );\r
+ this.iSystemBufferedInput = new CItemToggle( "BufferedInput", CDTXMania.ConfigIni.bバッファ入力を行う );\r
+ this.iSystemBufferedInput.str説明文 = "バッファ入力モード:\nON にすると、FPS を超える入力解像\n度を実現します。\nOFF にすると、入力解像度は FPS に\n等しくなります。";\r
+ this.list項目リスト.Add( this.iSystemBufferedInput );\r
+ this.iLogOutputLog = new CItemToggle( "TraceLog", CDTXMania.ConfigIni.bログ出力 );\r
+ this.iLogOutputLog.str説明文 = "Traceログ出力:\nDTXManiaLog.txt にログを出力します。\n変更した場合は、DTXMania の再起動\n後に有効となります。";\r
+ this.list項目リスト.Add( this.iLogOutputLog );\r
+ this.n現在の選択項目 = 0;\r
+ this.eメニュー種別 = Eメニュー種別.System;\r
+ }\r
+ public void t次に移動()\r
+ {\r
+ CDTXMania.Skin.soundカーソル移動音.t再生する();\r
+ if( this.b要素値にフォーカス中 )\r
+ {\r
+ this.list項目リスト[ this.n現在の選択項目 ].t項目値を前へ移動();\r
+ }\r
+ else\r
+ {\r
+ this.n目標のスクロールカウンタ += 100;\r
+ }\r
+ }\r
+ public void t前に移動()\r
+ {\r
+ CDTXMania.Skin.soundカーソル移動音.t再生する();\r
+ if( this.b要素値にフォーカス中 )\r
+ {\r
+ this.list項目リスト[ this.n現在の選択項目 ].t項目値を次へ移動();\r
+ }\r
+ else\r
+ {\r
+ this.n目標のスクロールカウンタ -= 100;\r
+ }\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ this.list項目リスト = new List<CItemBase>();\r
+ this.eメニュー種別 = Eメニュー種別.Unknown;\r
+ this.t項目リストの設定・System();\r
+ this.b要素値にフォーカス中 = false;\r
+ this.n目標のスクロールカウンタ = 0;\r
+ this.n現在のスクロールカウンタ = 0;\r
+ this.nスクロール用タイマ値 = -1;\r
+ this.ct三角矢印アニメ = new CCounter();\r
+ base.On活性化();\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ this.tConfigIniへ記録する();\r
+ this.list項目リスト.Clear();\r
+ this.ct三角矢印アニメ = null;\r
+ base.On非活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.tx通常項目行パネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenConfig itembox.png" ), false );\r
+ this.txその他項目行パネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenConfig itembox other.png" ), false );\r
+ this.tx三角矢印 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenConfig triangle arrow.png" ), false );\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.tx通常項目行パネル );\r
+ CDTXMania.tテクスチャの解放( ref this.txその他項目行パネル );\r
+ CDTXMania.tテクスチャの解放( ref this.tx三角矢印 );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ throw new InvalidOperationException( "t進行描画(bool)のほうを使用してください。" );\r
+ }\r
+ public int t進行描画( bool b項目リスト側にフォーカスがある )\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ if( base.b初めての進行描画 )\r
+ {\r
+ this.nスクロール用タイマ値 = CDTXMania.Timer.n現在時刻;\r
+ this.ct三角矢印アニメ.t開始( 0, 9, 50, CDTXMania.Timer );\r
+ base.b初めての進行描画 = false;\r
+ }\r
+ this.b項目リスト側にフォーカスがある = b項目リスト側にフォーカスがある;\r
+ long num = CDTXMania.Timer.n現在時刻;\r
+ if( num < this.nスクロール用タイマ値 )\r
+ {\r
+ this.nスクロール用タイマ値 = num;\r
+ }\r
+ while( ( num - this.nスクロール用タイマ値 ) >= 2 )\r
+ {\r
+ int num2 = Math.Abs( (int) ( this.n目標のスクロールカウンタ - this.n現在のスクロールカウンタ ) );\r
+ int num3 = 0;\r
+ if( num2 <= 100 )\r
+ {\r
+ num3 = 2;\r
+ }\r
+ else if( num2 <= 300 )\r
+ {\r
+ num3 = 3;\r
+ }\r
+ else if( num2 <= 500 )\r
+ {\r
+ num3 = 4;\r
+ }\r
+ else\r
+ {\r
+ num3 = 8;\r
+ }\r
+ if( this.n現在のスクロールカウンタ < this.n目標のスクロールカウンタ )\r
+ {\r
+ this.n現在のスクロールカウンタ += num3;\r
+ if( this.n現在のスクロールカウンタ > this.n目標のスクロールカウンタ )\r
+ {\r
+ this.n現在のスクロールカウンタ = this.n目標のスクロールカウンタ;\r
+ }\r
+ }\r
+ else if( this.n現在のスクロールカウンタ > this.n目標のスクロールカウンタ )\r
+ {\r
+ this.n現在のスクロールカウンタ -= num3;\r
+ if( this.n現在のスクロールカウンタ < this.n目標のスクロールカウンタ )\r
+ {\r
+ this.n現在のスクロールカウンタ = this.n目標のスクロールカウンタ;\r
+ }\r
+ }\r
+ if( this.n現在のスクロールカウンタ >= 100 )\r
+ {\r
+ this.n現在の選択項目 = this.t次の項目( this.n現在の選択項目 );\r
+ this.n現在のスクロールカウンタ -= 100;\r
+ this.n目標のスクロールカウンタ -= 100;\r
+ if( this.n目標のスクロールカウンタ == 0 )\r
+ {\r
+ CDTXMania.stageコンフィグ.t項目変更通知();\r
+ }\r
+ }\r
+ else if( this.n現在のスクロールカウンタ <= -100 )\r
+ {\r
+ this.n現在の選択項目 = this.t前の項目( this.n現在の選択項目 );\r
+ this.n現在のスクロールカウンタ += 100;\r
+ this.n目標のスクロールカウンタ += 100;\r
+ if( this.n目標のスクロールカウンタ == 0 )\r
+ {\r
+ CDTXMania.stageコンフィグ.t項目変更通知();\r
+ }\r
+ }\r
+ this.nスクロール用タイマ値 += 2;\r
+ }\r
+ if( this.b項目リスト側にフォーカスがある && ( this.n目標のスクロールカウンタ == 0 ) )\r
+ {\r
+ this.ct三角矢印アニメ.t進行Loop();\r
+ }\r
+ this.ptパネルの基本座標[ 4 ].X = this.b項目リスト側にフォーカスがある ? 0x114 : 0x12d;\r
+ int nItem = this.n現在の選択項目;\r
+ for( int i = 0; i < 4; i++ )\r
+ {\r
+ nItem = this.t前の項目( nItem );\r
+ }\r
+ for( int j = -4; j < 6; j++ )\r
+ {\r
+ if( ( ( j == -4 ) && ( this.n現在のスクロールカウンタ > 0 ) ) || ( ( j == 5 ) && ( this.n現在のスクロールカウンタ < 0 ) ) )\r
+ {\r
+ nItem = this.t次の項目( nItem );\r
+ continue;\r
+ }\r
+ int index = j + 4;\r
+ int num8 = ( this.n現在のスクロールカウンタ <= 0 ) ? ( ( ( j + 4 ) + 1 ) % 10 ) : ( ( ( ( j + 4 ) - 1 ) + 10 ) % 10 );\r
+ int x = this.ptパネルの基本座標[ index ].X + ( (int) ( ( this.ptパネルの基本座標[ num8 ].X - this.ptパネルの基本座標[ index ].X ) * ( ( (double) Math.Abs( this.n現在のスクロールカウンタ ) ) / 100.0 ) ) );\r
+ int y = this.ptパネルの基本座標[ index ].Y + ( (int) ( ( this.ptパネルの基本座標[ num8 ].Y - this.ptパネルの基本座標[ index ].Y ) * ( ( (double) Math.Abs( this.n現在のスクロールカウンタ ) ) / 100.0 ) ) );\r
+ switch( this.list項目リスト[ nItem ].eパネル種別 )\r
+ {\r
+ case CItemBase.Eパネル種別.通常:\r
+ if( this.tx通常項目行パネル != null )\r
+ {\r
+ this.tx通常項目行パネル.t2D描画( CDTXMania.app.Device, x, y );\r
+ }\r
+ break;\r
+\r
+ case CItemBase.Eパネル種別.その他:\r
+ if( this.txその他項目行パネル != null )\r
+ {\r
+ this.txその他項目行パネル.t2D描画( CDTXMania.app.Device, x, y );\r
+ }\r
+ break;\r
+ }\r
+ CDTXMania.stageコンフィグ.actFont.t文字列描画( x + 0x12, y + 12, this.list項目リスト[ nItem ].str項目名 );\r
+ switch( this.list項目リスト[ nItem ].e種別 )\r
+ {\r
+ case CItemBase.E種別.ONorOFFトグル:\r
+ CDTXMania.stageコンフィグ.actFont.t文字列描画( x + 210, y + 12, ( (CItemToggle) this.list項目リスト[ nItem ] ).bON ? "ON" : "OFF" );\r
+ break;\r
+\r
+ case CItemBase.E種別.ONorOFFor不定スリーステート:\r
+ switch( ( (CItemThreeState) this.list項目リスト[ nItem ] ).e現在の状態 )\r
+ {\r
+ case CItemThreeState.E状態.ON:\r
+ CDTXMania.stageコンフィグ.actFont.t文字列描画( x + 210, y + 12, "ON" );\r
+ break;\r
+\r
+ case CItemThreeState.E状態.不定:\r
+ CDTXMania.stageコンフィグ.actFont.t文字列描画( x + 210, y + 12, "- -" );\r
+ break;\r
+\r
+ default:\r
+ CDTXMania.stageコンフィグ.actFont.t文字列描画( x + 210, y + 12, "OFF" );\r
+ break;\r
+ }\r
+ break;\r
+\r
+ case CItemBase.E種別.整数:\r
+ CDTXMania.stageコンフィグ.actFont.t文字列描画( x + 210, y + 12, ( (CItemInteger) this.list項目リスト[ nItem ] ).n現在の値.ToString(), ( j == 0 ) && this.b要素値にフォーカス中 );\r
+ break;\r
+\r
+ case CItemBase.E種別.リスト:\r
+ {\r
+ CItemList list = (CItemList) this.list項目リスト[ nItem ];\r
+ CDTXMania.stageコンフィグ.actFont.t文字列描画( x + 210, y + 12, list.list項目値[ list.n現在選択されている項目番号 ] );\r
+ break;\r
+ }\r
+ }\r
+\r
+\r
+ nItem = this.t次の項目( nItem );\r
+ }\r
+ if( this.b項目リスト側にフォーカスがある && ( this.n目標のスクロールカウンタ == 0 ) )\r
+ {\r
+ int num11;\r
+ int num12;\r
+ int num13;\r
+ if( !this.b要素値にフォーカス中 )\r
+ {\r
+ num11 = 0x114;\r
+ num12 = 0xba - this.ct三角矢印アニメ.n現在の値;\r
+ num13 = 0xfe + this.ct三角矢印アニメ.n現在の値;\r
+ }\r
+ else\r
+ {\r
+ num11 = 0x210;\r
+ num12 = 0xc6 - this.ct三角矢印アニメ.n現在の値;\r
+ num13 = 0xf2 + this.ct三角矢印アニメ.n現在の値;\r
+ }\r
+ if( this.tx三角矢印 != null )\r
+ {\r
+ this.tx三角矢印.t2D描画( CDTXMania.app.Device, num11, num12, new Rectangle( 0, 0, 0x20, 0x10 ) );\r
+ this.tx三角矢印.t2D描画( CDTXMania.app.Device, num11, num13, new Rectangle( 0, 0x10, 0x20, 0x10 ) );\r
+ }\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private enum Eメニュー種別\r
+ {\r
+ System,\r
+ KeyAssignDrums,\r
+ KeyAssignGuitar,\r
+ KeyAssignBass,\r
+ Unknown\r
+ }\r
+\r
+ private bool b項目リスト側にフォーカスがある;\r
+ private bool b要素値にフォーカス中;\r
+ private CCounter ct三角矢印アニメ;\r
+ private Eメニュー種別 eメニュー種別;\r
+ private CItemBase iKeyAssignBassB;\r
+ private CItemBase iKeyAssignBassCancel;\r
+ private CItemBase iKeyAssignBassDecide;\r
+ private CItemBase iKeyAssignBassG;\r
+ private CItemBase iKeyAssignBassPick;\r
+ private CItemBase iKeyAssignBassR;\r
+ private CItemBase iKeyAssignBassReturnToMenu;\r
+ private CItemBase iKeyAssignBassWail;\r
+ private CItemBase iKeyAssignDrumsBD;\r
+ private CItemBase iKeyAssignDrumsCY;\r
+ private CItemBase iKeyAssignDrumsFT;\r
+ private CItemBase iKeyAssignDrumsHHC;\r
+ private CItemBase iKeyAssignDrumsHHO;\r
+ private CItemBase iKeyAssignDrumsHT;\r
+ private CItemBase iKeyAssignDrumsLC;\r
+ private CItemBase iKeyAssignDrumsLT;\r
+ private CItemBase iKeyAssignDrumsRD;\r
+ private CItemBase iKeyAssignDrumsReturnToMenu;\r
+ private CItemBase iKeyAssignDrumsSD;\r
+ private CItemBase iKeyAssignGuitarB;\r
+ private CItemBase iKeyAssignGuitarCancel;\r
+ private CItemBase iKeyAssignGuitarDecide;\r
+ private CItemBase iKeyAssignGuitarG;\r
+ private CItemBase iKeyAssignGuitarPick;\r
+ private CItemBase iKeyAssignGuitarR;\r
+ private CItemBase iKeyAssignGuitarReturnToMenu;\r
+ private CItemBase iKeyAssignGuitarWail;\r
+ private CItemToggle iLogOutputLog;\r
+ private CItemToggle iSystemAdjustWaves;\r
+ private CItemToggle iSystemAudienceSound;\r
+ private CItemInteger iSystemAutoChipVolume;\r
+ private CItemToggle iSystemAVI;\r
+ private CItemToggle iSystemBGA;\r
+ private CItemInteger iSystemBGAlpha;\r
+ private CItemToggle iSystemBGMSound;\r
+ private CItemInteger iSystemChipVolume;\r
+ private CItemList iSystemCYGroup;\r
+ private CItemToggle iSystemCymbalFree;\r
+ private CItemList iSystemDamageLevel;\r
+ private CItemToggle iSystemDebugInfo;\r
+ private CItemToggle iSystemDrums;\r
+ private CItemToggle iSystemFillIn;\r
+ private CItemList iSystemFTGroup;\r
+ private CItemToggle iSystemFullscreen;\r
+ private CItemToggle iSystemGuitar;\r
+ private CItemList iSystemHHGroup;\r
+ private CItemToggle iSystemHitSound;\r
+ private CItemList iSystemHitSoundPriorityCY;\r
+ private CItemList iSystemHitSoundPriorityFT;\r
+ private CItemList iSystemHitSoundPriorityHH;\r
+ private CItemInteger iSystemMinComboBass;\r
+ private CItemInteger iSystemMinComboDrums;\r
+ private CItemInteger iSystemMinComboGuitar;\r
+ private CItemInteger iSystemPreviewImageWait;\r
+ private CItemInteger iSystemPreviewSoundWait;\r
+ private CItemToggle iSystemRandomFromSubBox;\r
+ private CItemBase iSystemReturnToMenu;\r
+ private CItemToggle iSystemSaveScore;\r
+ private CItemToggle iSystemSoundMonitorBass;\r
+ private CItemToggle iSystemSoundMonitorDrums;\r
+ private CItemToggle iSystemSoundMonitorGuitar;\r
+ private CItemToggle iSystemStageFailed;\r
+ private CItemToggle iSystemStoicMode;\r
+ private CItemToggle iSystemVSyncWait;\r
+ private CItemToggle iSystemBufferedInput;\r
+ private List<CItemBase> list項目リスト;\r
+ private long nスクロール用タイマ値;\r
+ private int n現在のスクロールカウンタ;\r
+ private int n目標のスクロールカウンタ;\r
+ private Point[] ptパネルの基本座標 = new Point[] { new Point( 0x12d, 3 ), new Point( 0x12d, 0x35 ), new Point( 0x12d, 0x67 ), new Point( 0x12d, 0x99 ), new Point( 0x114, 0xcb ), new Point( 0x12d, 0xfd ), new Point( 0x12d, 0x12f ), new Point( 0x12d, 0x161 ), new Point( 0x12d, 0x193 ), new Point( 0x12d, 0x1c5 ) };\r
+ private CTexture txその他項目行パネル;\r
+ private CTexture tx三角矢印;\r
+ private CTexture tx通常項目行パネル;\r
+\r
+ private int t前の項目( int nItem )\r
+ {\r
+ if( --nItem < 0 )\r
+ {\r
+ nItem = this.list項目リスト.Count - 1;\r
+ }\r
+ return nItem;\r
+ }\r
+ private int t次の項目( int nItem )\r
+ {\r
+ if( ++nItem >= this.list項目リスト.Count )\r
+ {\r
+ nItem = 0;\r
+ }\r
+ return nItem;\r
+ }\r
+ private void tConfigIniへ記録する()\r
+ {\r
+ switch( this.eメニュー種別 )\r
+ {\r
+ case Eメニュー種別.System:\r
+ this.tConfigIniへ記録する・System();\r
+ return;\r
+\r
+ case Eメニュー種別.KeyAssignDrums:\r
+ this.tConfigIniへ記録する・KeyAssignDrums();\r
+ return;\r
+\r
+ case Eメニュー種別.KeyAssignGuitar:\r
+ this.tConfigIniへ記録する・KeyAssignGuitar();\r
+ return;\r
+\r
+ case Eメニュー種別.KeyAssignBass:\r
+ this.tConfigIniへ記録する・KeyAssignBass();\r
+ return;\r
+ }\r
+ }\r
+ private void tConfigIniへ記録する・KeyAssignBass()\r
+ {\r
+ }\r
+ private void tConfigIniへ記録する・KeyAssignDrums()\r
+ {\r
+ }\r
+ private void tConfigIniへ記録する・KeyAssignGuitar()\r
+ {\r
+ }\r
+ private void tConfigIniへ記録する・System()\r
+ {\r
+ CDTXMania.ConfigIni.bGuitar有効 = this.iSystemGuitar.bON;\r
+ CDTXMania.ConfigIni.bDrums有効 = this.iSystemDrums.bON;\r
+ CDTXMania.ConfigIni.b全画面モード = this.iSystemFullscreen.bON;\r
+ CDTXMania.ConfigIni.bSTAGEFAILED有効 = this.iSystemStageFailed.bON;\r
+ CDTXMania.ConfigIni.bランダムセレクトで子BOXを検索対象とする = this.iSystemRandomFromSubBox.bON;\r
+ CDTXMania.ConfigIni.eHHGroup = (EHHGroup) this.iSystemHHGroup.n現在選択されている項目番号;\r
+ CDTXMania.ConfigIni.eFTGroup = (EFTGroup) this.iSystemFTGroup.n現在選択されている項目番号;\r
+ CDTXMania.ConfigIni.eCYGroup = (ECYGroup) this.iSystemCYGroup.n現在選択されている項目番号;\r
+ CDTXMania.ConfigIni.eHitSoundPriorityHH = (E打ち分け時の再生の優先順位) this.iSystemHitSoundPriorityHH.n現在選択されている項目番号;\r
+ CDTXMania.ConfigIni.eHitSoundPriorityFT = (E打ち分け時の再生の優先順位) this.iSystemHitSoundPriorityFT.n現在選択されている項目番号;\r
+ CDTXMania.ConfigIni.eHitSoundPriorityCY = (E打ち分け時の再生の優先順位) this.iSystemHitSoundPriorityCY.n現在選択されている項目番号;\r
+ CDTXMania.ConfigIni.bWave再生位置自動調整機能有効 = this.iSystemAdjustWaves.bON;\r
+ CDTXMania.ConfigIni.b垂直帰線待ちを行う = this.iSystemVSyncWait.bON;\r
+ CDTXMania.ConfigIni.bバッファ入力を行う = this.iSystemBufferedInput.bON;\r
+ CDTXMania.ConfigIni.bAVI有効 = this.iSystemAVI.bON;\r
+ CDTXMania.ConfigIni.bBGA有効 = this.iSystemBGA.bON;\r
+ CDTXMania.ConfigIni.bフィルイン有効 = this.iSystemFillIn.bON;\r
+ CDTXMania.ConfigIni.b演奏音を強調する.Drums = this.iSystemSoundMonitorDrums.bON;\r
+ CDTXMania.ConfigIni.b演奏音を強調する.Guitar = this.iSystemSoundMonitorGuitar.bON;\r
+ CDTXMania.ConfigIni.b演奏音を強調する.Bass = this.iSystemSoundMonitorBass.bON;\r
+ CDTXMania.ConfigIni.n曲が選択されてからプレビュー音が鳴るまでのウェイトms = this.iSystemPreviewSoundWait.n現在の値;\r
+ CDTXMania.ConfigIni.n曲が選択されてからプレビュー画像が表示開始されるまでのウェイトms = this.iSystemPreviewImageWait.n現在の値;\r
+ CDTXMania.ConfigIni.b演奏情報を表示する = this.iSystemDebugInfo.bON;\r
+ CDTXMania.ConfigIni.n背景の透過度 = this.iSystemBGAlpha.n現在の値;\r
+ CDTXMania.ConfigIni.bBGM音を発声する = this.iSystemBGMSound.bON;\r
+ CDTXMania.ConfigIni.bドラム打音を発声する = this.iSystemHitSound.bON;\r
+ CDTXMania.ConfigIni.b歓声を発声する = this.iSystemAudienceSound.bON;\r
+ CDTXMania.ConfigIni.eダメージレベル = (Eダメージレベル) this.iSystemDamageLevel.n現在選択されている項目番号;\r
+ CDTXMania.ConfigIni.bScoreIniを出力する = this.iSystemSaveScore.bON;\r
+ CDTXMania.ConfigIni.n表示可能な最小コンボ数.Drums = this.iSystemMinComboDrums.n現在の値;\r
+ CDTXMania.ConfigIni.n表示可能な最小コンボ数.Guitar = this.iSystemMinComboGuitar.n現在の値;\r
+ CDTXMania.ConfigIni.n表示可能な最小コンボ数.Bass = this.iSystemMinComboBass.n現在の値;\r
+ CDTXMania.ConfigIni.bログ出力 = this.iLogOutputLog.bON;\r
+ CDTXMania.ConfigIni.n手動再生音量 = this.iSystemChipVolume.n現在の値;\r
+ CDTXMania.ConfigIni.n自動再生音量 = this.iSystemAutoChipVolume.n現在の値;\r
+ CDTXMania.ConfigIni.bストイックモード = this.iSystemStoicMode.bON;\r
+ CDTXMania.ConfigIni.bシンバルフリー = this.iSystemCymbalFree.bON;\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using System.Drawing;\r
+using System.Diagnostics;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CStageコンフィグ : CStage\r
+ {\r
+ // プロパティ\r
+\r
+ public CActDFPFont actFont { get; private set; }\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public CStageコンフィグ()\r
+ {\r
+ CActDFPFont font;\r
+ base.eステージID = CStage.Eステージ.コンフィグ;\r
+ base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
+ this.actFont = font = new CActDFPFont();\r
+ base.list子Activities.Add( font );\r
+ base.list子Activities.Add( this.actFIFO = new CActFIFOWhite() );\r
+ base.list子Activities.Add( this.actList = new CActConfigList() );\r
+ base.list子Activities.Add( this.actKeyAssign = new CActConfigKeyAssign() );\r
+ base.list子Activities.Add( this.actオプションパネル = new CActオプションパネル() );\r
+ base.b活性化してない = true;\r
+ }\r
+ \r
+ \r
+ // メソッド\r
+\r
+ public void tアサイン完了通知()\r
+ {\r
+ this.eItemPanelモード = EItemPanelモード.パッド一覧;\r
+ }\r
+ public void tパッド選択通知( E楽器パート part, Eパッド pad )\r
+ {\r
+ this.actKeyAssign.t開始( part, pad, this.actList.ib現在の選択項目.str項目名 );\r
+ this.eItemPanelモード = EItemPanelモード.キーコード一覧;\r
+ }\r
+ public void t項目変更通知()\r
+ {\r
+ this.t説明文パネルに現在選択されている項目の説明を描画する();\r
+ }\r
+\r
+ \r
+ // CStage 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ Trace.TraceInformation( "コンフィグステージを活性化します。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ this.n現在のメニュー番号 = 0;\r
+ this.ftフォント = new Font( "MS PGothic", 26f, GraphicsUnit.Pixel );\r
+ for( int i = 0; i < 4; i++ )\r
+ {\r
+ this.ctキー反復用[ i ] = new CCounter( 0, 0, 0, CDTXMania.Timer );\r
+ }\r
+ this.bメニューにフォーカス中 = true;\r
+ this.eItemPanelモード = EItemPanelモード.パッド一覧;\r
+ base.On活性化();\r
+ }\r
+ finally\r
+ {\r
+ Trace.TraceInformation( "コンフィグステージの活性化を完了しました。" );\r
+ Trace.Unindent();\r
+ }\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ Trace.TraceInformation( "コンフィグステージを非活性化します。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ CDTXMania.ConfigIni.t書き出し( CDTXMania.strEXEのあるフォルダ + "Config.ini" );\r
+ if( this.ftフォント != null )\r
+ {\r
+ this.ftフォント.Dispose();\r
+ this.ftフォント = null;\r
+ }\r
+ for( int i = 0; i < 4; i++ )\r
+ {\r
+ this.ctキー反復用[ i ] = null;\r
+ }\r
+ base.On非活性化();\r
+ }\r
+ finally\r
+ {\r
+ Trace.TraceInformation( "コンフィグステージの非活性化を完了しました。" );\r
+ Trace.Unindent();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.tx背景 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenConfig background.jpg" ), false );\r
+ this.tx上部パネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenConfig header panel.png" ), true );\r
+ this.tx下部パネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenConfig footer panel.png" ), true );\r
+ this.txMenuカーソル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenConfig menu cursor.png" ), false );\r
+ if( this.bメニューにフォーカス中 )\r
+ {\r
+ this.t説明文パネルに現在選択されているメニューの説明を描画する();\r
+ }\r
+ else\r
+ {\r
+ this.t説明文パネルに現在選択されている項目の説明を描画する();\r
+ }\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.tx背景 );\r
+ CDTXMania.tテクスチャの解放( ref this.tx上部パネル );\r
+ CDTXMania.tテクスチャの解放( ref this.tx下部パネル );\r
+ CDTXMania.tテクスチャの解放( ref this.txMenuカーソル );\r
+ CDTXMania.tテクスチャの解放( ref this.tx説明文パネル );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( base.b活性化してない )\r
+ return 0;\r
+\r
+ if( base.b初めての進行描画 )\r
+ {\r
+ base.eフェーズID = CStage.Eフェーズ.共通_フェードイン;\r
+ this.actFIFO.tフェードイン開始();\r
+ base.b初めての進行描画 = false;\r
+ }\r
+\r
+ // 描画\r
+\r
+ #region [ 背景 ]\r
+ //---------------------\r
+ if( this.tx背景 != null )\r
+ this.tx背景.t2D描画( CDTXMania.app.Device, 0, 0 );\r
+ //---------------------\r
+ #endregion\r
+ #region [ メニューカーソル ]\r
+ //---------------------\r
+ if( this.txMenuカーソル != null )\r
+ {\r
+ Rectangle rectangle;\r
+ this.txMenuカーソル.n透明度 = this.bメニューにフォーカス中 ? 0xff : 0x80;\r
+ int x = 0x37;\r
+ int y = 0x61 + ( this.n現在のメニュー番号 * 0x19 );\r
+ int num3 = 170;\r
+ this.txMenuカーソル.t2D描画( CDTXMania.app.Device, x, y, new Rectangle( 0, 0, 0x10, 0x20 ) );\r
+ this.txMenuカーソル.t2D描画( CDTXMania.app.Device, ( x + num3 ) - 0x10, y, new Rectangle( 10, 0, 0x10, 0x20 ) );\r
+ x += 0x10;\r
+ for( num3 -= 0x20; num3 > 0; num3 -= rectangle.Width )\r
+ {\r
+ rectangle = new Rectangle( 8, 0, 0x10, 0x20 );\r
+ if( num3 < 0x10 )\r
+ {\r
+ rectangle.Width -= 0x10 - num3;\r
+ }\r
+ this.txMenuカーソル.t2D描画( CDTXMania.app.Device, x, y, rectangle );\r
+ x += rectangle.Width;\r
+ }\r
+ }\r
+ //---------------------\r
+ #endregion\r
+ #region [ メニュー ]\r
+ //---------------------\r
+ string str = "System";\r
+ int num4 = this.actFont.n文字列長dot( str );\r
+ bool flag = this.n現在のメニュー番号 == 0;\r
+ this.actFont.t文字列描画( 0x8a - ( num4 / 2 ), 100, str, flag );\r
+ str = "Drums Keys";\r
+ num4 = this.actFont.n文字列長dot( str );\r
+ flag = this.n現在のメニュー番号 == 1;\r
+ this.actFont.t文字列描画( 0x8a - ( num4 / 2 ), 0x7d, str, flag );\r
+ str = "Guitar Keys";\r
+ num4 = this.actFont.n文字列長dot( str );\r
+ flag = this.n現在のメニュー番号 == 2;\r
+ this.actFont.t文字列描画( 0x8a - ( num4 / 2 ), 150, str, flag );\r
+ str = "Bass Keys";\r
+ num4 = this.actFont.n文字列長dot( str );\r
+ flag = this.n現在のメニュー番号 == 3;\r
+ this.actFont.t文字列描画( 0x8a - ( num4 / 2 ), 0xaf, str, flag );\r
+ str = "Exit";\r
+ num4 = this.actFont.n文字列長dot( str );\r
+ flag = this.n現在のメニュー番号 == 4;\r
+ this.actFont.t文字列描画( 0x8a - ( num4 / 2 ), 200, str, flag );\r
+ //---------------------\r
+ #endregion\r
+ #region [ 説明文パネル ]\r
+ //---------------------\r
+ if( this.tx説明文パネル != null )\r
+ this.tx説明文パネル.t2D描画( CDTXMania.app.Device, 0x1d, 0xf8 );\r
+ //---------------------\r
+ #endregion\r
+ #region [ アイテム ]\r
+ //---------------------\r
+ switch( this.eItemPanelモード )\r
+ {\r
+ case EItemPanelモード.パッド一覧:\r
+ this.actList.t進行描画( !this.bメニューにフォーカス中 );\r
+ break;\r
+\r
+ case EItemPanelモード.キーコード一覧:\r
+ this.actKeyAssign.On進行描画();\r
+ break;\r
+ }\r
+ //---------------------\r
+ #endregion\r
+ #region [ 上部パネル ]\r
+ //---------------------\r
+ if( this.tx上部パネル != null )\r
+ this.tx上部パネル.t2D描画( CDTXMania.app.Device, 0, 0 );\r
+ //---------------------\r
+ #endregion\r
+ #region [ 下部パネル ]\r
+ //---------------------\r
+ if( this.tx下部パネル != null )\r
+ this.tx下部パネル.t2D描画( CDTXMania.app.Device, 0, 480 - this.tx下部パネル.szテクスチャサイズ.Height );\r
+ //---------------------\r
+ #endregion\r
+ #region [ オプションパネル ]\r
+ //---------------------\r
+ this.actオプションパネル.On進行描画();\r
+ //---------------------\r
+ #endregion\r
+ #region [ フェードイン・アウト ]\r
+ //---------------------\r
+ switch( base.eフェーズID )\r
+ {\r
+ case CStage.Eフェーズ.共通_フェードイン:\r
+ if( this.actFIFO.On進行描画() != 0 )\r
+ {\r
+ CDTXMania.Skin.bgmコンフィグ画面.t再生する();\r
+ base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
+ }\r
+ break;\r
+\r
+ case CStage.Eフェーズ.共通_フェードアウト:\r
+ if( this.actFIFO.On進行描画() == 0 )\r
+ {\r
+ break;\r
+ }\r
+ return 1;\r
+ }\r
+ //---------------------\r
+ #endregion\r
+\r
+ // キー入力\r
+\r
+ if( ( base.eフェーズID != CStage.Eフェーズ.共通_通常状態 )\r
+ || this.actKeyAssign.bキー入力待ちの最中である\r
+ || CDTXMania.act現在入力を占有中のプラグイン != null )\r
+ return 0;\r
+\r
+ if( ( CDTXMania.Input管理.Keyboard.bキーが押された( 0x35 ) || CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.FT ) ) || CDTXMania.Pad.b押されたGB( Eパッド.FT ) )\r
+ {\r
+ CDTXMania.Skin.sound取消音.t再生する();\r
+ if( !this.bメニューにフォーカス中 )\r
+ {\r
+ if( this.eItemPanelモード == EItemPanelモード.キーコード一覧 )\r
+ {\r
+ CDTXMania.stageコンフィグ.tアサイン完了通知();\r
+ return 0;\r
+ }\r
+ this.bメニューにフォーカス中 = true;\r
+ this.t説明文パネルに現在選択されているメニューの説明を描画する();\r
+ }\r
+ else\r
+ {\r
+ this.actFIFO.tフェードアウト開始();\r
+ base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
+ }\r
+ }\r
+ else if( ( CDTXMania.Pad.b押されたDGB( Eパッド.CY ) || CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.RD ) ) || ( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.LC ) || ( CDTXMania.ConfigIni.bEnterがキー割り当てのどこにも使用されていない && CDTXMania.Input管理.Keyboard.bキーが押された( 0x75 ) ) ) )\r
+ {\r
+ if( this.n現在のメニュー番号 == 4 )\r
+ {\r
+ CDTXMania.Skin.sound決定音.t再生する();\r
+ this.actFIFO.tフェードアウト開始();\r
+ base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
+ }\r
+ else if( this.bメニューにフォーカス中 )\r
+ {\r
+ CDTXMania.Skin.sound決定音.t再生する();\r
+ this.bメニューにフォーカス中 = false;\r
+ this.t説明文パネルに現在選択されている項目の説明を描画する();\r
+ }\r
+ else\r
+ {\r
+ switch( this.eItemPanelモード )\r
+ {\r
+ case EItemPanelモード.パッド一覧:\r
+ this.actList.tEnter押下();\r
+ if( this.actList.b現在選択されている項目はReturnToMenuである )\r
+ {\r
+ this.bメニューにフォーカス中 = true;\r
+ this.t説明文パネルに現在選択されているメニューの説明を描画する();\r
+ }\r
+ goto Label_0505;\r
+\r
+ case EItemPanelモード.キーコード一覧:\r
+ this.actKeyAssign.tEnter押下();\r
+ goto Label_0505;\r
+ }\r
+ }\r
+ }\r
+ Label_0505:\r
+ this.ctキー反復用.Up.tキー反復( CDTXMania.Input管理.Keyboard.bキーが押されている( 0x84 ), new CCounter.DGキー処理( this.tカーソルを上へ移動する ) );\r
+ this.ctキー反復用.R.tキー反復( CDTXMania.Pad.b押されているGB( Eパッド.HH ), new CCounter.DGキー処理( this.tカーソルを上へ移動する ) );\r
+ if( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.SD ) )\r
+ {\r
+ this.tカーソルを上へ移動する();\r
+ }\r
+ this.ctキー反復用.Down.tキー反復( CDTXMania.Input管理.Keyboard.bキーが押されている( 50 ), new CCounter.DGキー処理( this.tカーソルを下へ移動する ) );\r
+ this.ctキー反復用.B.tキー反復( CDTXMania.Pad.b押されているGB( Eパッド.BD ), new CCounter.DGキー処理( this.tカーソルを下へ移動する ) );\r
+ if( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.LT ) )\r
+ {\r
+ this.tカーソルを下へ移動する();\r
+ }\r
+ return 0;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private enum EItemPanelモード\r
+ {\r
+ パッド一覧,\r
+ キーコード一覧\r
+ }\r
+\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ private struct STキー反復用カウンタ\r
+ {\r
+ public CCounter Up;\r
+ public CCounter Down;\r
+ public CCounter R;\r
+ public CCounter B;\r
+ public CCounter this[ int index ]\r
+ {\r
+ get\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ return this.Up;\r
+\r
+ case 1:\r
+ return this.Down;\r
+\r
+ case 2:\r
+ return this.R;\r
+\r
+ case 3:\r
+ return this.B;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ set\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ this.Up = value;\r
+ return;\r
+\r
+ case 1:\r
+ this.Down = value;\r
+ return;\r
+\r
+ case 2:\r
+ this.R = value;\r
+ return;\r
+\r
+ case 3:\r
+ this.B = value;\r
+ return;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ }\r
+ }\r
+\r
+ private CActFIFOWhite actFIFO;\r
+ private CActConfigKeyAssign actKeyAssign;\r
+ private CActConfigList actList;\r
+ private CActオプションパネル actオプションパネル;\r
+ private bool bメニューにフォーカス中;\r
+ private STキー反復用カウンタ ctキー反復用;\r
+ private const int DESC_H = 0x80;\r
+ private const int DESC_W = 220;\r
+ private EItemPanelモード eItemPanelモード;\r
+ private Font ftフォント;\r
+ private int n現在のメニュー番号;\r
+ private CTexture txMenuカーソル;\r
+ private CTexture tx下部パネル;\r
+ private CTexture tx上部パネル;\r
+ private CTexture tx説明文パネル;\r
+ private CTexture tx背景;\r
+\r
+ private void tカーソルを下へ移動する()\r
+ {\r
+ if( !this.bメニューにフォーカス中 )\r
+ {\r
+ switch( this.eItemPanelモード )\r
+ {\r
+ case EItemPanelモード.パッド一覧:\r
+ this.actList.t次に移動();\r
+ return;\r
+\r
+ case EItemPanelモード.キーコード一覧:\r
+ this.actKeyAssign.t次に移動();\r
+ return;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ CDTXMania.Skin.soundカーソル移動音.t再生する();\r
+ this.n現在のメニュー番号 = ( this.n現在のメニュー番号 + 1 ) % 5;\r
+ switch( this.n現在のメニュー番号 )\r
+ {\r
+ case 0:\r
+ this.actList.t項目リストの設定・System();\r
+ break;\r
+\r
+ case 1:\r
+ this.actList.t項目リストの設定・KeyAssignDrums();\r
+ break;\r
+\r
+ case 2:\r
+ this.actList.t項目リストの設定・KeyAssignGuitar();\r
+ break;\r
+\r
+ case 3:\r
+ this.actList.t項目リストの設定・KeyAssignBass();\r
+ break;\r
+\r
+ case 4:\r
+ this.actList.t項目リストの設定・Exit();\r
+ break;\r
+ }\r
+ this.t説明文パネルに現在選択されているメニューの説明を描画する();\r
+ }\r
+ }\r
+ private void tカーソルを上へ移動する()\r
+ {\r
+ if( !this.bメニューにフォーカス中 )\r
+ {\r
+ switch( this.eItemPanelモード )\r
+ {\r
+ case EItemPanelモード.パッド一覧:\r
+ this.actList.t前に移動();\r
+ return;\r
+\r
+ case EItemPanelモード.キーコード一覧:\r
+ this.actKeyAssign.t前に移動();\r
+ return;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ CDTXMania.Skin.soundカーソル移動音.t再生する();\r
+ this.n現在のメニュー番号 = ( ( this.n現在のメニュー番号 - 1 ) + 5 ) % 5;\r
+ switch( this.n現在のメニュー番号 )\r
+ {\r
+ case 0:\r
+ this.actList.t項目リストの設定・System();\r
+ break;\r
+\r
+ case 1:\r
+ this.actList.t項目リストの設定・KeyAssignDrums();\r
+ break;\r
+\r
+ case 2:\r
+ this.actList.t項目リストの設定・KeyAssignGuitar();\r
+ break;\r
+\r
+ case 3:\r
+ this.actList.t項目リストの設定・KeyAssignBass();\r
+ break;\r
+\r
+ case 4:\r
+ this.actList.t項目リストの設定・Exit();\r
+ break;\r
+ }\r
+ this.t説明文パネルに現在選択されているメニューの説明を描画する();\r
+ }\r
+ }\r
+ private void t説明文パネルに現在選択されているメニューの説明を描画する()\r
+ {\r
+ try\r
+ {\r
+ Bitmap image = new Bitmap( 440, 0x100 );\r
+ Graphics graphics = Graphics.FromImage( image );\r
+ switch( this.n現在のメニュー番号 )\r
+ {\r
+ case 0:\r
+ graphics.DrawString( "システムに関係する項目を設定しま", this.ftフォント, Brushes.White, new PointF( 4f, 0f ) );\r
+ graphics.DrawString( "す。", this.ftフォント, Brushes.White, new PointF( 4f, 30f ) );\r
+ break;\r
+\r
+ case 1:\r
+ graphics.DrawString( "ドラムのキー入力に関する項目を設", this.ftフォント, Brushes.White, new PointF( 4f, 0f ) );\r
+ graphics.DrawString( "定します。", this.ftフォント, Brushes.White, new PointF( 4f, 30f ) );\r
+ break;\r
+\r
+ case 2:\r
+ graphics.DrawString( "ギターのキー入力に関する項目を設", this.ftフォント, Brushes.White, new PointF( 4f, 0f ) );\r
+ graphics.DrawString( "定します。", this.ftフォント, Brushes.White, new PointF( 4f, 30f ) );\r
+ break;\r
+\r
+ case 3:\r
+ graphics.DrawString( "ベースのキー入力に関する項目を設", this.ftフォント, Brushes.White, new PointF( 4f, 0f ) );\r
+ graphics.DrawString( "定します。", this.ftフォント, Brushes.White, new PointF( 4f, 30f ) );\r
+ break;\r
+\r
+ case 4:\r
+ graphics.DrawString( "設定を保存し、コンフィグ画面を終了", this.ftフォント, Brushes.White, new PointF( 4f, 0f ) );\r
+ graphics.DrawString( "します。", this.ftフォント, Brushes.White, new PointF( 4f, 30f ) );\r
+ break;\r
+ }\r
+ graphics.Dispose();\r
+ if( this.tx説明文パネル != null )\r
+ {\r
+ this.tx説明文パネル.Dispose();\r
+ }\r
+ this.tx説明文パネル = new CTexture( CDTXMania.app.Device, image, CDTXMania.TextureFormat );\r
+ this.tx説明文パネル.vc拡大縮小倍率.X = 0.5f;\r
+ this.tx説明文パネル.vc拡大縮小倍率.Y = 0.5f;\r
+ image.Dispose();\r
+ }\r
+ catch( CTextureCreateFailedException )\r
+ {\r
+ Trace.TraceError( "説明文テクスチャの作成に失敗しました。" );\r
+ this.tx説明文パネル = null;\r
+ }\r
+ }\r
+ private void t説明文パネルに現在選択されている項目の説明を描画する()\r
+ {\r
+ try\r
+ {\r
+ Bitmap image = new Bitmap( 440, 0x100 );\r
+ Graphics graphics = Graphics.FromImage( image );\r
+ CItemBase base2 = this.actList.ib現在の選択項目;\r
+ if( ( base2.str説明文 != null ) && ( base2.str説明文.Length > 0 ) )\r
+ {\r
+ int num = 0;\r
+ foreach( string str in base2.str説明文.Split( new char[] { '\n' } ) )\r
+ {\r
+ graphics.DrawString( str, this.ftフォント, Brushes.White, new PointF( 4f, (float) num ) );\r
+ num += 30;\r
+ }\r
+ }\r
+ graphics.Dispose();\r
+ if( this.tx説明文パネル != null )\r
+ {\r
+ this.tx説明文パネル.Dispose();\r
+ }\r
+ this.tx説明文パネル = new CTexture( CDTXMania.app.Device, image, CDTXMania.TextureFormat );\r
+ this.tx説明文パネル.vc拡大縮小倍率.X = 0.5f;\r
+ this.tx説明文パネル.vc拡大縮小倍率.Y = 0.5f;\r
+ image.Dispose();\r
+ }\r
+ catch( CTextureCreateFailedException )\r
+ {\r
+ Trace.TraceError( "説明文パネルテクスチャの作成に失敗しました。" );\r
+ this.tx説明文パネル = null;\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Drawing;\r
+using System.Diagnostics;\r
+using SlimDX;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CActSelectArtistComment : CActivity\r
+ {\r
+ // メソッド\r
+\r
+ public CActSelectArtistComment()\r
+ {\r
+ base.b活性化してない = true;\r
+ }\r
+ public void t選択曲が変更された()\r
+ {\r
+ Cスコア cスコア = CDTXMania.stage選曲.r現在選択中のスコア;\r
+ if( cスコア != null )\r
+ {\r
+ Bitmap image = new Bitmap( 1, 1 );\r
+ CDTXMania.tテクスチャの解放( ref this.txArtist );\r
+ this.strArtist = cスコア.譜面情報.アーティスト名;\r
+ if( ( this.strArtist != null ) && ( this.strArtist.Length > 0 ) )\r
+ {\r
+ Graphics graphics = Graphics.FromImage( image );\r
+ graphics.PageUnit = GraphicsUnit.Pixel;\r
+ SizeF ef = graphics.MeasureString( this.strArtist, this.ft描画用フォント );\r
+ graphics.Dispose();\r
+ if( ef.Width > 640f )\r
+ {\r
+ ef.Width = 640f;\r
+ }\r
+ try\r
+ {\r
+ Bitmap bitmap2 = new Bitmap( (int) Math.Ceiling( (double) ef.Width ), (int) Math.Ceiling( (double) this.ft描画用フォント.Size ) );\r
+ graphics = Graphics.FromImage( bitmap2 );\r
+ graphics.DrawString( this.strArtist, this.ft描画用フォント, Brushes.White, (float) 0f, (float) 0f );\r
+ graphics.Dispose();\r
+ this.txArtist = new CTexture( CDTXMania.app.Device, bitmap2, CDTXMania.TextureFormat );\r
+ this.txArtist.vc拡大縮小倍率 = new Vector3( 0.5f, 0.5f, 1f );\r
+ bitmap2.Dispose();\r
+ }\r
+ catch( CTextureCreateFailedException )\r
+ {\r
+ Trace.TraceError( "ARTISTテクスチャの生成に失敗しました。" );\r
+ this.txArtist = null;\r
+ }\r
+ }\r
+ CDTXMania.tテクスチャの解放( ref this.txComment );\r
+ this.strComment = cスコア.譜面情報.コメント;\r
+ if( ( this.strComment != null ) && ( this.strComment.Length > 0 ) )\r
+ {\r
+ Graphics graphics2 = Graphics.FromImage( image );\r
+ graphics2.PageUnit = GraphicsUnit.Pixel;\r
+ SizeF ef2 = graphics2.MeasureString( this.strComment, this.ft描画用フォント );\r
+ Size size = new Size( (int) Math.Ceiling( (double) ef2.Width ), (int) Math.Ceiling( (double) ef2.Height ) );\r
+ graphics2.Dispose();\r
+ this.nテクスチャの最大幅 = CDTXMania.app.Device.Capabilities.MaxTextureWidth;\r
+ int maxTextureHeight = CDTXMania.app.Device.Capabilities.MaxTextureHeight;\r
+ Bitmap bitmap3 = new Bitmap( size.Width, (int) Math.Ceiling( (double) this.ft描画用フォント.Size ) );\r
+ graphics2 = Graphics.FromImage( bitmap3 );\r
+ graphics2.DrawString( this.strComment, this.ft描画用フォント, Brushes.White, (float) 0f, (float) 0f );\r
+ graphics2.Dispose();\r
+ this.nComment行数 = 1;\r
+ this.nComment最終行の幅 = size.Width;\r
+ while( this.nComment最終行の幅 > this.nテクスチャの最大幅 )\r
+ {\r
+ this.nComment行数++;\r
+ this.nComment最終行の幅 -= this.nテクスチャの最大幅;\r
+ }\r
+ while( ( this.nComment行数 * ( (int) Math.Ceiling( (double) this.ft描画用フォント.Size ) ) ) > maxTextureHeight )\r
+ {\r
+ this.nComment行数--;\r
+ this.nComment最終行の幅 = this.nテクスチャの最大幅;\r
+ }\r
+ Bitmap bitmap4 = new Bitmap( ( this.nComment行数 > 1 ) ? this.nテクスチャの最大幅 : this.nComment最終行の幅, this.nComment行数 * ( (int) Math.Ceiling( (double) this.ft描画用フォント.Size ) ) );\r
+ graphics2 = Graphics.FromImage( bitmap4 );\r
+ Rectangle srcRect = new Rectangle();\r
+ Rectangle destRect = new Rectangle();\r
+ for( int i = 0; i < this.nComment行数; i++ )\r
+ {\r
+ srcRect.X = i * this.nテクスチャの最大幅;\r
+ srcRect.Y = 0;\r
+ srcRect.Width = ( ( i + 1 ) == this.nComment行数 ) ? this.nComment最終行の幅 : this.nテクスチャの最大幅;\r
+ srcRect.Height = bitmap3.Height;\r
+ destRect.X = 0;\r
+ destRect.Y = i * bitmap3.Height;\r
+ destRect.Width = srcRect.Width;\r
+ destRect.Height = srcRect.Height;\r
+ graphics2.DrawImage( bitmap3, destRect, srcRect, GraphicsUnit.Pixel );\r
+ }\r
+ graphics2.Dispose();\r
+ try\r
+ {\r
+ this.txComment = new CTexture( CDTXMania.app.Device, bitmap4, CDTXMania.TextureFormat );\r
+ this.txComment.vc拡大縮小倍率 = new Vector3( 0.5f, 0.5f, 1f );\r
+ }\r
+ catch( CTextureCreateFailedException )\r
+ {\r
+ Trace.TraceError( "COMMENTテクスチャの生成に失敗しました。" );\r
+ this.txComment = null;\r
+ }\r
+ bitmap4.Dispose();\r
+ bitmap3.Dispose();\r
+ }\r
+ image.Dispose();\r
+ if( this.txComment != null )\r
+ {\r
+ this.ctComment = new CCounter( -386, (int) ( ( ( ( this.nComment行数 - 1 ) * this.nテクスチャの最大幅 ) + this.nComment最終行の幅 ) * this.txComment.vc拡大縮小倍率.X ), 10, CDTXMania.Timer );\r
+ }\r
+ }\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ this.ft描画用フォント = new Font( "MS PGothic", 26f, GraphicsUnit.Pixel );\r
+ this.txArtist = null;\r
+ this.txComment = null;\r
+ this.strArtist = "";\r
+ this.strComment = "";\r
+ this.nComment最終行の幅 = 0;\r
+ this.nComment行数 = 0;\r
+ this.nテクスチャの最大幅 = 0;\r
+ this.ctComment = new CCounter();\r
+ base.On活性化();\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.txArtist );\r
+ CDTXMania.tテクスチャの解放( ref this.txComment );\r
+ if( this.ft描画用フォント != null )\r
+ {\r
+ this.ft描画用フォント.Dispose();\r
+ this.ft描画用フォント = null;\r
+ }\r
+ this.ctComment = null;\r
+ base.On非活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.t選択曲が変更された();\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.txArtist );\r
+ CDTXMania.tテクスチャの解放( ref this.txComment );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ if( this.ctComment.b進行中 )\r
+ {\r
+ this.ctComment.t進行Loop();\r
+ }\r
+ if( this.txArtist != null )\r
+ {\r
+ int x = 0x27a - ( (int) ( this.txArtist.szテクスチャサイズ.Width * this.txArtist.vc拡大縮小倍率.X ) );\r
+ int y = 0xe7;\r
+ this.txArtist.t2D描画( CDTXMania.app.Device, x, y );\r
+ }\r
+ if( ( this.txComment != null ) && ( ( this.ctComment.n現在の値 + 0x182 ) >= 0 ) )\r
+ {\r
+ int num3 = 0xf8;\r
+ int num4 = 0xf5;\r
+ Rectangle rectangle = new Rectangle( this.ctComment.n現在の値, 0, 0x182, (int) this.ft描画用フォント.Size );\r
+ if( rectangle.X < 0 )\r
+ {\r
+ num3 += -rectangle.X;\r
+ rectangle.Width -= -rectangle.X;\r
+ rectangle.X = 0;\r
+ }\r
+ int num5 = ( (int) ( ( (float) rectangle.X ) / this.txComment.vc拡大縮小倍率.X ) ) / this.nテクスチャの最大幅;\r
+ Rectangle rectangle2 = new Rectangle();\r
+ while( rectangle.Width > 0 )\r
+ {\r
+ rectangle2.X = ( (int) ( ( (float) rectangle.X ) / this.txComment.vc拡大縮小倍率.X ) ) % this.nテクスチャの最大幅;\r
+ rectangle2.Y = num5 * ( (int) this.ft描画用フォント.Size );\r
+ int num6 = ( ( num5 + 1 ) == this.nComment行数 ) ? this.nComment最終行の幅 : this.nテクスチャの最大幅;\r
+ int num7 = num6 - rectangle2.X;\r
+ rectangle2.Width = num7;\r
+ rectangle2.Height = (int) this.ft描画用フォント.Size;\r
+ this.txComment.t2D描画( CDTXMania.app.Device, num3, num4, rectangle2 );\r
+ if( ++num5 == this.nComment行数 )\r
+ {\r
+ break;\r
+ }\r
+ int num8 = (int) ( rectangle2.Width * this.txComment.vc拡大縮小倍率.X );\r
+ rectangle.X += num8;\r
+ rectangle.Width -= num8;\r
+ num3 += num8;\r
+ }\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private CCounter ctComment;\r
+ private Font ft描画用フォント;\r
+ private int nComment行数;\r
+ private int nComment最終行の幅;\r
+ private const int nComment表示幅 = 0x182;\r
+ private int nテクスチャの最大幅;\r
+ private string strArtist;\r
+ private string strComment;\r
+ private CTexture txArtist;\r
+ private CTexture txComment;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using System.Drawing;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CActSelectInformation : CActivity\r
+ {\r
+ // コンストラクタ\r
+\r
+ public CActSelectInformation()\r
+ {\r
+ base.b活性化してない = true;\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ this.n画像Index上 = -1;\r
+ this.n画像Index下 = 0;\r
+ base.On活性化();\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ this.ctスクロール用 = null;\r
+ base.On非活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.txInfo[ 0 ] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect information 1.png" ), false );\r
+ this.txInfo[ 1 ] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect information 2.png" ), false );\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.txInfo[ 0 ] );\r
+ CDTXMania.tテクスチャの解放( ref this.txInfo[ 1 ] );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ if( base.b初めての進行描画 )\r
+ {\r
+ this.ctスクロール用 = new CCounter( 0, 0x1770, 1, CDTXMania.Timer );\r
+ base.b初めての進行描画 = false;\r
+ }\r
+ this.ctスクロール用.t進行();\r
+ if( this.ctスクロール用.b終了値に達した )\r
+ {\r
+ this.n画像Index上 = this.n画像Index下;\r
+ this.n画像Index下 = ( this.n画像Index下 + 1 ) % 8;\r
+ this.ctスクロール用.n現在の値 = 0;\r
+ }\r
+ int num = this.ctスクロール用.n現在の値;\r
+ if( num <= 250 )\r
+ {\r
+ double num2 = ( (double) num ) / 250.0;\r
+ if( this.n画像Index上 >= 0 )\r
+ {\r
+ STINFO stinfo = this.stInfo[ this.n画像Index上 ];\r
+ Rectangle rectangle = new Rectangle( stinfo.pt左上座標.X, stinfo.pt左上座標.Y + ( (int) ( 45.0 * num2 ) ), 0xdd, 0x2d );\r
+ if( this.txInfo[ stinfo.nTexture番号 ] != null )\r
+ {\r
+ this.txInfo[ stinfo.nTexture番号 ].t2D描画( CDTXMania.app.Device, 0x73, 6, rectangle );\r
+ }\r
+ }\r
+ if( this.n画像Index下 >= 0 )\r
+ {\r
+ STINFO stinfo2 = this.stInfo[ this.n画像Index下 ];\r
+ Rectangle rectangle2 = new Rectangle( stinfo2.pt左上座標.X, stinfo2.pt左上座標.Y, 0xdd, (int) ( 45.0 * num2 ) );\r
+ if( this.txInfo[ stinfo2.nTexture番号 ] != null )\r
+ {\r
+ this.txInfo[ stinfo2.nTexture番号 ].t2D描画( CDTXMania.app.Device, 0x73, 6 + ( (int) ( 45.0 * ( 1.0 - num2 ) ) ), rectangle2 );\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ STINFO stinfo3 = this.stInfo[ this.n画像Index下 ];\r
+ Rectangle rectangle3 = new Rectangle( stinfo3.pt左上座標.X, stinfo3.pt左上座標.Y, 0xdd, 0x2d );\r
+ if( this.txInfo[ stinfo3.nTexture番号 ] != null )\r
+ {\r
+ this.txInfo[ stinfo3.nTexture番号 ].t2D描画( CDTXMania.app.Device, 0x73, 6, rectangle3 );\r
+ }\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ private struct STINFO\r
+ {\r
+ public int nTexture番号;\r
+ public Point pt左上座標;\r
+ public STINFO( int nTexture番号, int x, int y )\r
+ {\r
+ this.nTexture番号 = nTexture番号;\r
+ this.pt左上座標 = new Point( x, y );\r
+ }\r
+ }\r
+\r
+ private CCounter ctスクロール用;\r
+ private const int nINFO数 = 8;\r
+ private int n画像Index下;\r
+ private int n画像Index上;\r
+ private readonly STINFO[] stInfo = new STINFO[] { new STINFO( 0, 0, 0 ), new STINFO( 0, 0, 0x31 ), new STINFO( 0, 0, 0x62 ), new STINFO( 0, 0, 0x93 ), new STINFO( 0, 0, 0xc4 ), new STINFO( 1, 0, 0 ), new STINFO( 1, 0, 0x31 ), new STINFO( 1, 0, 0x62 ) };\r
+ private CTexture[] txInfo = new CTexture[ 2 ];\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Drawing;\r
+using System.IO;\r
+using System.Diagnostics;\r
+using SlimDX;\r
+using SlimDX.Direct3D9;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CActSelectPreimageパネル : CActivity\r
+ {\r
+ // メソッド\r
+\r
+ public CActSelectPreimageパネル()\r
+ {\r
+ base.b活性化してない = true;\r
+ }\r
+ public void t選択曲が変更された()\r
+ {\r
+ this.ct遅延表示 = new CCounter( -CDTXMania.ConfigIni.n曲が選択されてからプレビュー画像が表示開始されるまでのウェイトms, 100, 1, CDTXMania.Timer );\r
+ this.b新しいプレビューファイルを読み込んだ = false;\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ this.n本体X = 8;\r
+ this.n本体Y = 0x39;\r
+ this.r表示するプレビュー画像 = this.txプレビュー画像がないときの画像;\r
+ this.str現在のファイル名 = "";\r
+ this.b新しいプレビューファイルを読み込んだ = false;\r
+ base.On活性化();\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ this.ct登場アニメ用 = null;\r
+ this.ct遅延表示 = null;\r
+ if( this.avi != null )\r
+ {\r
+ this.avi.Dispose();\r
+ this.avi = null;\r
+ }\r
+ base.On非活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.txパネル本体 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect preimage panel.png" ), false );\r
+ this.txセンサ = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect sensor.png" ), false );\r
+ this.txセンサ光 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect sensor light.png" ), false );\r
+ this.txプレビュー画像 = null;\r
+ this.txプレビュー画像がないときの画像 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect preimage default.png" ), false );\r
+ this.sfAVI画像 = Surface.CreateOffscreenPlain( CDTXMania.app.Device, 0xcc, 0x10d, CDTXMania.app.GraphicsDeviceManager.CurrentSettings.BackBufferFormat, Pool.SystemMemory );\r
+ this.nAVI再生開始時刻 = -1;\r
+ this.n前回描画したフレーム番号 = -1;\r
+ this.b動画フレームを作成した = false;\r
+ this.pAVIBmp = IntPtr.Zero;\r
+ this.tプレビュー画像・動画の変更();\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.txパネル本体 );\r
+ CDTXMania.tテクスチャの解放( ref this.txセンサ );\r
+ CDTXMania.tテクスチャの解放( ref this.txセンサ光 );\r
+ CDTXMania.tテクスチャの解放( ref this.txプレビュー画像 );\r
+ CDTXMania.tテクスチャの解放( ref this.txプレビュー画像がないときの画像 );\r
+ if( this.sfAVI画像 != null )\r
+ {\r
+ this.sfAVI画像.Dispose();\r
+ this.sfAVI画像 = null;\r
+ }\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ if( base.b初めての進行描画 )\r
+ {\r
+ this.ct登場アニメ用 = new CCounter( 0, 100, 5, CDTXMania.Timer );\r
+ this.ctセンサ光 = new CCounter( 0, 100, 30, CDTXMania.Timer );\r
+ this.ctセンサ光.n現在の値 = 70;\r
+ base.b初めての進行描画 = false;\r
+ }\r
+ this.ct登場アニメ用.t進行();\r
+ this.ctセンサ光.t進行Loop();\r
+ if( ( !CDTXMania.stage選曲.bスクロール中 && ( this.ct遅延表示 != null ) ) && this.ct遅延表示.b進行中 )\r
+ {\r
+ this.ct遅延表示.t進行();\r
+ if( this.ct遅延表示.b終了値に達した )\r
+ {\r
+ this.ct遅延表示.t停止();\r
+ }\r
+ else if( ( this.ct遅延表示.n現在の値 >= 0 ) && this.b新しいプレビューファイルをまだ読み込んでいない )\r
+ {\r
+ this.tプレビュー画像・動画の変更();\r
+ CDTXMania.Timer.t更新();\r
+ this.ct遅延表示.n現在の経過時間ms = CDTXMania.Timer.n現在時刻;\r
+ this.b新しいプレビューファイルを読み込んだ = true;\r
+ }\r
+ }\r
+ else if( ( ( this.avi != null ) && ( this.sfAVI画像 != null ) ) && ( this.nAVI再生開始時刻 != -1 ) )\r
+ {\r
+ int time = (int) ( ( CDTXMania.Timer.n現在時刻 - this.nAVI再生開始時刻 ) * ( ( (double) CDTXMania.ConfigIni.n演奏速度 ) / 20.0 ) );\r
+ int frameNoFromTime = this.avi.GetFrameNoFromTime( time );\r
+ if( frameNoFromTime >= this.avi.GetMaxFrameCount() )\r
+ {\r
+ this.nAVI再生開始時刻 = CDTXMania.Timer.n現在時刻;\r
+ }\r
+ else if( ( this.n前回描画したフレーム番号 != frameNoFromTime ) && !this.b動画フレームを作成した )\r
+ {\r
+ this.b動画フレームを作成した = true;\r
+ this.n前回描画したフレーム番号 = frameNoFromTime;\r
+ this.pAVIBmp = this.avi.GetFramePtr( frameNoFromTime );\r
+ }\r
+ }\r
+ this.t描画処理・パネル本体();\r
+ this.t描画処理・ジャンル文字列();\r
+ this.t描画処理・プレビュー画像();\r
+ this.t描画処理・センサ光();\r
+ this.t描画処理・センサ本体();\r
+ }\r
+ return 0;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private CAvi avi;\r
+ private bool b動画フレームを作成した;\r
+ private CCounter ctセンサ光;\r
+ private CCounter ct遅延表示;\r
+ private CCounter ct登場アニメ用;\r
+ private long nAVI再生開始時刻;\r
+ private int n前回描画したフレーム番号;\r
+ private int n本体X;\r
+ private int n本体Y;\r
+ private IntPtr pAVIBmp;\r
+ private readonly Rectangle rcセンサ光 = new Rectangle( 0, 0xc0, 0x40, 0x40 );\r
+ private readonly Rectangle rcセンサ本体下半分 = new Rectangle( 0x40, 0, 0x40, 0x80 );\r
+ private readonly Rectangle rcセンサ本体上半分 = new Rectangle( 0, 0, 0x40, 0x80 );\r
+ private CTexture r表示するプレビュー画像;\r
+ private Surface sfAVI画像;\r
+ private string str現在のファイル名;\r
+ private CTexture txセンサ;\r
+ private CTexture txセンサ光;\r
+ private CTexture txパネル本体;\r
+ private CTexture txプレビュー画像;\r
+ private CTexture txプレビュー画像がないときの画像;\r
+ private bool b新しいプレビューファイルを読み込んだ;\r
+ private bool b新しいプレビューファイルをまだ読み込んでいない\r
+ {\r
+ get\r
+ {\r
+ return !this.b新しいプレビューファイルを読み込んだ;\r
+ }\r
+ set\r
+ {\r
+ this.b新しいプレビューファイルを読み込んだ = !value;\r
+ }\r
+ }\r
+\r
+ private unsafe void tサーフェイスをクリアする( Surface sf )\r
+ {\r
+ DataRectangle rectangle = sf.LockRectangle( LockFlags.None );\r
+ DataStream data = rectangle.Data;\r
+ switch( ( rectangle.Pitch / sf.Description.Width ) )\r
+ {\r
+ case 4:\r
+ {\r
+ uint* numPtr = (uint*) data.DataPointer.ToPointer();\r
+ for( int i = 0; i < sf.Description.Height; i++ )\r
+ {\r
+ for( int j = 0; j < sf.Description.Width; j++ )\r
+ {\r
+ ( numPtr + ( i * sf.Description.Width ) )[ j ] = 0;\r
+ }\r
+ }\r
+ break;\r
+ }\r
+ case 2:\r
+ {\r
+ ushort* numPtr2 = (ushort*) data.DataPointer.ToPointer();\r
+ for( int k = 0; k < sf.Description.Height; k++ )\r
+ {\r
+ for( int m = 0; m < sf.Description.Width; m++ )\r
+ {\r
+ ( numPtr2 + ( k * sf.Description.Width ) )[ m ] = 0;\r
+ }\r
+ }\r
+ break;\r
+ }\r
+ }\r
+ sf.UnlockRectangle();\r
+ }\r
+ private void tプレビュー画像・動画の変更()\r
+ {\r
+ if( this.avi != null )\r
+ {\r
+ this.avi.Dispose();\r
+ this.avi = null;\r
+ }\r
+ this.pAVIBmp = IntPtr.Zero;\r
+ this.nAVI再生開始時刻 = -1;\r
+ if( !CDTXMania.ConfigIni.bストイックモード )\r
+ {\r
+ if( this.tプレビュー動画の指定があれば構築する() )\r
+ {\r
+ return;\r
+ }\r
+ if( this.tプレビュー画像の指定があれば構築する() )\r
+ {\r
+ return;\r
+ }\r
+ if( this.t背景画像があればその一部からプレビュー画像を構築する() )\r
+ {\r
+ return;\r
+ }\r
+ }\r
+ this.r表示するプレビュー画像 = this.txプレビュー画像がないときの画像;\r
+ this.str現在のファイル名 = "";\r
+ }\r
+ private bool tプレビュー画像の指定があれば構築する()\r
+ {\r
+ Cスコア cスコア = CDTXMania.stage選曲.r現在選択中のスコア;\r
+ if( ( cスコア == null ) || string.IsNullOrEmpty( cスコア.譜面情報.Preimage ) )\r
+ {\r
+ return false;\r
+ }\r
+ string str = cスコア.ファイル情報.フォルダの絶対パス + cスコア.譜面情報.Preimage;\r
+ if( !str.Equals( this.str現在のファイル名 ) )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.txプレビュー画像 );\r
+ this.str現在のファイル名 = str;\r
+ if( !File.Exists( this.str現在のファイル名 ) )\r
+ {\r
+ Trace.TraceWarning( "ファイルが存在しません。({0})", new object[] { this.str現在のファイル名 } );\r
+ return false;\r
+ }\r
+ this.txプレビュー画像 = CDTXMania.tテクスチャの生成( this.str現在のファイル名, false );\r
+ if( this.txプレビュー画像 != null )\r
+ {\r
+ this.r表示するプレビュー画像 = this.txプレビュー画像;\r
+ }\r
+ else\r
+ {\r
+ this.r表示するプレビュー画像 = this.txプレビュー画像がないときの画像;\r
+ }\r
+ }\r
+ return true;\r
+ }\r
+ private bool tプレビュー動画の指定があれば構築する()\r
+ {\r
+ Cスコア cスコア = CDTXMania.stage選曲.r現在選択中のスコア;\r
+ if( ( CDTXMania.ConfigIni.bAVI有効 && ( cスコア != null ) ) && !string.IsNullOrEmpty( cスコア.譜面情報.Premovie ) )\r
+ {\r
+ string filename = cスコア.ファイル情報.フォルダの絶対パス + cスコア.譜面情報.Premovie;\r
+ if( filename.Equals( this.str現在のファイル名 ) )\r
+ {\r
+ return true;\r
+ }\r
+ if( this.avi != null )\r
+ {\r
+ this.avi.Dispose();\r
+ this.avi = null;\r
+ }\r
+ this.str現在のファイル名 = filename;\r
+ if( !File.Exists( this.str現在のファイル名 ) )\r
+ {\r
+ Trace.TraceWarning( "ファイルが存在しません。({0})", new object[] { this.str現在のファイル名 } );\r
+ return false;\r
+ }\r
+ try\r
+ {\r
+ this.avi = new CAvi( filename );\r
+ this.nAVI再生開始時刻 = CDTXMania.Timer.n現在時刻;\r
+ this.n前回描画したフレーム番号 = -1;\r
+ this.b動画フレームを作成した = false;\r
+ this.tサーフェイスをクリアする( this.sfAVI画像 );\r
+ Trace.TraceInformation( "動画を生成しました。({0})", new object[] { filename } );\r
+ }\r
+ catch\r
+ {\r
+ Trace.TraceError( "動画の生成に失敗しました。({0})", new object[] { filename } );\r
+ this.avi = null;\r
+ this.nAVI再生開始時刻 = -1;\r
+ }\r
+ }\r
+ return false;\r
+ }\r
+ private bool t背景画像があればその一部からプレビュー画像を構築する()\r
+ {\r
+ Cスコア cスコア = CDTXMania.stage選曲.r現在選択中のスコア;\r
+ if( ( cスコア == null ) || string.IsNullOrEmpty( cスコア.譜面情報.Backgound ) )\r
+ {\r
+ return false;\r
+ }\r
+ string path = cスコア.ファイル情報.フォルダの絶対パス + cスコア.譜面情報.Backgound;\r
+ if( !path.Equals( this.str現在のファイル名 ) )\r
+ {\r
+ if( !File.Exists( path ) )\r
+ {\r
+ Trace.TraceWarning( "ファイルが存在しません。({0})", new object[] { path } );\r
+ return false;\r
+ }\r
+ CDTXMania.tテクスチャの解放( ref this.txプレビュー画像 );\r
+ this.str現在のファイル名 = path;\r
+ Bitmap image = null;\r
+ Bitmap bitmap2 = null;\r
+ Bitmap bitmap3 = null;\r
+ try\r
+ {\r
+ image = new Bitmap( this.str現在のファイル名 );\r
+ bitmap2 = new Bitmap( 640, 480 );\r
+ Graphics graphics = Graphics.FromImage( bitmap2 );\r
+ int x = 0;\r
+ for( int i = 0; i < 480; i += image.Height )\r
+ {\r
+ for( x = 0; x < 640; x += image.Width )\r
+ {\r
+ graphics.DrawImage( image, x, i, image.Width, image.Height );\r
+ }\r
+ }\r
+ graphics.Dispose();\r
+ bitmap3 = new Bitmap( 0xcc, 0x10d );\r
+ graphics = Graphics.FromImage( bitmap3 );\r
+ graphics.DrawImage( bitmap2, 5, 5, new Rectangle( 0x157, 0x6d, 0xcc, 0x10d ), GraphicsUnit.Pixel );\r
+ graphics.Dispose();\r
+ this.txプレビュー画像 = new CTexture( CDTXMania.app.Device, bitmap3, CDTXMania.TextureFormat );\r
+ this.r表示するプレビュー画像 = this.txプレビュー画像;\r
+ }\r
+ catch\r
+ {\r
+ Trace.TraceError( "背景画像の読み込みに失敗しました。({0})", new object[] { this.str現在のファイル名 } );\r
+ this.r表示するプレビュー画像 = this.txプレビュー画像がないときの画像;\r
+ return false;\r
+ }\r
+ finally\r
+ {\r
+ if( image != null )\r
+ {\r
+ image.Dispose();\r
+ }\r
+ if( bitmap2 != null )\r
+ {\r
+ bitmap2.Dispose();\r
+ }\r
+ if( bitmap3 != null )\r
+ {\r
+ bitmap3.Dispose();\r
+ }\r
+ }\r
+ }\r
+ return true;\r
+ }\r
+ private void t描画処理・ジャンル文字列()\r
+ {\r
+ C曲リストノード c曲リストノード = CDTXMania.stage選曲.r現在選択中の曲;\r
+ Cスコア cスコア = CDTXMania.stage選曲.r現在選択中のスコア;\r
+ if( ( c曲リストノード != null ) && ( cスコア != null ) )\r
+ {\r
+ string str = "";\r
+ switch( c曲リストノード.eノード種別 )\r
+ {\r
+ case C曲リストノード.Eノード種別.SCORE:\r
+ if( ( c曲リストノード.strジャンル == null ) || ( c曲リストノード.strジャンル.Length <= 0 ) )\r
+ {\r
+ if( ( cスコア.譜面情報.ジャンル != null ) && ( cスコア.譜面情報.ジャンル.Length > 0 ) )\r
+ {\r
+ str = cスコア.譜面情報.ジャンル;\r
+ }\r
+ else\r
+ {\r
+ switch( cスコア.譜面情報.曲種別 )\r
+ {\r
+ case CDTX.E種別.DTX:\r
+ str = "DTX";\r
+ break;\r
+\r
+ case CDTX.E種別.GDA:\r
+ str = "GDA";\r
+ break;\r
+\r
+ case CDTX.E種別.G2D:\r
+ str = "G2D";\r
+ break;\r
+\r
+ case CDTX.E種別.BMS:\r
+ str = "BMS";\r
+ break;\r
+\r
+ case CDTX.E種別.BME:\r
+ str = "BME";\r
+ break;\r
+ }\r
+ str = "Unknown";\r
+ }\r
+ break;\r
+ }\r
+ str = c曲リストノード.strジャンル;\r
+ break;\r
+\r
+ case C曲リストノード.Eノード種別.SCORE_MIDI:\r
+ str = "MIDI";\r
+ break;\r
+\r
+ case C曲リストノード.Eノード種別.BOX:\r
+ str = "MusicBox";\r
+ break;\r
+\r
+ case C曲リストノード.Eノード種別.BACKBOX:\r
+ str = "BackBox";\r
+ break;\r
+\r
+ case C曲リストノード.Eノード種別.RANDOM:\r
+ str = "Random";\r
+ break;\r
+\r
+ default:\r
+ str = "Unknown";\r
+ break;\r
+ }\r
+ CDTXMania.act文字コンソール.tPrint( this.n本体X + 0x12, this.n本体Y - 1, C文字コンソール.Eフォント種別.赤細, str );\r
+ }\r
+ }\r
+ private void t描画処理・センサ光()\r
+ {\r
+ int num = this.ctセンサ光.n現在の値;\r
+ if( num < 12 )\r
+ {\r
+ int x = this.n本体X + 0xcc;\r
+ int y = this.n本体Y + 0x7b;\r
+ if( this.txセンサ光 != null )\r
+ {\r
+ this.txセンサ光.vc拡大縮小倍率 = new Vector3( 1f, 1f, 1f );\r
+ this.txセンサ光.n透明度 = 0xff;\r
+ this.txセンサ光.t2D描画( CDTXMania.app.Device, x, y, new Rectangle( ( num % 4 ) * 0x40, ( num / 4 ) * 0x40, 0x40, 0x40 ) );\r
+ }\r
+ }\r
+ else if( num < 0x18 )\r
+ {\r
+ int num4 = num - 11;\r
+ double num5 = ( (double) num4 ) / 11.0;\r
+ double num6 = 1.0 + ( num5 * 0.5 );\r
+ int num7 = (int) ( 64.0 * num6 );\r
+ int num8 = (int) ( 64.0 * num6 );\r
+ int num9 = ( ( this.n本体X + 0xcc ) + 0x20 ) - ( num7 / 2 );\r
+ int num10 = ( ( this.n本体Y + 0x7b ) + 0x20 ) - ( num8 / 2 );\r
+ if( this.txセンサ光 != null )\r
+ {\r
+ this.txセンサ光.vc拡大縮小倍率 = new Vector3( (float) num6, (float) num6, 1f );\r
+ this.txセンサ光.n透明度 = (int) ( 255.0 * ( 1.0 - num5 ) );\r
+ this.txセンサ光.t2D描画( CDTXMania.app.Device, num9, num10, this.rcセンサ光 );\r
+ }\r
+ }\r
+ }\r
+ private void t描画処理・センサ本体()\r
+ {\r
+ int x = this.n本体X + 0xcd;\r
+ int y = this.n本体Y - 4;\r
+ if( this.txセンサ != null )\r
+ {\r
+ this.txセンサ.t2D描画( CDTXMania.app.Device, x, y, this.rcセンサ本体上半分 );\r
+ y += 0x80;\r
+ this.txセンサ.t2D描画( CDTXMania.app.Device, x, y, this.rcセンサ本体下半分 );\r
+ }\r
+ }\r
+ private void t描画処理・パネル本体()\r
+ {\r
+ if( this.ct登場アニメ用.b終了値に達した || ( this.txパネル本体 != null ) )\r
+ {\r
+ this.n本体X = 8;\r
+ this.n本体Y = 0x39;\r
+ }\r
+ else\r
+ {\r
+ double num = ( (double) this.ct登場アニメ用.n現在の値 ) / 100.0;\r
+ double num2 = Math.Cos( ( 1.5 + ( 0.5 * num ) ) * 3.1415926535897931 );\r
+ this.n本体X = 8;\r
+ this.n本体Y = 0x39 - ( (int) ( this.txパネル本体.sz画像サイズ.Height * ( 1.0 - ( num2 * num2 ) ) ) );\r
+ }\r
+ if( this.txパネル本体 != null )\r
+ {\r
+ this.txパネル本体.t2D描画( CDTXMania.app.Device, this.n本体X, this.n本体Y );\r
+ }\r
+ }\r
+ private unsafe void t描画処理・プレビュー画像()\r
+ {\r
+ if( !CDTXMania.stage選曲.bスクロール中 && ( ( ( this.ct遅延表示 != null ) && ( this.ct遅延表示.n現在の値 > 0 ) ) && !this.b新しいプレビューファイルをまだ読み込んでいない ) )\r
+ {\r
+ int x = this.n本体X + 0x12;\r
+ int y = this.n本体Y + 0x10;\r
+ float num3 = ( (float) this.ct遅延表示.n現在の値 ) / 100f;\r
+ float num4 = 0.9f + ( 0.1f * num3 );\r
+ if( ( this.nAVI再生開始時刻 != -1 ) && ( this.sfAVI画像 != null ) )\r
+ {\r
+ if( this.b動画フレームを作成した && ( this.pAVIBmp != IntPtr.Zero ) )\r
+ {\r
+ DataRectangle rectangle = this.sfAVI画像.LockRectangle( LockFlags.None );\r
+ DataStream data = rectangle.Data;\r
+ int num5 = rectangle.Pitch / this.sfAVI画像.Description.Width;\r
+ BitmapUtil.BITMAPINFOHEADER* pBITMAPINFOHEADER = (BitmapUtil.BITMAPINFOHEADER*) this.pAVIBmp.ToPointer();\r
+ if( pBITMAPINFOHEADER->biBitCount == 0x18 )\r
+ {\r
+ switch( num5 )\r
+ {\r
+ case 2:\r
+ this.avi.tBitmap24ToGraphicsStreamR5G6B5( pBITMAPINFOHEADER, data, this.sfAVI画像.Description.Width, this.sfAVI画像.Description.Height );\r
+ break;\r
+\r
+ case 4:\r
+ this.avi.tBitmap24ToGraphicsStreamX8R8G8B8( pBITMAPINFOHEADER, data, this.sfAVI画像.Description.Width, this.sfAVI画像.Description.Height );\r
+ break;\r
+ }\r
+ }\r
+ this.sfAVI画像.UnlockRectangle();\r
+ this.b動画フレームを作成した = false;\r
+ }\r
+ using( Surface surface = CDTXMania.app.Device.GetBackBuffer( 0, 0 ) )\r
+ {\r
+ CDTXMania.app.Device.UpdateSurface( this.sfAVI画像, new Rectangle( 0, 0, this.sfAVI画像.Description.Width, this.sfAVI画像.Description.Height ), surface, new Point( x, y ) );\r
+ return;\r
+ }\r
+ }\r
+ if( this.r表示するプレビュー画像 != null )\r
+ {\r
+ int width = this.r表示するプレビュー画像.sz画像サイズ.Width;\r
+ int height = this.r表示するプレビュー画像.sz画像サイズ.Height;\r
+ if( width > 0xcc )\r
+ {\r
+ width = 0xcc;\r
+ }\r
+ if( height > 0x10d )\r
+ {\r
+ height = 0x10d;\r
+ }\r
+ x += ( 0xcc - ( (int) ( width * num4 ) ) ) / 2;\r
+ y += ( 0x10d - ( (int) ( height * num4 ) ) ) / 2;\r
+ this.r表示するプレビュー画像.n透明度 = (int) ( 255f * num3 );\r
+ this.r表示するプレビュー画像.vc拡大縮小倍率.X = num4;\r
+ this.r表示するプレビュー画像.vc拡大縮小倍率.Y = num4;\r
+ this.r表示するプレビュー画像.t2D描画( CDTXMania.app.Device, x, y, new Rectangle( 0, 0, width, height ) );\r
+ }\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Diagnostics;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CActSelectPresound : CActivity\r
+ {\r
+ // メソッド\r
+\r
+ public CActSelectPresound()\r
+ {\r
+ base.b活性化してない = true;\r
+ }\r
+ public void tサウンド停止()\r
+ {\r
+ if( this.sound != null )\r
+ {\r
+ this.sound.t再生を停止する();\r
+ CDTXMania.Sound管理.tサウンドを破棄する( this.sound );\r
+ this.sound = null;\r
+ }\r
+ }\r
+ public void t選択曲が変更された()\r
+ {\r
+ Cスコア cスコア = CDTXMania.stage選曲.r現在選択中のスコア;\r
+ if( ( cスコア != null ) && ( ( !( cスコア.ファイル情報.フォルダの絶対パス + cスコア.譜面情報.Presound ).Equals( this.str現在のファイル名 ) || ( this.sound == null ) ) || !this.sound.b再生中 ) )\r
+ {\r
+ this.tサウンド停止();\r
+ this.tBGMフェードイン開始();\r
+ if( ( cスコア.譜面情報.Presound != null ) && ( cスコア.譜面情報.Presound.Length > 0 ) )\r
+ {\r
+ this.ct再生待ちウェイト = new CCounter( 0, CDTXMania.ConfigIni.n曲が選択されてからプレビュー音が鳴るまでのウェイトms, 1, CDTXMania.Timer );\r
+ }\r
+ }\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ this.sound = null;\r
+ this.str現在のファイル名 = "";\r
+ this.ct再生待ちウェイト = null;\r
+ this.ctBGMフェードアウト用 = null;\r
+ this.ctBGMフェードイン用 = null;\r
+ base.On活性化();\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ this.tサウンド停止();\r
+ this.ct再生待ちウェイト = null;\r
+ this.ctBGMフェードイン用 = null;\r
+ this.ctBGMフェードアウト用 = null;\r
+ base.On非活性化();\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ if( ( this.ctBGMフェードイン用 != null ) && this.ctBGMフェードイン用.b進行中 )\r
+ {\r
+ this.ctBGMフェードイン用.t進行();\r
+ CDTXMania.Skin.bgm選曲画面.n音量・現在のサウンド = this.ctBGMフェードイン用.n現在の値;\r
+ if( this.ctBGMフェードイン用.b終了値に達した )\r
+ {\r
+ this.ctBGMフェードイン用.t停止();\r
+ }\r
+ }\r
+ if( ( this.ctBGMフェードアウト用 != null ) && this.ctBGMフェードアウト用.b進行中 )\r
+ {\r
+ this.ctBGMフェードアウト用.t進行();\r
+ CDTXMania.Skin.bgm選曲画面.n音量・現在のサウンド = 100 - this.ctBGMフェードアウト用.n現在の値;\r
+ if( this.ctBGMフェードアウト用.b終了値に達した )\r
+ {\r
+ this.ctBGMフェードアウト用.t停止();\r
+ }\r
+ }\r
+ this.t進行処理・プレビューサウンド();\r
+ }\r
+ return 0;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private CCounter ctBGMフェードアウト用;\r
+ private CCounter ctBGMフェードイン用;\r
+ private CCounter ct再生待ちウェイト;\r
+ private CSound sound;\r
+ private string str現在のファイル名;\r
+ \r
+ private void tBGMフェードアウト開始()\r
+ {\r
+ if( this.ctBGMフェードイン用 != null )\r
+ {\r
+ this.ctBGMフェードイン用.t停止();\r
+ }\r
+ this.ctBGMフェードアウト用 = new CCounter( 0, 100, 10, CDTXMania.Timer );\r
+ this.ctBGMフェードアウト用.n現在の値 = 100 - CDTXMania.Skin.bgm選曲画面.n音量・現在のサウンド;\r
+ }\r
+ private void tBGMフェードイン開始()\r
+ {\r
+ if( this.ctBGMフェードアウト用 != null )\r
+ {\r
+ this.ctBGMフェードアウト用.t停止();\r
+ }\r
+ this.ctBGMフェードイン用 = new CCounter( 0, 100, 20, CDTXMania.Timer );\r
+ this.ctBGMフェードイン用.n現在の値 = CDTXMania.Skin.bgm選曲画面.n音量・現在のサウンド;\r
+ }\r
+ private void tプレビューサウンドの作成()\r
+ {\r
+ Cスコア cスコア = CDTXMania.stage選曲.r現在選択中のスコア;\r
+ if( ( cスコア != null ) && !string.IsNullOrEmpty( cスコア.譜面情報.Presound ) )\r
+ {\r
+ string str = cスコア.ファイル情報.フォルダの絶対パス + cスコア.譜面情報.Presound;\r
+ try\r
+ {\r
+ this.sound = CDTXMania.Sound管理.tサウンドを生成する( str );\r
+ this.sound.n音量 = CDTXMania.ConfigIni.n自動再生音量;\r
+ this.sound.t再生を開始する( true );\r
+ this.str現在のファイル名 = str;\r
+ this.tBGMフェードアウト開始();\r
+ Trace.TraceInformation( "サウンドを生成しました。({0})", new object[] { str } );\r
+ }\r
+ catch\r
+ {\r
+ Trace.TraceError( "サウンドの生成に失敗しました。({0})", new object[] { str } );\r
+ if( this.sound != null )\r
+ {\r
+ this.sound.Dispose();\r
+ }\r
+ this.sound = null;\r
+ }\r
+ }\r
+ }\r
+ private void t進行処理・プレビューサウンド()\r
+ {\r
+ if( ( this.ct再生待ちウェイト != null ) && !this.ct再生待ちウェイト.b停止中 )\r
+ {\r
+ this.ct再生待ちウェイト.t進行();\r
+ if( !this.ct再生待ちウェイト.b終了値に達してない )\r
+ {\r
+ this.ct再生待ちウェイト.t停止();\r
+ if( !CDTXMania.stage選曲.bスクロール中 )\r
+ {\r
+ this.tプレビューサウンドの作成();\r
+ }\r
+ }\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using System.Drawing;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CActSelectステータスパネル : CActivity\r
+ {\r
+ // メソッド\r
+\r
+ public CActSelectステータスパネル()\r
+ {\r
+ base.b活性化してない = true;\r
+ }\r
+ public void t選択曲が変更された()\r
+ {\r
+ C曲リストノード c曲リストノード = CDTXMania.stage選曲.r現在選択中の曲;\r
+ Cスコア cスコア = CDTXMania.stage選曲.r現在選択中のスコア;\r
+ if( ( c曲リストノード != null ) && ( cスコア != null ) )\r
+ {\r
+ this.n現在選択中の曲の難易度 = CDTXMania.stage選曲.n現在選択中の曲の難易度;\r
+ for( int i = 0; i < 3; i++ )\r
+ {\r
+ int num2 = cスコア.譜面情報.レベル[ i ];\r
+ if( num2 < 0 )\r
+ {\r
+ num2 = 0;\r
+ }\r
+ if( num2 > 0x63 )\r
+ {\r
+ num2 = 0x63;\r
+ }\r
+ this.n現在選択中の曲のレベル[ i ] = num2;\r
+ this.n現在選択中の曲の最高ランク[ i ] = cスコア.譜面情報.最大ランク[ i ];\r
+ this.b現在選択中の曲がフルコンボ[ i ] = cスコア.譜面情報.フルコンボ[ i ];\r
+ this.db現在選択中の曲の最高スキル値[ i ] = cスコア.譜面情報.最大スキル[ i ];\r
+ }\r
+ for( int j = 0; j < 5; j++ )\r
+ {\r
+ this.str難易度ラベル[ j ] = c曲リストノード.ar難易度ラベル[ j ];\r
+ }\r
+ if( this.r直前の曲 != c曲リストノード )\r
+ {\r
+ this.n難易度開始文字位置 = 0;\r
+ }\r
+ this.r直前の曲 = c曲リストノード;\r
+ }\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ this.n本体X = 3;\r
+ this.n本体Y = 0x15d;\r
+ this.n現在選択中の曲の難易度 = 0;\r
+ for( int i = 0; i < 3; i++ )\r
+ {\r
+ this.n現在選択中の曲のレベル[ i ] = 0;\r
+ this.n現在選択中の曲の最高ランク[ i ] = 0x63;\r
+ this.b現在選択中の曲がフルコンボ[ i ] = false;\r
+ this.db現在選択中の曲の最高スキル値[ i ] = 0.0;\r
+ }\r
+ for( int j = 0; j < 5; j++ )\r
+ {\r
+ this.str難易度ラベル[ j ] = "";\r
+ }\r
+ this.n難易度開始文字位置 = 0;\r
+ this.r直前の曲 = null;\r
+ base.On活性化();\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ this.ct登場アニメ用 = null;\r
+ this.ct難易度スクロール用 = null;\r
+ this.ct難易度矢印用 = null;\r
+ base.On非活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.txパネル本体 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect status panel.png" ), true );\r
+ this.txレベル数字 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect level numbers.png" ), false );\r
+ this.txスキルゲージ = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect skill gauge.png" ), false );\r
+ this.txゲージ用数字他 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect skill number on gauge etc.png" ), false );\r
+ this.tx難易度用矢印 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect triangle arrow.png" ), false );\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.txパネル本体 );\r
+ CDTXMania.tテクスチャの解放( ref this.txレベル数字 );\r
+ CDTXMania.tテクスチャの解放( ref this.txスキルゲージ );\r
+ CDTXMania.tテクスチャの解放( ref this.txゲージ用数字他 );\r
+ CDTXMania.tテクスチャの解放( ref this.tx難易度用矢印 );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ #region [ 初めての進行描画 ]\r
+ //-----------------\r
+ if( base.b初めての進行描画 )\r
+ {\r
+ this.ct登場アニメ用 = new CCounter( 0, 100, 5, CDTXMania.Timer );\r
+ this.ct難易度スクロール用 = new CCounter( 0, 20, 1, CDTXMania.Timer );\r
+ this.ct難易度矢印用 = new CCounter( 0, 5, 80, CDTXMania.Timer );\r
+ base.b初めての進行描画 = false;\r
+ }\r
+ //-----------------\r
+ #endregion\r
+\r
+ // 進行\r
+\r
+ this.ct登場アニメ用.t進行();\r
+\r
+ this.ct難易度スクロール用.t進行();\r
+ if( this.ct難易度スクロール用.b終了値に達した )\r
+ {\r
+ int num = this.n現在の難易度ラベルが完全表示されているかを調べてスクロール方向を返す();\r
+ if( num < 0 )\r
+ {\r
+ this.n難易度開始文字位置--;\r
+ }\r
+ else if( num > 0 )\r
+ {\r
+ this.n難易度開始文字位置++;\r
+ }\r
+ this.ct難易度スクロール用.n現在の値 = 0;\r
+ }\r
+ \r
+ this.ct難易度矢印用.t進行Loop();\r
+ \r
+ // 描画\r
+\r
+ #region [ パネル本体の描画 ]\r
+ //-----------------\r
+ if( this.txパネル本体 != null )\r
+ {\r
+ if( this.ct登場アニメ用.b終了値に達した )\r
+ {\r
+ this.n本体X = 3;\r
+ this.n本体Y = 0x15d;\r
+ }\r
+ else\r
+ {\r
+ double num2 = ( (double) ( 100 - this.ct登場アニメ用.n現在の値 ) ) / 100.0;\r
+ double num3 = Math.Sin( 1.5707963267948966 * num2 );\r
+ this.n本体X = 3 - ( (int) ( ( this.txパネル本体.sz画像サイズ.Width * num3 ) * num3 ) );\r
+ this.n本体Y = 0x15d;\r
+ }\r
+ this.txパネル本体.t2D描画( CDTXMania.app.Device, this.n本体X, this.n本体Y );\r
+ }\r
+ //-----------------\r
+ #endregion\r
+\r
+ #region [ 難易度文字列の描画 ]\r
+ //-----------------\r
+\r
+ #region [ chArray ← 難易度文字列を並べたもの、index ← その文字数 ]\r
+ //-----------------\r
+ char[] chArray = new char[ 0x100 ];\r
+ C文字コンソール.Eフォント種別[] eフォント種別Array = new C文字コンソール.Eフォント種別[ 0x100 ];\r
+ bool flag = false;\r
+ bool flag2 = true;\r
+ int index = 0;\r
+ for( int i = 0; i < 5; i++ )\r
+ {\r
+ if( ( this.str難易度ラベル[ i ] != null ) && ( this.str難易度ラベル[ i ].Length > 0 ) )\r
+ {\r
+ string str = this.str難易度ラベル[ i ];\r
+ char[] chArray2 = new char[ 0x100 ];\r
+ int num6 = 0;\r
+ while( ( num6 < 0xff ) && ( num6 < this.str難易度ラベル[ i ].Length ) )\r
+ {\r
+ chArray2[ num6 ] = str[ num6 ];\r
+ num6++;\r
+ }\r
+ chArray2[ num6 ] = '\0';\r
+ if( !flag2 )\r
+ {\r
+ if( index < 0xff )\r
+ {\r
+ chArray[ index ] = ' ';\r
+ eフォント種別Array[ index ] = C文字コンソール.Eフォント種別.白;\r
+ index++;\r
+ }\r
+ if( index < 0xff )\r
+ {\r
+ chArray[ index ] = ' ';\r
+ eフォント種別Array[ index ] = C文字コンソール.Eフォント種別.白;\r
+ index++;\r
+ }\r
+ }\r
+ flag2 = false;\r
+ num6 = 0;\r
+ while( ( chArray2[ num6 ] != '\0' ) && ( index < 0xff ) )\r
+ {\r
+ chArray[ index ] = chArray2[ num6++ ];\r
+ eフォント種別Array[ index ] = ( this.n現在選択中の曲の難易度 == i ) ? C文字コンソール.Eフォント種別.赤 : C文字コンソール.Eフォント種別.白;\r
+ index++;\r
+ }\r
+ chArray[ index ] = '\0';\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+\r
+ if( index > 0 )\r
+ {\r
+ int x = this.n本体X + 20;\r
+ int y = this.n本体Y + 0x10;\r
+ index = this.n難易度開始文字位置;\r
+ flag = true;\r
+ while( index < ( this.n難易度開始文字位置 + 0x24 ) )\r
+ {\r
+ CDTXMania.act文字コンソール.tPrint( x, y, eフォント種別Array[ index ], chArray[ index ].ToString() );\r
+ x += 8;\r
+ index++;\r
+ if( chArray[ index ] == '\0' )\r
+ {\r
+ flag = false;\r
+ break;\r
+ }\r
+ }\r
+ if( this.n難易度開始文字位置 > 0 )\r
+ {\r
+ int num9 = ( this.n本体X + 12 ) - this.ct難易度矢印用.n現在の値;\r
+ int num10 = ( this.n本体Y + 0x10 ) + 5;\r
+ if( this.tx難易度用矢印 != null )\r
+ {\r
+ this.tx難易度用矢印.t2D描画( CDTXMania.app.Device, num9, num10, new Rectangle( 0, 0, 8, 0x10 ) );\r
+ }\r
+ }\r
+ if( flag )\r
+ {\r
+ int num11 = ( ( this.n本体X + 20 ) + 0x120 ) + this.ct難易度矢印用.n現在の値;\r
+ int num12 = ( this.n本体Y + 0x10 ) + 5;\r
+ if( this.tx難易度用矢印 != null )\r
+ {\r
+ this.tx難易度用矢印.t2D描画( CDTXMania.app.Device, num11, num12, new Rectangle( 8, 0, 8, 0x10 ) );\r
+ }\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+\r
+ Cスコア cスコア = CDTXMania.stage選曲.r現在選択中のスコア;\r
+\r
+ #region [ 選択曲の Lv の描画 ]\r
+ //-----------------\r
+ if( ( cスコア != null ) && ( this.txレベル数字 != null ) )\r
+ {\r
+ for( int n = 0; n < 3; n++ )\r
+ {\r
+ Rectangle rectangle;\r
+ Rectangle rectangle2;\r
+ int num14 = this.n本体X + 0x42;\r
+ int num15 = ( this.n本体Y + 50 ) + ( n * 0x15 );\r
+ int num16 = this.n現在選択中の曲のレベル[ n ];\r
+ if( num16 < 0 )\r
+ {\r
+ num16 = 0;\r
+ }\r
+ else if( num16 > 0x63 )\r
+ {\r
+ num16 = 0x63;\r
+ }\r
+ int num17 = ( ( num16 / 0x19 ) < 2 ) ? 0x40 : 0;\r
+ int num18 = ( ( ( num16 / 0x19 ) % 2 ) == 0 ) ? 0x40 : 0;\r
+ if( num16 == 0 )\r
+ {\r
+ rectangle = this.rc数字[ 11 ];\r
+ rectangle2 = this.rc数字[ 11 ];\r
+ }\r
+ else if( cスコア.譜面情報.レベルを非表示にする )\r
+ {\r
+ rectangle = this.rc数字[ 10 ];\r
+ rectangle2 = this.rc数字[ 10 ];\r
+ }\r
+ else\r
+ {\r
+ rectangle = this.rc数字[ num16 / 10 ];\r
+ rectangle2 = this.rc数字[ num16 % 10 ];\r
+ }\r
+ rectangle.X += num17;\r
+ rectangle.Y += num18;\r
+ rectangle2.X += num17;\r
+ rectangle2.Y += num18;\r
+ this.txレベル数字.t2D描画( CDTXMania.app.Device, num14, num15, rectangle );\r
+ this.txレベル数字.t2D描画( CDTXMania.app.Device, num14 + 13, num15, rectangle2 );\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ #region [ 選択曲の 最高スキル値ゲージ+数値の描画 ]\r
+ //-----------------\r
+ for( int j = 0; j < 3; j++ )\r
+ {\r
+ if( this.n現在選択中の曲のレベル[ j ] != 0 )\r
+ {\r
+ double num20 = this.db現在選択中の曲の最高スキル値[ j ];\r
+ if( num20 != 0.0 )\r
+ {\r
+ int num21 = this.n本体X + 100;\r
+ int num22 = ( this.n本体Y + 0x35 ) + ( j * 0x15 );\r
+ this.txスキルゲージ.t2D描画( CDTXMania.app.Device, num21, num22, new Rectangle( 0, 0, (int) ( ( 170.0 * num20 ) / 100.0 ), 10 ) );\r
+ }\r
+ string str2 = num20.ToString( "##0.00" );\r
+ int num23 = 0;\r
+ foreach( char ch in str2 )\r
+ {\r
+ for( int num24 = 0; num24 < 12; num24++ )\r
+ {\r
+ if( ch == this.st数字[ num24 ].ch )\r
+ {\r
+ num23 += this.st数字[ num24 ].rc.Width - 1;\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ int num25 = ( this.n本体X + 0xb6 ) - ( num23 / 2 );\r
+ int num26 = ( this.n本体Y + 0x35 ) + ( j * 0x15 );\r
+ foreach( char ch2 in str2 )\r
+ {\r
+ for( int num27 = 0; num27 < 12; num27++ )\r
+ {\r
+ if( ch2 == this.st数字[ num27 ].ch )\r
+ {\r
+ if( this.txゲージ用数字他 != null )\r
+ {\r
+ this.txゲージ用数字他.t2D描画( CDTXMania.app.Device, num25, num26, this.st数字[ num27 ].rc );\r
+ }\r
+ num25 += this.st数字[ num27 ].rc.Width - 1;\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ int num28 = ( this.n本体X + 0xb6 ) - 20;\r
+ int num29 = ( this.n本体Y + 0x35 ) + ( j * 0x15 );\r
+ if( this.txゲージ用数字他 != null )\r
+ {\r
+ this.txゲージ用数字他.t2D描画( CDTXMania.app.Device, num28, num29, new Rectangle( 0, 0x16, 40, 10 ) );\r
+ }\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ #region [ 選択曲の 最高ランクの描画 ]\r
+ //-----------------\r
+ for( int k = 0; k < 3; k++ )\r
+ {\r
+ int num31 = this.n現在選択中の曲の最高ランク[ k ];\r
+ if( num31 != 0x63 )\r
+ {\r
+ if( num31 < 0 )\r
+ {\r
+ num31 = 0;\r
+ }\r
+ if( num31 > 6 )\r
+ {\r
+ num31 = 6;\r
+ }\r
+ int num32 = this.n本体X + 0x116;\r
+ int num33 = ( this.n本体Y + 0x37 ) + ( k * 0x15 );\r
+ if( this.txゲージ用数字他 != null )\r
+ {\r
+ this.txゲージ用数字他.t2D描画( CDTXMania.app.Device, num32, num33, this.rcランク[ num31 ] );\r
+ }\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ #region [ 選択曲の FullCombo の 描画 ]\r
+ //-----------------\r
+ Rectangle rectangle3 = new Rectangle( 30, 0x20, 30, 0x10 );\r
+ for( int m = 0; m < 3; m++ )\r
+ {\r
+ if( this.b現在選択中の曲がフルコンボ[ m ] )\r
+ {\r
+ int num35 = this.n本体X + 290;\r
+ int num36 = ( this.n本体Y + 0x35 ) + ( m * 0x15 );\r
+ if( this.txゲージ用数字他 != null )\r
+ {\r
+ this.txゲージ用数字他.t2D描画( CDTXMania.app.Device, num35, num36, rectangle3 );\r
+ }\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+ return 0;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ private struct ST数字\r
+ {\r
+ public char ch;\r
+ public Rectangle rc;\r
+ public ST数字( char ch, Rectangle rc )\r
+ {\r
+ this.ch = ch;\r
+ this.rc = rc;\r
+ }\r
+ }\r
+\r
+ private STDGBVALUE<bool> b現在選択中の曲がフルコンボ;\r
+ private CCounter ct登場アニメ用;\r
+ private CCounter ct難易度スクロール用;\r
+ private CCounter ct難易度矢印用;\r
+ private STDGBVALUE<double> db現在選択中の曲の最高スキル値;\r
+ private STDGBVALUE<int> n現在選択中の曲のレベル;\r
+ private STDGBVALUE<int> n現在選択中の曲の最高ランク;\r
+ private int n現在選択中の曲の難易度;\r
+ private int n難易度開始文字位置;\r
+ private const int n難易度表示可能文字数 = 0x24;\r
+ private int n本体X;\r
+ private int n本体Y;\r
+ private readonly Rectangle[] rcランク = new Rectangle[] { new Rectangle( 0, 0x20, 10, 10 ), new Rectangle( 10, 0x20, 10, 10 ), new Rectangle( 20, 0x20, 10, 10 ), new Rectangle( 0, 0x2a, 10, 10 ), new Rectangle( 10, 0x2a, 10, 10 ), new Rectangle( 20, 0x2a, 10, 10 ), new Rectangle( 0, 0x34, 10, 10 ) };\r
+ private readonly Rectangle[] rc数字 = new Rectangle[] { new Rectangle( 0, 0, 15, 0x13 ), new Rectangle( 15, 0, 15, 0x13 ), new Rectangle( 30, 0, 15, 0x13 ), new Rectangle( 0x2d, 0, 15, 0x13 ), new Rectangle( 0, 0x13, 15, 0x13 ), new Rectangle( 15, 0x13, 15, 0x13 ), new Rectangle( 30, 0x13, 15, 0x13 ), new Rectangle( 0x2d, 0x13, 15, 0x13 ), new Rectangle( 0, 0x26, 15, 0x13 ), new Rectangle( 15, 0x26, 15, 0x13 ), new Rectangle( 30, 0x26, 15, 0x13 ), new Rectangle( 0x2d, 0x26, 15, 0x13 ) };\r
+ private C曲リストノード r直前の曲;\r
+ private string[] str難易度ラベル = new string[] { "", "", "", "", "" };\r
+ private readonly ST数字[] st数字 = new ST数字[] { new ST数字( '0', new Rectangle( 0, 0, 8, 11 ) ), new ST数字( '1', new Rectangle( 8, 0, 8, 11 ) ), new ST数字( '2', new Rectangle( 0x10, 0, 8, 11 ) ), new ST数字( '3', new Rectangle( 0x18, 0, 8, 11 ) ), new ST数字( '4', new Rectangle( 0x20, 0, 8, 11 ) ), new ST数字( '5', new Rectangle( 40, 0, 8, 11 ) ), new ST数字( '6', new Rectangle( 0, 11, 8, 11 ) ), new ST数字( '7', new Rectangle( 8, 11, 8, 11 ) ), new ST数字( '8', new Rectangle( 0x10, 11, 8, 11 ) ), new ST数字( '9', new Rectangle( 0x18, 11, 8, 11 ) ), new ST数字( '.', new Rectangle( 0x20, 11, 4, 11 ) ), new ST数字( 'p', new Rectangle( 0x24, 11, 15, 11 ) ) };\r
+ private CTexture txゲージ用数字他;\r
+ private CTexture txスキルゲージ;\r
+ private CTexture txパネル本体;\r
+ private CTexture txレベル数字;\r
+ private CTexture tx難易度用矢印;\r
+\r
+ private int n現在の難易度ラベルが完全表示されているかを調べてスクロール方向を返す()\r
+ {\r
+ int num = 0;\r
+ int length = 0;\r
+ for( int i = 0; i < 5; i++ )\r
+ {\r
+ if( ( this.str難易度ラベル[ i ] != null ) && ( this.str難易度ラベル[ i ].Length > 0 ) )\r
+ {\r
+ length = this.str難易度ラベル[ i ].Length;\r
+ }\r
+ if( this.n現在選択中の曲の難易度 == i )\r
+ {\r
+ break;\r
+ }\r
+ if( ( this.str難易度ラベル[ i ] != null ) && ( this.str難易度ラベル.Length > 0 ) )\r
+ {\r
+ num += length + 2;\r
+ }\r
+ }\r
+ if( num >= ( this.n難易度開始文字位置 + 0x24 ) )\r
+ {\r
+ return 1;\r
+ }\r
+ if( ( num + length ) <= this.n難易度開始文字位置 )\r
+ {\r
+ return -1;\r
+ }\r
+ if( ( ( num + length ) - 1 ) >= ( this.n難易度開始文字位置 + 0x24 ) )\r
+ {\r
+ return 1;\r
+ }\r
+ if( num < this.n難易度開始文字位置 )\r
+ {\r
+ return -1;\r
+ }\r
+ return 0;\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using System.Drawing;\r
+using System.Drawing.Imaging;\r
+using System.Diagnostics;\r
+using SlimDX;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CActSelect曲リスト : CActivity\r
+ {\r
+ // プロパティ\r
+\r
+ public bool bスクロール中\r
+ {\r
+ get\r
+ {\r
+ if( this.n目標のスクロールカウンタ == 0 )\r
+ {\r
+ return ( this.n現在のスクロールカウンタ != 0 );\r
+ }\r
+ return true;\r
+ }\r
+ }\r
+ public int n現在のアンカ難易度レベル \r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+ public int n現在選択中の曲の現在の難易度レベル\r
+ {\r
+ get\r
+ {\r
+ return this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( this.r現在選択中の曲 );\r
+ }\r
+ }\r
+ public Cスコア r現在選択中のスコア\r
+ {\r
+ get\r
+ {\r
+ if( this.r現在選択中の曲 != null )\r
+ {\r
+ return this.r現在選択中の曲.arスコア[ this.n現在選択中の曲の現在の難易度レベル ];\r
+ }\r
+ return null;\r
+ }\r
+ }\r
+ public C曲リストノード r現在選択中の曲 \r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public CActSelect曲リスト()\r
+ {\r
+ this.r現在選択中の曲 = null;\r
+ this.n現在のアンカ難易度レベル = 0;\r
+ base.b活性化してない = true;\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ public int n現在のアンカ難易度レベルに最も近い難易度レベルを返す( C曲リストノード song )\r
+ {\r
+ if( song == null )\r
+ {\r
+ return this.n現在のアンカ難易度レベル;\r
+ }\r
+ if( ( song.eノード種別 == C曲リストノード.Eノード種別.BOX ) || ( song.eノード種別 == C曲リストノード.Eノード種別.BACKBOX ) )\r
+ {\r
+ return 0;\r
+ }\r
+ if( song.arスコア[ this.n現在のアンカ難易度レベル ] != null )\r
+ {\r
+ return this.n現在のアンカ難易度レベル;\r
+ }\r
+ int index = this.n現在のアンカ難易度レベル;\r
+ int num2 = this.n現在のアンカ難易度レベル;\r
+ for( int i = 0; i < 5; i++ )\r
+ {\r
+ if( song.arスコア[ index ] != null )\r
+ {\r
+ break;\r
+ }\r
+ index = ( index + 1 ) % 5;\r
+ }\r
+ if( index < num2 )\r
+ {\r
+ index = num2;\r
+ for( int j = 0; j < 5; j++ )\r
+ {\r
+ if( song.arスコア[ index ] != null )\r
+ {\r
+ return index;\r
+ }\r
+ if( --index < 0 )\r
+ {\r
+ index = 4;\r
+ }\r
+ }\r
+ }\r
+ return index;\r
+ }\r
+ public C曲リストノード r指定された曲が存在するリストの先頭の曲( C曲リストノード song )\r
+ {\r
+ if( song.r親ノード == null )\r
+ {\r
+ if( ( CDTXMania.Songs管理.list曲ルート != null ) && ( CDTXMania.Songs管理.list曲ルート.Count > 0 ) )\r
+ {\r
+ return CDTXMania.Songs管理.list曲ルート[ 0 ];\r
+ }\r
+ return null;\r
+ }\r
+ if( ( song.r親ノード.list子リスト != null ) && ( song.r親ノード.list子リスト.Count > 0 ) )\r
+ {\r
+ return song.r親ノード.list子リスト[ 0 ];\r
+ }\r
+ return null;\r
+ }\r
+ public C曲リストノード r指定された曲が存在するリストの末尾の曲( C曲リストノード song )\r
+ {\r
+ if( song.r親ノード == null )\r
+ {\r
+ if( ( CDTXMania.Songs管理.list曲ルート != null ) && ( CDTXMania.Songs管理.list曲ルート.Count > 0 ) )\r
+ {\r
+ return CDTXMania.Songs管理.list曲ルート[ CDTXMania.Songs管理.list曲ルート.Count - 1 ];\r
+ }\r
+ return null;\r
+ }\r
+ if( ( song.r親ノード.list子リスト != null ) && ( song.r親ノード.list子リスト.Count > 0 ) )\r
+ {\r
+ return song.r親ノード.list子リスト[ song.r親ノード.list子リスト.Count - 1 ];\r
+ }\r
+ return null;\r
+ }\r
+ public void tBOXに入る()\r
+ {\r
+ if( ( this.r現在選択中の曲.list子リスト != null ) && ( this.r現在選択中の曲.list子リスト.Count > 0 ) )\r
+ {\r
+ this.r現在選択中の曲 = this.r現在選択中の曲.list子リスト[ 0 ];\r
+ this.t現在選択中の曲を元に曲バーを再構成する();\r
+ }\r
+ }\r
+ public void tBOXを出る()\r
+ {\r
+ if( this.r現在選択中の曲.r親ノード != null )\r
+ {\r
+ this.r現在選択中の曲 = this.r現在選択中の曲.r親ノード;\r
+ this.t現在選択中の曲を元に曲バーを再構成する();\r
+ }\r
+ }\r
+ public void t現在選択中の曲を元に曲バーを再構成する()\r
+ {\r
+ this.tバーの初期化();\r
+ for( int i = 0; i < 13; i++ )\r
+ {\r
+ this.t曲名バーの生成( i, this.stバー情報[ i ].strタイトル文字列, this.stバー情報[ i ].col文字色 );\r
+ }\r
+ }\r
+ public void t次に移動()\r
+ {\r
+ if( this.r現在選択中の曲 != null )\r
+ {\r
+ this.n目標のスクロールカウンタ += 100;\r
+ }\r
+ }\r
+ public void t前に移動()\r
+ {\r
+ if( this.r現在選択中の曲 != null )\r
+ {\r
+ this.n目標のスクロールカウンタ -= 100;\r
+ }\r
+ }\r
+ public void t難易度レベルをひとつ進める()\r
+ {\r
+ if( ( this.r現在選択中の曲 != null ) && ( this.r現在選択中の曲.nスコア数 > 1 ) )\r
+ {\r
+ this.n現在のアンカ難易度レベル = this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( this.r現在選択中の曲 );\r
+ for( int i = 0; i < 5; i++ )\r
+ {\r
+ this.n現在のアンカ難易度レベル = ( this.n現在のアンカ難易度レベル + 1 ) % 5;\r
+ if( this.r現在選択中の曲.arスコア[ this.n現在のアンカ難易度レベル ] != null )\r
+ {\r
+ break;\r
+ }\r
+ }\r
+ C曲リストノード song = this.r現在選択中の曲;\r
+ for( int j = 0; j < 5; j++ )\r
+ {\r
+ song = this.r前の曲( song );\r
+ }\r
+ for( int k = this.n現在の選択行 - 5; k < ( ( this.n現在の選択行 - 5 ) + 13 ); k++ )\r
+ {\r
+ int index = ( k + 13 ) % 13;\r
+ for( int m = 0; m < 3; m++ )\r
+ {\r
+ this.stバー情報[ index ].nスキル値[ m ] = (int) song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].譜面情報.最大スキル[ m ];\r
+ }\r
+ song = this.r次の曲( song );\r
+ }\r
+ CDTXMania.stage選曲.t選択曲変更通知();\r
+ }\r
+ }\r
+\r
+ \r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ this.e楽器パート = E楽器パート.DRUMS;\r
+ this.b登場アニメ全部完了 = false;\r
+ this.n目標のスクロールカウンタ = 0;\r
+ this.n現在のスクロールカウンタ = 0;\r
+ this.nスクロールタイマ = -1;\r
+ FontStyle regular = FontStyle.Regular;\r
+ if( CDTXMania.ConfigIni.b選曲リストフォントを斜体にする )\r
+ {\r
+ regular |= FontStyle.Italic;\r
+ }\r
+ if( CDTXMania.ConfigIni.b選曲リストフォントを太字にする )\r
+ {\r
+ regular |= FontStyle.Bold;\r
+ }\r
+ this.ft曲リスト用フォント = new Font( CDTXMania.ConfigIni.str選曲リストフォント, (float) ( CDTXMania.ConfigIni.n選曲リストフォントのサイズdot * 2 ), regular, GraphicsUnit.Pixel );\r
+ if( ( this.r現在選択中の曲 == null ) && ( CDTXMania.Songs管理.list曲ルート.Count > 0 ) )\r
+ {\r
+ this.r現在選択中の曲 = CDTXMania.Songs管理.list曲ルート[ 0 ];\r
+ }\r
+ this.tバーの初期化();\r
+ base.On活性化();\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ if( this.ft曲リスト用フォント != null )\r
+ {\r
+ this.ft曲リスト用フォント.Dispose();\r
+ this.ft曲リスト用フォント = null;\r
+ }\r
+ for( int i = 0; i < 13; i++ )\r
+ {\r
+ this.ct登場アニメ用[ i ] = null;\r
+ }\r
+ base.On非活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.tx曲名バー.Score = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect bar score.png" ), false );\r
+ this.tx曲名バー.Box = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect bar box.png" ), false );\r
+ this.tx曲名バー.Other = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect bar other.png" ), false );\r
+ this.tx選曲バー.Score = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect bar score selected.png" ), false );\r
+ this.tx選曲バー.Box = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect bar box selected.png" ), false );\r
+ this.tx選曲バー.Other = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect bar other selected.png" ), false );\r
+ this.txスキル数字 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect skill number on list.png" ), false );\r
+ for( int i = 0; i < 13; i++ )\r
+ {\r
+ this.t曲名バーの生成( i, this.stバー情報[ i ].strタイトル文字列, this.stバー情報[ i ].col文字色 );\r
+ }\r
+ try\r
+ {\r
+ Bitmap image = new Bitmap( 300, 0x20 );\r
+ Graphics graphics = Graphics.FromImage( image );\r
+ graphics.DrawString( "Song not found...", this.ft曲リスト用フォント, Brushes.DarkGray, (float) 2f, (float) 2f );\r
+ graphics.DrawString( "Song not found...", this.ft曲リスト用フォント, Brushes.White, (float) 0f, (float) 0f );\r
+ graphics.Dispose();\r
+ this.txSongNotFound = new CTexture( CDTXMania.app.Device, image, CDTXMania.TextureFormat );\r
+ this.txSongNotFound.vc拡大縮小倍率 = new Vector3( 0.5f, 0.5f, 1f );\r
+ image.Dispose();\r
+ }\r
+ catch( CTextureCreateFailedException )\r
+ {\r
+ Trace.TraceError( "SoungNotFoundテクスチャの作成に失敗しました。" );\r
+ this.txSongNotFound = null;\r
+ }\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ for( int i = 0; i < 13; i++ )\r
+ {\r
+ if( this.stバー情報[ i ].txタイトル名 != null )\r
+ {\r
+ this.stバー情報[ i ].txタイトル名.Dispose();\r
+ this.stバー情報[ i ].txタイトル名 = null;\r
+ }\r
+ }\r
+\r
+ if( this.txスキル数字 != null )\r
+ {\r
+ this.txスキル数字.Dispose();\r
+ this.txスキル数字 = null;\r
+ }\r
+ if( this.txSongNotFound != null )\r
+ {\r
+ this.txSongNotFound.Dispose();\r
+ this.txSongNotFound = null;\r
+ }\r
+ if( this.tx曲名バー.Score != null )\r
+ {\r
+ this.tx曲名バー.Score.Dispose();\r
+ this.tx曲名バー.Score = null;\r
+ }\r
+ if( this.tx曲名バー.Box != null )\r
+ {\r
+ this.tx曲名バー.Box.Dispose();\r
+ this.tx曲名バー.Box = null;\r
+ }\r
+ if( this.tx曲名バー.Other != null )\r
+ {\r
+ this.tx曲名バー.Other.Dispose();\r
+ this.tx曲名バー.Other = null;\r
+ }\r
+ if( this.tx選曲バー.Score != null )\r
+ {\r
+ this.tx選曲バー.Score.Dispose();\r
+ this.tx選曲バー.Score = null;\r
+ }\r
+ if( this.tx選曲バー.Box != null )\r
+ {\r
+ this.tx選曲バー.Box.Dispose();\r
+ this.tx選曲バー.Box = null;\r
+ }\r
+ if( this.tx選曲バー.Other != null )\r
+ {\r
+ this.tx選曲バー.Other.Dispose();\r
+ this.tx選曲バー.Other = null;\r
+ }\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ if( base.b初めての進行描画 )\r
+ {\r
+ for( int i = 0; i < 13; i++ )\r
+ {\r
+ this.ct登場アニメ用[ i ] = new CCounter( -i * 10, 100, 3, CDTXMania.Timer );\r
+ }\r
+ this.nスクロールタイマ = CDTXMania.Timer.n現在時刻;\r
+ CDTXMania.stage選曲.t選択曲変更通知();\r
+ base.b初めての進行描画 = false;\r
+ }\r
+ if( ( this.r現在選択中の曲 == null ) && ( CDTXMania.Songs管理.list曲ルート.Count > 0 ) )\r
+ {\r
+ this.r現在選択中の曲 = CDTXMania.Songs管理.list曲ルート[ 0 ];\r
+ }\r
+ if( this.b登場アニメ全部完了 )\r
+ {\r
+ long num2 = CDTXMania.Timer.n現在時刻;\r
+ if( num2 < this.nスクロールタイマ )\r
+ {\r
+ this.nスクロールタイマ = num2;\r
+ }\r
+ int num3 = 2;\r
+ while( ( num2 - this.nスクロールタイマ ) >= num3 )\r
+ {\r
+ int num5;\r
+ int num4 = Math.Abs( (int) ( this.n目標のスクロールカウンタ - this.n現在のスクロールカウンタ ) );\r
+ if( num4 <= 100 )\r
+ {\r
+ num5 = 2;\r
+ }\r
+ else if( num4 <= 300 )\r
+ {\r
+ num5 = 3;\r
+ }\r
+ else if( num4 <= 500 )\r
+ {\r
+ num5 = 4;\r
+ }\r
+ else\r
+ {\r
+ num5 = 8;\r
+ }\r
+ if( this.n現在のスクロールカウンタ < this.n目標のスクロールカウンタ )\r
+ {\r
+ this.n現在のスクロールカウンタ += num5;\r
+ if( this.n現在のスクロールカウンタ > this.n目標のスクロールカウンタ )\r
+ {\r
+ this.n現在のスクロールカウンタ = this.n目標のスクロールカウンタ;\r
+ }\r
+ }\r
+ else if( this.n現在のスクロールカウンタ > this.n目標のスクロールカウンタ )\r
+ {\r
+ this.n現在のスクロールカウンタ -= num5;\r
+ if( this.n現在のスクロールカウンタ < this.n目標のスクロールカウンタ )\r
+ {\r
+ this.n現在のスクロールカウンタ = this.n目標のスクロールカウンタ;\r
+ }\r
+ }\r
+ if( this.n現在のスクロールカウンタ >= 100 )\r
+ {\r
+ this.r現在選択中の曲 = this.r次の曲( this.r現在選択中の曲 );\r
+ this.n現在の選択行 = ( this.n現在の選択行 + 1 ) % 13;\r
+ C曲リストノード song = this.r現在選択中の曲;\r
+ for( int j = 0; j < 7; j++ )\r
+ {\r
+ song = this.r次の曲( song );\r
+ }\r
+ int index = ( this.n現在の選択行 + 7 ) % 13;\r
+ this.stバー情報[ index ].strタイトル文字列 = song.strタイトル;\r
+ this.stバー情報[ index ].col文字色 = song.col文字色;\r
+ this.t曲名バーの生成( index, this.stバー情報[ index ].strタイトル文字列, this.stバー情報[ index ].col文字色 );\r
+ C曲リストノード c曲リストノード2 = this.r現在選択中の曲;\r
+ for( int k = 0; k < 5; k++ )\r
+ {\r
+ c曲リストノード2 = this.r前の曲( c曲リストノード2 );\r
+ }\r
+ for( int m = 0; m < 13; m++ )\r
+ {\r
+ int num10 = ( ( ( this.n現在の選択行 - 5 ) + m ) + 13 ) % 13;\r
+ this.stバー情報[ num10 ].eバー種別 = this.e曲のバー種別を返す( c曲リストノード2 );\r
+ c曲リストノード2 = this.r次の曲( c曲リストノード2 );\r
+ }\r
+ for( int n = 0; n < 3; n++ )\r
+ {\r
+ this.stバー情報[ index ].nスキル値[ n ] = (int) song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].譜面情報.最大スキル[ n ];\r
+ }\r
+ this.n現在のスクロールカウンタ -= 100;\r
+ this.n目標のスクロールカウンタ -= 100;\r
+ if( this.n目標のスクロールカウンタ == 0 )\r
+ {\r
+ CDTXMania.stage選曲.t選択曲変更通知();\r
+ }\r
+ }\r
+ else if( this.n現在のスクロールカウンタ <= -100 )\r
+ {\r
+ this.r現在選択中の曲 = this.r前の曲( this.r現在選択中の曲 );\r
+ this.n現在の選択行 = ( ( this.n現在の選択行 - 1 ) + 13 ) % 13;\r
+ C曲リストノード c曲リストノード3 = this.r現在選択中の曲;\r
+ for( int num12 = 0; num12 < 5; num12++ )\r
+ {\r
+ c曲リストノード3 = this.r前の曲( c曲リストノード3 );\r
+ }\r
+ int num13 = ( ( this.n現在の選択行 - 5 ) + 13 ) % 13;\r
+ this.stバー情報[ num13 ].strタイトル文字列 = c曲リストノード3.strタイトル;\r
+ this.stバー情報[ num13 ].col文字色 = c曲リストノード3.col文字色;\r
+ this.t曲名バーの生成( num13, this.stバー情報[ num13 ].strタイトル文字列, this.stバー情報[ num13 ].col文字色 );\r
+ C曲リストノード c曲リストノード4 = this.r現在選択中の曲;\r
+ for( int num14 = 0; num14 < 5; num14++ )\r
+ {\r
+ c曲リストノード4 = this.r前の曲( c曲リストノード4 );\r
+ }\r
+ for( int num15 = 0; num15 < 13; num15++ )\r
+ {\r
+ int num16 = ( ( ( this.n現在の選択行 - 5 ) + num15 ) + 13 ) % 13;\r
+ this.stバー情報[ num16 ].eバー種別 = this.e曲のバー種別を返す( c曲リストノード4 );\r
+ c曲リストノード4 = this.r次の曲( c曲リストノード4 );\r
+ }\r
+ for( int num17 = 0; num17 < 3; num17++ )\r
+ {\r
+ this.stバー情報[ num13 ].nスキル値[ num17 ] = (int) c曲リストノード3.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( c曲リストノード3 ) ].譜面情報.最大スキル[ num17 ];\r
+ }\r
+ this.n現在のスクロールカウンタ += 100;\r
+ this.n目標のスクロールカウンタ += 100;\r
+ if( this.n目標のスクロールカウンタ == 0 )\r
+ {\r
+ CDTXMania.stage選曲.t選択曲変更通知();\r
+ }\r
+ }\r
+ this.nスクロールタイマ += num3;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ for( int num18 = 0; num18 < 13; num18++ )\r
+ {\r
+ this.ct登場アニメ用[ num18 ].t進行();\r
+ if( this.ct登場アニメ用[ num18 ].b終了値に達した )\r
+ {\r
+ this.ct登場アニメ用[ num18 ].t停止();\r
+ }\r
+ }\r
+ this.b登場アニメ全部完了 = true;\r
+ for( int num19 = 0; num19 < 13; num19++ )\r
+ {\r
+ if( this.ct登場アニメ用[ num19 ].b進行中 )\r
+ {\r
+ this.b登場アニメ全部完了 = false;\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ if( this.r現在選択中の曲 == null )\r
+ {\r
+ if( this.txSongNotFound != null )\r
+ {\r
+ this.txSongNotFound.t2D描画( CDTXMania.app.Device, 320, 200 );\r
+ }\r
+ return 0;\r
+ }\r
+ if( this.b登場アニメ全部完了 )\r
+ {\r
+ for( int num20 = 0; num20 < 13; num20++ )\r
+ {\r
+ if( ( ( num20 != 0 ) || ( this.n現在のスクロールカウンタ <= 0 ) ) && ( ( num20 != 12 ) || ( this.n現在のスクロールカウンタ >= 0 ) ) )\r
+ {\r
+ int num21 = ( ( ( this.n現在の選択行 - 5 ) + num20 ) + 13 ) % 13;\r
+ int num22 = num20;\r
+ int num23 = ( this.n現在のスクロールカウンタ <= 0 ) ? ( ( num20 + 1 ) % 13 ) : ( ( ( num20 - 1 ) + 13 ) % 13 );\r
+ int x = this.ptバーの基本座標[ num22 ].X + ( (int) ( ( this.ptバーの基本座標[ num23 ].X - this.ptバーの基本座標[ num22 ].X ) * ( ( (double) Math.Abs( this.n現在のスクロールカウンタ ) ) / 100.0 ) ) );\r
+ int y = this.ptバーの基本座標[ num22 ].Y + ( (int) ( ( this.ptバーの基本座標[ num23 ].Y - this.ptバーの基本座標[ num22 ].Y ) * ( ( (double) Math.Abs( this.n現在のスクロールカウンタ ) ) / 100.0 ) ) );\r
+ if( ( num20 == 5 ) && ( this.n現在のスクロールカウンタ == 0 ) )\r
+ {\r
+ this.tバーの描画( 0xd8, 0xb5, this.stバー情報[ num21 ].eバー種別, true );\r
+ if( this.stバー情報[ num21 ].txタイトル名 != null )\r
+ {\r
+ this.stバー情報[ num21 ].txタイトル名.t2D描画( CDTXMania.app.Device, 0x114, 0xc9 );\r
+ }\r
+ if( ( this.stバー情報[ num21 ].eバー種別 == Eバー種別.Score ) && ( this.e楽器パート != E楽器パート.UNKNOWN ) )\r
+ {\r
+ this.tスキル値の描画( 0xf4, 0xd3, this.stバー情報[ num21 ].nスキル値[ (int) this.e楽器パート ] );\r
+ }\r
+ }\r
+ else\r
+ {\r
+ this.tバーの描画( x, y, this.stバー情報[ num21 ].eバー種別, false );\r
+ if( this.stバー情報[ num21 ].txタイトル名 != null )\r
+ {\r
+ this.stバー情報[ num21 ].txタイトル名.t2D描画( CDTXMania.app.Device, x + 0x2c, y + 4 );\r
+ }\r
+ if( ( this.stバー情報[ num21 ].eバー種別 == Eバー種別.Score ) && ( this.e楽器パート != E楽器パート.UNKNOWN ) )\r
+ {\r
+ this.tスキル値の描画( x + 14, y + 14, this.stバー情報[ num21 ].nスキル値[ (int) this.e楽器パート ] );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ for( int num26 = 0; num26 < 13; num26++ )\r
+ {\r
+ if( this.ct登場アニメ用[ num26 ].n現在の値 >= 0 )\r
+ {\r
+ double num27 = ( (double) this.ct登場アニメ用[ num26 ].n現在の値 ) / 100.0;\r
+ double num28 = Math.Sin( 1.8849555921538759 * num27 );\r
+ int num29 = ( ( ( this.n現在の選択行 - 5 ) + num26 ) + 13 ) % 13;\r
+ if( num26 == 5 )\r
+ {\r
+ int num30 = (int) ( 425.0 / Math.Sin( 1.8849555921538759 ) );\r
+ int num31 = 640 - ( (int) ( num30 * num28 ) );\r
+ int num32 = 0xb5;\r
+ this.tバーの描画( num31, num32, this.stバー情報[ num29 ].eバー種別, true );\r
+ if( this.stバー情報[ num29 ].txタイトル名 != null )\r
+ {\r
+ this.stバー情報[ num29 ].txタイトル名.t2D描画( CDTXMania.app.Device, ( num31 + 0x2c ) + 0x10, ( num32 + 4 ) + 0x10 );\r
+ }\r
+ if( ( this.stバー情報[ num29 ].eバー種別 == Eバー種別.Score ) && ( this.e楽器パート != E楽器パート.UNKNOWN ) )\r
+ {\r
+ this.tスキル値の描画( num31 + 0x1c, num32 + 30, this.stバー情報[ num29 ].nスキル値[ (int) this.e楽器パート ] );\r
+ }\r
+ }\r
+ else\r
+ {\r
+ int num33 = (int) ( ( (double) ( ( 640 - this.ptバーの基本座標[ num26 ].X ) + 1 ) ) / Math.Sin( 1.8849555921538759 ) );\r
+ int num34 = 640 - ( (int) ( num33 * num28 ) );\r
+ int num35 = this.ptバーの基本座標[ num26 ].Y;\r
+ this.tバーの描画( num34, num35, this.stバー情報[ num29 ].eバー種別, false );\r
+ if( this.stバー情報[ num29 ].txタイトル名 != null )\r
+ {\r
+ this.stバー情報[ num29 ].txタイトル名.t2D描画( CDTXMania.app.Device, num34 + 0x2c, num35 + 4 );\r
+ }\r
+ if( ( this.stバー情報[ num29 ].eバー種別 == Eバー種別.Score ) && ( this.e楽器パート != E楽器パート.UNKNOWN ) )\r
+ {\r
+ this.tスキル値の描画( num34 + 14, num35 + 14, this.stバー情報[ num29 ].nスキル値[ (int) this.e楽器パート ] );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+ \r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private enum Eバー種別\r
+ {\r
+ Score,\r
+ Box,\r
+ Other\r
+ }\r
+\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ private struct STバー\r
+ {\r
+ public CTexture Score;\r
+ public CTexture Box;\r
+ public CTexture Other;\r
+ public CTexture this[ int index ]\r
+ {\r
+ get\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ return this.Score;\r
+\r
+ case 1:\r
+ return this.Box;\r
+\r
+ case 2:\r
+ return this.Other;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ set\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ this.Score = value;\r
+ return;\r
+\r
+ case 1:\r
+ this.Box = value;\r
+ return;\r
+\r
+ case 2:\r
+ this.Other = value;\r
+ return;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ }\r
+ }\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ private struct STバー情報\r
+ {\r
+ public CActSelect曲リスト.Eバー種別 eバー種別;\r
+ public string strタイトル文字列;\r
+ public CTexture txタイトル名;\r
+ public STDGBVALUE<int> nスキル値;\r
+ public Color col文字色;\r
+ }\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ private struct ST選曲バー\r
+ {\r
+ public CTexture Score;\r
+ public CTexture Box;\r
+ public CTexture Other;\r
+ public CTexture this[ int index ]\r
+ {\r
+ get\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ return this.Score;\r
+\r
+ case 1:\r
+ return this.Box;\r
+\r
+ case 2:\r
+ return this.Other;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ set\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ this.Score = value;\r
+ return;\r
+\r
+ case 1:\r
+ this.Box = value;\r
+ return;\r
+\r
+ case 2:\r
+ this.Other = value;\r
+ return;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ }\r
+ }\r
+\r
+ private bool b登場アニメ全部完了;\r
+ private Color color文字影 = Color.FromArgb( 0x40, 10, 10, 10 );\r
+ private CCounter[] ct登場アニメ用 = new CCounter[ 13 ];\r
+ private E楽器パート e楽器パート;\r
+ private Font ft曲リスト用フォント;\r
+ private long nスクロールタイマ;\r
+ private int n現在のスクロールカウンタ;\r
+ private int n現在の選択行;\r
+ private int n目標のスクロールカウンタ;\r
+ private readonly Point[] ptバーの基本座標 = new Point[] { new Point( 0x162, 20 ), new Point( 0x139, 0x36 ), new Point( 0x121, 0x58 ), new Point( 0x111, 0x7a ), new Point( 0x108, 0x9c ), new Point( 0xe8, 0xc5 ), new Point( 0x112, 0x102 ), new Point( 0x121, 0x124 ), new Point( 0x138, 0x146 ), new Point( 0x157, 360 ), new Point( 0x18a, 0x18a ), new Point( 0x1f2, 0x1ac ), new Point( 640, 0x1ce ) };\r
+ private STバー情報[] stバー情報 = new STバー情報[ 13 ];\r
+ private CTexture txSongNotFound;\r
+ private CTexture txスキル数字;\r
+ private STバー tx曲名バー;\r
+ private ST選曲バー tx選曲バー;\r
+\r
+ private Eバー種別 e曲のバー種別を返す( C曲リストノード song )\r
+ {\r
+ if( song != null )\r
+ {\r
+ switch( song.eノード種別 )\r
+ {\r
+ case C曲リストノード.Eノード種別.SCORE:\r
+ case C曲リストノード.Eノード種別.SCORE_MIDI:\r
+ return Eバー種別.Score;\r
+\r
+ case C曲リストノード.Eノード種別.BOX:\r
+ case C曲リストノード.Eノード種別.BACKBOX:\r
+ return Eバー種別.Box;\r
+ }\r
+ }\r
+ return Eバー種別.Other;\r
+ }\r
+ private C曲リストノード r次の曲( C曲リストノード song )\r
+ {\r
+ if( song == null )\r
+ {\r
+ return null;\r
+ }\r
+ List<C曲リストノード> list = ( song.r親ノード != null ) ? song.r親ノード.list子リスト : CDTXMania.Songs管理.list曲ルート;\r
+ int index = list.IndexOf( song );\r
+ if( index < 0 )\r
+ {\r
+ return null;\r
+ }\r
+ if( index == ( list.Count - 1 ) )\r
+ {\r
+ return list[ 0 ];\r
+ }\r
+ return list[ index + 1 ];\r
+ }\r
+ private C曲リストノード r前の曲( C曲リストノード song )\r
+ {\r
+ if( song == null )\r
+ {\r
+ return null;\r
+ }\r
+ List<C曲リストノード> list = ( song.r親ノード != null ) ? song.r親ノード.list子リスト : CDTXMania.Songs管理.list曲ルート;\r
+ int index = list.IndexOf( song );\r
+ if( index < 0 )\r
+ {\r
+ return null;\r
+ }\r
+ if( index == 0 )\r
+ {\r
+ return list[ list.Count - 1 ];\r
+ }\r
+ return list[ index - 1 ];\r
+ }\r
+ private void tスキル値の描画( int x, int y, int nスキル値 )\r
+ {\r
+ if( ( nスキル値 > 0 ) && ( nスキル値 <= 100 ) )\r
+ {\r
+ int color = ( nスキル値 == 100 ) ? 3 : ( nスキル値 / 0x19 );\r
+ int num2 = nスキル値 / 100;\r
+ int num3 = ( nスキル値 % 100 ) / 10;\r
+ int num4 = ( nスキル値 % 100 ) % 10;\r
+ if( num2 > 0 )\r
+ {\r
+ this.tスキル値の描画・1桁描画( x, y, num2, color );\r
+ }\r
+ if( ( num2 != 0 ) || ( num3 != 0 ) )\r
+ {\r
+ this.tスキル値の描画・1桁描画( x + 7, y, num3, color );\r
+ }\r
+ this.tスキル値の描画・1桁描画( x + 14, y, num4, color );\r
+ }\r
+ }\r
+ private void tスキル値の描画・1桁描画( int x, int y, int n数値, int color )\r
+ {\r
+ int num = ( n数値 % 5 ) * 9;\r
+ int num2 = ( n数値 / 5 ) * 12;\r
+ switch( color )\r
+ {\r
+ case 0:\r
+ if( this.txスキル数字 == null )\r
+ {\r
+ break;\r
+ }\r
+ this.txスキル数字.t2D描画( CDTXMania.app.Device, x, y, new Rectangle( 0x2d + num, 0x18 + num2, 9, 12 ) );\r
+ return;\r
+\r
+ case 1:\r
+ if( this.txスキル数字 == null )\r
+ {\r
+ break;\r
+ }\r
+ this.txスキル数字.t2D描画( CDTXMania.app.Device, x, y, new Rectangle( 0x2d + num, num2, 9, 12 ) );\r
+ return;\r
+\r
+ case 2:\r
+ if( this.txスキル数字 == null )\r
+ {\r
+ break;\r
+ }\r
+ this.txスキル数字.t2D描画( CDTXMania.app.Device, x, y, new Rectangle( num, 0x18 + num2, 9, 12 ) );\r
+ return;\r
+\r
+ case 3:\r
+ if( this.txスキル数字 != null )\r
+ {\r
+ this.txスキル数字.t2D描画( CDTXMania.app.Device, x, y, new Rectangle( num, num2, 9, 12 ) );\r
+ }\r
+ break;\r
+\r
+ default:\r
+ return;\r
+ }\r
+ }\r
+ private void tバーの初期化()\r
+ {\r
+ C曲リストノード song = this.r現在選択中の曲;\r
+ if( song != null )\r
+ {\r
+ for( int i = 0; i < 5; i++ )\r
+ {\r
+ song = this.r前の曲( song );\r
+ }\r
+ for( int j = 0; j < 13; j++ )\r
+ {\r
+ this.stバー情報[ j ].strタイトル文字列 = song.strタイトル;\r
+ this.stバー情報[ j ].col文字色 = song.col文字色;\r
+ this.stバー情報[ j ].eバー種別 = this.e曲のバー種別を返す( song );\r
+ for( int k = 0; k < 3; k++ )\r
+ {\r
+ this.stバー情報[ j ].nスキル値[ k ] = (int) song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].譜面情報.最大スキル[ k ];\r
+ }\r
+ song = this.r次の曲( song );\r
+ }\r
+ this.n現在の選択行 = 5;\r
+ }\r
+ }\r
+ private void tバーの描画( int x, int y, Eバー種別 type, bool b選択曲 )\r
+ {\r
+ if( ( x < 640 ) && ( y < 480 ) )\r
+ {\r
+ if( !b選択曲 )\r
+ {\r
+ if( this.tx曲名バー[ (int) type ] != null )\r
+ {\r
+ this.tx曲名バー[ (int) type ].t2D描画( CDTXMania.app.Device, x, y, new Rectangle( 0, 0, 0x40, 0x20 ) );\r
+ }\r
+ x += 0x40;\r
+ Rectangle rectangle = new Rectangle( 0, 0x20, 0x40, 0x20 );\r
+ while( x < 640 )\r
+ {\r
+ if( this.tx曲名バー[ (int) type ] != null )\r
+ {\r
+ this.tx曲名バー[ (int) type ].t2D描画( CDTXMania.app.Device, x, y, rectangle );\r
+ }\r
+ x += 0x40;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ if( this.tx選曲バー[ (int) type ] != null )\r
+ {\r
+ this.tx選曲バー[ (int) type ].t2D描画( CDTXMania.app.Device, x, y, new Rectangle( 0, 0, 0x80, 0x40 ) );\r
+ }\r
+ x += 0x80;\r
+ Rectangle rectangle2 = new Rectangle( 0x40, 0, 0x40, 0x40 );\r
+ while( x < 640 )\r
+ {\r
+ if( this.tx選曲バー[ (int) type ] != null )\r
+ {\r
+ this.tx選曲バー[ (int) type ].t2D描画( CDTXMania.app.Device, x, y, rectangle2 );\r
+ }\r
+ x += 0x40;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ private void t曲名バーの生成( int num, string str曲名, Color color )\r
+ {\r
+ if( ( num >= 0 ) && ( num <= 12 ) )\r
+ {\r
+ try\r
+ {\r
+ Bitmap image = new Bitmap( 1, 1 );\r
+ Graphics graphics = Graphics.FromImage( image );\r
+ graphics.PageUnit = GraphicsUnit.Pixel;\r
+ SizeF ef = graphics.MeasureString( str曲名, this.ft曲リスト用フォント );\r
+ image.Dispose();\r
+ int num2 = 0x188;\r
+ int num3 = 0x19;\r
+ int num4 = ( ( (int) ef.Width ) + 2 ) / 2;\r
+ if( num4 > ( CDTXMania.app.Device.Capabilities.MaxTextureWidth / 2 ) )\r
+ {\r
+ num4 = CDTXMania.app.Device.Capabilities.MaxTextureWidth / 2;\r
+ }\r
+ float x = ( num4 <= num2 ) ? 0.5f : ( ( ( (float) num2 ) / ( (float) num4 ) ) * 0.5f );\r
+ Bitmap bitmap2 = new Bitmap( num4 * 2, num3 * 2, PixelFormat.Format32bppArgb );\r
+ Graphics graphics2 = Graphics.FromImage( bitmap2 );\r
+ float y = ( ( (float) bitmap2.Height ) / 2f ) - ( ( CDTXMania.ConfigIni.n選曲リストフォントのサイズdot * 2f ) / 2f );\r
+ graphics2.DrawString( str曲名, this.ft曲リスト用フォント, new SolidBrush( this.color文字影 ), (float) 2f, (float) ( y + 2f ) );\r
+ graphics2.DrawString( str曲名, this.ft曲リスト用フォント, new SolidBrush( color ), 0f, y );\r
+ graphics2.Dispose();\r
+ if( this.stバー情報[ num ].txタイトル名 != null )\r
+ {\r
+ this.stバー情報[ num ].txタイトル名.Dispose();\r
+ }\r
+ this.stバー情報[ num ].txタイトル名 = new CTexture( CDTXMania.app.Device, bitmap2, CDTXMania.TextureFormat );\r
+ this.stバー情報[ num ].txタイトル名.vc拡大縮小倍率 = new Vector3( x, 0.5f, 1f );\r
+ bitmap2.Dispose();\r
+ }\r
+ catch( CTextureCreateFailedException )\r
+ {\r
+ Trace.TraceError( "曲名テクスチャの作成に失敗しました。[{0}]", new object[] { str曲名 } );\r
+ this.stバー情報[ num ].txタイトル名 = null;\r
+ }\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Diagnostics;\r
+using System.Drawing;\r
+using SlimDX;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CActSelect演奏履歴パネル : CActivity\r
+ {\r
+ // メソッド\r
+\r
+ public CActSelect演奏履歴パネル()\r
+ {\r
+ base.b活性化してない = true;\r
+ }\r
+ public void t選択曲が変更された()\r
+ {\r
+ Cスコア cスコア = CDTXMania.stage選曲.r現在選択中のスコア;\r
+ if( ( cスコア != null ) && !CDTXMania.stage選曲.bスクロール中 )\r
+ {\r
+ try\r
+ {\r
+ Bitmap image = new Bitmap( 400, 130 );\r
+ Graphics graphics = Graphics.FromImage( image );\r
+ for( int i = 0; i < 5; i++ )\r
+ {\r
+ if( ( cスコア.譜面情報.演奏履歴[ i ] != null ) && ( cスコア.譜面情報.演奏履歴[ i ].Length > 0 ) )\r
+ {\r
+ graphics.DrawString( cスコア.譜面情報.演奏履歴[ i ], this.ft表示用フォント, Brushes.Yellow, (float) 0f, (float) ( i * 24f ) );\r
+ }\r
+ }\r
+ graphics.Dispose();\r
+ if( this.tx文字列パネル != null )\r
+ {\r
+ this.tx文字列パネル.Dispose();\r
+ }\r
+ this.tx文字列パネル = new CTexture( CDTXMania.app.Device, image, CDTXMania.TextureFormat );\r
+ this.tx文字列パネル.vc拡大縮小倍率 = new Vector3( 0.5f, 0.5f, 1f );\r
+ image.Dispose();\r
+ }\r
+ catch( CTextureCreateFailedException )\r
+ {\r
+ Trace.TraceError( "演奏履歴文字列テクスチャの作成に失敗しました。" );\r
+ this.tx文字列パネル = null;\r
+ }\r
+ }\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ this.n本体X = 0x195;\r
+ this.n本体Y = 0x174;\r
+ this.ft表示用フォント = new Font( "Arial", 26f, FontStyle.Bold, GraphicsUnit.Pixel );\r
+ base.On活性化();\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ if( this.ft表示用フォント != null )\r
+ {\r
+ this.ft表示用フォント.Dispose();\r
+ this.ft表示用フォント = null;\r
+ }\r
+ this.ct登場アニメ用 = null;\r
+ base.On非活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.txパネル本体 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect play history panel.png" ), true );\r
+ this.t選択曲が変更された();\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.txパネル本体 );\r
+ CDTXMania.tテクスチャの解放( ref this.tx文字列パネル );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ if( base.b初めての進行描画 )\r
+ {\r
+ this.ct登場アニメ用 = new CCounter( 0, 100, 5, CDTXMania.Timer );\r
+ base.b初めての進行描画 = false;\r
+ }\r
+ this.ct登場アニメ用.t進行();\r
+ if( this.ct登場アニメ用.b終了値に達した || ( this.txパネル本体 == null ) )\r
+ {\r
+ this.n本体X = 0x195;\r
+ this.n本体Y = 0x174;\r
+ }\r
+ else\r
+ {\r
+ double num = ( (double) this.ct登場アニメ用.n現在の値 ) / 100.0;\r
+ double num2 = Math.Cos( ( 1.5 + ( 0.5 * num ) ) * 3.1415926535897931 );\r
+ this.n本体X = 0x195;\r
+ this.n本体Y = 0x174 + ( (int) ( this.txパネル本体.sz画像サイズ.Height * ( 1.0 - ( num2 * num2 ) ) ) );\r
+ }\r
+ if( this.txパネル本体 != null )\r
+ {\r
+ this.txパネル本体.t2D描画( CDTXMania.app.Device, this.n本体X, this.n本体Y );\r
+ }\r
+ if( this.tx文字列パネル != null )\r
+ {\r
+ this.tx文字列パネル.t2D描画( CDTXMania.app.Device, this.n本体X + 12, this.n本体Y + 0x13 );\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+ \r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private CCounter ct登場アニメ用;\r
+ private Font ft表示用フォント;\r
+ private int n本体X;\r
+ private int n本体Y;\r
+ private CTexture txパネル本体;\r
+ private CTexture tx文字列パネル;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using System.Drawing;\r
+using System.Diagnostics;\r
+using System.IO;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CStage選曲 : CStage\r
+ {\r
+ // プロパティ\r
+\r
+ public bool bスクロール中\r
+ {\r
+ get\r
+ {\r
+ return this.act曲リスト.bスクロール中;\r
+ }\r
+ }\r
+ public int n確定された曲の難易度\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+ public Cスコア r確定されたスコア\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+ public C曲リストノード r確定された曲 \r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+ public int n現在選択中の曲の難易度\r
+ {\r
+ get\r
+ {\r
+ return this.act曲リスト.n現在選択中の曲の現在の難易度レベル;\r
+ }\r
+ }\r
+ public Cスコア r現在選択中のスコア\r
+ {\r
+ get\r
+ {\r
+ return this.act曲リスト.r現在選択中のスコア;\r
+ }\r
+ }\r
+ public C曲リストノード r現在選択中の曲\r
+ {\r
+ get\r
+ {\r
+ return this.act曲リスト.r現在選択中の曲;\r
+ }\r
+ }\r
+\r
+\r
+ // コンストラクタ\r
+ public CStage選曲()\r
+ {\r
+ base.eステージID = CStage.Eステージ.選曲;\r
+ base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
+ base.b活性化してない = true;\r
+ base.list子Activities.Add( this.actオプションパネル = new CActオプションパネル() );\r
+ base.list子Activities.Add( this.actFIFO = new CActFIFOBlack() );\r
+ base.list子Activities.Add( this.actFIfrom結果画面 = new CActFIFOBlack() );\r
+ base.list子Activities.Add( this.actFOtoNowLoading = new CActFIFOBlack() );\r
+ base.list子Activities.Add( this.act曲リスト = new CActSelect曲リスト() );\r
+ base.list子Activities.Add( this.actステータスパネル = new CActSelectステータスパネル() );\r
+ base.list子Activities.Add( this.act演奏履歴パネル = new CActSelect演奏履歴パネル() );\r
+ base.list子Activities.Add( this.actPreimageパネル = new CActSelectPreimageパネル() );\r
+ base.list子Activities.Add( this.actPresound = new CActSelectPresound() );\r
+ base.list子Activities.Add( this.actArtistComment = new CActSelectArtistComment() );\r
+ base.list子Activities.Add( this.actInformation = new CActSelectInformation() );\r
+ }\r
+ \r
+ \r
+ // メソッド\r
+\r
+ public void t選択曲変更通知()\r
+ {\r
+ this.actPreimageパネル.t選択曲が変更された();\r
+ this.actPresound.t選択曲が変更された();\r
+ this.act演奏履歴パネル.t選択曲が変更された();\r
+ this.actステータスパネル.t選択曲が変更された();\r
+ this.actArtistComment.t選択曲が変更された();\r
+\r
+ #region [ プラグインにも通知する(BOX, RANDOM, BACK なら通知しない)]\r
+ //---------------------\r
+ if( CDTXMania.app != null )\r
+ {\r
+ var c曲リストノード = CDTXMania.stage選曲.r現在選択中の曲;\r
+ var cスコア = CDTXMania.stage選曲.r現在選択中のスコア;\r
+\r
+ if( c曲リストノード != null && cスコア != null && c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.SCORE )\r
+ {\r
+ string str選択曲ファイル名 = cスコア.ファイル情報.ファイルの絶対パス;\r
+ CSetDef setDef = null;\r
+ int nブロック番号inSetDef = -1;\r
+ int n曲番号inブロック = -1;\r
+\r
+ if( !string.IsNullOrEmpty( c曲リストノード.pathSetDefの絶対パス ) && File.Exists( c曲リストノード.pathSetDefの絶対パス ) )\r
+ {\r
+ setDef = new CSetDef( c曲リストノード.pathSetDefの絶対パス );\r
+ nブロック番号inSetDef = c曲リストノード.SetDefのブロック番号;\r
+ n曲番号inブロック = CDTXMania.stage選曲.act曲リスト.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( c曲リストノード );\r
+ }\r
+\r
+ foreach( CDTXMania.STPlugin stPlugin in CDTXMania.app.listプラグイン )\r
+ {\r
+ Directory.SetCurrentDirectory( stPlugin.strプラグインフォルダ );\r
+ stPlugin.plugin.On選択曲変更( str選択曲ファイル名, setDef, nブロック番号inSetDef, n曲番号inブロック );\r
+ Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
+ }\r
+ }\r
+ }\r
+ //---------------------\r
+ #endregion\r
+ }\r
+\r
+\r
+ // CStage 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ Trace.TraceInformation( "選曲ステージを活性化します。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ this.eフェードアウト完了時の戻り値 = E戻り値.継続;\r
+ this.bBGM再生済み = false;\r
+ this.n前回Bassを踏んだ時刻 = -1;\r
+ this.n前回HHを叩いた時刻 = -1;\r
+ this.n前回ギターをPickした時刻 = -1;\r
+ this.n前回ベースをPickした時刻 = -1;\r
+ this.ftフォント = new Font( "MS PGothic", 26f, GraphicsUnit.Pixel );\r
+ for( int i = 0; i < 4; i++ )\r
+ this.ctキー反復用[ i ] = new CCounter( 0, 0, 0, CDTXMania.Timer );\r
+\r
+ base.On活性化();\r
+\r
+ this.actステータスパネル.t選択曲が変更された(); // 最大ランクを更新\r
+ }\r
+ finally\r
+ {\r
+ Trace.TraceInformation( "選曲ステージの活性化を完了しました。" );\r
+ Trace.Unindent();\r
+ }\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ Trace.TraceInformation( "選曲ステージを非活性化します。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ if( this.ftフォント != null )\r
+ {\r
+ this.ftフォント.Dispose();\r
+ this.ftフォント = null;\r
+ }\r
+ for( int i = 0; i < 4; i++ )\r
+ {\r
+ this.ctキー反復用[ i ] = null;\r
+ }\r
+ base.On非活性化();\r
+ }\r
+ finally\r
+ {\r
+ Trace.TraceInformation( "選曲ステージの非活性化を完了しました。" );\r
+ Trace.Unindent();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.tx背景 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect background.jpg" ), false );\r
+ this.tx上部パネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect header panel.png" ), true );\r
+ this.tx下部パネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect footer panel.png" ), true );\r
+ this.txコメントバー = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect comment bar.png" ), true );\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.tx背景 );\r
+ CDTXMania.tテクスチャの解放( ref this.tx上部パネル );\r
+ CDTXMania.tテクスチャの解放( ref this.tx下部パネル );\r
+ CDTXMania.tテクスチャの解放( ref this.txコメントバー );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ #region [ 初めての進行描画 ]\r
+ //---------------------\r
+ if( base.b初めての進行描画 )\r
+ {\r
+ this.ct登場時アニメ用共通 = new CCounter( 0, 100, 3, CDTXMania.Timer );\r
+ if( CDTXMania.r直前のステージ == CDTXMania.stage結果 )\r
+ {\r
+ this.actFIfrom結果画面.tフェードイン開始();\r
+ base.eフェーズID = CStage.Eフェーズ.選曲_結果画面からのフェードイン;\r
+ }\r
+ else\r
+ {\r
+ this.actFIFO.tフェードイン開始();\r
+ base.eフェーズID = CStage.Eフェーズ.共通_フェードイン;\r
+ }\r
+ this.t選択曲変更通知();\r
+ base.b初めての進行描画 = false;\r
+ }\r
+ //---------------------\r
+ #endregion\r
+\r
+ this.ct登場時アニメ用共通.t進行();\r
+\r
+ if( this.tx背景 != null )\r
+ this.tx背景.t2D描画( CDTXMania.app.Device, 0, 0 );\r
+\r
+ this.actPreimageパネル.On進行描画();\r
+ this.act曲リスト.On進行描画();\r
+ int y = 0;\r
+ if( this.ct登場時アニメ用共通.b進行中 )\r
+ {\r
+ double num2 = ( (double) this.ct登場時アニメ用共通.n現在の値 ) / 100.0;\r
+ double num3 = Math.Sin( 1.5707963267948966 * num2 );\r
+ y = ( (int) ( this.tx上部パネル.sz画像サイズ.Height * num3 ) ) - this.tx上部パネル.sz画像サイズ.Height;\r
+ }\r
+ if( this.tx上部パネル != null )\r
+ this.tx上部パネル.t2D描画( CDTXMania.app.Device, 0, y );\r
+\r
+ this.actInformation.On進行描画();\r
+ if( this.tx下部パネル != null )\r
+ this.tx下部パネル.t2D描画( CDTXMania.app.Device, 0, 480 - this.tx下部パネル.sz画像サイズ.Height );\r
+\r
+ this.actステータスパネル.On進行描画();\r
+ this.act演奏履歴パネル.On進行描画();\r
+ this.actPresound.On進行描画();\r
+ if( this.txコメントバー != null )\r
+ {\r
+ this.txコメントバー.t2D描画( CDTXMania.app.Device, 0xf2, 0xe4 );\r
+ }\r
+ this.actArtistComment.On進行描画();\r
+ this.actオプションパネル.On進行描画();\r
+ switch( base.eフェーズID )\r
+ {\r
+ case CStage.Eフェーズ.共通_フェードイン:\r
+ if( this.actFIFO.On進行描画() != 0 )\r
+ {\r
+ base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
+ }\r
+ break;\r
+\r
+ case CStage.Eフェーズ.共通_フェードアウト:\r
+ if( this.actFIFO.On進行描画() == 0 )\r
+ {\r
+ break;\r
+ }\r
+ return (int) this.eフェードアウト完了時の戻り値;\r
+\r
+ case CStage.Eフェーズ.選曲_結果画面からのフェードイン:\r
+ if( this.actFIfrom結果画面.On進行描画() != 0 )\r
+ {\r
+ base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
+ }\r
+ break;\r
+\r
+ case CStage.Eフェーズ.選曲_NowLoading画面へのフェードアウト:\r
+ if( this.actFOtoNowLoading.On進行描画() == 0 )\r
+ {\r
+ break;\r
+ }\r
+ return (int) this.eフェードアウト完了時の戻り値;\r
+ }\r
+ if( !this.bBGM再生済み && ( base.eフェーズID == CStage.Eフェーズ.共通_通常状態 ) )\r
+ {\r
+ CDTXMania.Skin.bgm選曲画面.n音量・次に鳴るサウンド = 100;\r
+ CDTXMania.Skin.bgm選曲画面.t再生する();\r
+ this.bBGM再生済み = true;\r
+ }\r
+\r
+ // キー入力\r
+\r
+ if( base.eフェーズID == CStage.Eフェーズ.共通_通常状態 \r
+ && CDTXMania.act現在入力を占有中のプラグイン == null )\r
+ {\r
+ if( CDTXMania.Input管理.Keyboard.bキーが押された( 0x35 ) || ( ( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.FT ) || CDTXMania.Pad.b押されたGB( Eパッド.FT ) ) && ( ( this.act曲リスト.r現在選択中の曲 != null ) && ( this.act曲リスト.r現在選択中の曲.r親ノード == null ) ) ) )\r
+ {\r
+ CDTXMania.Skin.sound取消音.t再生する();\r
+ this.eフェードアウト完了時の戻り値 = E戻り値.タイトルに戻る;\r
+ this.actFIFO.tフェードアウト開始();\r
+ base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
+ return 0;\r
+ }\r
+ if( ( CDTXMania.Input管理.Keyboard.bキーが押されている( 120 ) || CDTXMania.Input管理.Keyboard.bキーが押されている( 0x4e ) ) && CDTXMania.Input管理.Keyboard.bキーが押された( 0x36 ) )\r
+ {\r
+ this.actPresound.tサウンド停止();\r
+ this.eフェードアウト完了時の戻り値 = E戻り値.オプション呼び出し;\r
+ this.actFIFO.tフェードアウト開始();\r
+ base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
+ CDTXMania.Skin.sound取消音.t再生する();\r
+ return 0;\r
+ }\r
+ if( ( CDTXMania.Input管理.Keyboard.bキーが押されている( 120 ) || CDTXMania.Input管理.Keyboard.bキーが押されている( 0x4e ) ) && CDTXMania.Input管理.Keyboard.bキーが押された( 0x37 ) )\r
+ {\r
+ this.actPresound.tサウンド停止();\r
+ this.eフェードアウト完了時の戻り値 = E戻り値.コンフィグ呼び出し;\r
+ this.actFIFO.tフェードアウト開始();\r
+ base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
+ CDTXMania.Skin.sound取消音.t再生する();\r
+ return 0;\r
+ }\r
+ if( this.act曲リスト.r現在選択中の曲 != null )\r
+ {\r
+ if( ( CDTXMania.Pad.b押されたDGB( Eパッド.CY ) || CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.RD ) ) || ( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.LC ) || ( CDTXMania.ConfigIni.bEnterがキー割り当てのどこにも使用されていない && CDTXMania.Input管理.Keyboard.bキーが押された( 0x75 ) ) ) )\r
+ {\r
+ CDTXMania.Skin.sound決定音.t再生する();\r
+ if( this.act曲リスト.r現在選択中の曲 != null )\r
+ {\r
+ switch( this.act曲リスト.r現在選択中の曲.eノード種別 )\r
+ {\r
+ case C曲リストノード.Eノード種別.SCORE:\r
+ this.t曲を選択する();\r
+ break;\r
+\r
+ case C曲リストノード.Eノード種別.SCORE_MIDI:\r
+ this.t曲を選択する();\r
+ break;\r
+\r
+ case C曲リストノード.Eノード種別.BOX:\r
+ this.act曲リスト.tBOXに入る();\r
+ break;\r
+\r
+ case C曲リストノード.Eノード種別.BACKBOX:\r
+ this.act曲リスト.tBOXを出る();\r
+ break;\r
+\r
+ case C曲リストノード.Eノード種別.RANDOM:\r
+ this.t曲をランダム選択する();\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ this.ctキー反復用.Up.tキー反復( CDTXMania.Input管理.Keyboard.bキーが押されている( 0x84 ), new CCounter.DGキー処理( this.tカーソルを上へ移動する ) );\r
+ this.ctキー反復用.R.tキー反復( CDTXMania.Pad.b押されているGB( Eパッド.HH ), new CCounter.DGキー処理( this.tカーソルを上へ移動する ) );\r
+ if( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.SD ) )\r
+ {\r
+ this.tカーソルを上へ移動する();\r
+ }\r
+ this.ctキー反復用.Down.tキー反復( CDTXMania.Input管理.Keyboard.bキーが押されている( 50 ), new CCounter.DGキー処理( this.tカーソルを下へ移動する ) );\r
+ this.ctキー反復用.B.tキー反復( CDTXMania.Pad.b押されているGB( Eパッド.BD ), new CCounter.DGキー処理( this.tカーソルを下へ移動する ) );\r
+ if( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.LT ) )\r
+ {\r
+ this.tカーソルを下へ移動する();\r
+ }\r
+ if( ( ( this.act曲リスト.r現在選択中の曲 != null ) && ( this.act曲リスト.r現在選択中の曲.r親ノード != null ) ) && ( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.FT ) || CDTXMania.Pad.b押されたGB( Eパッド.FT ) ) )\r
+ {\r
+ this.actPresound.tサウンド停止();\r
+ CDTXMania.Skin.sound取消音.t再生する();\r
+ this.act曲リスト.tBOXを出る();\r
+ this.t選択曲変更通知();\r
+ }\r
+ if( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.BD ) )\r
+ {\r
+ if( ( this.n前回Bassを踏んだ時刻 != -1 ) && ( ( CDTXMania.Timer.n現在時刻 - this.n前回Bassを踏んだ時刻 ) < 400 ) )\r
+ {\r
+ CDTXMania.ConfigIni.n譜面スクロール速度.Drums = ( CDTXMania.ConfigIni.n譜面スクロール速度.Drums + 1 ) % 0x10;\r
+ CDTXMania.Skin.sound変更音.t再生する();\r
+ this.n前回Bassを踏んだ時刻 = -1;\r
+ }\r
+ else\r
+ {\r
+ this.n前回Bassを踏んだ時刻 = CDTXMania.Timer.n現在時刻;\r
+ }\r
+ }\r
+ if( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.HH ) || CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.HHO ) )\r
+ {\r
+ if( ( this.n前回HHを叩いた時刻 != -1 ) && ( ( CDTXMania.Timer.n現在時刻 - this.n前回HHを叩いた時刻 ) < 500 ) )\r
+ {\r
+ this.act曲リスト.t難易度レベルをひとつ進める();\r
+ CDTXMania.Skin.sound変更音.t再生する();\r
+ this.n前回HHを叩いた時刻 = -1;\r
+ }\r
+ else\r
+ {\r
+ this.n前回HHを叩いた時刻 = CDTXMania.Timer.n現在時刻;\r
+ }\r
+ }\r
+ if( CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.SD ) || CDTXMania.Pad.b押された( E楽器パート.GUITAR, Eパッド.HT ) )\r
+ {\r
+ if( ( this.n前回ギターをPickした時刻 != -1 ) && ( ( CDTXMania.Timer.n現在時刻 - this.n前回ギターをPickした時刻 ) < 500 ) )\r
+ {\r
+ this.act曲リスト.t難易度レベルをひとつ進める();\r
+ CDTXMania.Skin.sound変更音.t再生する();\r
+ this.n前回ギターをPickした時刻 = -1;\r
+ }\r
+ else\r
+ {\r
+ this.n前回ギターをPickした時刻 = CDTXMania.Timer.n現在時刻;\r
+ }\r
+ }\r
+ if( CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.SD ) || CDTXMania.Pad.b押された( E楽器パート.BASS, Eパッド.HT ) )\r
+ {\r
+ if( ( this.n前回ベースをPickした時刻 != -1 ) && ( ( CDTXMania.Timer.n現在時刻 - this.n前回ベースをPickした時刻 ) < 500 ) )\r
+ {\r
+ this.act曲リスト.t難易度レベルをひとつ進める();\r
+ CDTXMania.Skin.sound変更音.t再生する();\r
+ this.n前回ベースをPickした時刻 = -1;\r
+ }\r
+ else\r
+ {\r
+ this.n前回ベースをPickした時刻 = CDTXMania.Timer.n現在時刻;\r
+ }\r
+ }\r
+ if( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.HT ) )\r
+ {\r
+ if( ( this.n前回HTを叩いた時刻 != -1 ) && ( ( CDTXMania.Timer.n現在時刻 - this.n前回HTを叩いた時刻 ) < 400 ) )\r
+ {\r
+ this.n前回HTを叩いた時刻 = -1;\r
+ }\r
+ else\r
+ {\r
+ this.n前回HTを叩いた時刻 = CDTXMania.Timer.n現在時刻;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+ public enum E戻り値 : int\r
+ {\r
+ 継続,\r
+ タイトルに戻る,\r
+ 選曲した,\r
+ オプション呼び出し,\r
+ コンフィグ呼び出し\r
+ }\r
+ \r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ private struct STキー反復用カウンタ\r
+ {\r
+ public CCounter Up;\r
+ public CCounter Down;\r
+ public CCounter R;\r
+ public CCounter B;\r
+ public CCounter this[ int index ]\r
+ {\r
+ get\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ return this.Up;\r
+\r
+ case 1:\r
+ return this.Down;\r
+\r
+ case 2:\r
+ return this.R;\r
+\r
+ case 3:\r
+ return this.B;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ set\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ this.Up = value;\r
+ return;\r
+\r
+ case 1:\r
+ this.Down = value;\r
+ return;\r
+\r
+ case 2:\r
+ this.R = value;\r
+ return;\r
+\r
+ case 3:\r
+ this.B = value;\r
+ return;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ }\r
+ }\r
+\r
+ private CActSelectArtistComment actArtistComment;\r
+ private CActFIFOBlack actFIFO;\r
+ private CActFIFOBlack actFIfrom結果画面;\r
+ private CActFIFOBlack actFOtoNowLoading;\r
+ private CActSelectInformation actInformation;\r
+ private CActSelectPreimageパネル actPreimageパネル;\r
+ private CActSelectPresound actPresound;\r
+ private CActオプションパネル actオプションパネル;\r
+ private CActSelectステータスパネル actステータスパネル;\r
+ private CActSelect演奏履歴パネル act演奏履歴パネル;\r
+ private CActSelect曲リスト act曲リスト;\r
+ private bool bBGM再生済み;\r
+ private STキー反復用カウンタ ctキー反復用;\r
+ private CCounter ct登場時アニメ用共通;\r
+ private E戻り値 eフェードアウト完了時の戻り値;\r
+ private Font ftフォント;\r
+ private long n前回Bassを踏んだ時刻;\r
+ private long n前回HHを叩いた時刻;\r
+ private long n前回HTを叩いた時刻;\r
+ private long n前回ギターをPickした時刻;\r
+ private long n前回ベースをPickした時刻;\r
+ private CTexture txコメントバー;\r
+ private CTexture tx下部パネル;\r
+ private CTexture tx上部パネル;\r
+ private CTexture tx背景;\r
+\r
+ private void tカーソルを下へ移動する()\r
+ {\r
+ CDTXMania.Skin.soundカーソル移動音.t再生する();\r
+ this.act曲リスト.t次に移動();\r
+ }\r
+ private void tカーソルを上へ移動する()\r
+ {\r
+ CDTXMania.Skin.soundカーソル移動音.t再生する();\r
+ this.act曲リスト.t前に移動();\r
+ }\r
+ private void t曲をランダム選択する()\r
+ {\r
+ C曲リストノード song = this.act曲リスト.r現在選択中の曲;\r
+ if( ( song.stackランダム演奏番号.Count == 0 ) || ( song.listランダム用ノードリスト == null ) )\r
+ {\r
+ if( song.listランダム用ノードリスト == null )\r
+ {\r
+ song.listランダム用ノードリスト = this.t指定された曲が存在する場所の曲を列挙する・子リスト含む( song );\r
+ }\r
+ int count = song.listランダム用ノードリスト.Count;\r
+ if( count == 0 )\r
+ {\r
+ return;\r
+ }\r
+ int[] numArray = new int[ count ];\r
+ for( int i = 0; i < count; i++ )\r
+ {\r
+ numArray[ i ] = i;\r
+ }\r
+ for( int j = 0; j < ( count * 1.5 ); j++ )\r
+ {\r
+ int index = CDTXMania.Random.Next( count );\r
+ int num5 = CDTXMania.Random.Next( count );\r
+ int num6 = numArray[ num5 ];\r
+ numArray[ num5 ] = numArray[ index ];\r
+ numArray[ index ] = num6;\r
+ }\r
+ for( int k = 0; k < count; k++ )\r
+ {\r
+ song.stackランダム演奏番号.Push( numArray[ k ] );\r
+ }\r
+ if( CDTXMania.ConfigIni.bLogDTX詳細ログ出力 )\r
+ {\r
+ StringBuilder builder = new StringBuilder( 0x400 );\r
+ builder.Append( string.Format( "ランダムインデックスリストを作成しました: {0}曲: ", song.stackランダム演奏番号.Count ) );\r
+ for( int m = 0; m < count; m++ )\r
+ {\r
+ builder.Append( string.Format( "{0} ", numArray[ m ] ) );\r
+ }\r
+ Trace.TraceInformation( builder.ToString() );\r
+ }\r
+ }\r
+ this.r確定された曲 = song.listランダム用ノードリスト[ song.stackランダム演奏番号.Pop() ];\r
+ this.n確定された曲の難易度 = this.act曲リスト.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( this.r確定された曲 );\r
+ this.r確定されたスコア = this.r確定された曲.arスコア[ this.n確定された曲の難易度 ];\r
+ this.eフェードアウト完了時の戻り値 = E戻り値.選曲した;\r
+ this.actFOtoNowLoading.tフェードアウト開始();\r
+ base.eフェーズID = CStage.Eフェーズ.選曲_NowLoading画面へのフェードアウト;\r
+ if( CDTXMania.ConfigIni.bLogDTX詳細ログ出力 )\r
+ {\r
+ int[] numArray2 = song.stackランダム演奏番号.ToArray();\r
+ StringBuilder builder2 = new StringBuilder( 0x400 );\r
+ builder2.Append( "ランダムインデックスリスト残り: " );\r
+ if( numArray2.Length > 0 )\r
+ {\r
+ for( int n = 0; n < numArray2.Length; n++ )\r
+ {\r
+ builder2.Append( string.Format( "{0} ", numArray2[ n ] ) );\r
+ }\r
+ }\r
+ else\r
+ {\r
+ builder2.Append( "(なし)" );\r
+ }\r
+ Trace.TraceInformation( builder2.ToString() );\r
+ }\r
+ }\r
+ private void t曲を選択する()\r
+ {\r
+ this.r確定された曲 = this.act曲リスト.r現在選択中の曲;\r
+ this.r確定されたスコア = this.act曲リスト.r現在選択中のスコア;\r
+ this.n確定された曲の難易度 = this.act曲リスト.n現在選択中の曲の現在の難易度レベル;\r
+ if( ( this.r確定された曲 != null ) && ( this.r確定されたスコア != null ) )\r
+ {\r
+ this.eフェードアウト完了時の戻り値 = E戻り値.選曲した;\r
+ this.actFOtoNowLoading.tフェードアウト開始();\r
+ base.eフェーズID = CStage.Eフェーズ.選曲_NowLoading画面へのフェードアウト;\r
+ }\r
+ }\r
+ private List<C曲リストノード> t指定された曲が存在する場所の曲を列挙する・子リスト含む( C曲リストノード song )\r
+ {\r
+ List<C曲リストノード> list = new List<C曲リストノード>();\r
+ song = song.r親ノード;\r
+ if( ( song == null ) && ( CDTXMania.Songs管理.list曲ルート.Count > 0 ) )\r
+ {\r
+ foreach( C曲リストノード c曲リストノード in CDTXMania.Songs管理.list曲ルート )\r
+ {\r
+ if( ( c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.SCORE ) || ( c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.SCORE_MIDI ) )\r
+ {\r
+ list.Add( c曲リストノード );\r
+ }\r
+ if( ( c曲リストノード.list子リスト != null ) && CDTXMania.ConfigIni.bランダムセレクトで子BOXを検索対象とする )\r
+ {\r
+ this.t指定された曲の子リストの曲を列挙する・孫リスト含む( c曲リストノード, ref list );\r
+ }\r
+ }\r
+ return list;\r
+ }\r
+ this.t指定された曲の子リストの曲を列挙する・孫リスト含む( song, ref list );\r
+ return list;\r
+ }\r
+ private void t指定された曲の子リストの曲を列挙する・孫リスト含む( C曲リストノード r親, ref List<C曲リストノード> list )\r
+ {\r
+ if( ( r親 != null ) && ( r親.list子リスト != null ) )\r
+ {\r
+ foreach( C曲リストノード c曲リストノード in r親.list子リスト )\r
+ {\r
+ if( ( c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.SCORE ) || ( c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.SCORE_MIDI ) )\r
+ {\r
+ list.Add( c曲リストノード );\r
+ }\r
+ if( ( c曲リストノード.list子リスト != null ) && CDTXMania.ConfigIni.bランダムセレクトで子BOXを検索対象とする )\r
+ {\r
+ this.t指定された曲の子リストの曲を列挙する・孫リスト含む( c曲リストノード, ref list );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Diagnostics;\r
+using System.Drawing;\r
+using System.IO;\r
+using SlimDX;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CStage曲読み込み : CStage\r
+ {\r
+ // コンストラクタ\r
+\r
+ public CStage曲読み込み()\r
+ {\r
+ base.eステージID = CStage.Eステージ.曲読み込み;\r
+ base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
+ base.b活性化してない = true;\r
+ base.list子Activities.Add( this.actFI = new CActFIFOBlack() );\r
+ base.list子Activities.Add( this.actFO = new CActFIFOBlack() );\r
+ }\r
+\r
+\r
+ // CStage 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ Trace.TraceInformation( "曲読み込みステージを活性化します。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ string str;\r
+ this.str曲タイトル = "";\r
+ this.strSTAGEFILE = "";\r
+ this.b音符を表示する = false;\r
+ this.n音符の表示位置X = 0x308;\r
+ this.ftタイトル表示用フォント = new Font( "MS PGothic", 48f, GraphicsUnit.Pixel );\r
+ this.nBGM再生開始時刻 = -1;\r
+ this.nBGMの総再生時間ms = 0;\r
+ if( this.sd読み込み音 != null )\r
+ {\r
+ CDTXMania.Sound管理.tサウンドを破棄する( this.sd読み込み音 );\r
+ this.sd読み込み音 = null;\r
+ }\r
+ if( CDTXMania.bコンパクトモード )\r
+ {\r
+ str = CDTXMania.strコンパクトモードファイル;\r
+ }\r
+ else\r
+ {\r
+ str = CDTXMania.stage選曲.r確定されたスコア.ファイル情報.ファイルの絶対パス;\r
+ }\r
+ CDTX cdtx = new CDTX( str, true );\r
+ this.str曲タイトル = cdtx.TITLE;\r
+ if( ( ( cdtx.STAGEFILE != null ) && ( cdtx.STAGEFILE.Length > 0 ) ) && ( File.Exists( cdtx.strフォルダ名 + cdtx.STAGEFILE ) && !CDTXMania.ConfigIni.bストイックモード ) )\r
+ {\r
+ this.strSTAGEFILE = cdtx.strフォルダ名 + cdtx.STAGEFILE;\r
+ this.b音符を表示する = false;\r
+ }\r
+ else\r
+ {\r
+ this.strSTAGEFILE = CSkin.Path( @"Graphics\\ScreenNowLoading background.jpg" );\r
+ this.b音符を表示する = true;\r
+ }\r
+ if( ( ( cdtx.SOUND_NOWLOADING != null ) && ( cdtx.SOUND_NOWLOADING.Length > 0 ) ) && File.Exists( cdtx.strフォルダ名 + cdtx.SOUND_NOWLOADING ) )\r
+ {\r
+ string str2 = cdtx.strフォルダ名 + cdtx.SOUND_NOWLOADING;\r
+ try\r
+ {\r
+ this.sd読み込み音 = CDTXMania.Sound管理.tサウンドを生成する( str2 );\r
+ }\r
+ catch\r
+ {\r
+ Trace.TraceError( "#SOUND_NOWLOADING に指定されたサウンドファイルの読み込みに失敗しました。({0})", new object[] { str2 } );\r
+ }\r
+ }\r
+ cdtx.On非活性化();\r
+ base.On活性化();\r
+ }\r
+ finally\r
+ {\r
+ Trace.TraceInformation( "曲読み込みステージの活性化を完了しました。" );\r
+ Trace.Unindent();\r
+ }\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ Trace.TraceInformation( "曲読み込みステージを非活性化します。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ if( this.ftタイトル表示用フォント != null )\r
+ {\r
+ this.ftタイトル表示用フォント.Dispose();\r
+ this.ftタイトル表示用フォント = null;\r
+ }\r
+ base.On非活性化();\r
+ }\r
+ finally\r
+ {\r
+ Trace.TraceInformation( "曲読み込みステージの非活性化を完了しました。" );\r
+ Trace.Unindent();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.tx音符 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\\ScreenNowLoading onpu.png" ), false );\r
+ this.tx背景 = CDTXMania.tテクスチャの生成( this.strSTAGEFILE, false );\r
+ if( this.b音符を表示する )\r
+ {\r
+ try\r
+ {\r
+ if( ( this.str曲タイトル != null ) && ( this.str曲タイトル.Length > 0 ) )\r
+ {\r
+ Bitmap image = new Bitmap( 1, 1 );\r
+ Graphics graphics = Graphics.FromImage( image );\r
+ SizeF ef = graphics.MeasureString( this.str曲タイトル, this.ftタイトル表示用フォント );\r
+ Size size = new Size( (int) Math.Ceiling( (double) ef.Width ), (int) Math.Ceiling( (double) ef.Height ) );\r
+ graphics.Dispose();\r
+ image.Dispose();\r
+ image = new Bitmap( size.Width, size.Height );\r
+ graphics = Graphics.FromImage( image );\r
+ graphics.DrawString( this.str曲タイトル, this.ftタイトル表示用フォント, Brushes.White, (float) 0f, (float) 0f );\r
+ graphics.Dispose();\r
+ this.txタイトル = new CTexture( CDTXMania.app.Device, image, CDTXMania.TextureFormat );\r
+ this.txタイトル.vc拡大縮小倍率 = new Vector3( 0.5f, 0.5f, 1f );\r
+ image.Dispose();\r
+ this.n音符の表示位置X = ( ( 640 - ( (int) ( size.Width * this.txタイトル.vc拡大縮小倍率.X ) ) ) - ( ( this.tx音符 != null ) ? this.tx音符.sz画像サイズ.Width : 0 ) ) - 2;\r
+ }\r
+ else\r
+ {\r
+ this.txタイトル = null;\r
+ this.n音符の表示位置X = ( 640 - ( ( this.tx音符 != null ) ? this.tx音符.sz画像サイズ.Width : 0 ) ) - 2;\r
+ }\r
+ }\r
+ catch( CTextureCreateFailedException )\r
+ {\r
+ Trace.TraceError( "テクスチャの生成に失敗しました。({0})", new object[] { this.strSTAGEFILE } );\r
+ this.txタイトル = null;\r
+ this.tx背景 = null;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ this.txタイトル = null;\r
+ }\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.tx背景 );\r
+ CDTXMania.tテクスチャの解放( ref this.tx音符 );\r
+ CDTXMania.tテクスチャの解放( ref this.txタイトル );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ string str;\r
+\r
+ if( base.b活性化してない )\r
+ return 0;\r
+\r
+ #region [ 初めての進行描画 ]\r
+ //-----------------------------\r
+ if( base.b初めての進行描画 )\r
+ {\r
+ Cスコア cスコア1 = CDTXMania.stage選曲.r確定されたスコア;\r
+ if( this.sd読み込み音 != null )\r
+ {\r
+ if( CDTXMania.Skin.sound曲読込開始音.b排他 && ( CSkin.Cシステムサウンド.r最後に再生した排他システムサウンド != null ) )\r
+ {\r
+ CSkin.Cシステムサウンド.r最後に再生した排他システムサウンド.t停止する();\r
+ }\r
+ this.sd読み込み音.t再生を開始する();\r
+ this.nBGM再生開始時刻 = CDTXMania.Timer.n現在時刻;\r
+ this.nBGMの総再生時間ms = this.sd読み込み音.n総演奏時間ms;\r
+ }\r
+ else\r
+ {\r
+ CDTXMania.Skin.sound曲読込開始音.t再生する();\r
+ this.nBGM再生開始時刻 = CDTXMania.Timer.n現在時刻;\r
+ this.nBGMの総再生時間ms = CDTXMania.Skin.sound曲読込開始音.n長さ・現在のサウンド;\r
+ }\r
+ this.actFI.tフェードイン開始();\r
+ base.eフェーズID = CStage.Eフェーズ.共通_フェードイン;\r
+ base.b初めての進行描画 = false;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ #region [ 背景、音符+タイトル表示 ]\r
+ //-----------------------------\r
+ if( this.tx背景 != null )\r
+ this.tx背景.t2D描画( CDTXMania.app.Device, 0, 0 );\r
+\r
+ if( this.b音符を表示する )\r
+ {\r
+ int y = 0x1b3;\r
+ if( this.tx音符 != null )\r
+ {\r
+ this.tx音符.t2D描画( CDTXMania.app.Device, this.n音符の表示位置X, y );\r
+ }\r
+ if( this.txタイトル != null )\r
+ {\r
+ this.txタイトル.t2D描画( CDTXMania.app.Device, (int) ( 640f - ( this.txタイトル.sz画像サイズ.Width * this.txタイトル.vc拡大縮小倍率.X ) ), y );\r
+ }\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ switch( base.eフェーズID )\r
+ {\r
+ case CStage.Eフェーズ.共通_フェードイン:\r
+ if( this.actFI.On進行描画() != 0 )\r
+ base.eフェーズID = CStage.Eフェーズ.NOWLOADING_DTXファイルを読み込む;\r
+ return 0;\r
+\r
+ case CStage.Eフェーズ.NOWLOADING_DTXファイルを読み込む:\r
+ {\r
+ str = null;\r
+ if( !CDTXMania.bコンパクトモード )\r
+ str = CDTXMania.stage選曲.r確定されたスコア.ファイル情報.ファイルの絶対パス;\r
+ else\r
+ str = CDTXMania.strコンパクトモードファイル;\r
+\r
+ CScoreIni ini = new CScoreIni( str + ".score.ini" );\r
+ ini.t全演奏記録セクションの整合性をチェックし不整合があればリセットする();\r
+\r
+ if( ( CDTXMania.DTX != null ) && CDTXMania.DTX.b活性化してる )\r
+ CDTXMania.DTX.On非活性化();\r
+\r
+ CDTXMania.DTX = new CDTX( str, false, ( (double) CDTXMania.ConfigIni.n演奏速度 ) / 20.0, ini.stファイル.BGMAdjust );\r
+ Trace.TraceInformation( "----曲情報-----------------" );\r
+ Trace.TraceInformation( "TITLE: {0}", new object[] { CDTXMania.DTX.TITLE } );\r
+ Trace.TraceInformation( "FILE: {0}", new object[] { CDTXMania.DTX.strファイル名の絶対パス } );\r
+ Trace.TraceInformation( "---------------------------" );\r
+\r
+ if( CDTXMania.bコンパクトモード )\r
+ CDTXMania.DTX.MIDIレベル = 1;\r
+ else\r
+ CDTXMania.DTX.MIDIレベル = ( CDTXMania.stage選曲.r確定された曲.eノード種別 == C曲リストノード.Eノード種別.SCORE_MIDI ) ? CDTXMania.stage選曲.n現在選択中の曲の難易度 : 0;\r
+\r
+ CDTXMania.DTX.tWAVの読み込み();\r
+ CDTXMania.DTX.tギターとベースのランダム化( E楽器パート.GUITAR, CDTXMania.ConfigIni.eRandom.Guitar );\r
+ CDTXMania.DTX.tギターとベースのランダム化( E楽器パート.BASS, CDTXMania.ConfigIni.eRandom.Bass );\r
+\r
+ if( CDTXMania.ConfigIni.bギタレボモード )\r
+ CDTXMania.stage演奏ギター画面.On活性化();\r
+ else\r
+ CDTXMania.stage演奏ドラム画面.On活性化();\r
+\r
+ if( CDTXMania.ConfigIni.bBGA有効 )\r
+ CDTXMania.DTX.tBMP_BMPTEXの読み込み();\r
+\r
+ if( CDTXMania.ConfigIni.bAVI有効 )\r
+ CDTXMania.DTX.tAVIの読み込み();\r
+\r
+ CDTXMania.Timer.t更新();\r
+ base.eフェーズID = CStage.Eフェーズ.NOWLOADING_システムサウンドBGMの完了を待つ;\r
+ return 0;\r
+ }\r
+\r
+ case CStage.Eフェーズ.NOWLOADING_システムサウンドBGMの完了を待つ:\r
+ {\r
+ long num2 = CDTXMania.Timer.n現在時刻;\r
+\r
+ if( num2 < this.nBGM再生開始時刻 )\r
+ this.nBGM再生開始時刻 = num2;\r
+\r
+ if( ( num2 - this.nBGM再生開始時刻 ) > ( this.nBGMの総再生時間ms - 0x3e8 ) )\r
+ {\r
+ this.actFO.tフェードアウト開始();\r
+ base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
+ }\r
+ return 0;\r
+ }\r
+\r
+ case CStage.Eフェーズ.共通_フェードアウト:\r
+ if( this.actFO.On進行描画() == 0 )\r
+ return 0;\r
+ return 1;\r
+ }\r
+ return 0;\r
+ }\r
+\r
+ \r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private CActFIFOBlack actFI;\r
+ private CActFIFOBlack actFO;\r
+ private bool b音符を表示する;\r
+ private Font ftタイトル表示用フォント;\r
+ private long nBGMの総再生時間ms;\r
+ private long nBGM再生開始時刻;\r
+ private int n音符の表示位置X;\r
+ private CSound sd読み込み音;\r
+ private string strSTAGEFILE;\r
+ private string str曲タイトル;\r
+ private CTexture txタイトル;\r
+ private CTexture tx音符;\r
+ private CTexture tx背景;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Drawing;\r
+using SlimDX;\r
+using SlimDX.Direct3D9;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CAct演奏AVI : CActivity\r
+ {\r
+ // コンストラクタ\r
+\r
+ public CAct演奏AVI()\r
+ {\r
+ base.b活性化してない = true;\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ public void Start( int nチャンネル番号, CDTX.CAVI rAVI, int n開始サイズW, int n開始サイズH, int n終了サイズW, int n終了サイズH, int n画像側開始位置X, int n画像側開始位置Y, int n画像側終了位置X, int n画像側終了位置Y, int n表示側開始位置X, int n表示側開始位置Y, int n表示側終了位置X, int n表示側終了位置Y, int n総移動時間ms, int n移動開始時刻ms )\r
+ {\r
+ if( nチャンネル番号 == 0x54 )\r
+ {\r
+ this.rAVI = rAVI;\r
+ this.n開始サイズW = n開始サイズW;\r
+ this.n開始サイズH = n開始サイズH;\r
+ this.n終了サイズW = n終了サイズW;\r
+ this.n終了サイズH = n終了サイズH;\r
+ this.n画像側開始位置X = n画像側開始位置X;\r
+ this.n画像側開始位置Y = n画像側開始位置Y;\r
+ this.n画像側終了位置X = n画像側終了位置X;\r
+ this.n画像側終了位置Y = n画像側終了位置Y;\r
+ this.n表示側開始位置X = n表示側開始位置X;\r
+ this.n表示側開始位置Y = n表示側開始位置Y;\r
+ this.n表示側終了位置X = n表示側終了位置X;\r
+ this.n表示側終了位置Y = n表示側終了位置Y;\r
+ this.n総移動時間ms = n総移動時間ms;\r
+ this.n移動開始時刻ms = ( n移動開始時刻ms != -1 ) ? n移動開始時刻ms : CDTXMania.Timer.n現在時刻;\r
+ this.n前回表示したフレーム番号 = -1;\r
+ }\r
+ }\r
+ public void SkipStart( int n移動開始時刻ms )\r
+ {\r
+ foreach( CDTX.CChip chip in CDTXMania.DTX.listChip )\r
+ {\r
+ if( chip.n発声時刻ms > n移動開始時刻ms )\r
+ {\r
+ break;\r
+ }\r
+ switch( chip.eAVI種別 )\r
+ {\r
+ case EAVI種別.AVI:\r
+ {\r
+ if( chip.rAVI != null )\r
+ {\r
+ this.Start( chip.nチャンネル番号, chip.rAVI, 0x116, 0x163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, chip.n発声時刻ms );\r
+ }\r
+ continue;\r
+ }\r
+ case EAVI種別.AVIPAN:\r
+ {\r
+ if( chip.rAVIPan != null )\r
+ {\r
+ this.Start( chip.nチャンネル番号, chip.rAVI, chip.rAVIPan.sz開始サイズ.Width, chip.rAVIPan.sz開始サイズ.Height, chip.rAVIPan.sz終了サイズ.Width, chip.rAVIPan.sz終了サイズ.Height, chip.rAVIPan.pt動画側開始位置.X, chip.rAVIPan.pt動画側開始位置.Y, chip.rAVIPan.pt動画側終了位置.X, chip.rAVIPan.pt動画側終了位置.Y, chip.rAVIPan.pt表示側開始位置.X, chip.rAVIPan.pt表示側開始位置.Y, chip.rAVIPan.pt表示側終了位置.X, chip.rAVIPan.pt表示側終了位置.Y, chip.n総移動時間, chip.n発声時刻ms );\r
+ }\r
+ continue;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ public void Stop()\r
+ {\r
+ if( ( this.rAVI != null ) && ( this.rAVI.avi != null ) )\r
+ {\r
+ this.n移動開始時刻ms = -1;\r
+ }\r
+ }\r
+ public void Cont( int n再開時刻ms )\r
+ {\r
+ if( ( this.rAVI != null ) && ( this.rAVI.avi != null ) )\r
+ {\r
+ this.n移動開始時刻ms = n再開時刻ms;\r
+ }\r
+ }\r
+ public unsafe int t進行描画( int x, int y )\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ Rectangle rectangle;\r
+ Rectangle rectangle2;\r
+ if( ( ( this.n移動開始時刻ms == -1 ) || ( this.rAVI == null ) ) || ( this.rAVI.avi == null ) )\r
+ {\r
+ return 0;\r
+ }\r
+ if( this.tx描画用 == null )\r
+ {\r
+ return 0;\r
+ }\r
+ int time = (int) ( ( CDTXMania.Timer.n現在時刻 - this.n移動開始時刻ms ) * ( ( (double) CDTXMania.ConfigIni.n演奏速度 ) / 20.0 ) );\r
+ int frameNoFromTime = this.rAVI.avi.GetFrameNoFromTime( time );\r
+ if( ( this.n総移動時間ms != 0 ) && ( this.n総移動時間ms < time ) )\r
+ {\r
+ this.n総移動時間ms = 0;\r
+ this.n移動開始時刻ms = -1;\r
+ return 0;\r
+ }\r
+ if( ( this.n総移動時間ms == 0 ) && ( frameNoFromTime >= this.rAVI.avi.GetMaxFrameCount() ) )\r
+ {\r
+ this.n移動開始時刻ms = -1;\r
+ return 0;\r
+ }\r
+ if( ( this.n前回表示したフレーム番号 != frameNoFromTime ) && !this.bフレームを作成した )\r
+ {\r
+ this.pBmp = this.rAVI.avi.GetFramePtr( frameNoFromTime );\r
+ this.n前回表示したフレーム番号 = frameNoFromTime;\r
+ this.bフレームを作成した = true;\r
+ }\r
+ Size size = new Size( (int) this.rAVI.avi.nフレーム幅, (int) this.rAVI.avi.nフレーム高さ );\r
+ Size size2 = new Size( 0x116, 0x163 );\r
+ Size size3 = new Size( this.n開始サイズW, this.n開始サイズH );\r
+ Size size4 = new Size( this.n終了サイズW, this.n終了サイズH );\r
+ Point location = new Point( this.n画像側開始位置X, this.n画像側終了位置Y );\r
+ Point point2 = new Point( this.n画像側終了位置X, this.n画像側終了位置Y );\r
+ Point point3 = new Point( this.n表示側開始位置X, this.n表示側開始位置Y );\r
+ Point point4 = new Point( this.n表示側終了位置X, this.n表示側終了位置Y );\r
+ long num3 = this.n総移動時間ms;\r
+ long num4 = this.n移動開始時刻ms;\r
+ if( CDTXMania.Timer.n現在時刻 < num4 )\r
+ {\r
+ num4 = CDTXMania.Timer.n現在時刻;\r
+ }\r
+ time = (int) ( ( CDTXMania.Timer.n現在時刻 - num4 ) * ( ( (double) CDTXMania.ConfigIni.n演奏速度 ) / 20.0 ) );\r
+ if( num3 == 0 )\r
+ {\r
+ rectangle = new Rectangle( location, size3 );\r
+ rectangle2 = new Rectangle( point3, size3 );\r
+ }\r
+ else\r
+ {\r
+ double num5 = ( (double) time ) / ( (double) num3 );\r
+ Size size5 = new Size( size3.Width + ( (int) ( ( size4.Width - size3.Width ) * num5 ) ), size3.Height + ( (int) ( ( size4.Height - size3.Height ) * num5 ) ) );\r
+ rectangle = new Rectangle( (int) ( ( point2.X - location.X ) * num5 ), (int) ( ( point2.Y - location.Y ) * num5 ), ( (int) ( ( point2.X - location.X ) * num5 ) ) + size5.Width, ( (int) ( ( point2.Y - location.Y ) * num5 ) ) + size5.Height );\r
+ rectangle2 = new Rectangle( (int) ( ( point4.X - point3.X ) * num5 ), (int) ( ( point4.Y - point3.Y ) * num5 ), ( (int) ( ( point4.X - point3.X ) * num5 ) ) + size5.Width, ( (int) ( ( point4.Y - point3.Y ) * num5 ) ) + size5.Height );\r
+ if( ( ( rectangle.Right <= 0 ) || ( rectangle.Bottom <= 0 ) ) || ( ( rectangle.Left >= size.Width ) || ( rectangle.Top >= size.Height ) ) )\r
+ {\r
+ return 0;\r
+ }\r
+ if( ( ( rectangle2.Right <= 0 ) || ( rectangle2.Bottom <= 0 ) ) || ( ( rectangle2.Left >= size2.Width ) || ( rectangle2.Top >= size2.Height ) ) )\r
+ {\r
+ return 0;\r
+ }\r
+ if( rectangle.X < 0 )\r
+ {\r
+ int num6 = -rectangle.X;\r
+ rectangle2.X += num6;\r
+ rectangle2.Width -= num6;\r
+ rectangle.X = 0;\r
+ rectangle.Width -= num6;\r
+ }\r
+ if( rectangle.Y < 0 )\r
+ {\r
+ int num7 = -rectangle.Y;\r
+ rectangle2.Y += num7;\r
+ rectangle2.Height -= num7;\r
+ rectangle.Y = 0;\r
+ rectangle.Height -= num7;\r
+ }\r
+ if( rectangle.Right > size.Width )\r
+ {\r
+ int num8 = rectangle.Right - size.Width;\r
+ rectangle2.Width -= num8;\r
+ rectangle.Width -= num8;\r
+ }\r
+ if( rectangle.Bottom > size.Height )\r
+ {\r
+ int num9 = rectangle.Bottom - size.Height;\r
+ rectangle2.Height -= num9;\r
+ rectangle.Height -= num9;\r
+ }\r
+ if( rectangle2.X < 0 )\r
+ {\r
+ int num10 = -rectangle2.X;\r
+ rectangle.X += num10;\r
+ rectangle.Width -= num10;\r
+ rectangle2.X = 0;\r
+ rectangle2.Width -= num10;\r
+ }\r
+ if( rectangle2.Y < 0 )\r
+ {\r
+ int num11 = -rectangle2.Y;\r
+ rectangle.Y += num11;\r
+ rectangle.Height -= num11;\r
+ rectangle2.Y = 0;\r
+ rectangle2.Height -= num11;\r
+ }\r
+ if( rectangle2.Right > size2.Width )\r
+ {\r
+ int num12 = rectangle2.Right - size2.Width;\r
+ rectangle.Width -= num12;\r
+ rectangle2.Width -= num12;\r
+ }\r
+ if( rectangle2.Bottom > size2.Height )\r
+ {\r
+ int num13 = rectangle2.Bottom - size2.Height;\r
+ rectangle.Height -= num13;\r
+ rectangle2.Height -= num13;\r
+ }\r
+ if( ( rectangle.X >= rectangle.Right ) || ( rectangle.Y >= rectangle.Bottom ) )\r
+ {\r
+ return 0;\r
+ }\r
+ if( ( rectangle2.X >= rectangle2.Right ) || ( rectangle2.Y >= rectangle2.Bottom ) )\r
+ {\r
+ return 0;\r
+ }\r
+ if( ( ( rectangle.Right < 0 ) || ( rectangle.Bottom < 0 ) ) || ( ( rectangle.X > size.Width ) || ( rectangle.Y > size.Height ) ) )\r
+ {\r
+ return 0;\r
+ }\r
+ if( ( ( rectangle2.Right < 0 ) || ( rectangle2.Bottom < 0 ) ) || ( ( rectangle2.X > size2.Width ) || ( rectangle2.Y > size2.Height ) ) )\r
+ {\r
+ return 0;\r
+ }\r
+ }\r
+ if( ( this.tx描画用 != null ) && ( this.n総移動時間ms != -1 ) )\r
+ {\r
+ if( this.bフレームを作成した && ( this.pBmp != IntPtr.Zero ) )\r
+ {\r
+ DataRectangle rectangle3 = this.tx描画用.texture.LockRectangle( 0, LockFlags.None );\r
+ DataStream data = rectangle3.Data;\r
+ int num14 = rectangle3.Pitch / this.tx描画用.szテクスチャサイズ.Width;\r
+ BitmapUtil.BITMAPINFOHEADER* pBITMAPINFOHEADER = (BitmapUtil.BITMAPINFOHEADER*) this.pBmp.ToPointer();\r
+ if( pBITMAPINFOHEADER->biBitCount == 0x18 )\r
+ {\r
+ switch( num14 )\r
+ {\r
+ case 2:\r
+ this.rAVI.avi.tBitmap24ToGraphicsStreamR5G6B5( pBITMAPINFOHEADER, data, this.tx描画用.szテクスチャサイズ.Width, this.tx描画用.szテクスチャサイズ.Height );\r
+ break;\r
+\r
+ case 4:\r
+ this.rAVI.avi.tBitmap24ToGraphicsStreamX8R8G8B8( pBITMAPINFOHEADER, data, this.tx描画用.szテクスチャサイズ.Width, this.tx描画用.szテクスチャサイズ.Height );\r
+ break;\r
+ }\r
+ }\r
+ this.tx描画用.texture.UnlockRectangle( 0 );\r
+ this.bフレームを作成した = false;\r
+ }\r
+ this.tx描画用.t2D描画( CDTXMania.app.Device, x, y );\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+\r
+ \r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ this.rAVI = null;\r
+ this.n移動開始時刻ms = -1;\r
+ this.n前回表示したフレーム番号 = -1;\r
+ this.bフレームを作成した = false;\r
+ this.pBmp = IntPtr.Zero;\r
+ base.On活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.tx描画用 = new CTexture( CDTXMania.app.Device, 0x116, 0x163, CDTXMania.app.GraphicsDeviceManager.CurrentSettings.BackBufferFormat, Pool.Managed );\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ if( this.tx描画用 != null )\r
+ {\r
+ this.tx描画用.Dispose();\r
+ this.tx描画用 = null;\r
+ }\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ throw new InvalidOperationException( "t進行描画(int,int)のほうを使用してください。" );\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private bool bフレームを作成した;\r
+ private long n移動開始時刻ms;\r
+ private int n画像側開始位置X;\r
+ private int n画像側開始位置Y;\r
+ private int n画像側終了位置X;\r
+ private int n画像側終了位置Y;\r
+ private int n開始サイズH;\r
+ private int n開始サイズW;\r
+ private int n終了サイズH;\r
+ private int n終了サイズW;\r
+ private int n前回表示したフレーム番号;\r
+ private int n総移動時間ms;\r
+ private int n表示側開始位置X;\r
+ private int n表示側開始位置Y;\r
+ private int n表示側終了位置X;\r
+ private int n表示側終了位置Y;\r
+ private IntPtr pBmp;\r
+ private CDTX.CAVI rAVI;\r
+ private CTexture tx描画用;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using System.Drawing;\r
+using SlimDX.Direct3D9;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CAct演奏BGA : CActivity\r
+ {\r
+ // コンストラクタ\r
+\r
+ public CAct演奏BGA()\r
+ {\r
+ base.b活性化してない = true;\r
+ }\r
+ \r
+ \r
+ // メソッド\r
+\r
+ public void ChangeScope( int nチャンネル, CDTX.CBMP bmp, CDTX.CBMPTEX bmptex )\r
+ {\r
+ for( int i = 0; i < 8; i++ )\r
+ {\r
+ if( nチャンネル == this.nChannel[ i ] )\r
+ {\r
+ this.stLayer[ i ].rBMP = bmp;\r
+ this.stLayer[ i ].rBMPTEX = bmptex;\r
+ return;\r
+ }\r
+ }\r
+ }\r
+ public void Start( int nチャンネル, CDTX.CBMP bmp, CDTX.CBMPTEX bmptex, int n開始サイズW, int n開始サイズH, int n終了サイズW, int n終了サイズH, int n画像側開始位置X, int n画像側開始位置Y, int n画像側終了位置X, int n画像側終了位置Y, int n表示側開始位置X, int n表示側開始位置Y, int n表示側終了位置X, int n表示側終了位置Y, int n総移動時間ms )\r
+ {\r
+ this.Start( nチャンネル, bmp, bmptex, n開始サイズW, n開始サイズH, n終了サイズW, n終了サイズH, n画像側開始位置X, n画像側開始位置Y, n画像側終了位置X, n画像側終了位置Y, n表示側開始位置X, n表示側開始位置Y, n表示側終了位置X, n表示側終了位置Y, n総移動時間ms, -1 );\r
+ }\r
+ public void Start( int nチャンネル, CDTX.CBMP bmp, CDTX.CBMPTEX bmptex, int n開始サイズW, int n開始サイズH, int n終了サイズW, int n終了サイズH, int n画像側開始位置X, int n画像側開始位置Y, int n画像側終了位置X, int n画像側終了位置Y, int n表示側開始位置X, int n表示側開始位置Y, int n表示側終了位置X, int n表示側終了位置Y, int n総移動時間ms, int n移動開始時刻ms )\r
+ {\r
+ for( int i = 0; i < 8; i++ )\r
+ {\r
+ if( nチャンネル == this.nChannel[ i ] )\r
+ {\r
+ this.stLayer[ i ].rBMP = bmp;\r
+ this.stLayer[ i ].rBMPTEX = bmptex;\r
+ this.stLayer[ i ].sz開始サイズ.Width = n開始サイズW;\r
+ this.stLayer[ i ].sz開始サイズ.Height = n開始サイズH;\r
+ this.stLayer[ i ].sz終了サイズ.Width = n終了サイズW;\r
+ this.stLayer[ i ].sz終了サイズ.Height = n終了サイズH;\r
+ this.stLayer[ i ].pt画像側開始位置.X = n画像側開始位置X;\r
+ this.stLayer[ i ].pt画像側開始位置.Y = n画像側開始位置Y;\r
+ this.stLayer[ i ].pt画像側終了位置.X = n画像側終了位置X;\r
+ this.stLayer[ i ].pt画像側終了位置.Y = n画像側終了位置Y;\r
+ this.stLayer[ i ].pt表示側開始位置.X = n表示側開始位置X;\r
+ this.stLayer[ i ].pt表示側開始位置.Y = n表示側開始位置Y;\r
+ this.stLayer[ i ].pt表示側終了位置.X = n表示側終了位置X;\r
+ this.stLayer[ i ].pt表示側終了位置.Y = n表示側終了位置Y;\r
+ this.stLayer[ i ].n総移動時間ms = n総移動時間ms;\r
+ this.stLayer[ i ].n移動開始時刻ms = ( n移動開始時刻ms != -1 ) ? n移動開始時刻ms : CDTXMania.Timer.n現在時刻;\r
+ }\r
+ }\r
+ }\r
+ public void SkipStart( int n移動開始時刻ms )\r
+ {\r
+ for( int i = 0; i < CDTXMania.DTX.listChip.Count; i++ )\r
+ {\r
+ CDTX.CChip chip = CDTXMania.DTX.listChip[ i ];\r
+ if( chip.n発声時刻ms > n移動開始時刻ms )\r
+ {\r
+ return;\r
+ }\r
+ switch( chip.eBGA種別 )\r
+ {\r
+ case EBGA種別.BMP:\r
+ if( ( chip.rBMP != null ) && ( chip.rBMP.tx画像 != null ) )\r
+ {\r
+ this.Start( chip.nチャンネル番号, chip.rBMP, null, chip.rBMP.n幅, chip.rBMP.n高さ, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, chip.n発声時刻ms );\r
+ }\r
+ break;\r
+\r
+ case EBGA種別.BMPTEX:\r
+ if( ( chip.rBMPTEX != null ) && ( chip.rBMPTEX.tx画像 != null ) )\r
+ {\r
+ this.Start( chip.nチャンネル番号, null, chip.rBMPTEX, chip.rBMPTEX.tx画像.sz画像サイズ.Width, chip.rBMPTEX.tx画像.sz画像サイズ.Height, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, chip.n発声時刻ms );\r
+ }\r
+ break;\r
+\r
+ case EBGA種別.BGA:\r
+ if( chip.rBGA != null )\r
+ {\r
+ this.Start( chip.nチャンネル番号, chip.rBMP, chip.rBMPTEX, chip.rBGA.pt画像側右下座標.X - chip.rBGA.pt画像側左上座標.X, chip.rBGA.pt画像側右下座標.Y - chip.rBGA.pt画像側左上座標.Y, 0, 0, chip.rBGA.pt画像側左上座標.X, chip.rBGA.pt画像側左上座標.Y, 0, 0, chip.rBGA.pt表示座標.X, chip.rBGA.pt表示座標.Y, 0, 0, 0, chip.n発声時刻ms );\r
+ }\r
+ break;\r
+\r
+ case EBGA種別.BGAPAN:\r
+ if( chip.rBGAPan != null )\r
+ {\r
+ this.Start( chip.nチャンネル番号, chip.rBMP, chip.rBMPTEX, chip.rBGAPan.sz開始サイズ.Width, chip.rBGAPan.sz開始サイズ.Height, chip.rBGAPan.sz終了サイズ.Width, chip.rBGAPan.sz終了サイズ.Height, chip.rBGAPan.pt画像側開始位置.X, chip.rBGAPan.pt画像側開始位置.Y, chip.rBGAPan.pt画像側終了位置.X, chip.rBGAPan.pt画像側終了位置.Y, chip.rBGAPan.pt表示側開始位置.X, chip.rBGAPan.pt表示側開始位置.Y, chip.rBGAPan.pt表示側終了位置.X, chip.rBGAPan.pt表示側終了位置.Y, chip.n総移動時間, chip.n発声時刻ms );\r
+ }\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ public void Stop()\r
+ {\r
+ for( int i = 0; i < 8; i++ )\r
+ {\r
+ this.stLayer[ i ].n移動開始時刻ms = -1;\r
+ }\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ for( int i = 0; i < 8; i++ )\r
+ {\r
+ STLAYER stlayer2 = new STLAYER();\r
+ STLAYER stlayer = stlayer2;\r
+ stlayer.rBMP = null;\r
+ stlayer.rBMPTEX = null;\r
+ stlayer.n移動開始時刻ms = -1;\r
+ this.stLayer[ i ] = stlayer;\r
+ }\r
+ base.On活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ using( Surface surface = CDTXMania.app.Device.GetBackBuffer( 0, 0 ) )\r
+ {\r
+ this.sfBackBuffer = Surface.CreateOffscreenPlain( CDTXMania.app.Device, surface.Description.Width, surface.Description.Height, surface.Description.Format, Pool.SystemMemory );\r
+ }\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ if( this.sfBackBuffer != null )\r
+ {\r
+ this.sfBackBuffer.Dispose();\r
+ this.sfBackBuffer = null;\r
+ }\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ throw new InvalidOperationException( "t進行描画(x,y)のほうを使用してください。" );\r
+ }\r
+ public int t進行描画( int x, int y )\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ for( int i = 0; i < 8; i++ )\r
+ {\r
+ if( ( ( this.stLayer[ i ].n移動開始時刻ms != -1 ) && ( ( this.stLayer[ i ].rBMP != null ) || ( this.stLayer[ i ].rBMPTEX != null ) ) ) && ( ( ( this.stLayer[ i ].rBMP == null ) || ( this.stLayer[ i ].rBMP.bUse && ( this.stLayer[ i ].rBMP.tx画像 != null ) ) ) && ( ( this.stLayer[ i ].rBMPTEX == null ) || ( this.stLayer[ i ].rBMPTEX.bUse && ( this.stLayer[ i ].rBMPTEX.tx画像 != null ) ) ) ) )\r
+ {\r
+ Size size = this.stLayer[ i ].sz開始サイズ;\r
+ Size size2 = this.stLayer[ i ].sz終了サイズ;\r
+ Point point = this.stLayer[ i ].pt画像側開始位置;\r
+ Point point2 = this.stLayer[ i ].pt画像側終了位置;\r
+ Point point3 = this.stLayer[ i ].pt表示側開始位置;\r
+ Point point4 = this.stLayer[ i ].pt表示側終了位置;\r
+ long num2 = this.stLayer[ i ].n総移動時間ms;\r
+ long num3 = this.stLayer[ i ].n移動開始時刻ms;\r
+ if( CDTXMania.Timer.n現在時刻 < num3 )\r
+ {\r
+ num3 = CDTXMania.Timer.n現在時刻;\r
+ }\r
+ Size size3 = new Size( 0x116, 0x163 );\r
+ Size size4 = new Size( ( this.stLayer[ i ].rBMP != null ) ? this.stLayer[ i ].rBMP.n幅 : this.stLayer[ i ].rBMPTEX.tx画像.sz画像サイズ.Width, ( this.stLayer[ i ].rBMP != null ) ? this.stLayer[ i ].rBMP.n高さ : this.stLayer[ i ].rBMPTEX.tx画像.sz画像サイズ.Height );\r
+ int num4 = (int) ( ( CDTXMania.Timer.n現在時刻 - num3 ) * ( ( (double) CDTXMania.ConfigIni.n演奏速度 ) / 20.0 ) );\r
+ if( ( num2 != 0 ) && ( num2 < num4 ) )\r
+ {\r
+ this.stLayer[ i ].pt画像側開始位置 = point = point2;\r
+ this.stLayer[ i ].pt表示側開始位置 = point3 = point4;\r
+ this.stLayer[ i ].sz開始サイズ = size = size2;\r
+ this.stLayer[ i ].n総移動時間ms = num2 = 0;\r
+ }\r
+ Rectangle rectangle = new Rectangle();\r
+ Rectangle rectangle2 = new Rectangle();\r
+ if( num2 == 0 )\r
+ {\r
+ rectangle.X = point.X;\r
+ rectangle.Y = point.Y;\r
+ rectangle.Width = size.Width;\r
+ rectangle.Height = size.Height;\r
+ rectangle2.X = point3.X;\r
+ rectangle2.Y = point3.Y;\r
+ rectangle2.Width = size.Width;\r
+ rectangle2.Height = size.Height;\r
+ }\r
+ else\r
+ {\r
+ double num5 = ( (double) num4 ) / ( (double) num2 );\r
+ Size size5 = new Size( size.Width + ( (int) ( ( size2.Width - size.Width ) * num5 ) ), size.Height + ( (int) ( ( size2.Height - size.Height ) * num5 ) ) );\r
+ rectangle.X = point.X + ( (int) ( ( point2.X - point.X ) * num5 ) );\r
+ rectangle.Y = point.Y + ( (int) ( ( point2.Y - point.Y ) * num5 ) );\r
+ rectangle.Width = size5.Width;\r
+ rectangle.Height = size5.Height;\r
+ rectangle2.X = point3.X + ( (int) ( ( point4.X - point3.X ) * num5 ) );\r
+ rectangle2.Y = point3.Y + ( (int) ( ( point4.Y - point3.Y ) * num5 ) );\r
+ rectangle2.Width = size5.Width;\r
+ rectangle2.Height = size5.Height;\r
+ }\r
+ if( ( ( ( rectangle.Right > 0 ) && ( rectangle.Bottom > 0 ) ) && ( ( rectangle.Left < size4.Width ) && ( rectangle.Top < size4.Height ) ) ) && ( ( ( rectangle2.Right > 0 ) && ( rectangle2.Bottom > 0 ) ) && ( ( rectangle2.Left < size3.Width ) && ( rectangle2.Top < size3.Height ) ) ) )\r
+ {\r
+ if( rectangle.X < 0 )\r
+ {\r
+ rectangle2.Width -= -rectangle.X;\r
+ rectangle2.X += -rectangle.X;\r
+ rectangle.Width -= -rectangle.X;\r
+ rectangle.X = 0;\r
+ }\r
+ if( rectangle.Y < 0 )\r
+ {\r
+ rectangle2.Height -= -rectangle.Y;\r
+ rectangle2.Y += -rectangle.Y;\r
+ rectangle.Height -= -rectangle.Y;\r
+ rectangle.Y = 0;\r
+ }\r
+ if( rectangle.Right > size4.Width )\r
+ {\r
+ rectangle2.Width -= rectangle.Right - size4.Width;\r
+ rectangle.Width -= rectangle.Right - size4.Width;\r
+ }\r
+ if( rectangle.Bottom > size4.Height )\r
+ {\r
+ rectangle2.Height -= rectangle.Bottom - size4.Height;\r
+ rectangle.Height -= rectangle.Bottom - size4.Height;\r
+ }\r
+ if( rectangle2.X < 0 )\r
+ {\r
+ rectangle.Width -= -rectangle2.X;\r
+ rectangle.X += -rectangle2.X;\r
+ rectangle2.Width -= rectangle2.X;\r
+ rectangle2.X = 0;\r
+ }\r
+ if( rectangle2.Y < 0 )\r
+ {\r
+ rectangle.Height -= -rectangle2.Y;\r
+ rectangle.Y += -rectangle2.Y;\r
+ rectangle2.Height -= -rectangle2.Y;\r
+ rectangle2.Y = 0;\r
+ }\r
+ if( rectangle2.Right > size3.Width )\r
+ {\r
+ rectangle.Width -= rectangle2.Right - size3.Width;\r
+ rectangle2.Width -= rectangle2.Right - size3.Width;\r
+ }\r
+ if( rectangle2.Bottom > size3.Height )\r
+ {\r
+ rectangle.Height -= rectangle2.Bottom - size3.Height;\r
+ rectangle2.Height -= rectangle2.Bottom - size3.Height;\r
+ }\r
+ if( ( ( ( ( rectangle.Left < rectangle.Right ) && ( rectangle.Top < rectangle.Bottom ) ) && ( ( rectangle2.Left < rectangle2.Right ) && ( rectangle2.Top < rectangle2.Bottom ) ) ) && ( ( ( rectangle.Right >= 0 ) && ( rectangle.Bottom >= 0 ) ) && ( ( rectangle.Left <= size4.Width ) && ( rectangle.Top <= size4.Height ) ) ) ) && ( ( ( rectangle2.Right >= 0 ) && ( rectangle2.Bottom >= 0 ) ) && ( ( rectangle2.Left <= size3.Width ) && ( rectangle2.Top <= size3.Height ) ) ) )\r
+ {\r
+ if( ( this.stLayer[ i ].rBMP != null ) && ( this.stLayer[ i ].rBMP.tx画像 != null ) )\r
+ {\r
+ this.stLayer[ i ].rBMP.tx画像.t2D描画( CDTXMania.app.Device, x + rectangle2.X, y + rectangle2.Y, rectangle );\r
+ }\r
+ else if( ( this.stLayer[ i ].rBMPTEX != null ) && ( this.stLayer[ i ].rBMPTEX.tx画像 != null ) )\r
+ {\r
+ this.stLayer[ i ].rBMPTEX.tx画像.t2D描画( CDTXMania.app.Device, x + rectangle2.X, y + rectangle2.Y, rectangle );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+ \r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ private struct STLAYER\r
+ {\r
+ public CDTX.CBMP rBMP;\r
+ public CDTX.CBMPTEX rBMPTEX;\r
+ public Size sz開始サイズ;\r
+ public Size sz終了サイズ;\r
+ public Point pt画像側開始位置;\r
+ public Point pt画像側終了位置;\r
+ public Point pt表示側開始位置;\r
+ public Point pt表示側終了位置;\r
+ public long n総移動時間ms;\r
+ public long n移動開始時刻ms;\r
+ }\r
+\r
+ private readonly int[] nChannel = new int[] { 4, 7, 0x55, 0x56, 0x57, 0x58, 0x59, 0x60 };\r
+ private Surface sfBackBuffer;\r
+ private STLAYER[] stLayer = new STLAYER[ 8 ];\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using System.Drawing;\r
+using SlimDX;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CAct演奏Combo共通 : CActivity\r
+ {\r
+ // プロパティ\r
+\r
+ public STCOMBO n現在のコンボ数;\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ public struct STCOMBO\r
+ {\r
+ public CAct演奏Combo共通 act;\r
+\r
+ public int this[ int index ]\r
+ {\r
+ get\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ return this.Drums;\r
+\r
+ case 1:\r
+ return this.Guitar;\r
+\r
+ case 2:\r
+ return this.Bass;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ set\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ this.Drums = value;\r
+ return;\r
+\r
+ case 1:\r
+ this.Guitar = value;\r
+ return;\r
+\r
+ case 2:\r
+ this.Bass = value;\r
+ return;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ }\r
+ public int Drums\r
+ {\r
+ get\r
+ {\r
+ return this.drums;\r
+ }\r
+ set\r
+ {\r
+ this.drums = value;\r
+ if( this.drums > this.Drums最高値 )\r
+ {\r
+ this.Drums最高値 = this.drums;\r
+ }\r
+ this.act.status.Drums.nCOMBO値 = this.drums;\r
+ this.act.status.Drums.n最高COMBO値 = this.Drums最高値;\r
+ }\r
+ }\r
+ public int Guitar\r
+ {\r
+ get\r
+ {\r
+ return this.guitar;\r
+ }\r
+ set\r
+ {\r
+ this.guitar = value;\r
+ if( this.guitar > this.Guitar最高値 )\r
+ {\r
+ this.Guitar最高値 = this.guitar;\r
+ }\r
+ this.act.status.Guitar.nCOMBO値 = this.guitar;\r
+ this.act.status.Guitar.n最高COMBO値 = this.Guitar最高値;\r
+ }\r
+ }\r
+ public int Bass\r
+ {\r
+ get\r
+ {\r
+ return this.bass;\r
+ }\r
+ set\r
+ {\r
+ this.bass = value;\r
+ if( this.bass > this.Bass最高値 )\r
+ {\r
+ this.Bass最高値 = this.bass;\r
+ }\r
+ this.act.status.Bass.nCOMBO値 = this.bass;\r
+ this.act.status.Bass.n最高COMBO値 = this.Bass最高値;\r
+ }\r
+ }\r
+ public int Drums最高値 { get; private set; }\r
+ public int Guitar最高値 { get; private set; }\r
+ public int Bass最高値 { get; private set; }\r
+\r
+ private int drums;\r
+ private int guitar;\r
+ private int bass;\r
+ }\r
+ \r
+ protected enum EEvent\r
+ {\r
+ 非表示,\r
+ 数値更新,\r
+ 同一数値,\r
+ ミス通知\r
+ }\r
+ protected enum EMode\r
+ {\r
+ 非表示中,\r
+ 進行表示中,\r
+ 残像表示中\r
+ }\r
+ protected const int nギターコンボのCOMBO文字の高さ = 0x10;\r
+ protected const int nギターコンボのCOMBO文字の幅 = 0x2d;\r
+ protected const int nギターコンボの高さ = 0x23;\r
+ protected const int nギターコンボの幅 = 0x17;\r
+ protected const int nギターコンボの文字間隔 = 1;\r
+ protected const int nドラムコンボのCOMBO文字の高さ = 0x20;\r
+ protected const int nドラムコンボのCOMBO文字の幅 = 90;\r
+ protected const int nドラムコンボの高さ = 70;\r
+ protected const int nドラムコンボの幅 = 0x2d;\r
+ protected const int nドラムコンボの文字間隔 = 2;\r
+ protected int[] nジャンプ差分値 = new int[ 180 ];\r
+ protected CSTATUS status;\r
+ protected CTexture txCOMBOギター;\r
+ protected CTexture txCOMBOドラム;\r
+\r
+ // 内部クラス\r
+\r
+ protected class CSTATUS\r
+ {\r
+ public CSTAT Bass = new CSTAT();\r
+ public CSTAT Drums = new CSTAT();\r
+ public CSTAT Guitar = new CSTAT();\r
+ public CSTAT this[ int index ]\r
+ {\r
+ get\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ return this.Drums;\r
+\r
+ case 1:\r
+ return this.Guitar;\r
+\r
+ case 2:\r
+ return this.Bass;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ set\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ this.Drums = value;\r
+ return;\r
+\r
+ case 1:\r
+ this.Guitar = value;\r
+ return;\r
+\r
+ case 2:\r
+ this.Bass = value;\r
+ return;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ }\r
+\r
+ public class CSTAT\r
+ {\r
+ public CAct演奏Combo共通.EMode e現在のモード;\r
+ public int nCOMBO値;\r
+ public long nコンボが切れた時刻;\r
+ public int nジャンプインデックス値;\r
+ public int n現在表示中のCOMBO値;\r
+ public int n最高COMBO値;\r
+ public int n残像表示中のCOMBO値;\r
+ public long n前回の時刻・ジャンプ用;\r
+ }\r
+ }\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public CAct演奏Combo共通()\r
+ {\r
+ base.b活性化してない = true;\r
+ for( int i = 0; i < 180; i++ )\r
+ {\r
+ this.nジャンプ差分値[ i ] = (int) ( -15.0 * Math.Sin( ( 3.1415926535897931 * i ) / 180.0 ) );\r
+ }\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ protected virtual void tコンボ表示・ドラム( int nCombo値, int nジャンプインデックス )\r
+ {\r
+ if( CDTXMania.ConfigIni.ドラムコンボ文字の表示位置 != Eドラムコンボ文字の表示位置.OFF )\r
+ {\r
+ int[] numArray = new int[ 10 ];\r
+ int num2 = nCombo値;\r
+ int index = 0;\r
+ while( ( num2 > 0 ) && ( index < 10 ) )\r
+ {\r
+ numArray[ index ] = num2 % 10;\r
+ num2 = ( num2 - ( num2 % 10 ) ) / 10;\r
+ index++;\r
+ }\r
+ if( index != 0 )\r
+ {\r
+ int num3;\r
+ bool guitar = CDTXMania.DTX.bチップがある.Guitar;\r
+ bool bass = CDTXMania.DTX.bチップがある.Bass;\r
+ Eドラムコンボ文字の表示位置 lEFT = CDTXMania.ConfigIni.ドラムコンボ文字の表示位置;\r
+ if( CDTXMania.ConfigIni.bGuitar有効 )\r
+ {\r
+ if( bass )\r
+ {\r
+ lEFT = Eドラムコンボ文字の表示位置.LEFT;\r
+ }\r
+ else if( guitar && ( lEFT == Eドラムコンボ文字の表示位置.RIGHT ) )\r
+ {\r
+ lEFT = Eドラムコンボ文字の表示位置.CENTER;\r
+ }\r
+ }\r
+ switch( lEFT )\r
+ {\r
+ case Eドラムコンボ文字の表示位置.LEFT:\r
+ num3 = 0xbb;\r
+ break;\r
+\r
+ case Eドラムコンボ文字の表示位置.CENTER:\r
+ num3 = 320;\r
+ break;\r
+\r
+ case Eドラムコンボ文字の表示位置.RIGHT:\r
+ num3 = 0x1e5;\r
+ break;\r
+\r
+ default:\r
+ num3 = 0xbb;\r
+ break;\r
+ }\r
+ int num4 = CDTXMania.ConfigIni.bReverse.Drums ? 350 : 60;\r
+ int num5 = ( 0x2f * index ) + 90;\r
+ int x = ( num3 + ( num5 / 2 ) ) - 90;\r
+ int y = ( num4 + 70 ) - 0x20;\r
+ int num8 = nジャンプインデックス - ( index * 50 );\r
+ if( ( num8 >= 0 ) && ( num8 < 180 ) )\r
+ {\r
+ y += this.nジャンプ差分値[ num8 ];\r
+ }\r
+ if( this.txCOMBOドラム != null )\r
+ {\r
+ this.txCOMBOドラム.t2D描画( CDTXMania.app.Device, x, y, new Rectangle( 0, 140, 90, 0x20 ) );\r
+ }\r
+ for( int i = 0; i < index; i++ )\r
+ {\r
+ x -= 0x2f;\r
+ y = num4;\r
+ num8 = nジャンプインデックス - ( ( ( index - i ) - 1 ) * 50 );\r
+ if( ( num8 >= 0 ) && ( num8 < 180 ) )\r
+ {\r
+ y += this.nジャンプ差分値[ num8 ];\r
+ }\r
+ if( this.txCOMBOドラム != null )\r
+ {\r
+ this.txCOMBOドラム.t2D描画( CDTXMania.app.Device, x, y, new Rectangle( ( numArray[ i ] % 5 ) * 0x2d, ( numArray[ i ] / 5 ) * 70, 0x2d, 70 ) );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ protected virtual void tコンボ表示・ギター( int nCombo値, int nジャンプインデックス )\r
+ {\r
+ }\r
+ protected virtual void tコンボ表示・ベース( int nCombo値, int nジャンプインデックス )\r
+ {\r
+ }\r
+ protected void tコンボ表示・ギター( int nCombo値, int n表示中央X, int n表示中央Y, int nジャンプインデックス )\r
+ {\r
+ if( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Guitar ) != E判定文字表示位置.表示OFF )\r
+ {\r
+ int[] numArray = new int[ 10 ];\r
+ int num2 = nCombo値;\r
+ int index = 0;\r
+ while( ( num2 > 0 ) && ( index < 10 ) )\r
+ {\r
+ numArray[ index ] = num2 % 10;\r
+ num2 = ( num2 - ( num2 % 10 ) ) / 10;\r
+ index++;\r
+ }\r
+ if( index != 0 )\r
+ {\r
+ int num3 = 0x17 * index;\r
+ int num4 = nジャンプインデックス;\r
+ float x = 1f;\r
+ if( ( num4 >= 0 ) && ( num4 < 180 ) )\r
+ {\r
+ x = 1f - ( ( (float) this.nジャンプ差分値[ num4 ] ) / 45f );\r
+ }\r
+ if( this.txCOMBOギター != null )\r
+ {\r
+ this.txCOMBOギター.vc拡大縮小倍率 = new Vector3( x, x, 1f );\r
+ }\r
+ int num6 = n表示中央X - ( (int) ( ( 45f * x ) / 2f ) );\r
+ int y = n表示中央Y;\r
+ if( this.txCOMBOギター != null )\r
+ {\r
+ this.txCOMBOギター.t2D描画( CDTXMania.app.Device, num6, y, new Rectangle( 0, 70, 0x2d, 0x10 ) );\r
+ }\r
+ num6 = n表示中央X + ( num3 / 2 );\r
+ for( int i = 0; i < index; i++ )\r
+ {\r
+ num4 = nジャンプインデックス;\r
+ x = 1f;\r
+ if( ( num4 >= 0 ) && ( num4 < 180 ) )\r
+ {\r
+ x = 1f - ( ( (float) this.nジャンプ差分値[ num4 ] ) / 45f );\r
+ }\r
+ if( this.txCOMBOギター != null )\r
+ {\r
+ this.txCOMBOギター.vc拡大縮小倍率 = new Vector3( x, x, 1f );\r
+ }\r
+ num6 -= 0x18;\r
+ y = n表示中央Y - 0x23;\r
+ if( this.txCOMBOギター != null )\r
+ {\r
+ this.txCOMBOギター.t2D描画( CDTXMania.app.Device, num6 - ( (int) ( ( ( x - 1f ) * 23f ) / 2f ) ), y - ( (int) ( ( ( x - 1f ) * 35f ) / 2f ) ), new Rectangle( ( numArray[ i ] % 5 ) * 0x17, ( numArray[ i ] / 5 ) * 0x23, 0x17, 0x23 ) );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ protected void tコンボ表示・ベース( int nCombo値, int n表示中央X, int n表示中央Y, int nジャンプインデックス )\r
+ {\r
+ if( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Bass ) != E判定文字表示位置.表示OFF )\r
+ {\r
+ int[] numArray = new int[ 10 ];\r
+ int num2 = nCombo値;\r
+ int index = 0;\r
+ while( ( num2 > 0 ) && ( index < 10 ) )\r
+ {\r
+ numArray[ index ] = num2 % 10;\r
+ num2 = ( num2 - ( num2 % 10 ) ) / 10;\r
+ index++;\r
+ }\r
+ if( index != 0 )\r
+ {\r
+ int num3 = 0x17 * index;\r
+ int num4 = nジャンプインデックス;\r
+ float x = 1f;\r
+ if( ( num4 >= 0 ) && ( num4 < 180 ) )\r
+ {\r
+ x = 1f - ( ( (float) this.nジャンプ差分値[ num4 ] ) / 45f );\r
+ }\r
+ if( this.txCOMBOギター != null )\r
+ {\r
+ this.txCOMBOギター.vc拡大縮小倍率 = new Vector3( x, x, 1f );\r
+ }\r
+ int num6 = n表示中央X - ( (int) ( ( 45f * x ) / 2f ) );\r
+ int y = n表示中央Y;\r
+ if( this.txCOMBOギター != null )\r
+ {\r
+ this.txCOMBOギター.t2D描画( CDTXMania.app.Device, num6, y, new Rectangle( 0, 70, 0x2d, 0x10 ) );\r
+ }\r
+ num6 = n表示中央X + ( num3 / 2 );\r
+ for( int i = 0; i < index; i++ )\r
+ {\r
+ num4 = nジャンプインデックス;\r
+ x = 1f;\r
+ if( ( num4 >= 0 ) && ( num4 < 180 ) )\r
+ {\r
+ x = 1f - ( ( (float) this.nジャンプ差分値[ num4 ] ) / 45f );\r
+ }\r
+ if( this.txCOMBOギター != null )\r
+ {\r
+ this.txCOMBOギター.vc拡大縮小倍率 = new Vector3( x, x, 1f );\r
+ }\r
+ num6 -= 0x18;\r
+ y = n表示中央Y - 0x23;\r
+ if( this.txCOMBOギター != null )\r
+ {\r
+ this.txCOMBOギター.t2D描画( CDTXMania.app.Device, num6 - ( (int) ( ( ( x - 1f ) * 23f ) / 2f ) ), y - ( (int) ( ( ( x - 1f ) * 35f ) / 2f ) ), new Rectangle( ( numArray[ i ] % 5 ) * 0x17, ( numArray[ i ] / 5 ) * 0x23, 0x17, 0x23 ) );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ STCOMBO stcombo = new STCOMBO();\r
+ stcombo.act = this;\r
+ this.n現在のコンボ数 = stcombo;\r
+ this.status = new CSTATUS();\r
+ for( int i = 0; i < 3; i++ )\r
+ {\r
+ this.status[ i ].e現在のモード = EMode.非表示中;\r
+ this.status[ i ].nCOMBO値 = 0;\r
+ this.status[ i ].n最高COMBO値 = 0;\r
+ this.status[ i ].n現在表示中のCOMBO値 = 0;\r
+ this.status[ i ].n残像表示中のCOMBO値 = 0;\r
+ this.status[ i ].nジャンプインデックス値 = 0x1869f;\r
+ this.status[ i ].n前回の時刻・ジャンプ用 = -1;\r
+ this.status[ i ].nコンボが切れた時刻 = -1;\r
+ }\r
+ base.On活性化();\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ if( this.status != null )\r
+ {\r
+ this.status = null;\r
+ }\r
+ base.On非活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.txCOMBOドラム = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlayDrums combo drums.png" ) );\r
+ this.txCOMBOギター = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlayDrums combo guitar.png" ) );\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.txCOMBOドラム );\r
+ CDTXMania.tテクスチャの解放( ref this.txCOMBOギター );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ for( int i = 2; i >= 0; i-- )\r
+ {\r
+ EEvent event2;\r
+ if( this.status[ i ].n現在表示中のCOMBO値 == this.status[ i ].nCOMBO値 )\r
+ {\r
+ event2 = EEvent.同一数値;\r
+ }\r
+ else if( this.status[ i ].n現在表示中のCOMBO値 > this.status[ i ].nCOMBO値 )\r
+ {\r
+ event2 = EEvent.ミス通知;\r
+ }\r
+ else if( ( this.status[ i ].n現在表示中のCOMBO値 < CDTXMania.ConfigIni.n表示可能な最小コンボ数[ i ] ) && ( this.status[ i ].nCOMBO値 < CDTXMania.ConfigIni.n表示可能な最小コンボ数[ i ] ) )\r
+ {\r
+ event2 = EEvent.非表示;\r
+ }\r
+ else\r
+ {\r
+ event2 = EEvent.数値更新;\r
+ }\r
+ if( this.status[ i ].nジャンプインデックス値 < 360 )\r
+ {\r
+ if( ( this.status[ i ].n前回の時刻・ジャンプ用 == -1 ) || ( CDTXMania.Timer.n現在時刻 < this.status[ i ].n前回の時刻・ジャンプ用 ) )\r
+ {\r
+ this.status[ i ].n前回の時刻・ジャンプ用 = CDTXMania.Timer.n現在時刻;\r
+ }\r
+ while( ( CDTXMania.Timer.n現在時刻 - this.status[ i ].n前回の時刻・ジャンプ用 ) >= 2 )\r
+ {\r
+ if( this.status[ i ].nジャンプインデックス値 < 0x7d0 )\r
+ {\r
+ CSTATUS.CSTAT cstat1 = this.status[ i ];\r
+ cstat1.nジャンプインデックス値 += 3;\r
+ }\r
+ CSTATUS.CSTAT cstat2 = this.status[ i ];\r
+ cstat2.n前回の時刻・ジャンプ用 += 2;\r
+ }\r
+ }\r
+ Label_017F:\r
+ switch( this.status[ i ].e現在のモード )\r
+ {\r
+ case EMode.非表示中:\r
+ if( event2 != EEvent.数値更新 )\r
+ {\r
+ break;\r
+ }\r
+ this.status[ i ].e現在のモード = EMode.進行表示中;\r
+ this.status[ i ].nジャンプインデックス値 = 0;\r
+ this.status[ i ].n前回の時刻・ジャンプ用 = CDTXMania.Timer.n現在時刻;\r
+ goto Label_017F;\r
+\r
+ case EMode.進行表示中:\r
+ if( ( event2 != EEvent.非表示 ) && ( event2 != EEvent.ミス通知 ) )\r
+ {\r
+ goto Label_026F;\r
+ }\r
+ this.status[ i ].e現在のモード = EMode.残像表示中;\r
+ this.status[ i ].n残像表示中のCOMBO値 = this.status[ i ].n現在表示中のCOMBO値;\r
+ this.status[ i ].nコンボが切れた時刻 = CDTXMania.Timer.n現在時刻;\r
+ goto Label_017F;\r
+\r
+ case EMode.残像表示中:\r
+ if( event2 != EEvent.数値更新 )\r
+ {\r
+ goto Label_037A;\r
+ }\r
+ this.status[ i ].e現在のモード = EMode.進行表示中;\r
+ goto Label_017F;\r
+\r
+ default:\r
+ goto Label_03D6;\r
+ }\r
+ this.status[ i ].n現在表示中のCOMBO値 = this.status[ i ].nCOMBO値;\r
+ goto Label_03D6;\r
+ Label_026F:\r
+ if( event2 == EEvent.数値更新 )\r
+ {\r
+ this.status[ i ].nジャンプインデックス値 = 0;\r
+ this.status[ i ].n前回の時刻・ジャンプ用 = CDTXMania.Timer.n現在時刻;\r
+ }\r
+ this.status[ i ].n現在表示中のCOMBO値 = this.status[ i ].nCOMBO値;\r
+ switch( i )\r
+ {\r
+ case 0:\r
+ this.tコンボ表示・ドラム( this.status[ i ].nCOMBO値, this.status[ i ].nジャンプインデックス値 );\r
+ goto Label_03D6;\r
+\r
+ case 1:\r
+ this.tコンボ表示・ギター( this.status[ i ].nCOMBO値, this.status[ i ].nジャンプインデックス値 );\r
+ goto Label_03D6;\r
+\r
+ case 2:\r
+ this.tコンボ表示・ベース( this.status[ i ].nCOMBO値, this.status[ i ].nジャンプインデックス値 );\r
+ goto Label_03D6;\r
+\r
+ default:\r
+ goto Label_03D6;\r
+ }\r
+ Label_037A:\r
+ if( ( CDTXMania.Timer.n現在時刻 - this.status[ i ].nコンボが切れた時刻 ) > 0x3e8 )\r
+ {\r
+ this.status[ i ].e現在のモード = EMode.非表示中;\r
+ goto Label_017F;\r
+ }\r
+ this.status[ i ].n現在表示中のCOMBO値 = this.status[ i ].nCOMBO値;\r
+ Label_03D6: ;\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CAct演奏RGB共通 : CActivity\r
+ {\r
+ // プロパティ\r
+\r
+ protected bool[] b押下状態 = new bool[ 6 ];\r
+ protected CTexture txRGB;\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public CAct演奏RGB共通()\r
+ {\r
+ base.b活性化してない = true;\r
+ }\r
+ \r
+ \r
+ // メソッド\r
+\r
+ public void Push( int nLane )\r
+ {\r
+ this.b押下状態[ nLane ] = true;\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ for( int i = 0; i < 6; i++ )\r
+ {\r
+ this.b押下状態[ i ] = false;\r
+ }\r
+ base.On活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.txRGB = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlay RGB buttons.png" ) );\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.txRGB );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CAct演奏スクロール速度 : CActivity\r
+ {\r
+ // プロパティ\r
+\r
+ public STDGBVALUE<double> db現在の譜面スクロール速度;\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public CAct演奏スクロール速度()\r
+ {\r
+ base.b活性化してない = true;\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ for( int i = 0; i < 3; i++ )\r
+ {\r
+ this.db譜面スクロール速度[ i ] = this.db現在の譜面スクロール速度[ i ] = (double) CDTXMania.ConfigIni.n譜面スクロール速度[ i ];\r
+ this.n速度変更制御タイマ[ i ] = -1;\r
+ }\r
+ base.On活性化();\r
+ }\r
+ public override unsafe int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ if( base.b初めての進行描画 )\r
+ {\r
+ this.n速度変更制御タイマ.Drums = this.n速度変更制御タイマ.Guitar = this.n速度変更制御タイマ.Bass = CDTXMania.Timer.n現在時刻;\r
+ base.b初めての進行描画 = false;\r
+ }\r
+ long num = CDTXMania.Timer.n現在時刻;\r
+ for( int i = 0; i < 3; i++ )\r
+ {\r
+ double num3 = (double) CDTXMania.ConfigIni.n譜面スクロール速度[ i ];\r
+ if( num < this.n速度変更制御タイマ[ i ] )\r
+ {\r
+ this.n速度変更制御タイマ[ i ] = num;\r
+ }\r
+ while( ( num - this.n速度変更制御タイマ[ i ] ) >= 2 )\r
+ {\r
+ if( this.db譜面スクロール速度[ i ] < num3 )\r
+ {\r
+ this.db現在の譜面スクロール速度[ i ] += 0.012;\r
+\r
+ if( this.db現在の譜面スクロール速度[ i ] > num3 )\r
+ {\r
+ this.db現在の譜面スクロール速度[ i ] = num3;\r
+ this.db譜面スクロール速度[ i ] = num3;\r
+ }\r
+ }\r
+ else if( this.db譜面スクロール速度[ i ] > num3 )\r
+ {\r
+ this.db現在の譜面スクロール速度[ i ] -= 0.012;\r
+\r
+ if( this.db現在の譜面スクロール速度[ i ] < num3 )\r
+ {\r
+ this.db現在の譜面スクロール速度[ i ] = num3;\r
+ this.db譜面スクロール速度[ i ] = num3;\r
+ }\r
+ }\r
+ //this.db現在の譜面スクロール速度[ i ] = this.db譜面スクロール速度[ i ];\r
+ this.n速度変更制御タイマ[ i ] += 2;\r
+ }\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private STDGBVALUE<double> db譜面スクロール速度;\r
+ private STDGBVALUE<long> n速度変更制御タイマ;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CAct演奏スコア共通 : CActivity\r
+ {\r
+ // プロパティ\r
+\r
+ protected STDGBVALUE<long> nスコアの増分;\r
+ protected STDGBVALUE<long> n現在の本当のスコア;\r
+ protected STDGBVALUE<long> n現在表示中のスコア;\r
+ protected long n進行用タイマ;\r
+ protected CTexture txScore;\r
+\r
+ \r
+ // コンストラクタ\r
+\r
+ public CAct演奏スコア共通()\r
+ {\r
+ base.b活性化してない = true;\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ public long Get( E楽器パート part )\r
+ {\r
+ return this.n現在の本当のスコア[ (int) part ];\r
+ }\r
+ public void Set( E楽器パート part, long nScore )\r
+ {\r
+ int num = (int) part;\r
+ if( this.n現在の本当のスコア[ num ] != nScore )\r
+ {\r
+ this.n現在の本当のスコア[ num ] = nScore;\r
+ this.nスコアの増分[ num ] = (long) ( ( (double) ( this.n現在の本当のスコア[ num ] - this.n現在表示中のスコア[ num ] ) ) / 20.0 );\r
+ if( this.nスコアの増分[ num ] < 1L )\r
+ {\r
+ this.nスコアの増分[ num ] = 1L;\r
+ }\r
+ }\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ this.n進行用タイマ = -1;\r
+ for( int i = 0; i < 3; i++ )\r
+ {\r
+ this.n現在表示中のスコア[ i ] = 0L;\r
+ this.n現在の本当のスコア[ i ] = 0L;\r
+ this.nスコアの増分[ i ] = 0L;\r
+ }\r
+ base.On活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.txScore = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlay score numbers.png" ) );\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.txScore );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Drawing;\r
+using System.IO;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CAct演奏ステージ失敗 : CActivity\r
+ {\r
+ // コンストラクタ\r
+\r
+ public CAct演奏ステージ失敗()\r
+ {\r
+ base.b活性化してない = true;\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ public void Start()\r
+ {\r
+ this.ct進行 = new CCounter( 0, 0x3e8, 2, CDTXMania.Timer );\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ this.sd効果音 = null;\r
+ this.b効果音再生済み = false;\r
+ this.ct進行 = new CCounter();\r
+ base.On活性化();\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ this.ct進行 = null;\r
+ if( this.sd効果音 != null )\r
+ {\r
+ CDTXMania.Sound管理.tサウンドを破棄する( this.sd効果音 );\r
+ this.sd効果音 = null;\r
+ }\r
+ base.On非活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.txStageFailed = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlay stage failed.jpg" ) );\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.txStageFailed );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( base.b活性化してない )\r
+ {\r
+ return 0;\r
+ }\r
+ if( ( this.ct進行 == null ) || this.ct進行.b停止中 )\r
+ {\r
+ return 0;\r
+ }\r
+ this.ct進行.t進行();\r
+ if( this.ct進行.n現在の値 < 100 )\r
+ {\r
+ int x = (int) ( 320.0 * Math.Cos( ( 1.5707963267948966 * this.ct進行.n現在の値 ) / 100.0 ) );\r
+ if( ( x != 320 ) && ( this.txStageFailed != null ) )\r
+ {\r
+ this.txStageFailed.t2D描画( CDTXMania.app.Device, 0, 0, new Rectangle( x, 0, 320 - x, 480 ) );\r
+ this.txStageFailed.t2D描画( CDTXMania.app.Device, 320 + x, 0, new Rectangle( 320, 0, 320 - x, 480 ) );\r
+ }\r
+ }\r
+ else\r
+ {\r
+ if( this.txStageFailed != null )\r
+ {\r
+ this.txStageFailed.t2D描画( CDTXMania.app.Device, 0, 0 );\r
+ }\r
+ if( this.ct進行.n現在の値 <= 250 )\r
+ {\r
+ int num2 = CDTXMania.Random.Next( 5 ) - 2;\r
+ int y = CDTXMania.Random.Next( 5 ) - 2;\r
+ if( this.txStageFailed != null )\r
+ {\r
+ this.txStageFailed.t2D描画( CDTXMania.app.Device, num2, y );\r
+ }\r
+ }\r
+ if( !this.b効果音再生済み )\r
+ {\r
+ if( ( ( CDTXMania.DTX.SOUND_STAGEFAILED != null ) && ( CDTXMania.DTX.SOUND_STAGEFAILED.Length > 0 ) ) && File.Exists( CDTXMania.DTX.strフォルダ名 + CDTXMania.DTX.SOUND_STAGEFAILED ) )\r
+ {\r
+ try\r
+ {\r
+ if( this.sd効果音 != null )\r
+ {\r
+ CDTXMania.Sound管理.tサウンドを破棄する( this.sd効果音 );\r
+ this.sd効果音 = null;\r
+ }\r
+ this.sd効果音 = CDTXMania.Sound管理.tサウンドを生成する( CDTXMania.DTX.strフォルダ名 + CDTXMania.DTX.SOUND_STAGEFAILED );\r
+ this.sd効果音.t再生を開始する();\r
+ }\r
+ catch\r
+ {\r
+ }\r
+ }\r
+ else\r
+ {\r
+ CDTXMania.Skin.soundSTAGEFAILED音.t再生する();\r
+ }\r
+ this.b効果音再生済み = true;\r
+ }\r
+ }\r
+ if( !this.ct進行.b終了値に達した )\r
+ {\r
+ return 0;\r
+ }\r
+ return 1;\r
+ }\r
+ \r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private bool b効果音再生済み;\r
+ private CCounter ct進行;\r
+ private CSound sd効果音;\r
+ private CTexture txStageFailed;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Drawing;\r
+using SlimDX;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CAct演奏チップファイアGB : CActivity\r
+ {\r
+ // コンストラクタ\r
+\r
+ public CAct演奏チップファイアGB()\r
+ {\r
+ base.b活性化してない = true;\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ public virtual void Start( int nLane, int n中央X, int n中央Y )\r
+ {\r
+ if( ( nLane >= 0 ) || ( nLane <= 5 ) )\r
+ {\r
+ this.pt中央位置[ nLane ].X = n中央X;\r
+ this.pt中央位置[ nLane ].Y = n中央Y;\r
+ this.ct進行[ nLane ].t開始( 0, 0x38, 4, CDTXMania.Timer );\r
+ }\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ for( int i = 0; i < 6; i++ )\r
+ {\r
+ this.pt中央位置[ i ] = new Point( 0, 0 );\r
+ this.ct進行[ i ] = new CCounter();\r
+ }\r
+ base.On活性化();\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ for( int i = 0; i < 6; i++ )\r
+ {\r
+ this.ct進行[ i ] = null;\r
+ }\r
+ base.On非活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.tx火花[ 0 ] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlay chip fire red.png" ) );\r
+ if( this.tx火花[ 0 ] != null )\r
+ {\r
+ this.tx火花[ 0 ].b加算合成 = true;\r
+ }\r
+ this.tx火花[ 1 ] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlay chip fire green.png" ) );\r
+ if( this.tx火花[ 1 ] != null )\r
+ {\r
+ this.tx火花[ 1 ].b加算合成 = true;\r
+ }\r
+ this.tx火花[ 2 ] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlay chip fire blue.png" ) );\r
+ if( this.tx火花[ 2 ] != null )\r
+ {\r
+ this.tx火花[ 2 ].b加算合成 = true;\r
+ }\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.tx火花[ 0 ] );\r
+ CDTXMania.tテクスチャの解放( ref this.tx火花[ 1 ] );\r
+ CDTXMania.tテクスチャの解放( ref this.tx火花[ 2 ] );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ for( int i = 0; i < 6; i++ )\r
+ {\r
+ this.ct進行[ i ].t進行();\r
+ if( this.ct進行[ i ].b終了値に達した )\r
+ {\r
+ this.ct進行[ i ].t停止();\r
+ }\r
+ }\r
+ for( int j = 0; j < 6; j++ )\r
+ {\r
+ if( ( this.ct進行[ j ].n現在の経過時間ms != -1 ) && ( this.tx火花[ j % 3 ] != null ) )\r
+ {\r
+ float x = (float) ( 3.0 * Math.Cos( ( 3.1415926535897931 * ( 90.0 - ( 90.0 * ( ( (double) this.ct進行[ j ].n現在の値 ) / 56.0 ) ) ) ) / 180.0 ) );\r
+ int num4 = this.pt中央位置[ j ].X - ( (int) ( ( this.tx火花[ j % 3 ].sz画像サイズ.Width * x ) / 2f ) );\r
+ int y = this.pt中央位置[ j ].Y - ( (int) ( ( this.tx火花[ j % 3 ].sz画像サイズ.Height * x ) / 2f ) );\r
+ this.tx火花[ j % 3 ].n透明度 = ( this.ct進行[ j ].n現在の値 < 0x1c ) ? 0xff : ( 0xff - ( (int) ( 255.0 * Math.Cos( ( 3.1415926535897931 * ( 90.0 - ( 90.0 * ( ( (double) ( this.ct進行[ j ].n現在の値 - 0x1c ) ) / 28.0 ) ) ) ) / 180.0 ) ) ) );\r
+ this.tx火花[ j % 3 ].vc拡大縮小倍率 = new Vector3( x, x, 1f );\r
+ this.tx火花[ j % 3 ].t2D描画( CDTXMania.app.Device, num4, y );\r
+ }\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private CCounter[] ct進行 = new CCounter[ 6 ];\r
+ private Point[] pt中央位置 = new Point[ 6 ];\r
+ private CTexture[] tx火花 = new CTexture[ 3 ];\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Drawing;\r
+using System.Diagnostics;\r
+using SlimDX;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CAct演奏パネル文字列 : CActivity\r
+ {\r
+ // コンストラクタ\r
+\r
+ public CAct演奏パネル文字列()\r
+ {\r
+ base.b活性化してない = true;\r
+ this.strパネル文字列 = "";\r
+ }\r
+ \r
+ \r
+ // メソッド\r
+\r
+ public void SetPanelString( string str )\r
+ {\r
+ this.strパネル文字列 = str;\r
+ if( base.b活性化してる )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.txPanel );\r
+ if( ( this.strパネル文字列 != null ) && ( this.strパネル文字列.Length > 0 ) )\r
+ {\r
+ Bitmap image = new Bitmap( 1, 1 );\r
+ Graphics graphics = Graphics.FromImage( image );\r
+ graphics.PageUnit = GraphicsUnit.Pixel;\r
+ this.n文字列の長さdot = (int) graphics.MeasureString( this.strパネル文字列, this.ft表示用フォント ).Width;\r
+ graphics.Dispose();\r
+ try\r
+ {\r
+ Bitmap bitmap2 = new Bitmap( this.n文字列の長さdot, (int) this.ft表示用フォント.Size );\r
+ graphics = Graphics.FromImage( bitmap2 );\r
+ graphics.DrawString( this.strパネル文字列, this.ft表示用フォント, Brushes.Red, (float) 0f, (float) 0f );\r
+ graphics.Dispose();\r
+ this.txPanel = new CTexture( CDTXMania.app.Device, bitmap2, CDTXMania.TextureFormat );\r
+ this.txPanel.vc拡大縮小倍率 = new Vector3( 0.5f, 0.5f, 1f );\r
+ bitmap2.Dispose();\r
+ }\r
+ catch( CTextureCreateFailedException )\r
+ {\r
+ Trace.TraceError( "パネル文字列テクスチャの生成に失敗しました。" );\r
+ this.txPanel = null;\r
+ }\r
+ this.ct進行用 = new CCounter( -278, this.n文字列の長さdot / 2, 8, CDTXMania.Timer );\r
+ }\r
+ }\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ this.ft表示用フォント = new Font( "MS PGothic", 48f, FontStyle.Italic | FontStyle.Bold, GraphicsUnit.Pixel );\r
+ this.n文字列の長さdot = 0;\r
+ this.txPanel = null;\r
+ this.ct進行用 = new CCounter();\r
+ base.On活性化();\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ if( this.ft表示用フォント != null )\r
+ {\r
+ this.ft表示用フォント.Dispose();\r
+ this.ft表示用フォント = null;\r
+ }\r
+ CDTXMania.tテクスチャの解放( ref this.txPanel );\r
+ this.ct進行用 = null;\r
+ base.On非活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.SetPanelString( this.strパネル文字列 );\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.txPanel );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ throw new InvalidOperationException( "t進行描画(x,y)のほうを使用してください。" );\r
+ }\r
+ public int t進行描画( int x, int y )\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.ct進行用.t進行Loop();\r
+ if( ( string.IsNullOrEmpty( this.strパネル文字列 ) || ( this.txPanel == null ) ) || ( this.ct進行用 == null ) )\r
+ {\r
+ return 0;\r
+ }\r
+ float num = this.txPanel.vc拡大縮小倍率.X;\r
+ Rectangle rectangle = new Rectangle( (int) ( ( (float) this.ct進行用.n現在の値 ) / num ), 0, (int) ( 278f / num ), (int) this.ft表示用フォント.Size );\r
+ if( rectangle.X < 0 )\r
+ {\r
+ x -= (int) ( rectangle.X * num );\r
+ rectangle.Width += rectangle.X;\r
+ rectangle.X = 0;\r
+ }\r
+ if( rectangle.Right >= this.n文字列の長さdot )\r
+ {\r
+ rectangle.Width -= rectangle.Right - this.n文字列の長さdot;\r
+ }\r
+ this.txPanel.t2D描画( CDTXMania.app.Device, x, y, rectangle );\r
+ }\r
+ return 0;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private CCounter ct進行用;\r
+ private Font ft表示用フォント;\r
+ private int n文字列の長さdot;\r
+ private string strパネル文字列;\r
+ private CTexture txPanel;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CAct演奏レーンフラッシュGB共通 : CActivity\r
+ {\r
+ // プロパティ\r
+\r
+ protected CCounter[] ct進行 = new CCounter[ 6 ];\r
+ protected CTexture[] txFlush = new CTexture[ 6 ];\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public CAct演奏レーンフラッシュGB共通()\r
+ {\r
+ base.b活性化してない = true;\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ public void Start( int nLane )\r
+ {\r
+ if( ( nLane < 0 ) || ( nLane > 6 ) )\r
+ {\r
+ throw new IndexOutOfRangeException( "有効範囲は 0~6 です。" );\r
+ }\r
+ this.ct進行[ nLane ] = new CCounter( 0, 100, 1, CDTXMania.Timer );\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ for( int i = 0; i < 6; i++ )\r
+ {\r
+ this.ct進行[ i ] = new CCounter();\r
+ }\r
+ base.On活性化();\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ for( int i = 0; i < 6; i++ )\r
+ {\r
+ this.ct進行[ i ] = null;\r
+ }\r
+ base.On非活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.txFlush[ 0 ] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlay lane flush red.png" ) );\r
+ this.txFlush[ 1 ] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlay lane flush green.png" ) );\r
+ this.txFlush[ 2 ] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlay lane flush blue.png" ) );\r
+ this.txFlush[ 3 ] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlay lane flush red reverse.png" ) );\r
+ this.txFlush[ 4 ] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlay lane flush green reverse.png" ) );\r
+ this.txFlush[ 5 ] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlay lane flush blue reverse.png" ) );\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ for( int i = 0; i < 6; i++ )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.txFlush[ i ] );\r
+ }\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using System.Drawing;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CAct演奏判定文字列共通 : CActivity\r
+ {\r
+ // プロパティ\r
+\r
+ protected STSTATUS[] st状態 = new STSTATUS[ 12 ];\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ protected struct STSTATUS\r
+ {\r
+ public CCounter ct進行;\r
+ public E判定 judge;\r
+ public float fX方向拡大率;\r
+ public float fY方向拡大率;\r
+ public int n相対X座標;\r
+ public int n相対Y座標;\r
+ public int n透明度;\r
+ }\r
+\r
+ protected readonly ST判定文字列[] st判定文字列;\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ protected struct ST判定文字列\r
+ {\r
+ public int n画像番号;\r
+ public Rectangle rc;\r
+ }\r
+ \r
+ protected CTexture[] tx判定文字列 = new CTexture[ 3 ];\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public CAct演奏判定文字列共通()\r
+ {\r
+ ST判定文字列[] st判定文字列Array = new ST判定文字列[ 7 ];\r
+ ST判定文字列 st判定文字列 = new ST判定文字列();\r
+ st判定文字列.n画像番号 = 0;\r
+ st判定文字列.rc = new Rectangle( 0, 0, 0x80, 0x2a );\r
+ st判定文字列Array[ 0 ] = st判定文字列;\r
+ ST判定文字列 st判定文字列2 = new ST判定文字列();\r
+ st判定文字列2.n画像番号 = 0;\r
+ st判定文字列2.rc = new Rectangle( 0, 0x2b, 0x80, 0x2a );\r
+ st判定文字列Array[ 1 ] = st判定文字列2;\r
+ ST判定文字列 st判定文字列3 = new ST判定文字列();\r
+ st判定文字列3.n画像番号 = 0;\r
+ st判定文字列3.rc = new Rectangle( 0, 0x56, 0x80, 0x2a );\r
+ st判定文字列Array[ 2 ] = st判定文字列3;\r
+ ST判定文字列 st判定文字列4 = new ST判定文字列();\r
+ st判定文字列4.n画像番号 = 1;\r
+ st判定文字列4.rc = new Rectangle( 0, 0, 0x80, 0x2a );\r
+ st判定文字列Array[ 3 ] = st判定文字列4;\r
+ ST判定文字列 st判定文字列5 = new ST判定文字列();\r
+ st判定文字列5.n画像番号 = 1;\r
+ st判定文字列5.rc = new Rectangle( 0, 0x2b, 0x80, 0x2a );\r
+ st判定文字列Array[ 4 ] = st判定文字列5;\r
+ ST判定文字列 st判定文字列6 = new ST判定文字列();\r
+ st判定文字列6.n画像番号 = 1;\r
+ st判定文字列6.rc = new Rectangle( 0, 0x56, 0x80, 0x2a );\r
+ st判定文字列Array[ 5 ] = st判定文字列6;\r
+ ST判定文字列 st判定文字列7 = new ST判定文字列();\r
+ st判定文字列7.n画像番号 = 2;\r
+ st判定文字列7.rc = new Rectangle( 0, 0, 0x80, 0x2a );\r
+ st判定文字列Array[ 6 ] = st判定文字列7;\r
+ this.st判定文字列 = st判定文字列Array;\r
+ base.b活性化してない = true;\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ public virtual void Start( int nLane, E判定 judge )\r
+ {\r
+ if( ( nLane < 0 ) || ( nLane > 11 ) )\r
+ {\r
+ throw new IndexOutOfRangeException( "有効範囲は 0~11 です。" );\r
+ }\r
+ if( ( ( nLane >= 8 ) || ( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Drums ) != E判定文字表示位置.表示OFF ) ) && ( ( ( nLane != 10 ) || ( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Guitar ) != E判定文字表示位置.表示OFF ) ) && ( ( nLane != 11 ) || ( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Bass ) != E判定文字表示位置.表示OFF ) ) ) )\r
+ {\r
+ this.st状態[ nLane ].ct進行 = new CCounter( 0, 300, 1, CDTXMania.Timer );\r
+ this.st状態[ nLane ].judge = judge;\r
+ this.st状態[ nLane ].fX方向拡大率 = 1f;\r
+ this.st状態[ nLane ].fY方向拡大率 = 1f;\r
+ this.st状態[ nLane ].n相対X座標 = 0;\r
+ this.st状態[ nLane ].n相対Y座標 = 0;\r
+ this.st状態[ nLane ].n透明度 = 0xff;\r
+ }\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ for( int i = 0; i < 12; i++ )\r
+ {\r
+ this.st状態[ i ].ct進行 = new CCounter();\r
+ }\r
+ base.On活性化();\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ for( int i = 0; i < 12; i++ )\r
+ {\r
+ this.st状態[ i ].ct進行 = null;\r
+ }\r
+ base.On非活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.tx判定文字列[ 0 ] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlay judge strings 1.png" ) );\r
+ this.tx判定文字列[ 1 ] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlay judge strings 2.png" ) );\r
+ this.tx判定文字列[ 2 ] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlay judge strings 3.png" ) );\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.tx判定文字列[ 0 ] );\r
+ CDTXMania.tテクスチャの解放( ref this.tx判定文字列[ 1 ] );\r
+ CDTXMania.tテクスチャの解放( ref this.tx判定文字列[ 2 ] );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CAct演奏演奏情報 : CActivity\r
+ {\r
+ // プロパティ\r
+\r
+ public double dbBPM;\r
+ public int n小節番号;\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public CAct演奏演奏情報()\r
+ {\r
+ base.b活性化してない = true;\r
+ }\r
+\r
+ \r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ this.n小節番号 = 0;\r
+ this.dbBPM = CDTXMania.DTX.BASEBPM + CDTXMania.DTX.BPM;\r
+ base.On活性化();\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ throw new InvalidOperationException( "t進行描画(int x, int y) のほうを使用してください。" );\r
+ }\r
+ public void t進行描画( int x, int y )\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ y += 0x153;\r
+ CDTXMania.act文字コンソール.tPrint( x, y, C文字コンソール.Eフォント種別.白, string.Format( "BGMAdjust: {0:####0} ms", CDTXMania.DTX.nBGMAdjust ) );\r
+ y -= 0x10;\r
+ int num = ( CDTXMania.DTX.listChip.Count > 0 ) ? CDTXMania.DTX.listChip[ CDTXMania.DTX.listChip.Count - 1 ].n発声時刻ms : 0;\r
+ string str = "Time: " + ( ( ( (double) CDTXMania.Timer.n現在時刻 ) / 1000.0 ) ).ToString( "####0.00" ) + " / " + ( ( ( (double) num ) / 1000.0 ) ).ToString( "####0.00" );\r
+ CDTXMania.act文字コンソール.tPrint( x, y, C文字コンソール.Eフォント種別.白, str );\r
+ y -= 0x10;\r
+ CDTXMania.act文字コンソール.tPrint( x, y, C文字コンソール.Eフォント種別.白, string.Format( "Part: {0:####0}", this.n小節番号 ) );\r
+ y -= 0x10;\r
+ CDTXMania.act文字コンソール.tPrint( x, y, C文字コンソール.Eフォント種別.白, string.Format( "BPM: {0:####0.00}", this.dbBPM ) );\r
+ y -= 0x10;\r
+ CDTXMania.act文字コンソール.tPrint( x, y, C文字コンソール.Eフォント種別.白, string.Format( "Frame: {0:####0} fps", CDTXMania.FPS.n現在のFPS ) );\r
+ y -= 0x10;\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Drawing;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CAct演奏GuitarRGB : CAct演奏RGB共通\r
+ {\r
+ // コンストラクタ\r
+\r
+ public CAct演奏GuitarRGB()\r
+ {\r
+ base.b活性化してない = true;\r
+ }\r
+\r
+\r
+ // CActivity 実装(共通クラスからの差分のみ)\r
+\r
+ public override int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ if( !CDTXMania.ConfigIni.bGuitar有効 )\r
+ {\r
+ return 0;\r
+ }\r
+ if( CDTXMania.DTX.bチップがある.Guitar )\r
+ {\r
+ for( int j = 0; j < 3; j++ )\r
+ {\r
+ int index = CDTXMania.ConfigIni.bLeft.Guitar ? ( 2 - j ) : j;\r
+ Rectangle rectangle = new Rectangle( index * 0x18, 0, 0x18, 0x20 );\r
+ if( base.b押下状態[ index ] )\r
+ {\r
+ rectangle.Y += 0x20;\r
+ }\r
+ if( base.txRGB != null )\r
+ {\r
+ base.txRGB.t2D描画( CDTXMania.app.Device, 0x1f + ( j * 0x24 ), 3, rectangle );\r
+ }\r
+ }\r
+ }\r
+ if( CDTXMania.DTX.bチップがある.Bass )\r
+ {\r
+ for( int k = 0; k < 3; k++ )\r
+ {\r
+ int num4 = CDTXMania.ConfigIni.bLeft.Bass ? ( 2 - k ) : k;\r
+ Rectangle rectangle2 = new Rectangle( num4 * 0x18, 0, 0x18, 0x20 );\r
+ if( base.b押下状態[ num4 + 3 ] )\r
+ {\r
+ rectangle2.Y += 0x20;\r
+ }\r
+ if( base.txRGB != null )\r
+ {\r
+ base.txRGB.t2D描画( CDTXMania.app.Device, 0x1e5 + ( k * 0x24 ), 3, rectangle2 );\r
+ }\r
+ }\r
+ }\r
+ for( int i = 0; i < 6; i++ )\r
+ {\r
+ base.b押下状態[ i ] = false;\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Drawing;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CAct演奏GuitarWailingBonus : CActivity\r
+ {\r
+ // メソッド\r
+\r
+ public CAct演奏GuitarWailingBonus()\r
+ {\r
+ base.b活性化してない = true;\r
+ }\r
+ public void Start( E楽器パート part )\r
+ {\r
+ this.Start( part, null );\r
+ }\r
+ public void Start( E楽器パート part, CDTX.CChip r歓声Chip )\r
+ {\r
+ if( part != E楽器パート.DRUMS )\r
+ {\r
+ for( int i = 0; i < 4; i++ )\r
+ {\r
+ if( ( this.ct進行用[ (int) part, i ] == null ) || this.ct進行用[ (int) part, i ].b停止中 )\r
+ {\r
+ this.ct進行用[ (int) part, i ] = new CCounter( 0, 300, 2, CDTXMania.Timer );\r
+ if( CDTXMania.ConfigIni.b歓声を発声する )\r
+ {\r
+ if( r歓声Chip != null )\r
+ {\r
+ CDTXMania.DTX.tチップの再生( r歓声Chip, CDTXMania.Timer.nシステム時刻, 10, CDTXMania.DTX.nモニタを考慮した音量( E楽器パート.UNKNOWN ) );\r
+ return;\r
+ }\r
+ CDTXMania.Skin.sound歓声音.n位置・次に鳴るサウンド = ( part == E楽器パート.GUITAR ) ? -50 : 50;\r
+ CDTXMania.Skin.sound歓声音.t再生する();\r
+ return;\r
+ }\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ for( int i = 0; i < 3; i++ )\r
+ {\r
+ for( int j = 0; j < 4; j++ )\r
+ {\r
+ this.ct進行用[ i, j ] = null;\r
+ }\r
+ }\r
+ base.On活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.txWailingBonus = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlay wailing bonus.png" ) );\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.txWailingBonus );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ for( int i = 0; i < 2; i++ )\r
+ {\r
+ E楽器パート e楽器パート = ( i == 0 ) ? E楽器パート.GUITAR : E楽器パート.BASS;\r
+ for( int k = 0; k < 4; k++ )\r
+ {\r
+ if( ( this.ct進行用[ (int) e楽器パート, k ] != null ) && !this.ct進行用[ (int) e楽器パート, k ].b停止中 )\r
+ {\r
+ if( this.ct進行用[ (int) e楽器パート, k ].b終了値に達した )\r
+ {\r
+ this.ct進行用[ (int) e楽器パート, k ].t停止();\r
+ }\r
+ else\r
+ {\r
+ this.ct進行用[ (int) e楽器パート, k ].t進行();\r
+ }\r
+ }\r
+ }\r
+ }\r
+ for( int j = 0; j < 2; j++ )\r
+ {\r
+ E楽器パート e楽器パート2 = ( j == 0 ) ? E楽器パート.GUITAR : E楽器パート.BASS;\r
+ for( int m = 0; m < 4; m++ )\r
+ {\r
+ if( ( this.ct進行用[ (int) e楽器パート2, m ] != null ) && !this.ct進行用[ (int) e楽器パート2, m ].b停止中 )\r
+ {\r
+ int x = ( ( e楽器パート2 == E楽器パート.GUITAR ) ? 0x1a : 480 ) + 0x71;\r
+ int num6 = 0;\r
+ int num7 = 0;\r
+ int num8 = this.ct進行用[ (int) e楽器パート2, m ].n現在の値;\r
+ if( num8 < 100 )\r
+ {\r
+ num6 = (int) ( 64.0 + ( 290.0 * Math.Cos( 1.5707963267948966 * ( ( (double) num8 ) / 100.0 ) ) ) );\r
+ }\r
+ else if( num8 < 150 )\r
+ {\r
+ num6 = (int) ( 64.0 + ( ( 150 - num8 ) * Math.Sin( ( 3.1415926535897931 * ( ( num8 - 100 ) % 0x19 ) ) / 25.0 ) ) );\r
+ }\r
+ else if( num8 < 200 )\r
+ {\r
+ num6 = 0x40;\r
+ }\r
+ else\r
+ {\r
+ num6 = (int) ( 64.0 - ( ( (double) ( 290 * ( num8 - 200 ) ) ) / 100.0 ) );\r
+ }\r
+ if( CDTXMania.ConfigIni.bReverse[ (int) e楽器パート2 ] )\r
+ {\r
+ num6 = ( 0x199 - num6 ) - 0xf4;\r
+ }\r
+ Rectangle rectangle = new Rectangle( 0, 0, 0x1a, 0x7a );\r
+ if( ( 0x199 - num6 ) < rectangle.Bottom )\r
+ {\r
+ rectangle.Height = ( 0x199 - num6 ) - rectangle.Top;\r
+ }\r
+ if( num6 < 0 )\r
+ {\r
+ rectangle.Y = -num6;\r
+ rectangle.Height -= -num6;\r
+ num7 = -num6;\r
+ }\r
+ if( ( rectangle.Top < rectangle.Bottom ) && ( this.txWailingBonus != null ) )\r
+ {\r
+ this.txWailingBonus.t2D描画( CDTXMania.app.Device, x, num6 + num7, rectangle );\r
+ }\r
+ num7 = 0;\r
+ rectangle = new Rectangle( 0x1a, 0, 0x1a, 0x7a );\r
+ if( ( 0x199 - ( num6 + 0x7a ) ) < rectangle.Bottom )\r
+ {\r
+ rectangle.Height = ( 0x199 - ( num6 + 0x7a ) ) - rectangle.Top;\r
+ }\r
+ if( ( num6 + 0x7a ) < 0 )\r
+ {\r
+ rectangle.Y = -( num6 + 0x7a );\r
+ rectangle.Height -= rectangle.Y;\r
+ num7 = -( num6 + 0x7a );\r
+ }\r
+ if( ( rectangle.Top < rectangle.Bottom ) && ( this.txWailingBonus != null ) )\r
+ {\r
+ this.txWailingBonus.t2D描画( CDTXMania.app.Device, x, ( num6 + num7 ) + 0x7a, rectangle );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+ \r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private CCounter[,] ct進行用 = new CCounter[ 3, 4 ];\r
+ private CTexture txWailingBonus;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Drawing;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CAct演奏Guitarゲージ : CActivity\r
+ {\r
+ // プロパティ\r
+\r
+ public STDGBVALUE<double> db現在のゲージ値;\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public CAct演奏Guitarゲージ()\r
+ {\r
+ base.b活性化してない = true;\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ this.db現在のゲージ値.Guitar = 0.66666666666666663;\r
+ this.db現在のゲージ値.Bass = 0.66666666666666663;\r
+ base.On活性化();\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ this.ct本体移動 = null;\r
+ this.ct本体振動 = null;\r
+ base.On非活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.txゲージ = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlayGuitar gauge.png" ) );\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.txゲージ );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ int num;\r
+ int num9;\r
+ if( base.b初めての進行描画 )\r
+ {\r
+ this.ct本体移動 = new CCounter( 0, 0x1a, 20, CDTXMania.Timer );\r
+ this.ct本体振動 = new CCounter( 0, 360, 4, CDTXMania.Timer );\r
+ base.b初めての進行描画 = false;\r
+ }\r
+ this.ct本体移動.t進行Loop();\r
+ this.ct本体振動.t進行Loop();\r
+ if( this.db現在のゲージ値.Guitar == 1.0 )\r
+ {\r
+ num = (int) ( 128.0 * this.db現在のゲージ値.Guitar );\r
+ }\r
+ else\r
+ {\r
+ num = (int) ( ( 128.0 * this.db現在のゲージ値.Guitar ) + ( 2.0 * Math.Sin( 6.2831853071795862 * ( ( (double) this.ct本体振動.n現在の値 ) / 360.0 ) ) ) );\r
+ }\r
+ if( num > 0 )\r
+ {\r
+ Rectangle rectangle;\r
+ int num2 = 0x1a - this.ct本体移動.n現在の値;\r
+ int x = 0xb2 - num2;\r
+ int num4 = num + num2;\r
+ while( num4 > 0 )\r
+ {\r
+ if( this.db現在のゲージ値.Guitar == 1.0 )\r
+ {\r
+ rectangle = new Rectangle( 0x1b, 0, 0x1b, 0x10 );\r
+ }\r
+ else\r
+ {\r
+ rectangle = new Rectangle( 0, 0, 0x1b, 0x10 );\r
+ }\r
+ if( x < 0xb2 )\r
+ {\r
+ int num5 = 0xb2 - x;\r
+ rectangle.X += num5;\r
+ rectangle.Width -= num5;\r
+ x += num5;\r
+ }\r
+ if( ( x + rectangle.Width ) > ( 0xb2 + num ) )\r
+ {\r
+ int num6 = ( x + rectangle.Width ) - ( 0xb2 + num );\r
+ rectangle.Width -= num6;\r
+ }\r
+ if( rectangle.Left >= rectangle.Right )\r
+ {\r
+ break;\r
+ }\r
+ if( this.txゲージ != null )\r
+ {\r
+ this.txゲージ.b加算合成 = false;\r
+ this.txゲージ.t2D描画( CDTXMania.app.Device, x, 8, rectangle );\r
+ }\r
+ num4 -= rectangle.Width;\r
+ x += rectangle.Width;\r
+ }\r
+ rectangle = new Rectangle( 0, 0x10, 0x40, 0x10 );\r
+ x = ( 0xb2 + num ) - 0x40;\r
+ if( x < 0xb2 )\r
+ {\r
+ int num7 = 0xb2 - x;\r
+ rectangle.X += num7;\r
+ rectangle.Width -= num7;\r
+ x += num7;\r
+ }\r
+ if( ( x + rectangle.Width ) > ( 0xb2 + num ) )\r
+ {\r
+ int num8 = ( x + rectangle.Width ) - ( 0xb2 + num );\r
+ rectangle.Width -= num8;\r
+ }\r
+ if( ( rectangle.Left < rectangle.Right ) && ( this.txゲージ != null ) )\r
+ {\r
+ this.txゲージ.b加算合成 = true;\r
+ this.txゲージ.t2D描画( CDTXMania.app.Device, x, 8, rectangle );\r
+ }\r
+ }\r
+ if( this.db現在のゲージ値.Bass == 1.0 )\r
+ {\r
+ num9 = (int) ( 128.0 * this.db現在のゲージ値.Bass );\r
+ }\r
+ else\r
+ {\r
+ num9 = (int) ( ( 128.0 * this.db現在のゲージ値.Bass ) + ( 2.0 * Math.Sin( 6.2831853071795862 * ( ( (double) this.ct本体振動.n現在の値 ) / 360.0 ) ) ) );\r
+ }\r
+ if( num9 > 0 )\r
+ {\r
+ Rectangle rectangle2;\r
+ int num10 = this.ct本体移動.n現在の値;\r
+ int num11 = ( 0x1cf - num9 ) - num10;\r
+ int num12 = num9 + num10;\r
+ while( num12 > 0 )\r
+ {\r
+ if( this.db現在のゲージ値.Bass == 1.0 )\r
+ {\r
+ rectangle2 = new Rectangle( 10, 0x30, 0x1b, 0x10 );\r
+ }\r
+ else\r
+ {\r
+ rectangle2 = new Rectangle( 0x25, 0x30, 0x1b, 0x10 );\r
+ }\r
+ if( num11 < ( 0x1cf - num9 ) )\r
+ {\r
+ int num13 = ( 0x1cf - num9 ) - num11;\r
+ rectangle2.X += num13;\r
+ rectangle2.Width -= num13;\r
+ num11 += num13;\r
+ }\r
+ if( ( num11 + rectangle2.Width ) > 0x1cf )\r
+ {\r
+ int num14 = ( num11 + rectangle2.Width ) - 0x1cf;\r
+ rectangle2.Width -= num14;\r
+ }\r
+ if( rectangle2.Left >= rectangle2.Right )\r
+ {\r
+ break;\r
+ }\r
+ if( this.txゲージ != null )\r
+ {\r
+ this.txゲージ.b加算合成 = false;\r
+ this.txゲージ.t2D描画( CDTXMania.app.Device, num11, 8, rectangle2 );\r
+ }\r
+ num12 -= rectangle2.Width;\r
+ num11 += rectangle2.Width;\r
+ }\r
+ rectangle2 = new Rectangle( 0, 0x20, 0x40, 0x10 );\r
+ num11 = 0x1cf - num9;\r
+ if( ( num11 + rectangle2.Width ) > 0x1cf )\r
+ {\r
+ int num15 = ( num11 + rectangle2.Width ) - 0x1cf;\r
+ rectangle2.Width -= num15;\r
+ }\r
+ if( ( rectangle2.Left < rectangle2.Right ) && ( this.txゲージ != null ) )\r
+ {\r
+ this.txゲージ.b加算合成 = true;\r
+ this.txゲージ.t2D描画( CDTXMania.app.Device, num11, 8, rectangle2 );\r
+ }\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private CCounter ct本体移動;\r
+ private CCounter ct本体振動;\r
+ private CTexture txゲージ;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CAct演奏Guitarコンボ : CAct演奏Combo共通\r
+ {\r
+ // CAct演奏Combo共通 実装\r
+\r
+ protected override void tコンボ表示・ギター( int nCombo値, int nジャンプインデックス )\r
+ {\r
+ int num = 230;\r
+ int num2 = CDTXMania.ConfigIni.bReverse.Guitar ? 0x103 : 150;\r
+ if( base.txCOMBOギター != null )\r
+ {\r
+ base.txCOMBOギター.n透明度 = 0xff;\r
+ }\r
+ base.tコンボ表示・ベース( nCombo値, num, num2, nジャンプインデックス );\r
+ }\r
+ protected override void tコンボ表示・ドラム( int nCombo値, int nジャンプインデックス )\r
+ {\r
+ }\r
+ protected override void tコンボ表示・ベース( int nCombo値, int nジャンプインデックス )\r
+ {\r
+ int num = 410;\r
+ int num2 = CDTXMania.ConfigIni.bReverse.Bass ? 0x103 : 150;\r
+ if( base.txCOMBOギター != null )\r
+ {\r
+ base.txCOMBOギター.n透明度 = 0xff;\r
+ }\r
+ base.tコンボ表示・ベース( nCombo値, num, num2, nジャンプインデックス );\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Drawing;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CAct演奏Guitarスコア : CAct演奏スコア共通\r
+ {\r
+ // コンストラクタ\r
+\r
+ public CAct演奏Guitarスコア()\r
+ {\r
+ base.b活性化してない = true;\r
+ }\r
+\r
+\r
+ // CActivity 実装(共通クラスからの差分のみ)\r
+\r
+ public override unsafe int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ if( base.b初めての進行描画 )\r
+ {\r
+ base.n進行用タイマ = CDTXMania.Timer.n現在時刻;\r
+ base.b初めての進行描画 = false;\r
+ }\r
+ long num = CDTXMania.Timer.n現在時刻;\r
+ if( num < base.n進行用タイマ )\r
+ {\r
+ base.n進行用タイマ = num;\r
+ }\r
+ while( ( num - base.n進行用タイマ ) >= 10 )\r
+ {\r
+ for( int j = 0; j < 3; j++ )\r
+ {\r
+ this.n現在表示中のスコア[ j ] += this.nスコアの増分[ j ];\r
+\r
+ if( this.n現在表示中のスコア[ j ] > this.n現在の本当のスコア[ j ] )\r
+ this.n現在表示中のスコア[ j ] = this.n現在の本当のスコア[ j ];\r
+ }\r
+ base.n進行用タイマ += 10;\r
+ }\r
+ for( int i = 1; i < 3; i++ )\r
+ {\r
+ string str = this.n現在表示中のスコア[ i ].ToString( "0000000000" );\r
+ for( int k = 0; k < 10; k++ )\r
+ {\r
+ Rectangle rectangle;\r
+ char ch = str[ k ];\r
+ if( ch.Equals( ' ' ) )\r
+ {\r
+ rectangle = new Rectangle( 0, 0, 12, 0x18 );\r
+ }\r
+ else\r
+ {\r
+ int num5 = int.Parse( str.Substring( k, 1 ) );\r
+ if( num5 < 5 )\r
+ {\r
+ rectangle = new Rectangle( num5 * 12, 0, 12, 0x18 );\r
+ }\r
+ else\r
+ {\r
+ rectangle = new Rectangle( ( num5 - 5 ) * 12, 0x18, 12, 0x18 );\r
+ }\r
+ }\r
+ if( base.txScore != null )\r
+ {\r
+ base.txScore.t2D描画( CDTXMania.app.Device, this.ptSCORE[ i - 1 ].X + ( k * 12 ), this.ptSCORE[ i - 1 ].Y, rectangle );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private readonly Point[] ptSCORE = new Point[] { new Point( 0x1f, 0x1a9 ), new Point( 0x1e9, 0x1a9 ) };\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using System.Drawing;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CAct演奏Guitarステータスパネル : CActivity\r
+ {\r
+ // コンストラクタ\r
+\r
+ public CAct演奏Guitarステータスパネル()\r
+ {\r
+ STATUSPANEL[] statuspanelArray = new STATUSPANEL[ 12 ];\r
+ STATUSPANEL statuspanel = new STATUSPANEL();\r
+ statuspanel.status = 0;\r
+ statuspanel.label = "DTXMANIA";\r
+ statuspanelArray[ 0 ] = statuspanel;\r
+ STATUSPANEL statuspanel2 = new STATUSPANEL();\r
+ statuspanel2.status = 1;\r
+ statuspanel2.label = "EXTREME";\r
+ statuspanelArray[ 1 ] = statuspanel2;\r
+ STATUSPANEL statuspanel3 = new STATUSPANEL();\r
+ statuspanel3.status = 2;\r
+ statuspanel3.label = "ADVANCED";\r
+ statuspanelArray[ 2 ] = statuspanel3;\r
+ STATUSPANEL statuspanel4 = new STATUSPANEL();\r
+ statuspanel4.status = 2;\r
+ statuspanel4.label = "ADVANCE";\r
+ statuspanelArray[ 3 ] = statuspanel4;\r
+ STATUSPANEL statuspanel5 = new STATUSPANEL();\r
+ statuspanel5.status = 3;\r
+ statuspanel5.label = "BASIC";\r
+ statuspanelArray[ 4 ] = statuspanel5;\r
+ STATUSPANEL statuspanel6 = new STATUSPANEL();\r
+ statuspanel6.status = 4;\r
+ statuspanel6.label = "RAW";\r
+ statuspanelArray[ 5 ] = statuspanel6;\r
+ STATUSPANEL statuspanel7 = new STATUSPANEL();\r
+ statuspanel7.status = 5;\r
+ statuspanel7.label = "REAL";\r
+ statuspanelArray[ 6 ] = statuspanel7;\r
+ STATUSPANEL statuspanel8 = new STATUSPANEL();\r
+ statuspanel8.status = 6;\r
+ statuspanel8.label = "EASY";\r
+ statuspanelArray[ 7 ] = statuspanel8;\r
+ STATUSPANEL statuspanel9 = new STATUSPANEL();\r
+ statuspanel9.status = 7;\r
+ statuspanel9.label = "EX-REAL";\r
+ statuspanelArray[ 8 ] = statuspanel9;\r
+ STATUSPANEL statuspanel10 = new STATUSPANEL();\r
+ statuspanel10.status = 7;\r
+ statuspanel10.label = "ExREAL";\r
+ statuspanelArray[ 9 ] = statuspanel10;\r
+ STATUSPANEL statuspanel11 = new STATUSPANEL();\r
+ statuspanel11.status = 7;\r
+ statuspanel11.label = "ExpertReal";\r
+ statuspanelArray[ 10 ] = statuspanel11;\r
+ STATUSPANEL statuspanel12 = new STATUSPANEL();\r
+ statuspanel12.status = 8;\r
+ statuspanel12.label = "NORMAL";\r
+ statuspanelArray[ 11 ] = statuspanel12;\r
+ this.stパネルマップ = statuspanelArray;\r
+ base.b活性化してない = true;\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ public void tラベル名からステータスパネルを決定する( string strラベル名 )\r
+ {\r
+ if( string.IsNullOrEmpty( strラベル名 ) )\r
+ {\r
+ this.nStatus = 0;\r
+ }\r
+ else\r
+ {\r
+ foreach( STATUSPANEL statuspanel in this.stパネルマップ )\r
+ {\r
+ if( strラベル名.Equals( statuspanel.label ) )\r
+ {\r
+ this.nStatus = statuspanel.status;\r
+ return;\r
+ }\r
+ }\r
+ this.nStatus = 0;\r
+ }\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ this.nStatus = 0;\r
+ base.On活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.tx左パネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlay status panels left.png" ) );\r
+ this.tx右パネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlay status panels right.png" ) );\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.tx左パネル );\r
+ CDTXMania.tテクスチャの解放( ref this.tx右パネル );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ if( this.tx左パネル != null )\r
+ {\r
+ this.tx左パネル.t2D描画( CDTXMania.app.Device, 3, 0x143, new Rectangle( this.nStatus * 15, 0xb7, 15, 0x49 ) );\r
+ int guitar = CDTXMania.ConfigIni.n譜面スクロール速度.Guitar;\r
+ if( guitar < 0 )\r
+ {\r
+ guitar = 0;\r
+ }\r
+ if( guitar > 15 )\r
+ {\r
+ guitar = 15;\r
+ }\r
+ this.tx左パネル.t2D描画( CDTXMania.app.Device, 3, 0x35, new Rectangle( guitar * 15, 0, 15, 0xac ) );\r
+ }\r
+ if( this.tx右パネル != null )\r
+ {\r
+ this.tx右パネル.t2D描画( CDTXMania.app.Device, 0x26e, 0x143, new Rectangle( this.nStatus * 15, 0xb7, 15, 0x49 ) );\r
+ int bass = CDTXMania.ConfigIni.n譜面スクロール速度.Bass;\r
+ if( bass < 0 )\r
+ {\r
+ bass = 0;\r
+ }\r
+ if( bass > 15 )\r
+ {\r
+ bass = 15;\r
+ }\r
+ this.tx右パネル.t2D描画( CDTXMania.app.Device, 0x26e, 0x35, new Rectangle( bass * 15, 0, 15, 0xac ) );\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ private struct STATUSPANEL\r
+ {\r
+ public string label;\r
+ public int status;\r
+ }\r
+\r
+ private int nStatus;\r
+ private STATUSPANEL[] stパネルマップ;\r
+ private CTexture tx右パネル;\r
+ private CTexture tx左パネル;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Drawing;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CAct演奏Guitarチップファイア : CAct演奏チップファイアGB\r
+ {\r
+ // コンストラクタ\r
+\r
+ public CAct演奏Guitarチップファイア()\r
+ {\r
+ base.b活性化してない = true;\r
+ }\r
+ \r
+ \r
+ // メソッド\r
+\r
+ public void Start( int nLane )\r
+ {\r
+ if( ( nLane < 0 ) && ( nLane > 5 ) )\r
+ {\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ E楽器パート e楽器パート = ( nLane < 3 ) ? E楽器パート.GUITAR : E楽器パート.BASS;\r
+ int index = nLane;\r
+ if( CDTXMania.ConfigIni.bLeft[ (int) e楽器パート ] )\r
+ {\r
+ index = ( ( index / 3 ) * 3 ) + ( 2 - ( index % 3 ) );\r
+ }\r
+ int x = this.pt中央[ index ].X;\r
+ int y = this.pt中央[ index ].Y;\r
+ if( CDTXMania.ConfigIni.bReverse[ (int) e楽器パート ] )\r
+ {\r
+ y = ( nLane < 3 ) ? 0x171 : 0x171;\r
+ }\r
+ base.Start( nLane, x, y );\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private readonly Point[] pt中央 = new Point[] { new Point( 0x2a, 40 ), new Point( 0x4e, 40 ), new Point( 0x72, 40 ), new Point( 0x1f0, 40 ), new Point( 0x214, 40 ), new Point( 0x238, 40 ) };\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Drawing;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CAct演奏GuitarレーンフラッシュGB : CAct演奏レーンフラッシュGB共通\r
+ {\r
+ // コンストラクタ\r
+\r
+ public CAct演奏GuitarレーンフラッシュGB()\r
+ {\r
+ base.b活性化してない = true;\r
+ }\r
+\r
+\r
+ // CActivity 実装(共通クラスからの差分のみ)\r
+\r
+ public override int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ for( int i = 0; i < 6; i++ )\r
+ {\r
+ if( !base.ct進行[ i ].b停止中 )\r
+ {\r
+ E楽器パート e楽器パート = ( i < 3 ) ? E楽器パート.GUITAR : E楽器パート.BASS;\r
+ CTexture texture = CDTXMania.ConfigIni.bReverse[ (int) e楽器パート ] ? base.txFlush[ ( i % 3 ) + 3 ] : base.txFlush[ i % 3 ];\r
+ int num2 = CDTXMania.ConfigIni.bLeft[ (int) e楽器パート ] ? 1 : 0;\r
+ for( int j = 0; j < 3; j++ )\r
+ {\r
+ int x = ( ( ( i < 3 ) ? 0x1a : 480 ) + this.nRGBのX座標[ num2, i ] ) + ( ( 0x10 * base.ct進行[ i ].n現在の値 ) / 100 );\r
+ int y = CDTXMania.ConfigIni.bReverse[ (int) e楽器パート ] ? ( 0x37 + ( j * 0x76 ) ) : ( j * 0x76 );\r
+ if( texture != null )\r
+ {\r
+ texture.t2D描画( CDTXMania.app.Device, x, y, new Rectangle( j * 0x20, 0, ( 0x20 * ( 100 - base.ct進行[ i ].n現在の値 ) ) / 100, 0x76 ) );\r
+ }\r
+ }\r
+ base.ct進行[ i ].t進行();\r
+ if( base.ct進行[ i ].b終了値に達した )\r
+ {\r
+ base.ct進行[ i ].t停止();\r
+ }\r
+ }\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+ \r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private readonly int[,] nRGBのX座標 = new int[ , ] { { 0, 0x24, 0x48, 0, 0x24, 0x48 }, { 0x48, 0x24, 0, 0x48, 0x24, 0 } };\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using SlimDX;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CAct演奏Guitar判定文字列 : CAct演奏判定文字列共通\r
+ {\r
+ // コンストラクタ\r
+\r
+ public CAct演奏Guitar判定文字列()\r
+ {\r
+ STレーンサイズ[] stレーンサイズArray = new STレーンサイズ[ 12 ];\r
+ STレーンサイズ stレーンサイズ = new STレーンサイズ();\r
+ stレーンサイズ.x = 0x24;\r
+ stレーンサイズ.w = 0x24;\r
+ stレーンサイズArray[ 0 ] = stレーンサイズ;\r
+ STレーンサイズ stレーンサイズ2 = new STレーンサイズ();\r
+ stレーンサイズ2.x = 0x4d;\r
+ stレーンサイズ2.w = 30;\r
+ stレーンサイズArray[ 1 ] = stレーンサイズ2;\r
+ STレーンサイズ stレーンサイズ3 = new STレーンサイズ();\r
+ stレーンサイズ3.x = 0x6f;\r
+ stレーンサイズ3.w = 30;\r
+ stレーンサイズArray[ 2 ] = stレーンサイズ3;\r
+ STレーンサイズ stレーンサイズ4 = new STレーンサイズ();\r
+ stレーンサイズ4.x = 0x92;\r
+ stレーンサイズ4.w = 0x2a;\r
+ stレーンサイズArray[ 3 ] = stレーンサイズ4;\r
+ STレーンサイズ stレーンサイズ5 = new STレーンサイズ();\r
+ stレーンサイズ5.x = 0xc1;\r
+ stレーンサイズ5.w = 30;\r
+ stレーンサイズArray[ 4 ] = stレーンサイズ5;\r
+ STレーンサイズ stレーンサイズ6 = new STレーンサイズ();\r
+ stレーンサイズ6.x = 0xe3;\r
+ stレーンサイズ6.w = 30;\r
+ stレーンサイズArray[ 5 ] = stレーンサイズ6;\r
+ STレーンサイズ stレーンサイズ7 = new STレーンサイズ();\r
+ stレーンサイズ7.x = 0x105;\r
+ stレーンサイズ7.w = 30;\r
+ stレーンサイズArray[ 6 ] = stレーンサイズ7;\r
+ STレーンサイズ stレーンサイズ8 = new STレーンサイズ();\r
+ stレーンサイズ8.x = 0x127;\r
+ stレーンサイズ8.w = 0x24;\r
+ stレーンサイズArray[ 7 ] = stレーンサイズ8;\r
+ STレーンサイズ stレーンサイズ9 = new STレーンサイズ();\r
+ stレーンサイズ9.x = 0;\r
+ stレーンサイズ9.w = 0;\r
+ stレーンサイズArray[ 8 ] = stレーンサイズ9;\r
+ STレーンサイズ stレーンサイズ10 = new STレーンサイズ();\r
+ stレーンサイズ10.x = 0;\r
+ stレーンサイズ10.w = 0;\r
+ stレーンサイズArray[ 9 ] = stレーンサイズ10;\r
+ STレーンサイズ stレーンサイズ11 = new STレーンサイズ();\r
+ stレーンサイズ11.x = 0x1a;\r
+ stレーンサイズ11.w = 0x6f;\r
+ stレーンサイズArray[ 10 ] = stレーンサイズ11;\r
+ STレーンサイズ stレーンサイズ12 = new STレーンサイズ();\r
+ stレーンサイズ12.x = 480;\r
+ stレーンサイズ12.w = 0x6f;\r
+ stレーンサイズArray[ 11 ] = stレーンサイズ12;\r
+ this.stレーンサイズ = stレーンサイズArray;\r
+ base.b活性化してない = true;\r
+ }\r
+\r
+\r
+ // CActivity 実装(共通クラスからの差分のみ)\r
+\r
+ public override int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ for( int i = 0; i < 12; i++ )\r
+ {\r
+ if( !base.st状態[ i ].ct進行.b停止中 )\r
+ {\r
+ base.st状態[ i ].ct進行.t進行();\r
+ if( base.st状態[ i ].ct進行.b終了値に達した )\r
+ {\r
+ base.st状態[ i ].ct進行.t停止();\r
+ }\r
+ int num2 = base.st状態[ i ].ct進行.n現在の値;\r
+ if( ( base.st状態[ i ].judge != E判定.Miss ) && ( base.st状態[ i ].judge != E判定.Bad ) )\r
+ {\r
+ if( num2 < 50 )\r
+ {\r
+ base.st状態[ i ].fX方向拡大率 = 1f + ( 1f * ( 1f - ( ( (float) num2 ) / 50f ) ) );\r
+ base.st状態[ i ].fY方向拡大率 = ( (float) num2 ) / 50f;\r
+ base.st状態[ i ].n相対X座標 = 0;\r
+ base.st状態[ i ].n相対Y座標 = 0;\r
+ base.st状態[ i ].n透明度 = 0xff;\r
+ }\r
+ else if( num2 < 130 )\r
+ {\r
+ base.st状態[ i ].fX方向拡大率 = 1f;\r
+ base.st状態[ i ].fY方向拡大率 = 1f;\r
+ base.st状態[ i ].n相対X座標 = 0;\r
+ base.st状態[ i ].n相対Y座標 = ( ( num2 % 6 ) == 0 ) ? ( CDTXMania.Random.Next( 6 ) - 3 ) : base.st状態[ i ].n相対Y座標;\r
+ base.st状態[ i ].n透明度 = 0xff;\r
+ }\r
+ else if( num2 >= 240 )\r
+ {\r
+ base.st状態[ i ].fX方向拡大率 = 1f;\r
+ base.st状態[ i ].fY方向拡大率 = 1f - ( ( 1f * ( num2 - 240 ) ) / 60f );\r
+ base.st状態[ i ].n相対X座標 = 0;\r
+ base.st状態[ i ].n相対Y座標 = 0;\r
+ base.st状態[ i ].n透明度 = 0xff;\r
+ }\r
+ else\r
+ {\r
+ base.st状態[ i ].fX方向拡大率 = 1f;\r
+ base.st状態[ i ].fY方向拡大率 = 1f;\r
+ base.st状態[ i ].n相対X座標 = 0;\r
+ base.st状態[ i ].n相対Y座標 = 0;\r
+ base.st状態[ i ].n透明度 = 0xff;\r
+ }\r
+ }\r
+ else if( num2 < 50 )\r
+ {\r
+ base.st状態[ i ].fX方向拡大率 = 1f;\r
+ base.st状態[ i ].fY方向拡大率 = ( (float) num2 ) / 50f;\r
+ base.st状態[ i ].n相対X座標 = 0;\r
+ base.st状態[ i ].n相対Y座標 = 0;\r
+ base.st状態[ i ].n透明度 = 0xff;\r
+ }\r
+ else if( num2 >= 200 )\r
+ {\r
+ base.st状態[ i ].fX方向拡大率 = 1f - ( ( (float) ( num2 - 200 ) ) / 100f );\r
+ base.st状態[ i ].fY方向拡大率 = 1f - ( ( (float) ( num2 - 200 ) ) / 100f );\r
+ base.st状態[ i ].n相対X座標 = 0;\r
+ base.st状態[ i ].n相対Y座標 = 0;\r
+ base.st状態[ i ].n透明度 = 0xff;\r
+ }\r
+ else\r
+ {\r
+ base.st状態[ i ].fX方向拡大率 = 1f;\r
+ base.st状態[ i ].fY方向拡大率 = 1f;\r
+ base.st状態[ i ].n相対X座標 = 0;\r
+ base.st状態[ i ].n相対Y座標 = 0;\r
+ base.st状態[ i ].n透明度 = 0xff;\r
+ }\r
+ }\r
+ }\r
+ for( int j = 0; j < 12; j++ )\r
+ {\r
+ if( !base.st状態[ j ].ct進行.b停止中 )\r
+ {\r
+ int index = base.st判定文字列[ (int) base.st状態[ j ].judge ].n画像番号;\r
+ int num5 = 0;\r
+ int num6 = 0;\r
+ if( j >= 8 )\r
+ {\r
+ if( j == 11 )\r
+ {\r
+ if( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Bass ) == E判定文字表示位置.表示OFF )\r
+ {\r
+ goto Label_06B7;\r
+ }\r
+ num5 = ( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Bass ) == E判定文字表示位置.レーン上 ) ? this.stレーンサイズ[ j ].x : 0x163;\r
+ num6 = CDTXMania.ConfigIni.bReverse.Bass ? 0x12b : 190;\r
+ }\r
+ else if( j == 10 )\r
+ {\r
+ if( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Guitar ) == E判定文字表示位置.表示OFF )\r
+ {\r
+ goto Label_06B7;\r
+ }\r
+ num5 = ( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Guitar ) == E判定文字表示位置.レーン上 ) ? this.stレーンサイズ[ j ].x : 0xaf;\r
+ num6 = CDTXMania.ConfigIni.bReverse.Guitar ? 0x12b : 190;\r
+ }\r
+ int x = ( ( num5 + base.st状態[ j ].n相対X座標 ) + ( this.stレーンサイズ[ j ].w / 2 ) ) - ( (int) ( ( ( 128f * base.st状態[ j ].fX方向拡大率 ) * 0.8 ) / 2.0 ) );\r
+ int y = ( num6 + base.st状態[ j ].n相対Y座標 ) - ( (int) ( ( ( 43f * base.st状態[ j ].fY方向拡大率 ) * 0.8 ) / 2.0 ) );\r
+ if( base.tx判定文字列[ index ] != null )\r
+ {\r
+ base.tx判定文字列[ index ].n透明度 = base.st状態[ j ].n透明度;\r
+ base.tx判定文字列[ index ].vc拡大縮小倍率 = new Vector3( (float) ( base.st状態[ j ].fX方向拡大率 * 0.8 ), (float) ( base.st状態[ j ].fY方向拡大率 * 0.8 ), 1f );\r
+ base.tx判定文字列[ index ].t2D描画( CDTXMania.app.Device, x, y, base.st判定文字列[ (int) base.st状態[ j ].judge ].rc );\r
+ }\r
+ Label_06B7: ;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ private struct STレーンサイズ\r
+ {\r
+ public int x;\r
+ public int w;\r
+ }\r
+\r
+ private STレーンサイズ[] stレーンサイズ;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using System.Drawing;\r
+using System.Drawing.Imaging;\r
+using System.IO;\r
+using System.Diagnostics;\r
+using SlimDX.Direct3D9;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CStage演奏ギター画面 : CStage\r
+ {\r
+ // プロパティ\r
+\r
+ public bool bAUTOでないチップが1つでもバーを通過した\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public CStage演奏ギター画面()\r
+ {\r
+ base.eステージID = CStage.Eステージ.演奏;\r
+ base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
+ base.b活性化してない = true;\r
+ base.list子Activities.Add( this.actStageFailed = new CAct演奏ステージ失敗() );\r
+ base.list子Activities.Add( this.actAVI = new CAct演奏AVI() );\r
+ base.list子Activities.Add( this.actBGA = new CAct演奏BGA() );\r
+ base.list子Activities.Add( this.actPanel = new CAct演奏パネル文字列() );\r
+ base.list子Activities.Add( this.act譜面スクロール速度 = new CAct演奏スクロール速度() );\r
+ base.list子Activities.Add( this.actStatusPanels = new CAct演奏Guitarステータスパネル() );\r
+ base.list子Activities.Add( this.actWailingBonus = new CAct演奏GuitarWailingBonus() );\r
+ base.list子Activities.Add( this.actScore = new CAct演奏Guitarスコア() );\r
+ base.list子Activities.Add( this.actRGB = new CAct演奏GuitarRGB() );\r
+ base.list子Activities.Add( this.actLaneFlushGB = new CAct演奏GuitarレーンフラッシュGB() );\r
+ base.list子Activities.Add( this.actJudgeString = new CAct演奏Guitar判定文字列() );\r
+ base.list子Activities.Add( this.actGauge = new CAct演奏Guitarゲージ() );\r
+ base.list子Activities.Add( this.actCombo = new CAct演奏Guitarコンボ() );\r
+ base.list子Activities.Add( this.actChipFire = new CAct演奏Guitarチップファイア() );\r
+ base.list子Activities.Add( this.actPlayInfo = new CAct演奏演奏情報() );\r
+ base.list子Activities.Add( this.actFI = new CActFIFOBlack() );\r
+ base.list子Activities.Add( this.actFO = new CActFIFOBlack() );\r
+ base.list子Activities.Add( this.actFOClear = new CActFIFOWhite() );\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ public void t演奏結果を格納する( out CScoreIni.C演奏記録 Drums, out CScoreIni.C演奏記録 Guitar, out CScoreIni.C演奏記録 Bass )\r
+ {\r
+ Drums = new CScoreIni.C演奏記録();\r
+ Guitar = new CScoreIni.C演奏記録();\r
+ Bass = new CScoreIni.C演奏記録();\r
+ if( CDTXMania.DTX.bチップがある.Guitar )\r
+ {\r
+ Guitar.nスコア = this.actScore.Get( E楽器パート.GUITAR );\r
+ Guitar.dbゲーム型スキル値 = CScoreIni.tゲーム型スキルを計算して返す( CDTXMania.DTX.LEVEL.Guitar, CDTXMania.DTX.n可視チップ数.Guitar, this.nヒット数・Auto含まない.Guitar.Perfect, this.actCombo.n現在のコンボ数.Guitar最高値 );\r
+ Guitar.db演奏型スキル値 = CScoreIni.t演奏型スキルを計算して返す( CDTXMania.DTX.n可視チップ数.Guitar, this.nヒット数・Auto含まない.Guitar.Perfect, this.nヒット数・Auto含まない.Guitar.Great, this.nヒット数・Auto含まない.Guitar.Good, this.nヒット数・Auto含まない.Guitar.Poor, this.nヒット数・Auto含まない.Guitar.Miss );\r
+ Guitar.nPerfect数 = CDTXMania.ConfigIni.bAutoPlay.Guitar ? this.nヒット数・Auto含む.Guitar.Perfect : this.nヒット数・Auto含まない.Guitar.Perfect;\r
+ Guitar.nGreat数 = CDTXMania.ConfigIni.bAutoPlay.Guitar ? this.nヒット数・Auto含む.Guitar.Great : this.nヒット数・Auto含まない.Guitar.Great;\r
+ Guitar.nGood数 = CDTXMania.ConfigIni.bAutoPlay.Guitar ? this.nヒット数・Auto含む.Guitar.Good : this.nヒット数・Auto含まない.Guitar.Good;\r
+ Guitar.nPoor数 = CDTXMania.ConfigIni.bAutoPlay.Guitar ? this.nヒット数・Auto含む.Guitar.Poor : this.nヒット数・Auto含まない.Guitar.Poor;\r
+ Guitar.nMiss数 = CDTXMania.ConfigIni.bAutoPlay.Guitar ? this.nヒット数・Auto含む.Guitar.Miss : this.nヒット数・Auto含まない.Guitar.Miss;\r
+ Guitar.n最大コンボ数 = this.actCombo.n現在のコンボ数.Guitar最高値;\r
+ Guitar.n全チップ数 = CDTXMania.DTX.n可視チップ数.Guitar;\r
+ for( int i = 0; i < 10; i++ )\r
+ {\r
+ Guitar.bAutoPlay[ i ] = CDTXMania.ConfigIni.bAutoPlay[ i ];\r
+ }\r
+ Guitar.bTight = CDTXMania.ConfigIni.bTight;\r
+ for( int j = 0; j < 3; j++ )\r
+ {\r
+ Guitar.bSudden[ j ] = CDTXMania.ConfigIni.bSudden[ j ];\r
+ Guitar.bHidden[ j ] = CDTXMania.ConfigIni.bHidden[ j ];\r
+ Guitar.bReverse[ j ] = CDTXMania.ConfigIni.bReverse[ j ];\r
+ Guitar.eRandom[ j ] = CDTXMania.ConfigIni.eRandom[ j ];\r
+ Guitar.bLight[ j ] = CDTXMania.ConfigIni.bLight[ j ];\r
+ Guitar.bLeft[ j ] = CDTXMania.ConfigIni.bLeft[ j ];\r
+ Guitar.f譜面スクロール速度[ j ] = ( (float) ( CDTXMania.ConfigIni.n譜面スクロール速度[ j ] + 1 ) ) * 0.5f;\r
+ }\r
+ Guitar.eDark = CDTXMania.ConfigIni.eDark;\r
+ Guitar.n演奏速度分子 = CDTXMania.ConfigIni.n演奏速度;\r
+ Guitar.n演奏速度分母 = 20;\r
+ Guitar.eHHGroup = CDTXMania.ConfigIni.eHHGroup;\r
+ Guitar.eFTGroup = CDTXMania.ConfigIni.eFTGroup;\r
+ Guitar.eCYGroup = CDTXMania.ConfigIni.eCYGroup;\r
+ Guitar.eHitSoundPriorityHH = CDTXMania.ConfigIni.eHitSoundPriorityHH;\r
+ Guitar.eHitSoundPriorityFT = CDTXMania.ConfigIni.eHitSoundPriorityFT;\r
+ Guitar.eHitSoundPriorityCY = CDTXMania.ConfigIni.eHitSoundPriorityCY;\r
+ Guitar.bGuitar有効 = CDTXMania.ConfigIni.bGuitar有効;\r
+ Guitar.bDrums有効 = CDTXMania.ConfigIni.bDrums有効;\r
+ Guitar.bSTAGEFAILED有効 = CDTXMania.ConfigIni.bSTAGEFAILED有効;\r
+ Guitar.eダメージレベル = CDTXMania.ConfigIni.eダメージレベル;\r
+ Guitar.b演奏にキーボードを使用した = this.b演奏にキーボードを使った.Guitar;\r
+ Guitar.b演奏にMIDI入力を使用した = this.b演奏にMIDI入力を使った.Guitar;\r
+ Guitar.b演奏にジョイパッドを使用した = this.b演奏にジョイパッドを使った.Guitar;\r
+ Guitar.b演奏にマウスを使用した = this.b演奏にマウスを使った.Guitar;\r
+ Guitar.nPerfectになる範囲ms = CDTXMania.nPerfect範囲ms;\r
+ Guitar.nGreatになる範囲ms = CDTXMania.nGreat範囲ms;\r
+ Guitar.nGoodになる範囲ms = CDTXMania.nGood範囲ms;\r
+ Guitar.nPoorになる範囲ms = CDTXMania.nPoor範囲ms;\r
+ Guitar.strDTXManiaのバージョン = CDTXMania.VERSION;\r
+ Guitar.最終更新日時 = DateTime.Now.ToString();\r
+ Guitar.Hash = CScoreIni.t演奏セクションのMD5を求めて返す( Guitar );\r
+ }\r
+ if( CDTXMania.DTX.bチップがある.Bass )\r
+ {\r
+ Bass.nスコア = this.actScore.Get( E楽器パート.BASS );\r
+ Bass.dbゲーム型スキル値 = CScoreIni.tゲーム型スキルを計算して返す( CDTXMania.DTX.LEVEL.Bass, CDTXMania.DTX.n可視チップ数.Bass, this.nヒット数・Auto含まない.Bass.Perfect, this.actCombo.n現在のコンボ数.Bass最高値 );\r
+ Bass.db演奏型スキル値 = CScoreIni.t演奏型スキルを計算して返す( CDTXMania.DTX.n可視チップ数.Bass, this.nヒット数・Auto含まない.Bass.Perfect, this.nヒット数・Auto含まない.Bass.Great, this.nヒット数・Auto含まない.Bass.Good, this.nヒット数・Auto含まない.Bass.Poor, this.nヒット数・Auto含まない.Bass.Miss );\r
+ Bass.nPerfect数 = CDTXMania.ConfigIni.bAutoPlay.Bass ? this.nヒット数・Auto含む.Bass.Perfect : this.nヒット数・Auto含まない.Bass.Perfect;\r
+ Bass.nGreat数 = CDTXMania.ConfigIni.bAutoPlay.Bass ? this.nヒット数・Auto含む.Bass.Great : this.nヒット数・Auto含まない.Bass.Great;\r
+ Bass.nGood数 = CDTXMania.ConfigIni.bAutoPlay.Bass ? this.nヒット数・Auto含む.Bass.Good : this.nヒット数・Auto含まない.Bass.Good;\r
+ Bass.nPoor数 = CDTXMania.ConfigIni.bAutoPlay.Bass ? this.nヒット数・Auto含む.Bass.Poor : this.nヒット数・Auto含まない.Bass.Poor;\r
+ Bass.nMiss数 = CDTXMania.ConfigIni.bAutoPlay.Bass ? this.nヒット数・Auto含む.Bass.Miss : this.nヒット数・Auto含まない.Bass.Miss;\r
+ Bass.n最大コンボ数 = this.actCombo.n現在のコンボ数.Bass最高値;\r
+ Bass.n全チップ数 = CDTXMania.DTX.n可視チップ数.Bass;\r
+ for( int k = 0; k < 10; k++ )\r
+ {\r
+ Bass.bAutoPlay[ k ] = CDTXMania.ConfigIni.bAutoPlay[ k ];\r
+ }\r
+ Bass.bTight = CDTXMania.ConfigIni.bTight;\r
+ for( int m = 0; m < 3; m++ )\r
+ {\r
+ Bass.bSudden[ m ] = CDTXMania.ConfigIni.bSudden[ m ];\r
+ Bass.bHidden[ m ] = CDTXMania.ConfigIni.bHidden[ m ];\r
+ Bass.bReverse[ m ] = CDTXMania.ConfigIni.bReverse[ m ];\r
+ Bass.eRandom[ m ] = CDTXMania.ConfigIni.eRandom[ m ];\r
+ Bass.bLight[ m ] = CDTXMania.ConfigIni.bLight[ m ];\r
+ Bass.bLeft[ m ] = CDTXMania.ConfigIni.bLeft[ m ];\r
+ Bass.f譜面スクロール速度[ m ] = ( (float) ( CDTXMania.ConfigIni.n譜面スクロール速度[ m ] + 1 ) ) * 0.5f;\r
+ }\r
+ Bass.eDark = CDTXMania.ConfigIni.eDark;\r
+ Bass.n演奏速度分子 = CDTXMania.ConfigIni.n演奏速度;\r
+ Bass.n演奏速度分母 = 20;\r
+ Bass.eHHGroup = CDTXMania.ConfigIni.eHHGroup;\r
+ Bass.eFTGroup = CDTXMania.ConfigIni.eFTGroup;\r
+ Bass.eCYGroup = CDTXMania.ConfigIni.eCYGroup;\r
+ Bass.eHitSoundPriorityHH = CDTXMania.ConfigIni.eHitSoundPriorityHH;\r
+ Bass.eHitSoundPriorityFT = CDTXMania.ConfigIni.eHitSoundPriorityFT;\r
+ Bass.eHitSoundPriorityCY = CDTXMania.ConfigIni.eHitSoundPriorityCY;\r
+ Bass.bGuitar有効 = CDTXMania.ConfigIni.bGuitar有効;\r
+ Bass.bDrums有効 = CDTXMania.ConfigIni.bDrums有効;\r
+ Bass.bSTAGEFAILED有効 = CDTXMania.ConfigIni.bSTAGEFAILED有効;\r
+ Bass.eダメージレベル = CDTXMania.ConfigIni.eダメージレベル;\r
+ Bass.b演奏にキーボードを使用した = this.b演奏にキーボードを使った.Guitar;\r
+ Bass.b演奏にMIDI入力を使用した = this.b演奏にMIDI入力を使った.Guitar;\r
+ Bass.b演奏にジョイパッドを使用した = this.b演奏にジョイパッドを使った.Guitar;\r
+ Bass.b演奏にマウスを使用した = this.b演奏にマウスを使った.Guitar;\r
+ Bass.nPerfectになる範囲ms = CDTXMania.nPerfect範囲ms;\r
+ Bass.nGreatになる範囲ms = CDTXMania.nGreat範囲ms;\r
+ Bass.nGoodになる範囲ms = CDTXMania.nGood範囲ms;\r
+ Bass.nPoorになる範囲ms = CDTXMania.nPoor範囲ms;\r
+ Bass.strDTXManiaのバージョン = CDTXMania.VERSION;\r
+ Bass.最終更新日時 = DateTime.Now.ToString();\r
+ Bass.Hash = CScoreIni.t演奏セクションのMD5を求めて返す( Bass );\r
+ }\r
+ }\r
+ \r
+\r
+ // CStage 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.継続;\r
+ this.n現在のトップChip = ( CDTXMania.DTX.listChip.Count > 0 ) ? 0 : -1;\r
+ this.n最後に再生したHHの実WAV番号 = -1;\r
+ this.n最後に再生したHHのチャンネル番号 = 0;\r
+ this.n最後に再生したギターの実WAV番号 = -1;\r
+ this.n最後に再生したベースの実WAV番号 = -1;\r
+ for( int i = 0; i < 50; i++ )\r
+ {\r
+ this.n最後に再生したBGMの実WAV番号[ i ] = -1;\r
+ }\r
+ this.r次にくるギターChip = null;\r
+ this.r次にくるベースChip = null;\r
+ for( int j = 0; j < 10; j++ )\r
+ {\r
+ this.r現在の空うちドラムChip[ j ] = null;\r
+ }\r
+ this.r現在の空うちギターChip = null;\r
+ this.r現在の空うちベースChip = null;\r
+ for( int k = 0; k < 3; k++ )\r
+ {\r
+ for( int n = 0; n < 5; n++ )\r
+ {\r
+ this.nヒット数・Auto含まない[ k ] = new STHITCOUNTOFRANK();\r
+ this.nヒット数・Auto含む[ k ] = new STHITCOUNTOFRANK();\r
+ }\r
+ this.queWailing[ k ] = new Queue<CDTX.CChip>();\r
+ }\r
+ for( int m = 0; m < 3; m++ )\r
+ {\r
+ this.b演奏にキーボードを使った[ m ] = false;\r
+ this.b演奏にジョイパッドを使った[ m ] = false;\r
+ this.b演奏にMIDI入力を使った[ m ] = false;\r
+ this.b演奏にマウスを使った[ m ] = false;\r
+ }\r
+ this.bAUTOでないチップが1つでもバーを通過した = false;\r
+ base.On活性化();\r
+ this.tステータスパネルの選択();\r
+ this.tパネル文字列の設定();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.t背景テクスチャの生成();\r
+ this.txチップ = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlayGuitar chips.png" ) );\r
+ this.txヒットバー = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlayGuitar hit-bar.png" ) );\r
+ this.txWailing枠 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlay wailing cursor.png" ) );\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.tx背景 );\r
+ CDTXMania.tテクスチャの解放( ref this.txチップ );\r
+ CDTXMania.tテクスチャの解放( ref this.txヒットバー );\r
+ CDTXMania.tテクスチャの解放( ref this.txWailing枠 );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ bool flag = false;\r
+ bool flag2 = false;\r
+\r
+ if( base.b初めての進行描画 )\r
+ {\r
+ CDTXMania.Timer.tリセット();\r
+ this.ctチップ模様アニメ.Guitar = new CCounter( 0, 0x17, 20, CDTXMania.Timer );\r
+ this.ctチップ模様アニメ.Bass = new CCounter( 0, 0x17, 20, CDTXMania.Timer );\r
+ this.ctWailingチップ模様アニメ = new CCounter( 0, 4, 50, CDTXMania.Timer );\r
+ base.eフェーズID = CStage.Eフェーズ.共通_フェードイン;\r
+ this.actFI.tフェードイン開始();\r
+ base.b初めての進行描画 = false;\r
+ }\r
+ if( CDTXMania.ConfigIni.bSTAGEFAILED有効 && ( base.eフェーズID == CStage.Eフェーズ.共通_通常状態 ) )\r
+ {\r
+ bool flag3 = ( CDTXMania.ConfigIni.bAutoPlay.Guitar || !CDTXMania.DTX.bチップがある.Guitar ) || ( this.actGauge.db現在のゲージ値.Guitar <= -0.1 );\r
+ bool flag4 = ( CDTXMania.ConfigIni.bAutoPlay.Bass || !CDTXMania.DTX.bチップがある.Bass ) || ( this.actGauge.db現在のゲージ値.Bass <= -0.1 );\r
+ if( flag3 && flag4 )\r
+ {\r
+ this.actStageFailed.Start();\r
+ CDTXMania.DTX.t全チップの再生停止();\r
+ base.eフェーズID = CStage.Eフェーズ.演奏_STAGE_FAILED;\r
+ }\r
+ }\r
+ this.t進行描画・背景();\r
+ this.t進行描画・MIDIBGM();\r
+ this.t進行描画・パネル文字列();\r
+ this.t進行描画・スコア();\r
+ this.t進行描画・AVI();\r
+ this.t進行描画・BGA();\r
+ this.t進行描画・ステータスパネル();\r
+ this.t進行描画・レーンフラッシュGB();\r
+ this.t進行描画・ギターベース判定ライン();\r
+ this.t進行描画・ゲージ();\r
+ this.t進行描画・DANGER();\r
+ this.t進行描画・RGBボタン();\r
+ this.t進行描画・判定文字列();\r
+ this.t進行描画・コンボ();\r
+ this.t進行描画・WailingBonus();\r
+ this.t進行描画・譜面スクロール速度();\r
+ this.t進行描画・チップアニメ();\r
+ flag = this.t進行描画・チップ();\r
+ this.t進行描画・演奏情報();\r
+ this.t進行描画・Wailing枠();\r
+ this.t進行描画・チップファイアGB();\r
+ this.t進行描画・STAGEFAILED();\r
+ flag2 = this.t進行描画・フェードイン・アウト();\r
+ if( flag && ( base.eフェーズID == CStage.Eフェーズ.共通_通常状態 ) )\r
+ {\r
+ this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.ステージクリア;\r
+ base.eフェーズID = CStage.Eフェーズ.演奏_STAGE_CLEAR_フェードアウト;\r
+ this.actFOClear.tフェードアウト開始();\r
+ }\r
+ if( flag2 )\r
+ {\r
+ return (int) this.eフェードアウト完了時の戻り値;\r
+ }\r
+\r
+ // キー入力\r
+\r
+ if( CDTXMania.act現在入力を占有中のプラグイン == null )\r
+ {\r
+ IInputDevice keyboard = CDTXMania.Input管理.Keyboard;\r
+ if( keyboard.bキーが押された( 0x36 ) && ( keyboard.bキーが押されている( 120 ) || keyboard.bキーが押されている( 0x4e ) ) )\r
+ {\r
+ this.bPAUSE = !this.bPAUSE;\r
+ if( this.bPAUSE )\r
+ {\r
+ CDTXMania.Timer.t一時停止();\r
+ CDTXMania.DTX.t全チップの再生一時停止();\r
+ }\r
+ else\r
+ {\r
+ CDTXMania.Timer.t再開();\r
+ CDTXMania.DTX.t全チップの再生再開();\r
+ }\r
+ }\r
+ if( ( !this.bPAUSE && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) )\r
+ {\r
+ this.t入力処理・ギター();\r
+ this.t入力処理・ベース();\r
+ if( keyboard.bキーが押された( 0x84 ) && ( keyboard.bキーが押されている( 120 ) || keyboard.bキーが押されている( 0x4e ) ) )\r
+ {\r
+ CDTXMania.DTX.t各自動再生音チップの再生時刻を変更する( ( keyboard.bキーが押されている( 0x4b ) || keyboard.bキーが押されている( 0x74 ) ) ? 1 : 10 );\r
+ CDTXMania.DTX.tWave再生位置自動補正();\r
+ }\r
+ else if( keyboard.bキーが押された( 50 ) && ( keyboard.bキーが押されている( 120 ) || keyboard.bキーが押されている( 0x4e ) ) )\r
+ {\r
+ CDTXMania.DTX.t各自動再生音チップの再生時刻を変更する( ( keyboard.bキーが押されている( 0x4b ) || keyboard.bキーが押されている( 0x74 ) ) ? -1 : -10 );\r
+ CDTXMania.DTX.tWave再生位置自動補正();\r
+ }\r
+ else if( keyboard.bキーが押された( 0x31 ) )\r
+ {\r
+ CDTXMania.ConfigIni.b演奏情報を表示する = !CDTXMania.ConfigIni.b演奏情報を表示する;\r
+ }\r
+ else if( ( base.eフェーズID == CStage.Eフェーズ.共通_通常状態 ) && ( keyboard.bキーが押された( 0x35 ) || CDTXMania.Pad.b押されたGB( Eパッド.FT ) ) )\r
+ {\r
+ this.actFO.tフェードアウト開始();\r
+ base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
+ this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.演奏中断;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+ \r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private class STHITCOUNTOFRANK\r
+ {\r
+ // Fields\r
+ public int Good;\r
+ public int Great;\r
+ public int Miss;\r
+ public int Perfect;\r
+ public int Poor;\r
+\r
+ // Properties\r
+ public int this[ int index ]\r
+ {\r
+ get\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ return this.Perfect;\r
+\r
+ case 1:\r
+ return this.Great;\r
+\r
+ case 2:\r
+ return this.Good;\r
+\r
+ case 3:\r
+ return this.Poor;\r
+\r
+ case 4:\r
+ return this.Miss;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ set\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ this.Perfect = value;\r
+ return;\r
+\r
+ case 1:\r
+ this.Great = value;\r
+ return;\r
+\r
+ case 2:\r
+ this.Good = value;\r
+ return;\r
+\r
+ case 3:\r
+ this.Poor = value;\r
+ return;\r
+\r
+ case 4:\r
+ this.Miss = value;\r
+ return;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ }\r
+ }\r
+\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ private struct STKARAUCHI\r
+ {\r
+ public CDTX.CChip HH;\r
+ public CDTX.CChip SD;\r
+ public CDTX.CChip BD;\r
+ public CDTX.CChip HT;\r
+ public CDTX.CChip LT;\r
+ public CDTX.CChip FT;\r
+ public CDTX.CChip CY;\r
+ public CDTX.CChip HHO;\r
+ public CDTX.CChip RD;\r
+ public CDTX.CChip LC;\r
+ public CDTX.CChip this[ int index ]\r
+ {\r
+ get\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ return this.HH;\r
+\r
+ case 1:\r
+ return this.SD;\r
+\r
+ case 2:\r
+ return this.BD;\r
+\r
+ case 3:\r
+ return this.HT;\r
+\r
+ case 4:\r
+ return this.LT;\r
+\r
+ case 5:\r
+ return this.FT;\r
+\r
+ case 6:\r
+ return this.CY;\r
+\r
+ case 7:\r
+ return this.HHO;\r
+\r
+ case 8:\r
+ return this.RD;\r
+\r
+ case 9:\r
+ return this.LC;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ set\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ this.HH = value;\r
+ return;\r
+\r
+ case 1:\r
+ this.SD = value;\r
+ return;\r
+\r
+ case 2:\r
+ this.BD = value;\r
+ return;\r
+\r
+ case 3:\r
+ this.HT = value;\r
+ return;\r
+\r
+ case 4:\r
+ this.LT = value;\r
+ return;\r
+\r
+ case 5:\r
+ this.FT = value;\r
+ return;\r
+\r
+ case 6:\r
+ this.CY = value;\r
+ return;\r
+\r
+ case 7:\r
+ this.HHO = value;\r
+ return;\r
+\r
+ case 8:\r
+ this.RD = value;\r
+ return;\r
+\r
+ case 9:\r
+ this.LC = value;\r
+ return;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ }\r
+ }\r
+\r
+ private CAct演奏AVI actAVI;\r
+ private CAct演奏BGA actBGA;\r
+ private CAct演奏Guitarチップファイア actChipFire;\r
+ private CAct演奏Guitarコンボ actCombo;\r
+ private CActFIFOBlack actFI;\r
+ private CActFIFOBlack actFO;\r
+ private CActFIFOWhite actFOClear;\r
+ private CAct演奏Guitarゲージ actGauge;\r
+ private CAct演奏Guitar判定文字列 actJudgeString;\r
+ private CAct演奏GuitarレーンフラッシュGB actLaneFlushGB;\r
+ private CAct演奏パネル文字列 actPanel;\r
+ private CAct演奏演奏情報 actPlayInfo;\r
+ private CAct演奏GuitarRGB actRGB;\r
+ private CAct演奏Guitarスコア actScore;\r
+ private CAct演奏ステージ失敗 actStageFailed;\r
+ private CAct演奏Guitarステータスパネル actStatusPanels;\r
+ private CAct演奏GuitarWailingBonus actWailingBonus;\r
+ private CAct演奏スクロール速度 act譜面スクロール速度;\r
+ private bool bPAUSE;\r
+ private STDGBVALUE<bool> b演奏にMIDI入力を使った;\r
+ private STDGBVALUE<bool> b演奏にキーボードを使った;\r
+ private STDGBVALUE<bool> b演奏にジョイパッドを使った;\r
+ private STDGBVALUE<bool> b演奏にマウスを使った;\r
+ private CCounter ctWailingチップ模様アニメ;\r
+ private STDGBVALUE<CCounter> ctチップ模様アニメ;\r
+ private E演奏画面の戻り値 eフェードアウト完了時の戻り値;\r
+ private readonly int[,] nBGAスコープチャンネルマップ = new int[ , ] { { 0xc4, 0xc7, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xe0 }, { 4, 7, 0x55, 0x56, 0x57, 0x58, 0x59, 0x60 } };\r
+ private readonly int[] nチャンネル0Atoパッド08 = new int[] { 1, 2, 3, 4, 5, 7, 6, 1, 8, 0 };\r
+ private readonly int[] nチャンネル0Atoレーン07 = new int[] { 1, 2, 3, 4, 5, 7, 6, 1, 7, 0 };\r
+ private readonly int[] nパッド0Atoチャンネル0A = new int[] { 0x11, 0x12, 0x13, 20, 0x15, 0x17, 0x16, 0x18, 0x19, 0x1a };\r
+ private readonly int[] nパッド0Atoパッド08 = new int[] { 1, 2, 3, 4, 5, 6, 7, 1, 8, 0 };\r
+ private readonly int[] nパッド0Atoレーン07 = new int[] { 1, 2, 3, 4, 5, 6, 7, 1, 7, 0 };\r
+ private STDGBVALUE<STHITCOUNTOFRANK> nヒット数・Auto含まない;\r
+ private STDGBVALUE<STHITCOUNTOFRANK> nヒット数・Auto含む;\r
+ private int n現在のトップChip = -1;\r
+ private int[] n最後に再生したBGMの実WAV番号 = new int[ 50 ];\r
+ private int n最後に再生したHHのチャンネル番号;\r
+ private int n最後に再生したHHの実WAV番号;\r
+ private int n最後に再生したギターの実WAV番号;\r
+ private int n最後に再生したベースの実WAV番号;\r
+ private STDGBVALUE<Queue<CDTX.CChip>> queWailing;\r
+ private STDGBVALUE<CDTX.CChip> r現在の歓声Chip;\r
+ private CDTX.CChip r現在の空うちギターChip;\r
+ private STKARAUCHI r現在の空うちドラムChip;\r
+ private CDTX.CChip r現在の空うちベースChip;\r
+ private CDTX.CChip r次にくるギターChip;\r
+ private CDTX.CChip r次にくるベースChip;\r
+ private CTexture txWailing枠;\r
+ private CTexture txチップ;\r
+ private CTexture txヒットバー;\r
+ private CTexture tx背景;\r
+\r
+ private E判定 e指定時刻からChipのJUDGEを返す( long nTime, CDTX.CChip pChip )\r
+ {\r
+ if( pChip != null )\r
+ {\r
+ int num = Math.Abs( (int) ( nTime - pChip.n発声時刻ms ) );\r
+ if( num <= CDTXMania.nPerfect範囲ms )\r
+ {\r
+ return E判定.Perfect;\r
+ }\r
+ if( num <= CDTXMania.nGreat範囲ms )\r
+ {\r
+ return E判定.Great;\r
+ }\r
+ if( num <= CDTXMania.nGood範囲ms )\r
+ {\r
+ return E判定.Good;\r
+ }\r
+ if( num <= CDTXMania.nPoor範囲ms )\r
+ {\r
+ return E判定.Poor;\r
+ }\r
+ }\r
+ return E判定.Miss;\r
+ }\r
+ private CDTX.CChip r空うちChip( E楽器パート part, Eパッド pad )\r
+ {\r
+ switch( part )\r
+ {\r
+ case E楽器パート.GUITAR:\r
+ return this.r現在の空うちギターChip;\r
+\r
+ case E楽器パート.BASS:\r
+ return this.r現在の空うちベースChip;\r
+ }\r
+ return null;\r
+ }\r
+ private CDTX.CChip r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( long nTime, int nChannelFlag )\r
+ {\r
+ int num5;\r
+ if( this.n現在のトップChip == -1 )\r
+ {\r
+ return null;\r
+ }\r
+ int count = CDTXMania.DTX.listChip.Count;\r
+ int num4 = num5 = this.n現在のトップChip;\r
+ if( this.n現在のトップChip >= count )\r
+ {\r
+ num4 = num5 = count - 1;\r
+ }\r
+ int num2 = num4;\r
+ while( num2 < count )\r
+ {\r
+ CDTX.CChip chip = CDTXMania.DTX.listChip[ num2 ];\r
+ if( ( ( nChannelFlag >= 0x11 ) && ( nChannelFlag <= 0x1a ) ) && ( ( chip.nチャンネル番号 == nChannelFlag ) || ( chip.nチャンネル番号 == ( nChannelFlag + 0x20 ) ) ) )\r
+ {\r
+ if( chip.n発声時刻ms > nTime )\r
+ {\r
+ break;\r
+ }\r
+ num5 = num2;\r
+ }\r
+ else if( ( ( nChannelFlag == 0x2f ) && ( chip.e楽器パート == E楽器パート.GUITAR ) ) || ( ( ( nChannelFlag >= 0x20 ) && ( nChannelFlag <= 40 ) ) && ( chip.nチャンネル番号 == nChannelFlag ) ) )\r
+ {\r
+ if( chip.n発声時刻ms > nTime )\r
+ {\r
+ break;\r
+ }\r
+ num5 = num2;\r
+ }\r
+ else if( ( ( nChannelFlag == 0xaf ) && ( chip.e楽器パート == E楽器パート.BASS ) ) || ( ( ( nChannelFlag >= 160 ) && ( nChannelFlag <= 0xa8 ) ) && ( chip.nチャンネル番号 == nChannelFlag ) ) )\r
+ {\r
+ if( chip.n発声時刻ms > nTime )\r
+ {\r
+ break;\r
+ }\r
+ num5 = num2;\r
+ }\r
+ num2++;\r
+ }\r
+ int num3 = num5;\r
+ while( num3 >= 0 )\r
+ {\r
+ CDTX.CChip chip2 = CDTXMania.DTX.listChip[ num3 ];\r
+ if( ( nChannelFlag >= 0x11 ) && ( nChannelFlag <= 0x1a ) )\r
+ {\r
+ if( ( chip2.nチャンネル番号 == nChannelFlag ) || ( chip2.nチャンネル番号 == ( nChannelFlag + 0x20 ) ) )\r
+ {\r
+ break;\r
+ }\r
+ }\r
+ else if( ( ( nChannelFlag == 0x2f ) && ( chip2.e楽器パート == E楽器パート.GUITAR ) ) || ( ( ( nChannelFlag >= 0x20 ) && ( nChannelFlag <= 40 ) ) && ( chip2.nチャンネル番号 == nChannelFlag ) ) )\r
+ {\r
+ if( ( chip2.nチャンネル番号 >= 0x20 ) && ( chip2.nチャンネル番号 <= 40 ) )\r
+ {\r
+ break;\r
+ }\r
+ }\r
+ else if( ( ( ( nChannelFlag == 0xaf ) && ( chip2.e楽器パート == E楽器パート.BASS ) ) || ( ( ( nChannelFlag >= 160 ) && ( nChannelFlag <= 0xa8 ) ) && ( chip2.nチャンネル番号 == nChannelFlag ) ) ) && ( ( chip2.nチャンネル番号 >= 160 ) && ( chip2.nチャンネル番号 <= 0xa8 ) ) )\r
+ {\r
+ break;\r
+ }\r
+ num3--;\r
+ }\r
+ if( ( num2 == count ) && ( num3 < 0 ) )\r
+ {\r
+ return null;\r
+ }\r
+ if( num2 == count )\r
+ {\r
+ return CDTXMania.DTX.listChip[ num3 ];\r
+ }\r
+ if( num3 < 0 )\r
+ {\r
+ return CDTXMania.DTX.listChip[ num2 ];\r
+ }\r
+ CDTX.CChip chip3 = CDTXMania.DTX.listChip[ num2 ];\r
+ CDTX.CChip chip4 = CDTXMania.DTX.listChip[ num3 ];\r
+ int num6 = Math.Abs( (int) ( nTime - chip3.n発声時刻ms ) );\r
+ int num7 = Math.Abs( (int) ( nTime - chip4.n発声時刻ms ) );\r
+ if( num6 >= num7 )\r
+ {\r
+ return chip4;\r
+ }\r
+ return chip3;\r
+ }\r
+ private CDTX.CChip r指定時刻に一番近い未ヒットChip( long nTime, int nChannelFlag )\r
+ {\r
+ return this.r指定時刻に一番近い未ヒットChip( nTime, nChannelFlag, 0 );\r
+ }\r
+ private CDTX.CChip r指定時刻に一番近い未ヒットChip( long nTime, int nChannelFlag, int n検索範囲時間ms )\r
+ {\r
+ int num5;\r
+ int num6;\r
+ if( this.n現在のトップChip == -1 )\r
+ {\r
+ return null;\r
+ }\r
+ int count = CDTXMania.DTX.listChip.Count;\r
+ int num4 = num5 = this.n現在のトップChip;\r
+ if( this.n現在のトップChip >= count )\r
+ {\r
+ num4 = num5 = count - 1;\r
+ }\r
+ int num2 = num4;\r
+ while( num2 < count )\r
+ {\r
+ CDTX.CChip chip = CDTXMania.DTX.listChip[ num2 ];\r
+ if( ( !chip.bHit && ( nChannelFlag >= 0x11 ) ) && ( nChannelFlag <= 0x1a ) )\r
+ {\r
+ if( ( chip.nチャンネル番号 == nChannelFlag ) || ( chip.nチャンネル番号 == ( nChannelFlag + 0x20 ) ) )\r
+ {\r
+ if( chip.n発声時刻ms > nTime )\r
+ {\r
+ break;\r
+ }\r
+ num5 = num2;\r
+ }\r
+ }\r
+ else if( !chip.bHit && ( ( ( nChannelFlag == 0x2f ) && ( chip.e楽器パート == E楽器パート.GUITAR ) ) || ( ( ( nChannelFlag >= 0x20 ) && ( nChannelFlag <= 40 ) ) && ( chip.nチャンネル番号 == nChannelFlag ) ) ) )\r
+ {\r
+ if( chip.n発声時刻ms > nTime )\r
+ {\r
+ break;\r
+ }\r
+ num5 = num2;\r
+ }\r
+ else if( !chip.bHit && ( ( ( nChannelFlag == 0xaf ) && ( chip.e楽器パート == E楽器パート.BASS ) ) || ( ( ( nChannelFlag >= 160 ) && ( nChannelFlag <= 0xa8 ) ) && ( chip.nチャンネル番号 == nChannelFlag ) ) ) )\r
+ {\r
+ if( chip.n発声時刻ms > nTime )\r
+ {\r
+ break;\r
+ }\r
+ num5 = num2;\r
+ }\r
+ num2++;\r
+ }\r
+ int num3 = num5;\r
+ while( num3 >= 0 )\r
+ {\r
+ CDTX.CChip chip2 = CDTXMania.DTX.listChip[ num3 ];\r
+ if( ( ( ( !chip2.bHit && ( nChannelFlag >= 0x11 ) ) && ( ( nChannelFlag <= 0x1a ) && ( ( chip2.nチャンネル番号 == nChannelFlag ) || ( chip2.nチャンネル番号 == ( nChannelFlag + 0x20 ) ) ) ) ) || ( !chip2.bHit && ( ( ( nChannelFlag == 0x2f ) && ( chip2.e楽器パート == E楽器パート.GUITAR ) ) || ( ( ( nChannelFlag >= 0x20 ) && ( nChannelFlag <= 40 ) ) && ( chip2.nチャンネル番号 == nChannelFlag ) ) ) ) ) || ( !chip2.bHit && ( ( ( nChannelFlag == 0xaf ) && ( chip2.e楽器パート == E楽器パート.BASS ) ) || ( ( ( nChannelFlag >= 160 ) && ( nChannelFlag <= 0xa8 ) ) && ( chip2.nチャンネル番号 == nChannelFlag ) ) ) ) )\r
+ {\r
+ break;\r
+ }\r
+ num3--;\r
+ }\r
+ if( ( num2 == count ) && ( num3 < 0 ) )\r
+ {\r
+ return null;\r
+ }\r
+ CDTX.CChip chip3 = null;\r
+ if( num2 == count )\r
+ {\r
+ chip3 = CDTXMania.DTX.listChip[ num3 ];\r
+ num6 = Math.Abs( (int) ( nTime - chip3.n発声時刻ms ) );\r
+ }\r
+ else if( num3 < 0 )\r
+ {\r
+ chip3 = CDTXMania.DTX.listChip[ num2 ];\r
+ num6 = Math.Abs( (int) ( nTime - chip3.n発声時刻ms ) );\r
+ }\r
+ else\r
+ {\r
+ int num7 = Math.Abs( (int) ( nTime - CDTXMania.DTX.listChip[ num2 ].n発声時刻ms ) );\r
+ int num8 = Math.Abs( (int) ( nTime - CDTXMania.DTX.listChip[ num3 ].n発声時刻ms ) );\r
+ if( num7 < num8 )\r
+ {\r
+ chip3 = CDTXMania.DTX.listChip[ num2 ];\r
+ num6 = Math.Abs( (int) ( nTime - chip3.n発声時刻ms ) );\r
+ }\r
+ else\r
+ {\r
+ chip3 = CDTXMania.DTX.listChip[ num3 ];\r
+ num6 = Math.Abs( (int) ( nTime - chip3.n発声時刻ms ) );\r
+ }\r
+ }\r
+ if( ( n検索範囲時間ms > 0 ) && ( num6 > n検索範囲時間ms ) )\r
+ {\r
+ return null;\r
+ }\r
+ return chip3;\r
+ }\r
+ private CDTX.CChip r次にくるギターChipを更新して返す()\r
+ {\r
+ this.r次にくるギターChip = this.r指定時刻に一番近い未ヒットChip( CDTXMania.Timer.n現在時刻, 0x2f, 500 );\r
+ return this.r次にくるギターChip;\r
+ }\r
+ private CDTX.CChip r次にくるベースChipを更新して返す()\r
+ {\r
+ this.r次にくるベースChip = this.r指定時刻に一番近い未ヒットChip( CDTXMania.Timer.n現在時刻, 0xaf, 500 );\r
+ return this.r次にくるベースChip;\r
+ }\r
+ private void tサウンド再生( CDTX.CChip rChip, long n再生開始システム時刻ms, E楽器パート part )\r
+ {\r
+ this.tサウンド再生( rChip, n再生開始システム時刻ms, part, CDTXMania.ConfigIni.n手動再生音量, false, false );\r
+ }\r
+ private void tサウンド再生( CDTX.CChip rChip, long n再生開始システム時刻ms, E楽器パート part, int n音量 )\r
+ {\r
+ this.tサウンド再生( rChip, n再生開始システム時刻ms, part, n音量, false, false );\r
+ }\r
+ private void tサウンド再生( CDTX.CChip rChip, long n再生開始システム時刻ms, E楽器パート part, int n音量, bool bモニタ )\r
+ {\r
+ this.tサウンド再生( rChip, n再生開始システム時刻ms, part, n音量, bモニタ, false );\r
+ }\r
+ private void tサウンド再生( CDTX.CChip pChip, long n再生開始システム時刻ms, E楽器パート part, int n音量, bool bモニタ, bool b音程をずらして再生 )\r
+ {\r
+ if( pChip != null )\r
+ {\r
+ switch( part )\r
+ {\r
+ case E楽器パート.DRUMS:\r
+ if( CDTXMania.ConfigIni.bドラム打音を発声する )\r
+ {\r
+ int index = pChip.nチャンネル番号;\r
+ if( ( index >= 0x11 ) && ( index <= 0x1a ) )\r
+ {\r
+ index -= 0x11;\r
+ }\r
+ else\r
+ {\r
+ if( ( index < 0x31 ) || ( index > 0x3a ) )\r
+ {\r
+ return;\r
+ }\r
+ index -= 0x31;\r
+ }\r
+ int nLane = this.nチャンネル0Atoレーン07[ index ];\r
+ if( ( nLane == 1 ) && ( ( index == 0 ) || ( ( ( index == 7 ) && ( this.n最後に再生したHHのチャンネル番号 != 0x18 ) ) && ( this.n最後に再生したHHのチャンネル番号 != 0x38 ) ) ) )\r
+ {\r
+ CDTXMania.DTX.tWavの再生停止( this.n最後に再生したHHの実WAV番号 );\r
+ this.n最後に再生したHHの実WAV番号 = pChip.n整数値・内部番号;\r
+ this.n最後に再生したHHのチャンネル番号 = pChip.nチャンネル番号;\r
+ }\r
+ CDTXMania.DTX.tチップの再生( pChip, n再生開始システム時刻ms, nLane, n音量, bモニタ );\r
+ return;\r
+ }\r
+ return;\r
+\r
+ case E楽器パート.GUITAR:\r
+ CDTXMania.DTX.tWavの再生停止( this.n最後に再生したギターの実WAV番号 );\r
+ CDTXMania.DTX.tチップの再生( pChip, n再生開始システム時刻ms, 8, n音量, bモニタ, b音程をずらして再生 );\r
+ this.n最後に再生したギターの実WAV番号 = pChip.n整数値・内部番号;\r
+ return;\r
+\r
+ case E楽器パート.BASS:\r
+ CDTXMania.DTX.tWavの再生停止( this.n最後に再生したベースの実WAV番号 );\r
+ CDTXMania.DTX.tチップの再生( pChip, n再生開始システム時刻ms, 9, n音量, bモニタ, b音程をずらして再生 );\r
+ this.n最後に再生したベースの実WAV番号 = pChip.n整数値・内部番号;\r
+ return;\r
+ }\r
+ }\r
+ }\r
+ private void tステータスパネルの選択()\r
+ {\r
+ if( CDTXMania.bコンパクトモード )\r
+ {\r
+ this.actStatusPanels.tラベル名からステータスパネルを決定する( null );\r
+ }\r
+ else if( CDTXMania.stage選曲.r確定された曲 != null )\r
+ {\r
+ this.actStatusPanels.tラベル名からステータスパネルを決定する( CDTXMania.stage選曲.r確定された曲.ar難易度ラベル[ CDTXMania.stage選曲.n確定された曲の難易度 ] );\r
+ }\r
+ }\r
+ private E判定 tチップのヒット処理( long nHitTime, CDTX.CChip pChip )\r
+ {\r
+ pChip.bHit = true;\r
+ E判定 e判定 = this.e指定時刻からChipのJUDGEを返す( nHitTime, pChip );\r
+ bool flag = false;\r
+ if( ( ( pChip.e楽器パート == E楽器パート.GUITAR ) && CDTXMania.ConfigIni.bAutoPlay.Guitar ) || ( ( pChip.e楽器パート == E楽器パート.BASS ) && CDTXMania.ConfigIni.bAutoPlay.Bass ) )\r
+ {\r
+ flag = true;\r
+ }\r
+ else\r
+ {\r
+ this.bAUTOでないチップが1つでもバーを通過した = true;\r
+ }\r
+ switch( pChip.e楽器パート )\r
+ {\r
+ case E楽器パート.GUITAR:\r
+ this.actJudgeString.Start( 10, flag ? E判定.Auto : e判定 );\r
+ break;\r
+\r
+ case E楽器パート.BASS:\r
+ this.actJudgeString.Start( 11, flag ? E判定.Auto : e判定 );\r
+ break;\r
+ }\r
+ if( !flag )\r
+ {\r
+ this.t判定にあわせてゲージを増減する( pChip.e楽器パート, e判定 );\r
+ }\r
+ int num = 0;\r
+ switch( pChip.e楽器パート )\r
+ {\r
+ case E楽器パート.DRUMS:\r
+ if( ( e判定 != E判定.Miss ) && ( e判定 != E判定.Bad ) )\r
+ {\r
+ STHITCOUNTOFRANK sthitcountofrank;\r
+ int num4;\r
+ ( sthitcountofrank = this.nヒット数・Auto含む.Drums )[ num4 = (int) e判定 ] = sthitcountofrank[ num4 ] + 1;\r
+ }\r
+ else\r
+ {\r
+ this.nヒット数・Auto含む.Drums.Miss++;\r
+ }\r
+ goto Label_0299;\r
+\r
+ case E楽器パート.GUITAR:\r
+ if( ( e判定 != E判定.Miss ) && ( e判定 != E判定.Bad ) )\r
+ {\r
+ STHITCOUNTOFRANK sthitcountofrank2;\r
+ int num5;\r
+ ( sthitcountofrank2 = this.nヒット数・Auto含む.Guitar )[ num5 = (int) e判定 ] = sthitcountofrank2[ num5 ] + 1;\r
+ break;\r
+ }\r
+ this.nヒット数・Auto含む.Guitar.Miss++;\r
+ break;\r
+\r
+ case E楽器パート.BASS:\r
+ if( ( e判定 != E判定.Miss ) && ( e判定 != E判定.Bad ) )\r
+ {\r
+ STHITCOUNTOFRANK sthitcountofrank4;\r
+ int num7;\r
+ ( sthitcountofrank4 = this.nヒット数・Auto含む.Bass )[ num7 = (int) e判定 ] = sthitcountofrank4[ num7 ] + 1;\r
+ }\r
+ else\r
+ {\r
+ this.nヒット数・Auto含む.Bass.Miss++;\r
+ }\r
+ if( !flag )\r
+ {\r
+ STHITCOUNTOFRANK sthitcountofrank5;\r
+ int num8;\r
+ switch( e判定 )\r
+ {\r
+ case E判定.Miss:\r
+ case E判定.Bad:\r
+ this.nヒット数・Auto含まない.Bass.Miss++;\r
+ goto Label_0264;\r
+ }\r
+ ( sthitcountofrank5 = this.nヒット数・Auto含まない.Bass )[ num8 = (int) e判定 ] = sthitcountofrank5[ num8 ] + 1;\r
+ }\r
+ goto Label_0264;\r
+\r
+ default:\r
+ goto Label_0299;\r
+ }\r
+ if( !flag )\r
+ {\r
+ STHITCOUNTOFRANK sthitcountofrank3;\r
+ int num6;\r
+ switch( e判定 )\r
+ {\r
+ case E判定.Miss:\r
+ case E判定.Bad:\r
+ this.nヒット数・Auto含まない.Guitar.Miss++;\r
+ goto Label_019F;\r
+ }\r
+ ( sthitcountofrank3 = this.nヒット数・Auto含まない.Guitar )[ num6 = (int) e判定 ] = sthitcountofrank3[ num6 ] + 1;\r
+ }\r
+ Label_019F:\r
+ num = this.actCombo.n現在のコンボ数.Guitar;\r
+ switch( e判定 )\r
+ {\r
+ case E判定.Perfect:\r
+ case E判定.Great:\r
+ case E判定.Good:\r
+ num++;\r
+ break;\r
+\r
+ default:\r
+ num = 0;\r
+ break;\r
+ }\r
+ this.actCombo.n現在のコンボ数.Guitar = num;\r
+ goto Label_0299;\r
+ Label_0264:\r
+ num = this.actCombo.n現在のコンボ数.Bass;\r
+ switch( e判定 )\r
+ {\r
+ case E判定.Perfect:\r
+ case E判定.Great:\r
+ case E判定.Good:\r
+ num++;\r
+ break;\r
+\r
+ default:\r
+ num = 0;\r
+ break;\r
+ }\r
+ this.actCombo.n現在のコンボ数.Bass = num;\r
+ Label_0299:\r
+ if( ( !flag && ( e判定 != E判定.Miss ) ) && ( e判定 != E判定.Bad ) )\r
+ {\r
+ int guitar = 0;\r
+ if( pChip.e楽器パート == E楽器パート.GUITAR )\r
+ {\r
+ guitar = this.actCombo.n現在のコンボ数.Guitar;\r
+ }\r
+ if( pChip.e楽器パート == E楽器パート.BASS )\r
+ {\r
+ guitar = this.actCombo.n現在のコンボ数.Bass;\r
+ }\r
+ long nScore = this.actScore.Get( pChip.e楽器パート );\r
+ long[] numArray = new long[] { 350L, 200L, 50L, 0L };\r
+ if( ( guitar <= 500 ) || ( e判定 == E判定.Good ) )\r
+ {\r
+ nScore += numArray[ (int) e判定 ] * guitar;\r
+ }\r
+ else if( ( e判定 == E判定.Perfect ) || ( e判定 == E判定.Great ) )\r
+ {\r
+ nScore += numArray[ (int) e判定 ] * 500L;\r
+ }\r
+ this.actScore.Set( pChip.e楽器パート, nScore );\r
+ }\r
+ return e判定;\r
+ }\r
+ private void tチップのヒット処理・BadならびにTight時のMiss( E楽器パート part )\r
+ {\r
+ this.tチップのヒット処理・BadならびにTight時のMiss( part, 0 );\r
+ }\r
+ private void tチップのヒット処理・BadならびにTight時のMiss( E楽器パート part, int nLane )\r
+ {\r
+ this.t判定にあわせてゲージを増減する( part, E判定.Miss );\r
+ switch( part )\r
+ {\r
+ case E楽器パート.DRUMS:\r
+ break;\r
+\r
+ case E楽器パート.GUITAR:\r
+ this.actJudgeString.Start( 10, E判定.Bad );\r
+ this.actCombo.n現在のコンボ数.Guitar = 0;\r
+ return;\r
+\r
+ case E楽器パート.BASS:\r
+ this.actJudgeString.Start( 11, E判定.Bad );\r
+ this.actCombo.n現在のコンボ数.Bass = 0;\r
+ break;\r
+\r
+ default:\r
+ return;\r
+ }\r
+ }\r
+ private void tパネル文字列の設定()\r
+ {\r
+ this.actPanel.SetPanelString( string.IsNullOrEmpty( CDTXMania.DTX.PANEL ) ? CDTXMania.DTX.TITLE : CDTXMania.DTX.PANEL );\r
+ }\r
+ private void t進行描画・AVI()\r
+ {\r
+ if( ( ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) ) && ( !CDTXMania.ConfigIni.bストイックモード && CDTXMania.ConfigIni.bAVI有効 ) )\r
+ {\r
+ this.actAVI.t進行描画( 0xb5, 50 );\r
+ }\r
+ }\r
+ private void t進行描画・BGA()\r
+ {\r
+ if( ( ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) ) && ( !CDTXMania.ConfigIni.bストイックモード && CDTXMania.ConfigIni.bBGA有効 ) )\r
+ {\r
+ this.actBGA.t進行描画( 0xb5, 50 );\r
+ }\r
+ }\r
+ private void t進行描画・DANGER()\r
+ {\r
+ }\r
+ private void t進行描画・MIDIBGM()\r
+ {\r
+ if( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED )\r
+ {\r
+ CStage.Eフェーズ eフェーズid1 = base.eフェーズID;\r
+ }\r
+ }\r
+ private void t進行描画・RGBボタン()\r
+ {\r
+ if( CDTXMania.ConfigIni.eDark != Eダークモード.FULL )\r
+ {\r
+ this.actRGB.On進行描画();\r
+ }\r
+ }\r
+ private void t進行描画・STAGEFAILED()\r
+ {\r
+ if( ( ( base.eフェーズID == CStage.Eフェーズ.演奏_STAGE_FAILED ) || ( base.eフェーズID == CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) ) && ( ( this.actStageFailed.On進行描画() != 0 ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) ) )\r
+ {\r
+ this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.ステージ失敗;\r
+ base.eフェーズID = CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト;\r
+ this.actFO.tフェードアウト開始();\r
+ }\r
+ }\r
+ private void t進行描画・WailingBonus()\r
+ {\r
+ if( ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) )\r
+ {\r
+ this.actWailingBonus.On進行描画();\r
+ }\r
+ }\r
+ private void t進行描画・Wailing枠()\r
+ {\r
+ if( ( CDTXMania.ConfigIni.eDark != Eダークモード.FULL ) && CDTXMania.ConfigIni.bGuitar有効 )\r
+ {\r
+ if( CDTXMania.DTX.bチップがある.Guitar && ( this.txWailing枠 != null ) )\r
+ {\r
+ this.txWailing枠.t2D描画( CDTXMania.app.Device, 0x8b, CDTXMania.ConfigIni.bReverse.Guitar ? 340 : 11 );\r
+ }\r
+ if( CDTXMania.DTX.bチップがある.Bass && ( this.txWailing枠 != null ) )\r
+ {\r
+ this.txWailing枠.t2D描画( CDTXMania.app.Device, 0x251, CDTXMania.ConfigIni.bReverse.Bass ? 340 : 11 );\r
+ }\r
+ }\r
+ }\r
+ private void t進行描画・ギターベース判定ライン()\r
+ {\r
+ if( ( CDTXMania.ConfigIni.eDark != Eダークモード.FULL ) && CDTXMania.ConfigIni.bGuitar有効 )\r
+ {\r
+ if( CDTXMania.DTX.bチップがある.Guitar )\r
+ {\r
+ int y = ( CDTXMania.ConfigIni.bReverse.Guitar ? 0x171 : 40 ) - 3;\r
+ for( int i = 0; i < 4; i++ )\r
+ {\r
+ if( this.txヒットバー != null )\r
+ {\r
+ this.txヒットバー.t2D描画( CDTXMania.app.Device, 0x17 + ( 0x1c * i ), y, new Rectangle( 0, i * 8, 0x1c, 8 ) );\r
+ }\r
+ }\r
+ }\r
+ if( CDTXMania.DTX.bチップがある.Bass )\r
+ {\r
+ int num3 = ( CDTXMania.ConfigIni.bReverse.Bass ? 0x171 : 40 ) - 3;\r
+ for( int j = 0; j < 4; j++ )\r
+ {\r
+ if( this.txヒットバー != null )\r
+ {\r
+ this.txヒットバー.t2D描画( CDTXMania.app.Device, 0x1dd + ( 0x1c * j ), num3, new Rectangle( 0, j * 8, 0x1c, 8 ) );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ private void t進行描画・ゲージ()\r
+ {\r
+ if( ( ( CDTXMania.ConfigIni.eDark != Eダークモード.HALF ) && ( CDTXMania.ConfigIni.eDark != Eダークモード.FULL ) ) && ( ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) ) )\r
+ {\r
+ this.actGauge.On進行描画();\r
+ }\r
+ }\r
+ private void t進行描画・コンボ()\r
+ {\r
+ this.actCombo.On進行描画();\r
+ }\r
+ private void t進行描画・スコア()\r
+ {\r
+ this.actScore.On進行描画();\r
+ }\r
+ private void t進行描画・ステータスパネル()\r
+ {\r
+ this.actStatusPanels.On進行描画();\r
+ }\r
+ private bool t進行描画・チップ()\r
+ {\r
+ if( ( base.eフェーズID == CStage.Eフェーズ.演奏_STAGE_FAILED ) || ( base.eフェーズID == CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) )\r
+ {\r
+ return true;\r
+ }\r
+ if( ( this.n現在のトップChip == -1 ) || ( this.n現在のトップChip >= CDTXMania.DTX.listChip.Count ) )\r
+ {\r
+ return true;\r
+ }\r
+ int num = this.n現在のトップChip;\r
+ if( num == -1 )\r
+ {\r
+ return true;\r
+ }\r
+\r
+ //double speed = 264.0; // BPM150の時の1小節の長さ[dot]\r
+ double speed = 234.0; // BPM150の時の1小節の長さ[dot]\r
+\r
+ double num2 = ( ( ( ( this.act譜面スクロール速度.db現在の譜面スクロール速度.Drums + 1.0 ) * 0.5 ) * 37.5 ) * speed ) / 60000.0;\r
+ double num3 = ( ( ( ( ( this.act譜面スクロール速度.db現在の譜面スクロール速度.Guitar + 1.0 ) * 0.5 ) * 0.5 ) * 37.5 ) * speed ) / 60000.0;\r
+ double num4 = ( ( ( ( ( this.act譜面スクロール速度.db現在の譜面スクロール速度.Bass + 1.0 ) * 0.5 ) * 0.5 ) * 37.5 ) * speed ) / 60000.0;\r
+\r
+ CDTX dTX = CDTXMania.DTX;\r
+ CConfigIni configIni = CDTXMania.ConfigIni;\r
+ while( num < dTX.listChip.Count )\r
+ {\r
+ CDTX.CChip pChip = dTX.listChip[ num ];\r
+ pChip.nバーからの距離dot.Drums = (int) ( ( pChip.n発声時刻ms - CDTXMania.Timer.n現在時刻 ) * num2 );\r
+ pChip.nバーからの距離dot.Guitar = (int) ( ( pChip.n発声時刻ms - CDTXMania.Timer.n現在時刻 ) * num3 );\r
+ pChip.nバーからの距離dot.Bass = (int) ( ( pChip.n発声時刻ms - CDTXMania.Timer.n現在時刻 ) * num4 );\r
+ if( Math.Min( Math.Min( pChip.nバーからの距離dot.Drums, pChip.nバーからの距離dot.Guitar ), pChip.nバーからの距離dot.Bass ) > 450 )\r
+ {\r
+ break;\r
+ }\r
+ if( ( ( num == this.n現在のトップChip ) && ( pChip.nバーからの距離dot.Drums < -65 ) ) && pChip.bHit )\r
+ {\r
+ this.n現在のトップChip++;\r
+ num = this.n現在のトップChip;\r
+ continue;\r
+ }\r
+ if( ( ( pChip.e楽器パート != E楽器パート.UNKNOWN ) && !pChip.bHit ) && ( ( pChip.nバーからの距離dot.Drums < 0 ) && ( this.e指定時刻からChipのJUDGEを返す( CDTXMania.Timer.n現在時刻, pChip ) == E判定.Miss ) ) )\r
+ {\r
+ this.tチップのヒット処理( CDTXMania.Timer.n現在時刻, pChip );\r
+ }\r
+ switch( pChip.nチャンネル番号 )\r
+ {\r
+ case 1:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ if( configIni.bBGM音を発声する )\r
+ {\r
+ dTX.tチップの再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, 10, dTX.nモニタを考慮した音量( E楽器パート.UNKNOWN ) );\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 3:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ this.actPlayInfo.dbBPM = ( pChip.n整数値 * ( ( (double) configIni.n演奏速度 ) / 20.0 ) ) + dTX.BASEBPM;\r
+ }\r
+ break;\r
+\r
+ case 4:\r
+ case 7:\r
+ case 0x55:\r
+ case 0x56:\r
+ case 0x57:\r
+ case 0x58:\r
+ case 0x59:\r
+ case 0x60:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ if( configIni.bBGA有効 )\r
+ {\r
+ switch( pChip.eBGA種別 )\r
+ {\r
+ case EBGA種別.BMPTEX:\r
+ if( pChip.rBMPTEX != null )\r
+ {\r
+ this.actBGA.Start( pChip.nチャンネル番号, null, pChip.rBMPTEX, pChip.rBMPTEX.tx画像.sz画像サイズ.Width, pChip.rBMPTEX.tx画像.sz画像サイズ.Height, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );\r
+ }\r
+ break;\r
+\r
+ case EBGA種別.BGA:\r
+ if( ( pChip.rBGA != null ) && ( ( pChip.rBMP != null ) || ( pChip.rBMPTEX != null ) ) )\r
+ {\r
+ this.actBGA.Start( pChip.nチャンネル番号, pChip.rBMP, pChip.rBMPTEX, pChip.rBGA.pt画像側右下座標.X - pChip.rBGA.pt画像側左上座標.X, pChip.rBGA.pt画像側右下座標.Y - pChip.rBGA.pt画像側左上座標.Y, 0, 0, pChip.rBGA.pt画像側左上座標.X, pChip.rBGA.pt画像側左上座標.Y, 0, 0, pChip.rBGA.pt表示座標.X, pChip.rBGA.pt表示座標.Y, 0, 0, 0 );\r
+ }\r
+ break;\r
+\r
+ case EBGA種別.BGAPAN:\r
+ if( ( pChip.rBGAPan != null ) && ( ( pChip.rBMP != null ) || ( pChip.rBMPTEX != null ) ) )\r
+ {\r
+ this.actBGA.Start( pChip.nチャンネル番号, pChip.rBMP, pChip.rBMPTEX, pChip.rBGAPan.sz開始サイズ.Width, pChip.rBGAPan.sz開始サイズ.Height, pChip.rBGAPan.sz終了サイズ.Width, pChip.rBGAPan.sz終了サイズ.Height, pChip.rBGAPan.pt画像側開始位置.X, pChip.rBGAPan.pt画像側開始位置.Y, pChip.rBGAPan.pt画像側終了位置.X, pChip.rBGAPan.pt画像側終了位置.Y, pChip.rBGAPan.pt表示側開始位置.X, pChip.rBGAPan.pt表示側開始位置.Y, pChip.rBGAPan.pt表示側終了位置.X, pChip.rBGAPan.pt表示側終了位置.Y, pChip.n総移動時間 );\r
+ }\r
+ break;\r
+\r
+ default:\r
+ if( pChip.rBMP != null )\r
+ {\r
+ this.actBGA.Start( pChip.nチャンネル番号, pChip.rBMP, null, pChip.rBMP.n幅, pChip.rBMP.n高さ, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );\r
+ }\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 8:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ if( dTX.listBPM.ContainsKey( pChip.n整数値・内部番号 ) )\r
+ {\r
+ this.actPlayInfo.dbBPM = ( dTX.listBPM[ pChip.n整数値・内部番号 ].dbBPM値 * ( ( (double) configIni.n演奏速度 ) / 20.0 ) ) + dTX.BASEBPM;\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 0x11:\r
+ case 0x12:\r
+ case 0x13:\r
+ case 0x14:\r
+ case 0x15:\r
+ case 0x16:\r
+ case 0x17:\r
+ case 0x18:\r
+ case 0x19:\r
+ case 0x1a:\r
+ {\r
+ int num1 = this.nチャンネル0Atoレーン07[ pChip.nチャンネル番号 - 0x11 ];\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ this.tサウンド再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, E楽器パート.DRUMS, dTX.nモニタを考慮した音量( E楽器パート.DRUMS ) );\r
+ }\r
+ break;\r
+ }\r
+ case 0x1f:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ this.r現在の歓声Chip.Drums = pChip;\r
+ }\r
+ break;\r
+\r
+ case 0x20:\r
+ case 0x21:\r
+ case 0x22:\r
+ case 0x23:\r
+ case 0x24:\r
+ case 0x25:\r
+ case 0x26:\r
+ case 0x27:\r
+ if( configIni.bGuitar有効 )\r
+ {\r
+ if( configIni.bSudden.Guitar )\r
+ {\r
+ pChip.b可視 = pChip.nバーからの距離dot.Guitar < 200;\r
+ }\r
+ if( configIni.bHidden.Guitar && ( pChip.nバーからの距離dot.Guitar < 100 ) )\r
+ {\r
+ pChip.b可視 = false;\r
+ }\r
+ if( !pChip.bHit && pChip.b可視 )\r
+ {\r
+ int num6 = configIni.bReverse.Guitar ? ( 0x171 - pChip.nバーからの距離dot.Guitar ) : ( 40 + pChip.nバーからの距離dot.Guitar );\r
+ if( ( num6 > 0 ) && ( num6 < 0x199 ) )\r
+ {\r
+ int num7 = this.ctチップ模様アニメ.Guitar.n現在の値;\r
+ if( pChip.nチャンネル番号 == 0x20 )\r
+ {\r
+ if( this.txチップ != null )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 0x1a, num6 - 4, new Rectangle( 0, 0xc0 + ( ( num7 % 5 ) * 8 ), 0x67, 8 ) );\r
+ }\r
+ }\r
+ else if( !configIni.bLeft.Guitar )\r
+ {\r
+ Rectangle rectangle = new Rectangle( 0, num7 * 8, 0x20, 8 );\r
+ if( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) && ( this.txチップ != null ) )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 0x1a, num6 - 4, rectangle );\r
+ }\r
+ rectangle.X += 0x20;\r
+ if( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) && ( this.txチップ != null ) )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 0x3e, num6 - 4, rectangle );\r
+ }\r
+ rectangle.X += 0x20;\r
+ if( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) && ( this.txチップ != null ) )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 0x62, num6 - 4, rectangle );\r
+ }\r
+ }\r
+ else\r
+ {\r
+ Rectangle rectangle2 = new Rectangle( 0, num7 * 8, 0x20, 8 );\r
+ if( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) && ( this.txチップ != null ) )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 0x62, num6 - 4, rectangle2 );\r
+ }\r
+ rectangle2.X += 0x20;\r
+ if( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) && ( this.txチップ != null ) )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 0x3e, num6 - 4, rectangle2 );\r
+ }\r
+ rectangle2.X += 0x20;\r
+ if( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) && ( this.txチップ != null ) )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 0x1a, num6 - 4, rectangle2 );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ if( ( configIni.bAutoPlay.Guitar && !pChip.bHit ) && ( pChip.nバーからの距離dot.Guitar < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ if( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) || ( pChip.nチャンネル番号 == 0x20 ) )\r
+ {\r
+ this.actChipFire.Start( 0 );\r
+ }\r
+ if( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) || ( pChip.nチャンネル番号 == 0x20 ) )\r
+ {\r
+ this.actChipFire.Start( 1 );\r
+ }\r
+ if( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) || ( pChip.nチャンネル番号 == 0x20 ) )\r
+ {\r
+ this.actChipFire.Start( 2 );\r
+ }\r
+ this.tサウンド再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, E楽器パート.GUITAR, dTX.nモニタを考慮した音量( E楽器パート.GUITAR ) );\r
+ this.r次にくるギターChip = null;\r
+ this.tチップのヒット処理( pChip.n発声時刻ms, pChip );\r
+ }\r
+ break;\r
+ }\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Guitar < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ this.tサウンド再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, E楽器パート.GUITAR, dTX.nモニタを考慮した音量( E楽器パート.GUITAR ) );\r
+ }\r
+ break;\r
+\r
+ case 40:\r
+ if( configIni.bGuitar有効 )\r
+ {\r
+ if( configIni.bSudden.Guitar )\r
+ {\r
+ pChip.b可視 = pChip.nバーからの距離dot.Guitar < 200;\r
+ }\r
+ if( configIni.bHidden.Guitar && ( pChip.nバーからの距離dot.Guitar < 100 ) )\r
+ {\r
+ pChip.b可視 = false;\r
+ }\r
+ if( !pChip.bHit && pChip.b可視 )\r
+ {\r
+ int num10 = 0x19;\r
+ int num11 = configIni.bReverse.Guitar ? ( 0x171 - pChip.nバーからの距離dot.Guitar ) : ( 40 + pChip.nバーからの距離dot.Guitar );\r
+ int num12 = num11;\r
+ int num13 = 0;\r
+ if( ( num12 < ( 0x199 + num10 ) ) && ( num12 > -num10 ) )\r
+ {\r
+ int num14 = this.ctWailingチップ模様アニメ.n現在の値;\r
+ Rectangle rectangle5 = new Rectangle( 0x60 + ( num14 * 20 ), 0, 20, 50 );\r
+ if( num12 < num10 )\r
+ {\r
+ rectangle5.Y += num10 - num12;\r
+ rectangle5.Height -= num10 - num12;\r
+ num13 = num10 - num12;\r
+ }\r
+ if( num12 > ( 0x199 - num10 ) )\r
+ {\r
+ rectangle5.Height -= num12 - ( 0x199 - num10 );\r
+ }\r
+ if( ( rectangle5.Bottom > rectangle5.Top ) && ( this.txチップ != null ) )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 0x8b, ( num11 - num10 ) + num13, rectangle5 );\r
+ }\r
+ }\r
+ }\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Guitar < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ if( configIni.bAutoPlay.Guitar )\r
+ {\r
+ this.actWailingBonus.Start( E楽器パート.GUITAR, this.r現在の歓声Chip.Guitar );\r
+ }\r
+ }\r
+ break;\r
+ }\r
+ pChip.bHit = true;\r
+ break;\r
+\r
+ case 0x2f:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Guitar < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ this.r現在の歓声Chip.Guitar = pChip;\r
+ }\r
+ break;\r
+\r
+ case 0x31:\r
+ case 50:\r
+ case 0x33:\r
+ case 0x34:\r
+ case 0x35:\r
+ case 0x36:\r
+ case 0x37:\r
+ case 0x38:\r
+ case 0x39:\r
+ case 0x3a:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ }\r
+ break;\r
+\r
+ case 80:\r
+ {\r
+ int num20 = pChip.n発声位置 / 0x180;\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ this.actPlayInfo.n小節番号 = num20 - 1;\r
+ if( configIni.bWave再生位置自動調整機能有効 )\r
+ {\r
+ dTX.tWave再生位置自動補正();\r
+ }\r
+ }\r
+ if( ( pChip.b可視 && configIni.bGuitar有効 ) && ( configIni.eDark != Eダークモード.FULL ) )\r
+ {\r
+ int y = configIni.bReverse.Guitar ? ( ( 0x171 - pChip.nバーからの距離dot.Guitar ) - 1 ) : ( ( 40 + pChip.nバーからの距離dot.Guitar ) - 1 );\r
+ if( ( dTX.bチップがある.Guitar && ( y > 0 ) ) && ( ( y < 0x199 ) && ( this.txチップ != null ) ) )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 0x1a, y, new Rectangle( 0, 0xeb, 0x68, 1 ) );\r
+ }\r
+ y = configIni.bReverse.Bass ? ( ( 0x171 - pChip.nバーからの距離dot.Bass ) - 1 ) : ( ( 40 + pChip.nバーからの距離dot.Bass ) - 1 );\r
+ if( ( dTX.bチップがある.Bass && ( y > 0 ) ) && ( ( y < 0x199 ) && ( this.txチップ != null ) ) )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 480, y, new Rectangle( 0, 0xeb, 0x68, 1 ) );\r
+ }\r
+ }\r
+ break;\r
+ }\r
+ case 0x51:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ pChip.bHit = true;\r
+ break;\r
+\r
+ case 0x52:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ }\r
+ break;\r
+\r
+ case 0x53:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ }\r
+ break;\r
+\r
+ case 0x54:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ if( configIni.bAVI有効 )\r
+ {\r
+ switch( pChip.eAVI種別 )\r
+ {\r
+ case EAVI種別.AVI:\r
+ if( pChip.rAVI != null )\r
+ {\r
+ this.actAVI.Start( pChip.nチャンネル番号, pChip.rAVI, 0x116, 0x163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, pChip.n発声時刻ms );\r
+ }\r
+ break;\r
+\r
+ case EAVI種別.AVIPAN:\r
+ if( pChip.rAVIPan != null )\r
+ {\r
+ this.actAVI.Start( pChip.nチャンネル番号, pChip.rAVI, pChip.rAVIPan.sz開始サイズ.Width, pChip.rAVIPan.sz開始サイズ.Height, pChip.rAVIPan.sz終了サイズ.Width, pChip.rAVIPan.sz終了サイズ.Height, pChip.rAVIPan.pt動画側開始位置.X, pChip.rAVIPan.pt動画側開始位置.Y, pChip.rAVIPan.pt動画側終了位置.X, pChip.rAVIPan.pt動画側終了位置.Y, pChip.rAVIPan.pt表示側開始位置.X, pChip.rAVIPan.pt表示側開始位置.Y, pChip.rAVIPan.pt表示側終了位置.X, pChip.rAVIPan.pt表示側終了位置.Y, pChip.n総移動時間, pChip.n発声時刻ms );\r
+ }\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 0x61:\r
+ case 0x62:\r
+ case 0x63:\r
+ case 0x64:\r
+ case 0x65:\r
+ case 0x66:\r
+ case 0x67:\r
+ case 0x68:\r
+ case 0x69:\r
+ case 0x70:\r
+ case 0x71:\r
+ case 0x72:\r
+ case 0x73:\r
+ case 0x74:\r
+ case 0x75:\r
+ case 0x76:\r
+ case 0x77:\r
+ case 0x78:\r
+ case 0x79:\r
+ case 0x80:\r
+ case 0x81:\r
+ case 0x82:\r
+ case 0x83:\r
+ case 0x84:\r
+ case 0x85:\r
+ case 0x86:\r
+ case 0x87:\r
+ case 0x88:\r
+ case 0x89:\r
+ case 0x90:\r
+ case 0x91:\r
+ case 0x92:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ if( configIni.bBGM音を発声する )\r
+ {\r
+ dTX.tWavの再生停止( this.n最後に再生したBGMの実WAV番号[ pChip.nチャンネル番号 - 0x61 ] );\r
+ dTX.tチップの再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, 10, dTX.nモニタを考慮した音量( E楽器パート.UNKNOWN ) );\r
+ this.n最後に再生したBGMの実WAV番号[ pChip.nチャンネル番号 - 0x61 ] = pChip.n整数値・内部番号;\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 160:\r
+ case 0xa1:\r
+ case 0xa2:\r
+ case 0xa3:\r
+ case 0xa4:\r
+ case 0xa5:\r
+ case 0xa6:\r
+ case 0xa7:\r
+ if( configIni.bGuitar有効 )\r
+ {\r
+ if( configIni.bSudden.Bass )\r
+ {\r
+ pChip.b可視 = pChip.nバーからの距離dot.Bass < 200;\r
+ }\r
+ if( configIni.bHidden.Bass && ( pChip.nバーからの距離dot.Bass < 100 ) )\r
+ {\r
+ pChip.b可視 = false;\r
+ }\r
+ if( !pChip.bHit && pChip.b可視 )\r
+ {\r
+ int num8 = configIni.bReverse.Bass ? ( 0x171 - pChip.nバーからの距離dot.Bass ) : ( 40 + pChip.nバーからの距離dot.Bass );\r
+ if( ( num8 > 0 ) && ( num8 < 0x199 ) )\r
+ {\r
+ int num9 = this.ctチップ模様アニメ.Bass.n現在の値;\r
+ if( pChip.nチャンネル番号 == 160 )\r
+ {\r
+ if( this.txチップ != null )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 480, num8 - 4, new Rectangle( 0, 0xc0 + ( ( num9 % 5 ) * 8 ), 0x67, 8 ) );\r
+ }\r
+ }\r
+ else if( !configIni.bLeft.Bass )\r
+ {\r
+ Rectangle rectangle3 = new Rectangle( 0, num9 * 8, 0x20, 8 );\r
+ if( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) && ( this.txチップ != null ) )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 480, num8 - 4, rectangle3 );\r
+ }\r
+ rectangle3.X += 0x20;\r
+ if( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) && ( this.txチップ != null ) )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 0x204, num8 - 4, rectangle3 );\r
+ }\r
+ rectangle3.X += 0x20;\r
+ if( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) && ( this.txチップ != null ) )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 0x228, num8 - 4, rectangle3 );\r
+ }\r
+ }\r
+ else\r
+ {\r
+ Rectangle rectangle4 = new Rectangle( 0, num9 * 8, 0x20, 8 );\r
+ if( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) && ( this.txチップ != null ) )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 0x228, num8 - 4, rectangle4 );\r
+ }\r
+ rectangle4.X += 0x20;\r
+ if( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) && ( this.txチップ != null ) )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 0x204, num8 - 4, rectangle4 );\r
+ }\r
+ rectangle4.X += 0x20;\r
+ if( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) && ( this.txチップ != null ) )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 480, num8 - 4, rectangle4 );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ if( ( configIni.bAutoPlay.Bass && !pChip.bHit ) && ( pChip.nバーからの距離dot.Bass < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ if( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) || ( pChip.nチャンネル番号 == 160 ) )\r
+ {\r
+ this.actChipFire.Start( 3 );\r
+ }\r
+ if( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) || ( pChip.nチャンネル番号 == 160 ) )\r
+ {\r
+ this.actChipFire.Start( 4 );\r
+ }\r
+ if( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) || ( pChip.nチャンネル番号 == 160 ) )\r
+ {\r
+ this.actChipFire.Start( 5 );\r
+ }\r
+ this.tサウンド再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, E楽器パート.BASS, dTX.nモニタを考慮した音量( E楽器パート.BASS ) );\r
+ this.r次にくるベースChip = null;\r
+ this.tチップのヒット処理( pChip.n発声時刻ms, pChip );\r
+ }\r
+ break;\r
+ }\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Bass < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ this.tサウンド再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, E楽器パート.BASS, dTX.nモニタを考慮した音量( E楽器パート.BASS ) );\r
+ }\r
+ break;\r
+\r
+ case 0xa8:\r
+ if( configIni.bGuitar有効 )\r
+ {\r
+ if( configIni.bSudden.Bass )\r
+ {\r
+ pChip.b可視 = pChip.nバーからの距離dot.Bass < 200;\r
+ }\r
+ if( configIni.bHidden.Bass && ( pChip.nバーからの距離dot.Bass < 100 ) )\r
+ {\r
+ pChip.b可視 = false;\r
+ }\r
+ if( !pChip.bHit && pChip.b可視 )\r
+ {\r
+ int num15 = 0x19;\r
+ int num16 = configIni.bReverse.Bass ? ( 0x171 - pChip.nバーからの距離dot.Bass ) : ( 40 + pChip.nバーからの距離dot.Bass );\r
+ int num17 = num16;\r
+ int num18 = 0;\r
+ if( ( num17 < ( 0x199 + num15 ) ) && ( num17 > -num15 ) )\r
+ {\r
+ int num19 = this.ctWailingチップ模様アニメ.n現在の値;\r
+ Rectangle rectangle6 = new Rectangle( 0x60 + ( num19 * 20 ), 0, 20, 50 );\r
+ if( num17 < num15 )\r
+ {\r
+ rectangle6.Y += num15 - num17;\r
+ rectangle6.Height -= num15 - num17;\r
+ num18 = num15 - num17;\r
+ }\r
+ if( num17 > ( 0x199 - num15 ) )\r
+ {\r
+ rectangle6.Height -= num17 - ( 0x199 - num15 );\r
+ }\r
+ if( ( rectangle6.Bottom > rectangle6.Top ) && ( this.txチップ != null ) )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 0x251, ( num16 - num15 ) + num18, rectangle6 );\r
+ }\r
+ }\r
+ }\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Bass < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ if( configIni.bAutoPlay.Bass )\r
+ {\r
+ this.actWailingBonus.Start( E楽器パート.BASS, this.r現在の歓声Chip.Bass );\r
+ }\r
+ }\r
+ break;\r
+ }\r
+ pChip.bHit = true;\r
+ break;\r
+\r
+ case 0xaf:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Bass < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ this.r現在の歓声Chip.Bass = pChip;\r
+ }\r
+ break;\r
+\r
+ case 0xb1:\r
+ case 0xb2:\r
+ case 0xb3:\r
+ case 180:\r
+ case 0xb5:\r
+ case 0xb6:\r
+ case 0xb7:\r
+ case 0xb8:\r
+ case 0xb9:\r
+ case 0xbc:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ }\r
+ break;\r
+\r
+ case 0xba:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Guitar < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ this.r現在の空うちギターChip = pChip;\r
+ pChip.nチャンネル番号 = 0x20;\r
+ }\r
+ break;\r
+\r
+ case 0xbb:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Bass < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ this.r現在の空うちベースChip = pChip;\r
+ pChip.nチャンネル番号 = 160;\r
+ }\r
+ break;\r
+\r
+ case 0xc4:\r
+ case 0xc7:\r
+ case 0xd5:\r
+ case 0xd6:\r
+ case 0xd7:\r
+ case 0xd8:\r
+ case 0xd9:\r
+ case 0xe0:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ if( ( configIni.bBGA有効 && ( pChip.eBGA種別 == EBGA種別.BMP ) ) || ( pChip.eBGA種別 == EBGA種別.BMPTEX ) )\r
+ {\r
+ for( int i = 0; i < 8; i++ )\r
+ {\r
+ if( this.nBGAスコープチャンネルマップ[ 0, i ] == pChip.nチャンネル番号 )\r
+ {\r
+ this.actBGA.ChangeScope( this.nBGAスコープチャンネルマップ[ 1, i ], pChip.rBMP, pChip.rBMPTEX );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ break;\r
+\r
+ default:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ }\r
+ break;\r
+ }\r
+\r
+ num++;\r
+ }\r
+ return false;\r
+ }\r
+ private void t進行描画・チップアニメ()\r
+ {\r
+ for( int i = 1; i < 3; i++ )\r
+ {\r
+ this.ctチップ模様アニメ[ i ].t進行Loop();\r
+ }\r
+ this.ctWailingチップ模様アニメ.t進行Loop();\r
+ }\r
+ private void t進行描画・チップファイアGB()\r
+ {\r
+ this.actChipFire.On進行描画();\r
+ }\r
+ private void t進行描画・パネル文字列()\r
+ {\r
+ if( ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) )\r
+ {\r
+ this.actPanel.t進行描画( 0xb5, 430 );\r
+ }\r
+ }\r
+ private bool t進行描画・フェードイン・アウト()\r
+ {\r
+ switch( base.eフェーズID )\r
+ {\r
+ case CStage.Eフェーズ.共通_フェードイン:\r
+ if( this.actFI.On進行描画() != 0 )\r
+ {\r
+ base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
+ }\r
+ break;\r
+\r
+ case CStage.Eフェーズ.共通_フェードアウト:\r
+ case CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト:\r
+ if( this.actFO.On進行描画() != 0 )\r
+ {\r
+ return true;\r
+ }\r
+ break;\r
+\r
+ case CStage.Eフェーズ.演奏_STAGE_CLEAR_フェードアウト:\r
+ if( this.actFOClear.On進行描画() == 0 )\r
+ {\r
+ break;\r
+ }\r
+ return true;\r
+ }\r
+ return false;\r
+ }\r
+ private void t進行描画・レーンフラッシュGB()\r
+ {\r
+ if( ( ( CDTXMania.ConfigIni.eDark != Eダークモード.HALF ) && ( CDTXMania.ConfigIni.eDark != Eダークモード.FULL ) ) && CDTXMania.ConfigIni.bGuitar有効 )\r
+ {\r
+ this.actLaneFlushGB.On進行描画();\r
+ }\r
+ }\r
+ private void t進行描画・演奏情報()\r
+ {\r
+ if( !CDTXMania.ConfigIni.b演奏情報を表示しない )\r
+ {\r
+ this.actPlayInfo.t進行描画( 0xb5, 50 );\r
+ }\r
+ }\r
+ private void t進行描画・背景()\r
+ {\r
+ if( CDTXMania.ConfigIni.eDark == Eダークモード.OFF )\r
+ {\r
+ if( this.tx背景 != null )\r
+ {\r
+ this.tx背景.t2D描画( CDTXMania.app.Device, 0, 0 );\r
+ }\r
+ }\r
+ else\r
+ {\r
+ CDTXMania.app.Device.Clear( ClearFlags.ZBuffer | ClearFlags.Target, Color.Black, 0f, 0 );\r
+ }\r
+ }\r
+ private void t進行描画・判定文字列()\r
+ {\r
+ this.actJudgeString.On進行描画();\r
+ }\r
+ private void t進行描画・譜面スクロール速度()\r
+ {\r
+ this.act譜面スクロール速度.On進行描画();\r
+ }\r
+ private void t入力メソッド記憶( E楽器パート part )\r
+ {\r
+ if( CDTXMania.Pad.st検知したデバイス.Keyboard )\r
+ {\r
+ this.b演奏にキーボードを使った[ (int) part ] = true;\r
+ }\r
+ if( CDTXMania.Pad.st検知したデバイス.Joypad )\r
+ {\r
+ this.b演奏にジョイパッドを使った[ (int) part ] = true;\r
+ }\r
+ if( CDTXMania.Pad.st検知したデバイス.MIDIIN )\r
+ {\r
+ this.b演奏にMIDI入力を使った[ (int) part ] = true;\r
+ }\r
+ if( CDTXMania.Pad.st検知したデバイス.Mouse )\r
+ {\r
+ this.b演奏にマウスを使った[ (int) part ] = true;\r
+ }\r
+ }\r
+ private void t入力処理・ギター()\r
+ {\r
+ if( CDTXMania.ConfigIni.bGuitar有効 && CDTXMania.DTX.bチップがある.Guitar )\r
+ {\r
+ if( CDTXMania.ConfigIni.bAutoPlay.Guitar )\r
+ {\r
+ CDTX.CChip chip = this.r次にくるギターChipを更新して返す();\r
+ if( chip != null )\r
+ {\r
+ if( ( chip.nチャンネル番号 & 4 ) != 0 )\r
+ {\r
+ this.actLaneFlushGB.Start( 0 );\r
+ this.actRGB.Push( 0 );\r
+ }\r
+ if( ( chip.nチャンネル番号 & 2 ) != 0 )\r
+ {\r
+ this.actLaneFlushGB.Start( 1 );\r
+ this.actRGB.Push( 1 );\r
+ }\r
+ if( ( chip.nチャンネル番号 & 1 ) != 0 )\r
+ {\r
+ this.actLaneFlushGB.Start( 2 );\r
+ this.actRGB.Push( 2 );\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ if( CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.CY ) && CDTXMania.Pad.b押された( E楽器パート.GUITAR, Eパッド.BD ) )\r
+ {\r
+ CDTXMania.ConfigIni.n譜面スクロール速度.Guitar = Math.Min( CDTXMania.ConfigIni.n譜面スクロール速度.Guitar + 1, 0x7cf );\r
+ }\r
+ if( CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.CY ) && CDTXMania.Pad.b押された( E楽器パート.GUITAR, Eパッド.HH ) )\r
+ {\r
+ CDTXMania.ConfigIni.n譜面スクロール速度.Guitar = Math.Max( CDTXMania.ConfigIni.n譜面スクロール速度.Guitar - 1, 0 );\r
+ }\r
+ int num = CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.HH ) ? 4 : 0;\r
+ this.t入力メソッド記憶( E楽器パート.GUITAR );\r
+ int num2 = CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.SD ) ? 2 : 0;\r
+ this.t入力メソッド記憶( E楽器パート.GUITAR );\r
+ int num3 = CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.BD ) ? 1 : 0;\r
+ this.t入力メソッド記憶( E楽器パート.GUITAR );\r
+ int num4 = ( num | num2 ) | num3;\r
+ if( num != 0 )\r
+ {\r
+ this.actLaneFlushGB.Start( 0 );\r
+ this.actRGB.Push( 0 );\r
+ }\r
+ if( num2 != 0 )\r
+ {\r
+ this.actLaneFlushGB.Start( 1 );\r
+ this.actRGB.Push( 1 );\r
+ }\r
+ if( num3 != 0 )\r
+ {\r
+ this.actLaneFlushGB.Start( 2 );\r
+ this.actRGB.Push( 2 );\r
+ }\r
+ List<STInputEvent> events = CDTXMania.Pad.GetEvents( E楽器パート.GUITAR, Eパッド.HT );\r
+ if( ( events != null ) && ( events.Count > 0 ) )\r
+ {\r
+ foreach( STInputEvent event2 in events )\r
+ {\r
+ CDTX.CChip chip4;\r
+ if( !event2.b押された )\r
+ {\r
+ continue;\r
+ }\r
+ this.t入力メソッド記憶( E楽器パート.GUITAR );\r
+ long nTime = event2.nTimeStamp - CDTXMania.Timer.n前回リセットした時のシステム時刻;\r
+ CDTX.CChip pChip = this.r指定時刻に一番近い未ヒットChip( nTime, 0x2f );\r
+ E判定 e判定 = this.e指定時刻からChipのJUDGEを返す( nTime, pChip );\r
+ if( ( ( pChip != null ) && ( ( pChip.nチャンネル番号 & 15 ) == num4 ) ) && ( e判定 != E判定.Miss ) )\r
+ {\r
+ if( ( num != 0 ) || ( num4 == 0 ) )\r
+ {\r
+ this.actChipFire.Start( 0 );\r
+ }\r
+ if( ( num2 != 0 ) || ( num4 == 0 ) )\r
+ {\r
+ this.actChipFire.Start( 1 );\r
+ }\r
+ if( ( num3 != 0 ) || ( num4 == 0 ) )\r
+ {\r
+ this.actChipFire.Start( 2 );\r
+ }\r
+ this.tチップのヒット処理( nTime, pChip );\r
+ this.tサウンド再生( pChip, CDTXMania.Timer.nシステム時刻, E楽器パート.GUITAR, CDTXMania.ConfigIni.n手動再生音量, CDTXMania.ConfigIni.b演奏音を強調する.Guitar, e判定 == E判定.Poor );\r
+ CDTX.CChip item = this.r指定時刻に一番近い未ヒットChip( nTime, 40, 140 );\r
+ if( item != null )\r
+ {\r
+ this.queWailing.Guitar.Enqueue( item );\r
+ }\r
+ continue;\r
+ }\r
+ if( ( ( chip4 = this.r現在の空うちギターChip ) != null ) || ( ( chip4 = this.r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( nTime, 0x2f ) ) != null ) )\r
+ {\r
+ this.tサウンド再生( chip4, CDTXMania.Timer.nシステム時刻, E楽器パート.GUITAR, CDTXMania.ConfigIni.n手動再生音量, CDTXMania.ConfigIni.b演奏音を強調する.Guitar, true );\r
+ }\r
+ if( !CDTXMania.ConfigIni.bLight.Guitar )\r
+ {\r
+ this.tチップのヒット処理・BadならびにTight時のMiss( E楽器パート.GUITAR );\r
+ }\r
+ }\r
+ }\r
+ List<STInputEvent> list2 = CDTXMania.Pad.GetEvents( E楽器パート.GUITAR, Eパッド.LT );\r
+ if( ( list2 != null ) && ( list2.Count > 0 ) )\r
+ {\r
+ foreach( STInputEvent event3 in list2 )\r
+ {\r
+ CDTX.CChip chip5;\r
+ if( !event3.b押された )\r
+ {\r
+ continue;\r
+ }\r
+ long num6 = event3.nTimeStamp - CDTXMania.Timer.n前回リセットした時のシステム時刻;\r
+ while( ( this.queWailing.Guitar.Count > 0 ) && ( ( chip5 = this.queWailing.Guitar.Dequeue() ) != null ) )\r
+ {\r
+ if( ( num6 - chip5.n発声時刻ms ) <= 800 )\r
+ {\r
+ chip5.bHit = true;\r
+ this.actWailingBonus.Start( E楽器パート.GUITAR, this.r現在の歓声Chip.Guitar );\r
+ if( !CDTXMania.ConfigIni.bAutoPlay.Guitar )\r
+ {\r
+ this.actScore.Set( E楽器パート.DRUMS, this.actScore.Get( E楽器パート.DRUMS ) + ( this.actCombo.n現在のコンボ数.Guitar * 0xbb8L ) );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ private void t入力処理・ベース()\r
+ {\r
+ if( CDTXMania.ConfigIni.bGuitar有効 && CDTXMania.DTX.bチップがある.Bass )\r
+ {\r
+ if( CDTXMania.ConfigIni.bAutoPlay.Bass )\r
+ {\r
+ CDTX.CChip chip = this.r次にくるベースChipを更新して返す();\r
+ if( chip != null )\r
+ {\r
+ if( ( chip.nチャンネル番号 & 4 ) != 0 )\r
+ {\r
+ this.actLaneFlushGB.Start( 3 );\r
+ this.actRGB.Push( 3 );\r
+ }\r
+ if( ( chip.nチャンネル番号 & 2 ) != 0 )\r
+ {\r
+ this.actLaneFlushGB.Start( 4 );\r
+ this.actRGB.Push( 4 );\r
+ }\r
+ if( ( chip.nチャンネル番号 & 1 ) != 0 )\r
+ {\r
+ this.actLaneFlushGB.Start( 5 );\r
+ this.actRGB.Push( 5 );\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ if( CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.CY ) && CDTXMania.Pad.b押された( E楽器パート.BASS, Eパッド.BD ) )\r
+ {\r
+ CDTXMania.ConfigIni.n譜面スクロール速度.Bass = Math.Min( CDTXMania.ConfigIni.n譜面スクロール速度.Bass + 1, 0x7cf );\r
+ }\r
+ if( CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.CY ) && CDTXMania.Pad.b押された( E楽器パート.BASS, Eパッド.HH ) )\r
+ {\r
+ CDTXMania.ConfigIni.n譜面スクロール速度.Bass = Math.Max( CDTXMania.ConfigIni.n譜面スクロール速度.Bass - 1, 0 );\r
+ }\r
+ int num = CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.HH ) ? 4 : 0;\r
+ this.t入力メソッド記憶( E楽器パート.BASS );\r
+ int num2 = CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.SD ) ? 2 : 0;\r
+ this.t入力メソッド記憶( E楽器パート.BASS );\r
+ int num3 = CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.BD ) ? 1 : 0;\r
+ this.t入力メソッド記憶( E楽器パート.BASS );\r
+ int num4 = ( num | num2 ) | num3;\r
+ if( num != 0 )\r
+ {\r
+ this.actLaneFlushGB.Start( 3 );\r
+ this.actRGB.Push( 3 );\r
+ }\r
+ if( num2 != 0 )\r
+ {\r
+ this.actLaneFlushGB.Start( 4 );\r
+ this.actRGB.Push( 4 );\r
+ }\r
+ if( num3 != 0 )\r
+ {\r
+ this.actLaneFlushGB.Start( 5 );\r
+ this.actRGB.Push( 5 );\r
+ }\r
+ List<STInputEvent> events = CDTXMania.Pad.GetEvents( E楽器パート.BASS, Eパッド.HT );\r
+ if( ( events != null ) && ( events.Count > 0 ) )\r
+ {\r
+ foreach( STInputEvent event2 in events )\r
+ {\r
+ CDTX.CChip chip4;\r
+ if( !event2.b押された )\r
+ {\r
+ continue;\r
+ }\r
+ this.t入力メソッド記憶( E楽器パート.BASS );\r
+ long nTime = event2.nTimeStamp - CDTXMania.Timer.n前回リセットした時のシステム時刻;\r
+ CDTX.CChip pChip = this.r指定時刻に一番近い未ヒットChip( nTime, 0xaf );\r
+ E判定 e判定 = this.e指定時刻からChipのJUDGEを返す( nTime, pChip );\r
+ if( ( ( pChip != null ) && ( ( pChip.nチャンネル番号 & 15 ) == num4 ) ) && ( e判定 != E判定.Miss ) )\r
+ {\r
+ if( ( num != 0 ) || ( num4 == 0 ) )\r
+ {\r
+ this.actChipFire.Start( 3 );\r
+ }\r
+ if( ( num2 != 0 ) || ( num4 == 0 ) )\r
+ {\r
+ this.actChipFire.Start( 4 );\r
+ }\r
+ if( ( num3 != 0 ) || ( num4 == 0 ) )\r
+ {\r
+ this.actChipFire.Start( 5 );\r
+ }\r
+ this.tチップのヒット処理( nTime, pChip );\r
+ this.tサウンド再生( pChip, CDTXMania.Timer.nシステム時刻, E楽器パート.BASS, CDTXMania.ConfigIni.n手動再生音量, CDTXMania.ConfigIni.b演奏音を強調する.Bass, e判定 == E判定.Poor );\r
+ CDTX.CChip item = this.r指定時刻に一番近い未ヒットChip( nTime, 0xa8, 140 );\r
+ if( item != null )\r
+ {\r
+ this.queWailing.Bass.Enqueue( item );\r
+ }\r
+ continue;\r
+ }\r
+ if( ( ( chip4 = this.r現在の空うちベースChip ) != null ) || ( ( chip4 = this.r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( nTime, 0xaf ) ) != null ) )\r
+ {\r
+ this.tサウンド再生( chip4, CDTXMania.Timer.nシステム時刻, E楽器パート.BASS, CDTXMania.ConfigIni.n手動再生音量, CDTXMania.ConfigIni.b演奏音を強調する.Bass, true );\r
+ }\r
+ if( !CDTXMania.ConfigIni.bLight.Bass )\r
+ {\r
+ this.tチップのヒット処理・BadならびにTight時のMiss( E楽器パート.BASS );\r
+ }\r
+ }\r
+ }\r
+ List<STInputEvent> list2 = CDTXMania.Pad.GetEvents( E楽器パート.BASS, Eパッド.LT );\r
+ if( ( list2 != null ) && ( list2.Count > 0 ) )\r
+ {\r
+ foreach( STInputEvent event3 in list2 )\r
+ {\r
+ CDTX.CChip chip5;\r
+ if( !event3.b押された )\r
+ {\r
+ continue;\r
+ }\r
+ long num6 = event3.nTimeStamp - CDTXMania.Timer.n前回リセットした時のシステム時刻;\r
+ while( ( this.queWailing.Bass.Count > 0 ) && ( ( chip5 = this.queWailing.Bass.Dequeue() ) != null ) )\r
+ {\r
+ if( ( num6 - chip5.n発声時刻ms ) <= 800 )\r
+ {\r
+ chip5.bHit = true;\r
+ this.actWailingBonus.Start( E楽器パート.BASS, this.r現在の歓声Chip.Bass );\r
+ if( !CDTXMania.ConfigIni.bAutoPlay.Bass )\r
+ {\r
+ this.actScore.Set( E楽器パート.DRUMS, this.actScore.Get( E楽器パート.DRUMS ) + ( this.actCombo.n現在のコンボ数.Bass * 0xbb8L ) );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ private void t背景テクスチャの生成()\r
+ {\r
+ Bitmap image = null;\r
+ string path = "";\r
+ bool flag = true;\r
+ if( !CDTXMania.ConfigIni.bストイックモード )\r
+ {\r
+ string bACKGROUND = null;\r
+ if( ( CDTXMania.DTX.BACKGROUND_GR != null ) && ( CDTXMania.DTX.BACKGROUND_GR.Length > 0 ) )\r
+ {\r
+ bACKGROUND = CDTXMania.DTX.BACKGROUND_GR;\r
+ }\r
+ else if( ( CDTXMania.DTX.BACKGROUND != null ) && ( CDTXMania.DTX.BACKGROUND.Length > 0 ) )\r
+ {\r
+ bACKGROUND = CDTXMania.DTX.BACKGROUND;\r
+ }\r
+ if( ( bACKGROUND != null ) && ( bACKGROUND.Length > 0 ) )\r
+ {\r
+ path = CDTXMania.DTX.strフォルダ名 + bACKGROUND;\r
+ if( File.Exists( path ) )\r
+ {\r
+ try\r
+ {\r
+ Bitmap bitmap2 = null;\r
+ bitmap2 = new Bitmap( path );\r
+ if( ( bitmap2.Size.Width == 0 ) && ( bitmap2.Size.Height == 0 ) )\r
+ {\r
+ this.tx背景 = null;\r
+ return;\r
+ }\r
+ Bitmap bitmap3 = new Bitmap( 640, 480 );\r
+ Graphics graphics = Graphics.FromImage( bitmap3 );\r
+ for( int i = 0; i < 480; i += bitmap2.Size.Height )\r
+ {\r
+ for( int j = 0; j < 640; j += bitmap2.Size.Width )\r
+ {\r
+ graphics.DrawImage( bitmap2, j, i, bitmap2.Width, bitmap2.Height );\r
+ }\r
+ }\r
+ graphics.Dispose();\r
+ bitmap2.Dispose();\r
+ image = new Bitmap( CSkin.Path( @"Graphics\\ScreenPlayGuitar background.jpg" ) );\r
+ graphics = Graphics.FromImage( image );\r
+ ColorMatrix matrix2 = new ColorMatrix();\r
+ matrix2.Matrix00 = 1f;\r
+ matrix2.Matrix11 = 1f;\r
+ matrix2.Matrix22 = 1f;\r
+ matrix2.Matrix33 = ( (float) CDTXMania.ConfigIni.n背景の透過度 ) / 255f;\r
+ matrix2.Matrix44 = 1f;\r
+ ColorMatrix newColorMatrix = matrix2;\r
+ ImageAttributes imageAttr = new ImageAttributes();\r
+ imageAttr.SetColorMatrix( newColorMatrix );\r
+ graphics.DrawImage( bitmap3, new Rectangle( 0, 0, 640, 480 ), 0, 0, 640, 480, GraphicsUnit.Pixel, imageAttr );\r
+ imageAttr.Dispose();\r
+ graphics.DrawImage( bitmap3, new Rectangle( 0xb5, 50, 0x116, 0x163 ), 0xb5, 50, 0x116, 0x163, GraphicsUnit.Pixel );\r
+ graphics.Dispose();\r
+ bitmap3.Dispose();\r
+ flag = false;\r
+ }\r
+ catch\r
+ {\r
+ Trace.TraceError( "背景画像の読み込みに失敗しました。({0})", new object[] { path } );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ if( flag )\r
+ {\r
+ path = CSkin.Path( @"Graphics\ScreenPlayGuitar background.jpg" );\r
+ try\r
+ {\r
+ image = new Bitmap( path );\r
+ }\r
+ catch\r
+ {\r
+ Trace.TraceError( "背景画像の読み込みに失敗しました。({0})", new object[] { path } );\r
+ this.tx背景 = null;\r
+ return;\r
+ }\r
+ }\r
+ if( ( CDTXMania.DTX.listBMP.Count > 0 ) || ( CDTXMania.DTX.listBMPTEX.Count > 0 ) )\r
+ {\r
+ Graphics graphics2 = Graphics.FromImage( image );\r
+ graphics2.FillRectangle( Brushes.Black, 0xb5, 50, 0x116, 0x163 );\r
+ graphics2.Dispose();\r
+ }\r
+ try\r
+ {\r
+ this.tx背景 = new CTexture( CDTXMania.app.Device, image, CDTXMania.TextureFormat );\r
+ }\r
+ catch( CTextureCreateFailedException )\r
+ {\r
+ Trace.TraceError( "背景テクスチャの生成に失敗しました。" );\r
+ this.tx背景 = null;\r
+ }\r
+ image.Dispose();\r
+ }\r
+ private void t判定にあわせてゲージを増減する( E楽器パート part, E判定 e今回の判定 )\r
+ {\r
+ double num;\r
+ switch( e今回の判定 )\r
+ {\r
+ case E判定.Perfect:\r
+ num = ( part == E楽器パート.DRUMS ) ? 0.01 : 0.015;\r
+ break;\r
+\r
+ case E判定.Great:\r
+ num = ( part == E楽器パート.DRUMS ) ? 0.006 : 0.009;\r
+ break;\r
+\r
+ case E判定.Good:\r
+ num = ( part == E楽器パート.DRUMS ) ? 0.002 : 0.003;\r
+ break;\r
+\r
+ case E判定.Poor:\r
+ num = ( part == E楽器パート.DRUMS ) ? 0.0 : 0.0;\r
+ break;\r
+\r
+ case E判定.Miss:\r
+ num = ( part == E楽器パート.DRUMS ) ? -0.035 : -0.035;\r
+ switch( CDTXMania.ConfigIni.eダメージレベル )\r
+ {\r
+ case Eダメージレベル.少ない:\r
+ num *= 0.6;\r
+ break;\r
+\r
+ case Eダメージレベル.普通:\r
+ num *= 1.0;\r
+ break;\r
+\r
+ case Eダメージレベル.大きい:\r
+ num *= 1.6;\r
+ break;\r
+ }\r
+ break;\r
+\r
+ default:\r
+ num = 0.0;\r
+ break;\r
+ }\r
+ this.actGauge.db現在のゲージ値[ (int) part ] += num;\r
+\r
+ if( this.actGauge.db現在のゲージ値[ (int) part ] > 1.0 )\r
+ this.actGauge.db現在のゲージ値[ (int) part ] = 1.0;\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Drawing;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CAct演奏DrumsDanger : CActivity\r
+ {\r
+ // コンストラクタ\r
+\r
+ public CAct演奏DrumsDanger()\r
+ {\r
+ base.b活性化してない = true;\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ this.bDanger中 = false;\r
+ this.ct移動用 = new CCounter();\r
+ this.ct透明度用 = new CCounter();\r
+ base.On活性化();\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ this.ct移動用 = null;\r
+ this.ct透明度用 = null;\r
+ base.On非活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.txDANGER = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlayDrums danger.png" ) );\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.txDANGER );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ throw new InvalidOperationException( "t進行描画(bool)のほうを使用してください。" );\r
+ }\r
+ public int t進行描画( bool bDangerである )\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ if( !bDangerである )\r
+ {\r
+ this.bDanger中 = false;\r
+ return 0;\r
+ }\r
+ if( !this.bDanger中 )\r
+ {\r
+ this.ct移動用 = new CCounter( 0, 0x7f, 7, CDTXMania.Timer );\r
+ this.ct透明度用 = new CCounter( 0, 0x167, 4, CDTXMania.Timer );\r
+ }\r
+ this.bDanger中 = bDangerである;\r
+ this.ct移動用.t進行Loop();\r
+ this.ct透明度用.t進行Loop();\r
+ if( !this.bDanger中 )\r
+ {\r
+ return 0;\r
+ }\r
+ int num = this.ct透明度用.n現在の値;\r
+ if( this.txDANGER != null )\r
+ {\r
+ this.txDANGER.n透明度 = 60 + ( ( num < 180 ) ? num : ( 360 - num ) );\r
+ }\r
+ num = this.ct移動用.n現在の値;\r
+ int num2 = CDTXMania.ConfigIni.bReverse.Drums ? ( 0x7f - num ) : num;\r
+ for( int i = -1; i < 4; i++ )\r
+ {\r
+ if( this.txDANGER != null )\r
+ {\r
+ this.txDANGER.t2D描画( CDTXMania.app.Device, 0x26, ( i * 0x80 ) + num2, this.rc領域[ 0 ] );\r
+ this.txDANGER.t2D描画( CDTXMania.app.Device, 0x26, ( ( i * 0x80 ) + num2 ) + 0x40, this.rc領域[ 1 ] );\r
+ this.txDANGER.t2D描画( CDTXMania.app.Device, 0x12a, ( i * 0x80 ) + num2, this.rc領域[ 0 ] );\r
+ this.txDANGER.t2D描画( CDTXMania.app.Device, 0x12a, ( ( i * 0x80 ) + num2 ) + 0x40, this.rc領域[ 1 ] );\r
+ }\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private bool bDanger中;\r
+ private CCounter ct移動用;\r
+ private CCounter ct透明度用;\r
+ private const int n右位置 = 0x12a;\r
+ private const int n左位置 = 0x26;\r
+ private readonly Rectangle[] rc領域 = new Rectangle[] { new Rectangle( 0, 0, 0x20, 0x40 ), new Rectangle( 0x20, 0, 0x20, 0x40 ) };\r
+ private CTexture txDANGER;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Drawing;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CAct演奏DrumsRGB : CAct演奏RGB共通\r
+ {\r
+ // CActivity 実装(共通クラスからの差分のみ)\r
+\r
+ public override int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ if( !CDTXMania.ConfigIni.bGuitar有効 )\r
+ {\r
+ return 0;\r
+ }\r
+ if( CDTXMania.DTX.bチップがある.Guitar )\r
+ {\r
+ for( int j = 0; j < 3; j++ )\r
+ {\r
+ int index = CDTXMania.ConfigIni.bLeft.Guitar ? ( 2 - j ) : j;\r
+ Rectangle rectangle = new Rectangle( index * 0x18, 0, 0x18, 0x20 );\r
+ if( base.b押下状態[ index ] )\r
+ {\r
+ rectangle.Y += 0x20;\r
+ }\r
+ if( base.txRGB != null )\r
+ {\r
+ base.txRGB.t2D描画( CDTXMania.app.Device, 0x1fd + ( j * 0x1a ), 0x39, rectangle );\r
+ }\r
+ }\r
+ }\r
+ if( CDTXMania.DTX.bチップがある.Bass )\r
+ {\r
+ for( int k = 0; k < 3; k++ )\r
+ {\r
+ int num4 = CDTXMania.ConfigIni.bLeft.Bass ? ( 2 - k ) : k;\r
+ Rectangle rectangle2 = new Rectangle( num4 * 0x18, 0, 0x18, 0x20 );\r
+ if( base.b押下状態[ num4 + 3 ] )\r
+ {\r
+ rectangle2.Y += 0x20;\r
+ }\r
+ if( base.txRGB != null )\r
+ {\r
+ base.txRGB.t2D描画( CDTXMania.app.Device, 400 + ( k * 0x1a ), 0x39, rectangle2 );\r
+ }\r
+ }\r
+ }\r
+ for( int i = 0; i < 6; i++ )\r
+ {\r
+ base.b押下状態[ i ] = false;\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Drawing;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CAct演奏DrumsWailingBonus : CActivity\r
+ {\r
+ // コンストラクタ\r
+\r
+ public CAct演奏DrumsWailingBonus()\r
+ {\r
+ base.b活性化してない = true;\r
+ }\r
+ \r
+ \r
+ // メソッド\r
+\r
+ public void Start( E楽器パート part )\r
+ {\r
+ this.Start( part, null );\r
+ }\r
+ public void Start( E楽器パート part, CDTX.CChip r歓声Chip )\r
+ {\r
+ if( ( part == E楽器パート.GUITAR ) || ( part == E楽器パート.BASS ) )\r
+ {\r
+ int num = (int) part;\r
+ for( int i = 0; i < 4; i++ )\r
+ {\r
+ if( this.ct進行用[ num, i ].b停止中 )\r
+ {\r
+ this.ct進行用[ num, i ] = new CCounter( 0, 300, 2, CDTXMania.Timer );\r
+ if( CDTXMania.ConfigIni.b歓声を発声する )\r
+ {\r
+ if( r歓声Chip != null )\r
+ {\r
+ CDTXMania.DTX.tチップの再生( r歓声Chip, CDTXMania.Timer.nシステム時刻, 10, CDTXMania.DTX.nモニタを考慮した音量( E楽器パート.UNKNOWN ) );\r
+ return;\r
+ }\r
+ CDTXMania.Skin.sound歓声音.t再生する();\r
+ return;\r
+ }\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ for( int i = 0; i < 3; i++ )\r
+ {\r
+ for( int j = 0; j < 4; j++ )\r
+ {\r
+ this.ct進行用[ i, j ] = new CCounter();\r
+ }\r
+ }\r
+ base.On活性化();\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ for( int i = 0; i < 3; i++ )\r
+ {\r
+ for( int j = 0; j < 4; j++ )\r
+ {\r
+ this.ct進行用[ i, j ] = null;\r
+ }\r
+ }\r
+ base.On非活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.txWailingBonus = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlay wailing bonus.png" ) );\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.txWailingBonus );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ for( int i = 0; i < 2; i++ )\r
+ {\r
+ E楽器パート e楽器パート = ( i == 0 ) ? E楽器パート.GUITAR : E楽器パート.BASS;\r
+ for( int j = 0; j < 4; j++ )\r
+ {\r
+ if( !this.ct進行用[ (int) e楽器パート, j ].b停止中 )\r
+ {\r
+ if( this.ct進行用[ (int) e楽器パート, j ].b終了値に達した )\r
+ {\r
+ this.ct進行用[ (int) e楽器パート, j ].t停止();\r
+ }\r
+ else\r
+ {\r
+ this.ct進行用[ (int) e楽器パート, j ].t進行();\r
+ int x = ( ( e楽器パート == E楽器パート.GUITAR ) ? 0x1fb : 0x18e ) + 0x4e;\r
+ int num4 = 0;\r
+ int num5 = 0;\r
+ int num6 = this.ct進行用[ (int) e楽器パート, j ].n現在の値;\r
+ if( num6 < 100 )\r
+ {\r
+ num4 = (int) ( 64.0 + ( 290.0 * Math.Cos( 1.5707963267948966 * ( ( (float) num6 ) / 100f ) ) ) );\r
+ }\r
+ else if( num6 < 150 )\r
+ {\r
+ num4 = (int) ( 64.0 + ( ( 150 - num6 ) * Math.Sin( ( 3.1415926535897931 * ( ( num6 - 100 ) % 0x19 ) ) / 25.0 ) ) );\r
+ }\r
+ else if( num6 < 200 )\r
+ {\r
+ num4 = 0x40;\r
+ }\r
+ else\r
+ {\r
+ num4 = (int) ( 64f - ( ( (float) ( 290 * ( num6 - 200 ) ) ) / 100f ) );\r
+ }\r
+ if( CDTXMania.ConfigIni.bReverse[ (int) e楽器パート ] )\r
+ {\r
+ num4 = ( 0x163 - num4 ) - 0xf4;\r
+ }\r
+ Rectangle rectangle = new Rectangle( 0, 0, 0x1a, 0x7a );\r
+ if( ( 0x163 - num4 ) < rectangle.Bottom )\r
+ {\r
+ rectangle.Height = ( 0x163 - num4 ) - rectangle.Top;\r
+ }\r
+ if( num4 < 0 )\r
+ {\r
+ rectangle.Y = -num4;\r
+ num5 = -num4;\r
+ }\r
+ if( ( rectangle.Top < rectangle.Bottom ) && ( this.txWailingBonus != null ) )\r
+ {\r
+ this.txWailingBonus.t2D描画( CDTXMania.app.Device, x, ( ( ( e楽器パート == E楽器パート.GUITAR ) ? 0x39 : 0x39 ) + num4 ) + num5, rectangle );\r
+ }\r
+ num5 = 0;\r
+ rectangle = new Rectangle( 0x1a, 0, 0x1a, 0x7a );\r
+ if( ( 0x163 - ( num4 + 0x7a ) ) < rectangle.Bottom )\r
+ {\r
+ rectangle.Height = ( 0x163 - ( num4 + 0x7a ) ) - rectangle.Top;\r
+ }\r
+ if( ( num4 + 0x7a ) < 0 )\r
+ {\r
+ rectangle.Y = -( num4 + 0x7a );\r
+ num5 = -( num4 + 0x7a );\r
+ }\r
+ if( ( rectangle.Top < rectangle.Bottom ) && ( this.txWailingBonus != null ) )\r
+ {\r
+ this.txWailingBonus.t2D描画( CDTXMania.app.Device, x, ( ( ( ( e楽器パート == E楽器パート.GUITAR ) ? 0x39 : 0x39 ) + num4 ) + num5 ) + 0x7a, rectangle );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private CCounter[,] ct進行用 = new CCounter[ 3, 4 ];\r
+ private CTexture txWailingBonus;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using System.Drawing;\r
+using SlimDX;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CAct演奏Drumsゲージ : CActivity\r
+ {\r
+ // プロパティ\r
+\r
+ public double db現在のゲージ値\r
+ {\r
+ get\r
+ {\r
+ return this.dbゲージ値;\r
+ }\r
+ set\r
+ {\r
+ this.dbゲージ値 = value;\r
+ if( this.dbゲージ値 > 1.0 )\r
+ {\r
+ this.dbゲージ値 = 1.0;\r
+ }\r
+ }\r
+ }\r
+\r
+ \r
+ // コンストラクタ\r
+\r
+ public CAct演奏Drumsゲージ()\r
+ {\r
+ base.b活性化してない = true;\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ this.dbゲージ値 = 0.66666666666666663;\r
+ base.On活性化();\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ this.ct本体振動 = null;\r
+ this.ct本体移動 = null;\r
+ for( int i = 0; i < 0x18; i++ )\r
+ {\r
+ this.st白い星[ i ].ct進行 = null;\r
+ }\r
+ base.On非活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.txゲージ = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlayDrums gauge.png" ) );\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.txゲージ );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ if( base.b初めての進行描画 )\r
+ {\r
+ for( int k = 0; k < 0x18; k++ )\r
+ {\r
+ this.st白い星[ k ].x = 2 + CDTXMania.Random.Next( 4 );\r
+ this.st白い星[ k ].fScale = 0.2f + ( CDTXMania.Random.Next( 2 ) * 0.05f );\r
+ this.st白い星[ k ].ct進行 = new CCounter( 0, 0x160, 8 + CDTXMania.Random.Next( 4 ), CDTXMania.Timer );\r
+ this.st白い星[ k ].ct進行.n現在の値 = CDTXMania.Random.Next( 0x160 );\r
+ }\r
+ this.ct本体移動 = new CCounter( 0, 0x1a, 20, CDTXMania.Timer );\r
+ this.ct本体振動 = new CCounter( 0, 360, 4, CDTXMania.Timer );\r
+ base.b初めての進行描画 = false;\r
+ }\r
+ this.ct本体移動.t進行Loop();\r
+ this.ct本体振動.t進行Loop();\r
+ int num2 = ( this.dbゲージ値 == 1.0 ) ? ( (int) ( 352.0 * this.dbゲージ値 ) ) : ( (int) ( ( 352.0 * this.dbゲージ値 ) + ( 2.0 * Math.Sin( 6.2831853071795862 * ( ( (double) this.ct本体振動.n現在の値 ) / 360.0 ) ) ) ) );\r
+ if( num2 <= 0 )\r
+ {\r
+ return 0;\r
+ }\r
+ if( this.txゲージ != null )\r
+ {\r
+ this.txゲージ.vc拡大縮小倍率 = new Vector3( 1f, 1f, 1f );\r
+ this.txゲージ.n透明度 = 0xff;\r
+ this.txゲージ.b加算合成 = false;\r
+ }\r
+ int num3 = this.ct本体移動.n現在の値;\r
+ int y = ( 0x195 - num2 ) - num3;\r
+ int num5 = num2 + num3;\r
+ while( num5 > 0 )\r
+ {\r
+ Rectangle rectangle = ( this.dbゲージ値 == 1.0 ) ? new Rectangle( 0x10, 0, 0x10, 0x1b ) : new Rectangle( 0, 0, 0x10, 0x1b );\r
+ if( y < ( 0x195 - num2 ) )\r
+ {\r
+ int num6 = ( 0x195 - num2 ) - y;\r
+ rectangle.Y += num6;\r
+ rectangle.Height -= num6;\r
+ y += num6;\r
+ }\r
+ if( ( y + rectangle.Height ) > 0x195 )\r
+ {\r
+ int num7 = ( y + rectangle.Height ) - 0x195;\r
+ rectangle.Height -= num7;\r
+ }\r
+ if( rectangle.Top >= rectangle.Bottom )\r
+ {\r
+ break;\r
+ }\r
+ if( this.txゲージ != null )\r
+ {\r
+ this.txゲージ.t2D描画( CDTXMania.app.Device, 6, y, rectangle );\r
+ }\r
+ num5 -= rectangle.Height;\r
+ y += rectangle.Height;\r
+ }\r
+ if( this.txゲージ != null )\r
+ {\r
+ this.txゲージ.vc拡大縮小倍率 = new Vector3( 1f, 1f, 1f );\r
+ this.txゲージ.n透明度 = 180;\r
+ this.txゲージ.b加算合成 = true;\r
+ }\r
+ for( int i = 0; i < 4; i++ )\r
+ {\r
+ Rectangle rectangle2 = new Rectangle( 0x40 + ( i * 0x10 ), 0, 0x10, 0x40 );\r
+ int num9 = ( 0x195 - num2 ) + ( i * 0x40 );\r
+ if( num9 >= 0x195 )\r
+ {\r
+ break;\r
+ }\r
+ if( ( num9 + rectangle2.Height ) > 0x195 )\r
+ {\r
+ int num10 = ( num9 + rectangle2.Height ) - 0x195;\r
+ rectangle2.Height -= num10;\r
+ }\r
+ if( ( rectangle2.Top < rectangle2.Bottom ) && ( this.txゲージ != null ) )\r
+ {\r
+ this.txゲージ.t2D描画( CDTXMania.app.Device, 6, num9, rectangle2 );\r
+ }\r
+ }\r
+ if( this.txゲージ != null )\r
+ {\r
+ this.txゲージ.vc拡大縮小倍率 = new Vector3( 1f, 1f, 1f );\r
+ this.txゲージ.n透明度 = 0xff;\r
+ this.txゲージ.b加算合成 = false;\r
+ }\r
+ Rectangle rectangle3 = new Rectangle( 0x30, 0, 0x10, 0x10 );\r
+ int num11 = 0x195 - num2;\r
+ if( num11 < 0x195 )\r
+ {\r
+ if( ( num11 + rectangle3.Height ) > 0x195 )\r
+ {\r
+ int num12 = ( num11 + rectangle3.Height ) - 0x195;\r
+ rectangle3.Height -= num12;\r
+ }\r
+ if( ( rectangle3.Top < rectangle3.Bottom ) && ( this.txゲージ != null ) )\r
+ {\r
+ this.txゲージ.t2D描画( CDTXMania.app.Device, 6, num11, rectangle3 );\r
+ }\r
+ }\r
+ if( this.txゲージ != null )\r
+ {\r
+ this.txゲージ.b加算合成 = true;\r
+ }\r
+ for( int j = 0; j < 0x18; j++ )\r
+ {\r
+ this.st白い星[ j ].ct進行.t進行Loop();\r
+ int x = 6 + this.st白い星[ j ].x;\r
+ int num15 = ( 0x195 - num2 ) + ( 0x160 - this.st白い星[ j ].ct進行.n現在の値 );\r
+ int num16 = ( this.st白い星[ j ].ct進行.n現在の値 < 0xb0 ) ? 0 : ( (int) ( 255.0 * ( ( (double) ( this.st白い星[ j ].ct進行.n現在の値 - 0xb0 ) ) / 176.0 ) ) );\r
+ if( ( num16 != 0 ) && ( num15 < 0x191 ) )\r
+ {\r
+ Rectangle rectangle4 = new Rectangle( 0, 0x20, 0x20, 0x20 );\r
+ if( this.txゲージ != null )\r
+ {\r
+ this.txゲージ.vc拡大縮小倍率 = new Vector3( this.st白い星[ j ].fScale, this.st白い星[ j ].fScale, 1f );\r
+ this.txゲージ.n透明度 = num16;\r
+ this.txゲージ.t2D描画( CDTXMania.app.Device, x, num15, rectangle4 );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ private struct ST白い星\r
+ {\r
+ public int x;\r
+ public float fScale;\r
+ public CCounter ct進行;\r
+ }\r
+\r
+ private CCounter ct本体移動;\r
+ private CCounter ct本体振動;\r
+ private double dbゲージ値;\r
+ private const int STAR_MAX = 0x18;\r
+ private ST白い星[] st白い星 = new ST白い星[ 0x18 ];\r
+ private CTexture txゲージ;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CAct演奏DrumsコンボDGB : CAct演奏Combo共通\r
+ {\r
+ // CAct演奏Combo共通 実装\r
+\r
+ protected override void tコンボ表示・ギター( int nCombo値, int nジャンプインデックス )\r
+ {\r
+ int num;\r
+ int num2;\r
+ if( CDTXMania.DTX.bチップがある.Bass )\r
+ {\r
+ num = 0x222;\r
+ num2 = CDTXMania.ConfigIni.bReverse.Guitar ? 0xaf : 270;\r
+ if( base.txCOMBOギター != null )\r
+ {\r
+ base.txCOMBOギター.n透明度 = 120;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ num = 0x1c0;\r
+ num2 = CDTXMania.ConfigIni.bReverse.Guitar ? 0xee : 0xcf;\r
+ if( base.txCOMBOギター != null )\r
+ {\r
+ base.txCOMBOギター.n透明度 = 0xff;\r
+ }\r
+ }\r
+ base.tコンボ表示・ギター( nCombo値, num, num2, nジャンプインデックス );\r
+ }\r
+ protected override void tコンボ表示・ドラム( int nCombo値, int nジャンプインデックス )\r
+ {\r
+ base.tコンボ表示・ドラム( nCombo値, nジャンプインデックス );\r
+ }\r
+ protected override void tコンボ表示・ベース( int nCombo値, int nジャンプインデックス )\r
+ {\r
+ int num = 0x1b5;\r
+ int num2 = CDTXMania.ConfigIni.bReverse.Bass ? 0xaf : 270;\r
+ if( base.txCOMBOギター != null )\r
+ {\r
+ base.txCOMBOギター.n透明度 = 120;\r
+ }\r
+ base.tコンボ表示・ベース( nCombo値, num, num2, nジャンプインデックス );\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Drawing;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CAct演奏Drumsスコア : CAct演奏スコア共通\r
+ {\r
+ // CActivity 実装(共通クラスからの差分のみ)\r
+\r
+ public override unsafe int On進行描画()\r
+ {\r
+ if (!base.b活性化してない)\r
+ {\r
+ if (base.b初めての進行描画)\r
+ {\r
+ base.n進行用タイマ = CDTXMania.Timer.n現在時刻;\r
+ base.b初めての進行描画 = false;\r
+ }\r
+ long num = CDTXMania.Timer.n現在時刻;\r
+ if (num < base.n進行用タイマ)\r
+ {\r
+ base.n進行用タイマ = num;\r
+ }\r
+ while ((num - base.n進行用タイマ) >= 10)\r
+ {\r
+ for (int j = 0; j < 3; j++)\r
+ {\r
+ this.n現在表示中のスコア[j] += this.nスコアの増分[j];\r
+\r
+ if (this.n現在表示中のスコア[j] > this.n現在の本当のスコア[j])\r
+ this.n現在表示中のスコア[j] = this.n現在の本当のスコア[j];\r
+ }\r
+ base.n進行用タイマ += 10;\r
+ }\r
+ string str = this.n現在表示中のスコア.Drums.ToString("0000000000");\r
+ for (int i = 0; i < 10; i++)\r
+ {\r
+ Rectangle rectangle;\r
+ char ch = str[i];\r
+ if (ch.Equals(' '))\r
+ {\r
+ rectangle = new Rectangle(0, 0, 12, 0x18);\r
+ }\r
+ else\r
+ {\r
+ int num4 = int.Parse(str.Substring(i, 1));\r
+ if (num4 < 5)\r
+ {\r
+ rectangle = new Rectangle(num4 * 12, 0, 12, 0x18);\r
+ }\r
+ else\r
+ {\r
+ rectangle = new Rectangle((num4 - 5) * 12, 0x18, 12, 0x18);\r
+ }\r
+ }\r
+ if (base.txScore != null)\r
+ {\r
+ base.txScore.t2D描画(CDTXMania.app.Device, 0x164 + (i * 12), 14, rectangle);\r
+ }\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using System.Drawing;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CAct演奏Drumsステータスパネル : CActivity\r
+ {\r
+ // コンストラクタ\r
+\r
+ public CAct演奏Drumsステータスパネル()\r
+ {\r
+ STATUSPANEL[] statuspanelArray = new STATUSPANEL[ 12 ];\r
+ STATUSPANEL statuspanel = new STATUSPANEL();\r
+ statuspanel.status = 0;\r
+ statuspanel.label = "DTXMANIA";\r
+ statuspanelArray[ 0 ] = statuspanel;\r
+ STATUSPANEL statuspanel2 = new STATUSPANEL();\r
+ statuspanel2.status = 1;\r
+ statuspanel2.label = "EXTREME";\r
+ statuspanelArray[ 1 ] = statuspanel2;\r
+ STATUSPANEL statuspanel3 = new STATUSPANEL();\r
+ statuspanel3.status = 2;\r
+ statuspanel3.label = "ADVANCED";\r
+ statuspanelArray[ 2 ] = statuspanel3;\r
+ STATUSPANEL statuspanel4 = new STATUSPANEL();\r
+ statuspanel4.status = 2;\r
+ statuspanel4.label = "ADVANCE";\r
+ statuspanelArray[ 3 ] = statuspanel4;\r
+ STATUSPANEL statuspanel5 = new STATUSPANEL();\r
+ statuspanel5.status = 3;\r
+ statuspanel5.label = "BASIC";\r
+ statuspanelArray[ 4 ] = statuspanel5;\r
+ STATUSPANEL statuspanel6 = new STATUSPANEL();\r
+ statuspanel6.status = 4;\r
+ statuspanel6.label = "RAW";\r
+ statuspanelArray[ 5 ] = statuspanel6;\r
+ STATUSPANEL statuspanel7 = new STATUSPANEL();\r
+ statuspanel7.status = 5;\r
+ statuspanel7.label = "REAL";\r
+ statuspanelArray[ 6 ] = statuspanel7;\r
+ STATUSPANEL statuspanel8 = new STATUSPANEL();\r
+ statuspanel8.status = 6;\r
+ statuspanel8.label = "EASY";\r
+ statuspanelArray[ 7 ] = statuspanel8;\r
+ STATUSPANEL statuspanel9 = new STATUSPANEL();\r
+ statuspanel9.status = 7;\r
+ statuspanel9.label = "EX-REAL";\r
+ statuspanelArray[ 8 ] = statuspanel9;\r
+ STATUSPANEL statuspanel10 = new STATUSPANEL();\r
+ statuspanel10.status = 7;\r
+ statuspanel10.label = "ExREAL";\r
+ statuspanelArray[ 9 ] = statuspanel10;\r
+ STATUSPANEL statuspanel11 = new STATUSPANEL();\r
+ statuspanel11.status = 7;\r
+ statuspanel11.label = "ExpertReal";\r
+ statuspanelArray[ 10 ] = statuspanel11;\r
+ STATUSPANEL statuspanel12 = new STATUSPANEL();\r
+ statuspanel12.status = 8;\r
+ statuspanel12.label = "NORMAL";\r
+ statuspanelArray[ 11 ] = statuspanel12;\r
+ this.stパネルマップ = statuspanelArray;\r
+ base.b活性化してない = true;\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ public void tラベル名からステータスパネルを決定する( string strラベル名 )\r
+ {\r
+ if( string.IsNullOrEmpty( strラベル名 ) )\r
+ {\r
+ this.nStatus = 0;\r
+ }\r
+ else\r
+ {\r
+ foreach( STATUSPANEL statuspanel in this.stパネルマップ )\r
+ {\r
+ if( strラベル名.Equals( statuspanel.label ) )\r
+ {\r
+ this.nStatus = statuspanel.status;\r
+ return;\r
+ }\r
+ }\r
+ this.nStatus = 0;\r
+ }\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ this.nStatus = 0;\r
+ base.On活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.txStatusPanels = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlay status panels right.png" ) );\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.txStatusPanels );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( !base.b活性化してない && ( this.txStatusPanels != null ) )\r
+ {\r
+ this.txStatusPanels.t2D描画( CDTXMania.app.Device, 0x26f, 0x14f, new Rectangle( this.nStatus * 15, 0xb7, 15, 0x49 ) );\r
+ int drums = CDTXMania.ConfigIni.n譜面スクロール速度.Drums;\r
+ if( drums < 0 )\r
+ {\r
+ drums = 0;\r
+ }\r
+ if( drums > 15 )\r
+ {\r
+ drums = 15;\r
+ }\r
+ this.txStatusPanels.t2D描画( CDTXMania.app.Device, 0x26f, 0x3b, new Rectangle( drums * 15, 0, 15, 0xac ) );\r
+ }\r
+ return 0;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ private struct STATUSPANEL\r
+ {\r
+ public string label;\r
+ public int status;\r
+ }\r
+\r
+ private int nStatus;\r
+ private STATUSPANEL[] stパネルマップ;\r
+ private CTexture txStatusPanels;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using SlimDX;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CAct演奏DrumsチップファイアD : CActivity\r
+ {\r
+ // コンストラクタ\r
+\r
+ public CAct演奏DrumsチップファイアD()\r
+ {\r
+ base.b活性化してない = true;\r
+ }\r
+ \r
+ \r
+ // メソッド\r
+\r
+ public void Start( Eドラムレーン lane )\r
+ {\r
+ this.Start( lane, false, false, false );\r
+ }\r
+ public void Start( Eドラムレーン lane, bool bフィルイン )\r
+ {\r
+ this.Start( lane, bフィルイン, false, false );\r
+ }\r
+ public void Start( Eドラムレーン lane, bool bフィルイン, bool b大波 )\r
+ {\r
+ this.Start( lane, bフィルイン, b大波, false );\r
+ }\r
+ public void Start( Eドラムレーン lane, bool bフィルイン, bool b大波, bool b細波 )\r
+ {\r
+ if( this.tx火花 != null )\r
+ {\r
+ float num = CDTXMania.Random.Next( 360 );\r
+ for( int i = 0; i < 8; i++ )\r
+ {\r
+ for( int j = 0; j < 0x40; j++ )\r
+ {\r
+ if( !this.st火花[ j ].b使用中 )\r
+ {\r
+ this.st火花[ j ].b使用中 = true;\r
+ this.st火花[ j ].nLane = (int) lane;\r
+ this.st火花[ j ].ct進行 = new CCounter( 0, 70, 3, CDTXMania.Timer );\r
+ this.st火花[ j ].f回転単位 = C変換.DegreeToRadian( (float) ( num + ( i * 90f ) ) );\r
+ this.st火花[ j ].f回転方向 = ( i < 4 ) ? 1f : -2f;\r
+ this.st火花[ j ].fサイズ = ( i < 4 ) ? 1f : 0.5f;\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ if( bフィルイン && ( this.tx青い星 != null ) )\r
+ {\r
+ for( int k = 0; k < 0x10; k++ )\r
+ {\r
+ for( int m = 0; m < 0x100; m++ )\r
+ {\r
+ if( !this.st青い星[ m ].b使用中 )\r
+ {\r
+ this.st青い星[ m ].b使用中 = true;\r
+ int num6 = CDTXMania.Random.Next( 360 );\r
+ double num7 = 0.9 + ( ( (double) CDTXMania.Random.Next( 40 ) ) / 100.0 );\r
+ this.st青い星[ m ].nLane = (int) lane;\r
+ this.st青い星[ m ].ct進行 = new CCounter( 0, 100, 7, CDTXMania.Timer );\r
+ this.st青い星[ m ].fX = this.nレーンの中央X座標[ (int) lane ];\r
+ this.st青い星[ m ].fY = CDTXMania.ConfigIni.bReverse.Drums ? ( (float) 0x37 ) : ( (float) 0x1a9 );\r
+ this.st青い星[ m ].f加速度X = (float) ( num7 * Math.Cos( ( 6.2831853071795862 * num6 ) / 360.0 ) );\r
+ this.st青い星[ m ].f加速度Y = (float) ( num7 * ( Math.Sin( ( 6.2831853071795862 * num6 ) / 360.0 ) - 0.2 ) );\r
+ this.st青い星[ m ].f加速度の加速度X = 0.995f;\r
+ this.st青い星[ m ].f加速度の加速度Y = 0.995f;\r
+ this.st青い星[ m ].f重力加速度 = 0.00355f;\r
+ this.st青い星[ m ].f半径 = (float) ( 0.5 + ( ( (double) CDTXMania.Random.Next( 30 ) ) / 100.0 ) );\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ if( b大波 && ( this.tx大波 != null ) )\r
+ {\r
+ for( int n = 0; n < 4; n++ )\r
+ {\r
+ for( int num9 = 0; num9 < 20; num9++ )\r
+ {\r
+ if( !this.st大波[ num9 ].b使用中 )\r
+ {\r
+ this.st大波[ num9 ].b使用中 = true;\r
+ this.st大波[ num9 ].nLane = (int) lane;\r
+ this.st大波[ num9 ].f半径 = ( (float) ( ( 20 - CDTXMania.Random.Next( 40 ) ) + 100 ) ) / 100f;\r
+ this.st大波[ num9 ].n進行速度ms = 10;\r
+ this.st大波[ num9 ].ct進行 = new CCounter( 0, 100, this.st大波[ num9 ].n進行速度ms, CDTXMania.Timer );\r
+ this.st大波[ num9 ].ct進行.n現在の値 = n * 10;\r
+ this.st大波[ num9 ].f角度X = C変換.DegreeToRadian( (float) ( ( ( (double) ( CDTXMania.Random.Next( 100 ) * 50 ) ) / 100.0 ) + 30.0 ) );\r
+ this.st大波[ num9 ].f角度Y = C変換.DegreeToRadian( this.b大波Balance ? ( this.fY波の最小仰角[ (int) lane ] + CDTXMania.Random.Next( 30 ) ) : ( this.fY波の最大仰角[ (int) lane ] - CDTXMania.Random.Next( 30 ) ) );\r
+ this.st大波[ num9 ].f回転単位 = C変換.DegreeToRadian( (float) 0f );\r
+ this.st大波[ num9 ].f回転方向 = 1f;\r
+ this.b大波Balance = !this.b大波Balance;\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ if( b細波 && ( this.tx細波 != null ) )\r
+ {\r
+ for( int num10 = 0; num10 < 1; num10++ )\r
+ {\r
+ for( int num11 = 0; num11 < 20; num11++ )\r
+ {\r
+ if( !this.st細波[ num11 ].b使用中 )\r
+ {\r
+ this.st細波[ num11 ].b使用中 = true;\r
+ this.st細波[ num11 ].nLane = (int) lane;\r
+ this.st細波[ num11 ].f半径 = ( (float) ( ( 20 - CDTXMania.Random.Next( 40 ) ) + 100 ) ) / 100f;\r
+ this.st細波[ num11 ].n進行速度ms = 8;\r
+ this.st細波[ num11 ].ct進行 = new CCounter( 0, 100, this.st細波[ num11 ].n進行速度ms, CDTXMania.Timer );\r
+ this.st細波[ num11 ].ct進行.n現在の値 = 0;\r
+ this.st細波[ num11 ].f角度X = C変換.DegreeToRadian( (float) ( ( ( (double) ( CDTXMania.Random.Next( 100 ) * 50 ) ) / 100.0 ) + 30.0 ) );\r
+ this.st細波[ num11 ].f角度Y = C変換.DegreeToRadian( this.b細波Balance ? ( this.fY波の最小仰角[ (int) lane ] + CDTXMania.Random.Next( 30 ) ) : ( this.fY波の最大仰角[ (int) lane ] - CDTXMania.Random.Next( 30 ) ) );\r
+ this.b細波Balance = !this.b細波Balance;\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ for( int i = 0; i < 0x40; i++ )\r
+ {\r
+ ST火花 st火花2 = new ST火花();\r
+ ST火花 st火花 = st火花2;\r
+ st火花.b使用中 = false;\r
+ st火花.ct進行 = new CCounter();\r
+ this.st火花[ i ] = st火花;\r
+ }\r
+ for( int j = 0; j < 0x100; j++ )\r
+ {\r
+ ST青い星 st青い星2 = new ST青い星();\r
+ ST青い星 st青い星 = st青い星2;\r
+ st青い星.b使用中 = false;\r
+ st青い星.ct進行 = new CCounter();\r
+ this.st青い星[ j ] = st青い星;\r
+ }\r
+ for( int k = 0; k < 20; k++ )\r
+ {\r
+ ST大波 st大波2 = new ST大波();\r
+ ST大波 st大波 = st大波2;\r
+ st大波.b使用中 = false;\r
+ st大波.ct進行 = new CCounter();\r
+ this.st大波[ k ] = st大波;\r
+ ST細波 st細波2 = new ST細波();\r
+ ST細波 st細波 = st細波2;\r
+ st細波.b使用中 = false;\r
+ st細波.ct進行 = new CCounter();\r
+ this.st細波[ k ] = st細波;\r
+ }\r
+ base.On活性化();\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ for( int i = 0; i < 0x40; i++ )\r
+ {\r
+ this.st火花[ i ].ct進行 = null;\r
+ }\r
+ for( int j = 0; j < 0x100; j++ )\r
+ {\r
+ this.st青い星[ j ].ct進行 = null;\r
+ }\r
+ for( int k = 0; k < 20; k++ )\r
+ {\r
+ this.st大波[ k ].ct進行 = null;\r
+ this.st細波[ k ].ct進行 = null;\r
+ }\r
+ base.On非活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.tx火花 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlayDrums chip fire.png" ) );\r
+ if( this.tx火花 != null )\r
+ {\r
+ this.tx火花.b加算合成 = true;\r
+ }\r
+ this.tx青い星 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlayDrums chip star.png" ) );\r
+ if( this.tx青い星 != null )\r
+ {\r
+ this.tx青い星.b加算合成 = true;\r
+ }\r
+ this.tx大波 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlayDrums chip wave.png" ) );\r
+ if( this.tx大波 != null )\r
+ {\r
+ this.tx大波.b加算合成 = true;\r
+ }\r
+ this.tx細波 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlayDrums chip wave2.png" ) );\r
+ if( this.tx細波 != null )\r
+ {\r
+ this.tx細波.b加算合成 = true;\r
+ }\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.tx火花 );\r
+ CDTXMania.tテクスチャの解放( ref this.tx青い星 );\r
+ CDTXMania.tテクスチャの解放( ref this.tx大波 );\r
+ CDTXMania.tテクスチャの解放( ref this.tx細波 );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ for( int i = 0; i < 0x40; i++ )\r
+ {\r
+ if( this.st火花[ i ].b使用中 )\r
+ {\r
+ this.st火花[ i ].ct進行.t進行();\r
+ if( this.st火花[ i ].ct進行.b終了値に達した )\r
+ {\r
+ this.st火花[ i ].ct進行.t停止();\r
+ this.st火花[ i ].b使用中 = false;\r
+ }\r
+ Matrix identity = Matrix.Identity;\r
+ float num2 = ( (float) this.st火花[ i ].ct進行.n現在の値 ) / 70f;\r
+ float num3 = this.st火花[ i ].f回転単位 + ( this.st火花[ i ].f回転方向 * C変換.DegreeToRadian( (float) ( 60f * num2 ) ) );\r
+ float num4 = ( (float) ( 0.2 + ( 0.8 * Math.Cos( ( ( (double) this.st火花[ i ].ct進行.n現在の値 ) / 50.0 ) * 1.5707963267948966 ) ) ) ) * this.st火花[ i ].fサイズ;\r
+ identity *= Matrix.Scaling( 0.2f + num4, 0.2f + this.st火花[ i ].fサイズ, 1f );\r
+ identity *= Matrix.RotationZ( num3 + ( (float) 1.5707963267948966 ) );\r
+ float num5 = ( (float) ( 0.8 * Math.Sin( num2 * 1.5707963267948966 ) ) ) * this.st火花[ i ].fサイズ;\r
+ identity *= Matrix.Translation( ( this.nレーンの中央X座標[ this.st火花[ i ].nLane ] + ( ( (float) Math.Cos( (double) num3 ) ) * num5 ) ) - 320f, -( ( ( CDTXMania.ConfigIni.bReverse.Drums ? ( (float) 0x37 ) : ( (float) 0x1a9 ) ) + ( ( (float) Math.Sin( (double) num3 ) ) * num5 ) ) - 240f ), 0f );\r
+ if( this.tx火花 != null )\r
+ {\r
+ this.tx火花.t3D描画( CDTXMania.app.Device, identity );\r
+ }\r
+ }\r
+ }\r
+ for( int j = 0; j < 0x100; j++ )\r
+ {\r
+ if( this.st青い星[ j ].b使用中 )\r
+ {\r
+ this.st青い星[ j ].n前回のValue = this.st青い星[ j ].ct進行.n現在の値;\r
+ this.st青い星[ j ].ct進行.t進行();\r
+ if( this.st青い星[ j ].ct進行.b終了値に達した )\r
+ {\r
+ this.st青い星[ j ].ct進行.t停止();\r
+ this.st青い星[ j ].b使用中 = false;\r
+ }\r
+ for( int n = this.st青い星[ j ].n前回のValue; n < this.st青い星[ j ].ct進行.n現在の値; n++ )\r
+ {\r
+ this.st青い星[ j ].fX += this.st青い星[ j ].f加速度X;\r
+ this.st青い星[ j ].fY -= this.st青い星[ j ].f加速度Y;\r
+ this.st青い星[ j ].f加速度X *= this.st青い星[ j ].f加速度の加速度X;\r
+ this.st青い星[ j ].f加速度Y *= this.st青い星[ j ].f加速度の加速度Y;\r
+ this.st青い星[ j ].f加速度Y -= this.st青い星[ j ].f重力加速度;\r
+ }\r
+ Matrix mat = Matrix.Identity;\r
+ float x = (float) ( this.st青い星[ j ].f半径 * Math.Cos( ( 1.5707963267948966 * this.st青い星[ j ].ct進行.n現在の値 ) / 100.0 ) );\r
+ mat *= Matrix.Scaling( x, x, 1f );\r
+ mat *= Matrix.Translation( this.st青い星[ j ].fX - 320f, -( this.st青い星[ j ].fY - 240f ), 0f );\r
+ if( this.tx青い星 != null )\r
+ {\r
+ this.tx青い星.t3D描画( CDTXMania.app.Device, mat );\r
+ }\r
+ }\r
+ }\r
+ for( int k = 0; k < 20; k++ )\r
+ {\r
+ if( this.st大波[ k ].b使用中 )\r
+ {\r
+ this.st大波[ k ].ct進行.t進行();\r
+ if( this.st大波[ k ].ct進行.b終了値に達した )\r
+ {\r
+ this.st大波[ k ].ct進行.t停止();\r
+ this.st大波[ k ].b使用中 = false;\r
+ }\r
+ if( this.st大波[ k ].ct進行.n現在の値 >= 0 )\r
+ {\r
+ Matrix matrix3 = Matrix.Identity;\r
+ float num10 = ( (float) this.st大波[ k ].ct進行.n現在の値 ) / 100f;\r
+ float angle = this.st大波[ k ].f回転単位 + ( this.st大波[ k ].f回転方向 * C変換.DegreeToRadian( (float) ( 60f * num10 ) ) );\r
+ float num12 = 1f;\r
+ if( num10 < 0.4f )\r
+ {\r
+ num12 = 2.5f * num10;\r
+ }\r
+ else if( num10 < 0.8f )\r
+ {\r
+ num12 = (float) ( 1.0 + ( 10.1 * ( 1.0 - Math.Cos( ( 1.5707963267948966 * ( num10 - 0.4 ) ) * 2.5 ) ) ) );\r
+ }\r
+ else\r
+ {\r
+ num12 = 11.1f + ( 12.5f * ( num10 - 0.8f ) );\r
+ }\r
+ int num13 = 0xff;\r
+ if( num10 < 0.75f )\r
+ {\r
+ num13 = 0x37;\r
+ }\r
+ else\r
+ {\r
+ num13 = (int) ( ( 55f * ( 1f - num10 ) ) / 0.25f );\r
+ }\r
+ matrix3 *= Matrix.Scaling( num12 * this.st大波[ k ].f半径, num12 * this.st大波[ k ].f半径, 1f );\r
+ matrix3 *= Matrix.RotationZ( angle );\r
+ matrix3 *= Matrix.RotationX( this.st大波[ k ].f角度X );\r
+ matrix3 *= Matrix.RotationY( this.st大波[ k ].f角度Y );\r
+ matrix3 *= Matrix.Translation( this.nレーンの中央X座標[ this.st大波[ k ].nLane ] - 320f, -( ( CDTXMania.ConfigIni.bReverse.Drums ? ( (float) 0x37 ) : ( (float) 0x1a9 ) ) - 240f ), 0f );\r
+ if( this.tx大波 != null )\r
+ {\r
+ this.tx大波.n透明度 = num13;\r
+ this.tx大波.t3D描画( CDTXMania.app.Device, matrix3 );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ for( int m = 0; m < 20; m++ )\r
+ {\r
+ if( this.st細波[ m ].b使用中 )\r
+ {\r
+ this.st細波[ m ].ct進行.t進行();\r
+ if( this.st細波[ m ].ct進行.b終了値に達した )\r
+ {\r
+ this.st細波[ m ].ct進行.t停止();\r
+ this.st細波[ m ].b使用中 = false;\r
+ }\r
+ if( this.st細波[ m ].ct進行.n現在の値 >= 0 )\r
+ {\r
+ Matrix matrix4 = Matrix.Identity;\r
+ float num15 = ( (float) this.st細波[ m ].ct進行.n現在の値 ) / 100f;\r
+ float num16 = 14f * num15;\r
+ int num17 = ( num15 < 0.5f ) ? 0x9b : ( (int) ( ( 155f * ( 1f - num15 ) ) / 1f ) );\r
+ matrix4 *= Matrix.Scaling( num16 * this.st細波[ m ].f半径, num16 * this.st細波[ m ].f半径, 1f );\r
+ matrix4 *= Matrix.RotationX( this.st細波[ m ].f角度X );\r
+ matrix4 *= Matrix.RotationY( this.st細波[ m ].f角度Y );\r
+ matrix4 *= Matrix.Translation( this.nレーンの中央X座標[ this.st細波[ m ].nLane ] - 320f, -( ( CDTXMania.ConfigIni.bReverse.Drums ? ( (float) 0x37 ) : ( (float) 0x1a9 ) ) - 240f ), 0f );\r
+ if( this.tx細波 != null )\r
+ {\r
+ this.tx細波.n透明度 = num17;\r
+ this.tx細波.t3D描画( CDTXMania.app.Device, matrix4 );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+ \r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ private struct ST火花\r
+ {\r
+ public int nLane;\r
+ public bool b使用中;\r
+ public CCounter ct進行;\r
+ public float f回転単位;\r
+ public float f回転方向;\r
+ public float fサイズ;\r
+ }\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ private struct ST細波\r
+ {\r
+ public int nLane;\r
+ public bool b使用中;\r
+ public CCounter ct進行;\r
+ public float f角度X;\r
+ public float f角度Y;\r
+ public float f半径;\r
+ public int n進行速度ms;\r
+ }\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ private struct ST青い星\r
+ {\r
+ public int nLane;\r
+ public bool b使用中;\r
+ public CCounter ct進行;\r
+ public int n前回のValue;\r
+ public float fX;\r
+ public float fY;\r
+ public float f加速度X;\r
+ public float f加速度Y;\r
+ public float f加速度の加速度X;\r
+ public float f加速度の加速度Y;\r
+ public float f重力加速度;\r
+ public float f半径;\r
+ }\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ private struct ST大波\r
+ {\r
+ public int nLane;\r
+ public bool b使用中;\r
+ public CCounter ct進行;\r
+ public float f角度X;\r
+ public float f角度Y;\r
+ public float f半径;\r
+ public int n進行速度ms;\r
+ public float f回転単位;\r
+ public float f回転方向;\r
+ }\r
+\r
+ private const int BIGWAVE_MAX = 20;\r
+ private bool b細波Balance;\r
+ private bool b大波Balance;\r
+ private const int FIRE_MAX = 0x40;\r
+ private readonly float[] fY波の最小仰角 = new float[] { -130f, -126f, -120f, -118f, -110f, -108f, -103f, -97f };\r
+ private readonly float[] fY波の最大仰角 = new float[] { 70f, 72f, 77f, 84f, 89f, 91f, 99f, 107f };\r
+ private readonly int[] nレーンの中央X座標 = new int[] { 0x36, 0x5c, 0x7e, 0xa7, 0xd0, 0xf2, 0x114, 0x139 };\r
+ private const int STAR_MAX = 0x100;\r
+ private ST火花[] st火花 = new ST火花[ 0x40 ];\r
+ private ST細波[] st細波 = new ST細波[ 20 ];\r
+ private ST青い星[] st青い星 = new ST青い星[ 0x100 ];\r
+ private ST大波[] st大波 = new ST大波[ 20 ];\r
+ private CTexture tx火花;\r
+ private CTexture tx細波;\r
+ private CTexture tx青い星;\r
+ private CTexture tx大波;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Drawing;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CAct演奏DrumsチップファイアGB : CAct演奏チップファイアGB\r
+ {\r
+ // メソッド\r
+\r
+ public void Start( int nLane )\r
+ {\r
+ if( ( nLane < 0 ) && ( nLane > 5 ) )\r
+ {\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ E楽器パート e楽器パート = ( nLane < 3 ) ? E楽器パート.GUITAR : E楽器パート.BASS;\r
+ int index = nLane;\r
+ if( CDTXMania.ConfigIni.bLeft[ (int) e楽器パート ] )\r
+ {\r
+ index = ( ( index / 3 ) * 3 ) + ( 2 - ( index % 3 ) );\r
+ }\r
+ int x = this.pt中央[ index ].X;\r
+ int y = this.pt中央[ index ].Y;\r
+ if( CDTXMania.ConfigIni.bReverse[ (int) e楽器パート ] )\r
+ {\r
+ y = ( nLane < 3 ) ? 0x176 : 0x176;\r
+ }\r
+ base.Start( nLane, x, y );\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private readonly Point[] pt中央 = new Point[] { new Point( 0x207, 0x5f ), new Point( 0x221, 0x5f ), new Point( 0x23b, 0x5f ), new Point( 410, 0x5f ), new Point( 0x1b4, 0x5f ), new Point( 0x1ce, 0x5f ) };\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using System.Drawing;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CAct演奏Drumsパッド : CActivity\r
+ {\r
+ // コンストラクタ\r
+\r
+ public CAct演奏Drumsパッド()\r
+ {\r
+ ST基本位置[] st基本位置Array = new ST基本位置[ 9 ];\r
+ ST基本位置 st基本位置 = new ST基本位置();\r
+ st基本位置.x = 0x16;\r
+ st基本位置.y = 0;\r
+ st基本位置.rc = new Rectangle( 0, 0, 0x40, 0x40 );\r
+ st基本位置Array[ 0 ] = st基本位置;\r
+ ST基本位置 st基本位置2 = new ST基本位置();\r
+ st基本位置2.x = 0x3d;\r
+ st基本位置2.y = 11;\r
+ st基本位置2.rc = new Rectangle( 0x40, 0, 0x40, 0x40 );\r
+ st基本位置Array[ 1 ] = st基本位置2;\r
+ ST基本位置 st基本位置3 = new ST基本位置();\r
+ st基本位置3.x = 0x60;\r
+ st基本位置3.y = 8;\r
+ st基本位置3.rc = new Rectangle( 0x80, 0, 0x40, 0x40 );\r
+ st基本位置Array[ 2 ] = st基本位置3;\r
+ ST基本位置 st基本位置4 = new ST基本位置();\r
+ st基本位置4.x = 0x8a;\r
+ st基本位置4.y = 7;\r
+ st基本位置4.rc = new Rectangle( 0, 0x40, 0x40, 0x40 );\r
+ st基本位置Array[ 3 ] = st基本位置4;\r
+ ST基本位置 st基本位置5 = new ST基本位置();\r
+ st基本位置5.x = 0xb3;\r
+ st基本位置5.y = 0;\r
+ st基本位置5.rc = new Rectangle( 0x40, 0x40, 0x40, 0x40 );\r
+ st基本位置Array[ 4 ] = st基本位置5;\r
+ ST基本位置 st基本位置6 = new ST基本位置();\r
+ st基本位置6.x = 0xd4;\r
+ st基本位置6.y = 5;\r
+ st基本位置6.rc = new Rectangle( 0x80, 0x40, 0x40, 0x40 );\r
+ st基本位置Array[ 5 ] = st基本位置6;\r
+ ST基本位置 st基本位置7 = new ST基本位置();\r
+ st基本位置7.x = 250;\r
+ st基本位置7.y = 15;\r
+ st基本位置7.rc = new Rectangle( 0, 0x80, 0x40, 0x40 );\r
+ st基本位置Array[ 6 ] = st基本位置7;\r
+ ST基本位置 st基本位置8 = new ST基本位置();\r
+ st基本位置8.x = 0x11a;\r
+ st基本位置8.y = 0;\r
+ st基本位置8.rc = new Rectangle( 0x40, 0x80, 0x40, 0x40 );\r
+ st基本位置Array[ 7 ] = st基本位置8;\r
+ ST基本位置 st基本位置9 = new ST基本位置();\r
+ st基本位置9.x = 0x130;\r
+ st基本位置9.y = 8;\r
+ st基本位置9.rc = new Rectangle( 0x80, 0x80, 0x40, 0x40 );\r
+ st基本位置Array[ 8 ] = st基本位置9;\r
+ this.st基本位置 = st基本位置Array;\r
+ base.b活性化してない = true;\r
+ }\r
+ \r
+ \r
+ // メソッド\r
+\r
+ public void Hit( int nLane )\r
+ {\r
+ this.stパッド状態[ nLane ].n明るさ = 6;\r
+ this.stパッド状態[ nLane ].nY座標加速度dot = 2;\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ this.nフラッシュ制御タイマ = -1;\r
+ this.nY座標制御タイマ = -1;\r
+ for( int i = 0; i < 9; i++ )\r
+ {\r
+ STパッド状態 stパッド状態2 = new STパッド状態();\r
+ STパッド状態 stパッド状態 = stパッド状態2;\r
+ stパッド状態.nY座標オフセットdot = 0;\r
+ stパッド状態.nY座標加速度dot = 0;\r
+ stパッド状態.n明るさ = 0;\r
+ this.stパッド状態[ i ] = stパッド状態;\r
+ }\r
+ base.On活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.txパッド = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlayDrums pads.png" ) );\r
+ this.tx光るパッド = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlayDrums pads flush.png" ) );\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.txパッド );\r
+ CDTXMania.tテクスチャの解放( ref this.tx光るパッド );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ if( base.b初めての進行描画 )\r
+ {\r
+ this.nフラッシュ制御タイマ = CDTXMania.Timer.n現在時刻;\r
+ this.nY座標制御タイマ = CDTXMania.Timer.n現在時刻;\r
+ base.b初めての進行描画 = false;\r
+ }\r
+ long num = CDTXMania.Timer.n現在時刻;\r
+ if( num < this.nフラッシュ制御タイマ )\r
+ {\r
+ this.nフラッシュ制御タイマ = num;\r
+ }\r
+ while( ( num - this.nフラッシュ制御タイマ ) >= 15 )\r
+ {\r
+ for( int j = 0; j < 9; j++ )\r
+ {\r
+ if( this.stパッド状態[ j ].n明るさ > 0 )\r
+ {\r
+ this.stパッド状態[ j ].n明るさ--;\r
+ }\r
+ }\r
+ this.nフラッシュ制御タイマ += 15;\r
+ }\r
+ long num3 = CDTXMania.Timer.n現在時刻;\r
+ if( num3 < this.nY座標制御タイマ )\r
+ {\r
+ this.nY座標制御タイマ = num3;\r
+ }\r
+ while( ( num3 - this.nY座標制御タイマ ) >= 5 )\r
+ {\r
+ for( int k = 0; k < 9; k++ )\r
+ {\r
+ this.stパッド状態[ k ].nY座標オフセットdot += this.stパッド状態[ k ].nY座標加速度dot;\r
+ if( this.stパッド状態[ k ].nY座標オフセットdot > 15 )\r
+ {\r
+ this.stパッド状態[ k ].nY座標オフセットdot = 15;\r
+ this.stパッド状態[ k ].nY座標加速度dot = -1;\r
+ }\r
+ else if( this.stパッド状態[ k ].nY座標オフセットdot < 0 )\r
+ {\r
+ this.stパッド状態[ k ].nY座標オフセットdot = 0;\r
+ this.stパッド状態[ k ].nY座標加速度dot = 0;\r
+ }\r
+ }\r
+ this.nY座標制御タイマ += 5;\r
+ }\r
+ for( int i = 0; i < 9; i++ )\r
+ {\r
+ int index = this.n描画順[ i ];\r
+ int x = this.st基本位置[ index ].x;\r
+ int y = ( this.st基本位置[ index ].y + ( CDTXMania.ConfigIni.bReverse.Drums ? -10 : 0x19e ) ) + this.stパッド状態[ index ].nY座標オフセットdot;\r
+ if( this.txパッド != null )\r
+ {\r
+ this.txパッド.t2D描画( CDTXMania.app.Device, x, y, this.st基本位置[ index ].rc );\r
+ }\r
+ if( this.tx光るパッド != null )\r
+ {\r
+ this.tx光るパッド.n透明度 = ( this.stパッド状態[ index ].n明るさ * 40 ) + 15;\r
+ this.tx光るパッド.t2D描画( CDTXMania.app.Device, x, y, this.st基本位置[ index ].rc );\r
+ }\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ private struct STパッド状態\r
+ {\r
+ public int n明るさ;\r
+ public int nY座標オフセットdot;\r
+ public int nY座標加速度dot;\r
+ }\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ private struct ST基本位置\r
+ {\r
+ public int x;\r
+ public int y;\r
+ public Rectangle rc;\r
+ }\r
+\r
+ private long nY座標制御タイマ;\r
+ private long nフラッシュ制御タイマ;\r
+ private readonly int[] n描画順 = new int[] { 3, 6, 5, 4, 2, 1, 8, 7, 0 };\r
+ private STパッド状態[] stパッド状態 = new STパッド状態[ 9 ];\r
+ private readonly ST基本位置[] st基本位置;\r
+ private CTexture txパッド;\r
+ private CTexture tx光るパッド;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using System.Drawing;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CAct演奏DrumsレーンフラッシュD : CActivity\r
+ {\r
+ // コンストラクタ\r
+\r
+ public CAct演奏DrumsレーンフラッシュD()\r
+ {\r
+ STレーンサイズ[] stレーンサイズArray = new STレーンサイズ[ 8 ];\r
+ STレーンサイズ stレーンサイズ = new STレーンサイズ();\r
+ stレーンサイズ.x = 0x24;\r
+ stレーンサイズ.w = 0x24;\r
+ stレーンサイズArray[ 0 ] = stレーンサイズ;\r
+ STレーンサイズ stレーンサイズ2 = new STレーンサイズ();\r
+ stレーンサイズ2.x = 0x4d;\r
+ stレーンサイズ2.w = 30;\r
+ stレーンサイズArray[ 1 ] = stレーンサイズ2;\r
+ STレーンサイズ stレーンサイズ3 = new STレーンサイズ();\r
+ stレーンサイズ3.x = 0x6f;\r
+ stレーンサイズ3.w = 30;\r
+ stレーンサイズArray[ 2 ] = stレーンサイズ3;\r
+ STレーンサイズ stレーンサイズ4 = new STレーンサイズ();\r
+ stレーンサイズ4.x = 0x92;\r
+ stレーンサイズ4.w = 0x2a;\r
+ stレーンサイズArray[ 3 ] = stレーンサイズ4;\r
+ STレーンサイズ stレーンサイズ5 = new STレーンサイズ();\r
+ stレーンサイズ5.x = 0xc1;\r
+ stレーンサイズ5.w = 30;\r
+ stレーンサイズArray[ 4 ] = stレーンサイズ5;\r
+ STレーンサイズ stレーンサイズ6 = new STレーンサイズ();\r
+ stレーンサイズ6.x = 0xe3;\r
+ stレーンサイズ6.w = 30;\r
+ stレーンサイズArray[ 5 ] = stレーンサイズ6;\r
+ STレーンサイズ stレーンサイズ7 = new STレーンサイズ();\r
+ stレーンサイズ7.x = 0x105;\r
+ stレーンサイズ7.w = 30;\r
+ stレーンサイズArray[ 6 ] = stレーンサイズ7;\r
+ STレーンサイズ stレーンサイズ8 = new STレーンサイズ();\r
+ stレーンサイズ8.x = 0x127;\r
+ stレーンサイズ8.w = 0x24;\r
+ stレーンサイズArray[ 7 ] = stレーンサイズ8;\r
+ this.stレーンサイズ = stレーンサイズArray;\r
+ this.strファイル名 = new string[] { @"Graphics\ScreenPlayDrums lane flush cymbal.png", @"Graphics\ScreenPlayDrums lane flush hihat.png", @"Graphics\ScreenPlayDrums lane flush snare.png", @"Graphics\ScreenPlayDrums lane flush bass.png", @"Graphics\ScreenPlayDrums lane flush hitom.png", @"Graphics\ScreenPlayDrums lane flush lowtom.png", @"Graphics\ScreenPlayDrums lane flush floortom.png", @"Graphics\ScreenPlayDrums lane flush cymbal.png", @"Graphics\ScreenPlayDrums lane flush cymbal reverse.png", @"Graphics\ScreenPlayDrums lane flush hihat reverse.png", @"Graphics\ScreenPlayDrums lane flush snare reverse.png", @"Graphics\ScreenPlayDrums lane flush bass reverse.png", @"Graphics\ScreenPlayDrums lane flush hitom reverse.png", @"Graphics\ScreenPlayDrums lane flush lowtom reverse.png", @"Graphics\ScreenPlayDrums lane flush floortom reverse.png", @"Graphics\ScreenPlayDrums lane flush cymbal reverse.png" };\r
+ base.b活性化してない = true;\r
+ }\r
+ \r
+ \r
+ // メソッド\r
+\r
+ public void Start( Eドラムレーン lane, float f強弱度合い )\r
+ {\r
+ int num = (int) ( ( 1f - f強弱度合い ) * 55f );\r
+ this.ct進行[ (int) lane ] = new CCounter( num, 100, 4, CDTXMania.Timer );\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ for( int i = 0; i < 8; i++ )\r
+ {\r
+ this.ct進行[ i ] = new CCounter();\r
+ }\r
+ base.On活性化();\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ for( int i = 0; i < 8; i++ )\r
+ {\r
+ this.ct進行[ i ] = null;\r
+ }\r
+ base.On非活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ for( int i = 0; i < 0x10; i++ )\r
+ {\r
+ this.txFlush[ i ] = CDTXMania.tテクスチャの生成( CSkin.Path( this.strファイル名[ i ] ) );\r
+ }\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ for( int i = 0; i < 0x10; i++ )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.txFlush[ i ] );\r
+ }\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ for( int i = 0; i < 8; i++ )\r
+ {\r
+ if( !this.ct進行[ i ].b停止中 )\r
+ {\r
+ this.ct進行[ i ].t進行();\r
+ if( this.ct進行[ i ].b終了値に達した )\r
+ {\r
+ this.ct進行[ i ].t停止();\r
+ }\r
+ }\r
+ }\r
+ for( int j = 0; j < 8; j++ )\r
+ {\r
+ if( !this.ct進行[ j ].b停止中 )\r
+ {\r
+ int x = this.stレーンサイズ[ j ].x;\r
+ int w = this.stレーンサイズ[ j ].w;\r
+ for( int k = 0; k < 3; k++ )\r
+ {\r
+ if( CDTXMania.ConfigIni.bReverse.Drums )\r
+ {\r
+ int y = ( k * 0x80 ) - ( ( this.ct進行[ j ].n現在の値 * 0x180 ) / 100 );\r
+ for( int m = 0; m < w; m += 0x2a )\r
+ {\r
+ if( this.txFlush[ j + 8 ] != null )\r
+ {\r
+ this.txFlush[ j + 8 ].t2D描画( CDTXMania.app.Device, x + m, y, new Rectangle( ( k * 0x2a ) + 2, 0, ( ( w - m ) < 0x2a ) ? ( w - m ) : 0x2a, 0x80 ) );\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ int num8 = ( 0x60 + ( k * 0x80 ) ) + ( ( this.ct進行[ j ].n現在の値 * 0x180 ) / 100 );\r
+ if( num8 < 480 )\r
+ {\r
+ for( int n = 0; n < w; n += 0x2a )\r
+ {\r
+ if( this.txFlush[ j ] != null )\r
+ {\r
+ this.txFlush[ j ].t2D描画( CDTXMania.app.Device, x + n, num8, new Rectangle( k * 0x2a, 0, ( ( w - n ) < 0x2a ) ? ( w - n ) : 0x2a, 0x80 ) );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+\r
+ \r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ private struct STレーンサイズ\r
+ {\r
+ public int x;\r
+ public int w;\r
+ }\r
+\r
+ private CCounter[] ct進行 = new CCounter[ 8 ];\r
+ private readonly string[] strファイル名;\r
+ private readonly STレーンサイズ[] stレーンサイズ;\r
+ private CTexture[] txFlush = new CTexture[ 0x10 ];\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Drawing;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CAct演奏DrumsレーンフラッシュGB : CAct演奏レーンフラッシュGB共通\r
+ {\r
+ // CActivity 実装(共通クラスからの差分のみ)\r
+\r
+ public override int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ for( int i = 0; i < 6; i++ )\r
+ {\r
+ if( !base.ct進行[ i ].b停止中 )\r
+ {\r
+ E楽器パート e楽器パート = ( i < 3 ) ? E楽器パート.GUITAR : E楽器パート.BASS;\r
+ CTexture texture = CDTXMania.ConfigIni.bReverse[ (int) e楽器パート ] ? base.txFlush[ ( i % 3 ) + 3 ] : base.txFlush[ i % 3 ];\r
+ int num2 = CDTXMania.ConfigIni.bLeft[ (int) e楽器パート ] ? 1 : 0;\r
+ for( int j = 0; j < 3; j++ )\r
+ {\r
+ int x = ( ( ( i < 3 ) ? 0x1fb : 0x18e ) + this.nRGBのX座標[ num2, i ] ) + ( ( 0x10 * base.ct進行[ i ].n現在の値 ) / 100 );\r
+ int y = ( ( i < 3 ) ? 0x39 : 0x39 ) + ( j * 0x76 );\r
+ if( texture != null )\r
+ {\r
+ texture.t2D描画( CDTXMania.app.Device, x, y, new Rectangle( j * 0x20, 0, ( 0x18 * ( 100 - base.ct進行[ i ].n現在の値 ) ) / 100, 0x76 ) );\r
+ }\r
+ }\r
+ base.ct進行[ i ].t進行();\r
+ if( base.ct進行[ i ].b終了値に達した )\r
+ {\r
+ base.ct進行[ i ].t停止();\r
+ }\r
+ }\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private readonly int[,] nRGBのX座標 = new int[ , ] { { 2, 0x1c, 0x36, 2, 0x1c, 0x36 }, { 0x36, 0x1c, 2, 0x36, 0x1c, 2 } };\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using SlimDX;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CAct演奏Drums判定文字列 : CAct演奏判定文字列共通\r
+ {\r
+ // コンストラクタ\r
+\r
+ public CAct演奏Drums判定文字列()\r
+ {\r
+ STレーンサイズ[] stレーンサイズArray = new STレーンサイズ[ 12 ];\r
+ STレーンサイズ stレーンサイズ = new STレーンサイズ();\r
+ stレーンサイズ.x = 0x24;\r
+ stレーンサイズ.w = 0x24;\r
+ stレーンサイズArray[ 0 ] = stレーンサイズ;\r
+ STレーンサイズ stレーンサイズ2 = new STレーンサイズ();\r
+ stレーンサイズ2.x = 0x4d;\r
+ stレーンサイズ2.w = 30;\r
+ stレーンサイズArray[ 1 ] = stレーンサイズ2;\r
+ STレーンサイズ stレーンサイズ3 = new STレーンサイズ();\r
+ stレーンサイズ3.x = 0x6f;\r
+ stレーンサイズ3.w = 30;\r
+ stレーンサイズArray[ 2 ] = stレーンサイズ3;\r
+ STレーンサイズ stレーンサイズ4 = new STレーンサイズ();\r
+ stレーンサイズ4.x = 0x92;\r
+ stレーンサイズ4.w = 0x2a;\r
+ stレーンサイズArray[ 3 ] = stレーンサイズ4;\r
+ STレーンサイズ stレーンサイズ5 = new STレーンサイズ();\r
+ stレーンサイズ5.x = 0xc1;\r
+ stレーンサイズ5.w = 30;\r
+ stレーンサイズArray[ 4 ] = stレーンサイズ5;\r
+ STレーンサイズ stレーンサイズ6 = new STレーンサイズ();\r
+ stレーンサイズ6.x = 0xe3;\r
+ stレーンサイズ6.w = 30;\r
+ stレーンサイズArray[ 5 ] = stレーンサイズ6;\r
+ STレーンサイズ stレーンサイズ7 = new STレーンサイズ();\r
+ stレーンサイズ7.x = 0x105;\r
+ stレーンサイズ7.w = 30;\r
+ stレーンサイズArray[ 6 ] = stレーンサイズ7;\r
+ STレーンサイズ stレーンサイズ8 = new STレーンサイズ();\r
+ stレーンサイズ8.x = 0x127;\r
+ stレーンサイズ8.w = 0x24;\r
+ stレーンサイズArray[ 7 ] = stレーンサイズ8;\r
+ STレーンサイズ stレーンサイズ9 = new STレーンサイズ();\r
+ stレーンサイズ9.x = 0;\r
+ stレーンサイズ9.w = 0;\r
+ stレーンサイズArray[ 8 ] = stレーンサイズ9;\r
+ STレーンサイズ stレーンサイズ10 = new STレーンサイズ();\r
+ stレーンサイズ10.x = 0;\r
+ stレーンサイズ10.w = 0;\r
+ stレーンサイズArray[ 9 ] = stレーンサイズ10;\r
+ STレーンサイズ stレーンサイズ11 = new STレーンサイズ();\r
+ stレーンサイズ11.x = 0x1fb;\r
+ stレーンサイズ11.w = 80;\r
+ stレーンサイズArray[ 10 ] = stレーンサイズ11;\r
+ STレーンサイズ stレーンサイズ12 = new STレーンサイズ();\r
+ stレーンサイズ12.x = 0x18e;\r
+ stレーンサイズ12.w = 80;\r
+ stレーンサイズArray[ 11 ] = stレーンサイズ12;\r
+ this.stレーンサイズ = stレーンサイズArray;\r
+ base.b活性化してない = true;\r
+ }\r
+ \r
+ \r
+ // CActivity 実装(共通クラスからの差分のみ)\r
+\r
+ public override int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ for( int i = 0; i < 12; i++ )\r
+ {\r
+ if( !base.st状態[ i ].ct進行.b停止中 )\r
+ {\r
+ base.st状態[ i ].ct進行.t進行();\r
+ if( base.st状態[ i ].ct進行.b終了値に達した )\r
+ {\r
+ base.st状態[ i ].ct進行.t停止();\r
+ }\r
+ int num2 = base.st状態[ i ].ct進行.n現在の値;\r
+ if( ( base.st状態[ i ].judge != E判定.Miss ) && ( base.st状態[ i ].judge != E判定.Bad ) )\r
+ {\r
+ if( num2 < 50 )\r
+ {\r
+ base.st状態[ i ].fX方向拡大率 = 1f + ( 1f * ( 1f - ( ( (float) num2 ) / 50f ) ) );\r
+ base.st状態[ i ].fY方向拡大率 = ( (float) num2 ) / 50f;\r
+ base.st状態[ i ].n相対X座標 = 0;\r
+ base.st状態[ i ].n相対Y座標 = 0;\r
+ base.st状態[ i ].n透明度 = 0xff;\r
+ }\r
+ else if( num2 < 130 )\r
+ {\r
+ base.st状態[ i ].fX方向拡大率 = 1f;\r
+ base.st状態[ i ].fY方向拡大率 = 1f;\r
+ base.st状態[ i ].n相対X座標 = 0;\r
+ base.st状態[ i ].n相対Y座標 = ( ( num2 % 6 ) == 0 ) ? ( CDTXMania.Random.Next( 6 ) - 3 ) : base.st状態[ i ].n相対Y座標;\r
+ base.st状態[ i ].n透明度 = 0xff;\r
+ }\r
+ else if( num2 >= 240 )\r
+ {\r
+ base.st状態[ i ].fX方向拡大率 = 1f;\r
+ base.st状態[ i ].fY方向拡大率 = 1f - ( ( 1f * ( num2 - 240 ) ) / 60f );\r
+ base.st状態[ i ].n相対X座標 = 0;\r
+ base.st状態[ i ].n相対Y座標 = 0;\r
+ base.st状態[ i ].n透明度 = 0xff;\r
+ }\r
+ else\r
+ {\r
+ base.st状態[ i ].fX方向拡大率 = 1f;\r
+ base.st状態[ i ].fY方向拡大率 = 1f;\r
+ base.st状態[ i ].n相対X座標 = 0;\r
+ base.st状態[ i ].n相対Y座標 = 0;\r
+ base.st状態[ i ].n透明度 = 0xff;\r
+ }\r
+ }\r
+ else if( num2 < 50 )\r
+ {\r
+ base.st状態[ i ].fX方向拡大率 = 1f;\r
+ base.st状態[ i ].fY方向拡大率 = ( (float) num2 ) / 50f;\r
+ base.st状態[ i ].n相対X座標 = 0;\r
+ base.st状態[ i ].n相対Y座標 = 0;\r
+ base.st状態[ i ].n透明度 = 0xff;\r
+ }\r
+ else if( num2 >= 200 )\r
+ {\r
+ base.st状態[ i ].fX方向拡大率 = 1f - ( ( (float) ( num2 - 200 ) ) / 100f );\r
+ base.st状態[ i ].fY方向拡大率 = 1f - ( ( (float) ( num2 - 200 ) ) / 100f );\r
+ base.st状態[ i ].n相対X座標 = 0;\r
+ base.st状態[ i ].n相対Y座標 = 0;\r
+ base.st状態[ i ].n透明度 = 0xff;\r
+ }\r
+ else\r
+ {\r
+ base.st状態[ i ].fX方向拡大率 = 1f;\r
+ base.st状態[ i ].fY方向拡大率 = 1f;\r
+ base.st状態[ i ].n相対X座標 = 0;\r
+ base.st状態[ i ].n相対Y座標 = 0;\r
+ base.st状態[ i ].n透明度 = 0xff;\r
+ }\r
+ }\r
+ }\r
+ for( int j = 0; j < 12; j++ )\r
+ {\r
+ if( !base.st状態[ j ].ct進行.b停止中 )\r
+ {\r
+ int index = base.st判定文字列[ (int) base.st状態[ j ].judge ].n画像番号;\r
+ int num5 = 0;\r
+ int num6 = 0;\r
+ if( j < 8 )\r
+ {\r
+ num5 = this.stレーンサイズ[ j ].x;\r
+ num6 = CDTXMania.ConfigIni.bReverse.Drums ? ( ( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Drums ) == E判定文字表示位置.レーン上 ) ? ( 240 + ( this.n文字の縦表示位置[ j ] * 0x20 ) ) : 50 ) : ( ( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Drums ) == E判定文字表示位置.レーン上 ) ? ( 180 + ( this.n文字の縦表示位置[ j ] * 0x20 ) ) : 450 );\r
+ }\r
+ else if( j == 11 )\r
+ {\r
+ if( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Bass ) == E判定文字表示位置.表示OFF )\r
+ {\r
+ goto Label_07FC;\r
+ }\r
+ num5 = this.stレーンサイズ[ j ].x;\r
+ num6 = CDTXMania.ConfigIni.bReverse.Bass ? ( ( ( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Bass ) == E判定文字表示位置.レーン上 ) ? 240 : 100 ) + ( this.n文字の縦表示位置[ j ] * 0x20 ) ) : ( ( ( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Bass ) == E判定文字表示位置.レーン上 ) ? 180 : 300 ) + ( this.n文字の縦表示位置[ j ] * 0x20 ) );\r
+ }\r
+ else if( j == 10 )\r
+ {\r
+ if( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Guitar ) == E判定文字表示位置.表示OFF )\r
+ {\r
+ goto Label_07FC;\r
+ }\r
+ if( !CDTXMania.DTX.bチップがある.Bass && ( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Guitar ) == E判定文字表示位置.判定ライン上または横 ) )\r
+ {\r
+ num5 = 0x198;\r
+ num6 = 0x93;\r
+ }\r
+ else\r
+ {\r
+ num5 = this.stレーンサイズ[ j ].x;\r
+ num6 = CDTXMania.ConfigIni.bReverse.Guitar ? ( ( ( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Guitar ) == E判定文字表示位置.レーン上 ) ? 240 : 100 ) + ( this.n文字の縦表示位置[ j ] * 0x20 ) ) : ( ( ( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Guitar ) == E判定文字表示位置.レーン上 ) ? 180 : 300 ) + ( this.n文字の縦表示位置[ j ] * 0x20 ) );\r
+ }\r
+ }\r
+ int x = ( ( num5 + base.st状態[ j ].n相対X座標 ) + ( this.stレーンサイズ[ j ].w / 2 ) ) - ( (int) ( ( 64f * base.st状態[ j ].fX方向拡大率 ) * ( ( j < 10 ) ? 1.0 : 0.7 ) ) );\r
+ int y = ( num6 + base.st状態[ j ].n相対Y座標 ) - ( (int) ( ( ( 43f * base.st状態[ j ].fY方向拡大率 ) * ( ( j < 10 ) ? 1.0 : 0.7 ) ) / 2.0 ) );\r
+ if( base.tx判定文字列[ index ] != null )\r
+ {\r
+ base.tx判定文字列[ index ].n透明度 = base.st状態[ j ].n透明度;\r
+ base.tx判定文字列[ index ].vc拡大縮小倍率 = new Vector3( (float) ( base.st状態[ j ].fX方向拡大率 * ( ( j < 10 ) ? 1.0 : 0.7 ) ), (float) ( base.st状態[ j ].fY方向拡大率 * ( ( j < 10 ) ? 1.0 : 0.7 ) ), 1f );\r
+ base.tx判定文字列[ index ].t2D描画( CDTXMania.app.Device, x, y, base.st判定文字列[ (int) base.st状態[ j ].judge ].rc );\r
+ }\r
+ Label_07FC: ;\r
+ }\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+ \r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ private struct STレーンサイズ\r
+ {\r
+ public int x;\r
+ public int w;\r
+ }\r
+\r
+ private readonly int[] n文字の縦表示位置 = new int[] { 1, 2, 0, 1, 3, 2, 1, 0, 0, 0, 1, 1 };\r
+ private STレーンサイズ[] stレーンサイズ;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using System.Drawing;\r
+using System.Drawing.Imaging;\r
+using System.IO;\r
+using System.Diagnostics;\r
+using SlimDX;\r
+using SlimDX.Direct3D9;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CStage演奏ドラム画面 : CStage\r
+ {\r
+ // プロパティ\r
+\r
+ public bool bAUTOでないチップが1つでもバーを通過した \r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public CStage演奏ドラム画面()\r
+ {\r
+ Eパッド[] eパッドArray = new Eパッド[ 12 ];\r
+ eパッドArray[ 1 ] = Eパッド.SD;\r
+ eパッドArray[ 2 ] = Eパッド.BD;\r
+ eパッドArray[ 3 ] = Eパッド.HT;\r
+ eパッドArray[ 4 ] = Eパッド.LT;\r
+ eパッドArray[ 5 ] = Eパッド.CY;\r
+ eパッドArray[ 6 ] = Eパッド.FT;\r
+ eパッドArray[ 7 ] = Eパッド.HHO;\r
+ eパッドArray[ 8 ] = Eパッド.RD;\r
+ eパッドArray[ 9 ] = Eパッド.UNKNOWN;\r
+ eパッドArray[ 10 ] = Eパッド.UNKNOWN;\r
+ eパッドArray[ 11 ] = Eパッド.LC;\r
+ this.eチャンネルtoパッド = eパッドArray;\r
+ this.nBGAスコープチャンネルマップ = new int[ , ] { { 0xc4, 0xc7, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xe0 }, { 4, 7, 0x55, 0x56, 0x57, 0x58, 0x59, 0x60 } };\r
+ base.eステージID = CStage.Eステージ.演奏;\r
+ base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
+ base.b活性化してない = true;\r
+ base.list子Activities.Add( this.actPad = new CAct演奏Drumsパッド() );\r
+ base.list子Activities.Add( this.actCOMBO = new CAct演奏DrumsコンボDGB() );\r
+ base.list子Activities.Add( this.actDANGER = new CAct演奏DrumsDanger() );\r
+ base.list子Activities.Add( this.actChipFireD = new CAct演奏DrumsチップファイアD() );\r
+ base.list子Activities.Add( this.actChipFireGB = new CAct演奏DrumsチップファイアGB() );\r
+ base.list子Activities.Add( this.actGauge = new CAct演奏Drumsゲージ() );\r
+ base.list子Activities.Add( this.actJudgeString = new CAct演奏Drums判定文字列() );\r
+ base.list子Activities.Add( this.actLaneFlushD = new CAct演奏DrumsレーンフラッシュD() );\r
+ base.list子Activities.Add( this.actLaneFlushGB = new CAct演奏DrumsレーンフラッシュGB() );\r
+ base.list子Activities.Add( this.actRGB = new CAct演奏DrumsRGB() );\r
+ base.list子Activities.Add( this.actScore = new CAct演奏Drumsスコア() );\r
+ base.list子Activities.Add( this.actStatusPanels = new CAct演奏Drumsステータスパネル() );\r
+ base.list子Activities.Add( this.actWailingBonus = new CAct演奏DrumsWailingBonus() );\r
+ base.list子Activities.Add( this.act譜面スクロール速度 = new CAct演奏スクロール速度() );\r
+ base.list子Activities.Add( this.actAVI = new CAct演奏AVI() );\r
+ base.list子Activities.Add( this.actBGA = new CAct演奏BGA() );\r
+ base.list子Activities.Add( this.actPanel = new CAct演奏パネル文字列() );\r
+ base.list子Activities.Add( this.actStageFailed = new CAct演奏ステージ失敗() );\r
+ base.list子Activities.Add( this.actPlayInfo = new CAct演奏演奏情報() );\r
+ base.list子Activities.Add( this.actFI = new CActFIFOBlack() );\r
+ base.list子Activities.Add( this.actFO = new CActFIFOBlack() );\r
+ base.list子Activities.Add( this.actFOClear = new CActFIFOWhite() );\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ public void t演奏結果を格納する( out CScoreIni.C演奏記録 Drums, out CScoreIni.C演奏記録 Guitar, out CScoreIni.C演奏記録 Bass, out CDTX.CChip[] r空打ちドラムチップ )\r
+ {\r
+ Drums = new CScoreIni.C演奏記録();\r
+ Guitar = new CScoreIni.C演奏記録();\r
+ Bass = new CScoreIni.C演奏記録();\r
+ r空打ちドラムチップ = new CDTX.CChip[ 10 ];\r
+ if( CDTXMania.DTX.bチップがある.Drums && !CDTXMania.ConfigIni.bギタレボモード )\r
+ {\r
+ Drums.nスコア = this.actScore.Get( E楽器パート.DRUMS );\r
+ Drums.dbゲーム型スキル値 = CScoreIni.tゲーム型スキルを計算して返す( CDTXMania.DTX.LEVEL.Drums, CDTXMania.DTX.n可視チップ数.Drums, this.nヒット数・Auto含まない.Drums.Perfect, this.actCOMBO.n現在のコンボ数.Drums最高値 );\r
+ Drums.db演奏型スキル値 = CScoreIni.t演奏型スキルを計算して返す( CDTXMania.DTX.n可視チップ数.Drums, this.nヒット数・Auto含まない.Drums.Perfect, this.nヒット数・Auto含まない.Drums.Great, this.nヒット数・Auto含まない.Drums.Good, this.nヒット数・Auto含まない.Drums.Poor, this.nヒット数・Auto含まない.Drums.Miss );\r
+ Drums.nPerfect数 = CDTXMania.ConfigIni.bドラムが全部オートプレイである ? this.nヒット数・Auto含む.Drums.Perfect : this.nヒット数・Auto含まない.Drums.Perfect;\r
+ Drums.nGreat数 = CDTXMania.ConfigIni.bドラムが全部オートプレイである ? this.nヒット数・Auto含む.Drums.Great : this.nヒット数・Auto含まない.Drums.Great;\r
+ Drums.nGood数 = CDTXMania.ConfigIni.bドラムが全部オートプレイである ? this.nヒット数・Auto含む.Drums.Good : this.nヒット数・Auto含まない.Drums.Good;\r
+ Drums.nPoor数 = CDTXMania.ConfigIni.bドラムが全部オートプレイである ? this.nヒット数・Auto含む.Drums.Poor : this.nヒット数・Auto含まない.Drums.Poor;\r
+ Drums.nMiss数 = CDTXMania.ConfigIni.bドラムが全部オートプレイである ? this.nヒット数・Auto含む.Drums.Miss : this.nヒット数・Auto含まない.Drums.Miss;\r
+ Drums.n最大コンボ数 = this.actCOMBO.n現在のコンボ数.Drums最高値;\r
+ Drums.n全チップ数 = CDTXMania.DTX.n可視チップ数.Drums;\r
+ for( int j = 0; j < 10; j++ )\r
+ {\r
+ Drums.bAutoPlay[ j ] = CDTXMania.ConfigIni.bAutoPlay[ j ];\r
+ }\r
+ Drums.bTight = CDTXMania.ConfigIni.bTight;\r
+ for( int k = 0; k < 3; k++ )\r
+ {\r
+ Drums.bSudden[ k ] = CDTXMania.ConfigIni.bSudden[ k ];\r
+ Drums.bHidden[ k ] = CDTXMania.ConfigIni.bHidden[ k ];\r
+ Drums.bReverse[ k ] = CDTXMania.ConfigIni.bReverse[ k ];\r
+ Drums.eRandom[ k ] = CDTXMania.ConfigIni.eRandom[ k ];\r
+ Drums.bLight[ k ] = CDTXMania.ConfigIni.bLight[ k ];\r
+ Drums.bLeft[ k ] = CDTXMania.ConfigIni.bLeft[ k ];\r
+ Drums.f譜面スクロール速度[ k ] = ( (float) ( CDTXMania.ConfigIni.n譜面スクロール速度[ k ] + 1 ) ) * 0.5f;\r
+ }\r
+ Drums.eDark = CDTXMania.ConfigIni.eDark;\r
+ Drums.n演奏速度分子 = CDTXMania.ConfigIni.n演奏速度;\r
+ Drums.n演奏速度分母 = 20;\r
+ Drums.eHHGroup = CDTXMania.ConfigIni.eHHGroup;\r
+ Drums.eFTGroup = CDTXMania.ConfigIni.eFTGroup;\r
+ Drums.eCYGroup = CDTXMania.ConfigIni.eCYGroup;\r
+ Drums.eHitSoundPriorityHH = CDTXMania.ConfigIni.eHitSoundPriorityHH;\r
+ Drums.eHitSoundPriorityFT = CDTXMania.ConfigIni.eHitSoundPriorityFT;\r
+ Drums.eHitSoundPriorityCY = CDTXMania.ConfigIni.eHitSoundPriorityCY;\r
+ Drums.bGuitar有効 = CDTXMania.ConfigIni.bGuitar有効;\r
+ Drums.bDrums有効 = CDTXMania.ConfigIni.bDrums有効;\r
+ Drums.bSTAGEFAILED有効 = CDTXMania.ConfigIni.bSTAGEFAILED有効;\r
+ Drums.eダメージレベル = CDTXMania.ConfigIni.eダメージレベル;\r
+ Drums.b演奏にキーボードを使用した = this.b演奏にキーボードを使った.Drums;\r
+ Drums.b演奏にMIDI入力を使用した = this.b演奏にMIDI入力を使った.Drums;\r
+ Drums.b演奏にジョイパッドを使用した = this.b演奏にジョイパッドを使った.Drums;\r
+ Drums.b演奏にマウスを使用した = this.b演奏にマウスを使った.Drums;\r
+ Drums.nPerfectになる範囲ms = CDTXMania.nPerfect範囲ms;\r
+ Drums.nGreatになる範囲ms = CDTXMania.nGreat範囲ms;\r
+ Drums.nGoodになる範囲ms = CDTXMania.nGood範囲ms;\r
+ Drums.nPoorになる範囲ms = CDTXMania.nPoor範囲ms;\r
+ Drums.strDTXManiaのバージョン = CDTXMania.VERSION;\r
+ Drums.最終更新日時 = DateTime.Now.ToString();\r
+ Drums.Hash = CScoreIni.t演奏セクションのMD5を求めて返す( Drums );\r
+ }\r
+ if( CDTXMania.DTX.bチップがある.Guitar )\r
+ {\r
+ Guitar.nスコア = this.actScore.Get( E楽器パート.GUITAR );\r
+ Guitar.dbゲーム型スキル値 = CScoreIni.tゲーム型スキルを計算して返す( CDTXMania.DTX.LEVEL.Guitar, CDTXMania.DTX.n可視チップ数.Guitar, this.nヒット数・Auto含まない.Guitar.Perfect, this.actCOMBO.n現在のコンボ数.Guitar最高値 );\r
+ Guitar.db演奏型スキル値 = CScoreIni.t演奏型スキルを計算して返す( CDTXMania.DTX.n可視チップ数.Guitar, this.nヒット数・Auto含まない.Guitar.Perfect, this.nヒット数・Auto含まない.Guitar.Great, this.nヒット数・Auto含まない.Guitar.Good, this.nヒット数・Auto含まない.Guitar.Poor, this.nヒット数・Auto含まない.Guitar.Miss );\r
+ Guitar.nPerfect数 = CDTXMania.ConfigIni.bAutoPlay.Guitar ? this.nヒット数・Auto含む.Guitar.Perfect : this.nヒット数・Auto含まない.Guitar.Perfect;\r
+ Guitar.nGreat数 = CDTXMania.ConfigIni.bAutoPlay.Guitar ? this.nヒット数・Auto含む.Guitar.Great : this.nヒット数・Auto含まない.Guitar.Great;\r
+ Guitar.nGood数 = CDTXMania.ConfigIni.bAutoPlay.Guitar ? this.nヒット数・Auto含む.Guitar.Good : this.nヒット数・Auto含まない.Guitar.Good;\r
+ Guitar.nPoor数 = CDTXMania.ConfigIni.bAutoPlay.Guitar ? this.nヒット数・Auto含む.Guitar.Poor : this.nヒット数・Auto含まない.Guitar.Poor;\r
+ Guitar.nMiss数 = CDTXMania.ConfigIni.bAutoPlay.Guitar ? this.nヒット数・Auto含む.Guitar.Miss : this.nヒット数・Auto含まない.Guitar.Miss;\r
+ Guitar.n最大コンボ数 = this.actCOMBO.n現在のコンボ数.Guitar最高値;\r
+ Guitar.n全チップ数 = CDTXMania.DTX.n可視チップ数.Guitar;\r
+ for( int m = 0; m < 10; m++ )\r
+ {\r
+ Guitar.bAutoPlay[ m ] = CDTXMania.ConfigIni.bAutoPlay[ m ];\r
+ }\r
+ Guitar.bTight = CDTXMania.ConfigIni.bTight;\r
+ for( int n = 0; n < 3; n++ )\r
+ {\r
+ Guitar.bSudden[ n ] = CDTXMania.ConfigIni.bSudden[ n ];\r
+ Guitar.bHidden[ n ] = CDTXMania.ConfigIni.bHidden[ n ];\r
+ Guitar.bReverse[ n ] = CDTXMania.ConfigIni.bReverse[ n ];\r
+ Guitar.eRandom[ n ] = CDTXMania.ConfigIni.eRandom[ n ];\r
+ Guitar.bLight[ n ] = CDTXMania.ConfigIni.bLight[ n ];\r
+ Guitar.bLeft[ n ] = CDTXMania.ConfigIni.bLeft[ n ];\r
+ Guitar.f譜面スクロール速度[ n ] = ( (float) ( CDTXMania.ConfigIni.n譜面スクロール速度[ n ] + 1 ) ) * 0.5f;\r
+ }\r
+ Guitar.eDark = CDTXMania.ConfigIni.eDark;\r
+ Guitar.n演奏速度分子 = CDTXMania.ConfigIni.n演奏速度;\r
+ Guitar.n演奏速度分母 = 20;\r
+ Guitar.eHHGroup = CDTXMania.ConfigIni.eHHGroup;\r
+ Guitar.eFTGroup = CDTXMania.ConfigIni.eFTGroup;\r
+ Guitar.eCYGroup = CDTXMania.ConfigIni.eCYGroup;\r
+ Guitar.eHitSoundPriorityHH = CDTXMania.ConfigIni.eHitSoundPriorityHH;\r
+ Guitar.eHitSoundPriorityFT = CDTXMania.ConfigIni.eHitSoundPriorityFT;\r
+ Guitar.eHitSoundPriorityCY = CDTXMania.ConfigIni.eHitSoundPriorityCY;\r
+ Guitar.bGuitar有効 = CDTXMania.ConfigIni.bGuitar有効;\r
+ Guitar.bDrums有効 = CDTXMania.ConfigIni.bDrums有効;\r
+ Guitar.bSTAGEFAILED有効 = CDTXMania.ConfigIni.bSTAGEFAILED有効;\r
+ Guitar.eダメージレベル = CDTXMania.ConfigIni.eダメージレベル;\r
+ Guitar.b演奏にキーボードを使用した = this.b演奏にキーボードを使った.Guitar;\r
+ Guitar.b演奏にMIDI入力を使用した = this.b演奏にMIDI入力を使った.Guitar;\r
+ Guitar.b演奏にジョイパッドを使用した = this.b演奏にジョイパッドを使った.Guitar;\r
+ Guitar.b演奏にマウスを使用した = this.b演奏にマウスを使った.Guitar;\r
+ Guitar.nPerfectになる範囲ms = CDTXMania.nPerfect範囲ms;\r
+ Guitar.nGreatになる範囲ms = CDTXMania.nGreat範囲ms;\r
+ Guitar.nGoodになる範囲ms = CDTXMania.nGood範囲ms;\r
+ Guitar.nPoorになる範囲ms = CDTXMania.nPoor範囲ms;\r
+ Guitar.strDTXManiaのバージョン = CDTXMania.VERSION;\r
+ Guitar.最終更新日時 = DateTime.Now.ToString();\r
+ Guitar.Hash = CScoreIni.t演奏セクションのMD5を求めて返す( Guitar );\r
+ }\r
+ if( CDTXMania.DTX.bチップがある.Bass )\r
+ {\r
+ Bass.nスコア = this.actScore.Get( E楽器パート.BASS );\r
+ Bass.dbゲーム型スキル値 = CScoreIni.tゲーム型スキルを計算して返す( CDTXMania.DTX.LEVEL.Bass, CDTXMania.DTX.n可視チップ数.Bass, this.nヒット数・Auto含まない.Bass.Perfect, this.actCOMBO.n現在のコンボ数.Bass最高値 );\r
+ Bass.db演奏型スキル値 = CScoreIni.t演奏型スキルを計算して返す( CDTXMania.DTX.n可視チップ数.Bass, this.nヒット数・Auto含まない.Bass.Perfect, this.nヒット数・Auto含まない.Bass.Great, this.nヒット数・Auto含まない.Bass.Good, this.nヒット数・Auto含まない.Bass.Poor, this.nヒット数・Auto含まない.Bass.Miss );\r
+ Bass.nPerfect数 = CDTXMania.ConfigIni.bAutoPlay.Bass ? this.nヒット数・Auto含む.Bass.Perfect : this.nヒット数・Auto含まない.Bass.Perfect;\r
+ Bass.nGreat数 = CDTXMania.ConfigIni.bAutoPlay.Bass ? this.nヒット数・Auto含む.Bass.Great : this.nヒット数・Auto含まない.Bass.Great;\r
+ Bass.nGood数 = CDTXMania.ConfigIni.bAutoPlay.Bass ? this.nヒット数・Auto含む.Bass.Good : this.nヒット数・Auto含まない.Bass.Good;\r
+ Bass.nPoor数 = CDTXMania.ConfigIni.bAutoPlay.Bass ? this.nヒット数・Auto含む.Bass.Poor : this.nヒット数・Auto含まない.Bass.Poor;\r
+ Bass.nMiss数 = CDTXMania.ConfigIni.bAutoPlay.Bass ? this.nヒット数・Auto含む.Bass.Miss : this.nヒット数・Auto含まない.Bass.Miss;\r
+ Bass.n最大コンボ数 = this.actCOMBO.n現在のコンボ数.Bass最高値;\r
+ Bass.n全チップ数 = CDTXMania.DTX.n可視チップ数.Bass;\r
+ for( int num5 = 0; num5 < 10; num5++ )\r
+ {\r
+ Bass.bAutoPlay[ num5 ] = CDTXMania.ConfigIni.bAutoPlay[ num5 ];\r
+ }\r
+ Bass.bTight = CDTXMania.ConfigIni.bTight;\r
+ for( int num6 = 0; num6 < 3; num6++ )\r
+ {\r
+ Bass.bSudden[ num6 ] = CDTXMania.ConfigIni.bSudden[ num6 ];\r
+ Bass.bHidden[ num6 ] = CDTXMania.ConfigIni.bHidden[ num6 ];\r
+ Bass.bReverse[ num6 ] = CDTXMania.ConfigIni.bReverse[ num6 ];\r
+ Bass.eRandom[ num6 ] = CDTXMania.ConfigIni.eRandom[ num6 ];\r
+ Bass.bLight[ num6 ] = CDTXMania.ConfigIni.bLight[ num6 ];\r
+ Bass.bLeft[ num6 ] = CDTXMania.ConfigIni.bLeft[ num6 ];\r
+ Bass.f譜面スクロール速度[ num6 ] = ( (float) ( CDTXMania.ConfigIni.n譜面スクロール速度[ num6 ] + 1 ) ) * 0.5f;\r
+ }\r
+ Bass.eDark = CDTXMania.ConfigIni.eDark;\r
+ Bass.n演奏速度分子 = CDTXMania.ConfigIni.n演奏速度;\r
+ Bass.n演奏速度分母 = 20;\r
+ Bass.eHHGroup = CDTXMania.ConfigIni.eHHGroup;\r
+ Bass.eFTGroup = CDTXMania.ConfigIni.eFTGroup;\r
+ Bass.eCYGroup = CDTXMania.ConfigIni.eCYGroup;\r
+ Bass.eHitSoundPriorityHH = CDTXMania.ConfigIni.eHitSoundPriorityHH;\r
+ Bass.eHitSoundPriorityFT = CDTXMania.ConfigIni.eHitSoundPriorityFT;\r
+ Bass.eHitSoundPriorityCY = CDTXMania.ConfigIni.eHitSoundPriorityCY;\r
+ Bass.bGuitar有効 = CDTXMania.ConfigIni.bGuitar有効;\r
+ Bass.bDrums有効 = CDTXMania.ConfigIni.bDrums有効;\r
+ Bass.bSTAGEFAILED有効 = CDTXMania.ConfigIni.bSTAGEFAILED有効;\r
+ Bass.eダメージレベル = CDTXMania.ConfigIni.eダメージレベル;\r
+ Bass.b演奏にキーボードを使用した = this.b演奏にキーボードを使った.Guitar;\r
+ Bass.b演奏にMIDI入力を使用した = this.b演奏にMIDI入力を使った.Guitar;\r
+ Bass.b演奏にジョイパッドを使用した = this.b演奏にジョイパッドを使った.Guitar;\r
+ Bass.b演奏にマウスを使用した = this.b演奏にマウスを使った.Guitar;\r
+ Bass.nPerfectになる範囲ms = CDTXMania.nPerfect範囲ms;\r
+ Bass.nGreatになる範囲ms = CDTXMania.nGreat範囲ms;\r
+ Bass.nGoodになる範囲ms = CDTXMania.nGood範囲ms;\r
+ Bass.nPoorになる範囲ms = CDTXMania.nPoor範囲ms;\r
+ Bass.strDTXManiaのバージョン = CDTXMania.VERSION;\r
+ Bass.最終更新日時 = DateTime.Now.ToString();\r
+ Bass.Hash = CScoreIni.t演奏セクションのMD5を求めて返す( Bass );\r
+ }\r
+ for( int i = 0; i < 10; i++ )\r
+ {\r
+ r空打ちドラムチップ[ i ] = this.r空うちChip( E楽器パート.DRUMS, (Eパッド) i );\r
+ if( r空打ちドラムチップ[ i ] == null )\r
+ {\r
+ r空打ちドラムチップ[ i ] = this.r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( CDTXMania.Timer.n現在時刻, this.nパッド0Atoチャンネル0A[ i ] );\r
+ }\r
+ }\r
+ }\r
+\r
+\r
+ // CStage 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.継続;\r
+ this.bフィルイン中 = false;\r
+ this.n現在のトップChip = ( CDTXMania.DTX.listChip.Count > 0 ) ? 0 : -1;\r
+ this.n最後に再生したHHの実WAV番号 = -1;\r
+ this.n最後に再生したHHのチャンネル番号 = 0;\r
+ this.n最後に再生したギターの実WAV番号 = -1;\r
+ this.n最後に再生したベースの実WAV番号 = -1;\r
+ for( int i = 0; i < 50; i++ )\r
+ {\r
+ this.n最後に再生したBGMの実WAV番号[ i ] = -1;\r
+ }\r
+ this.r次にくるギターChip = null;\r
+ this.r次にくるベースChip = null;\r
+ for( int j = 0; j < 10; j++ )\r
+ {\r
+ this.r現在の空うちドラムChip[ j ] = null;\r
+ }\r
+ this.r現在の空うちギターChip = null;\r
+ this.r現在の空うちベースChip = null;\r
+ for( int k = 0; k < 3; k++ )\r
+ {\r
+ for( int n = 0; n < 5; n++ )\r
+ {\r
+ this.nヒット数・Auto含まない[ k ] = new STHITCOUNTOFRANK();\r
+ this.nヒット数・Auto含む[ k ] = new STHITCOUNTOFRANK();\r
+ }\r
+ this.queWailing[ k ] = new Queue<CDTX.CChip>();\r
+ this.r現在の歓声Chip[ k ] = null;\r
+ }\r
+ for( int m = 0; m < 3; m++ )\r
+ {\r
+ this.b演奏にキーボードを使った[ m ] = false;\r
+ this.b演奏にジョイパッドを使った[ m ] = false;\r
+ this.b演奏にMIDI入力を使った[ m ] = false;\r
+ this.b演奏にマウスを使った[ m ] = false;\r
+ }\r
+ this.bAUTOでないチップが1つでもバーを通過した = false;\r
+ base.On活性化();\r
+ this.tステータスパネルの選択();\r
+ this.tパネル文字列の設定();\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ for( int i = 0; i < 3; i++ )\r
+ {\r
+ this.queWailing[ i ] = null;\r
+ }\r
+ this.ctWailingチップ模様アニメ = null;\r
+ this.ctチップ模様アニメ.Drums = null;\r
+ this.ctチップ模様アニメ.Guitar = null;\r
+ this.ctチップ模様アニメ.Bass = null;\r
+ base.On非活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.t背景テクスチャの生成();\r
+ this.txチップ = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlayDrums chips.png" ) );\r
+ this.txヒットバー = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlayDrums hit-bar.png" ) );\r
+ this.txヒットバーGB = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlayDrums hit-bar guitar.png" ) );\r
+ this.txWailing枠 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlay wailing cursor.png" ) );\r
+ this.txレーンフレームGB = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlayDrums lane parts guitar.png" ) );\r
+ if( this.txレーンフレームGB != null )\r
+ {\r
+ this.txレーンフレームGB.n透明度 = 0xff - CDTXMania.ConfigIni.n背景の透過度;\r
+ }\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.tx背景 );\r
+ CDTXMania.tテクスチャの解放( ref this.txヒットバー );\r
+ CDTXMania.tテクスチャの解放( ref this.txヒットバーGB );\r
+ CDTXMania.tテクスチャの解放( ref this.txチップ );\r
+ CDTXMania.tテクスチャの解放( ref this.txレーンフレームGB );\r
+ CDTXMania.tテクスチャの解放( ref this.txWailing枠 );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ bool flag = false;\r
+ bool flag2 = false;\r
+ if( base.b初めての進行描画 )\r
+ {\r
+ CDTXMania.Timer.tリセット();\r
+ this.ctチップ模様アニメ.Drums = new CCounter( 0, 0x30, 10, CDTXMania.Timer );\r
+ this.ctチップ模様アニメ.Guitar = new CCounter( 0, 0x17, 20, CDTXMania.Timer );\r
+ this.ctチップ模様アニメ.Bass = new CCounter( 0, 0x17, 20, CDTXMania.Timer );\r
+ this.ctWailingチップ模様アニメ = new CCounter( 0, 4, 50, CDTXMania.Timer );\r
+ base.eフェーズID = CStage.Eフェーズ.共通_フェードイン;\r
+ this.actFI.tフェードイン開始();\r
+ base.b初めての進行描画 = false;\r
+ }\r
+ if( ( CDTXMania.ConfigIni.bSTAGEFAILED有効 && ( this.actGauge.db現在のゲージ値 <= -0.1 ) ) && ( base.eフェーズID == CStage.Eフェーズ.共通_通常状態 ) )\r
+ {\r
+ this.actStageFailed.Start();\r
+ CDTXMania.DTX.t全チップの再生停止();\r
+ base.eフェーズID = CStage.Eフェーズ.演奏_STAGE_FAILED;\r
+ }\r
+ this.t進行描画・背景();\r
+ this.t進行描画・MIDIBGM();\r
+ this.t進行描画・パネル文字列();\r
+ this.t進行描画・スコア();\r
+ this.t進行描画・AVI();\r
+ this.t進行描画・BGA();\r
+ this.t進行描画・ステータスパネル();\r
+ this.t進行描画・ギターベースフレーム();\r
+ this.t進行描画・レーンフラッシュGB();\r
+ this.t進行描画・ギターベース判定ライン();\r
+ this.t進行描画・ゲージ();\r
+ this.t進行描画・レーンフラッシュD();\r
+ this.t進行描画・DANGER();\r
+ this.t進行描画・判定ライン();\r
+ this.t進行描画・RGBボタン();\r
+ this.t進行描画・判定文字列1・通常位置指定の場合();\r
+ this.t進行描画・コンボ();\r
+ this.t進行描画・WailingBonus();\r
+ this.t進行描画・譜面スクロール速度();\r
+ this.t進行描画・チップアニメ();\r
+ flag = this.t進行描画・チップ();\r
+ this.t進行描画・演奏情報();\r
+ this.t進行描画・ドラムパッド();\r
+ this.t進行描画・判定文字列2・判定ライン上指定の場合();\r
+ this.t進行描画・Wailing枠();\r
+ this.t進行描画・チップファイアD();\r
+ this.t進行描画・チップファイアGB();\r
+ this.t進行描画・STAGEFAILED();\r
+ flag2 = this.t進行描画・フェードイン・アウト();\r
+ if( flag && ( base.eフェーズID == CStage.Eフェーズ.共通_通常状態 ) )\r
+ {\r
+ this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.ステージクリア;\r
+ base.eフェーズID = CStage.Eフェーズ.演奏_STAGE_CLEAR_フェードアウト;\r
+ this.actFOClear.tフェードアウト開始();\r
+ }\r
+ if( flag2 )\r
+ {\r
+ return (int) this.eフェードアウト完了時の戻り値;\r
+ }\r
+\r
+ // キー入力\r
+\r
+ if( CDTXMania.act現在入力を占有中のプラグイン == null )\r
+ this.tキー入力();\r
+ }\r
+ return 0;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private class STHITCOUNTOFRANK\r
+ {\r
+ // Fields\r
+ public int Good;\r
+ public int Great;\r
+ public int Miss;\r
+ public int Perfect;\r
+ public int Poor;\r
+\r
+ // Properties\r
+ public int this[ int index ]\r
+ {\r
+ get\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ return this.Perfect;\r
+\r
+ case 1:\r
+ return this.Great;\r
+\r
+ case 2:\r
+ return this.Good;\r
+\r
+ case 3:\r
+ return this.Poor;\r
+\r
+ case 4:\r
+ return this.Miss;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ set\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ this.Perfect = value;\r
+ return;\r
+\r
+ case 1:\r
+ this.Great = value;\r
+ return;\r
+\r
+ case 2:\r
+ this.Good = value;\r
+ return;\r
+\r
+ case 3:\r
+ this.Poor = value;\r
+ return;\r
+\r
+ case 4:\r
+ this.Miss = value;\r
+ return;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ }\r
+ }\r
+\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ private struct STKARAUCHI\r
+ {\r
+ public CDTX.CChip HH;\r
+ public CDTX.CChip SD;\r
+ public CDTX.CChip BD;\r
+ public CDTX.CChip HT;\r
+ public CDTX.CChip LT;\r
+ public CDTX.CChip FT;\r
+ public CDTX.CChip CY;\r
+ public CDTX.CChip HHO;\r
+ public CDTX.CChip RD;\r
+ public CDTX.CChip LC;\r
+ public CDTX.CChip this[ int index ]\r
+ {\r
+ get\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ return this.HH;\r
+\r
+ case 1:\r
+ return this.SD;\r
+\r
+ case 2:\r
+ return this.BD;\r
+\r
+ case 3:\r
+ return this.HT;\r
+\r
+ case 4:\r
+ return this.LT;\r
+\r
+ case 5:\r
+ return this.FT;\r
+\r
+ case 6:\r
+ return this.CY;\r
+\r
+ case 7:\r
+ return this.HHO;\r
+\r
+ case 8:\r
+ return this.RD;\r
+\r
+ case 9:\r
+ return this.LC;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ set\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ this.HH = value;\r
+ return;\r
+\r
+ case 1:\r
+ this.SD = value;\r
+ return;\r
+\r
+ case 2:\r
+ this.BD = value;\r
+ return;\r
+\r
+ case 3:\r
+ this.HT = value;\r
+ return;\r
+\r
+ case 4:\r
+ this.LT = value;\r
+ return;\r
+\r
+ case 5:\r
+ this.FT = value;\r
+ return;\r
+\r
+ case 6:\r
+ this.CY = value;\r
+ return;\r
+\r
+ case 7:\r
+ this.HHO = value;\r
+ return;\r
+\r
+ case 8:\r
+ this.RD = value;\r
+ return;\r
+\r
+ case 9:\r
+ this.LC = value;\r
+ return;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ }\r
+ }\r
+\r
+ private CAct演奏AVI actAVI;\r
+ private CAct演奏BGA actBGA;\r
+ private CAct演奏DrumsチップファイアD actChipFireD;\r
+ private CAct演奏DrumsチップファイアGB actChipFireGB;\r
+ private CAct演奏DrumsコンボDGB actCOMBO;\r
+ private CAct演奏DrumsDanger actDANGER;\r
+ private CActFIFOBlack actFI;\r
+ private CActFIFOBlack actFO;\r
+ private CActFIFOWhite actFOClear;\r
+ private CAct演奏Drumsゲージ actGauge;\r
+ private CAct演奏Drums判定文字列 actJudgeString;\r
+ private CAct演奏DrumsレーンフラッシュD actLaneFlushD;\r
+ private CAct演奏DrumsレーンフラッシュGB actLaneFlushGB;\r
+ private CAct演奏Drumsパッド actPad;\r
+ private CAct演奏パネル文字列 actPanel;\r
+ private CAct演奏演奏情報 actPlayInfo;\r
+ private CAct演奏DrumsRGB actRGB;\r
+ private CAct演奏Drumsスコア actScore;\r
+ private CAct演奏ステージ失敗 actStageFailed;\r
+ private CAct演奏Drumsステータスパネル actStatusPanels;\r
+ private CAct演奏DrumsWailingBonus actWailingBonus;\r
+ private CAct演奏スクロール速度 act譜面スクロール速度;\r
+ private bool bPAUSE;\r
+ private bool bフィルイン中;\r
+ private STDGBVALUE<bool> b演奏にMIDI入力を使った;\r
+ private STDGBVALUE<bool> b演奏にキーボードを使った;\r
+ private STDGBVALUE<bool> b演奏にジョイパッドを使った;\r
+ private STDGBVALUE<bool> b演奏にマウスを使った;\r
+ private CCounter ctWailingチップ模様アニメ;\r
+ private STDGBVALUE<CCounter> ctチップ模様アニメ;\r
+ private readonly Eパッド[] eチャンネルtoパッド;\r
+ private E演奏画面の戻り値 eフェードアウト完了時の戻り値;\r
+ private readonly int[,] nBGAスコープチャンネルマップ;\r
+ private readonly int[] nチャンネル0Atoパッド08 = new int[] { 1, 2, 3, 4, 5, 7, 6, 1, 8, 0 };\r
+ private readonly int[] nチャンネル0Atoレーン07 = new int[] { 1, 2, 3, 4, 5, 7, 6, 1, 7, 0 };\r
+ private readonly int[] nチャンネルtoX座標 = new int[] { 0x4c, 110, 0x91, 0xc0, 0xe2, 0x126, 260, 0x4f, 300, 0x23 };\r
+ private readonly int[] nパッド0Atoチャンネル0A = new int[] { 0x11, 0x12, 0x13, 20, 0x15, 0x17, 0x16, 0x18, 0x19, 0x1a };\r
+ private readonly int[] nパッド0Atoパッド08 = new int[] { 1, 2, 3, 4, 5, 6, 7, 1, 8, 0 };\r
+ private readonly int[] nパッド0Atoレーン07 = new int[] { 1, 2, 3, 4, 5, 6, 7, 1, 7, 0 };\r
+ private STDGBVALUE<STHITCOUNTOFRANK> nヒット数・Auto含まない;\r
+ private STDGBVALUE<STHITCOUNTOFRANK> nヒット数・Auto含む;\r
+ private int n現在のトップChip = -1;\r
+ private int[] n最後に再生したBGMの実WAV番号 = new int[ 50 ];\r
+ private int n最後に再生したHHのチャンネル番号;\r
+ private int n最後に再生したHHの実WAV番号;\r
+ private int n最後に再生したギターの実WAV番号;\r
+ private int n最後に再生したベースの実WAV番号;\r
+ private STDGBVALUE<Queue<CDTX.CChip>> queWailing;\r
+ private STDGBVALUE<CDTX.CChip> r現在の歓声Chip;\r
+ private CDTX.CChip r現在の空うちギターChip;\r
+ private STKARAUCHI r現在の空うちドラムChip;\r
+ private CDTX.CChip r現在の空うちベースChip;\r
+ private CDTX.CChip r次にくるギターChip;\r
+ private CDTX.CChip r次にくるベースChip;\r
+ private CTexture txWailing枠;\r
+ private CTexture txチップ;\r
+ private CTexture txヒットバー;\r
+ private CTexture txヒットバーGB;\r
+ private CTexture txレーンフレームGB;\r
+ private CTexture tx背景;\r
+\r
+ private bool bフィルイン区間の最後のChipである( CDTX.CChip pChip )\r
+ {\r
+ if( pChip == null )\r
+ {\r
+ return false;\r
+ }\r
+ int num = pChip.n発声位置;\r
+ for( int i = CDTXMania.DTX.listChip.IndexOf( pChip ) + 1; i < CDTXMania.DTX.listChip.Count; i++ )\r
+ {\r
+ pChip = CDTXMania.DTX.listChip[ i ];\r
+ if( ( pChip.nチャンネル番号 == 0x53 ) && ( pChip.n整数値 == 2 ) )\r
+ {\r
+ return true;\r
+ }\r
+ if( ( ( pChip.nチャンネル番号 >= 0x11 ) && ( pChip.nチャンネル番号 <= 0x19 ) ) && ( ( pChip.n発声位置 - num ) > 0x18 ) )\r
+ {\r
+ return false;\r
+ }\r
+ }\r
+ return true;\r
+ }\r
+ private E判定 e指定時刻からChipのJUDGEを返す( long nTime, CDTX.CChip pChip )\r
+ {\r
+ if( pChip != null )\r
+ {\r
+ int num = Math.Abs( (int) ( nTime - pChip.n発声時刻ms ) );\r
+ if( num <= CDTXMania.nPerfect範囲ms )\r
+ {\r
+ return E判定.Perfect;\r
+ }\r
+ if( num <= CDTXMania.nGreat範囲ms )\r
+ {\r
+ return E判定.Great;\r
+ }\r
+ if( num <= CDTXMania.nGood範囲ms )\r
+ {\r
+ return E判定.Good;\r
+ }\r
+ if( num <= CDTXMania.nPoor範囲ms )\r
+ {\r
+ return E判定.Poor;\r
+ }\r
+ }\r
+ return E判定.Miss;\r
+ }\r
+ private CDTX.CChip r空うちChip( E楽器パート part, Eパッド pad )\r
+ {\r
+ switch( part )\r
+ {\r
+ case E楽器パート.DRUMS:\r
+ switch( pad )\r
+ {\r
+ case Eパッド.HH:\r
+ if( this.r現在の空うちドラムChip.HH != null )\r
+ {\r
+ return this.r現在の空うちドラムChip.HH;\r
+ }\r
+ if( CDTXMania.ConfigIni.eHHGroup != EHHGroup.ハイハットのみ打ち分ける )\r
+ {\r
+ if( CDTXMania.ConfigIni.eHHGroup == EHHGroup.左シンバルのみ打ち分ける )\r
+ {\r
+ return this.r現在の空うちドラムChip.HHO;\r
+ }\r
+ if( this.r現在の空うちドラムChip.HHO != null )\r
+ {\r
+ return this.r現在の空うちドラムChip.HHO;\r
+ }\r
+ }\r
+ return this.r現在の空うちドラムChip.LC;\r
+\r
+ case Eパッド.SD:\r
+ return this.r現在の空うちドラムChip.SD;\r
+\r
+ case Eパッド.BD:\r
+ return this.r現在の空うちドラムChip.BD;\r
+\r
+ case Eパッド.HT:\r
+ return this.r現在の空うちドラムChip.HT;\r
+\r
+ case Eパッド.LT:\r
+ if( this.r現在の空うちドラムChip.LT != null )\r
+ {\r
+ return this.r現在の空うちドラムChip.LT;\r
+ }\r
+ if( CDTXMania.ConfigIni.eFTGroup == EFTGroup.共通 )\r
+ {\r
+ return this.r現在の空うちドラムChip.FT;\r
+ }\r
+ return null;\r
+\r
+ case Eパッド.FT:\r
+ if( this.r現在の空うちドラムChip.FT != null )\r
+ {\r
+ return this.r現在の空うちドラムChip.FT;\r
+ }\r
+ if( CDTXMania.ConfigIni.eFTGroup == EFTGroup.共通 )\r
+ {\r
+ return this.r現在の空うちドラムChip.LT;\r
+ }\r
+ return null;\r
+\r
+ case Eパッド.CY:\r
+ if( this.r現在の空うちドラムChip.CY != null )\r
+ {\r
+ return this.r現在の空うちドラムChip.CY;\r
+ }\r
+ if( CDTXMania.ConfigIni.eCYGroup == ECYGroup.共通 )\r
+ {\r
+ return this.r現在の空うちドラムChip.RD;\r
+ }\r
+ return null;\r
+\r
+ case Eパッド.HHO:\r
+ if( this.r現在の空うちドラムChip.HHO != null )\r
+ {\r
+ return this.r現在の空うちドラムChip.HHO;\r
+ }\r
+ if( CDTXMania.ConfigIni.eHHGroup != EHHGroup.ハイハットのみ打ち分ける )\r
+ {\r
+ if( CDTXMania.ConfigIni.eHHGroup == EHHGroup.左シンバルのみ打ち分ける )\r
+ {\r
+ return this.r現在の空うちドラムChip.HH;\r
+ }\r
+ if( this.r現在の空うちドラムChip.HH != null )\r
+ {\r
+ return this.r現在の空うちドラムChip.HH;\r
+ }\r
+ }\r
+ return this.r現在の空うちドラムChip.LC;\r
+\r
+ case Eパッド.RD:\r
+ if( this.r現在の空うちドラムChip.RD != null )\r
+ {\r
+ return this.r現在の空うちドラムChip.RD;\r
+ }\r
+ if( CDTXMania.ConfigIni.eCYGroup == ECYGroup.共通 )\r
+ {\r
+ return this.r現在の空うちドラムChip.CY;\r
+ }\r
+ return null;\r
+\r
+ case Eパッド.LC:\r
+ if( this.r現在の空うちドラムChip.LC != null )\r
+ {\r
+ return this.r現在の空うちドラムChip.LC;\r
+ }\r
+ if( ( CDTXMania.ConfigIni.eHHGroup != EHHGroup.ハイハットのみ打ち分ける ) && ( CDTXMania.ConfigIni.eHHGroup != EHHGroup.全部共通 ) )\r
+ {\r
+ return null;\r
+ }\r
+ if( this.r現在の空うちドラムChip.HH != null )\r
+ {\r
+ return this.r現在の空うちドラムChip.HH;\r
+ }\r
+ return this.r現在の空うちドラムChip.HHO;\r
+ }\r
+ break;\r
+\r
+ case E楽器パート.GUITAR:\r
+ return this.r現在の空うちギターChip;\r
+\r
+ case E楽器パート.BASS:\r
+ return this.r現在の空うちベースChip;\r
+ }\r
+ return null;\r
+ }\r
+ private CDTX.CChip r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( long nTime, int nChannelFlag )\r
+ {\r
+ int num5;\r
+ if( this.n現在のトップChip == -1 )\r
+ {\r
+ return null;\r
+ }\r
+ int count = CDTXMania.DTX.listChip.Count;\r
+ int num4 = num5 = this.n現在のトップChip;\r
+ if( this.n現在のトップChip >= count )\r
+ {\r
+ num4 = num5 = count - 1;\r
+ }\r
+ int num2 = num4;\r
+ while( num2 < count )\r
+ {\r
+ CDTX.CChip chip = CDTXMania.DTX.listChip[ num2 ];\r
+ if( ( ( nChannelFlag >= 0x11 ) && ( nChannelFlag <= 0x1a ) ) && ( ( chip.nチャンネル番号 == nChannelFlag ) || ( chip.nチャンネル番号 == ( nChannelFlag + 0x20 ) ) ) )\r
+ {\r
+ if( chip.n発声時刻ms > nTime )\r
+ {\r
+ break;\r
+ }\r
+ num5 = num2;\r
+ }\r
+ else if( ( ( nChannelFlag == 0x2f ) && ( chip.e楽器パート == E楽器パート.GUITAR ) ) || ( ( ( nChannelFlag >= 0x20 ) && ( nChannelFlag <= 40 ) ) && ( chip.nチャンネル番号 == nChannelFlag ) ) )\r
+ {\r
+ if( chip.n発声時刻ms > nTime )\r
+ {\r
+ break;\r
+ }\r
+ num5 = num2;\r
+ }\r
+ else if( ( ( nChannelFlag == 0xaf ) && ( chip.e楽器パート == E楽器パート.BASS ) ) || ( ( ( nChannelFlag >= 160 ) && ( nChannelFlag <= 0xa8 ) ) && ( chip.nチャンネル番号 == nChannelFlag ) ) )\r
+ {\r
+ if( chip.n発声時刻ms > nTime )\r
+ {\r
+ break;\r
+ }\r
+ num5 = num2;\r
+ }\r
+ num2++;\r
+ }\r
+ int num3 = num5;\r
+ while( num3 >= 0 )\r
+ {\r
+ CDTX.CChip chip2 = CDTXMania.DTX.listChip[ num3 ];\r
+ if( ( nChannelFlag >= 0x11 ) && ( nChannelFlag <= 0x1a ) )\r
+ {\r
+ if( ( chip2.nチャンネル番号 == nChannelFlag ) || ( chip2.nチャンネル番号 == ( nChannelFlag + 0x20 ) ) )\r
+ {\r
+ break;\r
+ }\r
+ }\r
+ else if( ( ( nChannelFlag == 0x2f ) && ( chip2.e楽器パート == E楽器パート.GUITAR ) ) || ( ( ( nChannelFlag >= 0x20 ) && ( nChannelFlag <= 40 ) ) && ( chip2.nチャンネル番号 == nChannelFlag ) ) )\r
+ {\r
+ if( ( chip2.nチャンネル番号 >= 0x20 ) && ( chip2.nチャンネル番号 <= 40 ) )\r
+ {\r
+ break;\r
+ }\r
+ }\r
+ else if( ( ( ( nChannelFlag == 0xaf ) && ( chip2.e楽器パート == E楽器パート.BASS ) ) || ( ( ( nChannelFlag >= 160 ) && ( nChannelFlag <= 0xa8 ) ) && ( chip2.nチャンネル番号 == nChannelFlag ) ) ) && ( ( chip2.nチャンネル番号 >= 160 ) && ( chip2.nチャンネル番号 <= 0xa8 ) ) )\r
+ {\r
+ break;\r
+ }\r
+ num3--;\r
+ }\r
+ if( ( num2 == count ) && ( num3 < 0 ) )\r
+ {\r
+ return null;\r
+ }\r
+ if( num2 == count )\r
+ {\r
+ return CDTXMania.DTX.listChip[ num3 ];\r
+ }\r
+ if( num3 < 0 )\r
+ {\r
+ return CDTXMania.DTX.listChip[ num2 ];\r
+ }\r
+ CDTX.CChip chip3 = CDTXMania.DTX.listChip[ num2 ];\r
+ CDTX.CChip chip4 = CDTXMania.DTX.listChip[ num3 ];\r
+ int num6 = Math.Abs( (int) ( nTime - chip3.n発声時刻ms ) );\r
+ int num7 = Math.Abs( (int) ( nTime - chip4.n発声時刻ms ) );\r
+ if( num6 >= num7 )\r
+ {\r
+ return chip4;\r
+ }\r
+ return chip3;\r
+ }\r
+ private CDTX.CChip r指定時刻に一番近い未ヒットChip( long nTime, int nChannelFlag )\r
+ {\r
+ return this.r指定時刻に一番近い未ヒットChip( nTime, nChannelFlag, 0 );\r
+ }\r
+ private CDTX.CChip r指定時刻に一番近い未ヒットChip( long nTime, int nChannelFlag, int n検索範囲時間ms )\r
+ {\r
+ int num5;\r
+ int num6;\r
+ if( this.n現在のトップChip == -1 )\r
+ {\r
+ return null;\r
+ }\r
+ int count = CDTXMania.DTX.listChip.Count;\r
+ int num4 = num5 = this.n現在のトップChip;\r
+ if( this.n現在のトップChip >= count )\r
+ {\r
+ num4 = num5 = count - 1;\r
+ }\r
+ int num2 = num4;\r
+ while( num2 < count )\r
+ {\r
+ CDTX.CChip chip = CDTXMania.DTX.listChip[ num2 ];\r
+ if( ( !chip.bHit && ( nChannelFlag >= 0x11 ) ) && ( nChannelFlag <= 0x1a ) )\r
+ {\r
+ if( ( chip.nチャンネル番号 == nChannelFlag ) || ( chip.nチャンネル番号 == ( nChannelFlag + 0x20 ) ) )\r
+ {\r
+ if( chip.n発声時刻ms > nTime )\r
+ {\r
+ break;\r
+ }\r
+ num5 = num2;\r
+ }\r
+ }\r
+ else if( !chip.bHit && ( ( ( nChannelFlag == 0x2f ) && ( chip.e楽器パート == E楽器パート.GUITAR ) ) || ( ( ( nChannelFlag >= 0x20 ) && ( nChannelFlag <= 40 ) ) && ( chip.nチャンネル番号 == nChannelFlag ) ) ) )\r
+ {\r
+ if( chip.n発声時刻ms > nTime )\r
+ {\r
+ break;\r
+ }\r
+ num5 = num2;\r
+ }\r
+ else if( !chip.bHit && ( ( ( nChannelFlag == 0xaf ) && ( chip.e楽器パート == E楽器パート.BASS ) ) || ( ( ( nChannelFlag >= 160 ) && ( nChannelFlag <= 0xa8 ) ) && ( chip.nチャンネル番号 == nChannelFlag ) ) ) )\r
+ {\r
+ if( chip.n発声時刻ms > nTime )\r
+ {\r
+ break;\r
+ }\r
+ num5 = num2;\r
+ }\r
+ num2++;\r
+ }\r
+ int num3 = num5;\r
+ while( num3 >= 0 )\r
+ {\r
+ CDTX.CChip chip2 = CDTXMania.DTX.listChip[ num3 ];\r
+ if( ( ( ( !chip2.bHit && ( nChannelFlag >= 0x11 ) ) && ( ( nChannelFlag <= 0x1a ) && ( ( chip2.nチャンネル番号 == nChannelFlag ) || ( chip2.nチャンネル番号 == ( nChannelFlag + 0x20 ) ) ) ) ) || ( !chip2.bHit && ( ( ( nChannelFlag == 0x2f ) && ( chip2.e楽器パート == E楽器パート.GUITAR ) ) || ( ( ( nChannelFlag >= 0x20 ) && ( nChannelFlag <= 40 ) ) && ( chip2.nチャンネル番号 == nChannelFlag ) ) ) ) ) || ( !chip2.bHit && ( ( ( nChannelFlag == 0xaf ) && ( chip2.e楽器パート == E楽器パート.BASS ) ) || ( ( ( nChannelFlag >= 160 ) && ( nChannelFlag <= 0xa8 ) ) && ( chip2.nチャンネル番号 == nChannelFlag ) ) ) ) )\r
+ {\r
+ break;\r
+ }\r
+ num3--;\r
+ }\r
+ if( ( num2 == count ) && ( num3 < 0 ) )\r
+ {\r
+ return null;\r
+ }\r
+ CDTX.CChip chip3 = null;\r
+ if( num2 == count )\r
+ {\r
+ chip3 = CDTXMania.DTX.listChip[ num3 ];\r
+ num6 = Math.Abs( (int) ( nTime - CDTXMania.DTX.listChip[ num3 ].n発声時刻ms ) );\r
+ }\r
+ else if( num3 < 0 )\r
+ {\r
+ chip3 = CDTXMania.DTX.listChip[ num2 ];\r
+ num6 = Math.Abs( (int) ( nTime - CDTXMania.DTX.listChip[ num2 ].n発声時刻ms ) );\r
+ }\r
+ else\r
+ {\r
+ int num7 = Math.Abs( (int) ( nTime - CDTXMania.DTX.listChip[ num2 ].n発声時刻ms ) );\r
+ int num8 = Math.Abs( (int) ( nTime - CDTXMania.DTX.listChip[ num3 ].n発声時刻ms ) );\r
+ if( num7 < num8 )\r
+ {\r
+ chip3 = CDTXMania.DTX.listChip[ num2 ];\r
+ num6 = Math.Abs( (int) ( nTime - CDTXMania.DTX.listChip[ num2 ].n発声時刻ms ) );\r
+ }\r
+ else\r
+ {\r
+ chip3 = CDTXMania.DTX.listChip[ num3 ];\r
+ num6 = Math.Abs( (int) ( nTime - CDTXMania.DTX.listChip[ num3 ].n発声時刻ms ) );\r
+ }\r
+ }\r
+ if( ( n検索範囲時間ms > 0 ) && ( num6 > n検索範囲時間ms ) )\r
+ {\r
+ return null;\r
+ }\r
+ return chip3;\r
+ }\r
+ private CDTX.CChip r次にくるギターChipを更新して返す()\r
+ {\r
+ this.r次にくるギターChip = this.r指定時刻に一番近い未ヒットChip( CDTXMania.Timer.n現在時刻, 0x2f, 500 );\r
+ return this.r次にくるギターChip;\r
+ }\r
+ private CDTX.CChip r次にくるベースChipを更新して返す()\r
+ {\r
+ this.r次にくるベースChip = this.r指定時刻に一番近い未ヒットChip( CDTXMania.Timer.n現在時刻, 0xaf, 500 );\r
+ return this.r次にくるベースChip;\r
+ }\r
+ private void tサウンド再生( CDTX.CChip rChip, long n再生開始システム時刻ms, E楽器パート part )\r
+ {\r
+ this.tサウンド再生( rChip, n再生開始システム時刻ms, part, CDTXMania.ConfigIni.n手動再生音量, false, false );\r
+ }\r
+ private void tサウンド再生( CDTX.CChip rChip, long n再生開始システム時刻ms, E楽器パート part, int n音量 )\r
+ {\r
+ this.tサウンド再生( rChip, n再生開始システム時刻ms, part, n音量, false, false );\r
+ }\r
+ private void tサウンド再生( CDTX.CChip rChip, long n再生開始システム時刻ms, E楽器パート part, int n音量, bool bモニタ )\r
+ {\r
+ this.tサウンド再生( rChip, n再生開始システム時刻ms, part, n音量, bモニタ, false );\r
+ }\r
+ private void tサウンド再生( CDTX.CChip pChip, long n再生開始システム時刻ms, E楽器パート part, int n音量, bool bモニタ, bool b音程をずらして再生 )\r
+ {\r
+ if( pChip != null )\r
+ {\r
+ switch( part )\r
+ {\r
+ case E楽器パート.DRUMS:\r
+ {\r
+ int index = pChip.nチャンネル番号;\r
+ if( ( index < 0x11 ) || ( index > 0x1a ) )\r
+ {\r
+ if( ( index < 0x31 ) || ( index > 0x3a ) )\r
+ {\r
+ return;\r
+ }\r
+ index -= 0x31;\r
+ }\r
+ else\r
+ {\r
+ index -= 0x11;\r
+ }\r
+ int nLane = this.nチャンネル0Atoレーン07[ index ];\r
+ if( ( nLane == 1 ) && ( ( index == 0 ) || ( ( ( index == 7 ) && ( this.n最後に再生したHHのチャンネル番号 != 0x18 ) ) && ( this.n最後に再生したHHのチャンネル番号 != 0x38 ) ) ) )\r
+ {\r
+ CDTXMania.DTX.tWavの再生停止( this.n最後に再生したHHの実WAV番号 );\r
+ this.n最後に再生したHHの実WAV番号 = pChip.n整数値・内部番号;\r
+ this.n最後に再生したHHのチャンネル番号 = pChip.nチャンネル番号;\r
+ }\r
+ CDTXMania.DTX.tチップの再生( pChip, n再生開始システム時刻ms, nLane, n音量, bモニタ );\r
+ return;\r
+ }\r
+ case E楽器パート.GUITAR:\r
+ CDTXMania.DTX.tWavの再生停止( this.n最後に再生したギターの実WAV番号 );\r
+ CDTXMania.DTX.tチップの再生( pChip, n再生開始システム時刻ms, 8, n音量, bモニタ, b音程をずらして再生 );\r
+ this.n最後に再生したギターの実WAV番号 = pChip.n整数値・内部番号;\r
+ return;\r
+\r
+ case E楽器パート.BASS:\r
+ CDTXMania.DTX.tWavの再生停止( this.n最後に再生したベースの実WAV番号 );\r
+ CDTXMania.DTX.tチップの再生( pChip, n再生開始システム時刻ms, 9, n音量, bモニタ, b音程をずらして再生 );\r
+ this.n最後に再生したベースの実WAV番号 = pChip.n整数値・内部番号;\r
+ return;\r
+ }\r
+ }\r
+ }\r
+ private void tステータスパネルの選択()\r
+ {\r
+ if( CDTXMania.bコンパクトモード )\r
+ {\r
+ this.actStatusPanels.tラベル名からステータスパネルを決定する( null );\r
+ }\r
+ else if( CDTXMania.stage選曲.r確定された曲 != null )\r
+ {\r
+ this.actStatusPanels.tラベル名からステータスパネルを決定する( CDTXMania.stage選曲.r確定された曲.ar難易度ラベル[ CDTXMania.stage選曲.n確定された曲の難易度 ] );\r
+ }\r
+ }\r
+ private E判定 tチップのヒット処理( long nHitTime, CDTX.CChip pChip )\r
+ {\r
+ pChip.bHit = true;\r
+ bool flag = false;\r
+ E判定 auto = E判定.Auto;\r
+ auto = this.e指定時刻からChipのJUDGEを返す( nHitTime, pChip );\r
+ if( ( ( ( pChip.e楽器パート == E楽器パート.DRUMS ) && CDTXMania.ConfigIni.bAutoPlay[ this.nチャンネル0Atoレーン07[ pChip.nチャンネル番号 - 0x11 ] ] ) || ( ( pChip.e楽器パート == E楽器パート.GUITAR ) && CDTXMania.ConfigIni.bAutoPlay.Guitar ) ) || ( ( pChip.e楽器パート == E楽器パート.BASS ) && CDTXMania.ConfigIni.bAutoPlay.Bass ) )\r
+ {\r
+ flag = true;\r
+ }\r
+ else\r
+ {\r
+ this.bAUTOでないチップが1つでもバーを通過した = true;\r
+ }\r
+ switch( pChip.e楽器パート )\r
+ {\r
+ case E楽器パート.DRUMS:\r
+ this.actJudgeString.Start( this.nチャンネル0Atoレーン07[ pChip.nチャンネル番号 - 0x11 ], flag ? E判定.Auto : auto );\r
+ break;\r
+\r
+ case E楽器パート.GUITAR:\r
+ this.actJudgeString.Start( 10, flag ? E判定.Auto : auto );\r
+ break;\r
+\r
+ case E楽器パート.BASS:\r
+ this.actJudgeString.Start( 11, flag ? E判定.Auto : auto );\r
+ break;\r
+ }\r
+ if( !flag && ( pChip.e楽器パート != E楽器パート.UNKNOWN ) )\r
+ {\r
+ this.t判定にあわせてゲージを増減する( pChip.e楽器パート, auto );\r
+ }\r
+ int drums = 0;\r
+ switch( pChip.e楽器パート )\r
+ {\r
+ case E楽器パート.DRUMS:\r
+ if( ( auto != E判定.Miss ) && ( auto != E判定.Bad ) )\r
+ {\r
+ STHITCOUNTOFRANK sthitcountofrank;\r
+ int num4;\r
+ ( sthitcountofrank = this.nヒット数・Auto含む.Drums )[ num4 = (int) auto ] = sthitcountofrank[ num4 ] + 1;\r
+ break;\r
+ }\r
+ this.nヒット数・Auto含む.Drums.Miss++;\r
+ break;\r
+\r
+ case E楽器パート.GUITAR:\r
+ if( ( auto != E判定.Miss ) && ( auto != E判定.Bad ) )\r
+ {\r
+ STHITCOUNTOFRANK sthitcountofrank3;\r
+ int num6;\r
+ ( sthitcountofrank3 = this.nヒット数・Auto含む.Guitar )[ num6 = (int) auto ] = sthitcountofrank3[ num6 ] + 1;\r
+ }\r
+ else\r
+ {\r
+ this.nヒット数・Auto含む.Guitar.Miss++;\r
+ }\r
+ if( !flag )\r
+ {\r
+ STHITCOUNTOFRANK sthitcountofrank4;\r
+ int num7;\r
+ switch( auto )\r
+ {\r
+ case E判定.Miss:\r
+ case E判定.Bad:\r
+ this.nヒット数・Auto含まない.Guitar.Miss++;\r
+ goto Label_0285;\r
+ }\r
+ ( sthitcountofrank4 = this.nヒット数・Auto含まない.Guitar )[ num7 = (int) auto ] = sthitcountofrank4[ num7 ] + 1;\r
+ }\r
+ goto Label_0285;\r
+\r
+ case E楽器パート.BASS:\r
+ if( ( auto != E判定.Miss ) && ( auto != E判定.Bad ) )\r
+ {\r
+ STHITCOUNTOFRANK sthitcountofrank5;\r
+ int num8;\r
+ ( sthitcountofrank5 = this.nヒット数・Auto含む.Bass )[ num8 = (int) auto ] = sthitcountofrank5[ num8 ] + 1;\r
+ }\r
+ else\r
+ {\r
+ this.nヒット数・Auto含む.Bass.Miss++;\r
+ }\r
+ if( !flag )\r
+ {\r
+ STHITCOUNTOFRANK sthitcountofrank6;\r
+ int num9;\r
+ switch( auto )\r
+ {\r
+ case E判定.Miss:\r
+ case E判定.Bad:\r
+ this.nヒット数・Auto含まない.Bass.Miss++;\r
+ goto Label_034A;\r
+ }\r
+ ( sthitcountofrank6 = this.nヒット数・Auto含まない.Bass )[ num9 = (int) auto ] = sthitcountofrank6[ num9 ] + 1;\r
+ }\r
+ goto Label_034A;\r
+\r
+ default:\r
+ goto Label_037F;\r
+ }\r
+ if( !flag )\r
+ {\r
+ STHITCOUNTOFRANK sthitcountofrank2;\r
+ int num5;\r
+ switch( auto )\r
+ {\r
+ case E判定.Miss:\r
+ case E判定.Bad:\r
+ this.nヒット数・Auto含まない.Drums.Miss++;\r
+ goto Label_01AE;\r
+ }\r
+ ( sthitcountofrank2 = this.nヒット数・Auto含まない.Drums )[ num5 = (int) auto ] = sthitcountofrank2[ num5 ] + 1;\r
+ }\r
+ Label_01AE:\r
+ if( CDTXMania.ConfigIni.bドラムが全部オートプレイである || !flag )\r
+ {\r
+ drums = this.actCOMBO.n現在のコンボ数.Drums;\r
+ switch( auto )\r
+ {\r
+ case E判定.Perfect:\r
+ case E判定.Great:\r
+ case E判定.Good:\r
+ drums++;\r
+ break;\r
+\r
+ default:\r
+ drums = 0;\r
+ break;\r
+ }\r
+ this.actCOMBO.n現在のコンボ数.Drums = drums;\r
+ }\r
+ goto Label_037F;\r
+ Label_0285:\r
+ drums = this.actCOMBO.n現在のコンボ数.Guitar;\r
+ switch( auto )\r
+ {\r
+ case E判定.Perfect:\r
+ case E判定.Great:\r
+ case E判定.Good:\r
+ drums++;\r
+ break;\r
+\r
+ default:\r
+ drums = 0;\r
+ break;\r
+ }\r
+ this.actCOMBO.n現在のコンボ数.Guitar = drums;\r
+ goto Label_037F;\r
+ Label_034A:\r
+ drums = this.actCOMBO.n現在のコンボ数.Bass;\r
+ switch( auto )\r
+ {\r
+ case E判定.Perfect:\r
+ case E判定.Great:\r
+ case E判定.Good:\r
+ drums++;\r
+ break;\r
+\r
+ default:\r
+ drums = 0;\r
+ break;\r
+ }\r
+ this.actCOMBO.n現在のコンボ数.Bass = drums;\r
+ Label_037F:\r
+ if( ( !flag && ( pChip.e楽器パート != E楽器パート.UNKNOWN ) ) && ( ( auto != E判定.Miss ) && ( auto != E判定.Bad ) ) )\r
+ {\r
+ int guitar = 0;\r
+ if( pChip.e楽器パート == E楽器パート.DRUMS )\r
+ {\r
+ guitar = this.actCOMBO.n現在のコンボ数.Drums;\r
+ }\r
+ if( pChip.e楽器パート == E楽器パート.GUITAR )\r
+ {\r
+ guitar = this.actCOMBO.n現在のコンボ数.Guitar;\r
+ }\r
+ if( pChip.e楽器パート == E楽器パート.BASS )\r
+ {\r
+ guitar = this.actCOMBO.n現在のコンボ数.Bass;\r
+ }\r
+ long nScore = this.actScore.Get( pChip.e楽器パート );\r
+ long[] numArray = new long[] { 350L, 200L, 50L, 0L };\r
+ if( ( guitar <= 500 ) || ( auto == E判定.Good ) )\r
+ {\r
+ nScore += numArray[ (int) auto ] * guitar;\r
+ }\r
+ else if( ( auto == E判定.Perfect ) || ( auto == E判定.Great ) )\r
+ {\r
+ nScore += numArray[ (int) auto ] * 500L;\r
+ }\r
+ this.actScore.Set( pChip.e楽器パート, nScore );\r
+ }\r
+ return auto;\r
+ }\r
+ private void tチップのヒット処理・BadならびにTight時のMiss( E楽器パート part )\r
+ {\r
+ this.tチップのヒット処理・BadならびにTight時のMiss( part, 0 );\r
+ }\r
+ private void tチップのヒット処理・BadならびにTight時のMiss( E楽器パート part, int nLane )\r
+ {\r
+ this.bAUTOでないチップが1つでもバーを通過した = true;\r
+ this.t判定にあわせてゲージを増減する( part, E判定.Miss );\r
+ switch( part )\r
+ {\r
+ case E楽器パート.DRUMS:\r
+ if( ( nLane >= 0 ) && ( nLane <= 7 ) )\r
+ {\r
+ this.actJudgeString.Start( nLane, CDTXMania.ConfigIni.bAutoPlay[ nLane ] ? E判定.Auto : E判定.Miss );\r
+ }\r
+ this.actCOMBO.n現在のコンボ数.Drums = 0;\r
+ return;\r
+\r
+ case E楽器パート.GUITAR:\r
+ this.actJudgeString.Start( 10, E判定.Bad );\r
+ this.actCOMBO.n現在のコンボ数.Guitar = 0;\r
+ return;\r
+\r
+ case E楽器パート.BASS:\r
+ this.actJudgeString.Start( 11, E判定.Bad );\r
+ this.actCOMBO.n現在のコンボ数.Bass = 0;\r
+ return;\r
+ }\r
+ }\r
+ private bool tドラムヒット処理( long nHitTime, Eパッド type, CDTX.CChip pChip, int n強弱度合い0to127 )\r
+ {\r
+ if( pChip == null )\r
+ {\r
+ return false;\r
+ }\r
+ E判定 e判定 = this.e指定時刻からChipのJUDGEを返す( nHitTime, pChip );\r
+ if( e判定 == E判定.Miss )\r
+ {\r
+ return false;\r
+ }\r
+ this.tチップのヒット処理( nHitTime, pChip );\r
+ int index = pChip.nチャンネル番号;\r
+ if( ( index >= 0x11 ) && ( index <= 0x1a ) )\r
+ {\r
+ index -= 0x11;\r
+ }\r
+ else if( ( index >= 0x31 ) && ( index <= 0x3a ) )\r
+ {\r
+ index -= 0x31;\r
+ }\r
+ int num2 = this.nチャンネル0Atoレーン07[ index ];\r
+ int nLane = this.nチャンネル0Atoパッド08[ index ];\r
+ this.actLaneFlushD.Start( (Eドラムレーン) num2, ( (float) n強弱度合い0to127 ) / 127f );\r
+ this.actPad.Hit( nLane );\r
+ if( ( e判定 != E判定.Poor ) && ( e判定 != E判定.Miss ) )\r
+ {\r
+ bool flag = this.bフィルイン中;\r
+ bool flag2 = this.bフィルイン中 && this.bフィルイン区間の最後のChipである( pChip );\r
+ bool flag3 = flag2;\r
+ this.actChipFireD.Start( (Eドラムレーン) num2, flag, flag2, flag3 );\r
+ }\r
+ if( CDTXMania.ConfigIni.bドラム打音を発声する )\r
+ {\r
+ CDTX.CChip rChip = null;\r
+ bool flag4 = true;\r
+ if( ( ( type == Eパッド.HH ) || ( type == Eパッド.HHO ) ) || ( type == Eパッド.LC ) )\r
+ {\r
+ flag4 = CDTXMania.ConfigIni.eHitSoundPriorityHH == E打ち分け時の再生の優先順位.ChipがPadより優先;\r
+ }\r
+ else if( ( type == Eパッド.LT ) || ( type == Eパッド.FT ) )\r
+ {\r
+ flag4 = CDTXMania.ConfigIni.eHitSoundPriorityFT == E打ち分け時の再生の優先順位.ChipがPadより優先;\r
+ }\r
+ else if( ( type == Eパッド.CY ) || ( type == Eパッド.RD ) )\r
+ {\r
+ flag4 = CDTXMania.ConfigIni.eHitSoundPriorityCY == E打ち分け時の再生の優先順位.ChipがPadより優先;\r
+ }\r
+ if( flag4 )\r
+ {\r
+ rChip = pChip;\r
+ }\r
+ else\r
+ {\r
+ Eパッド hH = type;\r
+ if( !CDTXMania.DTX.bチップがある.HHOpen && ( type == Eパッド.HHO ) )\r
+ {\r
+ hH = Eパッド.HH;\r
+ }\r
+ if( !CDTXMania.DTX.bチップがある.Ride && ( type == Eパッド.RD ) )\r
+ {\r
+ hH = Eパッド.CY;\r
+ }\r
+ if( !CDTXMania.DTX.bチップがある.LeftCymbal && ( type == Eパッド.LC ) )\r
+ {\r
+ hH = Eパッド.HH;\r
+ }\r
+ rChip = this.r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( nHitTime, this.nパッド0Atoチャンネル0A[ (int) hH ] );\r
+ if( rChip == null )\r
+ {\r
+ rChip = pChip;\r
+ }\r
+ }\r
+ this.tサウンド再生( rChip, CDTXMania.Timer.nシステム時刻, E楽器パート.DRUMS, CDTXMania.ConfigIni.n手動再生音量, CDTXMania.ConfigIni.b演奏音を強調する.Drums );\r
+ }\r
+ return true;\r
+ }\r
+ private void tパネル文字列の設定()\r
+ {\r
+ this.actPanel.SetPanelString( string.IsNullOrEmpty( CDTXMania.DTX.PANEL ) ? CDTXMania.DTX.TITLE : CDTXMania.DTX.PANEL );\r
+ }\r
+ private void tキー入力()\r
+ {\r
+ IInputDevice keyboard = CDTXMania.Input管理.Keyboard;\r
+ if( keyboard.bキーが押された( 0x36 ) && ( keyboard.bキーが押されている( 120 ) || keyboard.bキーが押されている( 0x4e ) ) )\r
+ {\r
+ this.bPAUSE = !this.bPAUSE;\r
+ if( this.bPAUSE )\r
+ {\r
+ CDTXMania.Timer.t一時停止();\r
+ CDTXMania.DTX.t全チップの再生一時停止();\r
+ }\r
+ else\r
+ {\r
+ CDTXMania.Timer.t再開();\r
+ CDTXMania.DTX.t全チップの再生再開();\r
+ }\r
+ }\r
+ if( ( !this.bPAUSE && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) )\r
+ {\r
+ this.t入力処理・ドラム();\r
+ this.t入力処理・ギター();\r
+ this.t入力処理・ベース();\r
+ if( keyboard.bキーが押された( 0x84 ) && ( keyboard.bキーが押されている( 120 ) || keyboard.bキーが押されている( 0x4e ) ) )\r
+ {\r
+ CDTXMania.DTX.t各自動再生音チップの再生時刻を変更する( ( keyboard.bキーが押されている( 0x4b ) || keyboard.bキーが押されている( 0x74 ) ) ? 1 : 10 );\r
+ CDTXMania.DTX.tWave再生位置自動補正();\r
+ }\r
+ else if( keyboard.bキーが押された( 50 ) && ( keyboard.bキーが押されている( 120 ) || keyboard.bキーが押されている( 0x4e ) ) )\r
+ {\r
+ CDTXMania.DTX.t各自動再生音チップの再生時刻を変更する( ( keyboard.bキーが押されている( 0x4b ) || keyboard.bキーが押されている( 0x74 ) ) ? -1 : -10 );\r
+ CDTXMania.DTX.tWave再生位置自動補正();\r
+ }\r
+ else if( keyboard.bキーが押された( 0x84 ) )\r
+ {\r
+ CDTXMania.ConfigIni.n譜面スクロール速度.Drums = Math.Min( CDTXMania.ConfigIni.n譜面スクロール速度.Drums + 1, 0x7cf );\r
+ }\r
+ else if( keyboard.bキーが押された( 50 ) )\r
+ {\r
+ CDTXMania.ConfigIni.n譜面スクロール速度.Drums = Math.Max( CDTXMania.ConfigIni.n譜面スクロール速度.Drums - 1, 0 );\r
+ }\r
+ else if( keyboard.bキーが押された( 0x31 ) )\r
+ {\r
+ CDTXMania.ConfigIni.b演奏情報を表示する = !CDTXMania.ConfigIni.b演奏情報を表示する;\r
+ }\r
+ else if( ( base.eフェーズID == CStage.Eフェーズ.共通_通常状態 ) && ( keyboard.bキーが押された( 0x35 ) || CDTXMania.Pad.b押されたGB( Eパッド.FT ) ) )\r
+ {\r
+ this.actFO.tフェードアウト開始();\r
+ base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
+ this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.演奏中断;\r
+ }\r
+ }\r
+ }\r
+ private void t進行描画・AVI()\r
+ {\r
+ if( ( ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) ) && ( !CDTXMania.ConfigIni.bストイックモード && CDTXMania.ConfigIni.bAVI有効 ) )\r
+ {\r
+ this.actAVI.t進行描画( 0x152, 0x39 );\r
+ }\r
+ }\r
+ private void t進行描画・BGA()\r
+ {\r
+ if( ( ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) ) && ( !CDTXMania.ConfigIni.bストイックモード && CDTXMania.ConfigIni.bBGA有効 ) )\r
+ {\r
+ this.actBGA.t進行描画( 0x152, 0x39 );\r
+ }\r
+ }\r
+ private void t進行描画・DANGER()\r
+ {\r
+ this.actDANGER.t進行描画( this.actGauge.db現在のゲージ値 < 0.3 );\r
+ }\r
+ private void t進行描画・MIDIBGM()\r
+ {\r
+ if( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED )\r
+ {\r
+ CStage.Eフェーズ eフェーズid1 = base.eフェーズID;\r
+ }\r
+ }\r
+ private void t進行描画・RGBボタン()\r
+ {\r
+ if( CDTXMania.ConfigIni.eDark != Eダークモード.FULL )\r
+ {\r
+ this.actRGB.On進行描画();\r
+ }\r
+ }\r
+ private void t進行描画・STAGEFAILED()\r
+ {\r
+ if( ( ( base.eフェーズID == CStage.Eフェーズ.演奏_STAGE_FAILED ) || ( base.eフェーズID == CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) ) && ( ( this.actStageFailed.On進行描画() != 0 ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) ) )\r
+ {\r
+ this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.ステージ失敗;\r
+ base.eフェーズID = CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト;\r
+ this.actFO.tフェードアウト開始();\r
+ }\r
+ }\r
+ private void t進行描画・WailingBonus()\r
+ {\r
+ if( ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) )\r
+ {\r
+ this.actWailingBonus.On進行描画();\r
+ }\r
+ }\r
+ private void t進行描画・Wailing枠()\r
+ {\r
+ if( ( CDTXMania.ConfigIni.eDark != Eダークモード.FULL ) && CDTXMania.ConfigIni.bGuitar有効 )\r
+ {\r
+ if( CDTXMania.DTX.bチップがある.Guitar && ( this.txWailing枠 != null ) )\r
+ {\r
+ this.txWailing枠.t2D描画( CDTXMania.app.Device, 0x24b, CDTXMania.ConfigIni.bReverse.Guitar ? ( 400 - this.txWailing枠.sz画像サイズ.Height ) : 0x45 );\r
+ }\r
+ if( CDTXMania.DTX.bチップがある.Bass && ( this.txWailing枠 != null ) )\r
+ {\r
+ this.txWailing枠.t2D描画( CDTXMania.app.Device, 0x1de, CDTXMania.ConfigIni.bReverse.Bass ? ( 400 - this.txWailing枠.sz画像サイズ.Height ) : 0x45 );\r
+ }\r
+ }\r
+ }\r
+ private void t進行描画・ギターベースフレーム()\r
+ {\r
+ if( ( ( CDTXMania.ConfigIni.eDark != Eダークモード.HALF ) && ( CDTXMania.ConfigIni.eDark != Eダークモード.FULL ) ) && CDTXMania.ConfigIni.bGuitar有効 )\r
+ {\r
+ if( CDTXMania.DTX.bチップがある.Guitar )\r
+ {\r
+ for( int i = 0; i < 0x163; i += 0x80 )\r
+ {\r
+ Rectangle rectangle = new Rectangle( 0, 0, 0x6d, 0x80 );\r
+ if( ( i + 0x80 ) > 0x163 )\r
+ {\r
+ rectangle.Height -= ( i + 0x80 ) - 0x163;\r
+ }\r
+ if( this.txレーンフレームGB != null )\r
+ {\r
+ this.txレーンフレームGB.t2D描画( CDTXMania.app.Device, 0x1fb, 0x39 + i, rectangle );\r
+ }\r
+ }\r
+ }\r
+ if( CDTXMania.DTX.bチップがある.Bass )\r
+ {\r
+ for( int j = 0; j < 0x163; j += 0x80 )\r
+ {\r
+ Rectangle rectangle2 = new Rectangle( 0, 0, 0x6d, 0x80 );\r
+ if( ( j + 0x80 ) > 0x163 )\r
+ {\r
+ rectangle2.Height -= ( j + 0x80 ) - 0x163;\r
+ }\r
+ if( this.txレーンフレームGB != null )\r
+ {\r
+ this.txレーンフレームGB.t2D描画( CDTXMania.app.Device, 0x18e, 0x39 + j, rectangle2 );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ private void t進行描画・ギターベース判定ライン()\r
+ {\r
+ if( ( CDTXMania.ConfigIni.eDark != Eダークモード.FULL ) && CDTXMania.ConfigIni.bGuitar有効 )\r
+ {\r
+ if( CDTXMania.DTX.bチップがある.Guitar )\r
+ {\r
+ int y = ( CDTXMania.ConfigIni.bReverse.Guitar ? 0x176 : 0x5f ) - 3;\r
+ for( int i = 0; i < 3; i++ )\r
+ {\r
+ if( this.txヒットバーGB != null )\r
+ {\r
+ this.txヒットバーGB.t2D描画( CDTXMania.app.Device, 0x1fd + ( 0x1a * i ), y );\r
+ this.txヒットバーGB.t2D描画( CDTXMania.app.Device, ( 0x1fd + ( 0x1a * i ) ) + 0x10, y, new Rectangle( 0, 0, 10, 0x10 ) );\r
+ }\r
+ }\r
+ }\r
+ if( CDTXMania.DTX.bチップがある.Bass )\r
+ {\r
+ int num3 = ( CDTXMania.ConfigIni.bReverse.Bass ? 0x176 : 0x5f ) - 3;\r
+ for( int j = 0; j < 3; j++ )\r
+ {\r
+ if( this.txヒットバーGB != null )\r
+ {\r
+ this.txヒットバーGB.t2D描画( CDTXMania.app.Device, 400 + ( 0x1a * j ), num3 );\r
+ this.txヒットバーGB.t2D描画( CDTXMania.app.Device, ( 400 + ( 0x1a * j ) ) + 0x10, num3, new Rectangle( 0, 0, 10, 0x10 ) );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ private void t進行描画・ゲージ()\r
+ {\r
+ if( ( ( CDTXMania.ConfigIni.eDark != Eダークモード.HALF ) && ( CDTXMania.ConfigIni.eDark != Eダークモード.FULL ) ) && ( ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) ) )\r
+ {\r
+ this.actGauge.On進行描画();\r
+ }\r
+ }\r
+ private void t進行描画・コンボ()\r
+ {\r
+ this.actCOMBO.On進行描画();\r
+ }\r
+ private void t進行描画・スコア()\r
+ {\r
+ this.actScore.On進行描画();\r
+ }\r
+ private void t進行描画・ステータスパネル()\r
+ {\r
+ this.actStatusPanels.On進行描画();\r
+ }\r
+ private bool t進行描画・チップ()\r
+ {\r
+ if( ( base.eフェーズID == CStage.Eフェーズ.演奏_STAGE_FAILED ) || ( base.eフェーズID == CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) )\r
+ {\r
+ return true;\r
+ }\r
+ if( ( this.n現在のトップChip == -1 ) || ( this.n現在のトップChip >= CDTXMania.DTX.listChip.Count ) )\r
+ {\r
+ return true;\r
+ }\r
+\r
+ //double speed = 264.0; // BPM150の時の1小節の長さ[dot]\r
+ double speed = 234.0; // BPM150の時の1小節の長さ[dot]\r
+\r
+ double num = ( ( ( ( this.act譜面スクロール速度.db現在の譜面スクロール速度.Drums + 1.0 ) * 0.5 ) * 37.5 ) * speed ) / 60000.0;\r
+ double num2 = ( ( ( ( ( this.act譜面スクロール速度.db現在の譜面スクロール速度.Guitar + 1.0 ) * 0.5 ) * 0.5 ) * 37.5 ) * speed ) / 60000.0;\r
+ double num3 = ( ( ( ( ( this.act譜面スクロール速度.db現在の譜面スクロール速度.Bass + 1.0 ) * 0.5 ) * 0.5 ) * 37.5 ) * speed ) / 60000.0;\r
+ int num4 = this.n現在のトップChip;\r
+ if( num4 == -1 )\r
+ {\r
+ return true;\r
+ }\r
+ CDTX dTX = CDTXMania.DTX;\r
+ CConfigIni configIni = CDTXMania.ConfigIni;\r
+ while( num4 < dTX.listChip.Count )\r
+ {\r
+ int num6;\r
+ CDTX.CChip pChip = dTX.listChip[ num4 ];\r
+ pChip.nバーからの距離dot.Drums = (int) ( ( pChip.n発声時刻ms - CDTXMania.Timer.n現在時刻 ) * num );\r
+ pChip.nバーからの距離dot.Guitar = (int) ( ( pChip.n発声時刻ms - CDTXMania.Timer.n現在時刻 ) * num2 );\r
+ pChip.nバーからの距離dot.Bass = (int) ( ( pChip.n発声時刻ms - CDTXMania.Timer.n現在時刻 ) * num3 );\r
+ if( Math.Min( Math.Min( pChip.nバーからの距離dot.Drums, pChip.nバーからの距離dot.Guitar ), pChip.nバーからの距離dot.Bass ) > 450 )\r
+ {\r
+ break;\r
+ }\r
+ if( ( ( num4 == this.n現在のトップChip ) && ( pChip.nバーからの距離dot.Drums < -65 ) ) && pChip.bHit )\r
+ {\r
+ this.n現在のトップChip++;\r
+ num4 = this.n現在のトップChip;\r
+ continue;\r
+ }\r
+ if( ( ( pChip.e楽器パート != E楽器パート.UNKNOWN ) && !pChip.bHit ) && ( ( pChip.nバーからの距離dot.Drums < 0 ) && ( this.e指定時刻からChipのJUDGEを返す( CDTXMania.Timer.n現在時刻, pChip ) == E判定.Miss ) ) )\r
+ {\r
+ this.tチップのヒット処理( CDTXMania.Timer.n現在時刻, pChip );\r
+ }\r
+ switch( pChip.nチャンネル番号 )\r
+ {\r
+ case 1:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ if( configIni.bBGM音を発声する )\r
+ {\r
+ dTX.tチップの再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, 10, dTX.nモニタを考慮した音量( E楽器パート.UNKNOWN ) );\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 3:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ this.actPlayInfo.dbBPM = ( pChip.n整数値 * ( ( (double) configIni.n演奏速度 ) / 20.0 ) ) + dTX.BASEBPM;\r
+ }\r
+ break;\r
+\r
+ case 4:\r
+ case 7:\r
+ case 0x55:\r
+ case 0x56:\r
+ case 0x57:\r
+ case 0x58:\r
+ case 0x59:\r
+ case 0x60:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ if( configIni.bBGA有効 )\r
+ {\r
+ switch( pChip.eBGA種別 )\r
+ {\r
+ case EBGA種別.BMPTEX:\r
+ if( pChip.rBMPTEX != null )\r
+ {\r
+ this.actBGA.Start( pChip.nチャンネル番号, null, pChip.rBMPTEX, pChip.rBMPTEX.tx画像.sz画像サイズ.Width, pChip.rBMPTEX.tx画像.sz画像サイズ.Height, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );\r
+ }\r
+ break;\r
+\r
+ case EBGA種別.BGA:\r
+ if( ( pChip.rBGA != null ) && ( ( pChip.rBMP != null ) || ( pChip.rBMPTEX != null ) ) )\r
+ {\r
+ this.actBGA.Start( pChip.nチャンネル番号, pChip.rBMP, pChip.rBMPTEX, pChip.rBGA.pt画像側右下座標.X - pChip.rBGA.pt画像側左上座標.X, pChip.rBGA.pt画像側右下座標.Y - pChip.rBGA.pt画像側左上座標.Y, 0, 0, pChip.rBGA.pt画像側左上座標.X, pChip.rBGA.pt画像側左上座標.Y, 0, 0, pChip.rBGA.pt表示座標.X, pChip.rBGA.pt表示座標.Y, 0, 0, 0 );\r
+ }\r
+ break;\r
+\r
+ case EBGA種別.BGAPAN:\r
+ if( ( pChip.rBGAPan != null ) && ( ( pChip.rBMP != null ) || ( pChip.rBMPTEX != null ) ) )\r
+ {\r
+ this.actBGA.Start( pChip.nチャンネル番号, pChip.rBMP, pChip.rBMPTEX, pChip.rBGAPan.sz開始サイズ.Width, pChip.rBGAPan.sz開始サイズ.Height, pChip.rBGAPan.sz終了サイズ.Width, pChip.rBGAPan.sz終了サイズ.Height, pChip.rBGAPan.pt画像側開始位置.X, pChip.rBGAPan.pt画像側開始位置.Y, pChip.rBGAPan.pt画像側終了位置.X, pChip.rBGAPan.pt画像側終了位置.Y, pChip.rBGAPan.pt表示側開始位置.X, pChip.rBGAPan.pt表示側開始位置.Y, pChip.rBGAPan.pt表示側終了位置.X, pChip.rBGAPan.pt表示側終了位置.Y, pChip.n総移動時間 );\r
+ }\r
+ break;\r
+\r
+ default:\r
+ if( pChip.rBMP != null )\r
+ {\r
+ this.actBGA.Start( pChip.nチャンネル番号, pChip.rBMP, null, pChip.rBMP.n幅, pChip.rBMP.n高さ, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );\r
+ }\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 8:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ if( dTX.listBPM.ContainsKey( pChip.n整数値・内部番号 ) )\r
+ {\r
+ this.actPlayInfo.dbBPM = ( dTX.listBPM[ pChip.n整数値・内部番号 ].dbBPM値 * ( ( (double) configIni.n演奏速度 ) / 20.0 ) ) + dTX.BASEBPM;\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 0x11:\r
+ case 0x12:\r
+ case 0x13:\r
+ case 20:\r
+ case 0x15:\r
+ case 0x16:\r
+ case 0x17:\r
+ case 0x18:\r
+ case 0x19:\r
+ case 0x1a:\r
+ num6 = this.nチャンネル0Atoレーン07[ pChip.nチャンネル番号 - 0x11 ];\r
+ if( configIni.bDrums有効 )\r
+ {\r
+ if( configIni.bSudden.Drums )\r
+ {\r
+ if( pChip.nバーからの距離dot.Drums < 200 )\r
+ {\r
+ pChip.b可視 = true;\r
+ pChip.n透明度 = 0xff;\r
+ }\r
+ else if( pChip.nバーからの距離dot.Drums < 250 )\r
+ {\r
+ pChip.b可視 = true;\r
+ pChip.n透明度 = 0xff - ( (int) ( ( ( (double) ( pChip.nバーからの距離dot.Drums - 200 ) ) * 255.0 ) / 50.0 ) );\r
+ }\r
+ else\r
+ {\r
+ pChip.b可視 = false;\r
+ pChip.n透明度 = 0;\r
+ }\r
+ }\r
+ if( configIni.bHidden.Drums )\r
+ {\r
+ if( pChip.nバーからの距離dot.Drums < 100 )\r
+ {\r
+ pChip.b可視 = false;\r
+ }\r
+ else if( pChip.nバーからの距離dot.Drums < 150 )\r
+ {\r
+ pChip.b可視 = true;\r
+ pChip.n透明度 = (int) ( ( ( (double) ( pChip.nバーからの距離dot.Drums - 100 ) ) * 255.0 ) / 50.0 );\r
+ }\r
+ }\r
+ if( !pChip.bHit && pChip.b可視 )\r
+ {\r
+ if( this.txチップ != null )\r
+ {\r
+ this.txチップ.n透明度 = pChip.n透明度;\r
+ }\r
+ int x = this.nチャンネルtoX座標[ pChip.nチャンネル番号 - 0x11 ];\r
+ int num8 = configIni.bReverse.Drums ? ( 0x38 + pChip.nバーからの距離dot.Drums ) : ( 0x1a6 - pChip.nバーからの距離dot.Drums );\r
+ if( this.txチップ != null )\r
+ {\r
+ this.txチップ.vc拡大縮小倍率 = new Vector3( (float) pChip.dbチップサイズ倍率, (float) pChip.dbチップサイズ倍率, 1f );\r
+ }\r
+ int num9 = this.ctチップ模様アニメ.Drums.n現在の値;\r
+ switch( pChip.nチャンネル番号 )\r
+ {\r
+ case 0x11:\r
+ x = ( x + 0x10 ) - ( (int) ( ( 32.0 * pChip.dbチップサイズ倍率 ) / 2.0 ) );\r
+ if( this.txチップ != null )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, x, num8 - 4, new Rectangle( 0x2c, num9 * 7, 0x20, 8 ) );\r
+ }\r
+ break;\r
+\r
+ case 0x12:\r
+ x = ( x + 0x10 ) - ( (int) ( ( 32.0 * pChip.dbチップサイズ倍率 ) / 2.0 ) );\r
+ if( this.txチップ != null )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, x, num8 - 4, new Rectangle( 0x4c, num9 * 7, 0x20, 8 ) );\r
+ }\r
+ break;\r
+\r
+ case 0x13:\r
+ x = ( x + 0x16 ) - ( (int) ( ( 44.0 * pChip.dbチップサイズ倍率 ) / 2.0 ) );\r
+ if( this.txチップ != null )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, x, num8 - 5, new Rectangle( 0, num9 * 9, 0x2c, 10 ) );\r
+ }\r
+ break;\r
+\r
+ case 20:\r
+ x = ( x + 0x10 ) - ( (int) ( ( 32.0 * pChip.dbチップサイズ倍率 ) / 2.0 ) );\r
+ if( this.txチップ != null )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, x, num8 - 4, new Rectangle( 0x6c, num9 * 7, 0x20, 8 ) );\r
+ }\r
+ break;\r
+\r
+ case 0x15:\r
+ x = ( x + 0x10 ) - ( (int) ( ( 32.0 * pChip.dbチップサイズ倍率 ) / 2.0 ) );\r
+ if( this.txチップ != null )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, x, num8 - 4, new Rectangle( 140, num9 * 7, 0x20, 8 ) );\r
+ }\r
+ break;\r
+\r
+ case 0x16:\r
+ x = ( x + 0x13 ) - ( (int) ( ( 38.0 * pChip.dbチップサイズ倍率 ) / 2.0 ) );\r
+ if( this.txチップ != null )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, x, num8 - 0x15, new Rectangle( 0xcc, 0x158, 0x26, 0x24 ) );\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, x, num8 - 4, new Rectangle( 0xcc, num9 * 7, 0x26, 8 ) );\r
+ }\r
+ break;\r
+\r
+ case 0x17:\r
+ x = ( x + 0x10 ) - ( (int) ( ( 32.0 * pChip.dbチップサイズ倍率 ) / 2.0 ) );\r
+ if( this.txチップ != null )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, x, num8 - 4, new Rectangle( 0xac, num9 * 7, 0x20, 8 ) );\r
+ }\r
+ break;\r
+\r
+ case 0x18:\r
+ x = ( x + 13 ) - ( (int) ( ( 26.0 * pChip.dbチップサイズ倍率 ) / 2.0 ) );\r
+ if( this.txチップ != null )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, x, num8 - 4, new Rectangle( 0xf2, num9 * 7, 0x1a, 8 ) );\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, x, num8 - 9, new Rectangle( 0xf2, 0x158, 0x1a, 0x12 ) );\r
+ }\r
+ break;\r
+\r
+ case 0x19:\r
+ x = ( x + 13 ) - ( (int) ( ( 26.0 * pChip.dbチップサイズ倍率 ) / 2.0 ) );\r
+ if( this.txチップ != null )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, x, num8 - 4, new Rectangle( 0xf2, num9 * 7, 0x1a, 8 ) );\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, x, num8 - 9, new Rectangle( 0xf2, 0x158, 0x1a, 0x12 ) );\r
+ }\r
+ break;\r
+\r
+ case 0x1a:\r
+ x = ( x + 0x13 ) - ( (int) ( ( 38.0 * pChip.dbチップサイズ倍率 ) / 2.0 ) );\r
+ if( this.txチップ != null )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, x, num8 - 0x15, new Rectangle( 0xcc, 0x158, 0x26, 0x24 ) );\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, x, num8 - 4, new Rectangle( 0xcc, num9 * 7, 0x26, 8 ) );\r
+ }\r
+ break;\r
+ }\r
+ if( this.txチップ != null )\r
+ {\r
+ this.txチップ.vc拡大縮小倍率 = new Vector3( 1f, 1f, 1f );\r
+ this.txチップ.n透明度 = 0xff;\r
+ }\r
+ }\r
+ if( ( configIni.bAutoPlay[ num6 ] && !pChip.bHit ) && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ this.actLaneFlushD.Start( (Eドラムレーン) num6, ( (float) CInput管理.n通常音量 ) / 127f );\r
+ bool flag = this.bフィルイン中;\r
+ bool flag2 = this.bフィルイン中 && this.bフィルイン区間の最後のChipである( pChip );\r
+ bool flag3 = flag2;\r
+ this.actChipFireD.Start( (Eドラムレーン) num6, flag, flag2, flag3 );\r
+ this.actPad.Hit( this.nチャンネル0Atoパッド08[ pChip.nチャンネル番号 - 0x11 ] );\r
+ this.tサウンド再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, E楽器パート.DRUMS, dTX.nモニタを考慮した音量( E楽器パート.DRUMS ) );\r
+ this.tチップのヒット処理( pChip.n発声時刻ms, pChip );\r
+ }\r
+ break;\r
+ }\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ {\r
+ this.tサウンド再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, E楽器パート.DRUMS, dTX.nモニタを考慮した音量( E楽器パート.DRUMS ) );\r
+ pChip.bHit = true;\r
+ }\r
+ break;\r
+\r
+ case 0x1f:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ this.r現在の歓声Chip.Drums = pChip;\r
+ }\r
+ break;\r
+\r
+ case 0x20:\r
+ case 0x21:\r
+ case 0x22:\r
+ case 0x23:\r
+ case 0x24:\r
+ case 0x25:\r
+ case 0x26:\r
+ case 0x27:\r
+ if( configIni.bGuitar有効 )\r
+ {\r
+ if( configIni.bSudden.Guitar )\r
+ {\r
+ pChip.b可視 = pChip.nバーからの距離dot.Guitar < 200;\r
+ }\r
+ if( configIni.bHidden.Guitar && ( pChip.nバーからの距離dot.Guitar < 100 ) )\r
+ {\r
+ pChip.b可視 = false;\r
+ }\r
+ if( !pChip.bHit && pChip.b可視 )\r
+ {\r
+ int num10 = configIni.bReverse.Guitar ? ( 0x176 - pChip.nバーからの距離dot.Guitar ) : ( 0x5f + pChip.nバーからの距離dot.Guitar );\r
+ if( ( num10 > 0x39 ) && ( num10 < 0x19c ) )\r
+ {\r
+ int num11 = this.ctチップ模様アニメ.Guitar.n現在の値;\r
+ if( pChip.nチャンネル番号 == 0x20 )\r
+ {\r
+ if( this.txチップ != null )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 0x1fd, num10 - 2, new Rectangle( 0x10c, 0x90 + ( ( num11 % 5 ) * 6 ), 0x4c, 6 ) );\r
+ }\r
+ }\r
+ else if( !configIni.bLeft.Guitar )\r
+ {\r
+ Rectangle rectangle = new Rectangle( 0x10c, num11 * 6, 0x18, 6 );\r
+ if( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) && ( this.txチップ != null ) )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 0x1fd, num10 - 3, rectangle );\r
+ }\r
+ rectangle.X += 0x18;\r
+ if( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) && ( this.txチップ != null ) )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 0x217, num10 - 3, rectangle );\r
+ }\r
+ rectangle.X += 0x18;\r
+ if( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) && ( this.txチップ != null ) )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 0x231, num10 - 3, rectangle );\r
+ }\r
+ }\r
+ else\r
+ {\r
+ Rectangle rectangle2 = new Rectangle( 0x10c, num11 * 6, 0x18, 6 );\r
+ if( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) && ( this.txチップ != null ) )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 0x231, num10 - 3, rectangle2 );\r
+ }\r
+ rectangle2.X += 0x18;\r
+ if( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) && ( this.txチップ != null ) )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 0x217, num10 - 3, rectangle2 );\r
+ }\r
+ rectangle2.X += 0x18;\r
+ if( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) && ( this.txチップ != null ) )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 0x1fd, num10 - 3, rectangle2 );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ if( ( configIni.bAutoPlay.Guitar && !pChip.bHit ) && ( pChip.nバーからの距離dot.Guitar < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ if( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) || ( pChip.nチャンネル番号 == 0x20 ) )\r
+ {\r
+ this.actChipFireGB.Start( 0 );\r
+ }\r
+ if( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) || ( pChip.nチャンネル番号 == 0x20 ) )\r
+ {\r
+ this.actChipFireGB.Start( 1 );\r
+ }\r
+ if( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) || ( pChip.nチャンネル番号 == 0x20 ) )\r
+ {\r
+ this.actChipFireGB.Start( 2 );\r
+ }\r
+ this.tサウンド再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, E楽器パート.GUITAR, dTX.nモニタを考慮した音量( E楽器パート.GUITAR ) );\r
+ this.r次にくるギターChip = null;\r
+ this.tチップのヒット処理( pChip.n発声時刻ms, pChip );\r
+ }\r
+ break;\r
+ }\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Guitar < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ this.tサウンド再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, E楽器パート.GUITAR, dTX.nモニタを考慮した音量( E楽器パート.GUITAR ) );\r
+ }\r
+ break;\r
+\r
+ case 40:\r
+ if( configIni.bGuitar有効 )\r
+ {\r
+ if( configIni.bSudden.Guitar )\r
+ {\r
+ pChip.b可視 = pChip.nバーからの距離dot.Guitar < 200;\r
+ }\r
+ if( configIni.bHidden.Guitar && ( pChip.nバーからの距離dot.Guitar < 100 ) )\r
+ {\r
+ pChip.b可視 = false;\r
+ }\r
+ if( !pChip.bHit && pChip.b可視 )\r
+ {\r
+ int num14 = 0x19;\r
+ int num15 = configIni.bReverse.Guitar ? ( 0x176 - pChip.nバーからの距離dot.Guitar ) : ( 0x5f + pChip.nバーからの距離dot.Guitar );\r
+ int num16 = num15 - 0x39;\r
+ int num17 = 0;\r
+ if( ( num16 < ( 0x163 + num14 ) ) && ( num16 > -num14 ) )\r
+ {\r
+ int num18 = this.ctWailingチップ模様アニメ.n現在の値;\r
+ Rectangle rectangle5 = new Rectangle( 0x10c + ( num18 * 20 ), 0xae, 20, 50 );\r
+ if( num16 < num14 )\r
+ {\r
+ rectangle5.Y += num14 - num16;\r
+ rectangle5.Height -= num14 - num16;\r
+ num17 = num14 - num16;\r
+ }\r
+ if( num16 > ( 0x163 - num14 ) )\r
+ {\r
+ rectangle5.Height -= num16 - ( 0x163 - num14 );\r
+ }\r
+ if( ( rectangle5.Bottom > rectangle5.Top ) && ( this.txチップ != null ) )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 0x24c, ( num15 - num14 ) + num17, rectangle5 );\r
+ }\r
+ }\r
+ }\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Guitar < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ if( configIni.bAutoPlay.Guitar )\r
+ {\r
+ this.actWailingBonus.Start( E楽器パート.GUITAR, this.r現在の歓声Chip.Guitar );\r
+ }\r
+ }\r
+ break;\r
+ }\r
+ pChip.bHit = true;\r
+ break;\r
+\r
+ case 0x2f:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Guitar < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ this.r現在の歓声Chip.Guitar = pChip;\r
+ }\r
+ break;\r
+\r
+ case 0x31:\r
+ case 50:\r
+ case 0x33:\r
+ case 0x34:\r
+ case 0x35:\r
+ case 0x36:\r
+ case 0x37:\r
+ case 0x38:\r
+ case 0x39:\r
+ case 0x3a:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ }\r
+ break;\r
+\r
+ case 80:\r
+ {\r
+ int num24 = pChip.n発声位置 / 0x180;\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ this.actPlayInfo.n小節番号 = num24 - 1;\r
+ if( configIni.bWave再生位置自動調整機能有効 )\r
+ {\r
+ dTX.tWave再生位置自動補正();\r
+ }\r
+ }\r
+ if( configIni.bDrums有効 )\r
+ {\r
+ if( configIni.b演奏情報を表示する && ( configIni.eDark == Eダークモード.OFF ) )\r
+ {\r
+ int num28 = num24 - 1;\r
+ CDTXMania.act文字コンソール.tPrint( 0x14d, configIni.bReverse.Drums ? ( ( 0x38 + pChip.nバーからの距離dot.Drums ) - 0x11 ) : ( ( 0x1a6 - pChip.nバーからの距離dot.Drums ) - 0x11 ), C文字コンソール.Eフォント種別.白, num28.ToString() );\r
+ }\r
+ if( ( ( configIni.eDark != Eダークモード.FULL ) && pChip.b可視 ) && ( this.txチップ != null ) )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 0x23, configIni.bReverse.Drums ? ( ( 0x38 + pChip.nバーからの距離dot.Drums ) - 1 ) : ( ( 0x1a6 - pChip.nバーからの距離dot.Drums ) - 1 ), new Rectangle( 0, 0x1bc, 0x128, 2 ) );\r
+ }\r
+ }\r
+ if( ( pChip.b可視 && configIni.bGuitar有効 ) && ( configIni.eDark != Eダークモード.FULL ) )\r
+ {\r
+ int y = configIni.bReverse.Guitar ? ( ( 0x176 - pChip.nバーからの距離dot.Guitar ) - 1 ) : ( ( 0x5f + pChip.nバーからの距離dot.Guitar ) - 1 );\r
+ if( ( dTX.bチップがある.Guitar && ( y > 0x39 ) ) && ( ( y < 0x19c ) && ( this.txチップ != null ) ) )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 0x1fb, y, new Rectangle( 0, 450, 0x4e, 1 ) );\r
+ }\r
+ y = configIni.bReverse.Bass ? ( ( 0x176 - pChip.nバーからの距離dot.Bass ) - 1 ) : ( ( 0x5f + pChip.nバーからの距離dot.Bass ) - 1 );\r
+ if( ( dTX.bチップがある.Bass && ( y > 0x39 ) ) && ( ( y < 0x19c ) && ( this.txチップ != null ) ) )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 0x18e, y, new Rectangle( 0, 450, 0x4e, 1 ) );\r
+ }\r
+ }\r
+ break;\r
+ }\r
+ case 0x51:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ }\r
+ if( ( ( configIni.eDark != Eダークモード.FULL ) && pChip.b可視 ) && ( this.txチップ != null ) )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 0x23, configIni.bReverse.Drums ? ( ( 0x38 + pChip.nバーからの距離dot.Drums ) - 1 ) : ( ( 0x1a6 - pChip.nバーからの距離dot.Drums ) - 1 ), new Rectangle( 0, 0x1bf, 0x128, 1 ) );\r
+ }\r
+ break;\r
+\r
+ case 0x52:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ }\r
+ break;\r
+\r
+ case 0x53:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ switch( pChip.n整数値 )\r
+ {\r
+ case 1:\r
+ if( configIni.bフィルイン有効 )\r
+ {\r
+ this.bフィルイン中 = true;\r
+ }\r
+ break;\r
+\r
+ case 2:\r
+ if( configIni.bフィルイン有効 )\r
+ {\r
+ this.bフィルイン中 = false;\r
+ }\r
+ if( ( ( this.actCOMBO.n現在のコンボ数.Drums > 0 ) || configIni.bドラムが全部オートプレイである ) && configIni.b歓声を発声する )\r
+ {\r
+ if( this.r現在の歓声Chip.Drums != null )\r
+ {\r
+ dTX.tチップの再生( this.r現在の歓声Chip.Drums, CDTXMania.Timer.nシステム時刻, 10, dTX.nモニタを考慮した音量( E楽器パート.UNKNOWN ) );\r
+ }\r
+ else\r
+ {\r
+ CDTXMania.Skin.sound歓声音.n位置・次に鳴るサウンド = 0;\r
+ CDTXMania.Skin.sound歓声音.t再生する();\r
+ }\r
+ }\r
+ break;\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 0x54:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ if( configIni.bAVI有効 )\r
+ {\r
+ switch( pChip.eAVI種別 )\r
+ {\r
+ case EAVI種別.AVI:\r
+ if( pChip.rAVI != null )\r
+ {\r
+ this.actAVI.Start( pChip.nチャンネル番号, pChip.rAVI, 0x116, 0x163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, pChip.n発声時刻ms );\r
+ }\r
+ break;\r
+\r
+ case EAVI種別.AVIPAN:\r
+ if( pChip.rAVIPan != null )\r
+ {\r
+ this.actAVI.Start( pChip.nチャンネル番号, pChip.rAVI, pChip.rAVIPan.sz開始サイズ.Width, pChip.rAVIPan.sz開始サイズ.Height, pChip.rAVIPan.sz終了サイズ.Width, pChip.rAVIPan.sz終了サイズ.Height, pChip.rAVIPan.pt動画側開始位置.X, pChip.rAVIPan.pt動画側開始位置.Y, pChip.rAVIPan.pt動画側終了位置.X, pChip.rAVIPan.pt動画側終了位置.Y, pChip.rAVIPan.pt表示側開始位置.X, pChip.rAVIPan.pt表示側開始位置.Y, pChip.rAVIPan.pt表示側終了位置.X, pChip.rAVIPan.pt表示側終了位置.Y, pChip.n総移動時間, pChip.n発声時刻ms );\r
+ }\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 0x61:\r
+ case 0x62:\r
+ case 0x63:\r
+ case 100:\r
+ case 0x65:\r
+ case 0x66:\r
+ case 0x67:\r
+ case 0x68:\r
+ case 0x69:\r
+ case 0x70:\r
+ case 0x71:\r
+ case 0x72:\r
+ case 0x73:\r
+ case 0x74:\r
+ case 0x75:\r
+ case 0x76:\r
+ case 0x77:\r
+ case 120:\r
+ case 0x79:\r
+ case 0x80:\r
+ case 0x81:\r
+ case 130:\r
+ case 0x83:\r
+ case 0x84:\r
+ case 0x85:\r
+ case 0x86:\r
+ case 0x87:\r
+ case 0x88:\r
+ case 0x89:\r
+ case 0x90:\r
+ case 0x91:\r
+ case 0x92:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ if( configIni.bBGM音を発声する )\r
+ {\r
+ dTX.tWavの再生停止( this.n最後に再生したBGMの実WAV番号[ pChip.nチャンネル番号 - 0x61 ] );\r
+ dTX.tチップの再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, 10, dTX.nモニタを考慮した音量( E楽器パート.UNKNOWN ) );\r
+ this.n最後に再生したBGMの実WAV番号[ pChip.nチャンネル番号 - 0x61 ] = pChip.n整数値・内部番号;\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 160:\r
+ case 0xa1:\r
+ case 0xa2:\r
+ case 0xa3:\r
+ case 0xa4:\r
+ case 0xa5:\r
+ case 0xa6:\r
+ case 0xa7:\r
+ if( configIni.bGuitar有効 )\r
+ {\r
+ if( configIni.bSudden.Bass )\r
+ {\r
+ pChip.b可視 = pChip.nバーからの距離dot.Bass < 200;\r
+ }\r
+ if( configIni.bHidden.Bass && ( pChip.nバーからの距離dot.Bass < 100 ) )\r
+ {\r
+ pChip.b可視 = false;\r
+ }\r
+ if( !pChip.bHit && pChip.b可視 )\r
+ {\r
+ int num12 = configIni.bReverse.Bass ? ( 0x176 - pChip.nバーからの距離dot.Bass ) : ( 0x5f + pChip.nバーからの距離dot.Bass );\r
+ if( ( num12 > 0x39 ) && ( num12 < 0x19c ) )\r
+ {\r
+ int num13 = this.ctチップ模様アニメ.Bass.n現在の値;\r
+ if( pChip.nチャンネル番号 == 160 )\r
+ {\r
+ if( this.txチップ != null )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 400, num12 - 2, new Rectangle( 0x10c, 0x90 + ( ( num13 % 5 ) * 6 ), 0x4c, 6 ) );\r
+ }\r
+ }\r
+ else if( !configIni.bLeft.Bass )\r
+ {\r
+ Rectangle rectangle3 = new Rectangle( 0x10c, num13 * 6, 0x18, 6 );\r
+ if( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) && ( this.txチップ != null ) )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 400, num12 - 3, rectangle3 );\r
+ }\r
+ rectangle3.X += 0x18;\r
+ if( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) && ( this.txチップ != null ) )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 0x1aa, num12 - 3, rectangle3 );\r
+ }\r
+ rectangle3.X += 0x18;\r
+ if( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) && ( this.txチップ != null ) )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 0x1c4, num12 - 3, rectangle3 );\r
+ }\r
+ }\r
+ else\r
+ {\r
+ Rectangle rectangle4 = new Rectangle( 0x10c, num13 * 6, 0x18, 6 );\r
+ if( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) && ( this.txチップ != null ) )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 0x1c4, num12 - 3, rectangle4 );\r
+ }\r
+ rectangle4.X += 0x18;\r
+ if( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) && ( this.txチップ != null ) )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 0x1aa, num12 - 3, rectangle4 );\r
+ }\r
+ rectangle4.X += 0x18;\r
+ if( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) && ( this.txチップ != null ) )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 400, num12 - 3, rectangle4 );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ if( ( configIni.bAutoPlay.Bass && !pChip.bHit ) && ( pChip.nバーからの距離dot.Bass < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ if( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) || ( pChip.nチャンネル番号 == 160 ) )\r
+ {\r
+ this.actChipFireGB.Start( 3 );\r
+ }\r
+ if( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) || ( pChip.nチャンネル番号 == 160 ) )\r
+ {\r
+ this.actChipFireGB.Start( 4 );\r
+ }\r
+ if( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) || ( pChip.nチャンネル番号 == 160 ) )\r
+ {\r
+ this.actChipFireGB.Start( 5 );\r
+ }\r
+ this.tサウンド再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, E楽器パート.BASS, dTX.nモニタを考慮した音量( E楽器パート.BASS ) );\r
+ this.r次にくるベースChip = null;\r
+ this.tチップのヒット処理( pChip.n発声時刻ms, pChip );\r
+ }\r
+ break;\r
+ }\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Bass < 0 ) )\r
+ {\r
+ this.tサウンド再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, E楽器パート.BASS, dTX.nモニタを考慮した音量( E楽器パート.BASS ) );\r
+ pChip.bHit = true;\r
+ }\r
+ break;\r
+\r
+ case 0xa8:\r
+ if( configIni.bGuitar有効 )\r
+ {\r
+ if( configIni.bSudden.Bass )\r
+ {\r
+ pChip.b可視 = pChip.nバーからの距離dot.Bass < 200;\r
+ }\r
+ if( configIni.bHidden.Bass && ( pChip.nバーからの距離dot.Bass < 100 ) )\r
+ {\r
+ pChip.b可視 = false;\r
+ }\r
+ if( !pChip.bHit && pChip.b可視 )\r
+ {\r
+ int num19 = 0x19;\r
+ int num20 = configIni.bReverse.Bass ? ( 0x176 - pChip.nバーからの距離dot.Bass ) : ( 0x5f + pChip.nバーからの距離dot.Bass );\r
+ int num21 = num20 - 0x39;\r
+ int num22 = 0;\r
+ if( ( num21 < ( 0x163 + num19 ) ) && ( num21 > -num19 ) )\r
+ {\r
+ int num23 = this.ctWailingチップ模様アニメ.n現在の値;\r
+ Rectangle rectangle6 = new Rectangle( 0x10c + ( num23 * 20 ), 0xae, 20, 50 );\r
+ if( num21 < num19 )\r
+ {\r
+ rectangle6.Y += num19 - num21;\r
+ rectangle6.Height -= num19 - num21;\r
+ num22 = num19 - num21;\r
+ }\r
+ if( num21 > ( 0x163 - num19 ) )\r
+ {\r
+ rectangle6.Height -= num21 - ( 0x163 - num19 );\r
+ }\r
+ if( ( rectangle6.Bottom > rectangle6.Top ) && ( this.txチップ != null ) )\r
+ {\r
+ this.txチップ.t2D描画( CDTXMania.app.Device, 0x1df, ( num20 - num19 ) + num22, rectangle6 );\r
+ }\r
+ }\r
+ }\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Bass < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ if( configIni.bAutoPlay.Bass )\r
+ {\r
+ this.actWailingBonus.Start( E楽器パート.BASS, this.r現在の歓声Chip.Bass );\r
+ }\r
+ }\r
+ break;\r
+ }\r
+ pChip.bHit = true;\r
+ break;\r
+\r
+ case 0xaf:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Bass < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ this.r現在の歓声Chip.Bass = pChip;\r
+ }\r
+ break;\r
+\r
+ case 0xb1:\r
+ case 0xb2:\r
+ case 0xb3:\r
+ case 180:\r
+ case 0xb5:\r
+ case 0xb6:\r
+ case 0xb7:\r
+ case 0xb8:\r
+ case 0xb9:\r
+ case 0xbc:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ this.r現在の空うちドラムChip[ (int) this.eチャンネルtoパッド[ pChip.nチャンネル番号 - 0xb1 ] ] = pChip;\r
+ pChip.nチャンネル番号 = ( pChip.nチャンネル番号 != 0xbc ) ? ( ( pChip.nチャンネル番号 - 0xb1 ) + 0x11 ) : 0x1a;\r
+ }\r
+ break;\r
+\r
+ case 0xba:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Guitar < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ this.r現在の空うちギターChip = pChip;\r
+ pChip.nチャンネル番号 = 0x20;\r
+ }\r
+ break;\r
+\r
+ case 0xbb:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Bass < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ this.r現在の空うちベースChip = pChip;\r
+ pChip.nチャンネル番号 = 160;\r
+ }\r
+ break;\r
+\r
+ case 0xc4:\r
+ case 0xc7:\r
+ case 0xd5:\r
+ case 0xd6:\r
+ case 0xd7:\r
+ case 0xd8:\r
+ case 0xd9:\r
+ case 0xe0:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ if( ( configIni.bBGA有効 && ( pChip.eBGA種別 == EBGA種別.BMP ) ) || ( pChip.eBGA種別 == EBGA種別.BMPTEX ) )\r
+ {\r
+ for( int i = 0; i < 8; i++ )\r
+ {\r
+ if( this.nBGAスコープチャンネルマップ[ 0, i ] == pChip.nチャンネル番号 )\r
+ {\r
+ this.actBGA.ChangeScope( this.nBGAスコープチャンネルマップ[ 1, i ], pChip.rBMP, pChip.rBMPTEX );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ break;\r
+\r
+ default:\r
+ if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ }\r
+ break;\r
+ }\r
+\r
+ num4++;\r
+ }\r
+ return false;\r
+ }\r
+ private void t進行描画・チップアニメ()\r
+ {\r
+ for( int i = 0; i < 3; i++ )\r
+ {\r
+ this.ctチップ模様アニメ[ i ].t進行Loop();\r
+ }\r
+ this.ctWailingチップ模様アニメ.t進行Loop();\r
+ }\r
+ private void t進行描画・チップファイアD()\r
+ {\r
+ this.actChipFireD.On進行描画();\r
+ }\r
+ private void t進行描画・チップファイアGB()\r
+ {\r
+ this.actChipFireGB.On進行描画();\r
+ }\r
+ private void t進行描画・ドラムパッド()\r
+ {\r
+ if( CDTXMania.ConfigIni.eDark != Eダークモード.FULL )\r
+ {\r
+ this.actPad.On進行描画();\r
+ }\r
+ }\r
+ private void t進行描画・パネル文字列()\r
+ {\r
+ if( ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) )\r
+ {\r
+ this.actPanel.t進行描画( 0x150, 0x1ab );\r
+ }\r
+ }\r
+ private bool t進行描画・フェードイン・アウト()\r
+ {\r
+ switch( base.eフェーズID )\r
+ {\r
+ case CStage.Eフェーズ.共通_フェードイン:\r
+ if( this.actFI.On進行描画() != 0 )\r
+ {\r
+ base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
+ }\r
+ break;\r
+\r
+ case CStage.Eフェーズ.共通_フェードアウト:\r
+ case CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト:\r
+ if( this.actFO.On進行描画() != 0 )\r
+ {\r
+ return true;\r
+ }\r
+ break;\r
+\r
+ case CStage.Eフェーズ.演奏_STAGE_CLEAR_フェードアウト:\r
+ if( this.actFOClear.On進行描画() == 0 )\r
+ {\r
+ break;\r
+ }\r
+ return true;\r
+ }\r
+ return false;\r
+ }\r
+ private void t進行描画・レーンフラッシュD()\r
+ {\r
+ if( ( ( CDTXMania.ConfigIni.eDark != Eダークモード.HALF ) && ( CDTXMania.ConfigIni.eDark != Eダークモード.FULL ) ) && ( ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) ) )\r
+ {\r
+ this.actLaneFlushD.On進行描画();\r
+ }\r
+ }\r
+ private void t進行描画・レーンフラッシュGB()\r
+ {\r
+ if( ( ( CDTXMania.ConfigIni.eDark != Eダークモード.HALF ) && ( CDTXMania.ConfigIni.eDark != Eダークモード.FULL ) ) && CDTXMania.ConfigIni.bGuitar有効 )\r
+ {\r
+ this.actLaneFlushGB.On進行描画();\r
+ }\r
+ }\r
+ private void t進行描画・演奏情報()\r
+ {\r
+ if( !CDTXMania.ConfigIni.b演奏情報を表示しない )\r
+ {\r
+ this.actPlayInfo.t進行描画( 0x152, 0x39 );\r
+ }\r
+ }\r
+ private void t進行描画・背景()\r
+ {\r
+ if( CDTXMania.ConfigIni.eDark == Eダークモード.OFF )\r
+ {\r
+ if( this.tx背景 != null )\r
+ {\r
+ this.tx背景.t2D描画( CDTXMania.app.Device, 0, 0 );\r
+ }\r
+ }\r
+ else\r
+ {\r
+ CDTXMania.app.Device.Clear( ClearFlags.ZBuffer | ClearFlags.Target, Color.Black, 0f, 0 );\r
+ }\r
+ }\r
+ private void t進行描画・判定ライン()\r
+ {\r
+ if( CDTXMania.ConfigIni.eDark != Eダークモード.FULL )\r
+ {\r
+ int y = CDTXMania.ConfigIni.bReverse.Drums ? 0x35 : 0x1a3;\r
+ for( int i = 0x20; i < 0x14f; i += 8 )\r
+ {\r
+ if( this.txヒットバー != null )\r
+ {\r
+ this.txヒットバー.t2D描画( CDTXMania.app.Device, i, y, new Rectangle( 0, 0, ( ( i + 8 ) >= 0x14f ) ? ( 7 - ( ( i + 8 ) - 0x14f ) ) : 8, 8 ) );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ private void t進行描画・判定文字列1・通常位置指定の場合()\r
+ {\r
+ if( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Drums ) != E判定文字表示位置.判定ライン上または横 )\r
+ {\r
+ this.actJudgeString.On進行描画();\r
+ }\r
+ }\r
+ private void t進行描画・判定文字列2・判定ライン上指定の場合()\r
+ {\r
+ if( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Drums ) == E判定文字表示位置.判定ライン上または横 )\r
+ {\r
+ this.actJudgeString.On進行描画();\r
+ }\r
+ }\r
+ private void t進行描画・譜面スクロール速度()\r
+ {\r
+ this.act譜面スクロール速度.On進行描画();\r
+ }\r
+ private void t入力メソッド記憶( E楽器パート part )\r
+ {\r
+ if( CDTXMania.Pad.st検知したデバイス.Keyboard )\r
+ {\r
+ this.b演奏にキーボードを使った[ (int) part ] = true;\r
+ }\r
+ if( CDTXMania.Pad.st検知したデバイス.Joypad )\r
+ {\r
+ this.b演奏にジョイパッドを使った[ (int) part ] = true;\r
+ }\r
+ if( CDTXMania.Pad.st検知したデバイス.MIDIIN )\r
+ {\r
+ this.b演奏にMIDI入力を使った[ (int) part ] = true;\r
+ }\r
+ if( CDTXMania.Pad.st検知したデバイス.Mouse )\r
+ {\r
+ this.b演奏にマウスを使った[ (int) part ] = true;\r
+ }\r
+ }\r
+ private void t入力処理・ギター()\r
+ {\r
+ if( CDTXMania.ConfigIni.bGuitar有効 && CDTXMania.DTX.bチップがある.Guitar )\r
+ {\r
+ if( CDTXMania.ConfigIni.bAutoPlay.Guitar )\r
+ {\r
+ CDTX.CChip chip = this.r次にくるギターChipを更新して返す();\r
+ if( chip != null )\r
+ {\r
+ if( ( chip.nチャンネル番号 & 4 ) != 0 )\r
+ {\r
+ this.actLaneFlushGB.Start( 0 );\r
+ this.actRGB.Push( 0 );\r
+ }\r
+ if( ( chip.nチャンネル番号 & 2 ) != 0 )\r
+ {\r
+ this.actLaneFlushGB.Start( 1 );\r
+ this.actRGB.Push( 1 );\r
+ }\r
+ if( ( chip.nチャンネル番号 & 1 ) != 0 )\r
+ {\r
+ this.actLaneFlushGB.Start( 2 );\r
+ this.actRGB.Push( 2 );\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ if( CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.CY ) && CDTXMania.Pad.b押された( E楽器パート.GUITAR, Eパッド.BD ) )\r
+ {\r
+ CDTXMania.ConfigIni.n譜面スクロール速度.Guitar = Math.Min( CDTXMania.ConfigIni.n譜面スクロール速度.Guitar + 1, 0x7cf );\r
+ }\r
+ if( CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.CY ) && CDTXMania.Pad.b押された( E楽器パート.GUITAR, Eパッド.HH ) )\r
+ {\r
+ CDTXMania.ConfigIni.n譜面スクロール速度.Guitar = Math.Max( CDTXMania.ConfigIni.n譜面スクロール速度.Guitar - 1, 0 );\r
+ }\r
+ int num = CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.HH ) ? 4 : 0;\r
+ this.t入力メソッド記憶( E楽器パート.GUITAR );\r
+ int num2 = CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.SD ) ? 2 : 0;\r
+ this.t入力メソッド記憶( E楽器パート.GUITAR );\r
+ int num3 = CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.BD ) ? 1 : 0;\r
+ this.t入力メソッド記憶( E楽器パート.GUITAR );\r
+ int num4 = ( num | num2 ) | num3;\r
+ if( num != 0 )\r
+ {\r
+ this.actLaneFlushGB.Start( 0 );\r
+ this.actRGB.Push( 0 );\r
+ }\r
+ if( num2 != 0 )\r
+ {\r
+ this.actLaneFlushGB.Start( 1 );\r
+ this.actRGB.Push( 1 );\r
+ }\r
+ if( num3 != 0 )\r
+ {\r
+ this.actLaneFlushGB.Start( 2 );\r
+ this.actRGB.Push( 2 );\r
+ }\r
+ List<STInputEvent> events = CDTXMania.Pad.GetEvents( E楽器パート.GUITAR, Eパッド.HT );\r
+ if( ( events != null ) && ( events.Count > 0 ) )\r
+ {\r
+ this.t入力メソッド記憶( E楽器パート.GUITAR );\r
+ foreach( STInputEvent event2 in events )\r
+ {\r
+ CDTX.CChip chip4;\r
+ if( !event2.b押された )\r
+ {\r
+ continue;\r
+ }\r
+ long nTime = event2.nTimeStamp - CDTXMania.Timer.n前回リセットした時のシステム時刻;\r
+ CDTX.CChip pChip = this.r指定時刻に一番近い未ヒットChip( nTime, 0x2f );\r
+ E判定 e判定 = this.e指定時刻からChipのJUDGEを返す( nTime, pChip );\r
+ if( ( ( pChip != null ) && ( ( pChip.nチャンネル番号 & 15 ) == num4 ) ) && ( e判定 != E判定.Miss ) )\r
+ {\r
+ if( ( num != 0 ) || ( num4 == 0 ) )\r
+ {\r
+ this.actChipFireGB.Start( 0 );\r
+ }\r
+ if( ( num2 != 0 ) || ( num4 == 0 ) )\r
+ {\r
+ this.actChipFireGB.Start( 1 );\r
+ }\r
+ if( ( num3 != 0 ) || ( num4 == 0 ) )\r
+ {\r
+ this.actChipFireGB.Start( 2 );\r
+ }\r
+ this.tチップのヒット処理( nTime, pChip );\r
+ this.tサウンド再生( pChip, CDTXMania.Timer.nシステム時刻, E楽器パート.GUITAR, CDTXMania.ConfigIni.n手動再生音量, CDTXMania.ConfigIni.b演奏音を強調する.Guitar, e判定 == E判定.Poor );\r
+ CDTX.CChip item = this.r指定時刻に一番近い未ヒットChip( nTime, 40, 140 );\r
+ if( item != null )\r
+ {\r
+ this.queWailing.Guitar.Enqueue( item );\r
+ }\r
+ continue;\r
+ }\r
+ if( ( ( chip4 = this.r現在の空うちギターChip ) != null ) || ( ( chip4 = this.r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( nTime, 0x2f ) ) != null ) )\r
+ {\r
+ this.tサウンド再生( chip4, CDTXMania.Timer.nシステム時刻, E楽器パート.GUITAR, CDTXMania.ConfigIni.n手動再生音量, CDTXMania.ConfigIni.b演奏音を強調する.Guitar, true );\r
+ }\r
+ if( !CDTXMania.ConfigIni.bLight.Guitar )\r
+ {\r
+ this.tチップのヒット処理・BadならびにTight時のMiss( E楽器パート.GUITAR );\r
+ }\r
+ }\r
+ }\r
+ List<STInputEvent> list2 = CDTXMania.Pad.GetEvents( E楽器パート.GUITAR, Eパッド.LT );\r
+ if( ( list2 != null ) && ( list2.Count > 0 ) )\r
+ {\r
+ foreach( STInputEvent event3 in list2 )\r
+ {\r
+ CDTX.CChip chip5;\r
+ if( !event3.b押された )\r
+ {\r
+ continue;\r
+ }\r
+ long num6 = event3.nTimeStamp - CDTXMania.Timer.n前回リセットした時のシステム時刻;\r
+ while( ( this.queWailing.Guitar.Count > 0 ) && ( ( chip5 = this.queWailing.Guitar.Dequeue() ) != null ) )\r
+ {\r
+ if( ( num6 - chip5.n発声時刻ms ) <= 800 )\r
+ {\r
+ chip5.bHit = true;\r
+ this.actWailingBonus.Start( E楽器パート.GUITAR, this.r現在の歓声Chip.Guitar );\r
+ if( !CDTXMania.ConfigIni.bAutoPlay.Guitar )\r
+ {\r
+ this.actScore.Set( E楽器パート.GUITAR, this.actScore.Get( E楽器パート.GUITAR ) + ( this.actCOMBO.n現在のコンボ数.Guitar * 0xbb8L ) );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ private void t入力処理・ドラム()\r
+ {\r
+ for( int nPad = 0; nPad < 10; nPad++ )\r
+ {\r
+ List<STInputEvent> events = CDTXMania.Pad.GetEvents( E楽器パート.DRUMS, (Eパッド) nPad );\r
+\r
+ if( ( events != null ) && ( events.Count != 0 ) )\r
+ {\r
+ this.t入力メソッド記憶( E楽器パート.DRUMS );\r
+\r
+ #region [ 打ち分けグループ調整 ]\r
+ //-----------------------------\r
+ EHHGroup eHHGroup = CDTXMania.ConfigIni.eHHGroup;\r
+ EFTGroup eFTGroup = CDTXMania.ConfigIni.eFTGroup;\r
+ ECYGroup eCYGroup = CDTXMania.ConfigIni.eCYGroup;\r
+ if( !CDTXMania.DTX.bチップがある.Ride && ( eCYGroup == ECYGroup.打ち分ける ) )\r
+ {\r
+ eCYGroup = ECYGroup.共通;\r
+ }\r
+ if( !CDTXMania.DTX.bチップがある.HHOpen && ( eHHGroup == EHHGroup.全部打ち分ける ) )\r
+ {\r
+ eHHGroup = EHHGroup.左シンバルのみ打ち分ける;\r
+ }\r
+ if( !CDTXMania.DTX.bチップがある.HHOpen && ( eHHGroup == EHHGroup.ハイハットのみ打ち分ける ) )\r
+ {\r
+ eHHGroup = EHHGroup.全部共通;\r
+ }\r
+ if( !CDTXMania.DTX.bチップがある.LeftCymbal && ( eHHGroup == EHHGroup.全部打ち分ける ) )\r
+ {\r
+ eHHGroup = EHHGroup.ハイハットのみ打ち分ける;\r
+ }\r
+ if( !CDTXMania.DTX.bチップがある.LeftCymbal && ( eHHGroup == EHHGroup.左シンバルのみ打ち分ける ) )\r
+ {\r
+ eHHGroup = EHHGroup.全部共通;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ foreach( STInputEvent event2 in events )\r
+ {\r
+ #region [ 変数宣言 ]\r
+ //-----------------------------\r
+ CDTX.CChip chip;\r
+ CDTX.CChip chip2;\r
+ CDTX.CChip chip3;\r
+ E判定 e判定;\r
+ E判定 e判定2;\r
+ E判定 e判定3;\r
+ CDTX.CChip chip5;\r
+ CDTX.CChip chip6;\r
+ CDTX.CChip chip7;\r
+ E判定 e判定4;\r
+ E判定 e判定5;\r
+ E判定 e判定6;\r
+ CDTX.CChip chip9;\r
+ CDTX.CChip chip10;\r
+ CDTX.CChip chip11;\r
+ CDTX.CChip chip12;\r
+ CDTX.CChip chip13;\r
+ E判定 e判定9;\r
+ CDTX.CChip[] chipArray3;\r
+ E判定[] e判定Array;\r
+ int num3;\r
+ int num4;\r
+ int num5;\r
+ int num6;\r
+ int num7;\r
+ CDTX.CChip chip15;\r
+ CDTX.CChip chip16;\r
+ E判定 e判定13;\r
+ E判定 e判定14;\r
+ CDTX.CChip chip17;\r
+ CDTX.CChip chip18;\r
+ E判定 e判定15;\r
+ E判定 e判定16;\r
+ CDTX.CChip chip19;\r
+ CDTX.CChip chip20;\r
+ CDTX.CChip chip21;\r
+ E判定 e判定17;\r
+ CDTX.CChip[] chipArray4;\r
+ E判定[] e判定Array2;\r
+ int num8;\r
+ int num9;\r
+ int num10;\r
+ int num11;\r
+ int num12;\r
+ CDTX.CChip chip23;\r
+ CDTX.CChip chip24;\r
+ E判定 e判定22;\r
+ CDTX.CChip[] chipArray5;\r
+ E判定[] e判定Array3;\r
+ int num13;\r
+ int num14;\r
+ int num15;\r
+ int num16;\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ if( !event2.b押された )\r
+ continue;\r
+\r
+ long nTime = event2.nTimeStamp - CDTXMania.Timer.n前回リセットした時のシステム時刻;\r
+ bool flag = false;\r
+\r
+\r
+ #region [ switch( ( (Eパッド) nPad ) ) ]\r
+ //-----------------------------\r
+ switch( ( (Eパッド) nPad ) )\r
+ {\r
+ case Eパッド.HH:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ if( event2.nVelocity <= CDTXMania.ConfigIni.nハイハット切り捨て下限Velocity )\r
+ continue; // 電子ドラムによる意図的なクロストークを無効にする\r
+\r
+ chip = this.r指定時刻に一番近い未ヒットChip( nTime, 0x11 );\r
+ chip2 = this.r指定時刻に一番近い未ヒットChip( nTime, 0x18 );\r
+ chip3 = this.r指定時刻に一番近い未ヒットChip( nTime, 0x1a );\r
+ e判定 = ( chip != null ) ? this.e指定時刻からChipのJUDGEを返す( nTime, chip ) : E判定.Miss;\r
+ e判定2 = ( chip2 != null ) ? this.e指定時刻からChipのJUDGEを返す( nTime, chip2 ) : E判定.Miss;\r
+ e判定3 = ( chip3 != null ) ? this.e指定時刻からChipのJUDGEを返す( nTime, chip3 ) : E判定.Miss;\r
+ switch( eHHGroup )\r
+ {\r
+ case EHHGroup.ハイハットのみ打ち分ける:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ if( ( e判定 != E判定.Miss ) && ( e判定3 != E判定.Miss ) )\r
+ {\r
+ if( chip.n発声位置 < chip3.n発声位置 )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HH, chip, event2.nVelocity );\r
+ }\r
+ else if( chip.n発声位置 > chip3.n発声位置 )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HH, chip3, event2.nVelocity );\r
+ }\r
+ else\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HH, chip, event2.nVelocity );\r
+ this.tドラムヒット処理( nTime, Eパッド.HH, chip3, event2.nVelocity );\r
+ }\r
+ flag = true;\r
+ }\r
+ else if( e判定 != E判定.Miss )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HH, chip, event2.nVelocity );\r
+ flag = true;\r
+ }\r
+ else if( e判定3 != E判定.Miss )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HH, chip3, event2.nVelocity );\r
+ flag = true;\r
+ }\r
+ if( !flag )\r
+ break;\r
+ continue;\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ case EHHGroup.左シンバルのみ打ち分ける:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ if( ( e判定 != E判定.Miss ) && ( e判定2 != E判定.Miss ) )\r
+ {\r
+ if( chip.n発声位置 < chip2.n発声位置 )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HH, chip, event2.nVelocity );\r
+ }\r
+ else if( chip.n発声位置 > chip2.n発声位置 )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HH, chip2, event2.nVelocity );\r
+ }\r
+ else\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HH, chip, event2.nVelocity );\r
+ this.tドラムヒット処理( nTime, Eパッド.HH, chip2, event2.nVelocity );\r
+ }\r
+ flag = true;\r
+ }\r
+ else if( e判定 != E判定.Miss )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HH, chip, event2.nVelocity );\r
+ flag = true;\r
+ }\r
+ else if( e判定2 != E判定.Miss )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HH, chip2, event2.nVelocity );\r
+ flag = true;\r
+ }\r
+ if( !flag )\r
+ break;\r
+ continue;\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ case EHHGroup.全部共通:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ if( ( ( e判定 != E判定.Miss ) && ( e判定2 != E判定.Miss ) ) && ( e判定3 != E判定.Miss ) )\r
+ {\r
+ CDTX.CChip chip4;\r
+ CDTX.CChip[] chipArray = new CDTX.CChip[] { chip, chip2, chip3 };\r
+ if( chipArray[ 1 ].n発声位置 > chipArray[ 2 ].n発声位置 )\r
+ {\r
+ chip4 = chipArray[ 1 ];\r
+ chipArray[ 1 ] = chipArray[ 2 ];\r
+ chipArray[ 2 ] = chip4;\r
+ }\r
+ if( chipArray[ 0 ].n発声位置 > chipArray[ 1 ].n発声位置 )\r
+ {\r
+ chip4 = chipArray[ 0 ];\r
+ chipArray[ 0 ] = chipArray[ 1 ];\r
+ chipArray[ 1 ] = chip4;\r
+ }\r
+ if( chipArray[ 1 ].n発声位置 > chipArray[ 2 ].n発声位置 )\r
+ {\r
+ chip4 = chipArray[ 1 ];\r
+ chipArray[ 1 ] = chipArray[ 2 ];\r
+ chipArray[ 2 ] = chip4;\r
+ }\r
+ this.tドラムヒット処理( nTime, Eパッド.HH, chipArray[ 0 ], event2.nVelocity );\r
+ if( chipArray[ 0 ].n発声位置 == chipArray[ 1 ].n発声位置 )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HH, chipArray[ 1 ], event2.nVelocity );\r
+ }\r
+ if( chipArray[ 0 ].n発声位置 == chipArray[ 2 ].n発声位置 )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HH, chipArray[ 2 ], event2.nVelocity );\r
+ }\r
+ flag = true;\r
+ }\r
+ else if( ( e判定 != E判定.Miss ) && ( e判定2 != E判定.Miss ) )\r
+ {\r
+ if( chip.n発声位置 < chip2.n発声位置 )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HH, chip, event2.nVelocity );\r
+ }\r
+ else if( chip.n発声位置 > chip2.n発声位置 )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HH, chip2, event2.nVelocity );\r
+ }\r
+ else\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HH, chip, event2.nVelocity );\r
+ this.tドラムヒット処理( nTime, Eパッド.HH, chip2, event2.nVelocity );\r
+ }\r
+ flag = true;\r
+ }\r
+ else if( ( e判定 != E判定.Miss ) && ( e判定3 != E判定.Miss ) )\r
+ {\r
+ if( chip.n発声位置 < chip3.n発声位置 )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HH, chip, event2.nVelocity );\r
+ }\r
+ else if( chip.n発声位置 > chip3.n発声位置 )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HH, chip3, event2.nVelocity );\r
+ }\r
+ else\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HH, chip, event2.nVelocity );\r
+ this.tドラムヒット処理( nTime, Eパッド.HH, chip3, event2.nVelocity );\r
+ }\r
+ flag = true;\r
+ }\r
+ else if( ( e判定2 != E判定.Miss ) && ( e判定3 != E判定.Miss ) )\r
+ {\r
+ if( chip2.n発声位置 < chip3.n発声位置 )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HH, chip2, event2.nVelocity );\r
+ }\r
+ else if( chip2.n発声位置 > chip3.n発声位置 )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HH, chip3, event2.nVelocity );\r
+ }\r
+ else\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HH, chip2, event2.nVelocity );\r
+ this.tドラムヒット処理( nTime, Eパッド.HH, chip3, event2.nVelocity );\r
+ }\r
+ flag = true;\r
+ }\r
+ else if( e判定 != E判定.Miss )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HH, chip, event2.nVelocity );\r
+ flag = true;\r
+ }\r
+ else if( e判定2 != E判定.Miss )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HH, chip2, event2.nVelocity );\r
+ flag = true;\r
+ }\r
+ else if( e判定3 != E判定.Miss )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HH, chip3, event2.nVelocity );\r
+ flag = true;\r
+ }\r
+ if( !flag )\r
+ break;\r
+ continue;\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ default:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ if( e判定 != E判定.Miss )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HH, chip, event2.nVelocity );\r
+ flag = true;\r
+ }\r
+ if( !flag )\r
+ break;\r
+ continue;\r
+ //-----------------------------\r
+ #endregion\r
+ }\r
+ if( !flag )\r
+ break;\r
+ continue;\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ case Eパッド.SD:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ if( !this.tドラムヒット処理( nTime, Eパッド.SD, this.r指定時刻に一番近い未ヒットChip( nTime, 0x12 ), event2.nVelocity ) )\r
+ break;\r
+ continue;\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ case Eパッド.BD:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ if( !this.tドラムヒット処理( nTime, Eパッド.BD, this.r指定時刻に一番近い未ヒットChip( nTime, 0x13 ), event2.nVelocity ) )\r
+ break;\r
+ continue;\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ case Eパッド.HT:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ if( this.tドラムヒット処理( nTime, Eパッド.HT, this.r指定時刻に一番近い未ヒットChip( nTime, 20 ), event2.nVelocity ) )\r
+ continue;\r
+ break;\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ case Eパッド.LT:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ chip15 = this.r指定時刻に一番近い未ヒットChip( nTime, 0x15 );\r
+ chip16 = this.r指定時刻に一番近い未ヒットChip( nTime, 0x17 );\r
+ e判定13 = ( chip15 != null ) ? this.e指定時刻からChipのJUDGEを返す( nTime, chip15 ) : E判定.Miss;\r
+ e判定14 = ( chip16 != null ) ? this.e指定時刻からChipのJUDGEを返す( nTime, chip16 ) : E判定.Miss;\r
+ switch( eFTGroup )\r
+ {\r
+ case EFTGroup.打ち分ける:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ if( e判定13 != E判定.Miss )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.LT, chip15, event2.nVelocity );\r
+ flag = true;\r
+ }\r
+ break;\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ case EFTGroup.共通:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ if( ( e判定13 != E判定.Miss ) && ( e判定14 != E判定.Miss ) )\r
+ {\r
+ if( chip15.n発声位置 < chip16.n発声位置 )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.LT, chip15, event2.nVelocity );\r
+ }\r
+ else if( chip15.n発声位置 > chip16.n発声位置 )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.LT, chip16, event2.nVelocity );\r
+ }\r
+ else\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.LT, chip15, event2.nVelocity );\r
+ this.tドラムヒット処理( nTime, Eパッド.LT, chip16, event2.nVelocity );\r
+ }\r
+ flag = true;\r
+ }\r
+ else if( e判定13 != E判定.Miss )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.LT, chip15, event2.nVelocity );\r
+ flag = true;\r
+ }\r
+ else if( e判定14 != E判定.Miss )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.LT, chip16, event2.nVelocity );\r
+ flag = true;\r
+ }\r
+ break;\r
+ //-----------------------------\r
+ #endregion\r
+ }\r
+ if( !flag )\r
+ break;\r
+ continue;\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ case Eパッド.FT:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ chip17 = this.r指定時刻に一番近い未ヒットChip( nTime, 0x15 );\r
+ chip18 = this.r指定時刻に一番近い未ヒットChip( nTime, 0x17 );\r
+ e判定15 = ( chip17 != null ) ? this.e指定時刻からChipのJUDGEを返す( nTime, chip17 ) : E判定.Miss;\r
+ e判定16 = ( chip18 != null ) ? this.e指定時刻からChipのJUDGEを返す( nTime, chip18 ) : E判定.Miss;\r
+ switch( eFTGroup )\r
+ {\r
+ case EFTGroup.打ち分ける:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ if( e判定16 != E判定.Miss )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.FT, chip18, event2.nVelocity );\r
+ flag = true;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ break;\r
+\r
+ case EFTGroup.共通:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ if( ( e判定15 != E判定.Miss ) && ( e判定16 != E判定.Miss ) )\r
+ {\r
+ if( chip17.n発声位置 < chip18.n発声位置 )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.FT, chip17, event2.nVelocity );\r
+ }\r
+ else if( chip17.n発声位置 > chip18.n発声位置 )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.FT, chip18, event2.nVelocity );\r
+ }\r
+ else\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.FT, chip17, event2.nVelocity );\r
+ this.tドラムヒット処理( nTime, Eパッド.FT, chip18, event2.nVelocity );\r
+ }\r
+ flag = true;\r
+ }\r
+ else if( e判定15 != E判定.Miss )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.FT, chip17, event2.nVelocity );\r
+ flag = true;\r
+ }\r
+ else if( e判定16 != E判定.Miss )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.FT, chip18, event2.nVelocity );\r
+ flag = true;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ break;\r
+ }\r
+ if( !flag )\r
+ break;\r
+ continue;\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ case Eパッド.CY:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ {\r
+ chip19 = this.r指定時刻に一番近い未ヒットChip( nTime, 0x16 );\r
+ chip20 = this.r指定時刻に一番近い未ヒットChip( nTime, 0x19 );\r
+ chip21 = CDTXMania.ConfigIni.bシンバルフリー ? this.r指定時刻に一番近い未ヒットChip( nTime, 0x1a ) : null;\r
+ e判定17 = ( chip19 != null ) ? this.e指定時刻からChipのJUDGEを返す( nTime, chip19 ) : E判定.Miss;\r
+ E判定 e判定18 = ( chip20 != null ) ? this.e指定時刻からChipのJUDGEを返す( nTime, chip20 ) : E判定.Miss;\r
+ E判定 e判定19 = ( chip21 != null ) ? this.e指定時刻からChipのJUDGEを返す( nTime, chip21 ) : E判定.Miss;\r
+ chipArray4 = new CDTX.CChip[] { chip19, chip20, chip21 };\r
+ e判定Array2 = new E判定[] { e判定17, e判定18, e判定19 };\r
+ num8 = 0;\r
+ while( num8 < 2 )\r
+ {\r
+ num9 = 2;\r
+ while( num9 > num8 )\r
+ {\r
+ if( ( chipArray4[ num9 - 1 ] == null ) || ( ( chipArray4[ num9 ] != null ) && ( chipArray4[ num9 - 1 ].n発声位置 > chipArray4[ num9 ].n発声位置 ) ) )\r
+ {\r
+ CDTX.CChip chip22 = chipArray4[ num9 - 1 ];\r
+ chipArray4[ num9 - 1 ] = chipArray4[ num9 ];\r
+ chipArray4[ num9 ] = chip22;\r
+ E判定 e判定20 = e判定Array2[ num9 - 1 ];\r
+ e判定Array2[ num9 - 1 ] = e判定Array2[ num9 ];\r
+ e判定Array2[ num9 ] = e判定20;\r
+ }\r
+ num9--;\r
+ }\r
+ num8++;\r
+ }\r
+ switch( eCYGroup )\r
+ {\r
+ case ECYGroup.打ち分ける:\r
+ if( !CDTXMania.ConfigIni.bシンバルフリー )\r
+ {\r
+ if( e判定17 != E判定.Miss )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.CY, chip19, event2.nVelocity );\r
+ flag = true;\r
+ }\r
+ if( !flag )\r
+ break;\r
+ continue;\r
+ }\r
+ num10 = 0;\r
+ while( num10 < 3 )\r
+ {\r
+ if( ( e判定Array2[ num10 ] != E判定.Miss ) && ( ( chipArray4[ num10 ] == chip19 ) || ( chipArray4[ num10 ] == chip21 ) ) )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.CY, chipArray4[ num10 ], event2.nVelocity );\r
+ flag = true;\r
+ break;\r
+ }\r
+ num10++;\r
+ }\r
+ if( e判定17 != E判定.Miss )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.CY, chip19, event2.nVelocity );\r
+ flag = true;\r
+ }\r
+ if( !flag )\r
+ break;\r
+ continue;\r
+\r
+ case ECYGroup.共通:\r
+ if( !CDTXMania.ConfigIni.bシンバルフリー )\r
+ {\r
+ num12 = 0;\r
+ while( num12 < 3 )\r
+ {\r
+ if( ( e判定Array2[ num12 ] != E判定.Miss ) && ( ( chipArray4[ num12 ] == chip19 ) || ( chipArray4[ num12 ] == chip20 ) ) )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.CY, chipArray4[ num12 ], event2.nVelocity );\r
+ flag = true;\r
+ break;\r
+ }\r
+ num12++;\r
+ }\r
+ if( !flag )\r
+ break;\r
+ continue;\r
+ }\r
+ num11 = 0;\r
+ while( num11 < 3 )\r
+ {\r
+ if( e判定Array2[ num11 ] != E判定.Miss )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.CY, chipArray4[ num11 ], event2.nVelocity );\r
+ flag = true;\r
+ break;\r
+ }\r
+ num11++;\r
+ }\r
+ if( !flag )\r
+ break;\r
+ continue;\r
+ }\r
+ if( !flag )\r
+ break;\r
+ continue;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ case Eパッド.HHO:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ if( event2.nVelocity <= CDTXMania.ConfigIni.nハイハット切り捨て下限Velocity )\r
+ continue; // 電子ドラムによる意図的なクロストークを無効にする\r
+\r
+ chip5 = this.r指定時刻に一番近い未ヒットChip( nTime, 0x11 );\r
+ chip6 = this.r指定時刻に一番近い未ヒットChip( nTime, 0x18 );\r
+ chip7 = this.r指定時刻に一番近い未ヒットChip( nTime, 0x1a );\r
+ e判定4 = ( chip5 != null ) ? this.e指定時刻からChipのJUDGEを返す( nTime, chip5 ) : E判定.Miss;\r
+ e判定5 = ( chip6 != null ) ? this.e指定時刻からChipのJUDGEを返す( nTime, chip6 ) : E判定.Miss;\r
+ e判定6 = ( chip7 != null ) ? this.e指定時刻からChipのJUDGEを返す( nTime, chip7 ) : E判定.Miss;\r
+ switch( eHHGroup )\r
+ {\r
+ case EHHGroup.全部打ち分ける:\r
+ if( e判定5 != E判定.Miss )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HHO, chip6, event2.nVelocity );\r
+ flag = true;\r
+ }\r
+ if( !flag )\r
+ break;\r
+ continue;\r
+\r
+ case EHHGroup.ハイハットのみ打ち分ける:\r
+ if( ( e判定5 != E判定.Miss ) && ( e判定6 != E判定.Miss ) )\r
+ {\r
+ if( chip6.n発声位置 < chip7.n発声位置 )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HHO, chip6, event2.nVelocity );\r
+ }\r
+ else if( chip6.n発声位置 > chip7.n発声位置 )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HHO, chip7, event2.nVelocity );\r
+ }\r
+ else\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HHO, chip6, event2.nVelocity );\r
+ this.tドラムヒット処理( nTime, Eパッド.HHO, chip7, event2.nVelocity );\r
+ }\r
+ flag = true;\r
+ }\r
+ else if( e判定5 != E判定.Miss )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HHO, chip6, event2.nVelocity );\r
+ flag = true;\r
+ }\r
+ else if( e判定6 != E判定.Miss )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HHO, chip7, event2.nVelocity );\r
+ flag = true;\r
+ }\r
+ if( !flag )\r
+ break;\r
+ continue;\r
+\r
+ case EHHGroup.左シンバルのみ打ち分ける:\r
+ if( ( e判定4 != E判定.Miss ) && ( e判定5 != E判定.Miss ) )\r
+ {\r
+ if( chip5.n発声位置 < chip6.n発声位置 )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HHO, chip5, event2.nVelocity );\r
+ }\r
+ else if( chip5.n発声位置 > chip6.n発声位置 )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HHO, chip6, event2.nVelocity );\r
+ }\r
+ else\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HHO, chip5, event2.nVelocity );\r
+ this.tドラムヒット処理( nTime, Eパッド.HHO, chip6, event2.nVelocity );\r
+ }\r
+ flag = true;\r
+ }\r
+ else if( e判定4 != E判定.Miss )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HHO, chip5, event2.nVelocity );\r
+ flag = true;\r
+ }\r
+ else if( e判定5 != E判定.Miss )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HHO, chip6, event2.nVelocity );\r
+ flag = true;\r
+ }\r
+ if( !flag )\r
+ break;\r
+ continue;\r
+\r
+ case EHHGroup.全部共通:\r
+ if( ( ( e判定4 != E判定.Miss ) && ( e判定5 != E判定.Miss ) ) && ( e判定6 != E判定.Miss ) )\r
+ {\r
+ CDTX.CChip chip8;\r
+ CDTX.CChip[] chipArray2 = new CDTX.CChip[] { chip5, chip6, chip7 };\r
+ if( chipArray2[ 1 ].n発声位置 > chipArray2[ 2 ].n発声位置 )\r
+ {\r
+ chip8 = chipArray2[ 1 ];\r
+ chipArray2[ 1 ] = chipArray2[ 2 ];\r
+ chipArray2[ 2 ] = chip8;\r
+ }\r
+ if( chipArray2[ 0 ].n発声位置 > chipArray2[ 1 ].n発声位置 )\r
+ {\r
+ chip8 = chipArray2[ 0 ];\r
+ chipArray2[ 0 ] = chipArray2[ 1 ];\r
+ chipArray2[ 1 ] = chip8;\r
+ }\r
+ if( chipArray2[ 1 ].n発声位置 > chipArray2[ 2 ].n発声位置 )\r
+ {\r
+ chip8 = chipArray2[ 1 ];\r
+ chipArray2[ 1 ] = chipArray2[ 2 ];\r
+ chipArray2[ 2 ] = chip8;\r
+ }\r
+ this.tドラムヒット処理( nTime, Eパッド.HHO, chipArray2[ 0 ], event2.nVelocity );\r
+ if( chipArray2[ 0 ].n発声位置 == chipArray2[ 1 ].n発声位置 )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HHO, chipArray2[ 1 ], event2.nVelocity );\r
+ }\r
+ if( chipArray2[ 0 ].n発声位置 == chipArray2[ 2 ].n発声位置 )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HHO, chipArray2[ 2 ], event2.nVelocity );\r
+ }\r
+ flag = true;\r
+ }\r
+ else if( ( e判定4 != E判定.Miss ) && ( e判定5 != E判定.Miss ) )\r
+ {\r
+ if( chip5.n発声位置 < chip6.n発声位置 )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HHO, chip5, event2.nVelocity );\r
+ }\r
+ else if( chip5.n発声位置 > chip6.n発声位置 )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HHO, chip6, event2.nVelocity );\r
+ }\r
+ else\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HHO, chip5, event2.nVelocity );\r
+ this.tドラムヒット処理( nTime, Eパッド.HHO, chip6, event2.nVelocity );\r
+ }\r
+ flag = true;\r
+ }\r
+ else if( ( e判定4 != E判定.Miss ) && ( e判定6 != E判定.Miss ) )\r
+ {\r
+ if( chip5.n発声位置 < chip7.n発声位置 )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HHO, chip5, event2.nVelocity );\r
+ }\r
+ else if( chip5.n発声位置 > chip7.n発声位置 )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HHO, chip7, event2.nVelocity );\r
+ }\r
+ else\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HHO, chip5, event2.nVelocity );\r
+ this.tドラムヒット処理( nTime, Eパッド.HHO, chip7, event2.nVelocity );\r
+ }\r
+ flag = true;\r
+ }\r
+ else if( ( e判定5 != E判定.Miss ) && ( e判定6 != E判定.Miss ) )\r
+ {\r
+ if( chip6.n発声位置 < chip7.n発声位置 )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HHO, chip6, event2.nVelocity );\r
+ }\r
+ else if( chip6.n発声位置 > chip7.n発声位置 )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HHO, chip7, event2.nVelocity );\r
+ }\r
+ else\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HHO, chip6, event2.nVelocity );\r
+ this.tドラムヒット処理( nTime, Eパッド.HHO, chip7, event2.nVelocity );\r
+ }\r
+ flag = true;\r
+ }\r
+ else if( e判定4 != E判定.Miss )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HHO, chip5, event2.nVelocity );\r
+ flag = true;\r
+ }\r
+ else if( e判定5 != E判定.Miss )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HHO, chip6, event2.nVelocity );\r
+ flag = true;\r
+ }\r
+ else if( e判定6 != E判定.Miss )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.HHO, chip7, event2.nVelocity );\r
+ flag = true;\r
+ }\r
+ if( !flag )\r
+ break;\r
+ continue;\r
+ }\r
+ if( !flag )\r
+ break;\r
+ continue;\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ case Eパッド.RD:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ {\r
+ chip23 = this.r指定時刻に一番近い未ヒットChip( nTime, 0x16 );\r
+ chip24 = this.r指定時刻に一番近い未ヒットChip( nTime, 0x19 );\r
+ CDTX.CChip pChip = CDTXMania.ConfigIni.bシンバルフリー ? this.r指定時刻に一番近い未ヒットChip( nTime, 0x1a ) : null;\r
+ E判定 e判定21 = ( chip23 != null ) ? this.e指定時刻からChipのJUDGEを返す( nTime, chip23 ) : E判定.Miss;\r
+ e判定22 = ( chip24 != null ) ? this.e指定時刻からChipのJUDGEを返す( nTime, chip24 ) : E判定.Miss;\r
+ E判定 e判定23 = ( pChip != null ) ? this.e指定時刻からChipのJUDGEを返す( nTime, pChip ) : E判定.Miss;\r
+ chipArray5 = new CDTX.CChip[] { chip23, chip24, pChip };\r
+ e判定Array3 = new E判定[] { e判定21, e判定22, e判定23 };\r
+ num13 = 0;\r
+ while( num13 < 2 )\r
+ {\r
+ num14 = 2;\r
+ while( num14 > num13 )\r
+ {\r
+ if( ( chipArray5[ num14 - 1 ] == null ) || ( ( chipArray5[ num14 ] != null ) && ( chipArray5[ num14 - 1 ].n発声位置 > chipArray5[ num14 ].n発声位置 ) ) )\r
+ {\r
+ CDTX.CChip chip26 = chipArray5[ num14 - 1 ];\r
+ chipArray5[ num14 - 1 ] = chipArray5[ num14 ];\r
+ chipArray5[ num14 ] = chip26;\r
+ E判定 e判定24 = e判定Array3[ num14 - 1 ];\r
+ e判定Array3[ num14 - 1 ] = e判定Array3[ num14 ];\r
+ e判定Array3[ num14 ] = e判定24;\r
+ }\r
+ num14--;\r
+ }\r
+ num13++;\r
+ }\r
+ switch( eCYGroup )\r
+ {\r
+ case ECYGroup.打ち分ける:\r
+ if( e判定22 != E判定.Miss )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.RD, chip24, event2.nVelocity );\r
+ flag = true;\r
+ }\r
+ break;\r
+\r
+ case ECYGroup.共通:\r
+ if( !CDTXMania.ConfigIni.bシンバルフリー )\r
+ {\r
+ num16 = 0;\r
+ while( num16 < 3 )\r
+ {\r
+ if( ( e判定Array3[ num16 ] != E判定.Miss ) && ( ( chipArray5[ num16 ] == chip23 ) || ( chipArray5[ num16 ] == chip24 ) ) )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.CY, chipArray5[ num16 ], event2.nVelocity );\r
+ flag = true;\r
+ break;\r
+ }\r
+ num16++;\r
+ }\r
+ break;\r
+ }\r
+ num15 = 0;\r
+ while( num15 < 3 )\r
+ {\r
+ if( e判定Array3[ num15 ] != E判定.Miss )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.CY, chipArray5[ num15 ], event2.nVelocity );\r
+ flag = true;\r
+ break;\r
+ }\r
+ num15++;\r
+ }\r
+ break;\r
+ }\r
+ if( flag )\r
+ {\r
+ continue;\r
+ }\r
+ break;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ case Eパッド.LC:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ {\r
+ chip9 = this.r指定時刻に一番近い未ヒットChip( nTime, 0x11 );\r
+ chip10 = this.r指定時刻に一番近い未ヒットChip( nTime, 0x18 );\r
+ chip11 = this.r指定時刻に一番近い未ヒットChip( nTime, 0x1a );\r
+ chip12 = CDTXMania.ConfigIni.bシンバルフリー ? this.r指定時刻に一番近い未ヒットChip( nTime, 0x16 ) : null;\r
+ chip13 = CDTXMania.ConfigIni.bシンバルフリー ? this.r指定時刻に一番近い未ヒットChip( nTime, 0x19 ) : null;\r
+ E判定 e判定7 = ( chip9 != null ) ? this.e指定時刻からChipのJUDGEを返す( nTime, chip9 ) : E判定.Miss;\r
+ E判定 e判定8 = ( chip10 != null ) ? this.e指定時刻からChipのJUDGEを返す( nTime, chip10 ) : E判定.Miss;\r
+ e判定9 = ( chip11 != null ) ? this.e指定時刻からChipのJUDGEを返す( nTime, chip11 ) : E判定.Miss;\r
+ E判定 e判定10 = ( chip12 != null ) ? this.e指定時刻からChipのJUDGEを返す( nTime, chip12 ) : E判定.Miss;\r
+ E判定 e判定11 = ( chip13 != null ) ? this.e指定時刻からChipのJUDGEを返す( nTime, chip13 ) : E判定.Miss;\r
+ chipArray3 = new CDTX.CChip[] { chip9, chip10, chip11, chip12, chip13 };\r
+ e判定Array = new E判定[] { e判定7, e判定8, e判定9, e判定10, e判定11 };\r
+ num3 = 0;\r
+ while( num3 < 4 )\r
+ {\r
+ num4 = 4;\r
+ while( num4 > num3 )\r
+ {\r
+ if( ( chipArray3[ num4 - 1 ] == null ) || ( ( chipArray3[ num4 ] != null ) && ( chipArray3[ num4 - 1 ].n発声位置 > chipArray3[ num4 ].n発声位置 ) ) )\r
+ {\r
+ CDTX.CChip chip14 = chipArray3[ num4 - 1 ];\r
+ chipArray3[ num4 - 1 ] = chipArray3[ num4 ];\r
+ chipArray3[ num4 ] = chip14;\r
+ E判定 e判定12 = e判定Array[ num4 - 1 ];\r
+ e判定Array[ num4 - 1 ] = e判定Array[ num4 ];\r
+ e判定Array[ num4 ] = e判定12;\r
+ }\r
+ num4--;\r
+ }\r
+ num3++;\r
+ }\r
+ switch( eHHGroup )\r
+ {\r
+ case EHHGroup.全部打ち分ける:\r
+ case EHHGroup.左シンバルのみ打ち分ける:\r
+ if( !CDTXMania.ConfigIni.bシンバルフリー )\r
+ {\r
+ if( e判定9 != E判定.Miss )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.LC, chip11, event2.nVelocity );\r
+ flag = true;\r
+ }\r
+ if( !flag )\r
+ break;\r
+ continue;\r
+ }\r
+ num5 = 0;\r
+ while( num5 < 5 )\r
+ {\r
+ if( ( e判定Array[ num5 ] != E判定.Miss ) && ( ( ( chipArray3[ num5 ] == chip11 ) || ( chipArray3[ num5 ] == chip12 ) ) || ( ( chipArray3[ num5 ] == chip13 ) && ( CDTXMania.ConfigIni.eCYGroup == ECYGroup.共通 ) ) ) )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.LC, chipArray3[ num5 ], event2.nVelocity );\r
+ flag = true;\r
+ break;\r
+ }\r
+ num5++;\r
+ }\r
+ if( !flag )\r
+ break;\r
+ continue;\r
+\r
+ case EHHGroup.ハイハットのみ打ち分ける:\r
+ case EHHGroup.全部共通:\r
+ if( !CDTXMania.ConfigIni.bシンバルフリー )\r
+ {\r
+ num7 = 0;\r
+ while( num7 < 5 )\r
+ {\r
+ if( ( e判定Array[ num7 ] != E判定.Miss ) && ( ( ( chipArray3[ num7 ] == chip11 ) || ( chipArray3[ num7 ] == chip9 ) ) || ( chipArray3[ num7 ] == chip10 ) ) )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.LC, chipArray3[ num7 ], event2.nVelocity );\r
+ flag = true;\r
+ break;\r
+ }\r
+ num7++;\r
+ }\r
+ if( !flag )\r
+ break;\r
+ continue;\r
+ }\r
+ num6 = 0;\r
+ while( num6 < 5 )\r
+ {\r
+ if( ( e判定Array[ num6 ] != E判定.Miss ) && ( ( chipArray3[ num6 ] != chip13 ) || ( CDTXMania.ConfigIni.eCYGroup == ECYGroup.共通 ) ) )\r
+ {\r
+ this.tドラムヒット処理( nTime, Eパッド.LC, chipArray3[ num6 ], event2.nVelocity );\r
+ flag = true;\r
+ break;\r
+ }\r
+ num6++;\r
+ }\r
+ if( !flag )\r
+ break;\r
+ continue;\r
+ }\r
+ if( !flag )\r
+ break;\r
+\r
+ break;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ this.actLaneFlushD.Start( (Eドラムレーン) this.nパッド0Atoレーン07[ nPad ], ( (float) event2.nVelocity ) / 127f );\r
+ this.actPad.Hit( this.nパッド0Atoパッド08[ nPad ] );\r
+ if( !CDTXMania.ConfigIni.bドラム打音を発声する )\r
+ {\r
+ if( CDTXMania.ConfigIni.bTight )\r
+ {\r
+ this.tチップのヒット処理・BadならびにTight時のMiss( E楽器パート.DRUMS, this.nパッド0Atoレーン07[ nPad ] );\r
+ }\r
+ continue;\r
+ }\r
+ CDTX.CChip rChip = null;\r
+ rChip = this.r空うちChip( E楽器パート.DRUMS, (Eパッド) nPad );\r
+ if( rChip != null )\r
+ {\r
+ this.tサウンド再生( rChip, CDTXMania.Timer.nシステム時刻, E楽器パート.DRUMS, CDTXMania.ConfigIni.n手動再生音量, CDTXMania.ConfigIni.b演奏音を強調する.Drums );\r
+\r
+ if( CDTXMania.ConfigIni.bTight )\r
+ {\r
+ this.tチップのヒット処理・BadならびにTight時のMiss( E楽器パート.DRUMS, this.nパッド0Atoレーン07[ nPad ] );\r
+ }\r
+ continue;\r
+ }\r
+ CDTX.CChip chip28 = null;\r
+ CDTX.CChip chip29 = null;\r
+ CDTX.CChip chip30 = null;\r
+ CDTX.CChip chip31 = null;\r
+ CDTX.CChip chip32 = null;\r
+ CDTX.CChip chip33 = null;\r
+ CDTX.CChip chip34 = null;\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ #region [ switch( ( (Eパッド) i ) ) ]\r
+ //-----------------------------\r
+ switch( ( (Eパッド) nPad ) )\r
+ {\r
+ case Eパッド.HH:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ chip28 = this.r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( nTime, this.nパッド0Atoチャンネル0A[ 0 ] );\r
+ chip29 = this.r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( nTime, this.nパッド0Atoチャンネル0A[ 7 ] );\r
+ chip30 = this.r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( nTime, this.nパッド0Atoチャンネル0A[ 9 ] );\r
+ switch( CDTXMania.ConfigIni.eHHGroup )\r
+ {\r
+ case EHHGroup.ハイハットのみ打ち分ける:\r
+ rChip = ( chip28 != null ) ? chip28 : chip30;\r
+ break;\r
+\r
+ case EHHGroup.左シンバルのみ打ち分ける:\r
+ rChip = ( chip28 != null ) ? chip28 : chip29;\r
+ break;\r
+\r
+ case EHHGroup.全部共通:\r
+ if( chip28 != null )\r
+ {\r
+ rChip = chip28;\r
+ }\r
+ else if( chip29 == null )\r
+ {\r
+ rChip = chip30;\r
+ }\r
+ else if( chip30 == null )\r
+ {\r
+ rChip = chip29;\r
+ }\r
+ else if( chip29.n発声位置 < chip30.n発声位置 )\r
+ {\r
+ rChip = chip29;\r
+ }\r
+ else\r
+ {\r
+ rChip = chip30;\r
+ }\r
+ break;\r
+\r
+ default:\r
+ rChip = chip28;\r
+ break;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ break;\r
+\r
+ case Eパッド.LT:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ chip31 = this.r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( nTime, this.nパッド0Atoチャンネル0A[ 4 ] );\r
+ chip32 = this.r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( nTime, this.nパッド0Atoチャンネル0A[ 5 ] );\r
+ if( CDTXMania.ConfigIni.eFTGroup != EFTGroup.打ち分ける )\r
+ rChip = ( chip31 != null ) ? chip31 : chip32;\r
+ else\r
+ rChip = chip31;\r
+ //-----------------------------\r
+ #endregion\r
+ break;\r
+\r
+ case Eパッド.FT:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ chip31 = this.r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( nTime, this.nパッド0Atoチャンネル0A[ 4 ] );\r
+ chip32 = this.r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( nTime, this.nパッド0Atoチャンネル0A[ 5 ] );\r
+ if( CDTXMania.ConfigIni.eFTGroup != EFTGroup.打ち分ける )\r
+ rChip = ( chip32 != null ) ? chip32 : chip31;\r
+ else\r
+ rChip = chip32;\r
+ //-----------------------------\r
+ #endregion\r
+ break;\r
+\r
+ case Eパッド.CY:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ chip33 = this.r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( nTime, this.nパッド0Atoチャンネル0A[ 6 ] );\r
+ chip34 = this.r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( nTime, this.nパッド0Atoチャンネル0A[ 8 ] );\r
+ if( CDTXMania.ConfigIni.eCYGroup != ECYGroup.打ち分ける )\r
+ rChip = ( chip33 != null ) ? chip33 : chip34;\r
+ else\r
+ rChip = chip33;\r
+ //-----------------------------\r
+ #endregion\r
+ break;\r
+\r
+ case Eパッド.HHO:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ chip28 = this.r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( nTime, this.nパッド0Atoチャンネル0A[ 0 ] );\r
+ chip29 = this.r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( nTime, this.nパッド0Atoチャンネル0A[ 7 ] );\r
+ chip30 = this.r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( nTime, this.nパッド0Atoチャンネル0A[ 9 ] );\r
+ switch( CDTXMania.ConfigIni.eHHGroup )\r
+ {\r
+ case EHHGroup.全部打ち分ける:\r
+ rChip = chip29;\r
+ break;\r
+\r
+ case EHHGroup.ハイハットのみ打ち分ける:\r
+ rChip = ( chip29 != null ) ? chip29 : chip30;\r
+ break;\r
+\r
+ case EHHGroup.左シンバルのみ打ち分ける:\r
+ rChip = ( chip29 != null ) ? chip29 : chip28;\r
+ break;\r
+\r
+ case EHHGroup.全部共通:\r
+ if( chip29 != null )\r
+ {\r
+ rChip = chip29;\r
+ }\r
+ else if( chip28 == null )\r
+ {\r
+ rChip = chip30;\r
+ }\r
+ else if( chip30 == null )\r
+ {\r
+ rChip = chip28;\r
+ }\r
+ else if( chip28.n発声位置 < chip30.n発声位置 )\r
+ {\r
+ rChip = chip28;\r
+ }\r
+ else\r
+ {\r
+ rChip = chip30;\r
+ }\r
+ break;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ break;\r
+\r
+ case Eパッド.RD:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ chip33 = this.r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( nTime, this.nパッド0Atoチャンネル0A[ 6 ] );\r
+ chip34 = this.r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( nTime, this.nパッド0Atoチャンネル0A[ 8 ] );\r
+ if( CDTXMania.ConfigIni.eCYGroup != ECYGroup.打ち分ける )\r
+ rChip = ( chip34 != null ) ? chip34 : chip33;\r
+ else\r
+ rChip = chip34;\r
+ //-----------------------------\r
+ #endregion\r
+ break;\r
+\r
+ case Eパッド.LC:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ chip28 = this.r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( nTime, this.nパッド0Atoチャンネル0A[ 0 ] );\r
+ chip29 = this.r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( nTime, this.nパッド0Atoチャンネル0A[ 7 ] );\r
+ chip30 = this.r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( nTime, this.nパッド0Atoチャンネル0A[ 9 ] );\r
+ switch( CDTXMania.ConfigIni.eHHGroup )\r
+ {\r
+ case EHHGroup.全部打ち分ける:\r
+ case EHHGroup.左シンバルのみ打ち分ける:\r
+ rChip = chip30;\r
+ break;\r
+\r
+ case EHHGroup.ハイハットのみ打ち分ける:\r
+ case EHHGroup.全部共通:\r
+ if( chip30 != null )\r
+ {\r
+ rChip = chip30;\r
+ }\r
+ else if( chip28 == null )\r
+ {\r
+ rChip = chip29;\r
+ }\r
+ else if( chip29 == null )\r
+ {\r
+ rChip = chip28;\r
+ }\r
+ else if( chip28.n発声位置 < chip29.n発声位置 )\r
+ {\r
+ rChip = chip28;\r
+ }\r
+ else\r
+ {\r
+ rChip = chip29;\r
+ }\r
+ break;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ break;\r
+\r
+ default:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ rChip = this.r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( nTime, this.nパッド0Atoチャンネル0A[ nPad ] );\r
+ //-----------------------------\r
+ #endregion\r
+ break;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ if( rChip != null )\r
+ {\r
+ this.tサウンド再生( rChip, CDTXMania.Timer.nシステム時刻, E楽器パート.DRUMS, CDTXMania.ConfigIni.n手動再生音量, CDTXMania.ConfigIni.b演奏音を強調する.Drums );\r
+ }\r
+ if( CDTXMania.ConfigIni.bTight )\r
+ {\r
+ this.tチップのヒット処理・BadならびにTight時のMiss( E楽器パート.DRUMS, this.nパッド0Atoレーン07[ nPad ] );\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ continue;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ private void t入力処理・ベース()\r
+ {\r
+ if( CDTXMania.ConfigIni.bGuitar有効 && CDTXMania.DTX.bチップがある.Bass )\r
+ {\r
+ if( CDTXMania.ConfigIni.bAutoPlay.Bass )\r
+ {\r
+ CDTX.CChip chip = this.r次にくるベースChipを更新して返す();\r
+ if( chip != null )\r
+ {\r
+ if( ( chip.nチャンネル番号 & 4 ) != 0 )\r
+ {\r
+ this.actLaneFlushGB.Start( 3 );\r
+ this.actRGB.Push( 3 );\r
+ }\r
+ if( ( chip.nチャンネル番号 & 2 ) != 0 )\r
+ {\r
+ this.actLaneFlushGB.Start( 4 );\r
+ this.actRGB.Push( 4 );\r
+ }\r
+ if( ( chip.nチャンネル番号 & 1 ) != 0 )\r
+ {\r
+ this.actLaneFlushGB.Start( 5 );\r
+ this.actRGB.Push( 5 );\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ if( CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.CY ) && CDTXMania.Pad.b押された( E楽器パート.BASS, Eパッド.BD ) )\r
+ {\r
+ CDTXMania.ConfigIni.n譜面スクロール速度.Bass = Math.Min( CDTXMania.ConfigIni.n譜面スクロール速度.Bass + 1, 0x7cf );\r
+ }\r
+ if( CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.CY ) && CDTXMania.Pad.b押された( E楽器パート.BASS, Eパッド.HH ) )\r
+ {\r
+ CDTXMania.ConfigIni.n譜面スクロール速度.Bass = Math.Max( CDTXMania.ConfigIni.n譜面スクロール速度.Bass - 1, 0 );\r
+ }\r
+ int num = CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.HH ) ? 4 : 0;\r
+ this.t入力メソッド記憶( E楽器パート.BASS );\r
+ int num2 = CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.SD ) ? 2 : 0;\r
+ this.t入力メソッド記憶( E楽器パート.BASS );\r
+ int num3 = CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.BD ) ? 1 : 0;\r
+ this.t入力メソッド記憶( E楽器パート.BASS );\r
+ int num4 = ( num | num2 ) | num3;\r
+ if( num != 0 )\r
+ {\r
+ this.actLaneFlushGB.Start( 3 );\r
+ this.actRGB.Push( 3 );\r
+ }\r
+ if( num2 != 0 )\r
+ {\r
+ this.actLaneFlushGB.Start( 4 );\r
+ this.actRGB.Push( 4 );\r
+ }\r
+ if( num3 != 0 )\r
+ {\r
+ this.actLaneFlushGB.Start( 5 );\r
+ this.actRGB.Push( 5 );\r
+ }\r
+ List<STInputEvent> events = CDTXMania.Pad.GetEvents( E楽器パート.BASS, Eパッド.HT );\r
+ if( ( events != null ) && ( events.Count > 0 ) )\r
+ {\r
+ foreach( STInputEvent event2 in events )\r
+ {\r
+ CDTX.CChip chip4;\r
+ if( !event2.b押された )\r
+ {\r
+ continue;\r
+ }\r
+ this.t入力メソッド記憶( E楽器パート.BASS );\r
+ long nTime = event2.nTimeStamp - CDTXMania.Timer.n前回リセットした時のシステム時刻;\r
+ CDTX.CChip pChip = this.r指定時刻に一番近い未ヒットChip( nTime, 0xaf );\r
+ E判定 e判定 = this.e指定時刻からChipのJUDGEを返す( nTime, pChip );\r
+ if( ( ( pChip != null ) && ( ( pChip.nチャンネル番号 & 15 ) == num4 ) ) && ( e判定 != E判定.Miss ) )\r
+ {\r
+ if( ( num != 0 ) || ( num4 == 0 ) )\r
+ {\r
+ this.actChipFireGB.Start( 3 );\r
+ }\r
+ if( ( num2 != 0 ) || ( num4 == 0 ) )\r
+ {\r
+ this.actChipFireGB.Start( 4 );\r
+ }\r
+ if( ( num3 != 0 ) || ( num4 == 0 ) )\r
+ {\r
+ this.actChipFireGB.Start( 5 );\r
+ }\r
+ this.tチップのヒット処理( nTime, pChip );\r
+ this.tサウンド再生( pChip, CDTXMania.Timer.nシステム時刻, E楽器パート.BASS, CDTXMania.ConfigIni.n手動再生音量, CDTXMania.ConfigIni.b演奏音を強調する.Bass, e判定 == E判定.Poor );\r
+ CDTX.CChip item = this.r指定時刻に一番近い未ヒットChip( nTime, 0xa8, 140 );\r
+ if( item != null )\r
+ {\r
+ this.queWailing.Bass.Enqueue( item );\r
+ }\r
+ continue;\r
+ }\r
+ if( ( ( chip4 = this.r現在の空うちベースChip ) != null ) || ( ( chip4 = this.r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( nTime, 0xaf ) ) != null ) )\r
+ {\r
+ this.tサウンド再生( chip4, CDTXMania.Timer.nシステム時刻, E楽器パート.BASS, CDTXMania.ConfigIni.n手動再生音量, CDTXMania.ConfigIni.b演奏音を強調する.Bass, true );\r
+ }\r
+ if( !CDTXMania.ConfigIni.bLight.Bass )\r
+ {\r
+ this.tチップのヒット処理・BadならびにTight時のMiss( E楽器パート.BASS );\r
+ }\r
+ }\r
+ }\r
+ List<STInputEvent> list2 = CDTXMania.Pad.GetEvents( E楽器パート.BASS, Eパッド.LT );\r
+ if( ( list2 != null ) && ( list2.Count > 0 ) )\r
+ {\r
+ foreach( STInputEvent event3 in list2 )\r
+ {\r
+ CDTX.CChip chip5;\r
+ if( !event3.b押された )\r
+ {\r
+ continue;\r
+ }\r
+ long num6 = event3.nTimeStamp - CDTXMania.Timer.n前回リセットした時のシステム時刻;\r
+ while( ( this.queWailing.Bass.Count > 0 ) && ( ( chip5 = this.queWailing.Bass.Dequeue() ) != null ) )\r
+ {\r
+ if( ( num6 - chip5.n発声時刻ms ) <= 800 )\r
+ {\r
+ chip5.bHit = true;\r
+ this.actWailingBonus.Start( E楽器パート.BASS, this.r現在の歓声Chip.Bass );\r
+ if( !CDTXMania.ConfigIni.bAutoPlay.Bass )\r
+ {\r
+ this.actScore.Set( E楽器パート.BASS, this.actScore.Get( E楽器パート.BASS ) + ( this.actCOMBO.n現在のコンボ数.Bass * 0xbb8L ) );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ private void t背景テクスチャの生成()\r
+ {\r
+ Bitmap image = null;\r
+ string path = "";\r
+ bool flag = true;\r
+ if( ( ( CDTXMania.DTX.BACKGROUND != null ) && ( CDTXMania.DTX.BACKGROUND.Length > 0 ) ) && !CDTXMania.ConfigIni.bストイックモード )\r
+ {\r
+ path = CDTXMania.DTX.strフォルダ名 + CDTXMania.DTX.BACKGROUND;\r
+ if( File.Exists( path ) )\r
+ {\r
+ try\r
+ {\r
+ Bitmap bitmap2 = null;\r
+ bitmap2 = new Bitmap( path );\r
+ if( ( bitmap2.Size.Width == 0 ) && ( bitmap2.Size.Height == 0 ) )\r
+ {\r
+ this.tx背景 = null;\r
+ return;\r
+ }\r
+ Bitmap bitmap3 = new Bitmap( 640, 480 );\r
+ Graphics graphics = Graphics.FromImage( bitmap3 );\r
+ for( int i = 0; i < 480; i += bitmap2.Size.Height )\r
+ {\r
+ for( int j = 0; j < 640; j += bitmap2.Size.Width )\r
+ {\r
+ graphics.DrawImage( bitmap2, j, i, bitmap2.Width, bitmap2.Height );\r
+ }\r
+ }\r
+ graphics.Dispose();\r
+ bitmap2.Dispose();\r
+ image = new Bitmap( CSkin.Path( @"Graphics\ScreenPlayDrums background.jpg" ) );\r
+ graphics = Graphics.FromImage( image );\r
+ ColorMatrix matrix2 = new ColorMatrix();\r
+ matrix2.Matrix00 = 1f;\r
+ matrix2.Matrix11 = 1f;\r
+ matrix2.Matrix22 = 1f;\r
+ matrix2.Matrix33 = ( (float) CDTXMania.ConfigIni.n背景の透過度 ) / 255f;\r
+ matrix2.Matrix44 = 1f;\r
+ ColorMatrix newColorMatrix = matrix2;\r
+ ImageAttributes imageAttr = new ImageAttributes();\r
+ imageAttr.SetColorMatrix( newColorMatrix );\r
+ graphics.DrawImage( bitmap3, new Rectangle( 0, 0, 640, 480 ), 0, 0, 640, 480, GraphicsUnit.Pixel, imageAttr );\r
+ imageAttr.Dispose();\r
+ graphics.DrawImage( bitmap3, new Rectangle( 0x152, 0x39, 0x116, 0x163 ), 0x152, 0x39, 0x116, 0x163, GraphicsUnit.Pixel );\r
+ graphics.Dispose();\r
+ bitmap3.Dispose();\r
+ flag = false;\r
+ }\r
+ catch\r
+ {\r
+ Trace.TraceError( "背景画像の読み込みに失敗しました。({0})", new object[] { path } );\r
+ }\r
+ }\r
+ }\r
+ if( flag )\r
+ {\r
+ path = CSkin.Path( @"Graphics\ScreenPlayDrums background.jpg" );\r
+ try\r
+ {\r
+ image = new Bitmap( path );\r
+ }\r
+ catch\r
+ {\r
+ Trace.TraceError( "背景画像の読み込みに失敗しました。({0})", new object[] { path } );\r
+ this.tx背景 = null;\r
+ return;\r
+ }\r
+ }\r
+ if( ( CDTXMania.DTX.listBMP.Count > 0 ) || ( CDTXMania.DTX.listBMPTEX.Count > 0 ) )\r
+ {\r
+ Graphics graphics2 = Graphics.FromImage( image );\r
+ graphics2.FillRectangle( Brushes.Black, 0x152, 0x39, 0x116, 0x163 );\r
+ graphics2.Dispose();\r
+ }\r
+ try\r
+ {\r
+ this.tx背景 = new CTexture( CDTXMania.app.Device, image, CDTXMania.TextureFormat );\r
+ }\r
+ catch( CTextureCreateFailedException )\r
+ {\r
+ Trace.TraceError( "背景テクスチャの生成に失敗しました。" );\r
+ this.tx背景 = null;\r
+ }\r
+ image.Dispose();\r
+ }\r
+ private void t判定にあわせてゲージを増減する( E楽器パート part, E判定 e今回の判定 )\r
+ {\r
+ double num;\r
+ switch( e今回の判定 )\r
+ {\r
+ case E判定.Perfect:\r
+ num = ( part == E楽器パート.DRUMS ) ? 0.01 : 0.015;\r
+ break;\r
+\r
+ case E判定.Great:\r
+ num = ( part == E楽器パート.DRUMS ) ? 0.006 : 0.009;\r
+ break;\r
+\r
+ case E判定.Good:\r
+ num = ( part == E楽器パート.DRUMS ) ? 0.002 : 0.003;\r
+ break;\r
+\r
+ case E判定.Poor:\r
+ num = ( part == E楽器パート.DRUMS ) ? 0.0 : 0.0;\r
+ break;\r
+\r
+ case E判定.Miss:\r
+ num = ( part == E楽器パート.DRUMS ) ? -0.035 : -0.035;\r
+ switch( CDTXMania.ConfigIni.eダメージレベル )\r
+ {\r
+ case Eダメージレベル.少ない:\r
+ num *= 0.6;\r
+ break;\r
+\r
+ case Eダメージレベル.普通:\r
+ num *= 1.0;\r
+ break;\r
+\r
+ case Eダメージレベル.大きい:\r
+ num *= 1.6;\r
+ break;\r
+ }\r
+ break;\r
+\r
+ default:\r
+ num = 0.0;\r
+ break;\r
+ }\r
+ this.actGauge.db現在のゲージ値 += num;\r
+\r
+ if( this.actGauge.db現在のゲージ値 > 1.0 )\r
+ this.actGauge.db現在のゲージ値 = 1.0;\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Diagnostics;\r
+using System.IO;\r
+using System.Drawing;\r
+using SlimDX;\r
+using SlimDX.Direct3D9;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CActResultImage : CActivity\r
+ {\r
+ // コンストラクタ\r
+\r
+ public CActResultImage()\r
+ {\r
+ base.b活性化してない = true;\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ public void tアニメを完了させる()\r
+ {\r
+ this.ct登場用.n現在の値 = this.ct登場用.n終了値;\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ this.n本体X = 4;\r
+ this.n本体Y = 0x3f;\r
+ base.On活性化();\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ if( this.ct登場用 != null )\r
+ {\r
+ this.ct登場用 = null;\r
+ }\r
+ if( this.avi != null )\r
+ {\r
+ this.avi.Dispose();\r
+ this.avi = null;\r
+ }\r
+ base.On非活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.txパネル本体 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenResult resultimage panel.png" ) );\r
+ this.txリザルト画像がないときの画像 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect preimage default.png" ) );\r
+ this.sfリザルトAVI画像 = Surface.CreateOffscreenPlain( CDTXMania.app.Device, 0xcc, 0x10d, CDTXMania.app.GraphicsDeviceManager.CurrentSettings.BackBufferFormat, Pool.SystemMemory );\r
+ this.nAVI再生開始時刻 = -1;\r
+ this.n前回描画したフレーム番号 = -1;\r
+ this.b動画フレームを作成した = false;\r
+ this.pAVIBmp = IntPtr.Zero;\r
+ if( CDTXMania.ConfigIni.bストイックモード )\r
+ {\r
+ this.r表示するリザルト画像 = this.txリザルト画像がないときの画像;\r
+ }\r
+ else if( ( ( !this.tリザルト動画の指定があれば構築する() && !this.tリザルト画像の指定があれば構築する() ) && ( !this.tプレビュー動画の指定があれば構築する() && !this.tプレビュー画像の指定があれば構築する() ) ) && !this.t背景画像があればその一部からリザルト画像を構築する() )\r
+ {\r
+ this.r表示するリザルト画像 = this.txリザルト画像がないときの画像;\r
+ }\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.txパネル本体 );\r
+ CDTXMania.tテクスチャの解放( ref this.txリザルト画像 );\r
+ CDTXMania.tテクスチャの解放( ref this.txリザルト画像がないときの画像 );\r
+ if( this.sfリザルトAVI画像 != null )\r
+ {\r
+ this.sfリザルトAVI画像.Dispose();\r
+ this.sfリザルトAVI画像 = null;\r
+ }\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override unsafe int On進行描画()\r
+ {\r
+ if( base.b活性化してない )\r
+ {\r
+ return 0;\r
+ }\r
+ if( base.b初めての進行描画 )\r
+ {\r
+ this.ct登場用 = new CCounter( 0, 100, 5, CDTXMania.Timer );\r
+ base.b初めての進行描画 = false;\r
+ }\r
+ this.ct登場用.t進行();\r
+ if( ( ( this.avi != null ) && ( this.sfリザルトAVI画像 != null ) ) && ( this.nAVI再生開始時刻 != -1 ) )\r
+ {\r
+ int time = (int) ( ( CDTXMania.Timer.n現在時刻 - this.nAVI再生開始時刻 ) * ( ( (double) CDTXMania.ConfigIni.n演奏速度 ) / 20.0 ) );\r
+ int frameNoFromTime = this.avi.GetFrameNoFromTime( time );\r
+ if( frameNoFromTime >= this.avi.GetMaxFrameCount() )\r
+ {\r
+ this.nAVI再生開始時刻 = CDTXMania.Timer.n現在時刻;\r
+ }\r
+ else if( ( this.n前回描画したフレーム番号 != frameNoFromTime ) && !this.b動画フレームを作成した )\r
+ {\r
+ this.b動画フレームを作成した = true;\r
+ this.n前回描画したフレーム番号 = frameNoFromTime;\r
+ this.pAVIBmp = this.avi.GetFramePtr( frameNoFromTime );\r
+ }\r
+ }\r
+ if( this.ct登場用.b終了値に達した )\r
+ {\r
+ this.n本体X = 4;\r
+ this.n本体Y = 0x3f;\r
+ }\r
+ else\r
+ {\r
+ double num3 = ( (double) this.ct登場用.n現在の値 ) / 100.0;\r
+ double num4 = Math.Cos( ( 1.5 + ( 0.5 * num3 ) ) * 3.1415926535897931 );\r
+ this.n本体X = 4;\r
+ this.n本体Y = 0x3f - ( (int) ( ( ( this.txパネル本体 != null ) ? ( (double) this.txパネル本体.sz画像サイズ.Height ) : ( (double) 0 ) ) * ( 1.0 - ( num4 * num4 ) ) ) );\r
+ }\r
+ if( this.txパネル本体 != null )\r
+ {\r
+ this.txパネル本体.t2D描画( CDTXMania.app.Device, this.n本体X, this.n本体Y );\r
+ }\r
+ int x = this.n本体X + 0x11;\r
+ int y = this.n本体Y + 0x10;\r
+ if( ( ( this.nAVI再生開始時刻 != -1 ) && ( this.avi != null ) ) && ( this.sfリザルトAVI画像 != null ) )\r
+ {\r
+ if( this.b動画フレームを作成した && ( this.pAVIBmp != IntPtr.Zero ) )\r
+ {\r
+ DataRectangle rectangle = this.sfリザルトAVI画像.LockRectangle( LockFlags.None );\r
+ DataStream data = rectangle.Data;\r
+ int num7 = rectangle.Pitch / this.sfリザルトAVI画像.Description.Width;\r
+ BitmapUtil.BITMAPINFOHEADER* pBITMAPINFOHEADER = (BitmapUtil.BITMAPINFOHEADER*) this.pAVIBmp.ToPointer();\r
+ if( pBITMAPINFOHEADER->biBitCount == 0x18 )\r
+ {\r
+ switch( num7 )\r
+ {\r
+ case 2:\r
+ this.avi.tBitmap24ToGraphicsStreamR5G6B5( pBITMAPINFOHEADER, data, this.sfリザルトAVI画像.Description.Width, this.sfリザルトAVI画像.Description.Height );\r
+ break;\r
+\r
+ case 4:\r
+ this.avi.tBitmap24ToGraphicsStreamX8R8G8B8( pBITMAPINFOHEADER, data, this.sfリザルトAVI画像.Description.Width, this.sfリザルトAVI画像.Description.Height );\r
+ break;\r
+ }\r
+ }\r
+ this.sfリザルトAVI画像.UnlockRectangle();\r
+ this.b動画フレームを作成した = false;\r
+ }\r
+ using( Surface surface = CDTXMania.app.Device.GetBackBuffer( 0, 0 ) )\r
+ {\r
+ Rectangle sourceRectangle = new Rectangle( 0, 0, this.sfリザルトAVI画像.Description.Width, this.sfリザルトAVI画像.Description.Height );\r
+ if( y < 0 )\r
+ {\r
+ sourceRectangle.Y += -y;\r
+ sourceRectangle.Height -= -y;\r
+ y = 0;\r
+ }\r
+ if( sourceRectangle.Height > 0 )\r
+ {\r
+ CDTXMania.app.Device.UpdateSurface( this.sfリザルトAVI画像, sourceRectangle, surface, new Point( x, y ) );\r
+ }\r
+ goto Label_042F;\r
+ }\r
+ }\r
+ if( this.r表示するリザルト画像 != null )\r
+ {\r
+ int width = this.r表示するリザルト画像.szテクスチャサイズ.Width;\r
+ int height = this.r表示するリザルト画像.szテクスチャサイズ.Height;\r
+ if( width > 0xcc )\r
+ {\r
+ width = 0xcc;\r
+ }\r
+ if( height > 0x10d )\r
+ {\r
+ height = 0x10d;\r
+ }\r
+ x += ( 0xcc - width ) / 2;\r
+ y += ( 0x10d - height ) / 2;\r
+ this.r表示するリザルト画像.t2D描画( CDTXMania.app.Device, x, y, new Rectangle( 0, 0, width, height ) );\r
+ }\r
+ Label_042F:\r
+ if( ( CDTXMania.DTX.GENRE != null ) && ( CDTXMania.DTX.GENRE.Length > 0 ) )\r
+ {\r
+ CDTXMania.act文字コンソール.tPrint( this.n本体X + 0x12, this.n本体Y - 1, C文字コンソール.Eフォント種別.赤細, CDTXMania.DTX.GENRE );\r
+ }\r
+ if( !this.ct登場用.b終了値に達した )\r
+ {\r
+ return 0;\r
+ }\r
+ return 1;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private CAvi avi;\r
+ private bool b動画フレームを作成した;\r
+ private CCounter ct登場用;\r
+ private long nAVI再生開始時刻;\r
+ private int n前回描画したフレーム番号;\r
+ private int n本体X;\r
+ private int n本体Y;\r
+ private IntPtr pAVIBmp;\r
+ private CTexture r表示するリザルト画像;\r
+ private Surface sfリザルトAVI画像;\r
+ private string strAVIファイル名;\r
+ private CTexture txパネル本体;\r
+ private CTexture txリザルト画像;\r
+ private CTexture txリザルト画像がないときの画像;\r
+\r
+ private bool t背景画像があればその一部からリザルト画像を構築する()\r
+ {\r
+ string bACKGROUND;\r
+ if( ( CDTXMania.ConfigIni.bギタレボモード && ( CDTXMania.DTX.BACKGROUND_GR != null ) ) && ( CDTXMania.DTX.BACKGROUND_GR.Length > 0 ) )\r
+ {\r
+ bACKGROUND = CDTXMania.DTX.BACKGROUND_GR;\r
+ }\r
+ else\r
+ {\r
+ bACKGROUND = CDTXMania.DTX.BACKGROUND;\r
+ }\r
+ if( string.IsNullOrEmpty( bACKGROUND ) )\r
+ {\r
+ return false;\r
+ }\r
+ CDTXMania.tテクスチャの解放( ref this.txリザルト画像 );\r
+ this.r表示するリザルト画像 = null;\r
+ bACKGROUND = CDTXMania.DTX.strフォルダ名 + bACKGROUND;\r
+ Bitmap image = null;\r
+ Bitmap bitmap2 = null;\r
+ Bitmap bitmap3 = null;\r
+ try\r
+ {\r
+ image = new Bitmap( bACKGROUND );\r
+ bitmap2 = new Bitmap( 640, 480 );\r
+ Graphics graphics = Graphics.FromImage( bitmap2 );\r
+ int x = 0;\r
+ for( int i = 0; i < 480; i += image.Height )\r
+ {\r
+ for( x = 0; x < 640; x += image.Width )\r
+ {\r
+ graphics.DrawImage( image, x, i, image.Width, image.Height );\r
+ }\r
+ }\r
+ graphics.Dispose();\r
+ bitmap3 = new Bitmap( 0xcc, 0x10d );\r
+ graphics = Graphics.FromImage( bitmap3 );\r
+ graphics.DrawImage( bitmap2, 5, 5, new Rectangle( 0x157, 0x6d, 0xcc, 0x10d ), GraphicsUnit.Pixel );\r
+ graphics.Dispose();\r
+ this.txリザルト画像 = new CTexture( CDTXMania.app.Device, bitmap3, CDTXMania.TextureFormat );\r
+ this.r表示するリザルト画像 = this.txリザルト画像;\r
+ }\r
+ catch\r
+ {\r
+ Trace.TraceError( "背景画像の読み込みに失敗しました。({0})", new object[] { bACKGROUND } );\r
+ this.txリザルト画像 = null;\r
+ return false;\r
+ }\r
+ finally\r
+ {\r
+ if( image != null )\r
+ {\r
+ image.Dispose();\r
+ }\r
+ if( bitmap2 != null )\r
+ {\r
+ bitmap2.Dispose();\r
+ }\r
+ if( bitmap3 != null )\r
+ {\r
+ bitmap3.Dispose();\r
+ }\r
+ }\r
+ return true;\r
+ }\r
+ private unsafe void tサーフェイスをクリアする( Surface sf )\r
+ {\r
+ DataRectangle rectangle = sf.LockRectangle( LockFlags.None );\r
+ DataStream data = rectangle.Data;\r
+ switch( ( rectangle.Pitch / sf.Description.Width ) )\r
+ {\r
+ case 4:\r
+ {\r
+ uint* numPtr = (uint*) data.DataPointer.ToPointer();\r
+ for( int i = 0; i < sf.Description.Height; i++ )\r
+ {\r
+ for( int j = 0; j < sf.Description.Width; j++ )\r
+ {\r
+ ( numPtr + ( i * sf.Description.Width ) )[ j ] = 0;\r
+ }\r
+ }\r
+ break;\r
+ }\r
+ case 2:\r
+ {\r
+ ushort* numPtr2 = (ushort*) data.DataPointer.ToPointer();\r
+ for( int k = 0; k < sf.Description.Height; k++ )\r
+ {\r
+ for( int m = 0; m < sf.Description.Width; m++ )\r
+ {\r
+ ( numPtr2 + ( k * sf.Description.Width ) )[ m ] = 0;\r
+ }\r
+ }\r
+ break;\r
+ }\r
+ }\r
+ sf.UnlockRectangle();\r
+ }\r
+ private bool tプレビュー画像の指定があれば構築する()\r
+ {\r
+ if( string.IsNullOrEmpty( CDTXMania.DTX.PREIMAGE ) )\r
+ {\r
+ return false;\r
+ }\r
+ CDTXMania.tテクスチャの解放( ref this.txリザルト画像 );\r
+ this.r表示するリザルト画像 = null;\r
+ string path = CDTXMania.DTX.strフォルダ名 + CDTXMania.DTX.PREIMAGE;\r
+ if( !File.Exists( path ) )\r
+ {\r
+ Trace.TraceWarning( "ファイルが存在しません。({0})", new object[] { path } );\r
+ return false;\r
+ }\r
+ this.txリザルト画像 = CDTXMania.tテクスチャの生成( path );\r
+ this.r表示するリザルト画像 = this.txリザルト画像;\r
+ return ( this.r表示するリザルト画像 != null );\r
+ }\r
+ private bool tプレビュー動画の指定があれば構築する()\r
+ {\r
+ if( !CDTXMania.ConfigIni.bAVI有効 )\r
+ {\r
+ return false;\r
+ }\r
+ if( string.IsNullOrEmpty( CDTXMania.DTX.PREMOVIE ) )\r
+ {\r
+ return false;\r
+ }\r
+ this.strAVIファイル名 = CDTXMania.DTX.strフォルダ名 + CDTXMania.DTX.PREMOVIE;\r
+ if( !File.Exists( this.strAVIファイル名 ) )\r
+ {\r
+ Trace.TraceWarning( "ファイルが存在しません。({0})", new object[] { this.strAVIファイル名 } );\r
+ return false;\r
+ }\r
+ if( this.avi != null )\r
+ {\r
+ this.avi.Dispose();\r
+ this.avi = null;\r
+ }\r
+ try\r
+ {\r
+ this.avi = new CAvi( this.strAVIファイル名 );\r
+ this.nAVI再生開始時刻 = CDTXMania.Timer.n現在時刻;\r
+ this.n前回描画したフレーム番号 = -1;\r
+ this.b動画フレームを作成した = false;\r
+ this.tサーフェイスをクリアする( this.sfリザルトAVI画像 );\r
+ Trace.TraceInformation( "動画を生成しました。({0})", new object[] { this.strAVIファイル名 } );\r
+ }\r
+ catch\r
+ {\r
+ Trace.TraceError( "動画の生成に失敗しました。({0})", new object[] { this.strAVIファイル名 } );\r
+ this.avi = null;\r
+ this.nAVI再生開始時刻 = -1;\r
+ }\r
+ return true;\r
+ }\r
+ private bool tリザルト画像の指定があれば構築する()\r
+ {\r
+ int rank = CScoreIni.t総合ランク値を計算して返す( CDTXMania.stage結果.st演奏記録.Drums, CDTXMania.stage結果.st演奏記録.Guitar, CDTXMania.stage結果.st演奏記録.Bass );\r
+ if (rank == 99) // #23534 2010.10.28 yyagi: 演奏チップが0個のときは、rankEと見なす\r
+ {\r
+ rank = 6;\r
+ }\r
+ if (string.IsNullOrEmpty(CDTXMania.DTX.RESULTIMAGE[rank]))\r
+ {\r
+ return false;\r
+ }\r
+ CDTXMania.tテクスチャの解放( ref this.txリザルト画像 );\r
+ this.r表示するリザルト画像 = null;\r
+ string path = CDTXMania.DTX.strフォルダ名 + CDTXMania.DTX.RESULTIMAGE[ rank ];\r
+ if( !File.Exists( path ) )\r
+ {\r
+ Trace.TraceWarning( "ファイルが存在しません。({0})", new object[] { path } );\r
+ return false;\r
+ }\r
+ this.txリザルト画像 = CDTXMania.tテクスチャの生成( path );\r
+ this.r表示するリザルト画像 = this.txリザルト画像;\r
+ return ( this.r表示するリザルト画像 != null );\r
+ }\r
+ private bool tリザルト動画の指定があれば構築する()\r
+ {\r
+ if( !CDTXMania.ConfigIni.bAVI有効 )\r
+ {\r
+ return false;\r
+ }\r
+ int rank = CScoreIni.t総合ランク値を計算して返す( CDTXMania.stage結果.st演奏記録.Drums, CDTXMania.stage結果.st演奏記録.Guitar, CDTXMania.stage結果.st演奏記録.Bass );\r
+ if (rank == 99) // #23534 2010.10.28 yyagi: 演奏チップが0個のときは、rankEと見なす\r
+ {\r
+ rank = 6;\r
+ }\r
+\r
+ if( string.IsNullOrEmpty( CDTXMania.DTX.RESULTMOVIE[ rank ] ) )\r
+ {\r
+ return false;\r
+ }\r
+ this.strAVIファイル名 = CDTXMania.DTX.strフォルダ名 + CDTXMania.DTX.RESULTMOVIE[ rank ];\r
+ if( !File.Exists( this.strAVIファイル名 ) )\r
+ {\r
+ Trace.TraceWarning( "ファイルが存在しません。({0})", new object[] { this.strAVIファイル名 } );\r
+ return false;\r
+ }\r
+ if( this.avi != null )\r
+ {\r
+ this.avi.Dispose();\r
+ this.avi = null;\r
+ }\r
+ try\r
+ {\r
+ this.avi = new CAvi( this.strAVIファイル名 );\r
+ this.nAVI再生開始時刻 = CDTXMania.Timer.n現在時刻;\r
+ this.n前回描画したフレーム番号 = -1;\r
+ this.b動画フレームを作成した = false;\r
+ this.tサーフェイスをクリアする( this.sfリザルトAVI画像 );\r
+ Trace.TraceInformation( "動画を生成しました。({0})", new object[] { this.strAVIファイル名 } );\r
+ }\r
+ catch\r
+ {\r
+ Trace.TraceError( "動画の生成に失敗しました。({0})", new object[] { this.strAVIファイル名 } );\r
+ this.avi = null;\r
+ this.nAVI再生開始時刻 = -1;\r
+ }\r
+ return true;\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using System.Drawing;\r
+using System.IO;\r
+using SlimDX;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CActResultParameterPanel : CActivity\r
+ {\r
+ // コンストラクタ\r
+\r
+ public CActResultParameterPanel()\r
+ {\r
+ ST文字位置[] st文字位置Array = new ST文字位置[ 11 ];\r
+ ST文字位置 st文字位置 = new ST文字位置();\r
+ st文字位置.ch = '0';\r
+ st文字位置.pt = new Point( 0, 0 );\r
+ st文字位置Array[ 0 ] = st文字位置;\r
+ ST文字位置 st文字位置2 = new ST文字位置();\r
+ st文字位置2.ch = '1';\r
+ st文字位置2.pt = new Point( 11, 0 );\r
+ st文字位置Array[ 1 ] = st文字位置2;\r
+ ST文字位置 st文字位置3 = new ST文字位置();\r
+ st文字位置3.ch = '2';\r
+ st文字位置3.pt = new Point( 0x16, 0 );\r
+ st文字位置Array[ 2 ] = st文字位置3;\r
+ ST文字位置 st文字位置4 = new ST文字位置();\r
+ st文字位置4.ch = '3';\r
+ st文字位置4.pt = new Point( 0x21, 0 );\r
+ st文字位置Array[ 3 ] = st文字位置4;\r
+ ST文字位置 st文字位置5 = new ST文字位置();\r
+ st文字位置5.ch = '4';\r
+ st文字位置5.pt = new Point( 0x2c, 0 );\r
+ st文字位置Array[ 4 ] = st文字位置5;\r
+ ST文字位置 st文字位置6 = new ST文字位置();\r
+ st文字位置6.ch = '5';\r
+ st文字位置6.pt = new Point( 0, 0x10 );\r
+ st文字位置Array[ 5 ] = st文字位置6;\r
+ ST文字位置 st文字位置7 = new ST文字位置();\r
+ st文字位置7.ch = '6';\r
+ st文字位置7.pt = new Point( 11, 0x10 );\r
+ st文字位置Array[ 6 ] = st文字位置7;\r
+ ST文字位置 st文字位置8 = new ST文字位置();\r
+ st文字位置8.ch = '7';\r
+ st文字位置8.pt = new Point( 0x16, 0x10 );\r
+ st文字位置Array[ 7 ] = st文字位置8;\r
+ ST文字位置 st文字位置9 = new ST文字位置();\r
+ st文字位置9.ch = '8';\r
+ st文字位置9.pt = new Point( 0x21, 0x10 );\r
+ st文字位置Array[ 8 ] = st文字位置9;\r
+ ST文字位置 st文字位置10 = new ST文字位置();\r
+ st文字位置10.ch = '9';\r
+ st文字位置10.pt = new Point( 0x2c, 0x10 );\r
+ st文字位置Array[ 9 ] = st文字位置10;\r
+ ST文字位置 st文字位置11 = new ST文字位置();\r
+ st文字位置11.ch = '.';\r
+ st文字位置11.pt = new Point( 0x37, 0x10 );\r
+ st文字位置Array[ 10 ] = st文字位置11;\r
+ this.st大文字位置 = st文字位置Array;\r
+ ST文字位置[] st文字位置Array2 = new ST文字位置[ 11 ];\r
+ ST文字位置 st文字位置12 = new ST文字位置();\r
+ st文字位置12.ch = '0';\r
+ st文字位置12.pt = new Point( 0, 0x20 );\r
+ st文字位置Array2[ 0 ] = st文字位置12;\r
+ ST文字位置 st文字位置13 = new ST文字位置();\r
+ st文字位置13.ch = '1';\r
+ st文字位置13.pt = new Point( 11, 0x20 );\r
+ st文字位置Array2[ 1 ] = st文字位置13;\r
+ ST文字位置 st文字位置14 = new ST文字位置();\r
+ st文字位置14.ch = '2';\r
+ st文字位置14.pt = new Point( 0x16, 0x20 );\r
+ st文字位置Array2[ 2 ] = st文字位置14;\r
+ ST文字位置 st文字位置15 = new ST文字位置();\r
+ st文字位置15.ch = '3';\r
+ st文字位置15.pt = new Point( 0x21, 0x20 );\r
+ st文字位置Array2[ 3 ] = st文字位置15;\r
+ ST文字位置 st文字位置16 = new ST文字位置();\r
+ st文字位置16.ch = '4';\r
+ st文字位置16.pt = new Point( 0x2c, 0x20 );\r
+ st文字位置Array2[ 4 ] = st文字位置16;\r
+ ST文字位置 st文字位置17 = new ST文字位置();\r
+ st文字位置17.ch = '5';\r
+ st文字位置17.pt = new Point( 0, 0x30 );\r
+ st文字位置Array2[ 5 ] = st文字位置17;\r
+ ST文字位置 st文字位置18 = new ST文字位置();\r
+ st文字位置18.ch = '6';\r
+ st文字位置18.pt = new Point( 11, 0x30 );\r
+ st文字位置Array2[ 6 ] = st文字位置18;\r
+ ST文字位置 st文字位置19 = new ST文字位置();\r
+ st文字位置19.ch = '7';\r
+ st文字位置19.pt = new Point( 0x16, 0x30 );\r
+ st文字位置Array2[ 7 ] = st文字位置19;\r
+ ST文字位置 st文字位置20 = new ST文字位置();\r
+ st文字位置20.ch = '8';\r
+ st文字位置20.pt = new Point( 0x21, 0x30 );\r
+ st文字位置Array2[ 8 ] = st文字位置20;\r
+ ST文字位置 st文字位置21 = new ST文字位置();\r
+ st文字位置21.ch = '9';\r
+ st文字位置21.pt = new Point( 0x2c, 0x30 );\r
+ st文字位置Array2[ 9 ] = st文字位置21;\r
+ ST文字位置 st文字位置22 = new ST文字位置();\r
+ st文字位置22.ch = '%';\r
+ st文字位置22.pt = new Point( 0x37, 0x30 );\r
+ st文字位置Array2[ 10 ] = st文字位置22;\r
+ this.st小文字位置 = st文字位置Array2;\r
+ this.ptFullCombo位置 = new Point[] { new Point( 0x80, 0xed ), new Point( 0xdf, 0xed ), new Point( 0x141, 0xed ) };\r
+ base.b活性化してない = true;\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ public void tアニメを完了させる()\r
+ {\r
+ this.ct表示用.n現在の値 = this.ct表示用.n終了値;\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ this.n本体X = 0xf2;\r
+ this.n本体Y = 0x44;\r
+ this.sdDTXで指定されたフルコンボ音 = null;\r
+ this.bフルコンボ音再生済み = false;\r
+ base.On活性化();\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ if( this.ct表示用 != null )\r
+ {\r
+ this.ct表示用 = null;\r
+ }\r
+ if( this.sdDTXで指定されたフルコンボ音 != null )\r
+ {\r
+ CDTXMania.Sound管理.tサウンドを破棄する( this.sdDTXで指定されたフルコンボ音 );\r
+ this.sdDTXで指定されたフルコンボ音 = null;\r
+ }\r
+ base.On非活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.txパネル本体 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenResult parameter panel.png" ), true );\r
+ this.tx文字[ 0 ] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenResult parameter numbers.png" ) );\r
+ this.tx文字[ 1 ] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenResult parameter numbers em.png" ) );\r
+ this.txFullCombo = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenResult fullcombo.png" ) );\r
+ this.txWhite = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\Tile white 64x64.png" ) );\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.txパネル本体 );\r
+ CDTXMania.tテクスチャの解放( ref this.tx文字[ 0 ] );\r
+ CDTXMania.tテクスチャの解放( ref this.tx文字[ 1 ] );\r
+ CDTXMania.tテクスチャの解放( ref this.txFullCombo );\r
+ CDTXMania.tテクスチャの解放( ref this.txWhite );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( base.b活性化してない )\r
+ {\r
+ return 0;\r
+ }\r
+ if( base.b初めての進行描画 )\r
+ {\r
+ this.ct表示用 = new CCounter( 0, 0x3e7, 2, CDTXMania.Timer );\r
+ base.b初めての進行描画 = false;\r
+ }\r
+ this.ct表示用.t進行();\r
+ if( this.txパネル本体 != null )\r
+ {\r
+ this.txパネル本体.t2D描画( CDTXMania.app.Device, this.n本体X, this.n本体Y );\r
+ }\r
+ int num = this.ct表示用.n現在の値;\r
+ Point[] pointArray = new Point[] { new Point( 0x68, 0x29 ), new Point( 0xc7, 0x29 ), new Point( 0x129, 0x29 ) };\r
+ for( int i = 0; i < 3; i++ )\r
+ {\r
+ int x = this.n本体X + pointArray[ i ].X;\r
+ int y = this.n本体Y + pointArray[ i ].Y;\r
+ if( num >= 0 )\r
+ {\r
+ this.t大文字表示( x, y, CDTXMania.stage結果.st演奏記録[ i ].nPerfect数.ToString( "00000" ) );\r
+ }\r
+ if( num >= 100 )\r
+ {\r
+ this.t大文字表示( x, y + 0x16, CDTXMania.stage結果.st演奏記録[ i ].nGreat数.ToString( "00000" ) );\r
+ }\r
+ if( num >= 200 )\r
+ {\r
+ this.t大文字表示( x, y + 0x2c, CDTXMania.stage結果.st演奏記録[ i ].nGood数.ToString( "00000" ) );\r
+ }\r
+ if( num >= 300 )\r
+ {\r
+ this.t大文字表示( x, y + 0x42, CDTXMania.stage結果.st演奏記録[ i ].nPoor数.ToString( "00000" ) );\r
+ }\r
+ if( num >= 400 )\r
+ {\r
+ this.t大文字表示( x, y + 0x58, CDTXMania.stage結果.st演奏記録[ i ].nMiss数.ToString( "00000" ) );\r
+ }\r
+ if( num >= 0 )\r
+ {\r
+ this.t小文字表示( x + 0x30, y, string.Format( "{0,3:##0}%", CDTXMania.stage結果.fPerfect率[ i ] ) );\r
+ }\r
+ if( num >= 100 )\r
+ {\r
+ this.t小文字表示( x + 0x30, y + 0x16, string.Format( "{0,3:##0}%", CDTXMania.stage結果.fGreat率[ i ] ) );\r
+ }\r
+ if( num >= 200 )\r
+ {\r
+ this.t小文字表示( x + 0x30, y + 0x2c, string.Format( "{0,3:##0}%", CDTXMania.stage結果.fGood率[ i ] ) );\r
+ }\r
+ if( num >= 300 )\r
+ {\r
+ this.t小文字表示( x + 0x30, y + 0x42, string.Format( "{0,3:##0}%", CDTXMania.stage結果.fPoor率[ i ] ) );\r
+ }\r
+ if( num >= 400 )\r
+ {\r
+ this.t小文字表示( x + 0x30, y + 0x58, string.Format( "{0,3:##0}%", CDTXMania.stage結果.fMiss率[ i ] ) );\r
+ }\r
+ if( num >= 500 )\r
+ {\r
+ this.t大文字表示( x, y + 110, string.Format( "{0,9:########0}", CDTXMania.stage結果.st演奏記録[ i ].n最大コンボ数 ) );\r
+ }\r
+ if( num >= 600 )\r
+ {\r
+ this.t大文字表示( x, y + 0x84, CDTXMania.stage結果.st演奏記録[ i ].nスコア.ToString( "000000000" ), CDTXMania.stage結果.b新記録スコア[ i ] );\r
+ }\r
+ if( num >= 700 )\r
+ {\r
+ this.t大文字表示( x, y + 0x9a, string.Format( "{0,9:#####0.00}", CDTXMania.stage結果.st演奏記録[ i ].db演奏型スキル値 ), CDTXMania.stage結果.b新記録スキル[ i ] );\r
+ }\r
+ if( num >= 700 )\r
+ {\r
+ this.t小文字表示( x + 0x48, y + 0x9a, "%" );\r
+ }\r
+ if( num >= 800 )\r
+ {\r
+ this.t大文字表示( x, y + 0xb0, string.Format( "{0,9:########0}", CDTXMania.stage結果.n演奏回数[ i ] ) );\r
+ }\r
+ }\r
+ if( this.ct表示用.n現在の値 < 900 )\r
+ {\r
+ int num5 = this.ct表示用.n現在の値 / 100;\r
+ double num6 = 1.0 - ( ( (double) ( this.ct表示用.n現在の値 % 100 ) ) / 100.0 );\r
+ int num7 = 0x157;\r
+ int num8 = 0x6d + ( num5 * 0x16 );\r
+ int num9 = 0x11c;\r
+ int num10 = 0x10;\r
+ if( this.txWhite != null )\r
+ {\r
+ this.txWhite.n透明度 = (int) ( 255.0 * num6 );\r
+ Rectangle rectangle = new Rectangle( 0, 0, 0x40, 0 );\r
+ while( num9 > 0 )\r
+ {\r
+ rectangle.Height = num10;\r
+ if( num9 < 0x40 )\r
+ {\r
+ rectangle.Width = num9;\r
+ }\r
+ this.txWhite.t2D描画( CDTXMania.app.Device, num7, num8, rectangle );\r
+ num7 += 0x40;\r
+ num9 -= 0x40;\r
+ }\r
+ }\r
+ }\r
+ if( this.ct表示用.n現在の値 >= 900 )\r
+ {\r
+ for( int j = 0; j < 3; j++ )\r
+ {\r
+ if( CDTXMania.stage結果.st演奏記録[ j ].bフルコンボである )\r
+ {\r
+ if( this.ct表示用.b終了値に達した )\r
+ {\r
+ if( this.txFullCombo != null )\r
+ {\r
+ this.txFullCombo.t2D描画( CDTXMania.app.Device, this.n本体X + this.ptFullCombo位置[ j ].X, this.n本体Y + this.ptFullCombo位置[ j ].Y );\r
+ }\r
+ if( !this.bフルコンボ音再生済み )\r
+ {\r
+ if( ( ( CDTXMania.DTX.SOUND_FULLCOMBO != null ) && ( CDTXMania.DTX.SOUND_FULLCOMBO.Length > 0 ) ) && File.Exists( CDTXMania.DTX.strフォルダ名 + CDTXMania.DTX.SOUND_FULLCOMBO ) )\r
+ {\r
+ try\r
+ {\r
+ if( this.sdDTXで指定されたフルコンボ音 != null )\r
+ {\r
+ CDTXMania.Sound管理.tサウンドを破棄する( this.sdDTXで指定されたフルコンボ音 );\r
+ this.sdDTXで指定されたフルコンボ音 = null;\r
+ }\r
+ this.sdDTXで指定されたフルコンボ音 = CDTXMania.Sound管理.tサウンドを生成する( CDTXMania.DTX.strフォルダ名 + CDTXMania.DTX.SOUND_FULLCOMBO );\r
+ if( this.sdDTXで指定されたフルコンボ音 != null )\r
+ {\r
+ this.sdDTXで指定されたフルコンボ音.t再生を開始する();\r
+ }\r
+ }\r
+ catch\r
+ {\r
+ }\r
+ }\r
+ else\r
+ {\r
+ CDTXMania.Skin.soundフルコンボ音.t再生する();\r
+ }\r
+ this.bフルコンボ音再生済み = true;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ double num12 = ( (double) ( this.ct表示用.n現在の値 - 900 ) ) / 100.0;\r
+ float num13 = (float) ( 2.0 - num12 );\r
+ if( this.txFullCombo != null )\r
+ {\r
+ this.txFullCombo.vc拡大縮小倍率 = new Vector3( num13, num13, 1f );\r
+ this.txFullCombo.n透明度 = (int) ( 255.0 * num12 );\r
+ int num14 = ( this.n本体X + this.ptFullCombo位置[ j ].X ) + ( (int) ( ( this.txFullCombo.sz画像サイズ.Width * ( 1f - num13 ) ) / 2f ) );\r
+ int num15 = ( this.n本体Y + this.ptFullCombo位置[ j ].Y ) + ( (int) ( ( this.txFullCombo.sz画像サイズ.Height * ( 1f - num13 ) ) / 2f ) );\r
+ this.txFullCombo.t2D描画( CDTXMania.app.Device, num14, num15 );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ if( !this.ct表示用.b終了値に達した )\r
+ {\r
+ return 0;\r
+ }\r
+ return 1;\r
+ }\r
+ \r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ private struct ST文字位置\r
+ {\r
+ public char ch;\r
+ public Point pt;\r
+ }\r
+\r
+ private bool bフルコンボ音再生済み;\r
+ private CCounter ct表示用;\r
+ private int n本体X;\r
+ private int n本体Y;\r
+ private readonly Point[] ptFullCombo位置;\r
+ private CSound sdDTXで指定されたフルコンボ音;\r
+ private readonly ST文字位置[] st小文字位置;\r
+ private readonly ST文字位置[] st大文字位置;\r
+ private CTexture txFullCombo;\r
+ private CTexture txWhite;\r
+ private CTexture txパネル本体;\r
+ private CTexture[] tx文字 = new CTexture[ 2 ];\r
+\r
+ private void t小文字表示( int x, int y, string str )\r
+ {\r
+ this.t小文字表示( x, y, str, false );\r
+ }\r
+ private void t小文字表示( int x, int y, string str, bool b強調 )\r
+ {\r
+ foreach( char ch in str )\r
+ {\r
+ for( int i = 0; i < this.st小文字位置.Length; i++ )\r
+ {\r
+ if( this.st小文字位置[ i ].ch == ch )\r
+ {\r
+ Rectangle rectangle = new Rectangle( this.st小文字位置[ i ].pt.X, this.st小文字位置[ i ].pt.Y, 11, 0x10 );\r
+ if( ch == '%' )\r
+ {\r
+ rectangle.Width -= 2;\r
+ rectangle.Height -= 2;\r
+ }\r
+ if( this.tx文字[ b強調 ? 1 : 0 ] != null )\r
+ {\r
+ this.tx文字[ b強調 ? 1 : 0 ].t2D描画( CDTXMania.app.Device, x, y, rectangle );\r
+ }\r
+ break;\r
+ }\r
+ }\r
+ x += 8;\r
+ }\r
+ }\r
+ private void t大文字表示( int x, int y, string str )\r
+ {\r
+ this.t大文字表示( x, y, str, false );\r
+ }\r
+ private void t大文字表示( int x, int y, string str, bool b強調 )\r
+ {\r
+ foreach( char ch in str )\r
+ {\r
+ for( int i = 0; i < this.st大文字位置.Length; i++ )\r
+ {\r
+ if( this.st大文字位置[ i ].ch == ch )\r
+ {\r
+ Rectangle rectangle = new Rectangle( this.st大文字位置[ i ].pt.X, this.st大文字位置[ i ].pt.Y, 11, 0x10 );\r
+ if( ch == '.' )\r
+ {\r
+ rectangle.Width -= 2;\r
+ rectangle.Height -= 2;\r
+ }\r
+ if( this.tx文字[ b強調 ? 1 : 0 ] != null )\r
+ {\r
+ this.tx文字[ b強調 ? 1 : 0 ].t2D描画( CDTXMania.app.Device, x, y, rectangle );\r
+ }\r
+ break;\r
+ }\r
+ }\r
+ x += 8;\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Drawing;\r
+using SlimDX;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CActResultRank : CActivity\r
+ {\r
+ // コンストラクタ\r
+\r
+ public CActResultRank()\r
+ {\r
+ base.b活性化してない = true;\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ public void tアニメを完了させる()\r
+ {\r
+ this.ctランク表示.n現在の値 = this.ctランク表示.n終了値;\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ this.n本体X = 0x1ed;\r
+ this.n本体Y = 0x153;\r
+ base.On活性化();\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ if( this.ct白波移動 != null )\r
+ {\r
+ this.ct白波移動 = null;\r
+ }\r
+ if( this.ctランク表示 != null )\r
+ {\r
+ this.ctランク表示 = null;\r
+ }\r
+ base.On非活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.txランクパネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenResult rank panel.png" ) );\r
+ this.tx白波 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenResult rank wave.png" ) );\r
+ switch ( CDTXMania.stage結果.n総合ランク値 )\r
+ {\r
+ case 0:\r
+ this.txランク文字 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenResult rankSS.png" ) );\r
+ break;\r
+\r
+ case 1:\r
+ this.txランク文字 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenResult rankS.png" ) );\r
+ break;\r
+\r
+ case 2:\r
+ this.txランク文字 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenResult rankA.png" ) );\r
+ break;\r
+\r
+ case 3:\r
+ this.txランク文字 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenResult rankB.png" ) );\r
+ break;\r
+\r
+ case 4:\r
+ this.txランク文字 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenResult rankC.png" ) );\r
+ break;\r
+\r
+ case 5:\r
+ this.txランク文字 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenResult rankD.png" ) );\r
+ break;\r
+\r
+ case 6:\r
+ case 99: // #23534 2010.10.28 yyagi: 演奏チップが0個のときは、rankEと見なす\r
+ this.txランク文字 = CDTXMania.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenResult rankE.png"));\r
+ break;\r
+\r
+ default:\r
+ this.txランク文字 = null;\r
+ break;\r
+ }\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.txランクパネル );\r
+ CDTXMania.tテクスチャの解放( ref this.tx白波 );\r
+ CDTXMania.tテクスチャの解放( ref this.txランク文字 );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( base.b活性化してない )\r
+ {\r
+ return 0;\r
+ }\r
+ if( base.b初めての進行描画 )\r
+ {\r
+ this.ct白波移動 = new CCounter( -132, 0x170, 10, CDTXMania.Timer );\r
+ this.ctランク表示 = new CCounter( 0, 0x514, 2, CDTXMania.Timer );\r
+ base.b初めての進行描画 = false;\r
+ }\r
+ this.ct白波移動.t進行Loop();\r
+ this.ctランク表示.t進行();\r
+ if( this.ctランク表示.n現在の値 >= 700 )\r
+ {\r
+ float y = ( this.ctランク表示.n現在の値 > 0x3e8 ) ? 1f : ( ( (float) ( this.ctランク表示.n現在の値 - 700 ) ) / 300f );\r
+ if( this.txランクパネル != null )\r
+ {\r
+ this.txランクパネル.n透明度 = (int) ( 255f * y );\r
+ this.txランクパネル.vc拡大縮小倍率 = new Vector3( 1f, y, 1f );\r
+ this.txランクパネル.t2D描画( CDTXMania.app.Device, this.n本体X, this.n本体Y + ( (int) ( ( 1f - y ) * 64f ) ) );\r
+ }\r
+ }\r
+ if( this.ctランク表示.n現在の値 >= 0x3e8 )\r
+ {\r
+ double num2 = ( (double) ( this.ctランク表示.n現在の値 - 0x3e8 ) ) / 300.0;\r
+ if( this.txランク文字 != null )\r
+ {\r
+ this.txランク文字.t2D描画( CDTXMania.app.Device, this.n本体X, this.n本体Y, new Rectangle( 0, 0, (int) ( 128.0 * num2 ), 0x80 ) );\r
+ }\r
+ }\r
+ this.t描画・白波();\r
+ if( !this.ctランク表示.b終了値に達した )\r
+ {\r
+ return 0;\r
+ }\r
+ return 1;\r
+ }\r
+ \r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private CCounter ctランク表示;\r
+ private CCounter ct白波移動;\r
+ private int n本体X;\r
+ private int n本体Y;\r
+ private CTexture txランクパネル;\r
+ private CTexture txランク文字;\r
+ private CTexture tx白波;\r
+ \r
+ private void t描画・白波()\r
+ {\r
+ if( !this.ctランク表示.b終了値に達してない )\r
+ {\r
+ int num = this.ct白波移動.n現在の値;\r
+ int num2 = this.n本体X;\r
+ int y = this.n本体Y + num;\r
+ if( ( y < ( this.n本体Y + 0x80 ) ) && ( ( y + 0x20 ) > this.n本体Y ) )\r
+ {\r
+ Rectangle rectangle = new Rectangle( 0, 0, 0x20, 0x20 );\r
+ if( y < this.n本体Y )\r
+ {\r
+ rectangle.Y += this.n本体Y - y;\r
+ rectangle.Height -= this.n本体Y - y;\r
+ y = this.n本体Y;\r
+ }\r
+ if( ( y + 0x20 ) > ( this.n本体Y + 0x80 ) )\r
+ {\r
+ rectangle.Height -= ( y + 0x20 ) - ( this.n本体Y + 0x80 );\r
+ }\r
+ if( rectangle.Bottom > rectangle.Top )\r
+ {\r
+ for( int i = 0; i < 4; i++ )\r
+ {\r
+ if( this.tx白波 != null )\r
+ {\r
+ this.tx白波.t2D描画( CDTXMania.app.Device, num2 + ( i * 0x20 ), y, rectangle );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Drawing;\r
+using System.Diagnostics;\r
+using SlimDX;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CActResultSongBar : CActivity\r
+ {\r
+ // コンストラクタ\r
+\r
+ public CActResultSongBar()\r
+ {\r
+ base.b活性化してない = true;\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ public void tアニメを完了させる()\r
+ {\r
+ this.ct登場用.n現在の値 = this.ct登場用.n終了値;\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ this.n本体X = 0;\r
+ this.n本体Y = 0x18b;\r
+ this.ft曲名用フォント = new Font( "MS PGothic", 44f, FontStyle.Bold, GraphicsUnit.Pixel );\r
+ base.On活性化();\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ if( this.ft曲名用フォント != null )\r
+ {\r
+ this.ft曲名用フォント.Dispose();\r
+ this.ft曲名用フォント = null;\r
+ }\r
+ if( this.ct登場用 != null )\r
+ {\r
+ this.ct登場用 = null;\r
+ }\r
+ base.On非活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.txバー = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenResult song bar.png" ) );\r
+ try\r
+ {\r
+ Bitmap image = new Bitmap( 0x3a8, 0x36 );\r
+ Graphics graphics = Graphics.FromImage( image );\r
+ graphics.DrawString( CDTXMania.DTX.TITLE, this.ft曲名用フォント, Brushes.White, (float) 8f, (float) 0f );\r
+ this.tx曲名 = new CTexture( CDTXMania.app.Device, image, CDTXMania.TextureFormat );\r
+ this.tx曲名.vc拡大縮小倍率 = new Vector3( 0.5f, 0.5f, 1f );\r
+ graphics.Dispose();\r
+ image.Dispose();\r
+ }\r
+ catch( CTextureCreateFailedException )\r
+ {\r
+ Trace.TraceError( "曲名テクスチャの生成に失敗しました。" );\r
+ this.tx曲名 = null;\r
+ }\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.txバー );\r
+ CDTXMania.tテクスチャの解放( ref this.tx曲名 );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( base.b活性化してない )\r
+ {\r
+ return 0;\r
+ }\r
+ if( base.b初めての進行描画 )\r
+ {\r
+ this.ct登場用 = new CCounter( 0, 270, 4, CDTXMania.Timer );\r
+ base.b初めての進行描画 = false;\r
+ }\r
+ this.ct登場用.t進行();\r
+ int num = 0x1d4;\r
+ int num2 = num - 0x40;\r
+ if( this.ct登場用.b進行中 )\r
+ {\r
+ if( this.ct登場用.n現在の値 <= 100 )\r
+ {\r
+ double num3 = 1.0 - ( ( (double) this.ct登場用.n現在の値 ) / 100.0 );\r
+ this.n本体X = -( (int) ( num * Math.Sin( 1.5707963267948966 * num3 ) ) );\r
+ this.n本体Y = 0x18b;\r
+ }\r
+ else if( this.ct登場用.n現在の値 <= 200 )\r
+ {\r
+ double num4 = ( (double) ( this.ct登場用.n現在の値 - 100 ) ) / 100.0;\r
+ this.n本体X = -( (int) ( ( ( (double) num ) / 6.0 ) * Math.Sin( 3.1415926535897931 * num4 ) ) );\r
+ this.n本体Y = 0x18b;\r
+ }\r
+ else if( this.ct登場用.n現在の値 <= 270 )\r
+ {\r
+ double num5 = ( (double) ( this.ct登場用.n現在の値 - 200 ) ) / 70.0;\r
+ this.n本体X = -( (int) ( ( ( (double) num ) / 18.0 ) * Math.Sin( 3.1415926535897931 * num5 ) ) );\r
+ this.n本体Y = 0x18b;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ this.n本体X = 0;\r
+ this.n本体Y = 0x18b;\r
+ }\r
+ int num6 = this.n本体X;\r
+ int y = this.n本体Y;\r
+ int num8 = 0;\r
+ while( num8 < num2 )\r
+ {\r
+ Rectangle rectangle = new Rectangle( 0, 0, 0x40, 0x40 );\r
+ if( ( num8 + rectangle.Width ) >= num2 )\r
+ {\r
+ rectangle.Width -= ( num8 + rectangle.Width ) - num2;\r
+ }\r
+ if( this.txバー != null )\r
+ {\r
+ this.txバー.t2D描画( CDTXMania.app.Device, num6 + num8, y, rectangle );\r
+ }\r
+ num8 += rectangle.Width;\r
+ }\r
+ if( this.txバー != null )\r
+ {\r
+ this.txバー.t2D描画( CDTXMania.app.Device, num6 + num8, y, new Rectangle( 0x40, 0, 0x40, 0x40 ) );\r
+ }\r
+ if( this.tx曲名 != null )\r
+ {\r
+ this.tx曲名.t2D描画( CDTXMania.app.Device, this.n本体X, this.n本体Y + 20 );\r
+ }\r
+ if( !this.ct登場用.b終了値に達した )\r
+ {\r
+ return 0;\r
+ }\r
+ return 1;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private CCounter ct登場用;\r
+ private Font ft曲名用フォント;\r
+ private int n本体X;\r
+ private int n本体Y;\r
+ private CTexture txバー;\r
+ private CTexture tx曲名;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Diagnostics;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CStage結果 : CStage\r
+ {\r
+ // プロパティ\r
+\r
+ public STDGBVALUE<bool> b新記録スキル;\r
+ public STDGBVALUE<bool> b新記録スコア;\r
+ public STDGBVALUE<bool> b新記録ランク;\r
+ public STDGBVALUE<float> fPerfect率;\r
+ public STDGBVALUE<float> fGreat率;\r
+ public STDGBVALUE<float> fGood率;\r
+ public STDGBVALUE<float> fPoor率;\r
+ public STDGBVALUE<float> fMiss率;\r
+ public STDGBVALUE<int> nランク値;\r
+ public STDGBVALUE<int> n演奏回数;\r
+ public int n総合ランク値;\r
+ public CDTX.CChip[] r空うちドラムチップ;\r
+ public STDGBVALUE<CScoreIni.C演奏記録> st演奏記録;\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public CStage結果()\r
+ {\r
+ STDGBVALUE<CScoreIni.C演奏記録> stdgbvalue = new STDGBVALUE<CScoreIni.C演奏記録>();\r
+ stdgbvalue.Drums = new CScoreIni.C演奏記録();\r
+ stdgbvalue.Guitar = new CScoreIni.C演奏記録();\r
+ stdgbvalue.Bass = new CScoreIni.C演奏記録();\r
+ this.st演奏記録 = stdgbvalue;\r
+ this.r空うちドラムチップ = new CDTX.CChip[ 10 ];\r
+ this.n総合ランク値 = -1;\r
+ this.nチャンネル0Atoレーン07 = new int[] { 1, 2, 3, 4, 5, 7, 6, 1, 7, 0 };\r
+ base.eステージID = CStage.Eステージ.結果;\r
+ base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
+ base.b活性化してない = true;\r
+ base.list子Activities.Add( this.actResultImage = new CActResultImage() );\r
+ base.list子Activities.Add( this.actParameterPanel = new CActResultParameterPanel() );\r
+ base.list子Activities.Add( this.actRank = new CActResultRank() );\r
+ base.list子Activities.Add( this.actSongBar = new CActResultSongBar() );\r
+ base.list子Activities.Add( this.actOption = new CActオプションパネル() );\r
+ base.list子Activities.Add( this.actFI = new CActFIFOWhite() );\r
+ base.list子Activities.Add( this.actFO = new CActFIFOBlack() );\r
+ }\r
+\r
+ \r
+ // CStage 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ Trace.TraceInformation( "結果ステージを活性化します。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ #region [ 初期化 ]\r
+ //---------------------\r
+ this.eフェードアウト完了時の戻り値 = E戻り値.継続;\r
+ this.bアニメが完了 = false;\r
+ this.n最後に再生したHHのWAV番号 = -1;\r
+ this.n最後に再生したHHのチャンネル番号 = 0;\r
+ for( int i = 0; i < 3; i++ )\r
+ {\r
+ this.b新記録スキル[ i ] = false;\r
+ this.b新記録スコア[ i ] = false;\r
+ this.b新記録ランク[ i ] = false;\r
+ }\r
+ //---------------------\r
+ #endregion\r
+\r
+ #region [ 結果の計算 ]\r
+ //---------------------\r
+ for( int j = 0; j < 3; j++ )\r
+ {\r
+ this.nランク値[ j ] = -1;\r
+ if( ( ( ( j != 0 ) || ( CDTXMania.DTX.bチップがある.Drums && !CDTXMania.ConfigIni.bギタレボモード ) ) && ( ( j != 1 ) || CDTXMania.DTX.bチップがある.Guitar ) ) && ( ( j != 2 ) || CDTXMania.DTX.bチップがある.Bass ) )\r
+ {\r
+ CScoreIni.C演奏記録 part = this.st演奏記録[ j ];\r
+ bool guitar = true;\r
+ switch( j )\r
+ {\r
+ case 0:\r
+ guitar = CDTXMania.ConfigIni.bドラムが全部オートプレイである;\r
+ break;\r
+\r
+ case 1:\r
+ guitar = CDTXMania.ConfigIni.bAutoPlay.Guitar;\r
+ break;\r
+\r
+ case 2:\r
+ guitar = CDTXMania.ConfigIni.bAutoPlay.Bass;\r
+ break;\r
+ }\r
+ this.fPerfect率[ j ] = guitar ? 0f : ( ( 100f * part.nPerfect数 ) / ( (float) part.n全チップ数 ) );\r
+ this.fGreat率[ j ] = guitar ? 0f : ( ( 100f * part.nGreat数 ) / ( (float) part.n全チップ数 ) );\r
+ this.fGood率[ j ] = guitar ? 0f : ( ( 100f * part.nGood数 ) / ( (float) part.n全チップ数 ) );\r
+ this.fPoor率[ j ] = guitar ? 0f : ( ( 100f * part.nPoor数 ) / ( (float) part.n全チップ数 ) );\r
+ this.fMiss率[ j ] = guitar ? 0f : ( ( 100f * part.nMiss数 ) / ( (float) part.n全チップ数 ) );\r
+ this.nランク値[ j ] = CScoreIni.tランク値を計算して返す( part );\r
+ }\r
+ }\r
+ this.n総合ランク値 = CScoreIni.t総合ランク値を計算して返す( this.st演奏記録.Drums, this.st演奏記録.Guitar, this.st演奏記録.Bass );\r
+ //---------------------\r
+ #endregion\r
+\r
+ #region [ .score.ini の作成と出力 ]\r
+ //---------------------\r
+ string str = CDTXMania.DTX.strファイル名の絶対パス + ".score.ini";\r
+ CScoreIni ini = new CScoreIni( str );\r
+\r
+ bool[] b今までにフルコンボしたことがある = new bool[] { false, false, false };\r
+\r
+ for( int k = 0; k < 3; k++ )\r
+ {\r
+ // フルコンボチェックならびに新記録ランクチェックは、ini.Record[] が、スコアチェックや演奏型スキルチェックの IF 内で書き直されてしまうよりも前に行う。(2010.9.10)\r
+ \r
+ b今までにフルコンボしたことがある[ k ] = ini.stセクション[ k * 2 ].bフルコンボである | ini.stセクション[ k * 2 + 1 ].bフルコンボである;\r
+\r
+ if( this.nランク値[ k ] <= CScoreIni.tランク値を計算して返す( ini.stセクション[ ( k * 2 ) + 1 ] ) )\r
+ {\r
+ this.b新記録ランク[ k ] = true;\r
+ }\r
+\r
+ // 新記録スコアチェック\r
+ if( this.st演奏記録[ k ].nスコア > ini.stセクション[ k * 2 ].nスコア )\r
+ {\r
+ this.b新記録スコア[ k ] = true;\r
+ ini.stセクション[ k * 2 ] = this.st演奏記録[ k ];\r
+ }\r
+\r
+ // 新記録スキルチェック\r
+ if( this.st演奏記録[ k ].db演奏型スキル値 > ini.stセクション[ ( k * 2 ) + 1 ].db演奏型スキル値 )\r
+ {\r
+ this.b新記録スキル[ k ] = true;\r
+ ini.stセクション[ ( k * 2 ) + 1 ] = this.st演奏記録[ k ];\r
+ }\r
+ }\r
+ ini.t書き出し( str );\r
+ //---------------------\r
+ #endregion\r
+\r
+ #region [ 選曲画面の譜面情報の更新 ]\r
+ //---------------------\r
+ if( !CDTXMania.bコンパクトモード )\r
+ {\r
+ Cスコア cスコア = CDTXMania.stage選曲.r確定されたスコア;\r
+ bool[] flagArray = new bool[ 3 ];\r
+ CScoreIni.t更新条件を取得する( out flagArray[ 0 ], out flagArray[ 1 ], out flagArray[ 2 ] );\r
+ for( int m = 0; m < 3; m++ )\r
+ {\r
+ if( flagArray[ m ] )\r
+ {\r
+ // FullCombo した記録を FullCombo なしで超えた場合、FullCombo マークが消えてしまう。\r
+ // → FullCombo は、最新記録と関係なく、一度達成したらずっとつくようにする。(2010.9.11)\r
+ cスコア.譜面情報.フルコンボ[ m ] = this.st演奏記録[ m ].bフルコンボである | b今までにフルコンボしたことがある[ m ];\r
+\r
+ if( this.b新記録スキル[ m ] )\r
+ {\r
+ cスコア.譜面情報.最大スキル[ m ] = this.st演奏記録[ m ].db演奏型スキル値;\r
+ }\r
+\r
+ if( this.b新記録ランク[ m ] )\r
+ {\r
+ cスコア.譜面情報.最大ランク[ m ] = this.nランク値[ m ];\r
+ }\r
+ }\r
+ }\r
+ }\r
+ //---------------------\r
+ #endregion\r
+\r
+ #region [ #RESULTSOUND_xx の再生(あれば)]\r
+ //---------------------\r
+ int rank = CScoreIni.t総合ランク値を計算して返す( this.st演奏記録.Drums, this.st演奏記録.Guitar, this.st演奏記録.Bass );\r
+\r
+ if (rank == 99) // #23534 2010.10.28 yyagi: 演奏チップが0個のときは、rankEと見なす\r
+ {\r
+ rank = 6;\r
+ }\r
+ \r
+ if( string.IsNullOrEmpty( CDTXMania.DTX.RESULTSOUND[ rank ] ) )\r
+ {\r
+ CDTXMania.Skin.soundステージクリア音.t再生する();\r
+ this.rResultSound = null;\r
+ }\r
+ else\r
+ {\r
+ string str2 = CDTXMania.DTX.strフォルダ名 + CDTXMania.DTX.RESULTSOUND[ rank ];\r
+ try\r
+ {\r
+ this.rResultSound = CDTXMania.Sound管理.tサウンドを生成する( str2 );\r
+ }\r
+ catch\r
+ {\r
+ Trace.TraceError( "サウンドの生成に失敗しました。({0})", new object[] { str2 } );\r
+ this.rResultSound = null;\r
+ }\r
+ }\r
+ //---------------------\r
+ #endregion\r
+\r
+ base.On活性化();\r
+ }\r
+ finally\r
+ {\r
+ Trace.TraceInformation( "結果ステージの活性化を完了しました。" );\r
+ Trace.Unindent();\r
+ }\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ if( this.rResultSound != null )\r
+ {\r
+ CDTXMania.Sound管理.tサウンドを破棄する( this.rResultSound );\r
+ this.rResultSound = null;\r
+ }\r
+ base.On非活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.tx背景 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenResult background.jpg" ) );\r
+ this.tx上部パネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenResult header panel.png" ), true );\r
+ this.tx下部パネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenResult footer panel.png" ), true );\r
+ this.txオプションパネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\Screen option panels.png" ) );\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ if( this.ct登場用 != null )\r
+ {\r
+ this.ct登場用 = null;\r
+ }\r
+ CDTXMania.tテクスチャの解放( ref this.tx背景 );\r
+ CDTXMania.tテクスチャの解放( ref this.tx上部パネル );\r
+ CDTXMania.tテクスチャの解放( ref this.tx下部パネル );\r
+ CDTXMania.tテクスチャの解放( ref this.txオプションパネル );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ int num;\r
+ if( base.b初めての進行描画 )\r
+ {\r
+ this.ct登場用 = new CCounter( 0, 100, 5, CDTXMania.Timer );\r
+ this.actFI.tフェードイン開始();\r
+ base.eフェーズID = CStage.Eフェーズ.共通_フェードイン;\r
+ if( this.rResultSound != null )\r
+ {\r
+ this.rResultSound.t再生を開始する();\r
+ }\r
+ base.b初めての進行描画 = false;\r
+ }\r
+ this.bアニメが完了 = true;\r
+ if( this.ct登場用.b進行中 )\r
+ {\r
+ this.ct登場用.t進行();\r
+ if( this.ct登場用.b終了値に達した )\r
+ {\r
+ this.ct登場用.t停止();\r
+ }\r
+ else\r
+ {\r
+ this.bアニメが完了 = false;\r
+ }\r
+ }\r
+\r
+ // 描画\r
+\r
+ if( this.tx背景 != null )\r
+ {\r
+ this.tx背景.t2D描画( CDTXMania.app.Device, 0, 0 );\r
+ }\r
+ if( this.ct登場用.b進行中 && ( this.tx上部パネル != null ) )\r
+ {\r
+ double num2 = ( (double) this.ct登場用.n現在の値 ) / 100.0;\r
+ double num3 = Math.Sin( 1.5707963267948966 * num2 );\r
+ num = ( (int) ( this.tx上部パネル.sz画像サイズ.Height * num3 ) ) - this.tx上部パネル.sz画像サイズ.Height;\r
+ }\r
+ else\r
+ {\r
+ num = 0;\r
+ }\r
+ if( this.tx上部パネル != null )\r
+ {\r
+ this.tx上部パネル.t2D描画( CDTXMania.app.Device, 0, num );\r
+ }\r
+ if( this.tx下部パネル != null )\r
+ {\r
+ this.tx下部パネル.t2D描画( CDTXMania.app.Device, 0, 480 - this.tx下部パネル.sz画像サイズ.Height );\r
+ }\r
+ this.actOption.On進行描画();\r
+ if( this.actResultImage.On進行描画() == 0 )\r
+ {\r
+ this.bアニメが完了 = false;\r
+ }\r
+ if( this.actParameterPanel.On進行描画() == 0 )\r
+ {\r
+ this.bアニメが完了 = false;\r
+ }\r
+ if( this.actRank.On進行描画() == 0 )\r
+ {\r
+ this.bアニメが完了 = false;\r
+ }\r
+ if( this.actSongBar.On進行描画() == 0 )\r
+ {\r
+ this.bアニメが完了 = false;\r
+ }\r
+ if( base.eフェーズID == CStage.Eフェーズ.共通_フェードイン )\r
+ {\r
+ if( this.actFI.On進行描画() != 0 )\r
+ {\r
+ base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
+ }\r
+ }\r
+ else if( ( base.eフェーズID == CStage.Eフェーズ.共通_フェードアウト ) && ( this.actFO.On進行描画() != 0 ) )\r
+ {\r
+ return (int) this.eフェードアウト完了時の戻り値;\r
+ }\r
+\r
+ // キー入力\r
+\r
+ if( CDTXMania.act現在入力を占有中のプラグイン == null )\r
+ {\r
+ if( CDTXMania.ConfigIni.bドラム打音を発声する && CDTXMania.ConfigIni.bDrums有効 )\r
+ {\r
+ for( int i = 0; i < 10; i++ )\r
+ {\r
+ List<STInputEvent> events = CDTXMania.Pad.GetEvents( E楽器パート.DRUMS, (Eパッド) i );\r
+ if( ( events != null ) && ( events.Count > 0 ) )\r
+ {\r
+ foreach( STInputEvent event2 in events )\r
+ {\r
+ if( !event2.b押された )\r
+ {\r
+ continue;\r
+ }\r
+ CDTX.CChip rChip = this.r空うちドラムチップ[ i ];\r
+ if( rChip == null )\r
+ {\r
+ switch( ( (Eパッド) i ) )\r
+ {\r
+ case Eパッド.HH:\r
+ rChip = this.r空うちドラムチップ[ 7 ];\r
+ if( rChip == null )\r
+ {\r
+ rChip = this.r空うちドラムチップ[ 9 ];\r
+ }\r
+ break;\r
+\r
+ case Eパッド.FT:\r
+ rChip = this.r空うちドラムチップ[ 4 ];\r
+ break;\r
+\r
+ case Eパッド.CY:\r
+ rChip = this.r空うちドラムチップ[ 8 ];\r
+ break;\r
+\r
+ case Eパッド.HHO:\r
+ rChip = this.r空うちドラムチップ[ 0 ];\r
+ if( rChip == null )\r
+ {\r
+ rChip = this.r空うちドラムチップ[ 9 ];\r
+ }\r
+ break;\r
+\r
+ case Eパッド.RD:\r
+ rChip = this.r空うちドラムチップ[ 6 ];\r
+ break;\r
+\r
+ case Eパッド.LC:\r
+ rChip = this.r空うちドラムチップ[ 0 ];\r
+ if( rChip == null )\r
+ {\r
+ rChip = this.r空うちドラムチップ[ 7 ];\r
+ }\r
+ break;\r
+ }\r
+ }\r
+ if( ( ( rChip != null ) && ( rChip.nチャンネル番号 >= 0x11 ) ) && ( rChip.nチャンネル番号 <= 0x1a ) )\r
+ {\r
+ int nLane = this.nチャンネル0Atoレーン07[ rChip.nチャンネル番号 - 0x11 ];\r
+ if( ( nLane == 1 ) && ( ( rChip.nチャンネル番号 == 0x11 ) || ( ( rChip.nチャンネル番号 == 0x18 ) && ( this.n最後に再生したHHのチャンネル番号 != 0x18 ) ) ) )\r
+ {\r
+ CDTXMania.DTX.tWavの再生停止( this.n最後に再生したHHのWAV番号 );\r
+ this.n最後に再生したHHのWAV番号 = rChip.n整数値・内部番号;\r
+ this.n最後に再生したHHのチャンネル番号 = rChip.nチャンネル番号;\r
+ }\r
+ CDTXMania.DTX.tチップの再生( rChip, CDTXMania.Timer.nシステム時刻, nLane, CDTXMania.ConfigIni.n手動再生音量, CDTXMania.ConfigIni.b演奏音を強調する.Drums );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ if( ( ( CDTXMania.Pad.b押されたDGB( Eパッド.CY ) || CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.RD ) ) || ( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.LC ) || CDTXMania.Input管理.Keyboard.bキーが押された( 0x75 ) ) ) && !this.bアニメが完了 )\r
+ {\r
+ this.actResultImage.tアニメを完了させる();\r
+ this.actParameterPanel.tアニメを完了させる();\r
+ this.actRank.tアニメを完了させる();\r
+ this.actSongBar.tアニメを完了させる();\r
+ this.ct登場用.t停止();\r
+ }\r
+ if( base.eフェーズID == CStage.Eフェーズ.共通_通常状態 )\r
+ {\r
+ if( CDTXMania.Input管理.Keyboard.bキーが押された( 0x35 ) )\r
+ {\r
+ CDTXMania.Skin.sound取消音.t再生する();\r
+ this.actFO.tフェードアウト開始();\r
+ base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
+ this.eフェードアウト完了時の戻り値 = E戻り値.完了;\r
+ }\r
+ if( ( ( CDTXMania.Pad.b押されたDGB( Eパッド.CY ) || CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.RD ) ) || ( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.LC ) || CDTXMania.Input管理.Keyboard.bキーが押された( 0x75 ) ) ) && this.bアニメが完了 )\r
+ {\r
+ CDTXMania.Skin.sound取消音.t再生する();\r
+ this.actFO.tフェードアウト開始();\r
+ base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
+ this.eフェードアウト完了時の戻り値 = E戻り値.完了;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+ public enum E戻り値 : int\r
+ {\r
+ 継続,\r
+ 完了\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private CCounter ct登場用;\r
+ private E戻り値 eフェードアウト完了時の戻り値;\r
+ private CActFIFOWhite actFI;\r
+ private CActFIFOBlack actFO;\r
+ private CActオプションパネル actOption;\r
+ private CActResultParameterPanel actParameterPanel;\r
+ private CActResultRank actRank;\r
+ private CActResultImage actResultImage;\r
+ private CActResultSongBar actSongBar;\r
+ private bool bアニメが完了;\r
+ private readonly int[] nチャンネル0Atoレーン07;\r
+ private int n最後に再生したHHのWAV番号;\r
+ private int n最後に再生したHHのチャンネル番号;\r
+ private CSound rResultSound;\r
+ private CTexture txオプションパネル;\r
+ private CTexture tx下部パネル;\r
+ private CTexture tx上部パネル;\r
+ private CTexture tx背景;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Diagnostics;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CStage終了 : CStage\r
+ {\r
+ // コンストラクタ\r
+\r
+ public CStage終了()\r
+ {\r
+ base.eステージID = CStage.Eステージ.終了;\r
+ base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
+ base.b活性化してない = true;\r
+ }\r
+\r
+\r
+ // CStage 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ Trace.TraceInformation( "終了ステージを活性化します。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ this.ct時間稼ぎ = new CCounter();\r
+ base.On活性化();\r
+ }\r
+ finally\r
+ {\r
+ Trace.TraceInformation( "終了ステージの活性化を完了しました。" );\r
+ Trace.Unindent();\r
+ }\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ Trace.TraceInformation( "終了ステージを非活性化します。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ base.On非活性化();\r
+ }\r
+ finally\r
+ {\r
+ Trace.TraceInformation( "終了ステージの非活性化を完了しました。" );\r
+ Trace.Unindent();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.tx背景 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenExit background.jpg" ), false );\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.tx背景 );\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ if( base.b初めての進行描画 )\r
+ {\r
+ CDTXMania.Skin.soundゲーム終了音.t再生する();\r
+ this.ct時間稼ぎ.t開始( 0, 1, 0x3e8, CDTXMania.Timer );\r
+ base.b初めての進行描画 = false;\r
+ }\r
+ this.ct時間稼ぎ.t進行();\r
+ if( this.ct時間稼ぎ.b終了値に達した && !CDTXMania.Skin.soundゲーム終了音.b再生中 )\r
+ {\r
+ return 1;\r
+ }\r
+ if( this.tx背景 != null )\r
+ {\r
+ this.tx背景.t2D描画( CDTXMania.app.Device, 0, 0 );\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private CCounter ct時間稼ぎ;\r
+ private CTexture tx背景;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using System.Drawing;\r
+using SlimDX;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CActDFPFont : CActivity\r
+ {\r
+ // コンストラクタ\r
+\r
+ public CActDFPFont()\r
+ {\r
+ ST文字領域[] st文字領域Array = new ST文字領域[ 0x5d ];\r
+ ST文字領域 st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域 = st文字領域94;\r
+ st文字領域.ch = ' ';\r
+ st文字領域.rc = new Rectangle( 10, 3, 13, 0x1b );\r
+ st文字領域Array[ 0 ] = st文字領域;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域2 = st文字領域94;\r
+ st文字領域2.ch = '!';\r
+ st文字領域2.rc = new Rectangle( 0x19, 3, 14, 0x1b );\r
+ st文字領域Array[ 1 ] = st文字領域2;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域3 = st文字領域94;\r
+ st文字領域3.ch = '"';\r
+ st文字領域3.rc = new Rectangle( 0x2c, 3, 0x11, 0x1b );\r
+ st文字領域Array[ 2 ] = st文字領域3;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域4 = st文字領域94;\r
+ st文字領域4.ch = '#';\r
+ st文字領域4.rc = new Rectangle( 0x40, 3, 0x18, 0x1b );\r
+ st文字領域Array[ 3 ] = st文字領域4;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域5 = st文字領域94;\r
+ st文字領域5.ch = '$';\r
+ st文字領域5.rc = new Rectangle( 90, 3, 0x15, 0x1b );\r
+ st文字領域Array[ 4 ] = st文字領域5;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域6 = st文字領域94;\r
+ st文字領域6.ch = '%';\r
+ st文字領域6.rc = new Rectangle( 0x71, 3, 0x1b, 0x1b );\r
+ st文字領域Array[ 5 ] = st文字領域6;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域7 = st文字領域94;\r
+ st文字領域7.ch = '&';\r
+ st文字領域7.rc = new Rectangle( 0x8e, 3, 0x18, 0x1b );\r
+ st文字領域Array[ 6 ] = st文字領域7;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域8 = st文字領域94;\r
+ st文字領域8.ch = '\'';\r
+ st文字領域8.rc = new Rectangle( 0xab, 3, 11, 0x1b );\r
+ st文字領域Array[ 7 ] = st文字領域8;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域9 = st文字領域94;\r
+ st文字領域9.ch = '(';\r
+ st文字領域9.rc = new Rectangle( 0xc0, 3, 0x10, 0x1b );\r
+ st文字領域Array[ 8 ] = st文字領域9;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域10 = st文字領域94;\r
+ st文字領域10.ch = ')';\r
+ st文字領域10.rc = new Rectangle( 0xd0, 3, 0x10, 0x1b );\r
+ st文字領域Array[ 9 ] = st文字領域10;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域11 = st文字領域94;\r
+ st文字領域11.ch = '*';\r
+ st文字領域11.rc = new Rectangle( 0xe2, 3, 0x15, 0x1b );\r
+ st文字領域Array[ 10 ] = st文字領域11;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域12 = st文字領域94;\r
+ st文字領域12.ch = '+';\r
+ st文字領域12.rc = new Rectangle( 2, 0x1f, 0x18, 0x1b );\r
+ st文字領域Array[ 11 ] = st文字領域12;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域13 = st文字領域94;\r
+ st文字領域13.ch = ',';\r
+ st文字領域13.rc = new Rectangle( 0x1b, 0x1f, 11, 0x1b );\r
+ st文字領域Array[ 12 ] = st文字領域13;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域14 = st文字領域94;\r
+ st文字領域14.ch = '-';\r
+ st文字領域14.rc = new Rectangle( 0x29, 0x1f, 13, 0x1b );\r
+ st文字領域Array[ 13 ] = st文字領域14;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域15 = st文字領域94;\r
+ st文字領域15.ch = '.';\r
+ st文字領域15.rc = new Rectangle( 0x37, 0x1f, 11, 0x1b );\r
+ st文字領域Array[ 14 ] = st文字領域15;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域16 = st文字領域94;\r
+ st文字領域16.ch = '/';\r
+ st文字領域16.rc = new Rectangle( 0x44, 0x1f, 0x15, 0x1b );\r
+ st文字領域Array[ 15 ] = st文字領域16;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域17 = st文字領域94;\r
+ st文字領域17.ch = '0';\r
+ st文字領域17.rc = new Rectangle( 0x5b, 0x1f, 20, 0x1b );\r
+ st文字領域Array[ 0x10 ] = st文字領域17;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域18 = st文字領域94;\r
+ st文字領域18.ch = '1';\r
+ st文字領域18.rc = new Rectangle( 0x75, 0x1f, 14, 0x1b );\r
+ st文字領域Array[ 0x11 ] = st文字領域18;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域19 = st文字領域94;\r
+ st文字領域19.ch = '2';\r
+ st文字領域19.rc = new Rectangle( 0x86, 0x1f, 0x15, 0x1b );\r
+ st文字領域Array[ 0x12 ] = st文字領域19;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域20 = st文字領域94;\r
+ st文字領域20.ch = '3';\r
+ st文字領域20.rc = new Rectangle( 0x9d, 0x1f, 20, 0x1b );\r
+ st文字領域Array[ 0x13 ] = st文字領域20;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域21 = st文字領域94;\r
+ st文字領域21.ch = '4';\r
+ st文字領域21.rc = new Rectangle( 0xb3, 0x1f, 20, 0x1b );\r
+ st文字領域Array[ 20 ] = st文字領域21;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域22 = st文字領域94;\r
+ st文字領域22.ch = '5';\r
+ st文字領域22.rc = new Rectangle( 0xca, 0x1f, 0x13, 0x1b );\r
+ st文字領域Array[ 0x15 ] = st文字領域22;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域23 = st文字領域94;\r
+ st文字領域23.ch = '6';\r
+ st文字領域23.rc = new Rectangle( 0xe0, 0x1f, 20, 0x1b );\r
+ st文字領域Array[ 0x16 ] = st文字領域23;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域24 = st文字領域94;\r
+ st文字領域24.ch = '7';\r
+ st文字領域24.rc = new Rectangle( 4, 0x3b, 0x13, 0x1b );\r
+ st文字領域Array[ 0x17 ] = st文字領域24;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域25 = st文字領域94;\r
+ st文字領域25.ch = '8';\r
+ st文字領域25.rc = new Rectangle( 0x18, 0x3b, 20, 0x1b );\r
+ st文字領域Array[ 0x18 ] = st文字領域25;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域26 = st文字領域94;\r
+ st文字領域26.ch = '9';\r
+ st文字領域26.rc = new Rectangle( 0x2f, 0x3b, 0x13, 0x1b );\r
+ st文字領域Array[ 0x19 ] = st文字領域26;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域27 = st文字領域94;\r
+ st文字領域27.ch = ':';\r
+ st文字領域27.rc = new Rectangle( 0x44, 0x3b, 12, 0x1b );\r
+ st文字領域Array[ 0x1a ] = st文字領域27;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域28 = st文字領域94;\r
+ st文字領域28.ch = ';';\r
+ st文字領域28.rc = new Rectangle( 0x51, 0x3b, 13, 0x1b );\r
+ st文字領域Array[ 0x1b ] = st文字領域28;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域29 = st文字領域94;\r
+ st文字領域29.ch = '<';\r
+ st文字領域29.rc = new Rectangle( 0x60, 0x3b, 20, 0x1b );\r
+ st文字領域Array[ 0x1c ] = st文字領域29;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域30 = st文字領域94;\r
+ st文字領域30.ch = '=';\r
+ st文字領域30.rc = new Rectangle( 0x74, 0x3b, 0x11, 0x1b );\r
+ st文字領域Array[ 0x1d ] = st文字領域30;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域31 = st文字領域94;\r
+ st文字領域31.ch = '>';\r
+ st文字領域31.rc = new Rectangle( 0x85, 0x3b, 20, 0x1b );\r
+ st文字領域Array[ 30 ] = st文字領域31;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域32 = st文字領域94;\r
+ st文字領域32.ch = '?';\r
+ st文字領域32.rc = new Rectangle( 0x9c, 0x3b, 20, 0x1b );\r
+ st文字領域Array[ 0x1f ] = st文字領域32;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域33 = st文字領域94;\r
+ st文字領域33.ch = 'A';\r
+ st文字領域33.rc = new Rectangle( 0xb1, 0x3b, 0x17, 0x1b );\r
+ st文字領域Array[ 0x20 ] = st文字領域33;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域34 = st文字領域94;\r
+ st文字領域34.ch = 'B';\r
+ st文字領域34.rc = new Rectangle( 0xcb, 0x3b, 0x15, 0x1b );\r
+ st文字領域Array[ 0x21 ] = st文字領域34;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域35 = st文字領域94;\r
+ st文字領域35.ch = 'C';\r
+ st文字領域35.rc = new Rectangle( 0xe3, 0x3b, 0x16, 0x1b );\r
+ st文字領域Array[ 0x22 ] = st文字領域35;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域36 = st文字領域94;\r
+ st文字領域36.ch = 'D';\r
+ st文字領域36.rc = new Rectangle( 2, 0x57, 0x16, 0x1b );\r
+ st文字領域Array[ 0x23 ] = st文字領域36;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域37 = st文字領域94;\r
+ st文字領域37.ch = 'E';\r
+ st文字領域37.rc = new Rectangle( 0x1a, 0x57, 0x16, 0x1b );\r
+ st文字領域Array[ 0x24 ] = st文字領域37;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域38 = st文字領域94;\r
+ st文字領域38.ch = 'F';\r
+ st文字領域38.rc = new Rectangle( 0x30, 0x57, 0x16, 0x1b );\r
+ st文字領域Array[ 0x25 ] = st文字領域38;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域39 = st文字領域94;\r
+ st文字領域39.ch = 'G';\r
+ st文字領域39.rc = new Rectangle( 0x48, 0x57, 0x16, 0x1b );\r
+ st文字領域Array[ 0x26 ] = st文字領域39;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域40 = st文字領域94;\r
+ st文字領域40.ch = 'H';\r
+ st文字領域40.rc = new Rectangle( 0x61, 0x57, 0x18, 0x1b );\r
+ st文字領域Array[ 0x27 ] = st文字領域40;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域41 = st文字領域94;\r
+ st文字領域41.ch = 'I';\r
+ st文字領域41.rc = new Rectangle( 0x7a, 0x57, 13, 0x1b );\r
+ st文字領域Array[ 40 ] = st文字領域41;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域42 = st文字領域94;\r
+ st文字領域42.ch = 'J';\r
+ st文字領域42.rc = new Rectangle( 0x88, 0x57, 20, 0x1b );\r
+ st文字領域Array[ 0x29 ] = st文字領域42;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域43 = st文字領域94;\r
+ st文字領域43.ch = 'K';\r
+ st文字領域43.rc = new Rectangle( 0x9d, 0x57, 0x18, 0x1b );\r
+ st文字領域Array[ 0x2a ] = st文字領域43;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域44 = st文字領域94;\r
+ st文字領域44.ch = 'L';\r
+ st文字領域44.rc = new Rectangle( 0xb7, 0x57, 20, 0x1b );\r
+ st文字領域Array[ 0x2b ] = st文字領域44;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域45 = st文字領域94;\r
+ st文字領域45.ch = 'M';\r
+ st文字領域45.rc = new Rectangle( 0xce, 0x57, 0x1a, 0x1b );\r
+ st文字領域Array[ 0x2c ] = st文字領域45;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域46 = st文字領域94;\r
+ st文字領域46.ch = 'N';\r
+ st文字領域46.rc = new Rectangle( 0xe9, 0x57, 0x17, 0x1b );\r
+ st文字領域Array[ 0x2d ] = st文字領域46;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域47 = st文字領域94;\r
+ st文字領域47.ch = 'O';\r
+ st文字領域47.rc = new Rectangle( 2, 0x73, 0x18, 0x1b );\r
+ st文字領域Array[ 0x2e ] = st文字領域47;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域48 = st文字領域94;\r
+ st文字領域48.ch = 'P';\r
+ st文字領域48.rc = new Rectangle( 0x1c, 0x73, 0x15, 0x1b );\r
+ st文字領域Array[ 0x2f ] = st文字領域48;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域49 = st文字領域94;\r
+ st文字領域49.ch = 'Q';\r
+ st文字領域49.rc = new Rectangle( 0x33, 0x73, 0x17, 0x1b );\r
+ st文字領域Array[ 0x30 ] = st文字領域49;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域50 = st文字領域94;\r
+ st文字領域50.ch = 'R';\r
+ st文字領域50.rc = new Rectangle( 0x4c, 0x73, 0x16, 0x1b );\r
+ st文字領域Array[ 0x31 ] = st文字領域50;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域51 = st文字領域94;\r
+ st文字領域51.ch = 'S';\r
+ st文字領域51.rc = new Rectangle( 100, 0x73, 0x15, 0x1b );\r
+ st文字領域Array[ 50 ] = st文字領域51;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域52 = st文字領域94;\r
+ st文字領域52.ch = 'T';\r
+ st文字領域52.rc = new Rectangle( 0x7c, 0x73, 0x16, 0x1b );\r
+ st文字領域Array[ 0x33 ] = st文字領域52;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域53 = st文字領域94;\r
+ st文字領域53.ch = 'U';\r
+ st文字領域53.rc = new Rectangle( 0x93, 0x73, 0x16, 0x1b );\r
+ st文字領域Array[ 0x34 ] = st文字領域53;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域54 = st文字領域94;\r
+ st文字領域54.ch = 'V';\r
+ st文字領域54.rc = new Rectangle( 0xad, 0x73, 0x16, 0x1b );\r
+ st文字領域Array[ 0x35 ] = st文字領域54;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域55 = st文字領域94;\r
+ st文字領域55.ch = 'W';\r
+ st文字領域55.rc = new Rectangle( 0xc5, 0x73, 0x1a, 0x1b );\r
+ st文字領域Array[ 0x36 ] = st文字領域55;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域56 = st文字領域94;\r
+ st文字領域56.ch = 'X';\r
+ st文字領域56.rc = new Rectangle( 0xe0, 0x73, 0x1a, 0x1b );\r
+ st文字領域Array[ 0x37 ] = st文字領域56;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域57 = st文字領域94;\r
+ st文字領域57.ch = 'Y';\r
+ st文字領域57.rc = new Rectangle( 4, 0x8f, 0x17, 0x1b );\r
+ st文字領域Array[ 0x38 ] = st文字領域57;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域58 = st文字領域94;\r
+ st文字領域58.ch = 'Z';\r
+ st文字領域58.rc = new Rectangle( 0x1b, 0x8f, 0x16, 0x1b );\r
+ st文字領域Array[ 0x39 ] = st文字領域58;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域59 = st文字領域94;\r
+ st文字領域59.ch = '[';\r
+ st文字領域59.rc = new Rectangle( 0x31, 0x8f, 0x11, 0x1b );\r
+ st文字領域Array[ 0x3a ] = st文字領域59;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域60 = st文字領域94;\r
+ st文字領域60.ch = '\\';\r
+ st文字領域60.rc = new Rectangle( 0x42, 0x8f, 0x19, 0x1b );\r
+ st文字領域Array[ 0x3b ] = st文字領域60;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域61 = st文字領域94;\r
+ st文字領域61.ch = ']';\r
+ st文字領域61.rc = new Rectangle( 0x5c, 0x8f, 0x11, 0x1b );\r
+ st文字領域Array[ 60 ] = st文字領域61;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域62 = st文字領域94;\r
+ st文字領域62.ch = '^';\r
+ st文字領域62.rc = new Rectangle( 0x71, 0x8f, 0x10, 0x1b );\r
+ st文字領域Array[ 0x3d ] = st文字領域62;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域63 = st文字領域94;\r
+ st文字領域63.ch = '_';\r
+ st文字領域63.rc = new Rectangle( 0x81, 0x8f, 0x13, 0x1b );\r
+ st文字領域Array[ 0x3e ] = st文字領域63;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域64 = st文字領域94;\r
+ st文字領域64.ch = 'a';\r
+ st文字領域64.rc = new Rectangle( 150, 0x8f, 0x13, 0x1b );\r
+ st文字領域Array[ 0x3f ] = st文字領域64;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域65 = st文字領域94;\r
+ st文字領域65.ch = 'b';\r
+ st文字領域65.rc = new Rectangle( 0xac, 0x8f, 20, 0x1b );\r
+ st文字領域Array[ 0x40 ] = st文字領域65;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域66 = st文字領域94;\r
+ st文字領域66.ch = 'c';\r
+ st文字領域66.rc = new Rectangle( 0xc3, 0x8f, 0x12, 0x1b );\r
+ st文字領域Array[ 0x41 ] = st文字領域66;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域67 = st文字領域94;\r
+ st文字領域67.ch = 'd';\r
+ st文字領域67.rc = new Rectangle( 0xd8, 0x8f, 0x15, 0x1b );\r
+ st文字領域Array[ 0x42 ] = st文字領域67;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域68 = st文字領域94;\r
+ st文字領域68.ch = 'e';\r
+ st文字領域68.rc = new Rectangle( 2, 0xab, 0x13, 0x1b );\r
+ st文字領域Array[ 0x43 ] = st文字領域68;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域69 = st文字領域94;\r
+ st文字領域69.ch = 'f';\r
+ st文字領域69.rc = new Rectangle( 0x17, 0xab, 0x11, 0x1b );\r
+ st文字領域Array[ 0x44 ] = st文字領域69;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域70 = st文字領域94;\r
+ st文字領域70.ch = 'g';\r
+ st文字領域70.rc = new Rectangle( 40, 0xab, 0x15, 0x1b );\r
+ st文字領域Array[ 0x45 ] = st文字領域70;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域71 = st文字領域94;\r
+ st文字領域71.ch = 'h';\r
+ st文字領域71.rc = new Rectangle( 0x3f, 0xab, 20, 0x1b );\r
+ st文字領域Array[ 70 ] = st文字領域71;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域72 = st文字領域94;\r
+ st文字領域72.ch = 'i';\r
+ st文字領域72.rc = new Rectangle( 0x55, 0xab, 13, 0x1b );\r
+ st文字領域Array[ 0x47 ] = st文字領域72;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域73 = st文字領域94;\r
+ st文字領域73.ch = 'j';\r
+ st文字領域73.rc = new Rectangle( 0x62, 0xab, 0x10, 0x1b );\r
+ st文字領域Array[ 0x48 ] = st文字領域73;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域74 = st文字領域94;\r
+ st文字領域74.ch = 'k';\r
+ st文字領域74.rc = new Rectangle( 0x74, 0xab, 20, 0x1b );\r
+ st文字領域Array[ 0x49 ] = st文字領域74;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域75 = st文字領域94;\r
+ st文字領域75.ch = 'l';\r
+ st文字領域75.rc = new Rectangle( 0x8a, 0xab, 13, 0x1b );\r
+ st文字領域Array[ 0x4a ] = st文字領域75;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域76 = st文字領域94;\r
+ st文字領域76.ch = 'm';\r
+ st文字領域76.rc = new Rectangle( 0x98, 0xab, 0x1a, 0x1b );\r
+ st文字領域Array[ 0x4b ] = st文字領域76;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域77 = st文字領域94;\r
+ st文字領域77.ch = 'n';\r
+ st文字領域77.rc = new Rectangle( 0xb5, 0xab, 20, 0x1b );\r
+ st文字領域Array[ 0x4c ] = st文字領域77;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域78 = st文字領域94;\r
+ st文字領域78.ch = 'o';\r
+ st文字領域78.rc = new Rectangle( 0xcc, 0xab, 0x13, 0x1b );\r
+ st文字領域Array[ 0x4d ] = st文字領域78;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域79 = st文字領域94;\r
+ st文字領域79.ch = 'p';\r
+ st文字領域79.rc = new Rectangle( 0xe1, 0xab, 0x15, 0x1b );\r
+ st文字領域Array[ 0x4e ] = st文字領域79;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域80 = st文字領域94;\r
+ st文字領域80.ch = 'q';\r
+ st文字領域80.rc = new Rectangle( 2, 0xc7, 20, 0x1b );\r
+ st文字領域Array[ 0x4f ] = st文字領域80;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域81 = st文字領域94;\r
+ st文字領域81.ch = 'r';\r
+ st文字領域81.rc = new Rectangle( 0x18, 0xc7, 0x12, 0x1b );\r
+ st文字領域Array[ 80 ] = st文字領域81;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域82 = st文字領域94;\r
+ st文字領域82.ch = 's';\r
+ st文字領域82.rc = new Rectangle( 0x2a, 0xc7, 0x13, 0x1b );\r
+ st文字領域Array[ 0x51 ] = st文字領域82;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域83 = st文字領域94;\r
+ st文字領域83.ch = 't';\r
+ st文字領域83.rc = new Rectangle( 0x3f, 0xc7, 0x10, 0x1b );\r
+ st文字領域Array[ 0x52 ] = st文字領域83;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域84 = st文字領域94;\r
+ st文字領域84.ch = 'u';\r
+ st文字領域84.rc = new Rectangle( 80, 0xc7, 20, 0x1b );\r
+ st文字領域Array[ 0x53 ] = st文字領域84;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域85 = st文字領域94;\r
+ st文字領域85.ch = 'v';\r
+ st文字領域85.rc = new Rectangle( 0x68, 0xc7, 20, 0x1b );\r
+ st文字領域Array[ 0x54 ] = st文字領域85;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域86 = st文字領域94;\r
+ st文字領域86.ch = 'w';\r
+ st文字領域86.rc = new Rectangle( 0x7f, 0xc7, 0x1a, 0x1b );\r
+ st文字領域Array[ 0x55 ] = st文字領域86;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域87 = st文字領域94;\r
+ st文字領域87.ch = 'x';\r
+ st文字領域87.rc = new Rectangle( 0x9a, 0xc7, 0x16, 0x1b );\r
+ st文字領域Array[ 0x56 ] = st文字領域87;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域88 = st文字領域94;\r
+ st文字領域88.ch = 'y';\r
+ st文字領域88.rc = new Rectangle( 0xb1, 0xc7, 0x16, 0x1b );\r
+ st文字領域Array[ 0x57 ] = st文字領域88;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域89 = st文字領域94;\r
+ st文字領域89.ch = 'z';\r
+ st文字領域89.rc = new Rectangle( 200, 0xc7, 0x13, 0x1b );\r
+ st文字領域Array[ 0x58 ] = st文字領域89;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域90 = st文字領域94;\r
+ st文字領域90.ch = '{';\r
+ st文字領域90.rc = new Rectangle( 220, 0xc7, 15, 0x1b );\r
+ st文字領域Array[ 0x59 ] = st文字領域90;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域91 = st文字領域94;\r
+ st文字領域91.ch = '|';\r
+ st文字領域91.rc = new Rectangle( 0xeb, 0xc7, 13, 0x1b );\r
+ st文字領域Array[ 90 ] = st文字領域91;\r
+ st文字領域94 = new ST文字領域();\r
+ ST文字領域 st文字領域92 = st文字領域94;\r
+ st文字領域92.ch = '}';\r
+ st文字領域92.rc = new Rectangle( 1, 0xe3, 15, 0x1b );\r
+ st文字領域Array[ 0x5b ] = st文字領域92;\r
+ ST文字領域 st文字領域93 = new ST文字領域();\r
+ st文字領域93.ch = '~';\r
+ st文字領域93.rc = new Rectangle( 0x12, 0xe3, 0x12, 0x1b );\r
+ st文字領域Array[ 0x5c ] = st文字領域93;\r
+ this.st文字領域 = st文字領域Array;\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ public int n文字列長dot( string str )\r
+ {\r
+ return this.n文字列長dot( str, 1f );\r
+ }\r
+ public int n文字列長dot( string str, float fScale )\r
+ {\r
+ if( string.IsNullOrEmpty( str ) )\r
+ {\r
+ return 0;\r
+ }\r
+ int num = 0;\r
+ foreach( char ch in str )\r
+ {\r
+ foreach( ST文字領域 st文字領域 in this.st文字領域 )\r
+ {\r
+ if( st文字領域.ch == ch )\r
+ {\r
+ num += (int) ( ( st文字領域.rc.Width - 5 ) * fScale );\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ return num;\r
+ }\r
+ public void t文字列描画( int x, int y, string str )\r
+ {\r
+ this.t文字列描画( x, y, str, false, 1f );\r
+ }\r
+ public void t文字列描画( int x, int y, string str, bool b強調 )\r
+ {\r
+ this.t文字列描画( x, y, str, b強調, 1f );\r
+ }\r
+ public void t文字列描画( int x, int y, string str, bool b強調, float fScale )\r
+ {\r
+ if( !base.b活性化してない && !string.IsNullOrEmpty( str ) )\r
+ {\r
+ CTexture texture = b強調 ? this.tx強調文字 : this.tx通常文字;\r
+ if( texture != null )\r
+ {\r
+ texture.vc拡大縮小倍率 = new Vector3( fScale, fScale, 1f );\r
+ foreach( char ch in str )\r
+ {\r
+ foreach( ST文字領域 st文字領域 in this.st文字領域 )\r
+ {\r
+ if( st文字領域.ch == ch )\r
+ {\r
+ texture.t2D描画( CDTXMania.app.Device, x, y, st文字領域.rc );\r
+ x += (int) ( ( st文字領域.rc.Width - 5 ) * fScale );\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.tx通常文字 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\Screen font dfp.png" ), false );\r
+ this.tx強調文字 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\Screen font dfp em.png" ), false );\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ if( this.tx強調文字 != null )\r
+ {\r
+ this.tx強調文字.Dispose();\r
+ this.tx強調文字 = null;\r
+ }\r
+ if( this.tx通常文字 != null )\r
+ {\r
+ this.tx通常文字.Dispose();\r
+ this.tx通常文字 = null;\r
+ }\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ \r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ private struct ST文字領域\r
+ {\r
+ public char ch;\r
+ public Rectangle rc;\r
+ }\r
+\r
+ private readonly ST文字領域[] st文字領域;\r
+ private CTexture tx強調文字;\r
+ private CTexture tx通常文字;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Drawing;\r
+using System.Diagnostics;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CActFIFOBlack : CActivity\r
+ {\r
+ // メソッド\r
+\r
+ public void tフェードアウト開始()\r
+ {\r
+ this.mode = EFIFOモード.フェードアウト;\r
+ this.counter = new CCounter( 0, 100, 5, CDTXMania.Timer );\r
+ }\r
+ public void tフェードイン開始()\r
+ {\r
+ this.mode = EFIFOモード.フェードイン;\r
+ this.counter = new CCounter( 0, 100, 5, CDTXMania.Timer );\r
+ }\r
+\r
+ \r
+ // CActivity 実装\r
+\r
+ public override void On非活性化()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.tx黒タイル64x64 );\r
+ base.On非活性化();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.tx黒タイル64x64 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\Tile black 64x64.png" ), false );\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( base.b活性化してない || ( this.counter == null ) )\r
+ {\r
+ return 0;\r
+ }\r
+ this.counter.t進行();\r
+ // Size clientSize = CDTXMania.app.Window.ClientSize; // #23510 2010.10.31 yyagi: delete as of no one use this any longer.\r
+ if (this.tx黒タイル64x64 != null)\r
+ {\r
+ this.tx黒タイル64x64.n透明度 = ( this.mode == EFIFOモード.フェードイン ) ? ( ( ( 100 - this.counter.n現在の値 ) * 0xff ) / 100 ) : ( ( this.counter.n現在の値 * 0xff ) / 100 );\r
+ for (int i = 0; i <= (640 / 64); i++) // #23510 2010.10.31 yyagi: change "clientSize.Width" to "640" to fix FIFO drawing size\r
+ {\r
+ for (int j = 0; j <= (480 / 64); j++) // #23510 2010.10.31 yyagi: change "clientSize.Height" to "480" to fix FIFO drawing size\r
+ {\r
+ this.tx黒タイル64x64.t2D描画( CDTXMania.app.Device, i * 64, j * 64 );\r
+ }\r
+ }\r
+ }\r
+ if( this.counter.n現在の値 != 100 )\r
+ {\r
+ return 0;\r
+ }\r
+ return 1;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private CCounter counter;\r
+ private EFIFOモード mode;\r
+ private CTexture tx黒タイル64x64;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Drawing;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CActFIFOWhite : CActivity\r
+ {\r
+ // メソッド\r
+\r
+ public void tフェードアウト開始()\r
+ {\r
+ this.mode = EFIFOモード.フェードアウト;\r
+ this.counter = new CCounter( 0, 100, 5, CDTXMania.Timer );\r
+ }\r
+ public void tフェードイン開始()\r
+ {\r
+ this.mode = EFIFOモード.フェードイン;\r
+ this.counter = new CCounter( 0, 100, 5, CDTXMania.Timer );\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On非活性化()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.tx白タイル64x64 );\r
+ base.On非活性化();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.tx白タイル64x64 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\Tile white 64x64.png" ), false );\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( base.b活性化してない || ( this.counter == null ) )\r
+ {\r
+ return 0;\r
+ }\r
+ this.counter.t進行();\r
+\r
+ // Size clientSize = CDTXMania.app.Window.ClientSize; // #23510 2010.10.31 yyagi: delete as of no one use this any longer.\r
+ if (this.tx白タイル64x64 != null)\r
+ {\r
+ this.tx白タイル64x64.n透明度 = ( this.mode == EFIFOモード.フェードイン ) ? ( ( ( 100 - this.counter.n現在の値 ) * 0xff ) / 100 ) : ( ( this.counter.n現在の値 * 0xff ) / 100 );\r
+ for (int i = 0; i <= (640 / 64); i++) // #23510 2010.10.31 yyagi: change "clientSize.Width" to "640" to fix FIFO drawing size\r
+ {\r
+ for (int j = 0; j <= (480 / 64); j++) // #23510 2010.10.31 yyagi: change "clientSize.Height" to "480" to fix FIFO drawing size\r
+ {\r
+ this.tx白タイル64x64.t2D描画( CDTXMania.app.Device, i * 64, j * 64 );\r
+ }\r
+ }\r
+ }\r
+ if( this.counter.n現在の値 != 100 )\r
+ {\r
+ return 0;\r
+ }\r
+ return 1;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private CCounter counter;\r
+ private EFIFOモード mode;\r
+ private CTexture tx白タイル64x64;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Drawing;\r
+using SlimDX.Direct3D9;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CActオプションパネル : CActivity\r
+ {\r
+ // CActivity 実装\r
+\r
+ public override void On非活性化()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ CDTXMania.tテクスチャの解放( ref this.txオプションパネル );\r
+ base.On非活性化();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.txオプションパネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\Screen option panels.png" ), false );\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ Device device = CDTXMania.app.Device;\r
+ CConfigIni configIni = CDTXMania.ConfigIni;\r
+ if( this.txオプションパネル != null )\r
+ {\r
+ int drums = configIni.n譜面スクロール速度.Drums;\r
+ if( drums > 15 )\r
+ {\r
+ drums = 15;\r
+ }\r
+ this.txオプションパネル.t2D描画( device, 0x171, 12, this.rc譜面スピード[ drums ] );\r
+ drums = configIni.n譜面スクロール速度.Guitar;\r
+ if( drums > 15 )\r
+ {\r
+ drums = 15;\r
+ }\r
+ this.txオプションパネル.t2D描画( device, 0x171, 0x18, this.rc譜面スピード[ drums ] );\r
+ drums = configIni.n譜面スクロール速度.Bass;\r
+ if( drums > 15 )\r
+ {\r
+ drums = 15;\r
+ }\r
+ this.txオプションパネル.t2D描画( device, 0x171, 0x24, this.rc譜面スピード[ drums ] );\r
+ this.txオプションパネル.t2D描画( device, 0x189, 12, this.rcHS[ ( configIni.bHidden.Drums ? 1 : 0 ) + ( configIni.bSudden.Drums ? 2 : 0 ) ] );\r
+ this.txオプションパネル.t2D描画( device, 0x189, 0x18, this.rcHS[ ( configIni.bHidden.Guitar ? 1 : 0 ) + ( configIni.bSudden.Guitar ? 2 : 0 ) ] );\r
+ this.txオプションパネル.t2D描画( device, 0x189, 0x24, this.rcHS[ ( configIni.bHidden.Bass ? 1 : 0 ) + ( configIni.bSudden.Bass ? 2 : 0 ) ] );\r
+ this.txオプションパネル.t2D描画( device, 0x1a1, 12, this.rcDark[ (int) configIni.eDark ] );\r
+ this.txオプションパネル.t2D描画( device, 0x1a1, 0x18, this.rcDark[ (int) configIni.eDark ] );\r
+ this.txオプションパネル.t2D描画( device, 0x1a1, 0x24, this.rcDark[ (int) configIni.eDark ] );\r
+ this.txオプションパネル.t2D描画( device, 0x1b9, 12, this.rcReverse[ configIni.bReverse.Drums ? 1 : 0 ] );\r
+ this.txオプションパネル.t2D描画( device, 0x1b9, 0x18, this.rcReverse[ configIni.bReverse.Guitar ? 1 : 0 ] );\r
+ this.txオプションパネル.t2D描画( device, 0x1b9, 0x24, this.rcReverse[ configIni.bReverse.Bass ? 1 : 0 ] );\r
+ this.txオプションパネル.t2D描画( device, 0x1d1, 12, this.rcPosition[ (int) configIni.判定文字表示位置.Drums ] );\r
+ this.txオプションパネル.t2D描画( device, 0x1d1, 0x18, this.rcPosition[ (int) configIni.判定文字表示位置.Guitar ] );\r
+ this.txオプションパネル.t2D描画( device, 0x1d1, 0x24, this.rcPosition[ (int) configIni.判定文字表示位置.Bass ] );\r
+ this.txオプションパネル.t2D描画( device, 0x1e9, 12, this.rcTight[ configIni.bTight ? 1 : 0 ] );\r
+ this.txオプションパネル.t2D描画( device, 0x1e9, 0x18, this.rcRandom[ (int) configIni.eRandom.Guitar ] );\r
+ this.txオプションパネル.t2D描画( device, 0x1e9, 0x24, this.rcRandom[ (int) configIni.eRandom.Bass ] );\r
+ this.txオプションパネル.t2D描画( device, 0x201, 12, this.rcComboPos[ (int) configIni.ドラムコンボ文字の表示位置 ] );\r
+ this.txオプションパネル.t2D描画( device, 0x201, 0x18, this.rcLight[ configIni.bLight.Guitar ? 1 : 0 ] );\r
+ this.txオプションパネル.t2D描画( device, 0x201, 0x24, this.rcLight[ configIni.bLight.Bass ? 1 : 0 ] );\r
+ this.txオプションパネル.t2D描画( device, 0x219, 0x18, this.rcLeft[ configIni.bLeft.Guitar ? 1 : 0 ] );\r
+ this.txオプションパネル.t2D描画( device, 0x219, 0x24, this.rcLeft[ configIni.bLeft.Bass ? 1 : 0 ] );\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+\r
+ \r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private readonly Rectangle[] rcComboPos = new Rectangle[] { new Rectangle( 0x30, 0x48, 0x18, 12 ), new Rectangle( 0x30, 60, 0x18, 12 ), new Rectangle( 0x30, 0x30, 0x18, 12 ), new Rectangle( 0x18, 0x48, 0x18, 12 ) };\r
+ private readonly Rectangle[] rcDark = new Rectangle[] { new Rectangle( 0x18, 0, 0x18, 12 ), new Rectangle( 0x18, 12, 0x18, 12 ), new Rectangle( 0x18, 0x54, 0x18, 12 ) };\r
+ private readonly Rectangle[] rcHS = new Rectangle[] { new Rectangle( 0, 0, 0x18, 12 ), new Rectangle( 0, 12, 0x18, 12 ), new Rectangle( 0, 0x18, 0x18, 12 ), new Rectangle( 0, 0x24, 0x18, 12 ) };\r
+ private readonly Rectangle[] rcLeft = new Rectangle[] { new Rectangle( 0x60, 0x48, 0x18, 12 ), new Rectangle( 120, 0x48, 0x18, 12 ) };\r
+ private readonly Rectangle[] rcLight = new Rectangle[] { new Rectangle( 120, 0x30, 0x18, 12 ), new Rectangle( 120, 60, 0x18, 12 ) };\r
+ private readonly Rectangle[] rcPosition = new Rectangle[] { new Rectangle( 0, 0x30, 0x18, 12 ), new Rectangle( 0, 60, 0x18, 12 ), new Rectangle( 0, 0x48, 0x18, 12 ) };\r
+ private readonly Rectangle[] rcRandom = new Rectangle[] { new Rectangle( 0x48, 0x30, 0x18, 12 ), new Rectangle( 0x48, 60, 0x18, 12 ), new Rectangle( 0x48, 0x48, 0x18, 12 ), new Rectangle( 0x48, 0x54, 0x18, 12 ) };\r
+ private readonly Rectangle[] rcReverse = new Rectangle[] { new Rectangle( 0x18, 0x18, 0x18, 12 ), new Rectangle( 0x18, 0x24, 0x18, 12 ) };\r
+ private readonly Rectangle[] rcTight = new Rectangle[] { new Rectangle( 0x60, 0x30, 0x18, 12 ), new Rectangle( 0x60, 60, 0x18, 12 ) };\r
+ private readonly Rectangle[] rc譜面スピード = new Rectangle[] { new Rectangle( 0x30, 0, 0x18, 12 ), new Rectangle( 0x30, 12, 0x18, 12 ), new Rectangle( 0x30, 0x18, 0x18, 12 ), new Rectangle( 0x30, 0x24, 0x18, 12 ), new Rectangle( 0x48, 0, 0x18, 12 ), new Rectangle( 0x48, 12, 0x18, 12 ), new Rectangle( 0x48, 0x18, 0x18, 12 ), new Rectangle( 0x48, 0x24, 0x18, 12 ), new Rectangle( 0x60, 0, 0x18, 12 ), new Rectangle( 0x60, 12, 0x18, 12 ), new Rectangle( 0x60, 0x18, 0x18, 12 ), new Rectangle( 0x60, 0x24, 0x18, 12 ), new Rectangle( 120, 0, 0x18, 12 ), new Rectangle( 120, 12, 0x18, 12 ), new Rectangle( 120, 0x18, 0x18, 12 ), new Rectangle( 120, 0x24, 0x18, 12 ) };\r
+ private CTexture txオプションパネル;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ public class CStage : CActivity\r
+ {\r
+ // プロパティ\r
+\r
+ internal enum Eヒット判定\r
+ {\r
+ PERFECT,\r
+ GREAT,\r
+ GOOD,\r
+ POOR,\r
+ MISS,\r
+ BAD,\r
+ AUTO\r
+ }\r
+\r
+ internal Eステージ eステージID;\r
+ public enum Eステージ\r
+ {\r
+ 何もしない,\r
+ 起動,\r
+ タイトル,\r
+ オプション,\r
+ コンフィグ,\r
+ 選曲,\r
+ 曲読み込み,\r
+ 演奏,\r
+ 結果,\r
+ 終了\r
+ }\r
+ \r
+ internal Eフェーズ eフェーズID;\r
+ public enum Eフェーズ\r
+ {\r
+ 共通_通常状態,\r
+ 共通_フェードイン,\r
+ 共通_フェードアウト,\r
+ 共通_終了状態,\r
+ 起動0_システムサウンドを構築,\r
+ 起動1_SongsDBからスコアキャッシュを構築,\r
+ 起動2_曲を検索してリストを作成する,\r
+ 起動3_スコアキャッシュをリストに反映する,\r
+ 起動4_スコアキャッシュになかった曲をファイルから読み込んで反映する,\r
+ 起動5_曲リストへ後処理を適用する,\r
+ 起動6_スコアキャッシュをSongsDBに出力する,\r
+ 起動7_完了,\r
+ タイトル_起動画面からのフェードイン,\r
+ 選曲_結果画面からのフェードイン,\r
+ 選曲_NowLoading画面へのフェードアウト,\r
+ NOWLOADING_DTXファイルを読み込む,\r
+ NOWLOADING_システムサウンドBGMの完了を待つ,\r
+ 演奏_STAGE_FAILED,\r
+ 演奏_STAGE_FAILED_フェードアウト,\r
+ 演奏_STAGE_CLEAR_フェードアウト\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.IO;\r
+using System.Drawing;\r
+using SlimDX;\r
+using SlimDX.Direct3D9;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CPluginHost : IPluginHost\r
+ {\r
+ // コンストラクタ\r
+\r
+ public CPluginHost()\r
+ {\r
+ this._DTXManiaVersion = new CDTXVersion( CDTXMania.VERSION );\r
+ }\r
+\r
+\r
+ // IPluginHost 実装\r
+\r
+ public CDTXVersion DTXManiaVersion\r
+ {\r
+ get { return this._DTXManiaVersion; }\r
+ }\r
+ public Device D3D9Device\r
+ {\r
+ get { return (CDTXMania.app != null ) ? CDTXMania.app.Device : null; }\r
+ }\r
+ public CSound管理 Sound管理\r
+ {\r
+ get { return CDTXMania.Sound管理; }\r
+ }\r
+ public Size ClientSize\r
+ {\r
+ get { return CDTXMania.app.Window.ClientSize; }\r
+ }\r
+ public CStage.Eステージ e現在のステージ\r
+ {\r
+ get { return ( CDTXMania.r現在のステージ != null ) ? CDTXMania.r現在のステージ.eステージID : CStage.Eステージ.何もしない; }\r
+ }\r
+ public CStage.Eフェーズ e現在のフェーズ\r
+ {\r
+ get { return ( CDTXMania.r現在のステージ != null ) ? CDTXMania.r現在のステージ.eフェーズID : CStage.Eフェーズ.共通_通常状態; }\r
+ }\r
+ public bool t入力を占有する(IPluginActivity act)\r
+ {\r
+ if (CDTXMania.act現在入力を占有中のプラグイン != null)\r
+ return false;\r
+\r
+ CDTXMania.act現在入力を占有中のプラグイン = act;\r
+ return true;\r
+ }\r
+ public bool t入力の占有を解除する(IPluginActivity act)\r
+ {\r
+ if (CDTXMania.act現在入力を占有中のプラグイン == null || CDTXMania.act現在入力を占有中のプラグイン != act)\r
+ return false;\r
+\r
+ CDTXMania.act現在入力を占有中のプラグイン = null;\r
+ return true;\r
+ }\r
+ public void tシステムサウンドを再生する( Eシステムサウンド sound )\r
+ {\r
+ if( CDTXMania.Skin != null )\r
+ CDTXMania.Skin[ sound ].t再生する();\r
+ }\r
+ \r
+ \r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private CDTXVersion _DTXManiaVersion;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+\r
+namespace DTXMania\r
+{\r
+ /// <summary>\r
+ /// <para>Activity プラグインへのインターフェース。</para>\r
+ /// <para>DTXMania は、IPluginActivity に対して、以下のライフサイクルを実行します。</para>\r
+ /// <para>(1) DTXMania の起動処理の最後(セットアップ画面が表示される直前)に一度だけ、On初期化()・OnManagedリソースの作成()・OnUnmanagedリソースの作成() をこの順番で1回ずつ呼び出します。</para>\r
+ /// <para>(2) DTXMania の終了処理の最初(Thank you for playing が消えた直後)に一度だけ、OnUnmanagedリソースの解放()・OnManagedリソースの解放()・On終了() をこの順番で1回ずつ呼び出します。</para>\r
+ /// <para>(3) DTXMania の起動中、すなわち(1)~(2)の間は、どんなシーンであっても、常に On進行描画() を1フレームにつき1回ずつ呼び出します。</para>\r
+ /// <para>(4) Direct3D デバイスのリセット時には、デバイスのリセット前に OnUnmanagedリソースの解放() を1回呼び出し、デバイスをリセットしたのち、OnUnmanagedリソースの作成() を1回呼び出します。</para>\r
+ /// <para>(5) Direct3D デバイスのロスト時には、デバイスの再生成前に OnUnmanagedリソースの解放()・OnManagedリソースの解放() を1回ずつ呼び出し、デバイスを再生成したのち、OnManagedリソースの作成()・OnUnmanagedリソースの作成() を1回ずつ呼び出します。</para>\r
+ /// </summary>\r
+ public interface IPluginActivity\r
+ {\r
+ /// <summary>\r
+ /// <para>プラグインの初期化を行います。</para>\r
+ /// <para>DTXMania の起動処理の最後(セットアップ画面が表示される直前)に、DTXMania から一度だけ呼び出されます。</para>\r
+ /// <param name="PluginHost">プラグインが、ホスト(DTXMania)の情報にアクセスするためのオブジェクト。</param>\r
+ /// </summary>\r
+ void On初期化( DTXMania.IPluginHost PluginHost );\r
+\r
+ /// <summary>\r
+ /// <para>プラグインの終了処理を行います。</para>\r
+ /// <para>DTXMania の終了処理の最初(Thank you for playing が消えた直後)に、DTXMania から一度だけ呼び出されます。</para>\r
+ /// </summary>\r
+ void On終了();\r
+\r
+ /// <summary>\r
+ /// Managed リソースを作成します。\r
+ /// </summary>\r
+ void OnManagedリソースの作成();\r
+ \r
+ /// <summary>\r
+ /// Unmanaged リソースを作成します。\r
+ /// </summary>\r
+ void OnUnmanagedリソースの作成();\r
+\r
+ /// <summary>\r
+ /// Unmanaged リソースを解放します。\r
+ /// </summary>\r
+ void OnUnmanagedリソースの解放();\r
+\r
+ /// <summary>\r
+ /// Managed リソースを解放します。\r
+ /// </summary>\r
+ void OnManagedリソースの解放();\r
+\r
+ /// <summary>\r
+ /// <para>プラグインの進行と描画を行います。</para>\r
+ /// <para>※現在の DTXMania では、進行と描画は分離されていません。</para>\r
+ /// <para>※BeginScene()/EndScene() は DTXMania 側で行うため、プラグイン側では不要です。</para>\r
+ /// <para>※keyboard.tポーリング() は DTXMania 側で行いますのでプラグイン側では行わないで下さい。</para>\r
+ /// <param name="pad">パッド入力。他のプラグインが入力占有中である場合は null が渡されます。</param>\r
+ /// <param name="keyboard">キーボード入力。他のプラグインが入力占有中である場合は null が渡されます。</param>\r
+ /// </summary>\r
+ void On進行描画( DTXMania.CPad pad, FDK.IInputDevice keyboard );\r
+\r
+ /// <summary>\r
+ /// <para>ステージが変わる度に呼び出されます。</para>\r
+ /// <para>呼び出しタイミングは、新しいステージの活性化直後かつ描画開始前です。</para>\r
+ /// </summary>\r
+ void Onステージ変更();\r
+\r
+ /// <summary>\r
+ /// <para>選曲画面で選択曲が変更された場合に呼び出されます。</para>\r
+ /// <para>同じ set.def に属する曲の難易度が(HH×2で)変更された場合でも呼び出されます。</para>\r
+ /// <para>ただし、選択が曲でない(BOX, BACK, RANDOM など)場合には呼び出されません。</para>\r
+ /// </summary>\r
+ /// <param name="str選択曲ファイル名">選択されている曲のファイルの名前。絶対パス。</param>\r
+ /// <param name="setDef">選択されている曲の set.def の情報。set.def が存在しなければ null を渡します。</param>\r
+ /// <param name="nブロック番号inSetDef">選択されている曲のset.defブロック番号(0~)。setDef.blocks[]の引数です。set.def が存在しなければ負数を渡します。</param>\r
+ /// <param name="n曲番号inブロック">選択されている曲のブロック内の曲番号(0~4)。setDef.blocks[nブロック番号inSetDef].File[]/Label[]の引数です。set.def が存在しなければ負数を渡します。\r
+ /// この番号は、選曲画面でプレイヤーが目にしているレベル(L1~L5)に常に対応するとは限りません。</param>\r
+ void On選択曲変更( string str選択曲ファイル名, DTXMania.CSetDef setDef, int nブロック番号inSetDef, int n曲番号inブロック );\r
+\r
+ void On演奏クリア( DTXMania.CScoreIni scoreIni );\r
+ void On演奏失敗( DTXMania.CScoreIni scoreIni );\r
+ void On演奏キャンセル( DTXMania.CScoreIni scoreIni );\r
+ }\r
+}\r
--- /dev/null
+namespace DTXMania\r
+{\r
+ /// <summary>\r
+ /// <para>プラグインホスト情報提供インターフェース。</para>\r
+ /// <para>プラグインでは、On初期化() で渡されるこのインターフェースオブジェクトを通じて、\r
+ /// DTXMania の持つ様々なリソースにアクセスできます。</para>\r
+ /// </summary>\r
+ public interface IPluginHost\r
+ {\r
+ /// <summary>\r
+ /// DTXMania のバージョンを表します。\r
+ /// </summary>\r
+ DTXMania.CDTXVersion DTXManiaVersion { get; }\r
+\r
+ /// <summary>\r
+ /// <para>Direct3D9 デバイスオブジェクト。</para>\r
+ /// <para>ロストしたりリセットしたりすることがあるので、常に同じ値であるとは保証されません。</para>\r
+ /// </summary>\r
+ SlimDX.Direct3D9.Device D3D9Device { get; }\r
+\r
+ /// <summary>\r
+ /// <para>DirectSound の管理クラス。</para>\r
+ /// <para>WAV, XA, OGG, MP3 のサウンドファイルから CSound オブジェクトを生成できます。</para>\r
+ /// </summary>\r
+ FDK.CSound管理 Sound管理 { get; }\r
+\r
+ /// <summary>\r
+ /// 描画エリアのサイズを返します(ピクセル単位)。\r
+ /// </summary>\r
+ System.Drawing.Size ClientSize { get; }\r
+\r
+ /// <summary>\r
+ /// 現在のステージのIDを表します。\r
+ /// </summary>\r
+ DTXMania.CStage.Eステージ e現在のステージ { get; }\r
+\r
+ /// <summary>\r
+ /// 現在のステージにおけるフェーズのIDを表します。\r
+ /// </summary>\r
+ DTXMania.CStage.Eフェーズ e現在のフェーズ { get; }\r
+\r
+ /// <summary>\r
+ /// <para>自分以外は入力データを扱ってはならないことを宣言します。</para>\r
+ /// <para>DTXMania 本体は入力データのポーリングのみを行い、他のプラグインに対しては、On進行描画() の2つの入力に null を渡します。</para>\r
+ /// </summary>\r
+ /// <param name="act">宣言するプラグイン(すなわち this を指定する)</param>\r
+ /// <returns>占有に成功すれば true を返し、既に誰かが占有中である場合には false を返します。</returns>\r
+ bool t入力を占有する( IPluginActivity act );\r
+\r
+ /// <summary>\r
+ /// <para>自分以外が入力データを扱って良いことを宣言します。</para>\r
+ /// <para>DTXMania 本体はポーリング以外の入力処理を開始し、他のプラグインに対しては、On進行描画() の2つの引数に有効な値を渡します。</para>\r
+ /// </summary>\r
+ /// <param name="act">宣言するプラグイン(すなわち this を指定する)</param>\r
+ /// <returns>占有解除に成功すれば true、失敗すれば flase を返します。</returns>\r
+ bool t入力の占有を解除する( IPluginActivity act );\r
+\r
+ /// <summary>\r
+ /// 指定されたシステムサウンド/BGMを再生します。\r
+ /// </summary>\r
+ /// <param name="sound">再生するシステムサウンドの識別子。</param>\r
+ void tシステムサウンドを再生する( Eシステムサウンド sound );\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using System.IO;\r
+using System.Diagnostics;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CConfigIni\r
+ {\r
+ // クラス\r
+\r
+ public class CKeyAssign\r
+ {\r
+ public class CKeyAssignPad\r
+ {\r
+ public CConfigIni.CKeyAssign.STKEYASSIGN[] B\r
+ {\r
+ get\r
+ {\r
+ return this.padBD_B;\r
+ }\r
+ set\r
+ {\r
+ this.padBD_B = value;\r
+ }\r
+ }\r
+ public CConfigIni.CKeyAssign.STKEYASSIGN[] BD\r
+ {\r
+ get\r
+ {\r
+ return this.padBD_B;\r
+ }\r
+ set\r
+ {\r
+ this.padBD_B = value;\r
+ }\r
+ }\r
+ public CConfigIni.CKeyAssign.STKEYASSIGN[] Cancel\r
+ {\r
+ get\r
+ {\r
+ return this.padFT_Cancel;\r
+ }\r
+ set\r
+ {\r
+ this.padFT_Cancel = value;\r
+ }\r
+ }\r
+ public CConfigIni.CKeyAssign.STKEYASSIGN[] CY\r
+ {\r
+ get\r
+ {\r
+ return this.padCY_Decide;\r
+ }\r
+ set\r
+ {\r
+ this.padCY_Decide = value;\r
+ }\r
+ }\r
+ public CConfigIni.CKeyAssign.STKEYASSIGN[] Decide\r
+ {\r
+ get\r
+ {\r
+ return this.padCY_Decide;\r
+ }\r
+ set\r
+ {\r
+ this.padCY_Decide = value;\r
+ }\r
+ }\r
+ public CConfigIni.CKeyAssign.STKEYASSIGN[] FT\r
+ {\r
+ get\r
+ {\r
+ return this.padFT_Cancel;\r
+ }\r
+ set\r
+ {\r
+ this.padFT_Cancel = value;\r
+ }\r
+ }\r
+ public CConfigIni.CKeyAssign.STKEYASSIGN[] G\r
+ {\r
+ get\r
+ {\r
+ return this.padSD_G;\r
+ }\r
+ set\r
+ {\r
+ this.padSD_G = value;\r
+ }\r
+ }\r
+ public CConfigIni.CKeyAssign.STKEYASSIGN[] HH\r
+ {\r
+ get\r
+ {\r
+ return this.padHH_R;\r
+ }\r
+ set\r
+ {\r
+ this.padHH_R = value;\r
+ }\r
+ }\r
+ public CConfigIni.CKeyAssign.STKEYASSIGN[] HHO\r
+ {\r
+ get\r
+ {\r
+ return this.padHHO;\r
+ }\r
+ set\r
+ {\r
+ this.padHHO = value;\r
+ }\r
+ }\r
+ public CConfigIni.CKeyAssign.STKEYASSIGN[] HT\r
+ {\r
+ get\r
+ {\r
+ return this.padHT_Pick;\r
+ }\r
+ set\r
+ {\r
+ this.padHT_Pick = value;\r
+ }\r
+ }\r
+ public CConfigIni.CKeyAssign.STKEYASSIGN[] this[ int index ]\r
+ {\r
+ get\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ return this.padHH_R;\r
+\r
+ case 1:\r
+ return this.padSD_G;\r
+\r
+ case 2:\r
+ return this.padBD_B;\r
+\r
+ case 3:\r
+ return this.padHT_Pick;\r
+\r
+ case 4:\r
+ return this.padLT_Wail;\r
+\r
+ case 5:\r
+ return this.padFT_Cancel;\r
+\r
+ case 6:\r
+ return this.padCY_Decide;\r
+\r
+ case 7:\r
+ return this.padHHO;\r
+\r
+ case 8:\r
+ return this.padRD;\r
+\r
+ case 9:\r
+ return this.padLC;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ set\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ this.padHH_R = value;\r
+ return;\r
+\r
+ case 1:\r
+ this.padSD_G = value;\r
+ return;\r
+\r
+ case 2:\r
+ this.padBD_B = value;\r
+ return;\r
+\r
+ case 3:\r
+ this.padHT_Pick = value;\r
+ return;\r
+\r
+ case 4:\r
+ this.padLT_Wail = value;\r
+ return;\r
+\r
+ case 5:\r
+ this.padFT_Cancel = value;\r
+ return;\r
+\r
+ case 6:\r
+ this.padCY_Decide = value;\r
+ return;\r
+\r
+ case 7:\r
+ this.padHHO = value;\r
+ return;\r
+\r
+ case 8:\r
+ this.padRD = value;\r
+ return;\r
+\r
+ case 9:\r
+ this.padLC = value;\r
+ return;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ }\r
+ public CConfigIni.CKeyAssign.STKEYASSIGN[] LC\r
+ {\r
+ get\r
+ {\r
+ return this.padLC;\r
+ }\r
+ set\r
+ {\r
+ this.padLC = value;\r
+ }\r
+ }\r
+ public CConfigIni.CKeyAssign.STKEYASSIGN[] LT\r
+ {\r
+ get\r
+ {\r
+ return this.padLT_Wail;\r
+ }\r
+ set\r
+ {\r
+ this.padLT_Wail = value;\r
+ }\r
+ }\r
+ public CConfigIni.CKeyAssign.STKEYASSIGN[] Pick\r
+ {\r
+ get\r
+ {\r
+ return this.padHT_Pick;\r
+ }\r
+ set\r
+ {\r
+ this.padHT_Pick = value;\r
+ }\r
+ }\r
+ public CConfigIni.CKeyAssign.STKEYASSIGN[] R\r
+ {\r
+ get\r
+ {\r
+ return this.padHH_R;\r
+ }\r
+ set\r
+ {\r
+ this.padHH_R = value;\r
+ }\r
+ }\r
+ public CConfigIni.CKeyAssign.STKEYASSIGN[] RD\r
+ {\r
+ get\r
+ {\r
+ return this.padRD;\r
+ }\r
+ set\r
+ {\r
+ this.padRD = value;\r
+ }\r
+ }\r
+ public CConfigIni.CKeyAssign.STKEYASSIGN[] SD\r
+ {\r
+ get\r
+ {\r
+ return this.padSD_G;\r
+ }\r
+ set\r
+ {\r
+ this.padSD_G = value;\r
+ }\r
+ }\r
+ public CConfigIni.CKeyAssign.STKEYASSIGN[] Wail\r
+ {\r
+ get\r
+ {\r
+ return this.padLT_Wail;\r
+ }\r
+ set\r
+ {\r
+ this.padLT_Wail = value;\r
+ }\r
+ }\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private CConfigIni.CKeyAssign.STKEYASSIGN[] padBD_B;\r
+ private CConfigIni.CKeyAssign.STKEYASSIGN[] padCY_Decide;\r
+ private CConfigIni.CKeyAssign.STKEYASSIGN[] padFT_Cancel;\r
+ private CConfigIni.CKeyAssign.STKEYASSIGN[] padHH_R;\r
+ private CConfigIni.CKeyAssign.STKEYASSIGN[] padHHO;\r
+ private CConfigIni.CKeyAssign.STKEYASSIGN[] padHT_Pick;\r
+ private CConfigIni.CKeyAssign.STKEYASSIGN[] padLC;\r
+ private CConfigIni.CKeyAssign.STKEYASSIGN[] padLT_Wail;\r
+ private CConfigIni.CKeyAssign.STKEYASSIGN[] padRD;\r
+ private CConfigIni.CKeyAssign.STKEYASSIGN[] padSD_G;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ public struct STKEYASSIGN\r
+ {\r
+ public E入力デバイス 入力デバイス;\r
+ public int ID;\r
+ public int コード;\r
+ public STKEYASSIGN( E入力デバイス DeviceType, int nID, int nCode )\r
+ {\r
+ this.入力デバイス = DeviceType;\r
+ this.ID = nID;\r
+ this.コード = nCode;\r
+ }\r
+ }\r
+\r
+ public CKeyAssignPad Bass = new CKeyAssignPad();\r
+ public CKeyAssignPad Drums = new CKeyAssignPad();\r
+ public CKeyAssignPad Guitar = new CKeyAssignPad();\r
+ public CKeyAssignPad this[ int index ]\r
+ {\r
+ get\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ return this.Drums;\r
+\r
+ case 1:\r
+ return this.Guitar;\r
+\r
+ case 2:\r
+ return this.Bass;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ set\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ this.Drums = value;\r
+ return;\r
+\r
+ case 1:\r
+ this.Guitar = value;\r
+ return;\r
+\r
+ case 2:\r
+ this.Bass = value;\r
+ return;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ }\r
+ }\r
+ \r
+\r
+ // プロパティ\r
+\r
+ public int nBGAlpha;\r
+ public bool bAVI有効;\r
+ public bool bBGA有効;\r
+ public bool bBGM音を発声する;\r
+ public STDGBVALUE<bool> bHidden;\r
+ public STDGBVALUE<bool> bLeft;\r
+ public STDGBVALUE<bool> bLight;\r
+ public bool bLogDTX詳細ログ出力;\r
+ public bool bLog曲検索ログ出力;\r
+ public bool bLog作成解放ログ出力;\r
+ public STDGBVALUE<bool> bReverse;\r
+ public bool bScoreIniを出力する;\r
+ public bool bSTAGEFAILED有効;\r
+ public STDGBVALUE<bool> bSudden;\r
+ public bool bTight;\r
+ public bool bWave再生位置自動調整機能有効;\r
+ public bool bシンバルフリー;\r
+ public bool bストイックモード;\r
+ public bool bドラム打音を発声する;\r
+ public bool bフィルイン有効;\r
+ public bool bランダムセレクトで子BOXを検索対象とする;\r
+ public bool bログ出力;\r
+ public STDGBVALUE<bool> b演奏音を強調する;\r
+ public bool b演奏情報を表示する;\r
+ public bool b歓声を発声する;\r
+ public bool b垂直帰線待ちを行う;\r
+ public bool b選曲リストフォントを斜体にする;\r
+ public bool b選曲リストフォントを太字にする;\r
+ public bool b全画面モード;\r
+ public Dictionary<int, string> dicJoystick;\r
+ public ECYGroup eCYGroup;\r
+ public Eダークモード eDark;\r
+ public EFTGroup eFTGroup;\r
+ public EHHGroup eHHGroup;\r
+ public E打ち分け時の再生の優先順位 eHitSoundPriorityCY;\r
+ public E打ち分け時の再生の優先順位 eHitSoundPriorityFT;\r
+ public E打ち分け時の再生の優先順位 eHitSoundPriorityHH;\r
+ public STDGBVALUE<Eランダムモード> eRandom;\r
+ public Eダメージレベル eダメージレベル;\r
+ public CKeyAssign KeyAssign;\r
+ public int n演奏速度;\r
+ public int n曲が選択されてからプレビュー音が鳴るまでのウェイトms;\r
+ public int n曲が選択されてからプレビュー画像が表示開始されるまでのウェイトms;\r
+ public int n自動再生音量;\r
+ public int n手動再生音量;\r
+ public int n選曲リストフォントのサイズdot;\r
+ public STDGBVALUE<int> n表示可能な最小コンボ数;\r
+ public STDGBVALUE<int> n譜面スクロール速度;\r
+ public string strDTXManiaのバージョン;\r
+ public string str曲データ検索パス;\r
+ public string str選曲リストフォント;\r
+ public Eドラムコンボ文字の表示位置 ドラムコンボ文字の表示位置;\r
+ public STDGBVALUE<E判定文字表示位置> 判定文字表示位置;\r
+ public int nハイハット切り捨て下限Velocity;\r
+ public bool bバッファ入力を行う;\r
+ public bool bConfigIniがないかDTXManiaのバージョンが異なる\r
+ {\r
+ get\r
+ {\r
+ return ( !this.bConfigIniが存在している || !CDTXMania.VERSION.Equals( this.strDTXManiaのバージョン ) );\r
+ }\r
+ }\r
+ public bool bDrums有効\r
+ {\r
+ get\r
+ {\r
+ return this._bDrums有効;\r
+ }\r
+ set\r
+ {\r
+ this._bDrums有効 = value;\r
+ if( !this._bGuitar有効 && !this._bDrums有効 )\r
+ {\r
+ this._bGuitar有効 = true;\r
+ }\r
+ }\r
+ }\r
+ public bool bEnterがキー割り当てのどこにも使用されていない\r
+ {\r
+ get\r
+ {\r
+ for( int i = 0; i < 3; i++ )\r
+ {\r
+ for( int j = 0; j < 10; j++ )\r
+ {\r
+ for( int k = 0; k < 0x10; k++ )\r
+ {\r
+ if( ( this.KeyAssign[ i ][ j ][ k ].入力デバイス == E入力デバイス.キーボード ) && ( this.KeyAssign[ i ][ j ][ k ].コード == 0x75 ) )\r
+ {\r
+ return false;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ return true;\r
+ }\r
+ }\r
+ public bool bGuitar有効\r
+ {\r
+ get\r
+ {\r
+ return this._bGuitar有効;\r
+ }\r
+ set\r
+ {\r
+ this._bGuitar有効 = value;\r
+ if( !this._bGuitar有効 && !this._bDrums有効 )\r
+ {\r
+ this._bDrums有効 = true;\r
+ }\r
+ }\r
+ }\r
+ public bool bウィンドウモード\r
+ {\r
+ get\r
+ {\r
+ return !this.b全画面モード;\r
+ }\r
+ set\r
+ {\r
+ this.b全画面モード = !value;\r
+ }\r
+ }\r
+ public bool bギタレボモード\r
+ {\r
+ get\r
+ {\r
+ return ( !this.bDrums有効 && this.bGuitar有効 );\r
+ }\r
+ }\r
+ public bool bドラムが全部オートプレイである\r
+ {\r
+ get\r
+ {\r
+ for( int i = 0; i < 8; i++ )\r
+ {\r
+ if( !this.bAutoPlay[ i ] )\r
+ {\r
+ return false;\r
+ }\r
+ }\r
+ return true;\r
+ }\r
+ }\r
+ public bool b演奏情報を表示しない\r
+ {\r
+ get\r
+ {\r
+ return !this.b演奏情報を表示する;\r
+ }\r
+ set\r
+ {\r
+ this.b演奏情報を表示する = !value;\r
+ }\r
+ }\r
+ public int n背景の透過度\r
+ {\r
+ get\r
+ {\r
+ return this.nBGAlpha;\r
+ }\r
+ set\r
+ {\r
+ if( value < 0 )\r
+ {\r
+ this.nBGAlpha = 0;\r
+ }\r
+ else if( value > 0xff )\r
+ {\r
+ this.nBGAlpha = 0xff;\r
+ }\r
+ else\r
+ {\r
+ this.nBGAlpha = value;\r
+ }\r
+ }\r
+ }\r
+\r
+ public STAUTOPLAY bAutoPlay;\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ public struct STAUTOPLAY\r
+ {\r
+ public bool LC;\r
+ public bool HH;\r
+ public bool SD;\r
+ public bool BD;\r
+ public bool HT;\r
+ public bool LT;\r
+ public bool FT;\r
+ public bool CY;\r
+ public bool Guitar;\r
+ public bool Bass;\r
+ public bool this[ int index ]\r
+ {\r
+ get\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ return this.LC;\r
+\r
+ case 1:\r
+ return this.HH;\r
+\r
+ case 2:\r
+ return this.SD;\r
+\r
+ case 3:\r
+ return this.BD;\r
+\r
+ case 4:\r
+ return this.HT;\r
+\r
+ case 5:\r
+ return this.LT;\r
+\r
+ case 6:\r
+ return this.FT;\r
+\r
+ case 7:\r
+ return this.CY;\r
+\r
+ case 8:\r
+ return this.Guitar;\r
+\r
+ case 9:\r
+ return this.Bass;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ set\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ this.LC = value;\r
+ return;\r
+\r
+ case 1:\r
+ this.HH = value;\r
+ return;\r
+\r
+ case 2:\r
+ this.SD = value;\r
+ return;\r
+\r
+ case 3:\r
+ this.BD = value;\r
+ return;\r
+\r
+ case 4:\r
+ this.HT = value;\r
+ return;\r
+\r
+ case 5:\r
+ this.LT = value;\r
+ return;\r
+\r
+ case 6:\r
+ this.FT = value;\r
+ return;\r
+\r
+ case 7:\r
+ this.CY = value;\r
+ return;\r
+\r
+ case 8:\r
+ this.Guitar = value;\r
+ return;\r
+\r
+ case 9:\r
+ this.Bass = value;\r
+ return;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ }\r
+ }\r
+\r
+ public STRANGE nヒット範囲ms;\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ public struct STRANGE\r
+ {\r
+ public int Perfect;\r
+ public int Great;\r
+ public int Good;\r
+ public int Poor;\r
+ public int this[ int index ]\r
+ {\r
+ get\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ return this.Perfect;\r
+\r
+ case 1:\r
+ return this.Great;\r
+\r
+ case 2:\r
+ return this.Good;\r
+\r
+ case 3:\r
+ return this.Poor;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ set\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ this.Perfect = value;\r
+ return;\r
+\r
+ case 1:\r
+ this.Great = value;\r
+ return;\r
+\r
+ case 2:\r
+ this.Good = value;\r
+ return;\r
+\r
+ case 3:\r
+ this.Poor = value;\r
+ return;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ }\r
+ }\r
+ \r
+\r
+ // コンストラクタ\r
+\r
+ public CConfigIni()\r
+ {\r
+ this.strDTXManiaのバージョン = "Unknown";\r
+ this.str曲データ検索パス = @".\";\r
+ this.b全画面モード = false;\r
+ this.b垂直帰線待ちを行う = true;\r
+ this._bGuitar有効 = true;\r
+ this._bDrums有効 = true;\r
+ this.nBGAlpha = 100;\r
+ this.eダメージレベル = Eダメージレベル.普通;\r
+ this.bSTAGEFAILED有効 = true;\r
+ this.bAVI有効 = true;\r
+ this.bBGA有効 = true;\r
+ this.bフィルイン有効 = true;\r
+ this.n曲が選択されてからプレビュー音が鳴るまでのウェイトms = 0x3e8;\r
+ this.n曲が選択されてからプレビュー画像が表示開始されるまでのウェイトms = 100;\r
+ this.bWave再生位置自動調整機能有効 = true;\r
+ this.bBGM音を発声する = true;\r
+ this.bドラム打音を発声する = true;\r
+ this.b歓声を発声する = true;\r
+ this.bScoreIniを出力する = true;\r
+ this.bランダムセレクトで子BOXを検索対象とする = true;\r
+ STDGBVALUE<bool> stdgbvalue = new STDGBVALUE<bool>();\r
+ stdgbvalue.Drums = true;\r
+ stdgbvalue.Guitar = true;\r
+ stdgbvalue.Bass = true;\r
+ this.b演奏音を強調する = stdgbvalue;\r
+ STDGBVALUE<int> stdgbvalue2 = new STDGBVALUE<int>();\r
+ stdgbvalue2.Drums = 11;\r
+ stdgbvalue2.Guitar = 2;\r
+ stdgbvalue2.Bass = 2;\r
+ this.n表示可能な最小コンボ数 = stdgbvalue2;\r
+ this.str選曲リストフォント = "MS PGothic";\r
+ this.n選曲リストフォントのサイズdot = 20;\r
+ this.b選曲リストフォントを太字にする = true;\r
+ this.n自動再生音量 = 80;\r
+ this.n手動再生音量 = 100;\r
+ this.bログ出力 = true;\r
+ STDGBVALUE<bool> stdgbvalue3 = new STDGBVALUE<bool>();\r
+ stdgbvalue3.Drums = false;\r
+ stdgbvalue3.Guitar = false;\r
+ stdgbvalue3.Bass = false;\r
+ this.bSudden = stdgbvalue3;\r
+ STDGBVALUE<bool> stdgbvalue4 = new STDGBVALUE<bool>();\r
+ stdgbvalue4.Drums = false;\r
+ stdgbvalue4.Guitar = false;\r
+ stdgbvalue4.Bass = false;\r
+ this.bHidden = stdgbvalue4;\r
+ STDGBVALUE<bool> stdgbvalue5 = new STDGBVALUE<bool>();\r
+ stdgbvalue5.Drums = false;\r
+ stdgbvalue5.Guitar = false;\r
+ stdgbvalue5.Bass = false;\r
+ this.bReverse = stdgbvalue5;\r
+ STDGBVALUE<Eランダムモード> stdgbvalue6 = new STDGBVALUE<Eランダムモード>();\r
+ stdgbvalue6.Drums = Eランダムモード.OFF;\r
+ stdgbvalue6.Guitar = Eランダムモード.OFF;\r
+ stdgbvalue6.Bass = Eランダムモード.OFF;\r
+ this.eRandom = stdgbvalue6;\r
+ STDGBVALUE<bool> stdgbvalue7 = new STDGBVALUE<bool>();\r
+ stdgbvalue7.Drums = false;\r
+ stdgbvalue7.Guitar = false;\r
+ stdgbvalue7.Bass = false;\r
+ this.bLight = stdgbvalue7;\r
+ STDGBVALUE<bool> stdgbvalue8 = new STDGBVALUE<bool>();\r
+ stdgbvalue8.Drums = false;\r
+ stdgbvalue8.Guitar = false;\r
+ stdgbvalue8.Bass = false;\r
+ this.bLeft = stdgbvalue8;\r
+ STDGBVALUE<E判定文字表示位置> stdgbvalue9 = new STDGBVALUE<E判定文字表示位置>();\r
+ stdgbvalue9.Drums = E判定文字表示位置.レーン上;\r
+ stdgbvalue9.Guitar = E判定文字表示位置.レーン上;\r
+ stdgbvalue9.Bass = E判定文字表示位置.レーン上;\r
+ this.判定文字表示位置 = stdgbvalue9;\r
+ STDGBVALUE<int> stdgbvalue10 = new STDGBVALUE<int>();\r
+ stdgbvalue10.Drums = 1;\r
+ stdgbvalue10.Guitar = 1;\r
+ stdgbvalue10.Bass = 1;\r
+ this.n譜面スクロール速度 = stdgbvalue10;\r
+ this.n演奏速度 = 20;\r
+ STAUTOPLAY stautoplay = new STAUTOPLAY();\r
+ stautoplay.HH = false;\r
+ stautoplay.SD = false;\r
+ stautoplay.BD = false;\r
+ stautoplay.HT = false;\r
+ stautoplay.LT = false;\r
+ stautoplay.FT = false;\r
+ stautoplay.CY = false;\r
+ stautoplay.LC = false;\r
+ stautoplay.Guitar = true;\r
+ stautoplay.Bass = true;\r
+ this.bAutoPlay = stautoplay;\r
+ STRANGE strange = new STRANGE();\r
+ strange.Perfect = 0x22;\r
+ strange.Great = 0x43;\r
+ strange.Good = 0x54;\r
+ strange.Poor = 0x75;\r
+ this.nヒット範囲ms = strange;\r
+ this.ConfigIniファイル名 = "";\r
+ this.dicJoystick = new Dictionary<int, string>( 10 );\r
+ this.tデフォルトのキーアサインに設定する();\r
+ this.nハイハット切り捨て下限Velocity = 20;\r
+ this.bバッファ入力を行う = true;\r
+ }\r
+ public CConfigIni( string iniファイル名 )\r
+ : this()\r
+ {\r
+ this.t読み込み( iniファイル名 );\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ public void t指定した入力が既にアサイン済みである場合はそれを全削除する( E入力デバイス DeviceType, int nID, int nCode )\r
+ {\r
+ for( int i = 0; i < 3; i++ )\r
+ {\r
+ for( int j = 0; j < 10; j++ )\r
+ {\r
+ for( int k = 0; k < 0x10; k++ )\r
+ {\r
+ if( ( ( this.KeyAssign[ i ][ j ][ k ].入力デバイス == DeviceType ) && ( this.KeyAssign[ i ][ j ][ k ].ID == nID ) ) && ( this.KeyAssign[ i ][ j ][ k ].コード == nCode ) )\r
+ {\r
+ for( int m = k; m < 15; m++ )\r
+ {\r
+ this.KeyAssign[ i ][ j ][ m ] = this.KeyAssign[ i ][ j ][ m + 1 ];\r
+ }\r
+ this.KeyAssign[ i ][ j ][ 15 ].入力デバイス = E入力デバイス.不明;\r
+ this.KeyAssign[ i ][ j ][ 15 ].ID = 0;\r
+ this.KeyAssign[ i ][ j ][ 15 ].コード = 0;\r
+ k--;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ public void t書き出し( string iniファイル名 )\r
+ {\r
+ StreamWriter sw = new StreamWriter( iniファイル名, false, Encoding.GetEncoding( "shift-jis" ) );\r
+ sw.WriteLine( ";-------------------" );\r
+ sw.WriteLine( "[System]" );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; リリースバージョン" );\r
+ sw.WriteLine( "Version={0}", CDTXMania.VERSION );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; 演奏データの格納されているフォルダへのパス。" );\r
+ sw.WriteLine( @"; セミコロン(;)で区切ることにより複数のパスを指定できます。(例: d:\DTXFiles1\;e:\DTXFiles2\)" );\r
+ sw.WriteLine( "DTXPath={0}", this.str曲データ検索パス );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; 画面モード(0:ウィンドウ, 1:全画面)" );\r
+ sw.WriteLine( "FullScreen={0}", this.b全画面モード ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; 垂直帰線同期(0:OFF,1:ON)" );\r
+ sw.WriteLine( "VSyncWait={0}", this.b垂直帰線待ちを行う ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; ギター/ベース有効(0:OFF,1:ON)" );\r
+ sw.WriteLine( "Guitar={0}", this.bGuitar有効 ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; ドラム有効(0:OFF,1:ON)" );\r
+ sw.WriteLine( "Drums={0}", this.bDrums有効 ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; 背景画像の半透明割合(0:透明~255:不透明)" );\r
+ sw.WriteLine( "BGAlpha={0}", this.nBGAlpha );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; Missヒット時のゲージ減少割合(0:少, 1:普通, 2:大)" );\r
+ sw.WriteLine( "DamageLevel={0}", (int) this.eダメージレベル );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; LC/HHC/HHO 打ち分けモード(0:LC|HHC|HHO, 1:LC&(HHC|HHO), 2:LC&HHC&HHO)" );\r
+ sw.WriteLine( "HHGroup={0}", (int) this.eHHGroup );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; LT/FT 打ち分けモード(0:LT|FT, 1:LT&FT)" );\r
+ sw.WriteLine( "FTGroup={0}", (int) this.eFTGroup );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; CY/RD 打ち分けモード(0:CY|RD, 1:CY&RD)" );\r
+ sw.WriteLine( "CYGroup={0}", (int) this.eCYGroup );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; 打ち分け時の再生音の優先順位(HHGroup)(0:Chip>Pad, 1:Pad>Chip)" );\r
+ sw.WriteLine( "HitSoundPriorityHH={0}", (int) this.eHitSoundPriorityHH );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; 打ち分け時の再生音の優先順位(FTGroup)(0:Chip>Pad, 1:Pad>Chip)" );\r
+ sw.WriteLine( "HitSoundPriorityFT={0}", (int) this.eHitSoundPriorityFT );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; 打ち分け時の再生音の優先順位(CYGroup)(0:Chip>Pad, 1:Pad>Chip)" );\r
+ sw.WriteLine( "HitSoundPriorityCY={0}", (int) this.eHitSoundPriorityCY );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; ゲージゼロでSTAGE FAILED (0:OFF, 1:ON)" );\r
+ sw.WriteLine( "StageFailed={0}", this.bSTAGEFAILED有効 ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; AVIの表示(0:OFF, 1:ON)" );\r
+ sw.WriteLine( "AVI={0}", this.bAVI有効 ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; BGAの表示(0:OFF, 1:ON)" );\r
+ sw.WriteLine( "BGA={0}", this.bBGA有効 ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; フィルイン効果(0:OFF, 1:ON)" );\r
+ sw.WriteLine( "FillInEffect={0}", this.bフィルイン有効 ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; 曲選択からプレビュー音の再生までのウェイト[ms]" );\r
+ sw.WriteLine( "PreviewSoundWait={0}", this.n曲が選択されてからプレビュー音が鳴るまでのウェイトms );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; 曲選択からプレビュー画像表示までのウェイト[ms]" );\r
+ sw.WriteLine( "PreviewImageWait={0}", this.n曲が選択されてからプレビュー画像が表示開始されるまでのウェイトms );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; Waveの再生位置自動補正(0:OFF, 1:ON)" );\r
+ sw.WriteLine( "AdjustWaves={0}", this.bWave再生位置自動調整機能有効 ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; BGM の再生(0:OFF, 1:ON)" );\r
+ sw.WriteLine( "BGMSound={0}", this.bBGM音を発声する ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; ドラム打音の再生(0:OFF, 1:ON)" );\r
+ sw.WriteLine( "HitSound={0}", this.bドラム打音を発声する ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; フィルイン達成時の歓声の再生(0:OFF, 1:ON)" );\r
+ sw.WriteLine( "AudienceSound={0}", this.b歓声を発声する ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; 演奏記録(~.score.ini)の出力 (0:OFF, 1:ON)" );\r
+ sw.WriteLine( "SaveScoreIni={0}", this.bScoreIniを出力する ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; RANDOM SELECT で子BOXを検索対象に含める (0:OFF, 1:ON)" );\r
+ sw.WriteLine( "RandomFromSubBox={0}", this.bランダムセレクトで子BOXを検索対象とする ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; ドラム演奏時にドラム音を強調する (0:OFF, 1:ON)" );\r
+ sw.WriteLine( "SoundMonitorDrums={0}", this.b演奏音を強調する.Drums ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; ギター演奏時にギター音を強調する (0:OFF, 1:ON)" );\r
+ sw.WriteLine( "SoundMonitorGuitar={0}", this.b演奏音を強調する.Guitar ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; ベース演奏時にベース音を強調する (0:OFF, 1:ON)" );\r
+ sw.WriteLine( "SoundMonitorBass={0}", this.b演奏音を強調する.Bass ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; ドラムの表示可能な最小コンボ数(1~99999)" );\r
+ sw.WriteLine( "MinComboDrums={0}", this.n表示可能な最小コンボ数.Drums );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; ギターの表示可能な最小コンボ数(1~99999)" );\r
+ sw.WriteLine( "MinComboGuitar={0}", this.n表示可能な最小コンボ数.Guitar );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; ベースの表示可能な最小コンボ数(1~99999)" );\r
+ sw.WriteLine( "MinComboBass={0}", this.n表示可能な最小コンボ数.Bass );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; 演奏情報を表示する (0:OFF, 1:ON)" );\r
+ sw.WriteLine( "ShowDebugStatus={0}", this.b演奏情報を表示する ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; 選曲リストのフォント名" );\r
+ sw.WriteLine( "SelectListFontName={0}", this.str選曲リストフォント );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; 選曲リストのフォントのサイズ[dot]" );\r
+ sw.WriteLine( "SelectListFontSize={0}", this.n選曲リストフォントのサイズdot );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; 選曲リストのフォントを斜体にする (0:OFF, 1:ON)" );\r
+ sw.WriteLine( "SelectListFontItalic={0}", this.b選曲リストフォントを斜体にする ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; 選曲リストのフォントを太字にする (0:OFF, 1:ON)" );\r
+ sw.WriteLine( "SelectListFontBold={0}", this.b選曲リストフォントを太字にする ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; 打音の音量(0~100%)" );\r
+ sw.WriteLine( "ChipVolume={0}", this.n手動再生音量 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; 自動再生音の音量(0~100%)" );\r
+ sw.WriteLine( "AutoChipVolume={0}", this.n自動再生音量 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; ストイックモード(0:OFF, 1:ON)" );\r
+ sw.WriteLine( "StoicMode={0}", this.bストイックモード ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; シンバルフリーモード(0:OFF, 1:ON)" );\r
+ sw.WriteLine( "CymbalFree={0}", this.bシンバルフリー ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; バッファ入力モード(0:OFF, 1:ON)" );\r
+ sw.WriteLine( "BufferedInput={0}", this.bバッファ入力を行う ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; ハイハット入力切り捨て下限Velocity値(0~127)" );\r
+ sw.WriteLine( "HHVelocityMin={0}", this.nハイハット切り捨て下限Velocity );\r
+ sw.WriteLine();\r
+ sw.WriteLine( ";-------------------" );\r
+ sw.WriteLine( "[Log]" );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; Log出力(0:OFF, 1:ON)" );\r
+ sw.WriteLine( "OutputLog={0}", this.bログ出力 ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; 曲データ検索に関するLog出力(0:OFF, 1:ON)" );\r
+ sw.WriteLine( "TraceSongSearch={0}", this.bLog曲検索ログ出力 ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; 画像やサウンドの作成・解放に関するLog出力(0:OFF, 1:ON)" );\r
+ sw.WriteLine( "TraceCreatedDisposed={0}", this.bLog作成解放ログ出力 ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; DTX読み込み詳細に関するLog出力(0:OFF, 1:ON)" );\r
+ sw.WriteLine( "TraceDTXDetails={0}", this.bLogDTX詳細ログ出力 ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( ";-------------------" );\r
+ sw.WriteLine( "[PlayOption]" );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; DARKモード(0:OFF, 1:HALF, 2:FULL)" );\r
+ sw.WriteLine( "Dark={0}", (int) this.eDark );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; ドラムSUDDENモード(0:OFF, 1:ON)" );\r
+ sw.WriteLine( "DrumsSudden={0}", this.bSudden.Drums ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; ギターSUDDENモード(0:OFF, 1:ON)" );\r
+ sw.WriteLine( "GuitarSudden={0}", this.bSudden.Guitar ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; ベースSUDDENモード(0:OFF, 1:ON)" );\r
+ sw.WriteLine( "BassSudden={0}", this.bSudden.Bass ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; ドラムHIDDENモード(0:OFF, 1:ON)" );\r
+ sw.WriteLine( "DrumsHidden={0}", this.bHidden.Drums ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; ギターHIDDENモード(0:OFF, 1:ON)" );\r
+ sw.WriteLine( "GuitarHidden={0}", this.bHidden.Guitar ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; ベースHIDDENモード(0:OFF, 1:ON)" );\r
+ sw.WriteLine( "BassHidden={0}", this.bHidden.Bass ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; ドラムREVERSEモード(0:OFF, 1:ON)" );\r
+ sw.WriteLine( "DrumsReverse={0}", this.bReverse.Drums ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; ギターREVERSEモード(0:OFF, 1:ON)" );\r
+ sw.WriteLine( "GuitarReverse={0}", this.bReverse.Guitar ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; ベースREVERSEモード(0:OFF, 1:ON)" );\r
+ sw.WriteLine( "BassReverse={0}", this.bReverse.Bass ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; ギターRANDOMモード(0:OFF, 1:Random, 2:SuperRandom, 3:HyperRandom)" );\r
+ sw.WriteLine( "GuitarRandom={0}", (int) this.eRandom.Guitar );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; ベースRANDOMモード(0:OFF, 1:Random, 2:SuperRandom, 3:HyperRandom)" );\r
+ sw.WriteLine( "BassRandom={0}", (int) this.eRandom.Bass );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; ギターLIGHTモード(0:OFF, 1:ON)" );\r
+ sw.WriteLine( "GuitarLight={0}", this.bLight.Guitar ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; ベースLIGHTモード(0:OFF, 1:ON)" );\r
+ sw.WriteLine( "BassLight={0}", this.bLight.Bass ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; ギターLEFTモード(0:OFF, 1:ON)" );\r
+ sw.WriteLine( "GuitarLeft={0}", this.bLeft.Guitar ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; ベースLEFTモード(0:OFF, 1:ON)" );\r
+ sw.WriteLine( "BassLeft={0}", this.bLeft.Bass ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; ドラム判定文字表示位置(0:レーン上,1:判定ライン上,2:表示OFF)" );\r
+ sw.WriteLine( "DrumsPosition={0}", (int) this.判定文字表示位置.Drums );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; ギター判定文字表示位置(0:レーン上,1:判定ライン横,2:表示OFF)" );\r
+ sw.WriteLine( "GuitarPosition={0}", (int) this.判定文字表示位置.Guitar );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; ベース判定文字表示位置(0:レーン上,1:判定ライン横,2:表示OFF)" );\r
+ sw.WriteLine( "BassPosition={0}", (int) this.判定文字表示位置.Bass );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; ドラム譜面スクロール速度(0:x0.5, 1:x1.0, 2:x1.5,…,1999:x1000.0)" );\r
+ sw.WriteLine( "DrumsScrollSpeed={0}", this.n譜面スクロール速度.Drums );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; ギター譜面スクロール速度(0:x0.5, 1:x1.0, 2:x1.5,…,1999:x1000.0)" );\r
+ sw.WriteLine( "GuitarScrollSpeed={0}", this.n譜面スクロール速度.Guitar );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; ベース譜面スクロール速度(0:x0.5, 1:x1.0, 2:x1.5,…,1999:x1000.0)" );\r
+ sw.WriteLine( "BassScrollSpeed={0}", this.n譜面スクロール速度.Bass );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; 演奏速度(5~40)(→x5/20~x40/20)" );\r
+ sw.WriteLine( "PlaySpeed={0}", this.n演奏速度 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; ドラムCOMBO文字表示位置(0:左, 1:中, 2:右, 3:OFF)" );\r
+ sw.WriteLine( "ComboPosition={0}", (int) this.ドラムコンボ文字の表示位置 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( ";-------------------" );\r
+ sw.WriteLine( "[AutoPlay]" );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; 自動演奏(0:OFF, 1:ON)" );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; Drums" );\r
+ sw.WriteLine( "LC={0}", this.bAutoPlay.LC ? 1 : 0 );\r
+ sw.WriteLine( "HH={0}", this.bAutoPlay.HH ? 1 : 0 );\r
+ sw.WriteLine( "SD={0}", this.bAutoPlay.SD ? 1 : 0 );\r
+ sw.WriteLine( "BD={0}", this.bAutoPlay.BD ? 1 : 0 );\r
+ sw.WriteLine( "HT={0}", this.bAutoPlay.HT ? 1 : 0 );\r
+ sw.WriteLine( "LT={0}", this.bAutoPlay.LT ? 1 : 0 );\r
+ sw.WriteLine( "FT={0}", this.bAutoPlay.FT ? 1 : 0 );\r
+ sw.WriteLine( "CY={0}", this.bAutoPlay.CY ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; Guitar" );\r
+ sw.WriteLine( "Guitar={0}", this.bAutoPlay.Guitar ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; Bass" );\r
+ sw.WriteLine( "Bass={0}", this.bAutoPlay.Bass ? 1 : 0 );\r
+ sw.WriteLine();\r
+ sw.WriteLine( ";-------------------" );\r
+ sw.WriteLine( "[HitRange]" );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "; Perfect~Poor とみなされる範囲[ms]" );\r
+ sw.WriteLine( "Perfect={0}", this.nヒット範囲ms.Perfect );\r
+ sw.WriteLine( "Great={0}", this.nヒット範囲ms.Great );\r
+ sw.WriteLine( "Good={0}", this.nヒット範囲ms.Good );\r
+ sw.WriteLine( "Poor={0}", this.nヒット範囲ms.Poor );\r
+ sw.WriteLine();\r
+ sw.WriteLine( ";-------------------" );\r
+ sw.WriteLine( "[GUID]" );\r
+ sw.WriteLine();\r
+ foreach( KeyValuePair<int, string> pair in this.dicJoystick )\r
+ {\r
+ sw.WriteLine( "JoystickID={0},{1}", pair.Key, pair.Value );\r
+ }\r
+ sw.WriteLine();\r
+ sw.WriteLine( ";-------------------" );\r
+ sw.WriteLine( "; キーアサイン" );\r
+ sw.WriteLine( "; 項 目:Keyboard → 'K'+'0'+キーコード(10進数)" );\r
+ sw.WriteLine( "; Mouse → 'N'+'0'+ボタン番号(0~7)" );\r
+ sw.WriteLine( "; MIDI In → 'M'+デバイス番号1桁(0~9)+ノート番号(10進数)" );\r
+ sw.WriteLine( "; Joystick → 'J'+デバイス番号1桁(0~9)+ 0 ...... X減少(左)ボタン" );\r
+ sw.WriteLine( "; 1 ...... X増加(右)ボタン" );\r
+ sw.WriteLine( "; 2 ...... Y減少(上)ボタン" );\r
+ sw.WriteLine( "; 3 ...... Y増加(下)ボタン" );\r
+ sw.WriteLine( "; 4 ...... Z減少(前)ボタン" );\r
+ sw.WriteLine( "; 5 ...... Z増加(後)ボタン" );\r
+ sw.WriteLine( "; 6~133.. ボタン1~128" );\r
+ sw.WriteLine( "; これらの項目を 16 個まで指定可能(',' で区切って記述)。" );\r
+ sw.WriteLine( ";" );\r
+ sw.WriteLine( "; 表記例:HH=K044,M042,J16" );\r
+ sw.WriteLine( "; → HiHat を Keyboard の 44 ('Z'), MidiIn#0 の 42, JoyPad#1 の 6(ボタン1) に割当て" );\r
+ sw.WriteLine( ";" );\r
+ sw.WriteLine( "; ※Joystick のデバイス番号とデバイスとの関係は [GUID] セクションに記してあるものが有効。" );\r
+ sw.WriteLine( ";" );\r
+ sw.WriteLine();\r
+ sw.WriteLine( "[DrumsKeyAssign]" );\r
+ sw.WriteLine();\r
+ sw.Write( "HH=" );\r
+ this.tキーの書き出し( sw, this.KeyAssign.Drums.HH );\r
+ sw.WriteLine();\r
+ sw.Write( "SD=" );\r
+ this.tキーの書き出し( sw, this.KeyAssign.Drums.SD );\r
+ sw.WriteLine();\r
+ sw.Write( "BD=" );\r
+ this.tキーの書き出し( sw, this.KeyAssign.Drums.BD );\r
+ sw.WriteLine();\r
+ sw.Write( "HT=" );\r
+ this.tキーの書き出し( sw, this.KeyAssign.Drums.HT );\r
+ sw.WriteLine();\r
+ sw.Write( "LT=" );\r
+ this.tキーの書き出し( sw, this.KeyAssign.Drums.LT );\r
+ sw.WriteLine();\r
+ sw.Write( "FT=" );\r
+ this.tキーの書き出し( sw, this.KeyAssign.Drums.FT );\r
+ sw.WriteLine();\r
+ sw.Write( "CY=" );\r
+ this.tキーの書き出し( sw, this.KeyAssign.Drums.CY );\r
+ sw.WriteLine();\r
+ sw.Write( "HO=" );\r
+ this.tキーの書き出し( sw, this.KeyAssign.Drums.HHO );\r
+ sw.WriteLine();\r
+ sw.Write( "RD=" );\r
+ this.tキーの書き出し( sw, this.KeyAssign.Drums.RD );\r
+ sw.WriteLine();\r
+ sw.Write( "LC=" );\r
+ this.tキーの書き出し( sw, this.KeyAssign.Drums.LC );\r
+ sw.WriteLine();\r
+ sw.WriteLine();\r
+ sw.WriteLine( "[GuitarKeyAssign]" );\r
+ sw.WriteLine();\r
+ sw.Write( "R=" );\r
+ this.tキーの書き出し( sw, this.KeyAssign.Guitar.R );\r
+ sw.WriteLine();\r
+ sw.Write( "G=" );\r
+ this.tキーの書き出し( sw, this.KeyAssign.Guitar.G );\r
+ sw.WriteLine();\r
+ sw.Write( "B=" );\r
+ this.tキーの書き出し( sw, this.KeyAssign.Guitar.B );\r
+ sw.WriteLine();\r
+ sw.Write( "Pick=" );\r
+ this.tキーの書き出し( sw, this.KeyAssign.Guitar.Pick );\r
+ sw.WriteLine();\r
+ sw.Write( "Wail=" );\r
+ this.tキーの書き出し( sw, this.KeyAssign.Guitar.Wail );\r
+ sw.WriteLine();\r
+ sw.Write( "Decide=" );\r
+ this.tキーの書き出し( sw, this.KeyAssign.Guitar.Decide );\r
+ sw.WriteLine();\r
+ sw.Write( "Cancel=" );\r
+ this.tキーの書き出し( sw, this.KeyAssign.Guitar.Cancel );\r
+ sw.WriteLine();\r
+ sw.WriteLine();\r
+ sw.WriteLine( "[BassKeyAssign]" );\r
+ sw.WriteLine();\r
+ sw.Write( "R=" );\r
+ this.tキーの書き出し( sw, this.KeyAssign.Bass.R );\r
+ sw.WriteLine();\r
+ sw.Write( "G=" );\r
+ this.tキーの書き出し( sw, this.KeyAssign.Bass.G );\r
+ sw.WriteLine();\r
+ sw.Write( "B=" );\r
+ this.tキーの書き出し( sw, this.KeyAssign.Bass.B );\r
+ sw.WriteLine();\r
+ sw.Write( "Pick=" );\r
+ this.tキーの書き出し( sw, this.KeyAssign.Bass.Pick );\r
+ sw.WriteLine();\r
+ sw.Write( "Wail=" );\r
+ this.tキーの書き出し( sw, this.KeyAssign.Bass.Wail );\r
+ sw.WriteLine();\r
+ sw.Write( "Decide=" );\r
+ this.tキーの書き出し( sw, this.KeyAssign.Bass.Decide );\r
+ sw.WriteLine();\r
+ sw.Write( "Cancel=" );\r
+ this.tキーの書き出し( sw, this.KeyAssign.Bass.Cancel );\r
+ sw.WriteLine();\r
+ sw.WriteLine();\r
+ sw.Close();\r
+ }\r
+ public void t読み込み( string iniファイル名 )\r
+ {\r
+ this.ConfigIniファイル名 = iniファイル名;\r
+ this.bConfigIniが存在している = File.Exists( this.ConfigIniファイル名 );\r
+ if( this.bConfigIniが存在している )\r
+ {\r
+ string str;\r
+ this.tキーアサインを全部クリアする();\r
+ Eセクション種別 unknown = Eセクション種別.Unknown;\r
+ StreamReader reader = new StreamReader( this.ConfigIniファイル名, Encoding.GetEncoding( "shift-jis" ) );\r
+ while( ( str = reader.ReadLine() ) != null )\r
+ {\r
+ str = str.Replace( '\t', ' ' ).TrimStart( new char[] { '\t', ' ' } );\r
+ if( ( str.Length != 0 ) && ( str[ 0 ] != ';' ) )\r
+ {\r
+ try\r
+ {\r
+ string str3;\r
+ string str4;\r
+ if( str[ 0 ] == '[' )\r
+ {\r
+ #region [ セクションの変更 ]\r
+ //-----------------------------\r
+ StringBuilder builder = new StringBuilder( 0x20 );\r
+ int num = 1;\r
+ while( ( num < str.Length ) && ( str[ num ] != ']' ) )\r
+ {\r
+ builder.Append( str[ num++ ] );\r
+ }\r
+ string str2 = builder.ToString();\r
+ if( str2.Equals( "System" ) )\r
+ {\r
+ unknown = Eセクション種別.System;\r
+ }\r
+ else if( str2.Equals( "Log" ) )\r
+ {\r
+ unknown = Eセクション種別.Log;\r
+ }\r
+ else if( str2.Equals( "PlayOption" ) )\r
+ {\r
+ unknown = Eセクション種別.PlayOption;\r
+ }\r
+ else if( str2.Equals( "AutoPlay" ) )\r
+ {\r
+ unknown = Eセクション種別.AutoPlay;\r
+ }\r
+ else if( str2.Equals( "HitRange" ) )\r
+ {\r
+ unknown = Eセクション種別.HitRange;\r
+ }\r
+ else if( str2.Equals( "GUID" ) )\r
+ {\r
+ unknown = Eセクション種別.GUID;\r
+ }\r
+ else if( str2.Equals( "DrumsKeyAssign" ) )\r
+ {\r
+ unknown = Eセクション種別.DrumsKeyAssign;\r
+ }\r
+ else if( str2.Equals( "GuitarKeyAssign" ) )\r
+ {\r
+ unknown = Eセクション種別.GuitarKeyAssign;\r
+ }\r
+ else if( str2.Equals( "BassKeyAssign" ) )\r
+ {\r
+ unknown = Eセクション種別.BassKeyAssign;\r
+ }\r
+ else\r
+ {\r
+ unknown = Eセクション種別.Unknown;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ }\r
+ else\r
+ {\r
+ string[] strArray = str.Split( new char[] { '=' } );\r
+ if( strArray.Length == 2 )\r
+ {\r
+ str3 = strArray[ 0 ].Trim();\r
+ str4 = strArray[ 1 ].Trim();\r
+ switch( unknown )\r
+ {\r
+ #region [ [System] ]\r
+ //-----------------------------\r
+ case Eセクション種別.System:\r
+ {\r
+ if( str3.Equals( "Version" ) )\r
+ {\r
+ this.strDTXManiaのバージョン = str4;\r
+ }\r
+ else if( str3.Equals( "DTXPath" ) )\r
+ {\r
+ this.str曲データ検索パス = str4;\r
+ }\r
+ else if( str3.Equals( "FullScreen" ) )\r
+ {\r
+ this.b全画面モード = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "VSyncWait" ) )\r
+ {\r
+ this.b垂直帰線待ちを行う = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "Guitar" ) )\r
+ {\r
+ this.bGuitar有効 = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "Drums" ) )\r
+ {\r
+ this.bDrums有効 = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "BGAlpha" ) )\r
+ {\r
+ this.n背景の透過度 = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 0xff, this.n背景の透過度 );\r
+ }\r
+ else if( str3.Equals( "DamageLevel" ) )\r
+ {\r
+ this.eダメージレベル = (Eダメージレベル) C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 2, (int) this.eダメージレベル );\r
+ }\r
+ else if( str3.Equals( "HHGroup" ) )\r
+ {\r
+ this.eHHGroup = (EHHGroup) C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 3, (int) this.eHHGroup );\r
+ }\r
+ else if( str3.Equals( "FTGroup" ) )\r
+ {\r
+ this.eFTGroup = (EFTGroup) C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 2, (int) this.eFTGroup );\r
+ }\r
+ else if( str3.Equals( "CYGroup" ) )\r
+ {\r
+ this.eCYGroup = (ECYGroup) C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 2, (int) this.eCYGroup );\r
+ }\r
+ else if( str3.Equals( "HitSoundPriorityHH" ) )\r
+ {\r
+ this.eHitSoundPriorityHH = (E打ち分け時の再生の優先順位) C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 1, (int) this.eHitSoundPriorityHH );\r
+ }\r
+ else if( str3.Equals( "HitSoundPriorityFT" ) )\r
+ {\r
+ this.eHitSoundPriorityFT = (E打ち分け時の再生の優先順位) C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 1, (int) this.eHitSoundPriorityFT );\r
+ }\r
+ else if( str3.Equals( "HitSoundPriorityCY" ) )\r
+ {\r
+ this.eHitSoundPriorityCY = (E打ち分け時の再生の優先順位) C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 1, (int) this.eHitSoundPriorityCY );\r
+ }\r
+ else if( str3.Equals( "StageFailed" ) )\r
+ {\r
+ this.bSTAGEFAILED有効 = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "AVI" ) )\r
+ {\r
+ this.bAVI有効 = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "BGA" ) )\r
+ {\r
+ this.bBGA有効 = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "FillInEffect" ) )\r
+ {\r
+ this.bフィルイン有効 = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "PreviewSoundWait" ) )\r
+ {\r
+ this.n曲が選択されてからプレビュー音が鳴るまでのウェイトms = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 0x5f5e0ff, this.n曲が選択されてからプレビュー音が鳴るまでのウェイトms );\r
+ }\r
+ else if( str3.Equals( "PreviewImageWait" ) )\r
+ {\r
+ this.n曲が選択されてからプレビュー画像が表示開始されるまでのウェイトms = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 0x5f5e0ff, this.n曲が選択されてからプレビュー画像が表示開始されるまでのウェイトms );\r
+ }\r
+ else if( str3.Equals( "AdjustWaves" ) )\r
+ {\r
+ this.bWave再生位置自動調整機能有効 = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "BGMSound" ) )\r
+ {\r
+ this.bBGM音を発声する = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "HitSound" ) )\r
+ {\r
+ this.bドラム打音を発声する = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "AudienceSound" ) )\r
+ {\r
+ this.b歓声を発声する = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "SaveScoreIni" ) )\r
+ {\r
+ this.bScoreIniを出力する = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "RandomFromSubBox" ) )\r
+ {\r
+ this.bランダムセレクトで子BOXを検索対象とする = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "SoundMonitorDrums" ) )\r
+ {\r
+ this.b演奏音を強調する.Drums = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "SoundMonitorGuitar" ) )\r
+ {\r
+ this.b演奏音を強調する.Guitar = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "SoundMonitorBass" ) )\r
+ {\r
+ this.b演奏音を強調する.Bass = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "MinComboDrums" ) )\r
+ {\r
+ this.n表示可能な最小コンボ数.Drums = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 1, 0x1869f, this.n表示可能な最小コンボ数.Drums );\r
+ }\r
+ else if( str3.Equals( "MinComboGuitar" ) )\r
+ {\r
+ this.n表示可能な最小コンボ数.Guitar = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 1, 0x1869f, this.n表示可能な最小コンボ数.Guitar );\r
+ }\r
+ else if( str3.Equals( "MinComboBass" ) )\r
+ {\r
+ this.n表示可能な最小コンボ数.Bass = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 1, 0x1869f, this.n表示可能な最小コンボ数.Bass );\r
+ }\r
+ else if( str3.Equals( "ShowDebugStatus" ) )\r
+ {\r
+ this.b演奏情報を表示する = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "SelectListFontName" ) )\r
+ {\r
+ this.str選曲リストフォント = str4;\r
+ }\r
+ else if( str3.Equals( "SelectListFontSize" ) )\r
+ {\r
+ this.n選曲リストフォントのサイズdot = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 1, 0x3e7, this.n選曲リストフォントのサイズdot );\r
+ }\r
+ else if( str3.Equals( "SelectListFontItalic" ) )\r
+ {\r
+ this.b選曲リストフォントを斜体にする = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "SelectListFontBold" ) )\r
+ {\r
+ this.b選曲リストフォントを太字にする = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "ChipVolume" ) )\r
+ {\r
+ this.n手動再生音量 = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 100, this.n手動再生音量 );\r
+ }\r
+ else if( str3.Equals( "AutoChipVolume" ) )\r
+ {\r
+ this.n自動再生音量 = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 100, this.n自動再生音量 );\r
+ }\r
+ else if( str3.Equals( "StoicMode" ) )\r
+ {\r
+ this.bストイックモード = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "CymbalFree" ) )\r
+ {\r
+ this.bシンバルフリー = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "BufferedInput" ) )\r
+ {\r
+ this.bバッファ入力を行う = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "HHVelocityMin" ) )\r
+ {\r
+ this.nハイハット切り捨て下限Velocity = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 127, this.nハイハット切り捨て下限Velocity );\r
+ }\r
+ continue;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ #region [ [Log] ]\r
+ //-----------------------------\r
+ case Eセクション種別.Log:\r
+ {\r
+ if( str3.Equals( "OutputLog" ) )\r
+ {\r
+ this.bログ出力 = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "TraceCreatedDisposed" ) )\r
+ {\r
+ this.bLog作成解放ログ出力 = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "TraceDTXDetails" ) )\r
+ {\r
+ this.bLogDTX詳細ログ出力 = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "TraceSongSearch" ) )\r
+ {\r
+ this.bLog曲検索ログ出力 = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ continue;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ #region [ [PlayOption] ]\r
+ //-----------------------------\r
+ case Eセクション種別.PlayOption:\r
+ {\r
+ if( str3.Equals( "Dark" ) )\r
+ {\r
+ this.eDark = (Eダークモード) C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 2, (int) this.eDark );\r
+ }\r
+ else if( str3.Equals( "DrumsTight" ) )\r
+ {\r
+ this.bTight = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "DrumsSudden" ) )\r
+ {\r
+ this.bSudden.Drums = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "GuitarSudden" ) )\r
+ {\r
+ this.bSudden.Guitar = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "BassSudden" ) )\r
+ {\r
+ this.bSudden.Bass = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "DrumsHidden" ) )\r
+ {\r
+ this.bHidden.Drums = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "GuitarHidden" ) )\r
+ {\r
+ this.bHidden.Guitar = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "BassHidden" ) )\r
+ {\r
+ this.bHidden.Bass = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "DrumsReverse" ) )\r
+ {\r
+ this.bReverse.Drums = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "GuitarReverse" ) )\r
+ {\r
+ this.bReverse.Guitar = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "BassReverse" ) )\r
+ {\r
+ this.bReverse.Bass = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "GuitarRandom" ) )\r
+ {\r
+ this.eRandom.Guitar = (Eランダムモード) C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 3, (int) this.eRandom.Guitar );\r
+ }\r
+ else if( str3.Equals( "BassRandom" ) )\r
+ {\r
+ this.eRandom.Bass = (Eランダムモード) C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 3, (int) this.eRandom.Bass );\r
+ }\r
+ else if( str3.Equals( "GuitarLight" ) )\r
+ {\r
+ this.bLight.Guitar = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "BassLight" ) )\r
+ {\r
+ this.bLight.Bass = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "GuitarLeft" ) )\r
+ {\r
+ this.bLeft.Guitar = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "BassLeft" ) )\r
+ {\r
+ this.bLeft.Bass = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "DrumsPosition" ) )\r
+ {\r
+ this.判定文字表示位置.Drums = (E判定文字表示位置) C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 2, (int) this.判定文字表示位置.Drums );\r
+ }\r
+ else if( str3.Equals( "GuitarPosition" ) )\r
+ {\r
+ this.判定文字表示位置.Guitar = (E判定文字表示位置) C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 2, (int) this.判定文字表示位置.Guitar );\r
+ }\r
+ else if( str3.Equals( "BassPosition" ) )\r
+ {\r
+ this.判定文字表示位置.Bass = (E判定文字表示位置) C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 2, (int) this.判定文字表示位置.Bass );\r
+ }\r
+ else if( str3.Equals( "DrumsScrollSpeed" ) )\r
+ {\r
+ this.n譜面スクロール速度.Drums = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 0x7cf, this.n譜面スクロール速度.Drums );\r
+ }\r
+ else if( str3.Equals( "GuitarScrollSpeed" ) )\r
+ {\r
+ this.n譜面スクロール速度.Guitar = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 0x7cf, this.n譜面スクロール速度.Guitar );\r
+ }\r
+ else if( str3.Equals( "BassScrollSpeed" ) )\r
+ {\r
+ this.n譜面スクロール速度.Bass = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 0x7cf, this.n譜面スクロール速度.Bass );\r
+ }\r
+ else if( str3.Equals( "PlaySpeed" ) )\r
+ {\r
+ this.n演奏速度 = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 5, 40, this.n演奏速度 );\r
+ }\r
+ else if( str3.Equals( "ComboPosition" ) )\r
+ {\r
+ this.ドラムコンボ文字の表示位置 = (Eドラムコンボ文字の表示位置) C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 3, (int) this.ドラムコンボ文字の表示位置 );\r
+ }\r
+ continue;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ #region [ [AutoPlay] ]\r
+ //-----------------------------\r
+ case Eセクション種別.AutoPlay:\r
+ {\r
+ if( str3.Equals( "LC" ) )\r
+ {\r
+ this.bAutoPlay.LC = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ if( str3.Equals( "HH" ) )\r
+ {\r
+ this.bAutoPlay.HH = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "SD" ) )\r
+ {\r
+ this.bAutoPlay.SD = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "BD" ) )\r
+ {\r
+ this.bAutoPlay.BD = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "HT" ) )\r
+ {\r
+ this.bAutoPlay.HT = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "LT" ) )\r
+ {\r
+ this.bAutoPlay.LT = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "FT" ) )\r
+ {\r
+ this.bAutoPlay.FT = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "CY" ) )\r
+ {\r
+ this.bAutoPlay.CY = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "Guitar" ) )\r
+ {\r
+ this.bAutoPlay.Guitar = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ else if( str3.Equals( "Bass" ) )\r
+ {\r
+ this.bAutoPlay.Bass = C変換.bONorOFF( str4[ 0 ] );\r
+ }\r
+ continue;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ #region [ [HitRange] ]\r
+ //-----------------------------\r
+ case Eセクション種別.HitRange:\r
+ {\r
+ if( str3.Equals( "Perfect" ) )\r
+ {\r
+ this.nヒット範囲ms.Perfect = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 0x3e7, this.nヒット範囲ms.Perfect );\r
+ }\r
+ else if( str3.Equals( "Great" ) )\r
+ {\r
+ this.nヒット範囲ms.Great = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 0x3e7, this.nヒット範囲ms.Great );\r
+ }\r
+ else if( str3.Equals( "Good" ) )\r
+ {\r
+ this.nヒット範囲ms.Good = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 0x3e7, this.nヒット範囲ms.Good );\r
+ }\r
+ else if( str3.Equals( "Poor" ) )\r
+ {\r
+ this.nヒット範囲ms.Poor = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 0x3e7, this.nヒット範囲ms.Poor );\r
+ }\r
+ continue;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ #region [ [GUID] ]\r
+ //-----------------------------\r
+ case Eセクション種別.GUID:\r
+ {\r
+ if( str3.Equals( "JoystickID" ) )\r
+ {\r
+ this.tJoystickIDの取得( str4 );\r
+ }\r
+ continue;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ #region [ [DrumsKeyAssign] ]\r
+ //-----------------------------\r
+ case Eセクション種別.DrumsKeyAssign:\r
+ {\r
+ if( str3.Equals( "HH" ) )\r
+ {\r
+ this.tキーの読み出しと設定( str4, this.KeyAssign.Drums.HH );\r
+ }\r
+ else if( str3.Equals( "SD" ) )\r
+ {\r
+ this.tキーの読み出しと設定( str4, this.KeyAssign.Drums.SD );\r
+ }\r
+ else if( str3.Equals( "BD" ) )\r
+ {\r
+ this.tキーの読み出しと設定( str4, this.KeyAssign.Drums.BD );\r
+ }\r
+ else if( str3.Equals( "HT" ) )\r
+ {\r
+ this.tキーの読み出しと設定( str4, this.KeyAssign.Drums.HT );\r
+ }\r
+ else if( str3.Equals( "LT" ) )\r
+ {\r
+ this.tキーの読み出しと設定( str4, this.KeyAssign.Drums.LT );\r
+ }\r
+ else if( str3.Equals( "FT" ) )\r
+ {\r
+ this.tキーの読み出しと設定( str4, this.KeyAssign.Drums.FT );\r
+ }\r
+ else if( str3.Equals( "CY" ) )\r
+ {\r
+ this.tキーの読み出しと設定( str4, this.KeyAssign.Drums.CY );\r
+ }\r
+ else if( str3.Equals( "HO" ) )\r
+ {\r
+ this.tキーの読み出しと設定( str4, this.KeyAssign.Drums.HHO );\r
+ }\r
+ else if( str3.Equals( "RD" ) )\r
+ {\r
+ this.tキーの読み出しと設定( str4, this.KeyAssign.Drums.RD );\r
+ }\r
+ else if( str3.Equals( "LC" ) )\r
+ {\r
+ this.tキーの読み出しと設定( str4, this.KeyAssign.Drums.LC );\r
+ }\r
+ continue;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ #region [ GuitarKeyAssign ]\r
+ //-----------------------------\r
+ case Eセクション種別.GuitarKeyAssign:\r
+ {\r
+ if( str3.Equals( "R" ) )\r
+ {\r
+ this.tキーの読み出しと設定( str4, this.KeyAssign.Guitar.R );\r
+ }\r
+ else if( str3.Equals( "G" ) )\r
+ {\r
+ this.tキーの読み出しと設定( str4, this.KeyAssign.Guitar.G );\r
+ }\r
+ else if( str3.Equals( "B" ) )\r
+ {\r
+ this.tキーの読み出しと設定( str4, this.KeyAssign.Guitar.B );\r
+ }\r
+ else if( str3.Equals( "Pick" ) )\r
+ {\r
+ this.tキーの読み出しと設定( str4, this.KeyAssign.Guitar.Pick );\r
+ }\r
+ else if( str3.Equals( "Wail" ) )\r
+ {\r
+ this.tキーの読み出しと設定( str4, this.KeyAssign.Guitar.Wail );\r
+ }\r
+ else if( str3.Equals( "Decide" ) )\r
+ {\r
+ this.tキーの読み出しと設定( str4, this.KeyAssign.Guitar.Decide );\r
+ }\r
+ else if( str3.Equals( "Cancel" ) )\r
+ {\r
+ this.tキーの読み出しと設定( str4, this.KeyAssign.Guitar.Cancel );\r
+ }\r
+ continue;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ #region [ [BassKeyAssign ]\r
+ //-----------------------------\r
+ case Eセクション種別.BassKeyAssign:\r
+ {\r
+ if( str3.Equals( "R" ) )\r
+ {\r
+ this.tキーの読み出しと設定( str4, this.KeyAssign.Bass.R );\r
+ }\r
+ else if( str3.Equals( "G" ) )\r
+ {\r
+ this.tキーの読み出しと設定( str4, this.KeyAssign.Bass.G );\r
+ }\r
+ else if( str3.Equals( "B" ) )\r
+ {\r
+ this.tキーの読み出しと設定( str4, this.KeyAssign.Bass.B );\r
+ }\r
+ else if( str3.Equals( "Pick" ) )\r
+ {\r
+ this.tキーの読み出しと設定( str4, this.KeyAssign.Bass.Pick );\r
+ }\r
+ else if( str3.Equals( "Wail" ) )\r
+ {\r
+ this.tキーの読み出しと設定( str4, this.KeyAssign.Bass.Wail );\r
+ }\r
+ else if( str3.Equals( "Decide" ) )\r
+ {\r
+ this.tキーの読み出しと設定( str4, this.KeyAssign.Bass.Decide );\r
+ }\r
+ else if( str3.Equals( "Cancel" ) )\r
+ {\r
+ this.tキーの読み出しと設定( str4, this.KeyAssign.Bass.Cancel );\r
+ }\r
+ continue;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ }\r
+ }\r
+ }\r
+ continue;\r
+ }\r
+ catch( Exception exception )\r
+ {\r
+ Trace.TraceError( exception.Message );\r
+ continue;\r
+ }\r
+ }\r
+ }\r
+ CDTXVersion version = new CDTXVersion( this.strDTXManiaのバージョン );\r
+ if( version.n整数部 <= 0x45 )\r
+ {\r
+ this.tデフォルトのキーアサインに設定する();\r
+ }\r
+ }\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private enum Eセクション種別\r
+ {\r
+ Unknown,\r
+ System,\r
+ Log,\r
+ PlayOption,\r
+ AutoPlay,\r
+ HitRange,\r
+ GUID,\r
+ DrumsKeyAssign,\r
+ GuitarKeyAssign,\r
+ BassKeyAssign\r
+ }\r
+\r
+ private bool _bDrums有効;\r
+ private bool _bGuitar有効;\r
+ private bool bConfigIniが存在している;\r
+ private string ConfigIniファイル名;\r
+\r
+ private void tJoystickIDの取得( string strキー記述 )\r
+ {\r
+ string[] strArray = strキー記述.Split( new char[] { ',' } );\r
+ if( strArray.Length >= 2 )\r
+ {\r
+ int result = 0;\r
+ if( ( int.TryParse( strArray[ 0 ], out result ) && ( result >= 0 ) ) && ( result <= 9 ) )\r
+ {\r
+ if( this.dicJoystick.ContainsKey( result ) )\r
+ {\r
+ this.dicJoystick.Remove( result );\r
+ }\r
+ this.dicJoystick.Add( result, strArray[ 1 ] );\r
+ }\r
+ }\r
+ }\r
+ private void tキーアサインを全部クリアする()\r
+ {\r
+ this.KeyAssign = new CKeyAssign();\r
+ for( int i = 0; i < 3; i++ )\r
+ {\r
+ for( int j = 0; j < 10; j++ )\r
+ {\r
+ this.KeyAssign[ i ][ j ] = new CKeyAssign.STKEYASSIGN[ 0x10 ];\r
+ for( int k = 0; k < 0x10; k++ )\r
+ {\r
+ this.KeyAssign[ i ][ j ][ k ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ private void tキーの書き出し( StreamWriter sw, CKeyAssign.STKEYASSIGN[] assign )\r
+ {\r
+ bool flag = true;\r
+ for( int i = 0; i < 0x10; i++ )\r
+ {\r
+ if( assign[ i ].入力デバイス == E入力デバイス.不明 )\r
+ {\r
+ continue;\r
+ }\r
+ if( !flag )\r
+ {\r
+ sw.Write( ',' );\r
+ }\r
+ flag = false;\r
+ switch( assign[ i ].入力デバイス )\r
+ {\r
+ case E入力デバイス.キーボード:\r
+ sw.Write( 'K' );\r
+ break;\r
+\r
+ case E入力デバイス.MIDI入力:\r
+ sw.Write( 'M' );\r
+ break;\r
+\r
+ case E入力デバイス.ジョイパッド:\r
+ sw.Write( 'J' );\r
+ break;\r
+\r
+ case E入力デバイス.マウス:\r
+ sw.Write( 'N' );\r
+ break;\r
+ }\r
+ sw.Write( "{0}{1}", assign[ i ].ID, assign[ i ].コード );\r
+ }\r
+ }\r
+ private void tキーの読み出しと設定( string strキー記述, CKeyAssign.STKEYASSIGN[] assign )\r
+ {\r
+ string[] strArray = strキー記述.Split( new char[] { ',' } );\r
+ for( int i = 0; ( i < strArray.Length ) && ( i < 0x10 ); i++ )\r
+ {\r
+ E入力デバイス e入力デバイス;\r
+ int num2;\r
+ int num3;\r
+ string str = strArray[ i ].Trim().ToUpper();\r
+ if( str.Length >= 3 )\r
+ {\r
+ e入力デバイス = E入力デバイス.不明;\r
+ switch( str[ 0 ] )\r
+ {\r
+ case 'J':\r
+ e入力デバイス = E入力デバイス.ジョイパッド;\r
+ goto Label_0071;\r
+\r
+ case 'K':\r
+ e入力デバイス = E入力デバイス.キーボード;\r
+ goto Label_0071;\r
+\r
+ case 'L':\r
+ {\r
+ continue;\r
+ }\r
+ case 'M':\r
+ e入力デバイス = E入力デバイス.MIDI入力;\r
+ goto Label_0071;\r
+\r
+ case 'N':\r
+ e入力デバイス = E入力デバイス.マウス;\r
+ goto Label_0071;\r
+ }\r
+ }\r
+ continue;\r
+ Label_0071:\r
+ num2 = "0123456789".IndexOf( str[ 1 ] );\r
+ if( ( ( num2 >= 0 ) && int.TryParse( str.Substring( 2 ), out num3 ) ) && ( ( num3 >= 0 ) && ( num3 <= 0xff ) ) )\r
+ {\r
+ this.t指定した入力が既にアサイン済みである場合はそれを全削除する( e入力デバイス, num2, num3 );\r
+ assign[ i ].入力デバイス = e入力デバイス;\r
+ assign[ i ].ID = num2;\r
+ assign[ i ].コード = num3;\r
+ }\r
+ }\r
+ }\r
+ private void tデフォルトのキーアサインに設定する()\r
+ {\r
+ this.tキーアサインを全部クリアする();\r
+ CKeyAssign.STKEYASSIGN[] stkeyassignArray = new CKeyAssign.STKEYASSIGN[ 0x10 ];\r
+ CKeyAssign.STKEYASSIGN stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign = stkeyassign63;\r
+ stkeyassign.入力デバイス = E入力デバイス.キーボード;\r
+ stkeyassign.ID = 0;\r
+ stkeyassign.コード = 0x23;\r
+ stkeyassignArray[ 0 ] = stkeyassign;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign2 = stkeyassign63;\r
+ stkeyassign2.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign2.ID = 0;\r
+ stkeyassign2.コード = 0x2a;\r
+ stkeyassignArray[ 1 ] = stkeyassign2;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign3 = stkeyassign63;\r
+ stkeyassign3.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign3.ID = 0;\r
+ stkeyassign3.コード = 0x5d;\r
+ stkeyassignArray[ 2 ] = stkeyassign3;\r
+ stkeyassignArray[ 3 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 4 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 5 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 6 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 7 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 8 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 9 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 10 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 11 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 12 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 13 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 14 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 15 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ this.KeyAssign.Drums.HH = stkeyassignArray;\r
+ stkeyassignArray = new CKeyAssign.STKEYASSIGN[ 0x10 ];\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign4 = stkeyassign63;\r
+ stkeyassign4.入力デバイス = E入力デバイス.キーボード;\r
+ stkeyassign4.ID = 0;\r
+ stkeyassign4.コード = 0x21;\r
+ stkeyassignArray[ 0 ] = stkeyassign4;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign5 = stkeyassign63;\r
+ stkeyassign5.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign5.ID = 0;\r
+ stkeyassign5.コード = 0x19;\r
+ stkeyassignArray[ 1 ] = stkeyassign5;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign6 = stkeyassign63;\r
+ stkeyassign6.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign6.ID = 0;\r
+ stkeyassign6.コード = 0x1a;\r
+ stkeyassignArray[ 2 ] = stkeyassign6;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign7 = stkeyassign63;\r
+ stkeyassign7.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign7.ID = 0;\r
+ stkeyassign7.コード = 0x1b;\r
+ stkeyassignArray[ 3 ] = stkeyassign7;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign8 = stkeyassign63;\r
+ stkeyassign8.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign8.ID = 0;\r
+ stkeyassign8.コード = 0x1c;\r
+ stkeyassignArray[ 4 ] = stkeyassign8;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign9 = stkeyassign63;\r
+ stkeyassign9.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign9.ID = 0;\r
+ stkeyassign9.コード = 0x1d;\r
+ stkeyassignArray[ 5 ] = stkeyassign9;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign10 = stkeyassign63;\r
+ stkeyassign10.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign10.ID = 0;\r
+ stkeyassign10.コード = 0x1f;\r
+ stkeyassignArray[ 6 ] = stkeyassign10;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign11 = stkeyassign63;\r
+ stkeyassign11.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign11.ID = 0;\r
+ stkeyassign11.コード = 0x20;\r
+ stkeyassignArray[ 7 ] = stkeyassign11;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign12 = stkeyassign63;\r
+ stkeyassign12.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign12.ID = 0;\r
+ stkeyassign12.コード = 0x22;\r
+ stkeyassignArray[ 8 ] = stkeyassign12;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign13 = stkeyassign63;\r
+ stkeyassign13.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign13.ID = 0;\r
+ stkeyassign13.コード = 0x25;\r
+ stkeyassignArray[ 9 ] = stkeyassign13;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign14 = stkeyassign63;\r
+ stkeyassign14.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign14.ID = 0;\r
+ stkeyassign14.コード = 0x26;\r
+ stkeyassignArray[ 10 ] = stkeyassign14;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign15 = stkeyassign63;\r
+ stkeyassign15.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign15.ID = 0;\r
+ stkeyassign15.コード = 40;\r
+ stkeyassignArray[ 11 ] = stkeyassign15;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign16 = stkeyassign63;\r
+ stkeyassign16.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign16.ID = 0;\r
+ stkeyassign16.コード = 0x71;\r
+ stkeyassignArray[ 12 ] = stkeyassign16;\r
+ stkeyassignArray[ 13 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 14 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 15 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ this.KeyAssign.Drums.SD = stkeyassignArray;\r
+ stkeyassignArray = new CKeyAssign.STKEYASSIGN[ 0x10 ];\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign17 = stkeyassign63;\r
+ stkeyassign17.入力デバイス = E入力デバイス.キーボード;\r
+ stkeyassign17.ID = 0;\r
+ stkeyassign17.コード = 12;\r
+ stkeyassignArray[ 0 ] = stkeyassign17;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign18 = stkeyassign63;\r
+ stkeyassign18.入力デバイス = E入力デバイス.キーボード;\r
+ stkeyassign18.ID = 0;\r
+ stkeyassign18.コード = 0x7e;\r
+ stkeyassignArray[ 1 ] = stkeyassign18;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign19 = stkeyassign63;\r
+ stkeyassign19.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign19.ID = 0;\r
+ stkeyassign19.コード = 0x21;\r
+ stkeyassignArray[ 2 ] = stkeyassign19;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign20 = stkeyassign63;\r
+ stkeyassign20.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign20.ID = 0;\r
+ stkeyassign20.コード = 0x23;\r
+ stkeyassignArray[ 3 ] = stkeyassign20;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign21 = stkeyassign63;\r
+ stkeyassign21.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign21.ID = 0;\r
+ stkeyassign21.コード = 0x24;\r
+ stkeyassignArray[ 4 ] = stkeyassign21;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign22 = stkeyassign63;\r
+ stkeyassign22.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign22.ID = 0;\r
+ stkeyassign22.コード = 0x70;\r
+ stkeyassignArray[ 5 ] = stkeyassign22;\r
+ stkeyassignArray[ 6 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 7 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 8 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 9 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 10 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 11 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 12 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 13 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 14 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 15 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ this.KeyAssign.Drums.BD = stkeyassignArray;\r
+ stkeyassignArray = new CKeyAssign.STKEYASSIGN[ 0x10 ];\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign23 = stkeyassign63;\r
+ stkeyassign23.入力デバイス = E入力デバイス.キーボード;\r
+ stkeyassign23.ID = 0;\r
+ stkeyassign23.コード = 0x1f;\r
+ stkeyassignArray[ 0 ] = stkeyassign23;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign24 = stkeyassign63;\r
+ stkeyassign24.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign24.ID = 0;\r
+ stkeyassign24.コード = 0x30;\r
+ stkeyassignArray[ 1 ] = stkeyassign24;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign25 = stkeyassign63;\r
+ stkeyassign25.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign25.ID = 0;\r
+ stkeyassign25.コード = 50;\r
+ stkeyassignArray[ 2 ] = stkeyassign25;\r
+ stkeyassignArray[ 3 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 4 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 5 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 6 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 7 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 8 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 9 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 10 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 11 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 12 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 13 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 14 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 15 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ this.KeyAssign.Drums.HT = stkeyassignArray;\r
+ stkeyassignArray = new CKeyAssign.STKEYASSIGN[ 0x10 ];\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign26 = stkeyassign63;\r
+ stkeyassign26.入力デバイス = E入力デバイス.キーボード;\r
+ stkeyassign26.ID = 0;\r
+ stkeyassign26.コード = 11;\r
+ stkeyassignArray[ 0 ] = stkeyassign26;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign27 = stkeyassign63;\r
+ stkeyassign27.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign27.ID = 0;\r
+ stkeyassign27.コード = 0x2f;\r
+ stkeyassignArray[ 1 ] = stkeyassign27;\r
+ stkeyassignArray[ 2 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 3 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 4 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 5 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 6 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 7 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 8 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 9 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 10 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 11 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 12 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 13 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 14 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 15 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ this.KeyAssign.Drums.LT = stkeyassignArray;\r
+ stkeyassignArray = new CKeyAssign.STKEYASSIGN[ 0x10 ];\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign28 = stkeyassign63;\r
+ stkeyassign28.入力デバイス = E入力デバイス.キーボード;\r
+ stkeyassign28.ID = 0;\r
+ stkeyassign28.コード = 0x17;\r
+ stkeyassignArray[ 0 ] = stkeyassign28;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign29 = stkeyassign63;\r
+ stkeyassign29.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign29.ID = 0;\r
+ stkeyassign29.コード = 0x29;\r
+ stkeyassignArray[ 1 ] = stkeyassign29;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign30 = stkeyassign63;\r
+ stkeyassign30.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign30.ID = 0;\r
+ stkeyassign30.コード = 0x2b;\r
+ stkeyassignArray[ 2 ] = stkeyassign30;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign31 = stkeyassign63;\r
+ stkeyassign31.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign31.ID = 0;\r
+ stkeyassign31.コード = 0x2d;\r
+ stkeyassignArray[ 3 ] = stkeyassign31;\r
+ stkeyassignArray[ 4 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 5 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 6 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 7 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 8 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 9 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 10 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 11 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 12 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 13 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 14 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 15 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ this.KeyAssign.Drums.FT = stkeyassignArray;\r
+ stkeyassignArray = new CKeyAssign.STKEYASSIGN[ 0x10 ];\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign32 = stkeyassign63;\r
+ stkeyassign32.入力デバイス = E入力デバイス.キーボード;\r
+ stkeyassign32.ID = 0;\r
+ stkeyassign32.コード = 0x16;\r
+ stkeyassignArray[ 0 ] = stkeyassign32;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign33 = stkeyassign63;\r
+ stkeyassign33.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign33.ID = 0;\r
+ stkeyassign33.コード = 0x31;\r
+ stkeyassignArray[ 1 ] = stkeyassign33;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign34 = stkeyassign63;\r
+ stkeyassign34.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign34.ID = 0;\r
+ stkeyassign34.コード = 0x34;\r
+ stkeyassignArray[ 2 ] = stkeyassign34;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign35 = stkeyassign63;\r
+ stkeyassign35.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign35.ID = 0;\r
+ stkeyassign35.コード = 0x37;\r
+ stkeyassignArray[ 3 ] = stkeyassign35;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign36 = stkeyassign63;\r
+ stkeyassign36.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign36.ID = 0;\r
+ stkeyassign36.コード = 0x39;\r
+ stkeyassignArray[ 4 ] = stkeyassign36;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign37 = stkeyassign63;\r
+ stkeyassign37.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign37.ID = 0;\r
+ stkeyassign37.コード = 0x5b;\r
+ stkeyassignArray[ 5 ] = stkeyassign37;\r
+ stkeyassignArray[ 6 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 7 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 8 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 9 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 10 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 11 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 12 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 13 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 14 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 15 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ this.KeyAssign.Drums.CY = stkeyassignArray;\r
+ stkeyassignArray = new CKeyAssign.STKEYASSIGN[ 0x10 ];\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign38 = stkeyassign63;\r
+ stkeyassign38.入力デバイス = E入力デバイス.キーボード;\r
+ stkeyassign38.ID = 0;\r
+ stkeyassign38.コード = 10;\r
+ stkeyassignArray[ 0 ] = stkeyassign38;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign39 = stkeyassign63;\r
+ stkeyassign39.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign39.ID = 0;\r
+ stkeyassign39.コード = 0x2e;\r
+ stkeyassignArray[ 1 ] = stkeyassign39;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign40 = stkeyassign63;\r
+ stkeyassign40.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign40.ID = 0;\r
+ stkeyassign40.コード = 0x5c;\r
+ stkeyassignArray[ 2 ] = stkeyassign40;\r
+ stkeyassignArray[ 3 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 4 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 5 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 6 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 7 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 8 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 9 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 10 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 11 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 12 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 13 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 14 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 15 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ this.KeyAssign.Drums.HHO = stkeyassignArray;\r
+ stkeyassignArray = new CKeyAssign.STKEYASSIGN[ 0x10 ];\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign41 = stkeyassign63;\r
+ stkeyassign41.入力デバイス = E入力デバイス.キーボード;\r
+ stkeyassign41.ID = 0;\r
+ stkeyassign41.コード = 20;\r
+ stkeyassignArray[ 0 ] = stkeyassign41;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign42 = stkeyassign63;\r
+ stkeyassign42.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign42.ID = 0;\r
+ stkeyassign42.コード = 0x33;\r
+ stkeyassignArray[ 1 ] = stkeyassign42;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign43 = stkeyassign63;\r
+ stkeyassign43.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign43.ID = 0;\r
+ stkeyassign43.コード = 0x35;\r
+ stkeyassignArray[ 2 ] = stkeyassign43;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign44 = stkeyassign63;\r
+ stkeyassign44.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign44.ID = 0;\r
+ stkeyassign44.コード = 0x3b;\r
+ stkeyassignArray[ 3 ] = stkeyassign44;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign45 = stkeyassign63;\r
+ stkeyassign45.入力デバイス = E入力デバイス.MIDI入力;\r
+ stkeyassign45.ID = 0;\r
+ stkeyassign45.コード = 0x59;\r
+ stkeyassignArray[ 4 ] = stkeyassign45;\r
+ stkeyassignArray[ 5 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 6 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 7 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 8 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 9 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 10 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 11 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 12 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 13 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 14 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 15 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ this.KeyAssign.Drums.RD = stkeyassignArray;\r
+ stkeyassignArray = new CKeyAssign.STKEYASSIGN[ 0x10 ];\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign46 = stkeyassign63;\r
+ stkeyassign46.入力デバイス = E入力デバイス.キーボード;\r
+ stkeyassign46.ID = 0;\r
+ stkeyassign46.コード = 0x1a;\r
+ stkeyassignArray[ 0 ] = stkeyassign46;\r
+ stkeyassignArray[ 1 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 2 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 3 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 4 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 5 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 6 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 7 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 8 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 9 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 10 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 11 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 12 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 13 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 14 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 15 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ this.KeyAssign.Drums.LC = stkeyassignArray;\r
+ stkeyassignArray = new CKeyAssign.STKEYASSIGN[ 0x10 ];\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign47 = stkeyassign63;\r
+ stkeyassign47.入力デバイス = E入力デバイス.キーボード;\r
+ stkeyassign47.ID = 0;\r
+ stkeyassign47.コード = 0x37;\r
+ stkeyassignArray[ 0 ] = stkeyassign47;\r
+ stkeyassignArray[ 1 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 2 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 3 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 4 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 5 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 6 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 7 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 8 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 9 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 10 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 11 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 12 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 13 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 14 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 15 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ this.KeyAssign.Guitar.R = stkeyassignArray;\r
+ stkeyassignArray = new CKeyAssign.STKEYASSIGN[ 0x10 ];\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign48 = stkeyassign63;\r
+ stkeyassign48.入力デバイス = E入力デバイス.キーボード;\r
+ stkeyassign48.ID = 0;\r
+ stkeyassign48.コード = 0x38;\r
+ stkeyassignArray[ 0 ] = stkeyassign48;\r
+ stkeyassignArray[ 1 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 2 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 3 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 4 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 5 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 6 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 7 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 8 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 9 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 10 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 11 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 12 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 13 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 14 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 15 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ this.KeyAssign.Guitar.G = stkeyassignArray;\r
+ stkeyassignArray = new CKeyAssign.STKEYASSIGN[ 0x10 ];\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign49 = stkeyassign63;\r
+ stkeyassign49.入力デバイス = E入力デバイス.キーボード;\r
+ stkeyassign49.ID = 0;\r
+ stkeyassign49.コード = 0x39;\r
+ stkeyassignArray[ 0 ] = stkeyassign49;\r
+ stkeyassignArray[ 1 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 2 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 3 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 4 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 5 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 6 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 7 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 8 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 9 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 10 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 11 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 12 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 13 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 14 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 15 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ this.KeyAssign.Guitar.B = stkeyassignArray;\r
+ stkeyassignArray = new CKeyAssign.STKEYASSIGN[ 0x10 ];\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign50 = stkeyassign63;\r
+ stkeyassign50.入力デバイス = E入力デバイス.キーボード;\r
+ stkeyassign50.ID = 0;\r
+ stkeyassign50.コード = 0x73;\r
+ stkeyassignArray[ 0 ] = stkeyassign50;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign51 = stkeyassign63;\r
+ stkeyassign51.入力デバイス = E入力デバイス.キーボード;\r
+ stkeyassign51.ID = 0;\r
+ stkeyassign51.コード = 0x2e;\r
+ stkeyassignArray[ 1 ] = stkeyassign51;\r
+ stkeyassignArray[ 2 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 3 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 4 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 5 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 6 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 7 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 8 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 9 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 10 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 11 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 12 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 13 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 14 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 15 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ this.KeyAssign.Guitar.Pick = stkeyassignArray;\r
+ stkeyassignArray = new CKeyAssign.STKEYASSIGN[ 0x10 ];\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign52 = stkeyassign63;\r
+ stkeyassign52.入力デバイス = E入力デバイス.キーボード;\r
+ stkeyassign52.ID = 0;\r
+ stkeyassign52.コード = 0x74;\r
+ stkeyassignArray[ 0 ] = stkeyassign52;\r
+ stkeyassignArray[ 1 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 2 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 3 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 4 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 5 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 6 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 7 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 8 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 9 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 10 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 11 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 12 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 13 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 14 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 15 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ this.KeyAssign.Guitar.Wail = stkeyassignArray;\r
+ stkeyassignArray = new CKeyAssign.STKEYASSIGN[ 0x10 ];\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign53 = stkeyassign63;\r
+ stkeyassign53.入力デバイス = E入力デバイス.キーボード;\r
+ stkeyassign53.ID = 0;\r
+ stkeyassign53.コード = 0x3d;\r
+ stkeyassignArray[ 0 ] = stkeyassign53;\r
+ stkeyassignArray[ 1 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 2 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 3 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 4 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 5 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 6 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 7 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 8 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 9 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 10 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 11 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 12 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 13 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 14 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 15 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ this.KeyAssign.Guitar.Cancel = stkeyassignArray;\r
+ stkeyassignArray = new CKeyAssign.STKEYASSIGN[ 0x10 ];\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign54 = stkeyassign63;\r
+ stkeyassign54.入力デバイス = E入力デバイス.キーボード;\r
+ stkeyassign54.ID = 0;\r
+ stkeyassign54.コード = 60;\r
+ stkeyassignArray[ 0 ] = stkeyassign54;\r
+ stkeyassignArray[ 1 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 2 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 3 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 4 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 5 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 6 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 7 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 8 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 9 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 10 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 11 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 12 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 13 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 14 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 15 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ this.KeyAssign.Guitar.Decide = stkeyassignArray;\r
+ stkeyassignArray = new CKeyAssign.STKEYASSIGN[] { new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ) };\r
+ this.KeyAssign.Guitar[ 7 ] = stkeyassignArray;\r
+ stkeyassignArray = new CKeyAssign.STKEYASSIGN[] { new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ) };\r
+ this.KeyAssign.Guitar[ 8 ] = stkeyassignArray;\r
+ stkeyassignArray = new CKeyAssign.STKEYASSIGN[] { new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ) };\r
+ this.KeyAssign.Guitar[ 9 ] = stkeyassignArray;\r
+ stkeyassignArray = new CKeyAssign.STKEYASSIGN[ 0x10 ];\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign55 = stkeyassign63;\r
+ stkeyassign55.入力デバイス = E入力デバイス.キーボード;\r
+ stkeyassign55.ID = 0;\r
+ stkeyassign55.コード = 90;\r
+ stkeyassignArray[ 0 ] = stkeyassign55;\r
+ stkeyassignArray[ 1 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 2 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 3 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 4 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 5 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 6 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 7 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 8 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 9 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 10 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 11 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 12 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 13 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 14 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 15 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ this.KeyAssign.Bass.R = stkeyassignArray;\r
+ stkeyassignArray = new CKeyAssign.STKEYASSIGN[ 0x10 ];\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign56 = stkeyassign63;\r
+ stkeyassign56.入力デバイス = E入力デバイス.キーボード;\r
+ stkeyassign56.ID = 0;\r
+ stkeyassign56.コード = 0x5b;\r
+ stkeyassignArray[ 0 ] = stkeyassign56;\r
+ stkeyassignArray[ 1 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 2 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 3 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 4 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 5 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 6 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 7 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 8 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 9 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 10 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 11 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 12 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 13 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 14 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 15 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ this.KeyAssign.Bass.G = stkeyassignArray;\r
+ stkeyassignArray = new CKeyAssign.STKEYASSIGN[ 0x10 ];\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign57 = stkeyassign63;\r
+ stkeyassign57.入力デバイス = E入力デバイス.キーボード;\r
+ stkeyassign57.ID = 0;\r
+ stkeyassign57.コード = 0x5c;\r
+ stkeyassignArray[ 0 ] = stkeyassign57;\r
+ stkeyassignArray[ 1 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 2 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 3 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 4 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 5 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 6 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 7 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 8 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 9 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 10 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 11 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 12 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 13 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 14 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 15 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ this.KeyAssign.Bass.B = stkeyassignArray;\r
+ stkeyassignArray = new CKeyAssign.STKEYASSIGN[ 0x10 ];\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign58 = stkeyassign63;\r
+ stkeyassign58.入力デバイス = E入力デバイス.キーボード;\r
+ stkeyassign58.ID = 0;\r
+ stkeyassign58.コード = 0x67;\r
+ stkeyassignArray[ 0 ] = stkeyassign58;\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign59 = stkeyassign63;\r
+ stkeyassign59.入力デバイス = E入力デバイス.キーボード;\r
+ stkeyassign59.ID = 0;\r
+ stkeyassign59.コード = 100;\r
+ stkeyassignArray[ 1 ] = stkeyassign59;\r
+ stkeyassignArray[ 2 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 3 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 4 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 5 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 6 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 7 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 8 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 9 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 10 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 11 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 12 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 13 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 14 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 15 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ this.KeyAssign.Bass.Pick = stkeyassignArray;\r
+ stkeyassignArray = new CKeyAssign.STKEYASSIGN[ 0x10 ];\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign60 = stkeyassign63;\r
+ stkeyassign60.入力デバイス = E入力デバイス.キーボード;\r
+ stkeyassign60.ID = 0;\r
+ stkeyassign60.コード = 0x59;\r
+ stkeyassignArray[ 0 ] = stkeyassign60;\r
+ stkeyassignArray[ 1 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 2 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 3 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 4 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 5 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 6 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 7 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 8 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 9 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 10 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 11 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 12 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 13 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 14 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 15 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ this.KeyAssign.Bass.Wail = stkeyassignArray;\r
+ stkeyassignArray = new CKeyAssign.STKEYASSIGN[ 0x10 ];\r
+ stkeyassign63 = new CKeyAssign.STKEYASSIGN();\r
+ CKeyAssign.STKEYASSIGN stkeyassign61 = stkeyassign63;\r
+ stkeyassign61.入力デバイス = E入力デバイス.キーボード;\r
+ stkeyassign61.ID = 0;\r
+ stkeyassign61.コード = 0x61;\r
+ stkeyassignArray[ 0 ] = stkeyassign61;\r
+ stkeyassignArray[ 1 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 2 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 3 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 4 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 5 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 6 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 7 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 8 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 9 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 10 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 11 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 12 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 13 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 14 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 15 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ this.KeyAssign.Bass.Cancel = stkeyassignArray;\r
+ stkeyassignArray = new CKeyAssign.STKEYASSIGN[ 0x10 ];\r
+ CKeyAssign.STKEYASSIGN stkeyassign62 = new CKeyAssign.STKEYASSIGN();\r
+ stkeyassign62.入力デバイス = E入力デバイス.キーボード;\r
+ stkeyassign62.ID = 0;\r
+ stkeyassign62.コード = 0x60;\r
+ stkeyassignArray[ 0 ] = stkeyassign62;\r
+ stkeyassignArray[ 1 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 2 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 3 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 4 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 5 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 6 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 7 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 8 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 9 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 10 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 11 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 12 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 13 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 14 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ stkeyassignArray[ 15 ] = new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 );\r
+ this.KeyAssign.Bass.Decide = stkeyassignArray;\r
+ stkeyassignArray = new CKeyAssign.STKEYASSIGN[] { new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ) };\r
+ this.KeyAssign.Bass[ 7 ] = stkeyassignArray;\r
+ stkeyassignArray = new CKeyAssign.STKEYASSIGN[] { new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ) };\r
+ this.KeyAssign.Bass[ 8 ] = stkeyassignArray;\r
+ stkeyassignArray = new CKeyAssign.STKEYASSIGN[] { new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ), new CKeyAssign.STKEYASSIGN( E入力デバイス.不明, 0, 0 ) };\r
+ this.KeyAssign.Bass[ 9 ] = stkeyassignArray;\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Windows.Forms;\r
+using System.Drawing;\r
+using System.Diagnostics;\r
+using System.Runtime.InteropServices;\r
+using System.IO;\r
+using SlimDX;\r
+using SlimDX.Direct3D9;\r
+using FDK;\r
+using SampleFramework;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CDTXMania : Game\r
+ {\r
+ // プロパティ\r
+\r
+ public static readonly string VERSION = "085(10xxxx)";\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
+ //public static readonly string D3DXDLL = "d3dx9_41.dll"; // March 2009\r
+\r
+ public static CDTXMania app\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+ public static C文字コンソール act文字コンソール\r
+ { \r
+ get;\r
+ private set;\r
+ }\r
+ public static bool bコンパクトモード\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+ public static CConfigIni ConfigIni\r
+ {\r
+ get; \r
+ private set;\r
+ }\r
+ public static CDTX DTX\r
+ {\r
+ get\r
+ {\r
+ return dtx;\r
+ }\r
+ set\r
+ {\r
+ if( ( dtx != null ) && ( app != null ) )\r
+ {\r
+ dtx.On非活性化();\r
+ app.listトップレベルActivities.Remove( dtx );\r
+ }\r
+ dtx = value;\r
+ if( ( dtx != null ) && ( app != null ) )\r
+ {\r
+ app.listトップレベルActivities.Add( dtx );\r
+ }\r
+ }\r
+ }\r
+ public static CFPS FPS\r
+ { \r
+ get; \r
+ private set;\r
+ }\r
+ public static CInput管理 Input管理 \r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+ public static int nPerfect範囲ms\r
+ {\r
+ get\r
+ {\r
+ if( stage選曲.r確定された曲 != null )\r
+ {\r
+ C曲リストノード c曲リストノード = stage選曲.r確定された曲.r親ノード;\r
+ if( ( ( c曲リストノード != null ) && ( c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.BOX ) ) && ( c曲リストノード.nPerfect範囲ms >= 0 ) )\r
+ {\r
+ return c曲リストノード.nPerfect範囲ms;\r
+ }\r
+ }\r
+ return ConfigIni.nヒット範囲ms.Perfect;\r
+ }\r
+ }\r
+ public static int nGreat範囲ms\r
+ {\r
+ get\r
+ {\r
+ if( stage選曲.r確定された曲 != null )\r
+ {\r
+ C曲リストノード c曲リストノード = stage選曲.r確定された曲.r親ノード;\r
+ if( ( ( c曲リストノード != null ) && ( c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.BOX ) ) && ( c曲リストノード.nGreat範囲ms >= 0 ) )\r
+ {\r
+ return c曲リストノード.nGreat範囲ms;\r
+ }\r
+ }\r
+ return ConfigIni.nヒット範囲ms.Great;\r
+ }\r
+ }\r
+ public static int nGood範囲ms\r
+ {\r
+ get\r
+ {\r
+ if( stage選曲.r確定された曲 != null )\r
+ {\r
+ C曲リストノード c曲リストノード = stage選曲.r確定された曲.r親ノード;\r
+ if( ( ( c曲リストノード != null ) && ( c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.BOX ) ) && ( c曲リストノード.nGood範囲ms >= 0 ) )\r
+ {\r
+ return c曲リストノード.nGood範囲ms;\r
+ }\r
+ }\r
+ return ConfigIni.nヒット範囲ms.Good;\r
+ }\r
+ }\r
+ public static int nPoor範囲ms\r
+ {\r
+ get\r
+ {\r
+ if( stage選曲.r確定された曲 != null )\r
+ {\r
+ C曲リストノード c曲リストノード = stage選曲.r確定された曲.r親ノード;\r
+ if( ( ( c曲リストノード != null ) && ( c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.BOX ) ) && ( c曲リストノード.nPoor範囲ms >= 0 ) )\r
+ {\r
+ return c曲リストノード.nPoor範囲ms;\r
+ }\r
+ }\r
+ return ConfigIni.nヒット範囲ms.Poor;\r
+ }\r
+ }\r
+ public static CPad Pad \r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+ public static Random Random\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+ public static CSkin Skin\r
+ {\r
+ get; \r
+ private set;\r
+ }\r
+ public static CSongs管理 Songs管理 \r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+ public static CSound管理 Sound管理\r
+ {\r
+ get; \r
+ private set;\r
+ }\r
+ public static CStage起動 stage起動 \r
+ {\r
+ get; \r
+ private set;\r
+ }\r
+ public static CStageタイトル stageタイトル\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+ public static CStageオプション stageオプション\r
+ { \r
+ get;\r
+ private set;\r
+ }\r
+ public static CStageコンフィグ stageコンフィグ \r
+ { \r
+ get; \r
+ private set;\r
+ }\r
+ public static CStage選曲 stage選曲\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+ public static CStage曲読み込み stage曲読み込み\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+ public static CStage演奏ギター画面 stage演奏ギター画面\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+ public static CStage演奏ドラム画面 stage演奏ドラム画面\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+ public static CStage結果 stage結果\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+ public static CStage終了 stage終了\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+ public static CStage r現在のステージ = null;\r
+ public static CStage r直前のステージ = null;\r
+ public static string strEXEのあるフォルダ \r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+ public static string strコンパクトモードファイル\r
+ { \r
+ get; \r
+ private set;\r
+ }\r
+ public static CTimer Timer\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+ public static Format TextureFormat = Format.A8R8G8B8;\r
+ internal static IPluginActivity act現在入力を占有中のプラグイン = null;\r
+ public bool bApplicationActive\r
+ {\r
+ get; \r
+ private set;\r
+ }\r
+ public bool b次のタイミングで垂直帰線同期切り替えを行う\r
+ {\r
+ get; \r
+ set;\r
+ }\r
+ public bool b次のタイミングで全画面・ウィンドウ切り替えを行う\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+ public Device Device\r
+ {\r
+ get { return base.GraphicsDeviceManager.Direct3D9.Device; }\r
+ }\r
+ public CPluginHost PluginHost\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+ public List<STPlugin> listプラグイン = new List<STPlugin>();\r
+ public struct STPlugin\r
+ {\r
+ public IPluginActivity plugin;\r
+ public string strプラグインフォルダ;\r
+ public string strアセンブリ簡易名;\r
+ public Version Version;\r
+ }\r
+ private static Size currentClientSize // #23510 2010.10.27 add yyagi to keep current window size\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public CDTXMania()\r
+ {\r
+ CDTXMania.app = this;\r
+ this.t起動処理();\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ public void t全画面・ウィンドウモード切り替え()\r
+ {\r
+ DeviceSettings settings = base.GraphicsDeviceManager.CurrentSettings.Clone();\r
+ if( ( ConfigIni != null ) && ( ConfigIni.bウィンドウモード != settings.Windowed ) )\r
+ {\r
+ settings.Windowed = ConfigIni.bウィンドウモード;\r
+ if (ConfigIni.bウィンドウモード == false) // #23510 2010.10.27 yyagi: backup current window size before going fullscreen mode\r
+ {\r
+ currentClientSize = this.Window.ClientSize;\r
+ }\r
+// base.GraphicsDeviceManager.ToggleFullScreen();\r
+ base.GraphicsDeviceManager.ChangeDevice( settings );\r
+ if (ConfigIni.bウィンドウモード == true) // #23510 2010.10.27 yyagi: to resume window size from backuped value\r
+ {\r
+ base.Window.ClientSize =\r
+ new Size(currentClientSize.Width, currentClientSize.Height);\r
+ } \r
+ }\r
+ }\r
+\r
+\r
+ // Game 実装\r
+\r
+ protected override void Initialize()\r
+ {\r
+ if( this.listトップレベルActivities != null )\r
+ {\r
+ foreach( CActivity activity in this.listトップレベルActivities )\r
+ activity.OnManagedリソースの作成();\r
+ }\r
+\r
+ foreach( STPlugin st in this.listプラグイン )\r
+ {\r
+ Directory.SetCurrentDirectory( st.strプラグインフォルダ );\r
+ st.plugin.OnManagedリソースの作成();\r
+ Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
+ }\r
+ }\r
+ protected override void LoadContent()\r
+ {\r
+ if ( ConfigIni.bウィンドウモード )\r
+ {\r
+ if( !this.bマウスカーソル表示中 )\r
+ {\r
+ Cursor.Show();\r
+ this.bマウスカーソル表示中 = true;\r
+ }\r
+ }\r
+ else if( this.bマウスカーソル表示中 )\r
+ {\r
+ Cursor.Hide();\r
+ this.bマウスカーソル表示中 = false;\r
+ }\r
+ this.Device.SetTransform( TransformState.View, Matrix.LookAtLH( new Vector3( 0f, 0f, (float) ( -240.0 * Math.Sqrt( 3.0 ) ) ), new Vector3( 0f, 0f, 0f ), new Vector3( 0f, 1f, 0f ) ) );\r
+ this.Device.SetTransform( TransformState.Projection, Matrix.PerspectiveFovLH( C変換.DegreeToRadian( (float) 60f ), ( (float) this.Device.Viewport.Width ) / ( (float) this.Device.Viewport.Height ), -100f, 100f ) );\r
+ this.Device.SetRenderState( RenderState.Lighting, false );\r
+ this.Device.SetRenderState( RenderState.ZEnable, false );\r
+ this.Device.SetRenderState( RenderState.AntialiasedLineEnable, false );\r
+ this.Device.SetRenderState( RenderState.AlphaTestEnable, true );\r
+ this.Device.SetRenderState( RenderState.AlphaRef, 10 );\r
+ this.Device.SetRenderState<Compare>( RenderState.AlphaFunc, Compare.Greater );\r
+ this.Device.SetRenderState( RenderState.AlphaBlendEnable, true );\r
+ this.Device.SetRenderState<Blend>( RenderState.SourceBlend, Blend.SourceAlpha );\r
+ this.Device.SetRenderState<Blend>( RenderState.DestinationBlend, Blend.InverseSourceAlpha );\r
+ this.Device.SetTextureStageState( 0, TextureStage.AlphaOperation, TextureOperation.Modulate );\r
+ this.Device.SetTextureStageState( 0, TextureStage.AlphaArg1, 2 );\r
+ this.Device.SetTextureStageState( 0, TextureStage.AlphaArg2, 1 );\r
+ \r
+ if( this.listトップレベルActivities != null )\r
+ {\r
+ foreach( CActivity activity in this.listトップレベルActivities )\r
+ activity.OnUnmanagedリソースの作成();\r
+ }\r
+\r
+ foreach( STPlugin st in this.listプラグイン )\r
+ {\r
+ Directory.SetCurrentDirectory( st.strプラグインフォルダ );\r
+ st.plugin.OnUnmanagedリソースの作成();\r
+ Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
+ }\r
+ }\r
+ protected override void UnloadContent()\r
+ {\r
+ if( this.listトップレベルActivities != null )\r
+ {\r
+ foreach( CActivity activity in this.listトップレベルActivities )\r
+ activity.OnUnmanagedリソースの解放();\r
+ }\r
+\r
+ foreach( STPlugin st in this.listプラグイン )\r
+ {\r
+ Directory.SetCurrentDirectory( st.strプラグインフォルダ );\r
+ st.plugin.OnUnmanagedリソースの解放();\r
+ Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
+ }\r
+ }\r
+ protected override void OnExiting( EventArgs e )\r
+ {\r
+ this.t終了処理();\r
+ base.OnExiting( e );\r
+ }\r
+ protected override void Update( GameTime gameTime )\r
+ {\r
+ }\r
+ protected override void Draw( GameTime gameTime )\r
+ {\r
+ CScoreIni.C演奏記録 c演奏記録;\r
+ CScoreIni.C演奏記録 c演奏記録2;\r
+ CScoreIni.C演奏記録 c演奏記録3;\r
+ CDTX.CChip[] chipArray;\r
+ string str;\r
+\r
+ Sound管理.t再生中の処理をする();\r
+\r
+ if( Timer != null )\r
+ Timer.t更新();\r
+\r
+ if( Input管理 != null )\r
+ Input管理.tポーリング( this.bApplicationActive, CDTXMania.ConfigIni.bバッファ入力を行う );\r
+\r
+ if( FPS != null )\r
+ FPS.tカウンタ更新();\r
+\r
+ //if( Pad != null ) ポーリング時にクリアしたらダメ!曲の開始時に1回だけクリアする。(2010.9.11)\r
+ // Pad.st検知したデバイス.Clear();\r
+\r
+ if( this.Device == null )\r
+ return;\r
+\r
+ this.Device.BeginScene();\r
+ this.Device.Clear( ClearFlags.ZBuffer | ClearFlags.Target, Color.Black, 1f, 0 );\r
+\r
+ if( r現在のステージ != null )\r
+ {\r
+ this.n進行描画の戻り値 = ( r現在のステージ != null ) ? r現在のステージ.On進行描画() : 0;\r
+\r
+ #region [ プラグインの進行描画 ]\r
+ //---------------------\r
+ foreach( STPlugin sp in this.listプラグイン )\r
+ {\r
+ Directory.SetCurrentDirectory( sp.strプラグインフォルダ );\r
+\r
+ if( CDTXMania.act現在入力を占有中のプラグイン == null || CDTXMania.act現在入力を占有中のプラグイン == sp.plugin )\r
+ sp.plugin.On進行描画( CDTXMania.Pad, CDTXMania.Input管理.Keyboard );\r
+ else\r
+ sp.plugin.On進行描画( null, null );\r
+\r
+ Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
+ }\r
+ //---------------------\r
+ #endregion\r
+\r
+ CScoreIni scoreIni = null;\r
+\r
+ switch( r現在のステージ.eステージID )\r
+ {\r
+ case CStage.Eステージ.何もしない:\r
+ break;\r
+\r
+ case CStage.Eステージ.起動:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ if( this.n進行描画の戻り値 != 0 )\r
+ {\r
+ if( !bコンパクトモード )\r
+ {\r
+ r現在のステージ.On非活性化();\r
+ Trace.TraceInformation( "----------------------" );\r
+ Trace.TraceInformation( "■ タイトル" );\r
+ stageタイトル.On活性化();\r
+ r直前のステージ = r現在のステージ;\r
+ r現在のステージ = stageタイトル;\r
+ }\r
+ else\r
+ {\r
+ r現在のステージ.On非活性化();\r
+ Trace.TraceInformation( "----------------------" );\r
+ Trace.TraceInformation( "■ 曲読み込み" );\r
+ stage曲読み込み.On活性化();\r
+ r直前のステージ = r現在のステージ;\r
+ r現在のステージ = stage曲読み込み;\r
+\r
+ }\r
+ foreach( STPlugin pg in this.listプラグイン )\r
+ {\r
+ Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
+ pg.plugin.Onステージ変更();\r
+ Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
+ }\r
+\r
+ this.tガベージコレクションを実行する();\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ break;\r
+\r
+ case CStage.Eステージ.タイトル:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ switch( this.n進行描画の戻り値 )\r
+ {\r
+ case 1:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ r現在のステージ.On非活性化();\r
+ Trace.TraceInformation( "----------------------" );\r
+ Trace.TraceInformation( "■ 選曲" );\r
+ stage選曲.On活性化();\r
+ r直前のステージ = r現在のステージ;\r
+ r現在のステージ = stage選曲;\r
+ //-----------------------------\r
+ #endregion\r
+ break;\r
+\r
+ case 2:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ r現在のステージ.On非活性化();\r
+ Trace.TraceInformation( "----------------------" );\r
+ Trace.TraceInformation( "■ オプション" );\r
+ stageオプション.On活性化();\r
+ r直前のステージ = r現在のステージ;\r
+ r現在のステージ = stageオプション;\r
+ //-----------------------------\r
+ #endregion\r
+ break;\r
+\r
+ case 3:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ r現在のステージ.On非活性化();\r
+ Trace.TraceInformation( "----------------------" );\r
+ Trace.TraceInformation( "■ コンフィグ" );\r
+ stageコンフィグ.On活性化();\r
+ r直前のステージ = r現在のステージ;\r
+ r現在のステージ = stageコンフィグ;\r
+ //-----------------------------\r
+ #endregion\r
+ break;\r
+\r
+ case 4:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ r現在のステージ.On非活性化();\r
+ Trace.TraceInformation( "----------------------" );\r
+ Trace.TraceInformation( "■ 終了" );\r
+ stage終了.On活性化();\r
+ r直前のステージ = r現在のステージ;\r
+ r現在のステージ = stage終了;\r
+ //-----------------------------\r
+ #endregion\r
+ break;\r
+ }\r
+\r
+ foreach( STPlugin pg in this.listプラグイン )\r
+ {\r
+ Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
+ pg.plugin.Onステージ変更();\r
+ Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
+ }\r
+\r
+ this.tガベージコレクションを実行する();\r
+ //-----------------------------\r
+ #endregion\r
+ break;\r
+\r
+ case CStage.Eステージ.オプション:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ if( this.n進行描画の戻り値 != 0 )\r
+ {\r
+ switch( r直前のステージ.eステージID )\r
+ {\r
+ case CStage.Eステージ.タイトル:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ r現在のステージ.On非活性化();\r
+ Trace.TraceInformation( "----------------------" );\r
+ Trace.TraceInformation( "■ タイトル" );\r
+ stageタイトル.On活性化();\r
+ r直前のステージ = r現在のステージ;\r
+ r現在のステージ = stageタイトル;\r
+\r
+ foreach( STPlugin pg in this.listプラグイン )\r
+ {\r
+ Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
+ pg.plugin.Onステージ変更();\r
+ Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
+ }\r
+\r
+ this.tガベージコレクションを実行する();\r
+ break;\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ case CStage.Eステージ.選曲:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ r現在のステージ.On非活性化();\r
+ Trace.TraceInformation( "----------------------" );\r
+ Trace.TraceInformation( "■ 選曲" );\r
+ stage選曲.On活性化();\r
+ r直前のステージ = r現在のステージ;\r
+ r現在のステージ = stage選曲;\r
+\r
+ foreach( STPlugin pg in this.listプラグイン )\r
+ {\r
+ Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
+ pg.plugin.Onステージ変更();\r
+ Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
+ }\r
+\r
+ this.tガベージコレクションを実行する();\r
+ break;\r
+ //-----------------------------\r
+ #endregion\r
+ }\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ break;\r
+\r
+ case CStage.Eステージ.コンフィグ:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ if( this.n進行描画の戻り値 != 0 )\r
+ {\r
+ switch( r直前のステージ.eステージID )\r
+ {\r
+ case CStage.Eステージ.タイトル:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ r現在のステージ.On非活性化();\r
+ Trace.TraceInformation( "----------------------" );\r
+ Trace.TraceInformation( "■ タイトル" );\r
+ stageタイトル.On活性化();\r
+ r直前のステージ = r現在のステージ;\r
+ r現在のステージ = stageタイトル;\r
+\r
+ foreach( STPlugin pg in this.listプラグイン )\r
+ {\r
+ Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
+ pg.plugin.Onステージ変更();\r
+ Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
+ }\r
+\r
+ this.tガベージコレクションを実行する();\r
+ break;\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ case CStage.Eステージ.選曲:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ r現在のステージ.On非活性化();\r
+ Trace.TraceInformation( "----------------------" );\r
+ Trace.TraceInformation( "■ 選曲" );\r
+ stage選曲.On活性化();\r
+ r直前のステージ = r現在のステージ;\r
+ r現在のステージ = stage選曲;\r
+\r
+ foreach( STPlugin pg in this.listプラグイン )\r
+ {\r
+ Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
+ pg.plugin.Onステージ変更();\r
+ Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
+ }\r
+\r
+ this.tガベージコレクションを実行する();\r
+ break;\r
+ //-----------------------------\r
+ #endregion\r
+ }\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ break;\r
+\r
+ case CStage.Eステージ.選曲:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ switch( this.n進行描画の戻り値 )\r
+ {\r
+ case 1:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ r現在のステージ.On非活性化();\r
+ Trace.TraceInformation( "----------------------" );\r
+ Trace.TraceInformation( "■ タイトル" );\r
+ stageタイトル.On活性化();\r
+ r直前のステージ = r現在のステージ;\r
+ r現在のステージ = stageタイトル;\r
+\r
+ foreach( STPlugin pg in this.listプラグイン )\r
+ {\r
+ Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
+ pg.plugin.Onステージ変更();\r
+ Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
+ }\r
+\r
+ this.tガベージコレクションを実行する();\r
+ break;\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ case 2:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ r現在のステージ.On非活性化();\r
+ Trace.TraceInformation( "----------------------" );\r
+ Trace.TraceInformation( "■ 曲読み込み" );\r
+ stage曲読み込み.On活性化();\r
+ r直前のステージ = r現在のステージ;\r
+ r現在のステージ = stage曲読み込み;\r
+\r
+ foreach( STPlugin pg in this.listプラグイン )\r
+ {\r
+ Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
+ pg.plugin.Onステージ変更();\r
+ Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
+ }\r
+\r
+ this.tガベージコレクションを実行する();\r
+ break;\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ case 3:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ r現在のステージ.On非活性化();\r
+ Trace.TraceInformation( "----------------------" );\r
+ Trace.TraceInformation( "■ オプション" );\r
+ stageオプション.On活性化();\r
+ r直前のステージ = r現在のステージ;\r
+ r現在のステージ = stageオプション;\r
+\r
+ foreach( STPlugin pg in this.listプラグイン )\r
+ {\r
+ Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
+ pg.plugin.Onステージ変更();\r
+ Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
+ }\r
+\r
+ this.tガベージコレクションを実行する();\r
+ break;\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ case 4:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ r現在のステージ.On非活性化();\r
+ Trace.TraceInformation( "----------------------" );\r
+ Trace.TraceInformation( "■ コンフィグ" );\r
+ stageコンフィグ.On活性化();\r
+ r直前のステージ = r現在のステージ;\r
+ r現在のステージ = stageコンフィグ;\r
+\r
+ foreach( STPlugin pg in this.listプラグイン )\r
+ {\r
+ Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
+ pg.plugin.Onステージ変更();\r
+ Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
+ }\r
+\r
+ this.tガベージコレクションを実行する();\r
+ break;\r
+ //-----------------------------\r
+ #endregion\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ break;\r
+\r
+ case CStage.Eステージ.曲読み込み:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ if( this.n進行描画の戻り値 != 0 )\r
+ {\r
+ CDTXMania.Pad.st検知したデバイス.Clear(); // 入力デバイスフラグクリア(2010.9.11)\r
+\r
+ r現在のステージ.On非活性化();\r
+ if( !ConfigIni.bギタレボモード )\r
+ {\r
+ Trace.TraceInformation( "----------------------" );\r
+ Trace.TraceInformation( "■ 演奏(ドラム画面)" );\r
+ r直前のステージ = r現在のステージ;\r
+ r現在のステージ = stage演奏ドラム画面;\r
+ }\r
+ else\r
+ {\r
+ Trace.TraceInformation( "----------------------" );\r
+ Trace.TraceInformation( "■ 演奏(ギター画面)" );\r
+ r直前のステージ = r現在のステージ;\r
+ r現在のステージ = stage演奏ギター画面;\r
+ }\r
+\r
+ foreach( STPlugin pg in this.listプラグイン )\r
+ {\r
+ Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
+ pg.plugin.Onステージ変更();\r
+ Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
+ }\r
+\r
+ this.tガベージコレクションを実行する();\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ break;\r
+\r
+ case CStage.Eステージ.演奏:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ switch( this.n進行描画の戻り値 )\r
+ {\r
+ case 0:\r
+ break;\r
+\r
+ case 1:\r
+ #region [ 演奏キャンセル ]\r
+ //-----------------------------\r
+ scoreIni = this.tScoreIniへBGMAdjustとHistoryとPlayCountを更新( "Play canceled" );\r
+\r
+ #region [ プラグイン On演奏キャンセル() の呼び出し ]\r
+ //---------------------\r
+ foreach( STPlugin pg in this.listプラグイン )\r
+ {\r
+ Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
+ pg.plugin.On演奏キャンセル( scoreIni );\r
+ Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
+ }\r
+ //---------------------\r
+ #endregion\r
+\r
+ DTX.t全チップの再生停止();\r
+ DTX.On非活性化();\r
+ r現在のステージ.On非活性化();\r
+ if( bコンパクトモード )\r
+ {\r
+ base.Window.Close();\r
+ }\r
+ else\r
+ {\r
+ Trace.TraceInformation( "----------------------" );\r
+ Trace.TraceInformation( "■ 選曲" );\r
+ stage選曲.On活性化();\r
+ r直前のステージ = r現在のステージ;\r
+ r現在のステージ = stage選曲;\r
+\r
+ #region [ プラグイン Onステージ変更() の呼び出し ]\r
+ //---------------------\r
+ foreach( STPlugin pg in this.listプラグイン )\r
+ {\r
+ Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
+ pg.plugin.Onステージ変更();\r
+ Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
+ }\r
+ //---------------------\r
+ #endregion\r
+\r
+ this.tガベージコレクションを実行する();\r
+ }\r
+ break;\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ case 2:\r
+ #region [ 演奏失敗(StageFailed) ]\r
+ //-----------------------------\r
+ scoreIni = this.tScoreIniへBGMAdjustとHistoryとPlayCountを更新( "Stage failed" );\r
+\r
+ #region [ プラグイン On演奏失敗() の呼び出し ]\r
+ //---------------------\r
+ foreach( STPlugin pg in this.listプラグイン )\r
+ {\r
+ Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
+ pg.plugin.On演奏失敗( scoreIni );\r
+ Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
+ }\r
+ //---------------------\r
+ #endregion\r
+\r
+ DTX.t全チップの再生停止();\r
+ DTX.On非活性化();\r
+ r現在のステージ.On非活性化();\r
+ if( bコンパクトモード )\r
+ {\r
+ base.Window.Close();\r
+ }\r
+ else\r
+ {\r
+ Trace.TraceInformation( "----------------------" );\r
+ Trace.TraceInformation( "■ 選曲" );\r
+ stage選曲.On活性化();\r
+ r直前のステージ = r現在のステージ;\r
+ r現在のステージ = stage選曲;\r
+\r
+ #region [ プラグイン Onステージ変更() の呼び出し ]\r
+ //---------------------\r
+ foreach( STPlugin pg in this.listプラグイン )\r
+ {\r
+ Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
+ pg.plugin.Onステージ変更();\r
+ Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
+ }\r
+ //---------------------\r
+ #endregion\r
+\r
+ this.tガベージコレクションを実行する();\r
+ }\r
+ break;\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ case 3:\r
+ #region [ 演奏クリア ]\r
+ //-----------------------------\r
+ chipArray = new CDTX.CChip[ 10 ];\r
+ if( ConfigIni.bギタレボモード )\r
+ {\r
+ stage演奏ギター画面.t演奏結果を格納する( out c演奏記録, out c演奏記録2, out c演奏記録3 );\r
+ }\r
+ else\r
+ {\r
+ stage演奏ドラム画面.t演奏結果を格納する( out c演奏記録, out c演奏記録2, out c演奏記録3, out chipArray );\r
+ }\r
+ str = "Cleared";\r
+ switch( CScoreIni.t総合ランク値を計算して返す( c演奏記録, c演奏記録2, c演奏記録3 ) )\r
+ {\r
+ case 0:\r
+ str = "Cleared (Rank:SS)";\r
+ break;\r
+\r
+ case 1:\r
+ str = "Cleared (Rank:S)";\r
+ break;\r
+\r
+ case 2:\r
+ str = "Cleared (Rank:A)";\r
+ break;\r
+\r
+ case 3:\r
+ str = "Cleared (Rank:B)";\r
+ break;\r
+\r
+ case 4:\r
+ str = "Cleared (Rank:C)";\r
+ break;\r
+\r
+ case 5:\r
+ str = "Cleared (Rank:D)";\r
+ break;\r
+\r
+ case 6:\r
+ str = "Cleared (Rank:E)";\r
+ break;\r
+\r
+ case 99: // #23534 2010.10.28 yyagi add: 演奏チップが0個のとき\r
+ str = "Cleared (No chips)";\r
+ break;\r
+ }\r
+\r
+ scoreIni = this.tScoreIniへBGMAdjustとHistoryとPlayCountを更新( str );\r
+\r
+ #region [ プラグイン On演奏クリア() の呼び出し ]\r
+ //---------------------\r
+ foreach( STPlugin pg in this.listプラグイン )\r
+ {\r
+ Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
+ pg.plugin.On演奏クリア( scoreIni );\r
+ Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
+ }\r
+ //---------------------\r
+ #endregion\r
+\r
+ r現在のステージ.On非活性化();\r
+ Trace.TraceInformation( "----------------------" );\r
+ Trace.TraceInformation( "■ 結果" );\r
+ stage結果.st演奏記録.Drums = c演奏記録;\r
+ stage結果.st演奏記録.Guitar = c演奏記録2;\r
+ stage結果.st演奏記録.Bass = c演奏記録3;\r
+ stage結果.r空うちドラムチップ = chipArray;\r
+ stage結果.On活性化();\r
+ r直前のステージ = r現在のステージ;\r
+ r現在のステージ = stage結果;\r
+\r
+ #region [ プラグイン Onステージ変更() の呼び出し ]\r
+ //---------------------\r
+ foreach( STPlugin pg in this.listプラグイン )\r
+ {\r
+ Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
+ pg.plugin.Onステージ変更();\r
+ Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
+ }\r
+ //---------------------\r
+ #endregion\r
+\r
+ break;\r
+ //-----------------------------\r
+ #endregion\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ break;\r
+\r
+ case CStage.Eステージ.結果:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ if( this.n進行描画の戻り値 != 0 )\r
+ {\r
+ DTX.t全チップの再生一時停止();\r
+ DTX.On非活性化();\r
+ r現在のステージ.On非活性化();\r
+ if( !bコンパクトモード )\r
+ {\r
+ Trace.TraceInformation( "----------------------" );\r
+ Trace.TraceInformation( "■ 選曲" );\r
+ stage選曲.On活性化();\r
+ r直前のステージ = r現在のステージ;\r
+ r現在のステージ = stage選曲;\r
+\r
+ foreach( STPlugin pg in this.listプラグイン )\r
+ {\r
+ Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
+ pg.plugin.Onステージ変更();\r
+ Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
+ }\r
+\r
+ this.tガベージコレクションを実行する();\r
+ }\r
+ else\r
+ {\r
+ base.Window.Close();\r
+ }\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ break;\r
+\r
+ case CStage.Eステージ.終了:\r
+ #region [ *** ]\r
+ //-----------------------------\r
+ if( this.n進行描画の戻り値 != 0 )\r
+ {\r
+ base.Exit();\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ break;\r
+ }\r
+ }\r
+\r
+ this.Device.EndScene();\r
+ if( this.b次のタイミングで全画面・ウィンドウ切り替えを行う )\r
+ {\r
+ ConfigIni.b全画面モード = !ConfigIni.b全画面モード;\r
+ app.t全画面・ウィンドウモード切り替え();\r
+ this.b次のタイミングで全画面・ウィンドウ切り替えを行う = false;\r
+ }\r
+ if( this.b次のタイミングで垂直帰線同期切り替えを行う )\r
+ {\r
+ DeviceSettings currentSettings = app.GraphicsDeviceManager.CurrentSettings;\r
+ currentSettings.EnableVSync = ConfigIni.b垂直帰線待ちを行う;\r
+ app.GraphicsDeviceManager.ChangeDevice( currentSettings );\r
+ this.b次のタイミングで垂直帰線同期切り替えを行う = false;\r
+ }\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ テクスチャの生成・解放のためのヘルパー ]\r
+ //-----------------\r
+ public static CTexture tテクスチャの生成( string fileName )\r
+ {\r
+ return tテクスチャの生成( fileName, false );\r
+ }\r
+ public static CTexture tテクスチャの生成( string fileName, bool b黒を透過する )\r
+ {\r
+ if( app == null )\r
+ {\r
+ return null;\r
+ }\r
+ try\r
+ {\r
+ return new CTexture( app.Device, fileName, TextureFormat, b黒を透過する );\r
+ }\r
+ catch( CTextureCreateFailedException )\r
+ {\r
+ Trace.TraceError( "テクスチャの生成に失敗しました。({0})", new object[] { fileName } );\r
+ return null;\r
+ }\r
+ }\r
+ public static void tテクスチャの解放( ref CTexture tx )\r
+ {\r
+ if( tx != null )\r
+ {\r
+ tx.Dispose();\r
+ tx = null;\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private bool bマウスカーソル表示中 = true;\r
+ private bool b終了処理完了済み;\r
+ private static CDTX dtx;\r
+ private List<CActivity> listトップレベルActivities;\r
+ private int n進行描画の戻り値;\r
+\r
+ private void t起動処理()\r
+ {\r
+ strEXEのあるフォルダ = Environment.CurrentDirectory + @"\";\r
+\r
+ #region [ Config.ini の読込み ]\r
+ //---------------------\r
+ ConfigIni = new CConfigIni();\r
+ string path = strEXEのあるフォルダ + "Config.ini";\r
+ if( File.Exists( path ) )\r
+ {\r
+ try\r
+ {\r
+ ConfigIni.t読み込み( path );\r
+ }\r
+ catch\r
+ {\r
+ ConfigIni = new CConfigIni(); // 存在してなければ新規生成\r
+ }\r
+ }\r
+ //---------------------\r
+ #endregion\r
+ #region [ ログ出力開始 ]\r
+ //---------------------\r
+ Trace.AutoFlush = true;\r
+ if( ConfigIni.bログ出力 )\r
+ {\r
+ Trace.Listeners.Add( new CTraceLogListener( new StreamWriter( "DTXManiaLog.txt", false, Encoding.GetEncoding( "shift-jis" ) ) ) );\r
+ }\r
+ Trace.WriteLine( "" );\r
+ Trace.WriteLine( "DTXMania powered by YAMAHA Silent Session Drums" );\r
+ Trace.WriteLine( string.Format( "Release: {0}", VERSION ) );\r
+ Trace.WriteLine( "" );\r
+ Trace.TraceInformation( "----------------------" );\r
+ Trace.TraceInformation( "■ アプリケーションの初期化" );\r
+ Trace.TraceInformation( "OS Version: " + Environment.OSVersion );\r
+ Trace.TraceInformation( "ProcessorCount: " + Environment.ProcessorCount.ToString() );\r
+ Trace.TraceInformation( "CLR Version: " + Environment.Version.ToString() );\r
+ //---------------------\r
+ #endregion\r
+ #region [ コンパクトモードスイッチの有無 ]\r
+ //---------------------\r
+ bコンパクトモード = false;\r
+ strコンパクトモードファイル = "";\r
+ string[] commandLineArgs = Environment.GetCommandLineArgs();\r
+ \r
+ if( ( commandLineArgs != null ) && ( commandLineArgs.Length > 1 ) )\r
+ {\r
+ bコンパクトモード = true;\r
+ strコンパクトモードファイル = commandLineArgs[ 1 ];\r
+ Trace.TraceInformation( "コンパクトモードで起動します。[{0}]", new object[] { strコンパクトモードファイル } );\r
+ }\r
+ //---------------------\r
+ #endregion\r
+\r
+ #region [ ウィンドウ初期化 ]\r
+ //---------------------\r
+ base.Window.Text = "DTXMania .NET style release " + VERSION;\r
+ base.Window.ClientSize = new Size( 640, 480 );\r
+ base.Window.MaximizeBox = false;\r
+ base.Window.FormBorderStyle = FormBorderStyle.Sizable; // #23510 2010.10.27 yyagi: changed from FixedDialog to Sizable, to support window resize\r
+ base.Window.ShowIcon = true;\r
+ base.Window.Icon = Properties.Resources.dtx;\r
+ base.Window.KeyDown += new KeyEventHandler( this.Window_KeyDown );\r
+ base.Window.ApplicationActivated += new EventHandler( this.Window_ApplicationActivated );\r
+ base.Window.ApplicationDeactivated += new EventHandler( this.Window_ApplicationDeactivated );\r
+// base.Window.Resize += new EventHandler(Window_Resize);\r
+ //---------------------\r
+ #endregion\r
+ #region [ Direct3D9 デバイスの生成 ]\r
+ //---------------------\r
+ DeviceSettings settings = new DeviceSettings();\r
+ settings.Windowed = ConfigIni.bウィンドウモード;\r
+ settings.BackBufferWidth = 640;\r
+ settings.BackBufferHeight = 480;\r
+ settings.EnableVSync = ConfigIni.b垂直帰線待ちを行う;\r
+ base.GraphicsDeviceManager.ChangeDevice( settings );\r
+ base.IsFixedTimeStep = false;\r
+ //---------------------\r
+ #endregion\r
+\r
+ DTX = null;\r
+\r
+ #region [ Skin の初期化 ]\r
+ //---------------------\r
+ Trace.TraceInformation( "スキンの初期化を行います。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ Skin = new CSkin();\r
+ Trace.TraceInformation( "スキンの初期化を完了しました。" );\r
+ }\r
+ catch\r
+ {\r
+ Trace.TraceInformation( "スキンの初期化に失敗しました。" );\r
+ throw;\r
+ }\r
+ finally\r
+ {\r
+ Trace.Unindent();\r
+ }\r
+ //---------------------\r
+ #endregion\r
+ #region [ Timer の初期化 ]\r
+ //---------------------\r
+ Trace.TraceInformation( "タイマの初期化を行います。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ Timer = new CTimer( CTimer.E種別.MultiMedia );\r
+ Trace.TraceInformation( "タイマの初期化を完了しました。" );\r
+ }\r
+ finally\r
+ {\r
+ Trace.Unindent();\r
+ }\r
+ //---------------------\r
+ #endregion\r
+ #region [ FPS カウンタの初期化 ]\r
+ //---------------------\r
+ Trace.TraceInformation( "FPSカウンタの初期化を行います。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ FPS = new CFPS();\r
+ Trace.TraceInformation( "FPSカウンタを生成しました。" );\r
+ }\r
+ finally\r
+ {\r
+ Trace.Unindent();\r
+ }\r
+ //---------------------\r
+ #endregion\r
+ #region [ act文字コンソールの初期化 ]\r
+ //---------------------\r
+ Trace.TraceInformation( "文字コンソールの初期化を行います。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ act文字コンソール = new C文字コンソール();\r
+ Trace.TraceInformation( "文字コンソールを生成しました。" );\r
+ act文字コンソール.On活性化();\r
+ Trace.TraceInformation( "文字コンソールを活性化しました。" );\r
+ Trace.TraceInformation( "文字コンソールの初期化を完了しました。" );\r
+ }\r
+ catch( Exception exception )\r
+ {\r
+ Trace.TraceError( exception.Message );\r
+ Trace.TraceError( "文字コンソールの初期化に失敗しました。" );\r
+ }\r
+ finally\r
+ {\r
+ Trace.Unindent();\r
+ }\r
+ //---------------------\r
+ #endregion\r
+ #region [ Input管理 の初期化 ]\r
+ //---------------------\r
+ Trace.TraceInformation( "DirectInput, MIDI入力の初期化を行います。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ Input管理 = new CInput管理( base.Window.Handle );\r
+ foreach( IInputDevice device in Input管理.list入力デバイス )\r
+ {\r
+ if( ( device.e入力デバイス種別 == E入力デバイス種別.Joystick ) && !ConfigIni.dicJoystick.ContainsValue( device.GUID ) )\r
+ {\r
+ int key = 0;\r
+ while( ConfigIni.dicJoystick.ContainsKey( key ) )\r
+ {\r
+ key++;\r
+ }\r
+ ConfigIni.dicJoystick.Add( key, device.GUID );\r
+ }\r
+ }\r
+ foreach( IInputDevice device2 in Input管理.list入力デバイス )\r
+ {\r
+ if( device2.e入力デバイス種別 == E入力デバイス種別.Joystick )\r
+ {\r
+ foreach( KeyValuePair<int, string> pair in ConfigIni.dicJoystick )\r
+ {\r
+ if( device2.GUID.Equals( pair.Value ) )\r
+ {\r
+ ( (CInputJoystick) device2 ).SetID( pair.Key );\r
+ break;\r
+ }\r
+ }\r
+ continue;\r
+ }\r
+ }\r
+ Trace.TraceInformation( "DirectInput の初期化を完了しました。" );\r
+ }\r
+ catch( Exception exception2 )\r
+ {\r
+ Trace.TraceError( exception2.Message );\r
+ Trace.TraceError( "DirectInput, MIDI入力の初期化に失敗しました。" );\r
+ throw;\r
+ }\r
+ finally\r
+ {\r
+ Trace.Unindent();\r
+ }\r
+ //---------------------\r
+ #endregion\r
+ #region [ Pad の初期化 ]\r
+ //---------------------\r
+ Trace.TraceInformation( "パッドの初期化を行います。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ Pad = new CPad( ConfigIni, Input管理 );\r
+ Trace.TraceInformation( "パッドの初期化を完了しました。" );\r
+ }\r
+ catch( Exception exception3 )\r
+ {\r
+ Trace.TraceError( exception3.Message );\r
+ Trace.TraceError( "パッドの初期化に失敗しました。" );\r
+ }\r
+ finally\r
+ {\r
+ Trace.Unindent();\r
+ }\r
+ //---------------------\r
+ #endregion\r
+ #region [ Sound管理 の初期化 ]\r
+ //---------------------\r
+ Trace.TraceInformation( "DirectSound の初期化を行います。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ Sound管理 = new CSound管理( base.Window.Handle );\r
+ Trace.TraceInformation( "DirectSound の初期化を完了しました。" );\r
+ }\r
+ catch\r
+ {\r
+ Trace.TraceError( "DirectSound の初期化に失敗しました。" );\r
+ throw;\r
+ }\r
+ finally\r
+ {\r
+ Trace.Unindent();\r
+ }\r
+ //---------------------\r
+ #endregion\r
+ #region [ Songs管理 の初期化 ]\r
+ //---------------------\r
+ Trace.TraceInformation( "曲リストの初期化を行います。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ Songs管理 = new CSongs管理();\r
+ Trace.TraceInformation( "曲リストの初期化を完了しました。" );\r
+ }\r
+ catch( Exception exception4 )\r
+ {\r
+ Trace.TraceError( exception4.Message );\r
+ Trace.TraceError( "曲リストの初期化に失敗しました。" );\r
+ }\r
+ finally\r
+ {\r
+ Trace.Unindent();\r
+ }\r
+ //---------------------\r
+ #endregion\r
+ #region [ CAvi の初期化 ]\r
+ //---------------------\r
+ CAvi.t初期化();\r
+ //---------------------\r
+ #endregion\r
+ #region [ Random の初期化 ]\r
+ //---------------------\r
+ Random = new Random( (int) Timer.nシステム時刻 );\r
+ //---------------------\r
+ #endregion\r
+ #region [ ステージの初期化 ]\r
+ //---------------------\r
+ r現在のステージ = null;\r
+ r直前のステージ = null;\r
+ stage起動 = new CStage起動();\r
+ stageタイトル = new CStageタイトル();\r
+ stageオプション = new CStageオプション();\r
+ stageコンフィグ = new CStageコンフィグ();\r
+ stage選曲 = new CStage選曲();\r
+ stage曲読み込み = new CStage曲読み込み();\r
+ stage演奏ドラム画面 = new CStage演奏ドラム画面();\r
+ stage演奏ギター画面 = new CStage演奏ギター画面();\r
+ stage結果 = new CStage結果();\r
+ stage終了 = new CStage終了();\r
+ this.listトップレベルActivities = new List<CActivity>();\r
+ this.listトップレベルActivities.Add( act文字コンソール );\r
+ this.listトップレベルActivities.Add( stage起動 );\r
+ this.listトップレベルActivities.Add( stageタイトル );\r
+ this.listトップレベルActivities.Add( stageオプション );\r
+ this.listトップレベルActivities.Add( stageコンフィグ );\r
+ this.listトップレベルActivities.Add( stage選曲 );\r
+ this.listトップレベルActivities.Add( stage曲読み込み );\r
+ this.listトップレベルActivities.Add( stage演奏ドラム画面 );\r
+ this.listトップレベルActivities.Add( stage演奏ギター画面 );\r
+ this.listトップレベルActivities.Add( stage結果 );\r
+ this.listトップレベルActivities.Add( stage終了 );\r
+ //---------------------\r
+ #endregion\r
+ #region [ プラグインの検索と生成 ]\r
+ //---------------------\r
+ PluginHost = new CPluginHost();\r
+\r
+ Trace.TraceInformation( "プラグインの検索と生成を行います。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ this.tプラグイン検索と生成();\r
+ Trace.TraceInformation( "プラグインの検索と生成を完了しました。" );\r
+ }\r
+ finally\r
+ {\r
+ Trace.Unindent();\r
+ }\r
+ //---------------------\r
+ #endregion\r
+ #region [ プラグインの初期化 ]\r
+ //---------------------\r
+ if( this.listプラグイン != null && this.listプラグイン.Count > 0 )\r
+ {\r
+ Trace.TraceInformation( "プラグインの初期化を行います。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ foreach( STPlugin st in this.listプラグイン )\r
+ {\r
+ Directory.SetCurrentDirectory( st.strプラグインフォルダ );\r
+ st.plugin.On初期化( this.PluginHost );\r
+ st.plugin.OnManagedリソースの作成();\r
+ st.plugin.OnUnmanagedリソースの作成();\r
+ Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
+ }\r
+ Trace.TraceInformation( "すべてのプラグインの初期化を完了しました。" );\r
+ }\r
+ catch\r
+ {\r
+ Trace.TraceError( "プラグインのどれかの初期化に失敗しました。" );\r
+ throw;\r
+ }\r
+ finally\r
+ {\r
+ Trace.Unindent();\r
+ }\r
+ }\r
+\r
+ //---------------------\r
+ #endregion\r
+\r
+ Trace.TraceInformation( "アプリケーションの初期化を完了しました。" );\r
+\r
+ #region [ 最初のステージの起動 ]\r
+ //---------------------\r
+ Trace.TraceInformation( "----------------------" );\r
+ Trace.TraceInformation( "■ 起動" );\r
+\r
+ r現在のステージ = stage起動;\r
+ r現在のステージ.On活性化();\r
+ //---------------------\r
+ #endregion\r
+ }\r
+ private void t終了処理()\r
+ {\r
+ if( !this.b終了処理完了済み )\r
+ {\r
+ Trace.TraceInformation( "----------------------" );\r
+ Trace.TraceInformation( "■ アプリケーションの終了" );\r
+ if( r現在のステージ != null )\r
+ {\r
+ Trace.TraceInformation( "現在のステージを終了します。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ r現在のステージ.On非活性化();\r
+ Trace.TraceInformation( "現在のステージの終了処理を完了しました。" );\r
+ }\r
+ finally\r
+ {\r
+ Trace.Unindent();\r
+ }\r
+ }\r
+\r
+ if( this.listプラグイン != null && this.listプラグイン.Count > 0 )\r
+ {\r
+ Trace.TraceInformation( "すべてのプラグインを終了します。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ foreach( STPlugin st in this.listプラグイン )\r
+ {\r
+ Directory.SetCurrentDirectory( st.strプラグインフォルダ );\r
+ st.plugin.OnUnmanagedリソースの解放();\r
+ st.plugin.OnManagedリソースの解放();\r
+ st.plugin.On終了();\r
+ Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
+ }\r
+ PluginHost = null;\r
+ Trace.TraceInformation( "すべてのプラグインの終了処理を完了しました。" );\r
+ }\r
+ finally\r
+ {\r
+ Trace.Unindent();\r
+ }\r
+ }\r
+\r
+ if( Songs管理 != null )\r
+ {\r
+ Trace.TraceInformation( "曲リストの終了処理を行います。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ Songs管理 = null;\r
+ Trace.TraceInformation( "曲リストの終了処理を完了しました。" );\r
+ }\r
+ catch( Exception exception )\r
+ {\r
+ Trace.TraceError( exception.Message );\r
+ Trace.TraceError( "曲リストの終了処理に失敗しました。" );\r
+ }\r
+ finally\r
+ {\r
+ Trace.Unindent();\r
+ }\r
+ }\r
+ CAvi.t終了();\r
+ if( Skin != null )\r
+ {\r
+ Trace.TraceInformation( "スキンの終了処理を行います。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ Skin.Dispose();\r
+ Skin = null;\r
+ Trace.TraceInformation( "スキンの終了処理を完了しました。" );\r
+ }\r
+ catch( Exception exception2 )\r
+ {\r
+ Trace.TraceError( exception2.Message );\r
+ Trace.TraceError( "スキンの終了処理に失敗しました。" );\r
+ }\r
+ finally\r
+ {\r
+ Trace.Unindent();\r
+ }\r
+ }\r
+ if( Sound管理 != null )\r
+ {\r
+ Trace.TraceInformation( "DirectSound の終了処理を行います。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ Sound管理.Dispose();\r
+ Sound管理 = null;\r
+ Trace.TraceInformation( "DirectSound の終了処理を完了しました。" );\r
+ }\r
+ catch( Exception exception3 )\r
+ {\r
+ Trace.TraceError( exception3.Message );\r
+ Trace.TraceError( "DirectSound の終了処理に失敗しました。" );\r
+ }\r
+ finally\r
+ {\r
+ Trace.Unindent();\r
+ }\r
+ }\r
+ if( Pad != null )\r
+ {\r
+ Trace.TraceInformation( "パッドの終了処理を行います。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ Pad = null;\r
+ Trace.TraceInformation( "パッドの終了処理を完了しました。" );\r
+ }\r
+ catch( Exception exception4 )\r
+ {\r
+ Trace.TraceError( exception4.Message );\r
+ Trace.TraceError( "パッドの終了処理に失敗しました。" );\r
+ }\r
+ finally\r
+ {\r
+ Trace.Unindent();\r
+ }\r
+ }\r
+ if( Input管理 != null )\r
+ {\r
+ Trace.TraceInformation( "DirectInput, MIDI入力の終了処理を行います。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ Input管理.Dispose();\r
+ Input管理 = null;\r
+ Trace.TraceInformation( "DirectInput, MIDI入力の終了処理を完了しました。" );\r
+ }\r
+ catch( Exception exception5 )\r
+ {\r
+ Trace.TraceError( exception5.Message );\r
+ Trace.TraceError( "DirectInput, MIDI入力の終了処理に失敗しました。" );\r
+ }\r
+ finally\r
+ {\r
+ Trace.Unindent();\r
+ }\r
+ }\r
+ if( act文字コンソール != null )\r
+ {\r
+ Trace.TraceInformation( "文字コンソールの終了処理を行います。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ act文字コンソール.On非活性化();\r
+ act文字コンソール = null;\r
+ Trace.TraceInformation( "文字コンソールの終了処理を完了しました。" );\r
+ }\r
+ catch( Exception exception6 )\r
+ {\r
+ Trace.TraceError( exception6.Message );\r
+ Trace.TraceError( "文字コンソールの終了処理に失敗しました。" );\r
+ }\r
+ finally\r
+ {\r
+ Trace.Unindent();\r
+ }\r
+ }\r
+ Trace.TraceInformation( "FPSカウンタの終了処理を行います。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ if( FPS != null )\r
+ {\r
+ FPS = null;\r
+ }\r
+ Trace.TraceInformation( "FPSカウンタの終了処理を完了しました。" );\r
+ }\r
+ finally\r
+ {\r
+ Trace.Unindent();\r
+ }\r
+ Trace.TraceInformation( "タイマの終了処理を行います。" );\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ if( Timer != null )\r
+ {\r
+ Timer.Dispose();\r
+ Timer = null;\r
+ Trace.TraceInformation( "タイマの終了処理を完了しました。" );\r
+ }\r
+ else\r
+ {\r
+ Trace.TraceInformation( "タイマは使用されていません。" );\r
+ }\r
+ }\r
+ finally\r
+ {\r
+ Trace.Unindent();\r
+ }\r
+ Trace.TraceInformation( "Config.ini を出力します。" );\r
+ string str = strEXEのあるフォルダ + "Config.ini";\r
+ Trace.Indent();\r
+ try\r
+ {\r
+ ConfigIni.t書き出し( str );\r
+ Trace.TraceInformation( "保存しました。({0})", new object[] { str } );\r
+ }\r
+ catch( Exception exception7 )\r
+ {\r
+ Trace.TraceError( exception7.Message );\r
+ Trace.TraceError( "Config.ini の出力に失敗しました。({0})", new object[] { str } );\r
+ }\r
+ finally\r
+ {\r
+ Trace.Unindent();\r
+ }\r
+ Trace.TraceInformation( "アプリケーションの終了処理を完了しました。" );\r
+\r
+\r
+ this.b終了処理完了済み = true;\r
+ }\r
+ }\r
+ private void Window_ApplicationActivated( object sender, EventArgs e )\r
+ {\r
+ this.bApplicationActive = true;\r
+ }\r
+ private void Window_ApplicationDeactivated( object sender, EventArgs e )\r
+ {\r
+ this.bApplicationActive = false;\r
+ }\r
+ private void Window_KeyDown( object sender, KeyEventArgs e )\r
+ {\r
+ if( e.KeyCode == Keys.Menu )\r
+ {\r
+ e.SuppressKeyPress = true;\r
+ }\r
+ else if( ( e.KeyCode == Keys.Return ) && e.Alt )\r
+ {\r
+ if( ConfigIni != null )\r
+ {\r
+ ConfigIni.bウィンドウモード = !ConfigIni.bウィンドウモード;\r
+ this.t全画面・ウィンドウモード切り替え();\r
+ }\r
+ e.SuppressKeyPress = true;\r
+ }\r
+ }\r
+ private CScoreIni tScoreIniへBGMAdjustとHistoryとPlayCountを更新( string str新ヒストリ行 )\r
+ {\r
+ bool flag;\r
+ bool flag2;\r
+ bool flag3;\r
+ string str = DTX.strファイル名の絶対パス + ".score.ini";\r
+ CScoreIni ini = new CScoreIni( str );\r
+ if( !File.Exists( str ) )\r
+ {\r
+ ini.stファイル.Title = DTX.TITLE;\r
+ ini.stファイル.Name = DTX.strファイル名;\r
+ ini.stファイル.Hash = CScoreIni.tファイルのMD5を求めて返す( DTX.strファイル名の絶対パス );\r
+ for( int i = 0; i < 6; i++ )\r
+ {\r
+ ini.stセクション[ i ].nPerfectになる範囲ms = nPerfect範囲ms;\r
+ ini.stセクション[ i ].nGreatになる範囲ms = nGreat範囲ms;\r
+ ini.stセクション[ i ].nGoodになる範囲ms = nGood範囲ms;\r
+ ini.stセクション[ i ].nPoorになる範囲ms = nPoor範囲ms;\r
+ }\r
+ }\r
+ ini.stファイル.BGMAdjust = DTX.nBGMAdjust;\r
+ CScoreIni.t更新条件を取得する( out flag, out flag2, out flag3 );\r
+ if( ( flag || flag2 ) || flag3 )\r
+ {\r
+ if( flag )\r
+ {\r
+ ini.stファイル.PlayCountDrums++;\r
+ }\r
+ if( flag2 )\r
+ {\r
+ ini.stファイル.PlayCountGuitar++;\r
+ }\r
+ if( flag3 )\r
+ {\r
+ ini.stファイル.PlayCountBass++;\r
+ }\r
+ ini.tヒストリを追加する( str新ヒストリ行 );\r
+ if( !bコンパクトモード )\r
+ {\r
+ stage選曲.r現在選択中のスコア.譜面情報.演奏回数.Drums = ini.stファイル.PlayCountDrums;\r
+ stage選曲.r現在選択中のスコア.譜面情報.演奏回数.Guitar = ini.stファイル.PlayCountGuitar;\r
+ stage選曲.r現在選択中のスコア.譜面情報.演奏回数.Bass = ini.stファイル.PlayCountBass;\r
+ for( int j = 0; j < ini.stファイル.History.Length; j++ )\r
+ {\r
+ stage選曲.r現在選択中のスコア.譜面情報.演奏履歴[ j ] = ini.stファイル.History[ j ];\r
+ }\r
+ }\r
+ }\r
+ if( ConfigIni.bScoreIniを出力する )\r
+ {\r
+ ini.t書き出し( str );\r
+ }\r
+\r
+ return ini;\r
+ }\r
+ private void tガベージコレクションを実行する()\r
+ {\r
+ GC.Collect();\r
+ GC.WaitForPendingFinalizers();\r
+ GC.Collect();\r
+ GC.WaitForPendingFinalizers();\r
+ }\r
+ private void tプラグイン検索と生成()\r
+ {\r
+ this.listプラグイン = new List<STPlugin>();\r
+\r
+ string strIPluginActivityの名前 = typeof( IPluginActivity ).FullName;\r
+ string strプラグインフォルダパス = strEXEのあるフォルダ + "Plugins\\";\r
+\r
+ this.t指定フォルダ内でのプラグイン検索と生成( strプラグインフォルダパス, strIPluginActivityの名前 );\r
+\r
+ if( this.listプラグイン.Count > 0 )\r
+ Trace.TraceInformation( this.listプラグイン.Count + " 個のプラグインを読み込みました。" );\r
+ }\r
+ private void t指定フォルダ内でのプラグイン検索と生成( string strプラグインフォルダパス, string strプラグイン型名 )\r
+ {\r
+ // 指定されたパスが存在しないとエラー\r
+ if( !Directory.Exists( strプラグインフォルダパス ) )\r
+ {\r
+ Trace.TraceWarning( "プラグインフォルダが存在しません。(" + strプラグインフォルダパス + ")" );\r
+ return;\r
+ }\r
+\r
+ // (1) すべての *.dll について…\r
+ string[] strDLLs = System.IO.Directory.GetFiles( strプラグインフォルダパス, "*.dll" );\r
+ foreach( string dllName in strDLLs )\r
+ {\r
+ try\r
+ {\r
+ // (1-1) dll をアセンブリとして読み込む。\r
+ System.Reflection.Assembly asm = System.Reflection.Assembly.LoadFrom( dllName );\r
+\r
+ // (1-2) アセンブリ内のすべての型について、プラグインとして有効か調べる\r
+ foreach( Type t in asm.GetTypes() )\r
+ {\r
+ // (1-3) ↓クラスであり↓Publicであり↓抽象クラスでなく↓IPlugin型のインスタンスが作れる 型を持っていれば有効\r
+ if( t.IsClass && t.IsPublic && !t.IsAbstract && t.GetInterface( strプラグイン型名 ) != null )\r
+ {\r
+ // (1-4) クラス名からインスタンスを作成する\r
+ var st = new STPlugin() {\r
+ plugin = (IPluginActivity) asm.CreateInstance( t.FullName ),\r
+ strプラグインフォルダ = Path.GetDirectoryName( dllName ),\r
+ strアセンブリ簡易名 = asm.GetName().Name,\r
+ Version = asm.GetName().Version,\r
+ };\r
+\r
+ // (1-5) プラグインリストへ登録\r
+ this.listプラグイン.Add( st );\r
+ Trace.TraceInformation( "プラグイン {0} ({1}, {2}, {3}) を読み込みました。", t.FullName, Path.GetFileName( dllName ), st.strアセンブリ簡易名, st.Version.ToString() );\r
+ }\r
+ }\r
+ }\r
+ catch\r
+ {\r
+ Trace.TraceInformation( dllName + " からプラグインを生成することに失敗しました。スキップします。" );\r
+ }\r
+ }\r
+\r
+ // (2) サブフォルダがあれば再帰する\r
+ string[] strDirs = Directory.GetDirectories( strプラグインフォルダパス, "*" );\r
+ foreach( string dir in strDirs )\r
+ this.t指定フォルダ内でのプラグイン検索と生成( dir + "\\", strプラグイン型名 );\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+\r
+namespace DTXMania\r
+{\r
+ /// <summary>\r
+ /// <para>DTXMania のバージョン。</para>\r
+ /// <para>例1:"078b" → 整数部=078, 小数部=2000000 ('英字'+'yymmdd') </para>\r
+ /// <para>例2:"078a(100124)" → 整数部=078, 小数部=1100124 ('英字'+'yymmdd')</para>\r
+ /// </summary>\r
+ public class CDTXVersion\r
+ {\r
+ // プロパティ\r
+\r
+ /// <summary>\r
+ /// <para>バージョンが未知のときに true になる。</para>\r
+ /// </summary>\r
+ public bool Unknown\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// <para>DTXMania のバージョンの整数部を表す。</para>\r
+ /// <para>例1:"078b" → 整数部=078</para>\r
+ /// <para>例2:"078a(100124)" → 整数部=078</para>\r
+ /// </summary>\r
+ public int n整数部;\r
+\r
+ /// <summary>\r
+ /// <para>DTXMania のバージョンの小数部を表す。</para>\r
+ /// <para>小数部は、'英字(0~26) * 1000000 + 日付(yymmdd)' の式で表される整数。</para>\r
+ /// <para>例1:"078b" → 小数部=2000000 </para>\r
+ /// <para>例2:"078a(100124)" → 小数部=1100124</para>\r
+ /// </summary>\r
+ public int n小数部;\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public CDTXVersion()\r
+ {\r
+ this.n整数部 = 0;\r
+ this.n小数部 = 0;\r
+ this.Unknown = true;\r
+ }\r
+ public CDTXVersion( int n整数部 )\r
+ {\r
+ this.n整数部 = n整数部;\r
+ this.n小数部 = 0;\r
+ this.Unknown = false;\r
+ }\r
+ public CDTXVersion( string Version )\r
+ {\r
+ this.n整数部 = 0;\r
+ this.n小数部 = 0;\r
+ this.Unknown = true;\r
+ \r
+ if( Version.ToLower().Equals( "unknown" ) )\r
+ {\r
+ this.Unknown = true;\r
+ }\r
+ else\r
+ {\r
+ int num = 0;\r
+ int length = Version.Length;\r
+ if( ( num < length ) && char.IsDigit( Version[ num ] ) )\r
+ {\r
+ // 整数部 取得\r
+ while( ( num < length ) && char.IsDigit( Version[ num ] ) )\r
+ {\r
+ this.n整数部 = ( this.n整数部 * 10 ) + CDTXVersion.DIG10.IndexOf( Version[ num++ ] );\r
+ }\r
+\r
+ // 小数部(1)英字部分 取得\r
+ while( ( num < length ) && ( ( Version[ num ] == ' ' ) || ( Version[ num ] == '(' ) ) )\r
+ {\r
+ num++;\r
+ }\r
+ if( ( num < length ) && ( CDTXVersion.DIG36.IndexOf( Version[ num ] ) >= 10 ) )\r
+ {\r
+ this.n小数部 = CDTXVersion.DIG36.IndexOf( Version[ num++ ] ) - 10;\r
+ if( this.n小数部 >= 0x1a )\r
+ {\r
+ this.n小数部 -= 0x1a;\r
+ }\r
+ this.n小数部++;\r
+ }\r
+\r
+ // 小数部(2)日付部分(yymmdd) 取得\r
+ while( ( num < length ) && ( ( Version[ num ] == ' ' ) || ( Version[ num ] == '(' ) ) )\r
+ {\r
+ num++;\r
+ }\r
+ for( int i = 0; i < 6; i++ )\r
+ {\r
+ this.n小数部 *= 10;\r
+ if( ( num < length ) && char.IsDigit( Version[ num ] ) )\r
+ {\r
+ this.n小数部 += CDTXVersion.DIG10.IndexOf( Version[ num ] );\r
+ }\r
+ num++;\r
+ }\r
+ this.Unknown = false;\r
+ }\r
+ else\r
+ {\r
+ this.Unknown = true;\r
+ }\r
+ }\r
+ }\r
+ public CDTXVersion( int n整数部, int n小数部 )\r
+ {\r
+ this.n整数部 = n整数部;\r
+ this.n小数部 = n小数部;\r
+ this.Unknown = false;\r
+ }\r
+\r
+ \r
+ // メソッド\r
+ \r
+ public string toString()\r
+ {\r
+ var result = new StringBuilder( 32 );\r
+\r
+ // 整数部\r
+ result.Append( this.n整数部.ToString( "000" ) );\r
+\r
+ // 英字部分(あれば)\r
+ if( this.n小数部 >= 1000000 )\r
+ {\r
+ int n英字 = Math.Min( this.n小数部 / 1000000, 26 ); // 1~26\r
+ result.Append( CDTXVersion.DIG36[ 10 + ( n英字 - 1 ) ] );\r
+ }\r
+\r
+ // 日付部分(あれば)\r
+ int n日付 = this.n小数部 % 1000000;\r
+ if( n日付 > 0 )\r
+ {\r
+ result.Append( '(' );\r
+ result.Append( n日付.ToString( "000000" ) );\r
+ result.Append( ')' );\r
+ }\r
+\r
+ return result.ToString();\r
+ }\r
+\r
+ public static bool operator ==( CDTXVersion x, CDTXVersion y )\r
+ {\r
+ return ( ( ( x.n整数部 == y.n整数部 ) && ( x.n小数部 == y.n小数部 ) ) && ( x.Unknown == y.Unknown ) );\r
+ }\r
+ public static bool operator >( CDTXVersion x, CDTXVersion y )\r
+ {\r
+ return ( ( x.n整数部 > y.n整数部 ) || ( ( x.n整数部 == y.n整数部 ) && ( x.n小数部 > y.n小数部 ) ) );\r
+ }\r
+ public static bool operator >=( CDTXVersion x, CDTXVersion y )\r
+ {\r
+ return ( ( x.n整数部 > y.n整数部 ) || ( ( x.n整数部 == y.n整数部 ) && ( x.n小数部 >= y.n小数部 ) ) );\r
+ }\r
+ public static bool operator !=( CDTXVersion x, CDTXVersion y )\r
+ {\r
+ if( ( x.n整数部 == y.n整数部 ) && ( x.n小数部 == y.n小数部 ) )\r
+ {\r
+ return ( x.Unknown != y.Unknown );\r
+ }\r
+ return true;\r
+ }\r
+ public static bool operator <( CDTXVersion x, CDTXVersion y )\r
+ {\r
+ return ( ( x.n整数部 < y.n整数部 ) || ( ( x.n整数部 == y.n整数部 ) && ( x.n小数部 < y.n小数部 ) ) );\r
+ }\r
+ public static bool operator <=( CDTXVersion x, CDTXVersion y )\r
+ {\r
+ return ( ( x.n整数部 < y.n整数部 ) || ( ( x.n整数部 == y.n整数部 ) && ( x.n小数部 <= y.n小数部 ) ) );\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private const string DIG36 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";\r
+ private const string DIG10 = "0123456789";\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ public class CPad\r
+ {\r
+ // プロパティ\r
+\r
+ internal STHIT st検知したデバイス;\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ internal struct STHIT\r
+ {\r
+ public bool Keyboard;\r
+ public bool MIDIIN;\r
+ public bool Joypad;\r
+ public bool Mouse;\r
+ public void Clear()\r
+ {\r
+ this.Keyboard = false;\r
+ this.MIDIIN = false;\r
+ this.Joypad = false;\r
+ this.Mouse = false;\r
+ }\r
+ }\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ internal CPad( CConfigIni configIni, CInput管理 mgrInput )\r
+ {\r
+ this.rConfigIni = configIni;\r
+ this.rInput管理 = mgrInput;\r
+ this.st検知したデバイス.Clear();\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ public List<STInputEvent> GetEvents( E楽器パート part, Eパッド pad )\r
+ {\r
+ CConfigIni.CKeyAssign.STKEYASSIGN[] stkeyassignArray = this.rConfigIni.KeyAssign[ (int) part ][ (int) pad ];\r
+ List<STInputEvent> list = new List<STInputEvent>();\r
+\r
+ // すべての入力デバイスについて…\r
+ foreach( IInputDevice device in this.rInput管理.list入力デバイス )\r
+ {\r
+ if( ( device.list入力イベント != null ) && ( device.list入力イベント.Count != 0 ) )\r
+ {\r
+ foreach( STInputEvent event2 in device.list入力イベント )\r
+ {\r
+ for( int i = 0; i < stkeyassignArray.Length; i++ )\r
+ {\r
+ switch( stkeyassignArray[ i ].入力デバイス )\r
+ {\r
+ case E入力デバイス.キーボード:\r
+ if( ( device.e入力デバイス種別 == E入力デバイス種別.Keyboard ) && ( event2.nKey == stkeyassignArray[ i ].コード ) )\r
+ {\r
+ list.Add( event2 );\r
+ this.st検知したデバイス.Keyboard = true;\r
+ }\r
+ break;\r
+\r
+ case E入力デバイス.MIDI入力:\r
+ if( ( ( device.e入力デバイス種別 == E入力デバイス種別.MidiIn ) && ( device.ID == stkeyassignArray[ i ].ID ) ) && ( event2.nKey == stkeyassignArray[ i ].コード ) )\r
+ {\r
+ list.Add( event2 );\r
+ this.st検知したデバイス.MIDIIN = true;\r
+ }\r
+ break;\r
+\r
+ case E入力デバイス.ジョイパッド:\r
+ if( ( ( device.e入力デバイス種別 == E入力デバイス種別.Joystick ) && ( device.ID == stkeyassignArray[ i ].ID ) ) && ( event2.nKey == stkeyassignArray[ i ].コード ) )\r
+ {\r
+ list.Add( event2 );\r
+ this.st検知したデバイス.Joypad = true;\r
+ }\r
+ break;\r
+\r
+ case E入力デバイス.マウス:\r
+ if( ( device.e入力デバイス種別 == E入力デバイス種別.Mouse ) && ( event2.nKey == stkeyassignArray[ i ].コード ) )\r
+ {\r
+ list.Add( event2 );\r
+ this.st検知したデバイス.Mouse = true;\r
+ }\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ continue;\r
+ }\r
+ }\r
+ return list;\r
+ }\r
+ public bool b押された( E楽器パート part, Eパッド pad )\r
+ {\r
+ if( part != E楽器パート.UNKNOWN )\r
+ {\r
+ \r
+ CConfigIni.CKeyAssign.STKEYASSIGN[] stkeyassignArray = this.rConfigIni.KeyAssign[ (int) part ][ (int) pad ];\r
+ for( int i = 0; i < stkeyassignArray.Length; i++ )\r
+ {\r
+ switch( stkeyassignArray[ i ].入力デバイス )\r
+ {\r
+ case E入力デバイス.キーボード:\r
+ if( !this.rInput管理.Keyboard.bキーが押された( stkeyassignArray[ i ].コード ) )\r
+ break;\r
+\r
+ this.st検知したデバイス.Keyboard = true;\r
+ return true;\r
+\r
+ case E入力デバイス.MIDI入力:\r
+ {\r
+ IInputDevice device2 = this.rInput管理.MidiIn( stkeyassignArray[ i ].ID );\r
+ if( ( device2 == null ) || !device2.bキーが押された( stkeyassignArray[ i ].コード ) )\r
+ break;\r
+\r
+ this.st検知したデバイス.MIDIIN = true;\r
+ return true;\r
+ }\r
+ case E入力デバイス.ジョイパッド:\r
+ {\r
+ if( !this.rConfigIni.dicJoystick.ContainsKey( stkeyassignArray[ i ].ID ) )\r
+ break;\r
+\r
+ IInputDevice device = this.rInput管理.Joystick( stkeyassignArray[ i ].ID );\r
+ if( ( device == null ) || !device.bキーが押された( stkeyassignArray[ i ].コード ) )\r
+ break;\r
+\r
+ this.st検知したデバイス.Joypad = true;\r
+ return true;\r
+ }\r
+ case E入力デバイス.マウス:\r
+ if( !this.rInput管理.Mouse.bキーが押された( stkeyassignArray[ i ].コード ) )\r
+ break;\r
+\r
+ this.st検知したデバイス.Mouse = true;\r
+ return true;\r
+ }\r
+ }\r
+ }\r
+ return false;\r
+ }\r
+ public bool b押されたDGB( Eパッド pad )\r
+ {\r
+ if( !this.b押された( E楽器パート.DRUMS, pad ) && !this.b押された( E楽器パート.GUITAR, pad ) )\r
+ {\r
+ return this.b押された( E楽器パート.BASS, pad );\r
+ }\r
+ return true;\r
+ }\r
+ public bool b押されたGB( Eパッド pad )\r
+ {\r
+ if( !this.b押された( E楽器パート.GUITAR, pad ) )\r
+ {\r
+ return this.b押された( E楽器パート.BASS, pad );\r
+ }\r
+ return true;\r
+ }\r
+ public bool b押されている( E楽器パート part, Eパッド pad )\r
+ {\r
+ if( part != E楽器パート.UNKNOWN )\r
+ {\r
+ CConfigIni.CKeyAssign.STKEYASSIGN[] stkeyassignArray = this.rConfigIni.KeyAssign[ (int) part ][ (int) pad ];\r
+ for( int i = 0; i < stkeyassignArray.Length; i++ )\r
+ {\r
+ switch( stkeyassignArray[ i ].入力デバイス )\r
+ {\r
+ case E入力デバイス.キーボード:\r
+ if( !this.rInput管理.Keyboard.bキーが押されている( stkeyassignArray[ i ].コード ) )\r
+ {\r
+ break;\r
+ }\r
+ this.st検知したデバイス.Keyboard = true;\r
+ return true;\r
+\r
+ case E入力デバイス.ジョイパッド:\r
+ {\r
+ if( !this.rConfigIni.dicJoystick.ContainsKey( stkeyassignArray[ i ].ID ) )\r
+ {\r
+ break;\r
+ }\r
+ IInputDevice device = this.rInput管理.Joystick( stkeyassignArray[ i ].ID );\r
+ if( ( device == null ) || !device.bキーが押されている( stkeyassignArray[ i ].コード ) )\r
+ {\r
+ break;\r
+ }\r
+ this.st検知したデバイス.Joypad = true;\r
+ return true;\r
+ }\r
+ case E入力デバイス.マウス:\r
+ if( !this.rInput管理.Mouse.bキーが押されている( stkeyassignArray[ i ].コード ) )\r
+ {\r
+ break;\r
+ }\r
+ this.st検知したデバイス.Mouse = true;\r
+ return true;\r
+ }\r
+ }\r
+ }\r
+ return false;\r
+ }\r
+ public bool b押されているGB( Eパッド pad )\r
+ {\r
+ if( !this.b押されている( E楽器パート.GUITAR, pad ) )\r
+ {\r
+ return this.b押されている( E楽器パート.BASS, pad );\r
+ }\r
+ return true;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private CConfigIni rConfigIni;\r
+ private CInput管理 rInput管理;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.IO;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ // グローバル定数\r
+\r
+ public enum Eシステムサウンド\r
+ {\r
+ BGMオプション画面,\r
+ BGMコンフィグ画面,\r
+ BGM起動画面,\r
+ BGM選曲画面,\r
+ SOUNDステージ失敗音,\r
+ SOUNDカーソル移動音,\r
+ SOUNDゲーム開始音,\r
+ SOUNDゲーム終了音,\r
+ SOUNDステージクリア音,\r
+ SOUNDタイトル音,\r
+ SOUNDフルコンボ音,\r
+ SOUND歓声音,\r
+ SOUND曲読込開始音,\r
+ SOUND決定音,\r
+ SOUND取消音,\r
+ SOUND変更音,\r
+ }\r
+\r
+ internal class CSkin : IDisposable\r
+ {\r
+ // クラス\r
+\r
+ public class Cシステムサウンド : IDisposable\r
+ {\r
+ // static フィールド\r
+\r
+ public static CSkin.Cシステムサウンド r最後に再生した排他システムサウンド;\r
+\r
+ // フィールド、プロパティ\r
+\r
+ public bool bCompact対象;\r
+ public bool bループ;\r
+ public bool b読み込み成功;\r
+ public bool b排他;\r
+ public string strファイル名 = "";\r
+ public bool b再生中\r
+ {\r
+ get\r
+ {\r
+ if( this.rSound[ 1 - this.n次に鳴るサウンド番号 ] == null )\r
+ return false;\r
+\r
+ return this.rSound[ 1 - this.n次に鳴るサウンド番号 ].b再生中;\r
+ }\r
+ }\r
+ public int n位置・現在のサウンド\r
+ {\r
+ get\r
+ {\r
+ CSound sound = this.rSound[ 1 - this.n次に鳴るサウンド番号 ];\r
+ if( sound == null )\r
+ return 0;\r
+\r
+ return sound.n位置;\r
+ }\r
+ set\r
+ {\r
+ CSound sound = this.rSound[ 1 - this.n次に鳴るサウンド番号 ];\r
+ if( sound != null )\r
+ sound.n位置 = value;\r
+ }\r
+ }\r
+ public int n位置・次に鳴るサウンド\r
+ {\r
+ get\r
+ {\r
+ CSound sound = this.rSound[ this.n次に鳴るサウンド番号 ];\r
+ if( sound == null )\r
+ return 0;\r
+\r
+ return sound.n位置;\r
+ }\r
+ set\r
+ {\r
+ CSound sound = this.rSound[ this.n次に鳴るサウンド番号 ];\r
+ if( sound != null )\r
+ sound.n位置 = value;\r
+ }\r
+ }\r
+ public int n音量・現在のサウンド\r
+ {\r
+ get\r
+ {\r
+ CSound sound = this.rSound[ 1 - this.n次に鳴るサウンド番号 ];\r
+ if( sound == null )\r
+ return 0;\r
+\r
+ return sound.n音量;\r
+ }\r
+ set\r
+ {\r
+ CSound sound = this.rSound[ 1 - this.n次に鳴るサウンド番号 ];\r
+ if( sound != null )\r
+ sound.n音量 = value;\r
+ }\r
+ }\r
+ public int n音量・次に鳴るサウンド\r
+ {\r
+ get\r
+ {\r
+ CSound sound = this.rSound[ this.n次に鳴るサウンド番号 ];\r
+ if( sound == null )\r
+ {\r
+ return 0;\r
+ }\r
+ return sound.n音量;\r
+ }\r
+ set\r
+ {\r
+ CSound sound = this.rSound[ this.n次に鳴るサウンド番号 ];\r
+ if( sound != null )\r
+ {\r
+ sound.n音量 = value;\r
+ }\r
+ }\r
+ }\r
+ public int n長さ・現在のサウンド\r
+ {\r
+ get\r
+ {\r
+ CSound sound = this.rSound[ 1 - this.n次に鳴るサウンド番号 ];\r
+ if( sound == null )\r
+ {\r
+ return 0;\r
+ }\r
+ return sound.n総演奏時間ms;\r
+ }\r
+ }\r
+ public int n長さ・次に鳴るサウンド\r
+ {\r
+ get\r
+ {\r
+ CSound sound = this.rSound[ this.n次に鳴るサウンド番号 ];\r
+ if( sound == null )\r
+ {\r
+ return 0;\r
+ }\r
+ return sound.n総演奏時間ms;\r
+ }\r
+ }\r
+\r
+ // メソッド\r
+\r
+ public void t読み込み()\r
+ {\r
+ this.b読み込み成功 = false;\r
+ if( string.IsNullOrEmpty( this.strファイル名 ) )\r
+ throw new InvalidOperationException( "ファイル名が無効です。" );\r
+\r
+ if( !File.Exists( CSkin.Path( this.strファイル名 ) ) )\r
+ {\r
+ throw new FileNotFoundException( this.strファイル名 );\r
+ }\r
+ for( int i = 0; i < 2; i++ )\r
+ {\r
+ try\r
+ {\r
+ this.rSound[ i ] = CDTXMania.Sound管理.tサウンドを生成する( CSkin.Path( this.strファイル名 ) );\r
+ }\r
+ catch\r
+ {\r
+ this.rSound[ i ] = null;\r
+ throw;\r
+ }\r
+ }\r
+ this.b読み込み成功 = true;\r
+ }\r
+ public void t再生する()\r
+ {\r
+ if( this.b排他 )\r
+ {\r
+ if( r最後に再生した排他システムサウンド != null )\r
+ r最後に再生した排他システムサウンド.t停止する();\r
+\r
+ r最後に再生した排他システムサウンド = this;\r
+ }\r
+ CSound sound = this.rSound[ this.n次に鳴るサウンド番号 ];\r
+ if( sound != null )\r
+ sound.t再生を開始する( this.bループ );\r
+\r
+ this.n次に鳴るサウンド番号 = 1 - this.n次に鳴るサウンド番号;\r
+ }\r
+ public void t停止する()\r
+ {\r
+ if( this.rSound[ 0 ] != null )\r
+ this.rSound[ 0 ].t再生を停止する();\r
+\r
+ if( this.rSound[ 1 ] != null )\r
+ this.rSound[ 1 ].t再生を停止する();\r
+\r
+ if( r最後に再生した排他システムサウンド == this )\r
+ r最後に再生した排他システムサウンド = null;\r
+ }\r
+\r
+ #region [ IDisposable 実装 ]\r
+ //-----------------\r
+ public void Dispose()\r
+ {\r
+ if( !this.bDisposed済み )\r
+ {\r
+ for( int i = 0; i < 2; i++ )\r
+ {\r
+ if( this.rSound[ i ] != null )\r
+ {\r
+ CDTXMania.Sound管理.tサウンドを破棄する( this.rSound[ i ] );\r
+ this.rSound[ i ] = null;\r
+ }\r
+ }\r
+ this.b読み込み成功 = false;\r
+ this.bDisposed済み = true;\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private bool bDisposed済み;\r
+ private int n次に鳴るサウンド番号;\r
+ private CSound[] rSound = new CSound[ 2 ];\r
+ //-----------------\r
+ #endregion\r
+ }\r
+\r
+ \r
+ // プロパティ\r
+\r
+ public Cシステムサウンド bgmオプション画面;\r
+ public Cシステムサウンド bgmコンフィグ画面;\r
+ public Cシステムサウンド bgm起動画面;\r
+ public Cシステムサウンド bgm選曲画面;\r
+ public Cシステムサウンド soundSTAGEFAILED音;\r
+ public Cシステムサウンド soundカーソル移動音;\r
+ public Cシステムサウンド soundゲーム開始音;\r
+ public Cシステムサウンド soundゲーム終了音;\r
+ public Cシステムサウンド soundステージクリア音;\r
+ public Cシステムサウンド soundタイトル音;\r
+ public Cシステムサウンド soundフルコンボ音;\r
+ public Cシステムサウンド sound歓声音;\r
+ public Cシステムサウンド sound曲読込開始音;\r
+ public Cシステムサウンド sound決定音;\r
+ public Cシステムサウンド sound取消音;\r
+ public Cシステムサウンド sound変更音;\r
+ public readonly int nシステムサウンド数 = 16;\r
+ public Cシステムサウンド this[ Eシステムサウンド sound ]\r
+ {\r
+ get\r
+ {\r
+ switch( sound )\r
+ {\r
+ case Eシステムサウンド.SOUNDカーソル移動音:\r
+ return this.soundカーソル移動音;\r
+\r
+ case Eシステムサウンド.SOUND決定音:\r
+ return this.sound決定音;\r
+\r
+ case Eシステムサウンド.SOUND変更音:\r
+ return this.sound変更音;\r
+\r
+ case Eシステムサウンド.SOUND取消音:\r
+ return this.sound取消音;\r
+\r
+ case Eシステムサウンド.SOUND歓声音:\r
+ return this.sound歓声音;\r
+\r
+ case Eシステムサウンド.SOUNDステージ失敗音:\r
+ return this.soundSTAGEFAILED音;\r
+\r
+ case Eシステムサウンド.SOUNDゲーム開始音:\r
+ return this.soundゲーム開始音;\r
+\r
+ case Eシステムサウンド.SOUNDゲーム終了音:\r
+ return this.soundゲーム終了音;\r
+\r
+ case Eシステムサウンド.SOUNDステージクリア音:\r
+ return this.soundステージクリア音;\r
+\r
+ case Eシステムサウンド.SOUNDフルコンボ音:\r
+ return this.soundフルコンボ音;\r
+\r
+ case Eシステムサウンド.SOUND曲読込開始音:\r
+ return this.sound曲読込開始音;\r
+\r
+ case Eシステムサウンド.SOUNDタイトル音:\r
+ return this.soundタイトル音;\r
+\r
+ case Eシステムサウンド.BGM起動画面:\r
+ return this.bgm起動画面;\r
+\r
+ case Eシステムサウンド.BGMオプション画面:\r
+ return this.bgmオプション画面;\r
+\r
+ case Eシステムサウンド.BGMコンフィグ画面:\r
+ return this.bgmコンフィグ画面;\r
+\r
+ case Eシステムサウンド.BGM選曲画面:\r
+ return this.bgm選曲画面;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ }\r
+ public Cシステムサウンド this[ int index ]\r
+ {\r
+ get\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ return this.soundカーソル移動音;\r
+\r
+ case 1:\r
+ return this.sound決定音;\r
+\r
+ case 2:\r
+ return this.sound変更音;\r
+\r
+ case 3:\r
+ return this.sound取消音;\r
+\r
+ case 4:\r
+ return this.sound歓声音;\r
+\r
+ case 5:\r
+ return this.soundSTAGEFAILED音;\r
+\r
+ case 6:\r
+ return this.soundゲーム開始音;\r
+\r
+ case 7:\r
+ return this.soundゲーム終了音;\r
+\r
+ case 8:\r
+ return this.soundステージクリア音;\r
+\r
+ case 9:\r
+ return this.soundフルコンボ音;\r
+\r
+ case 10:\r
+ return this.sound曲読込開始音;\r
+\r
+ case 11:\r
+ return this.soundタイトル音;\r
+\r
+ case 12:\r
+ return this.bgm起動画面;\r
+\r
+ case 13:\r
+ return this.bgmオプション画面;\r
+\r
+ case 14:\r
+ return this.bgmコンフィグ画面;\r
+\r
+ case 15:\r
+ return this.bgm選曲画面;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ }\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public CSkin()\r
+ {\r
+ Cシステムサウンド cシステムサウンド = new Cシステムサウンド();\r
+ cシステムサウンド.strファイル名 = @"Sounds\Move.ogg";\r
+ cシステムサウンド.bループ = false;\r
+ cシステムサウンド.b排他 = false;\r
+ cシステムサウンド.bCompact対象 = false;\r
+ this.soundカーソル移動音 = cシステムサウンド;\r
+ Cシステムサウンド cシステムサウンド2 = new Cシステムサウンド();\r
+ cシステムサウンド2.strファイル名 = @"Sounds\Decide.ogg";\r
+ cシステムサウンド2.bループ = false;\r
+ cシステムサウンド2.b排他 = false;\r
+ cシステムサウンド2.bCompact対象 = false;\r
+ this.sound決定音 = cシステムサウンド2;\r
+ Cシステムサウンド cシステムサウンド3 = new Cシステムサウンド();\r
+ cシステムサウンド3.strファイル名 = @"Sounds\Change.ogg";\r
+ cシステムサウンド3.bループ = false;\r
+ cシステムサウンド3.b排他 = false;\r
+ cシステムサウンド3.bCompact対象 = false;\r
+ this.sound変更音 = cシステムサウンド3;\r
+ Cシステムサウンド cシステムサウンド4 = new Cシステムサウンド();\r
+ cシステムサウンド4.strファイル名 = @"Sounds\Cancel.ogg";\r
+ cシステムサウンド4.bループ = false;\r
+ cシステムサウンド4.b排他 = false;\r
+ cシステムサウンド4.bCompact対象 = true;\r
+ this.sound取消音 = cシステムサウンド4;\r
+ Cシステムサウンド cシステムサウンド5 = new Cシステムサウンド();\r
+ cシステムサウンド5.strファイル名 = @"Sounds\Audience.ogg";\r
+ cシステムサウンド5.bループ = false;\r
+ cシステムサウンド5.b排他 = false;\r
+ cシステムサウンド5.bCompact対象 = true;\r
+ this.sound歓声音 = cシステムサウンド5;\r
+ Cシステムサウンド cシステムサウンド6 = new Cシステムサウンド();\r
+ cシステムサウンド6.strファイル名 = @"Sounds\Stage failed.ogg";\r
+ cシステムサウンド6.bループ = false;\r
+ cシステムサウンド6.b排他 = true;\r
+ cシステムサウンド6.bCompact対象 = true;\r
+ this.soundSTAGEFAILED音 = cシステムサウンド6;\r
+ Cシステムサウンド cシステムサウンド7 = new Cシステムサウンド();\r
+ cシステムサウンド7.strファイル名 = @"Sounds\Game start.ogg";\r
+ cシステムサウンド7.bループ = false;\r
+ cシステムサウンド7.b排他 = false;\r
+ cシステムサウンド7.bCompact対象 = false;\r
+ this.soundゲーム開始音 = cシステムサウンド7;\r
+ Cシステムサウンド cシステムサウンド8 = new Cシステムサウンド();\r
+ cシステムサウンド8.strファイル名 = @"Sounds\Game end.ogg";\r
+ cシステムサウンド8.bループ = false;\r
+ cシステムサウンド8.b排他 = true;\r
+ cシステムサウンド8.bCompact対象 = false;\r
+ this.soundゲーム終了音 = cシステムサウンド8;\r
+ Cシステムサウンド cシステムサウンド9 = new Cシステムサウンド();\r
+ cシステムサウンド9.strファイル名 = @"Sounds\Stage clear.ogg";\r
+ cシステムサウンド9.bループ = false;\r
+ cシステムサウンド9.b排他 = true;\r
+ cシステムサウンド9.bCompact対象 = true;\r
+ this.soundステージクリア音 = cシステムサウンド9;\r
+ Cシステムサウンド cシステムサウンド10 = new Cシステムサウンド();\r
+ cシステムサウンド10.strファイル名 = @"Sounds\Full combo.ogg";\r
+ cシステムサウンド10.bループ = false;\r
+ cシステムサウンド10.b排他 = false;\r
+ cシステムサウンド10.bCompact対象 = true;\r
+ this.soundフルコンボ音 = cシステムサウンド10;\r
+ Cシステムサウンド cシステムサウンド11 = new Cシステムサウンド();\r
+ cシステムサウンド11.strファイル名 = @"Sounds\Now loading.ogg";\r
+ cシステムサウンド11.bループ = false;\r
+ cシステムサウンド11.b排他 = true;\r
+ cシステムサウンド11.bCompact対象 = true;\r
+ this.sound曲読込開始音 = cシステムサウンド11;\r
+ Cシステムサウンド cシステムサウンド12 = new Cシステムサウンド();\r
+ cシステムサウンド12.strファイル名 = @"Sounds\Title.ogg";\r
+ cシステムサウンド12.bループ = false;\r
+ cシステムサウンド12.b排他 = true;\r
+ cシステムサウンド12.bCompact対象 = false;\r
+ this.soundタイトル音 = cシステムサウンド12;\r
+ Cシステムサウンド cシステムサウンド13 = new Cシステムサウンド();\r
+ cシステムサウンド13.strファイル名 = @"Sounds\Setup BGM.ogg";\r
+ cシステムサウンド13.bループ = true;\r
+ cシステムサウンド13.b排他 = true;\r
+ cシステムサウンド13.bCompact対象 = false;\r
+ this.bgm起動画面 = cシステムサウンド13;\r
+ Cシステムサウンド cシステムサウンド14 = new Cシステムサウンド();\r
+ cシステムサウンド14.strファイル名 = @"Sounds\Option BGM.ogg";\r
+ cシステムサウンド14.bループ = true;\r
+ cシステムサウンド14.b排他 = true;\r
+ cシステムサウンド14.bCompact対象 = false;\r
+ this.bgmオプション画面 = cシステムサウンド14;\r
+ Cシステムサウンド cシステムサウンド15 = new Cシステムサウンド();\r
+ cシステムサウンド15.strファイル名 = @"Sounds\Config BGM.ogg";\r
+ cシステムサウンド15.bループ = true;\r
+ cシステムサウンド15.b排他 = true;\r
+ cシステムサウンド15.bCompact対象 = false;\r
+ this.bgmコンフィグ画面 = cシステムサウンド15;\r
+ Cシステムサウンド cシステムサウンド16 = new Cシステムサウンド();\r
+ cシステムサウンド16.strファイル名 = @"Sounds\Select BGM.ogg";\r
+ cシステムサウンド16.bループ = true;\r
+ cシステムサウンド16.b排他 = true;\r
+ cシステムサウンド16.bCompact対象 = false;\r
+ this.bgm選曲画面 = cシステムサウンド16;\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ public static string Path( string strファイルの相対パス )\r
+ {\r
+ return ( CDTXMania.strEXEのあるフォルダ + @"System\" + strファイルの相対パス );\r
+ }\r
+ \r
+ #region [ IDisposable 実装 ]\r
+ //-----------------\r
+ public void Dispose()\r
+ {\r
+ if( !this.bDisposed済み )\r
+ {\r
+ for( int i = 0; i < this.nシステムサウンド数; i++ )\r
+ this[ i ].Dispose();\r
+\r
+ this.bDisposed済み = true;\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private bool bDisposed済み;\r
+ //-----------------\r
+ #endregion\r
+\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+\r
+namespace DTXMania\r
+{\r
+ public enum ECYGroup\r
+ {\r
+ 打ち分ける,\r
+ 共通\r
+ }\r
+ public enum EFTGroup\r
+ {\r
+ 打ち分ける,\r
+ 共通\r
+ }\r
+ public enum EHHGroup\r
+ {\r
+ 全部打ち分ける,\r
+ ハイハットのみ打ち分ける,\r
+ 左シンバルのみ打ち分ける,\r
+ 全部共通\r
+ }\r
+ public enum Eダークモード\r
+ {\r
+ OFF,\r
+ HALF,\r
+ FULL\r
+ }\r
+ public enum Eダメージレベル\r
+ {\r
+ 少ない,\r
+ 普通,\r
+ 大きい\r
+ }\r
+ public enum Eパッド\r
+ {\r
+ B = 2,\r
+ BD = 2,\r
+ Cancel = 5,\r
+ CY = 6,\r
+ Decide = 6,\r
+ FT = 5,\r
+ G = 1,\r
+ HH = 0,\r
+ HHO = 7,\r
+ HT = 3,\r
+ LC = 9,\r
+ LT = 4,\r
+ Pick = 3,\r
+ R = 0,\r
+ RD = 8,\r
+ SD = 1,\r
+ UNKNOWN = 0x63,\r
+ Wail = 4\r
+ }\r
+ public enum Eランダムモード\r
+ {\r
+ OFF,\r
+ RANDOM,\r
+ SUPERRANDOM,\r
+ HYPERRANDOM\r
+ }\r
+ public enum E楽器パート\r
+ {\r
+ BASS = 2,\r
+ DRUMS = 0,\r
+ GUITAR = 1,\r
+ UNKNOWN = 0x63\r
+ }\r
+ public enum E打ち分け時の再生の優先順位\r
+ {\r
+ ChipがPadより優先,\r
+ PadがChipより優先\r
+ }\r
+ internal enum E入力デバイス\r
+ {\r
+ MIDI入力 = 1,\r
+ キーボード = 0,\r
+ ジョイパッド = 2,\r
+ マウス = 3,\r
+ 不明 = -1\r
+ }\r
+ internal enum E判定\r
+ {\r
+ Perfect,\r
+ Great,\r
+ Good,\r
+ Poor,\r
+ Miss,\r
+ Bad,\r
+ Auto\r
+ }\r
+ internal enum E判定文字表示位置\r
+ {\r
+ レーン上,\r
+ 判定ライン上または横,\r
+ 表示OFF\r
+ }\r
+ internal enum EAVI種別\r
+ {\r
+ Unknown,\r
+ AVI,\r
+ AVIPAN\r
+ }\r
+ internal enum EBGA種別\r
+ {\r
+ Unknown,\r
+ BMP,\r
+ BMPTEX,\r
+ BGA,\r
+ BGAPAN\r
+ }\r
+ internal enum EFIFOモード\r
+ {\r
+ フェードイン,\r
+ フェードアウト\r
+ }\r
+ internal enum Eドラムコンボ文字の表示位置\r
+ {\r
+ LEFT,\r
+ CENTER,\r
+ RIGHT,\r
+ OFF\r
+ }\r
+ internal enum Eドラムレーン\r
+ {\r
+ LC,\r
+ HH,\r
+ SD,\r
+ BD,\r
+ HT,\r
+ LT,\r
+ FT,\r
+ CY\r
+ }\r
+ internal enum Eログ出力\r
+ {\r
+ OFF,\r
+ ON通常,\r
+ ON詳細あり\r
+ }\r
+ internal enum E演奏画面の戻り値\r
+ {\r
+ 継続,\r
+ 演奏中断,\r
+ ステージ失敗,\r
+ ステージクリア\r
+ }\r
+\r
+ /// <summary>\r
+ /// Drum/Guitar/Bass の値を扱う汎用の構造体。\r
+ /// </summary>\r
+ /// <typeparam name="T">値の型。</typeparam>\r
+ [StructLayout(LayoutKind.Sequential)]\r
+ public struct STDGBVALUE<T>\r
+ {\r
+ public T Drums;\r
+ public T Guitar;\r
+ public T Bass;\r
+ public T Unknown;\r
+ public T this[ int index ]\r
+ {\r
+ get\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ return this.Drums;\r
+\r
+ case 1:\r
+ return this.Guitar;\r
+\r
+ case 2:\r
+ return this.Bass;\r
+\r
+ case 0x63:\r
+ return this.Unknown;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ set\r
+ {\r
+ switch( index )\r
+ {\r
+ case 0:\r
+ this.Drums = value;\r
+ return;\r
+\r
+ case 1:\r
+ this.Guitar = value;\r
+ return;\r
+\r
+ case 2:\r
+ this.Bass = value;\r
+ return;\r
+\r
+ case 0x63:\r
+ this.Unknown = value;\r
+ return;\r
+ }\r
+ throw new IndexOutOfRangeException();\r
+ }\r
+ }\r
+ }\r
+\r
+\r
+ internal class C定数\r
+ {\r
+ public const int BGA_H = 0x163;\r
+ public const int BGA_W = 0x116;\r
+ public const int HIDDEN_POS = 100;\r
+ public const int MAX_AVI_LAYER = 1;\r
+ public const int MAX_WAILING = 4;\r
+ public const int PANEL_H = 0x1a;\r
+ public const int PANEL_W = 0x116;\r
+ public const int PREVIEW_H = 0x10d;\r
+ public const int PREVIEW_W = 0xcc;\r
+ public const int SCORE_H = 0x18;\r
+ public const int SCORE_W = 12;\r
+ public const int SUDDEN_POS = 200;\r
+\r
+ public class Drums\r
+ {\r
+ public const int BAR_Y = 0x1a6;\r
+ public const int BAR_Y_REV = 0x38;\r
+ public const int BASS_BAR_Y = 0x5f;\r
+ public const int BASS_BAR_Y_REV = 0x176;\r
+ public const int BASS_H = 0x163;\r
+ public const int BASS_W = 0x6d;\r
+ public const int BASS_X = 0x18e;\r
+ public const int BASS_Y = 0x39;\r
+ public const int BGA_X = 0x152;\r
+ public const int BGA_Y = 0x39;\r
+ public const int GAUGE_H = 0x160;\r
+ public const int GAUGE_W = 0x10;\r
+ public const int GAUGE_X = 6;\r
+ public const int GAUGE_Y = 0x35;\r
+ public const int GUITAR_BAR_Y = 0x5f;\r
+ public const int GUITAR_BAR_Y_REV = 0x176;\r
+ public const int GUITAR_H = 0x163;\r
+ public const int GUITAR_W = 0x6d;\r
+ public const int GUITAR_X = 0x1fb;\r
+ public const int GUITAR_Y = 0x39;\r
+ public const int PANEL_X = 0x150;\r
+ public const int PANEL_Y = 0x1ab;\r
+ public const int SCORE_X = 0x164;\r
+ public const int SCORE_Y = 14;\r
+ }\r
+ public class Guitar\r
+ {\r
+ public const int BAR_Y = 40;\r
+ public const int BAR_Y_REV = 0x171;\r
+ public const int BASS_H = 0x199;\r
+ public const int BASS_W = 140;\r
+ public const int BASS_X = 480;\r
+ public const int BASS_Y = 0;\r
+ public const int BGA_X = 0xb5;\r
+ public const int BGA_Y = 50;\r
+ public const int GAUGE_H = 0x10;\r
+ public const int GAUGE_W = 0x80;\r
+ public const int GAUGE_X_BASS = 0x14f;\r
+ public const int GAUGE_X_GUITAR = 0xb2;\r
+ public const int GAUGE_Y_BASS = 8;\r
+ public const int GAUGE_Y_GUITAR = 8;\r
+ public const int GUITAR_H = 0x199;\r
+ public const int GUITAR_W = 140;\r
+ public const int GUITAR_X = 0x1a;\r
+ public const int GUITAR_Y = 0;\r
+ public const int PANEL_X = 0xb5;\r
+ public const int PANEL_Y = 430;\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Drawing;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class C文字コンソール : CActivity\r
+ {\r
+ // 定数\r
+\r
+ public enum Eフォント種別\r
+ {\r
+ 白,\r
+ 赤,\r
+ 灰,\r
+ 白細,\r
+ 赤細,\r
+ 灰細\r
+ }\r
+ public enum E配置\r
+ {\r
+ 左詰,\r
+ 中央,\r
+ 右詰\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ public void tPrint( int x, int y, Eフォント種別 font, string str英数字文字列 )\r
+ {\r
+ if( !base.b活性化してない && !string.IsNullOrEmpty( str英数字文字列 ) )\r
+ {\r
+ int num = x;\r
+ for( int i = 0; i < str英数字文字列.Length; i++ )\r
+ {\r
+ char ch = str英数字文字列[ i ];\r
+ if( ch == '\n' )\r
+ {\r
+ x = num;\r
+ y += 0x10;\r
+ }\r
+ else\r
+ {\r
+ int num3 = 0;\r
+ while( num3 < " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ".Length )\r
+ {\r
+ if( " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ "[ num3 ] == ch )\r
+ {\r
+ break;\r
+ }\r
+ num3++;\r
+ }\r
+ if( num3 >= " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ".Length )\r
+ {\r
+ x += 8;\r
+ }\r
+ else\r
+ {\r
+ if( this.txフォント8x16[ (int) ( (int) font / (int) Eフォント種別.白細 ) ] != null )\r
+ {\r
+ this.txフォント8x16[ (int) ( (int) font / (int) Eフォント種別.白細 ) ].t2D描画( CDTXMania.app.Device, x, y, this.rc文字の矩形領域[ (int) ( (int) font % (int) Eフォント種別.白細 ), num3 ] );\r
+ }\r
+ x += 8;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ this.rc文字の矩形領域 = new Rectangle[ 3, 0x60 ];\r
+ for( int i = 0; i < 3; i++ )\r
+ {\r
+ for( int j = 0; j < 0x60; j++ )\r
+ {\r
+ this.rc文字の矩形領域[ i, j ].X = ( ( i / 2 ) * 0x80 ) + ( ( j % 0x10 ) * 8 );\r
+ this.rc文字の矩形領域[ i, j ].Y = ( ( i % 2 ) * 0x80 ) + ( ( j / 0x10 ) * 0x10 );\r
+ this.rc文字の矩形領域[ i, j ].Width = 8;\r
+ this.rc文字の矩形領域[ i, j ].Height = 0x10;\r
+ }\r
+ }\r
+ base.On活性化();\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ if( this.rc文字の矩形領域 != null )\r
+ this.rc文字の矩形領域 = null;\r
+\r
+ base.On非活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ this.txフォント8x16[ 0 ] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\Console font 8x16.png" ) );\r
+ this.txフォント8x16[ 1 ] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\Console font 2 8x16.png" ) );\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if( !base.b活性化してない )\r
+ {\r
+ for( int i = 0; i < 2; i++ )\r
+ {\r
+ if( this.txフォント8x16[ i ] != null )\r
+ {\r
+ this.txフォント8x16[ i ].Dispose();\r
+ this.txフォント8x16[ i ] = null;\r
+ }\r
+ }\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private Rectangle[,] rc文字の矩形領域;\r
+ private const string str表記可能文字 = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ";\r
+ private CTexture[] txフォント8x16 = new CTexture[ 2 ];\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using System.Threading;\r
+using System.Diagnostics;\r
+using System.Windows.Forms;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class Program\r
+ {\r
+ #region [ 二重機動チェック、DLL存在チェック ]\r
+ //-----------------------------\r
+ private static Mutex mutex二重起動防止用;\r
+\r
+ private static bool tDLLの存在チェック( string strDll名, string str存在しないときに表示するエラー文字列 )\r
+ {\r
+ IntPtr hModule = LoadLibrary( strDll名 );\r
+ if( hModule == IntPtr.Zero )\r
+ {\r
+ MessageBox.Show( str存在しないときに表示するエラー文字列, "DTXMania runtime error", MessageBoxButtons.OK, MessageBoxIcon.Hand );\r
+ return false;\r
+ }\r
+ FreeLibrary( hModule );\r
+ return true;\r
+ }\r
+\r
+ [DllImport( "kernel32", CharSet = CharSet.Unicode, SetLastError = true )]\r
+ internal static extern void FreeLibrary( IntPtr hModule );\r
+\r
+ [DllImport( "kernel32", CharSet = CharSet.Unicode, SetLastError = true )]\r
+ internal static extern IntPtr LoadLibrary( string lpFileName );\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ [STAThread]\r
+ private static void Main()\r
+ {\r
+ mutex二重起動防止用 = new Mutex( false, "DTXManiaMutex" );\r
+\r
+ if( mutex二重起動防止用.WaitOne( 0, false ) )\r
+ {\r
+ string newLine = Environment.NewLine;\r
+ bool flag = false;\r
+\r
+ if( !tDLLの存在チェック( "FDK.dll", "FDK.dll またはその依存するdllが存在しません。" + newLine + "DTXManiaをダウンロードしなおしてください。" ) ) flag = true;\r
+ if( !tDLLの存在チェック( "SlimDX" + CDTXMania.SLIMDXDLL, "SlimDX" + CDTXMania.SLIMDXDLL + ".dll またはその依存するdllが存在しません。" + newLine + "DTXManiaをダウンロードしなおしてください。" ) ) flag = true;\r
+ if( !tDLLの存在チェック( "xadec.dll", "xadec.dll が存在しません。" + newLine + "DTXManiaをダウンロードしなおしてください。" ) ) flag = true;\r
+ if( !tDLLの存在チェック( "SoundDecoder.dll", "SoundDecoder.dll またはその依存するdllが存在しません。" + newLine + "DTXManiaをダウンロードしなおしてください。" ) ) flag = true;\r
+ if( !tDLLの存在チェック( CDTXMania.D3DXDLL, CDTXMania.D3DXDLL + " が存在しません。" + newLine + "Direct Regist フォルダの DXSETUP.exe を実行し、" + newLine + "必要な DirectX ランタイムをインストールしてください。" ) ) flag = true;\r
+ if( !flag )\r
+ {\r
+ using( var mania = new CDTXMania() )\r
+ mania.Run();\r
+\r
+ Trace.WriteLine( "" );\r
+ Trace.WriteLine( "遊んでくれてありがとう!" );\r
+ \r
+ if( Trace.Listeners.Count > 1 )\r
+ Trace.Listeners.RemoveAt( 1 );\r
+ }\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+\81E\83t\83@\83C\83\8b\8c\88\92è\8e\9e\82É\83X\83^\81[\83g\83\81\83b\83Z\81[\83W\91\97\90M\r
+\81E\82R\95b\91Ò\8b@\83X\83^\81[\83g\r
+\81E\89\89\91t\8fI\97¹\8e\9e\82É\83X\83g\83b\83v\83\81\83b\83Z\81[\83W\91\97\90M\r
+\82Ì\8c\8f\82Å\81u\91¼\82Ì\83}\83V\83\93\82Æ\82Ì\93¯\8aú\89\89\91t\81v\82Æ\90à\96¾\82µ\82Ä\82¢\82Ü\82µ\82½\82ª\81A\82º\82Ð\83T\83|\81[\83g\82µ\82Ä\r
+\96á\82¢\82½\82¢\82Æ\8ev\82Á\82Ä\82¢\82é\82Ì\82Å\8fÚ\82µ\82\90à\96¾\82¢\82½\82µ\82Ü\82·\81B\r
+\r
+\8cf\8e¦\94Â\82Ì\95û\82Åaska\82³\82ñ\82Æ\82¢\82¤\95û\82ª\83L\81[\83}\83j\82Æ\82Ì\83Z\83b\83V\83\87\83\93\82Ì\8e\96\82ð\93Ë\82Á\8d\9e\82ñ\82Å\82¨\r
+\82ç\82ê\82Ü\82µ\82½\82ª\81A\8eÀ\82Í\82±\82Ì\95û\81AKeyBoardMIDI\82Æ\82¢\82¤\83L\81[\83}\83j\83V\83\80\82ð\8c»\8dÝ\8dì\90¬\92\86\82Å\82·\81B\r
+\8c»\8dÝ\81ADrumMIDI\82Æ\82Ì\83Z\83b\83V\83\87\83\93\82ð\83e\83X\83g\82µ\82Ä\82¢\82é\8f\8a\82Ü\82Å\97\88\82Ä\82¢\82Ü\82·\81B\82»\82±\82Å\81A\r
+DTXMania\82É\82à\82±\82Ì\83Z\83b\83V\83\87\83\93\8b@\94\\82ð\93ü\82ê\82ÄKeyBoardMIDI\82Æ\82Ì\83Z\83b\83V\83\87\83\93\82ª\89Â\94\\82È\r
+\82æ\82¤\82É\82µ\82½\82¢\82Æ\8ev\82Á\82Ä\82¢\82Ü\82·\81B\r
+\r
+\82Ç\82¤\82¢\82¤\83Z\83b\83V\83\87\83\93\82É\82È\82é\82©\82Æ\82¢\82¤\82Æ\81AMIDI\83P\81[\83u\83\8b\82Å\83}\83V\83\93\8aÔ\82ð\82Â\82È\82¬\81A\r
+ DTXMania \81¨ KeyBoardMIDI \81¨ \89¹\8c¹\r
+\82Æ\82¢\82¤\97¬\82ê\82É\82µ\82Ä\81A\83X\83^\81[\83g\83\81\83b\83Z\81[\83W\82Å\88ê\90Ä\82É\83X\83^\81[\83g\81A\83X\83g\83b\83v\83\81\83b\83Z\81[\83W\r
+\82Å\88ê\90Ä\82É\8fI\97¹\82Æ\82¢\82¤\8e\96\82ð\82â\82è\82Ü\82·\81B\82R\95b\91Ò\8b@\82Æ\82¢\82¤\82Ì\82Í\82»\82ê\82¼\82ê\82Ì\83}\83V\83\93\82Ì\83t\83@\r
+\83C\83\8b\82ð\93Ç\82Ý\8d\9e\82Þ\8e\9e\8aÔ\81i\83Z\83b\83g\83A\83b\83v\8e\9e\8aÔ\81j\82Ì\83}\81[\83W\83\93\82ð\8eæ\82é\82½\82ß\82Å\82·\81B\r
+\r
+\81uBGM\82Æ\82©SysEx\82àKeyBoardMIDI\82É\91\97\82é\82Ì\81H\81v\82Æ\82©\81u\83X\83^\81[\83g\83\81\83b\83Z\81[\83W\82¾\82¯\82Å\93¯\r
+\8aú\8eæ\82ê\82é\82Ì\81H\81v\82Æ\82©\82¢\82ë\82¢\82ë\8b^\96â\82Í\82 \82é\82Å\82µ\82å\82¤\82ª\81A\82»\82±\82ÍDLL\82Ì\95û\82Å\92²\90®\82µ\82Ü\r
+\82·\82Ì\82Å\82²\90S\94z\82È\82\81B\82½\82¾\81A\8fã\8bL\82Ì\82R\93_\82¾\82¯\82ÍDTXMania\91¤\82Å\8f\88\97\9d\82µ\82Ä\96á\82í\82È\82¢\82Æ\82¤\r
+\82Ü\82\83Z\83b\83V\83\87\83\93\82ª\82Å\82«\82Ü\82¹\82ñ\81B\r
+\83\81\83j\83\85\81[\82Å\95Ê\83\82\81[\83h\82Æ\82µ\82Ä\91I\91ð\82·\82é\82æ\82¤\82È\8c`\82Å\82à\97Ç\82¢\82Å\82·\82Ì\82Å\81A\82±\82Ì\82R\93_\82ð\82º\82Ð\r
+\82º\82Ð\92Ç\89Á\82µ\82Ä\82\82¾\82³\82¢\82Ü\82¹\81B<(_ _)>\r
--- /dev/null
+\8bL\8e\96\81F 1128\r
+\93\8a\8de\8eÒ\81F nameko\82³\82ñ\r
+\r
+PERFECT+GREAT\97¦\82ª\81A\r
+100%=SS\r
+95%\81`S\r
+90%\81`A\r
+85%\81`B\r
+80%\81`C\r
+75%\81`D\r
+\81`75% E\r
+\r
+\8eQ\8dl\82Ü\82Å\82É\83X\83R\83A\8cv\8eZ\82à\81E\81E\81E\r
+\r
+\81¦1\83R\83\93\83{\81`500\83R\83\93\83{\82Ü\82Å\r
+PERFECT=350\93_\81~\83R\83\93\83{\90\94\r
+GREAT=200\93_\81~\83R\83\93\83{\90\94\r
+GOOD=50\93_\81~\83R\83\93\83{\90\94\r
+\r
+\81¦501\83R\83\93\83{\88È\8fã\r
+PERFECT=175000\81i350\93_\81~500\82Æ\93¯\88Ó\81j\r
+GREAT=100000\81i200\93_\81~500\82Æ\93¯\88Ó\81j\r
+GOOD=50\93_\81~\83R\83\93\83{\90\94\r
+\r
+----------------\r
+\8bL\8e\96\81F 1244\r
+\93\8a\8de\8eÒ\81F \82f\82l\82w\82³\82ñ\r
+\r
+\94»\92è\82É\82Â\82¢\82Ä\r
+PERFECT¥¥¥\92@\82¢\82½\8e\9e\82Ì\82¸\82ê\82ªJUST\96\94\82Í1/64\88È\8fã\r
+GREAT¥¥¥¥¥\92@\82¢\82½\8e\9e\82Ì\82¸\82ê\82ª1/32\88È\8fã\r
+GOOD¥¥¥¥¥¥\92@\82¢\82½\8e\9e\82Ì\82¸\82ê\82ª1/16\88È\8fã\r
+POOR¥¥¥¥¥¥\92@\82¢\82½\8e\9e\82Ì\82¸\82ê\82ª1/8\88È\8fã\r
+MISS¥¥¥¥¥¥\92@\82¢\82½\8e\9e\82Ì\82¸\82ê\82ª\82»\82ê\88È\89º\r
+\r
+\82ª\82µ\82©\82µ\81A\8bß\94N(?)\94»\92è\82ª\8aÃ\82\82È\82Á\82Ä\82é\82ç\82µ\82¢\82Å\82·\81B\r
+\r
+\82Å\82à\82Á\82Ä\83\89\83\93\83N\82ª\r
+PERFECT\82ÆGREAT\82Ì\81u\81\93\81v\82Ì\8d\87\8cv\82ª\r
+SS\81E\81E\81E100.00\81\93\r
+S\81@\81E\81E\81E99.99\81\93\81`95.00\81\93\r
+A\81@\81E\81E\81E94.99\81\93\81`90.00\81\93\r
+B\81@\81E\81E\81E89.99\81\93\81`85.00\81\93\r
+C\81@\81E\81E\81E84.99\81\93\81`80.00\81\93\r
+D\81@\81E\81E\81E79.99\81\93\81`70.00\81\93\r
+E\81@\81E\81E\81E69.99\81\93\88È\89º\r
+\92\8d)\82±\82ê\82Í\8c»\8dÝ\82Ì\82à\82Ì\82Å\82·\81B\r
+\r
+---------------\r
+\8bL\8e\96\81F 1250\r
+\93\8a\8de\8eÒ\81F \82f\82l\82w\82³\82ñ\r
+\r
+\83X\83e\81[\83W\83X\83^\81[\83g\82Ì\83Q\81[\83W\97Ê\82ª(FULL\83Q\81[\83W\82ð\82P\82Æ\8dl\82¦\82Ä)\96ñ2/3\82Å\83X\83^\81[\83g\82µ\82Ä\81A\r
+\82Q\82U\89ñmiss\82ð\8fo\82·\82Æ\97\8e\82¿\82Ü\82·\81B(\82c\82l\82T)\r
+\82Â\82Ü\82è\83X\83^\81[\83g\82µ\82Ä\82©\82ç\89½\82à\82¹\82¸\82É\83`\83b\83v\82ª\83o\81[\82ð\92Ê\89ß\82µ\82Ä\82¢\82«\81A\r
+\82Q\82U\89ñmiss\8fo\82µ\82½\82Æ\82±\82ë\82ÅGAMEOVER\82Æ\82¢\82¤\8e\96\82Å\82·\81B\r
+\r
+\8bt\82É\83X\83e\81[\83W\83X\83^\81[\83g\82Ì\83Q\81[\83W\97Ê\82ª(FULL\83Q\81[\83W\82ð\82P\82Æ\8dl\82¦\82Ä)\96ñ2/3\82Å\83X\83^\81[\83g\82µ\82Ä\81A\r
+Perfect\82ð\82U\82Q\89ñ\98A\91±\82Å\8fo\82·\82Æ\83Q\81[\83W\82ª\81A\96\9e\83^\83\93\82É\82È\82è\82Ü\82·\81B\r
+\82Å\82à\81A\83Q\81[\83W\82Ì\91\9d\97Ê\82Í\83R\83\93\83{\82ª\8aÖ\8cW\82µ\82Ä\82é\82©\82à\82µ\82ê\82È\82¢\82Ì\82Å\82 \82Ä\82É\82È\82è\82Ü\82¹\82ñ\81B\r
+\8aÖ\8cW\82È\82¢\82È\82ç\82n\82j\81I\r
--- /dev/null
+<HTML>\r
+<HEAD>\r
+<TITLE>DTXMania\90à\96¾\8f\91 [\93®\8dì\8aÂ\8b«]</TITLE>\r
+</HEAD>\r
+<BODY BGCOLOR="#EEFFEE" TEXT="black" LINK="#008800" VLINK="#006600">\r
+\r
+<!-- \83w\83b\83_ -->\r
+<P>\r
+<DIV ALIGN="right"><FONT SIZE="-1" FACE="Century"><I>DTXMania User's Manual \81\</I></FONT></DIV>\r
+<TABLE BORDER="0" CELLPADDING="5" CELLSPACING="5" WIDTH="100%">\r
+<TR>\r
+<TD BGCOLOR="green" WIDTH="80%">\r
+ <FONT SIZE="+1" COLOR="white"><B><I> \93®\8dì\8aÂ\8b«</I></B></FONT>\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%">\r
+</TR>\r
+</TABLE>\r
+</P>\r
+\r
+<!-- \96{\95¶ -->\r
+\r
+<BLOCKQUOTE>\r
+<DL>\r
+<DT><IMG SRC="ball_y.gif"> <I>OS</I>\r
+<DD>Windows 98 / Me / 2000 /XP \90ê\97p\81B<BR>\r
+ Windows 95 \82Å\82à\91å\8fä\95v\82¾\82Æ\8ev\82¤\82¯\82Ç\81A\82Ð\82Æ\82Ü\82¸\83T\83|\81[\83g\8aO\82Æ\82¢\82¤\82±\82Æ\82Å\81B\81i\8a¾<BR>\r
+<BR>\r
+<DT><IMG SRC="ball_y.gif"> <I>CPU</I>\r
+<DD>Pentium2\82Ì400MHz\82\82ç\82¢\82 \82ê\82Î\81B<BR>\r
+ \8cÂ\90l\93I\82É\82Í PentiumIII 800MHz\88È\8fã\82ð\90\84\8f§\81B<BR>\r
+<BR>\r
+<DT><IMG SRC="ball_y.gif"> <I>\83\81\83\82\83\8a</I>\r
+<DD>\91½\82¢\82à\82Ì\8f\9f\82¿\81B<BR>\r
+ 128MB\88È\8fã\82ð\90\84\8f§\82µ\82Ü\82·\82ª\81A\89\89\91t\92\86\82É\82µ\82å\82Á\82¿\82ã\82¤\83n\81[\83h\83f\83B\83X\83N\82Ö\82Ì\83A\83N\83Z\83X\82ª\94\90¶\82·\82é\82æ\82¤\82È\8fê\8d\87\82É\82Í\81A\83\81\83\82\83\8a\82Ì\91\9d\90Ý\82ð\82¨\8a©\82ß\82µ\82Ü\82·\81B<BR>\r
+ \82È\82¨\81ADTXMania \82Í\8bN\93®\82·\82é\82¾\82¯\82Å 70MB \88È\8fã\82Ì\83\81\83\82\83\8a\82ð\8fÁ\94ï\82µ\82Ü\82·\81B\81i\8a¾<BR>\r
+<BR>\r
+<DT><IMG SRC="ball_y.gif"> <I>\83O\83\89\83t\83B\83b\83N</I>\r
+<DD><FONT COLOR="red"><B>3D\83n\81[\83h\83E\83F\83A\83A\83N\83Z\83\89\83\8c\81[\83^\93\8b\8dÚ\81A8MB\88È\8fã</B></FONT>\82ª\95K\90{\8fð\8c\8f\81B<BR>\r
+ \83\81\83C\83\93\83\81\83\82\83\8a\82ð\8b¤\97L\82µ\82Ä\82¢\82é\83^\83C\83v\82â\81A\83}\83U\81[\83{\81[\83h\82É\93à\91 \82³\82ê\82Ä\82¢\82é\83^\83C\83v\82Å\82Í\82«\82Â\82¢\82©\82à\92m\82ê\82Ü\82¹\82ñ\81B\r
+ \82Â\82Ü\82è\82Í<FONT COLOR="blue"><B>\83m\81[\83g\83p\83\\83R\83\93\82Å\82Ì\90³\8fí\93®\8dì\82Í\93ï\82µ\82¢</B></font>\82Æ\82¢\82¤\82±\82Æ\82Å\82·\81B<BR>\r
+ DirectX \82É\93O\92ê\8f\80\8b\92\82·\82é GeForce2 \82É\8d\87\82í\82¹\82Ä\8dì\82Á\82Ä\82¢\82é\82Ì\82Å\81A\82±\82Ì\83V\83\8a\81[\83Y\82ð\90\84\8f§\82µ\82Ü\82·\81B<BR>\r
+ \82Ü\82½\81A<font color="blue"><b>\89t\8f»\83\82\83j\83^\82Å\82Í\91S\89æ\96Ê\95\\8e¦\82Ì\8dÛ\82É\83\82\83j\83^\82¢\82Á\82Ï\82¢\82É\95\\8e¦\82³\82ê\82È\82¢</B></font>\8fê\8d\87\82ª\82 \82è\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><IMG SRC="ball_y.gif"> <I>\83T\83E\83\93\83h</I>\r
+<DD>Wave\82ª\8eg\82¦\82é\83T\83E\83\93\83h\83{\81[\83h\81B\8b\8c\8e®\82ÌISA\83o\83X\82Ì\82à\82Ì\82ð\8eg\82¤\82Æ\81A\83f\81[\83^\93]\91\97\82ª\8aÔ\82É\8d\87\82í\82È\82¢\82½\82ß\82É\83X\83N\83\8d\81[\83\8b\82ª\83K\83N\83K\83N\82É\82È\82é\8b°\82ê\82ª\82 \82è\82Ü\82·\81B<BR>\r
+ \90\84\8f§\82Í\81ASoundBlaster\83V\83\8a\81[\83Y\82ÌPCI\83o\83X\91Î\89\9e\82Ì\82à\82Ì\81B<BR>\r
+<BR>\r
+<DT><IMG SRC="ball_y.gif"> <I>\93ü\8fo\97Í\91\95\92u</I>\r
+<DD>\83L\81[\83{\81[\83h\81A\83W\83\87\83C\83p\83b\83h\81AMIDI\93ü\97Í\82É\91Î\89\9e\82µ\82Ä\82¢\82Ü\82·\81B<BR>\r
+ \82ª\81A\82à\82¿\82ë\82ñYAMAHA DTX\83V\83\8a\81[\83Y\81iDTX, DTXPRESS, DTXTREME\81j\82ð\92f\91R\90\84\8f§\82µ\82Ü\82·\81B\81iYAMAHA DD-50 \82â\81ARoland V-Drums \82Å\82Ì\93®\8dì\95ñ\8d\90\82à\82 \82è\82Ü\82·\81B\81j<BR>\r
+ \83v\83\8c\83C\83X\83e\81[\83V\83\87\83\93\97p\82Ì\83W\83\87\83C\83p\83b\83h\82ð\83p\83\\83R\83\93\82É\82Â\82È\82°\82é\82½\82ß\82Ì\83P\81[\83u\83\8b\82â\83\\83t\83g\81iPC\83c\83i\83C\83f\83\93\83g\82âPS\83W\83\87\83C\83p\83b\83hmini\82È\82Ç\81j\82ª\82 \82ê\82Î\81A\83R\83i\83~\82Ì\83v\83\8c\83C\83X\83e\81[\83V\83\87\83\93\97p\83\\83t\83g\81u\83M\83^\83h\83\89\81I\81v\82Ì\90ê\97p\83R\83\93\83g\83\8d\81[\83\89\81i\83h\83\89\83\80\81A\83M\83^\81[\81j\82ð\8eg\97p\82·\82é\82±\82Æ\82ª\82Å\82«\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><IMG SRC="ball_y.gif"> <I>MIDI\8b@\8aí</I>\r
+<DD>MIDI\8dÄ\90¶\8b@\8aí\82ª\82 \82é\82Æ\81AMID\8c`\8e®\82Ì\83t\83@\83C\83\8b\82ð\89\89\91t\82·\82é\82±\82Æ\82ª\89Â\94\\82Æ\82È\82è\82Ü\82·\81B<BR>\r
+ \82½\82¾\82µ\81A<font color="blue"><B>\83\\83t\83g\83E\83F\83AMIDI\82Ì\8fê\8d\87\82Í\90³\8fí\82È\89\89\91t\82Í\95Û\8fØ\82Å\82«\82Ü\82¹\82ñ</B></font>\81B\81i DTXMania \82ª\8bN\93®\82·\82ç\82µ\82È\82¢\89Â\94\\90«\82ª\82 \82è\82Ü\82·\81B\81j<BR>\r
+<BR>\r
+<DT><IMG SRC="ball_y.gif"> <I>\82»\82Ì\91¼</I>\r
+<DD>\r
+<UL>\r
+<LI><font color="blue"><B>DirectX7 \88È\8fã\82Ì\83\89\83\93\83^\83C\83\80</b></font>\82ª\83C\83\93\83X\83g\81[\83\8b\8dÏ\82Ý\82Å\82 \82é\82±\82Æ\81B<BR>\r
+<LI>\89½\82ç\82©\82Ì ACM MP3 Decorder \82ª\83C\83\93\83X\83g\81[\83\8b\82³\82ê\82Ä\82¢\82È\82¢\82Æ\81AMP3\82ð\8eg\82Á\82½\8bÈ\83f\81[\83^\82Í\8dÄ\90¶\82Å\82«\82Ü\82¹\82ñ\81B<BR>\r
+<LI>AVI \82ð\8eg\97p\82µ\82Ä\82¢\82é\8bÈ\83f\81[\83^\82Í\81A\82»\82ê\82É\91Î\89\9e\82·\82é CODEC \82ª\83C\83\93\83X\83g\81[\83\8b\82³\82ê\82Ä\82¢\82È\82¢\82Æ\8dÄ\90¶\82Å\82«\82Ü\82¹\82ñ\81B<BR>\r
+</UL>\r
+</DL>\r
+\r
+</BLOCKQUOTE>\r
+\r
+[<A HREF="../index.html">\96ß\82é</A>]\r
+\r
+<!-- \83t\83b\83^\81[ -->\r
+<HR SIZE="8" COLOR="green">\r
+<FONT FACE="Impact">\r
+<DIV ALIGN="right">\r
+(C) 2000-2003 FROM / K.YAMASAKI<BR>\r
+mailto: from@donburi.to<BR>\r
+</DIV>\r
+</FONT>\r
+\r
+</BODY>\r
+</HTML>\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
--- /dev/null
+<HTML>\r
+<HEAD>\r
+<TITLE>DTXMania\90à\96¾\8f\91 [\82Í\82¶\82ß\82É]</TITLE>\r
+</HEAD>\r
+<BODY BGCOLOR="#EEFFEE" TEXT="black" LINK="#008800" VLINK="#006600">\r
+\r
+<!-- \83w\83b\83_ -->\r
+<P>\r
+<DIV ALIGN="right"><FONT SIZE="-1" FACE="Century"><I>DTXMania User's Manual \81\</I></FONT></DIV>\r
+<TABLE BORDER="0" CELLPADDING="5" CELLSPACING="5" WIDTH="100%">\r
+<TR>\r
+<TD BGCOLOR="green" WIDTH="80%">\r
+ <FONT SIZE="+1" COLOR="white"><B><I> \82Í\82¶\82ß\82É</I></B></FONT>\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%">\r
+</TR>\r
+</TABLE>\r
+</P>\r
+\r
+<!-- \96{\95¶ -->\r
+\r
+<BLOCKQUOTE>\r
+\r
+<P ALIGN="center">\r
+ <IMG SRC="playshot045.jpg" ALT="DTXMania\89\89\91t\92\86\82Ì\89æ\96Ê">\r
+</P>\r
+\r
+<P><B>\81¡ DTXMania \82Í\81A\83\84\83}\83n\82Ì\83T\83C\83\8c\83\93\83g\81E\83Z\83b\83V\83\87\83\93\81E\83h\83\89\83\80\81uDTX\81v\81uDTXPRESS\81v\81uDTXTREME\81v\82Å\89\89\91t\82·\82é\82±\82Æ\82ð\96Ú\93I\82Æ\82µ\82Ä\8dì\82ç\82ê\82½\83h\83\89\83\80\83g\83\8c\81[\83j\83\93\83O\83\\83t\83g\82Å\82·\81B</B></P>\r
+\r
+<P><B>\81¡ \83L\81[\83{\81[\83h\82â\83W\83\87\83C\83p\83b\83h\82É\82æ\82é\89\89\91t\82à\83T\83|\81[\83g\82µ\82Ä\82¢\82é\82½\82ß\81A\83v\83\8c\83C\83X\83e\81[\83V\83\87\83\93\97p\83\\83t\83g\81u\83M\83^\83h\83\89\81I\81v\90ê\97p\83R\83\93\83g\83\8d\81[\83\89\82ð\83p\83\\83R\83\93\82É\90Ú\91±\82µ\82Ä\83v\83\8c\83C\82·\82é\82±\82Æ\82à\89Â\94\\82Å\82·\81B</B></P>\r
+</BLOCKQUOTE>\r
+\r
+<!-- \93Á\92¥ -->\r
+\r
+<IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\93Á\92¥</B></FONT><BR>\r
+<UL>\r
+<LI>YAMAHA Silent Session Drum <FONT COLOR="red"><B>DTX \82Ì\93Á\90«\82É\8d\87\82í\82¹\82½\83R\81[\83f\83B\83\93\83O</B></FONT>\82ð\8e{\82µ\81A\95W\8f\80\82Å DTX \82Ì\89¹\90F\8d\\90¬\82É\8d\87\82í\82¹\82½\83L\81[\83R\83\93\83t\83B\83O\82ª\90Ý\92è\8dÏ\82Ý<SUP><FONT SIZE="-2">\81¦1</FONT></SUP>\82Å\82 \82é\82½\82ß\81A\89½\82ç\90Ý\92è\8dì\8bÆ\82ð\94º\82¤\82±\82Æ\82È\82\82¢\82«\82È\82è DTX \82Å DTXMania \82ð\83v\83\8c\83C\89Â\94\\82Å\82·\81B\81iDTX-\83p\83\\83R\83\93\8aÔ\82Ì\94z\90ü\8dì\8bÆ\82Í\95K\97v\82Å\82·\81B\81j<BR>\r
+<DIV ALIGN="right"><FONT SIZE="-2">\81¦1.... DTXPRESS\82Ì\8fê\8d\87\82Í\83L\83b\83g1\82Ü\82½\82Í40\82É\8d\87\82í\82¹\82ç\82ê\82Ü\82·\81B</FONT></DIV>\r
+<BR>\r
+<LI>\96³\98_\81A\91¼\82Ì\89¹\83Q\81[\82Å\82Í\96³\8e\8b\82³\82ê\82ª\82¿\82È<FONT COLOR="red"><B>\83t\83\8d\83A\83^\83\80</B></FONT>\82ð\8a®\91S\83T\83|\81[\83g\81B\81i\88Ó\96¡\82È\82¢\82Á\82Ä\82ä\81[\82È\81i\97Ü\81j\81j<BR>\r
+<BR>\r
+<LI><FONT COLOR="red"><B>\91Å\82¿\95ª\82¯\8b@\94\</B></FONT>\82É\82æ\82è\81A\83n\83C\83n\83b\83g\83I\81[\83v\83\93\81^\83N\83\8d\81[\83Y\82â\81A\83N\83\89\83b\83V\83\85\83V\83\93\83o\83\8b\81^\83\89\83C\83h\83V\83\93\83o\83\8b\82ð\8bæ\95Ê\82µ\82Ä\95\\8e¦\82µ\81A\96Â\82ç\82µ\95ª\82¯\82é\82±\82Æ\82ª\89Â\94\\82Å\82·\81B<BR>\r
+<BR>\r
+<LI>\83h\83\89\83\80\81\95\83M\83^\81[\81\95\83x\81[\83X\82Ì\81A<FONT COLOR="red"><B>\8dÅ\91å\82R\90l\93¯\8e\9e\83Z\83b\83V\83\87\83\93\83v\83\8c\83C</B></FONT>\82ª\89Â\94\\82Å\82·\81B\81i\83M\83^\81[\81^\83x\81[\83X\82Ì\8b@\94\\82Í\82Ü\82¾\82Ü\82¾\95s\8f\\95ª\82Å\82·\82ª\81c<TT>(^^;</TT>\81j<BR>\r
+<BR>\r
+<LI>DTXMania\82Ì\93Æ\8e©\8c`\8e®\82Å\82 \82éDTX\82ð\82Í\82¶\82ß\81ABandJAM\8c`\8e®\82ÌGDA\81ASessionStream\8c`\8e®\82ÌG2D\82È\82Ç\81A<FONT COLOR="red"><B>\91½\8dÊ\82È\83t\83H\81[\83}\83b\83g</B></FONT>\82É\91Î\89\9e\82µ\82Ü\82·\81B<BR>\r
+<BR>\r
+<LI><FONT COLOR="red"><B>Wave\8dÄ\90¶\88Ê\92u\8e©\93®\95â\90³\8b@\94\</B></FONT>\82É\82æ\82è\81A\83n\81[\83h\83E\83F\83A\82âOS\82É\88Ë\91¶\82·\82é\81u\89¹\82¸\82ê\81v\81i\95\88\96Ê\82ÆBGM\82ª\82¾\82ñ\82¾\82ñ\82¸\82ê\82Ä\82\82é\8c»\8fÛ\81j\82ð\89ñ\94ð\82µ\82Ü\82·\81B<BR>\r
+<BR>\r
+<LI>B.A.S.S.\8ed\97l\82Ö\91Î\89\9e\82µ\81A\82±\82ê\82É\8f\80\82¶\82é\89¹\83Q\81[\83\80\83\\83t\83g\82Æ<FONT COLOR="red"><B>\92Ê\90M\83Z\83b\83V\83\87\83\93\83v\83\8c\83C</B></FONT>\82ð\8ds\82È\82¤\82±\82Æ\82ª\82Å\82«\82Ü\82·\81B\81i\82½\82¾\82µ\83}\83X\83^\81[\83\82\81[\83h\82Ì\82Ý\91Î\89\9e\81j<BR>\r
+<BR>\r
+<LI>DrumMIDI\82Ì\83R\83A\8b@\94\\82ð\93\8b\8dÚ\82µ\81A<FONT COLOR="red"><B>MID\83t\83@\83C\83\8b\82ð\93Ç\82Ý\8d\9e\82ñ\82Å\8e©\93®\93I\82É\83h\83\89\83\80\83p\81[\83g\82ð\92\8a\8fo\82µ\82Ä\95\88\96Ê\82ð\8dì\90¬</B></FONT>\82µ\81A\91¦\8dÀ\82É\83v\83\8c\83C\82·\82é\82±\82Æ\82ª\89Â\94\\82Å\82·\81B\81i\95\88\96Ê\89»\82Ì\8dÛ\82Ì\93ï\88Õ\93x\82Æ\82µ\82Ä Easy\81AReal\81ARaw\82Ì\82R\83\82\81[\83h\82ð\91I\91ð\89Â\94\\81j<BR>\r
+<BR>\r
+<LI><FONT COLOR="red"><B>\83\82\83j\83^\8b@\94\</B></FONT>\82É\82æ\82è\81A\8e©\95ª\82ª\89\89\91t\82µ\82Ä\82¢\82é\83p\81[\83g\82Ì\89¹\97Ê\82ð\8fã\82°\82é\82±\82Æ\82ª\8fo\97\88\82Ü\82·\81B\83c\83C\83\93\83M\83^\81[\91Î\89\9e\82Ì\89\89\91t\83f\81[\83^\82È\82Ç\82Å\81A\8e©\95ª\82ª\82Ç\82±\92e\82¢\82Ä\82ñ\82¾\82©\95ª\82©\82ç\82È\82\82È\82è\82ª\82¿\82È\90l\82É\82Ç\82¤\82¼\81B<BR>\r
+<BR>\r
+<LI>BMP, PNG, JPEG, AVI\8c`\8e®\82É\91Î\89\9e\82µ\82½<FONT COLOR="red"><B>\83N\83\8a\83b\83v\89æ\91\9c</B></FONT>\82ð\8dÄ\90¶\82Å\82«\82Ü\82·\81B\82Ü\82½\81A\82P\96\87\82Ì\89æ\91\9c\82Ì\83C\83\81\81[\83W\83p\83\93\8b@\94\\82à\93\8b\8dÚ\82µ\81A\8cø\89Ê\93I\82È\83N\83\8a\83b\83v\82Ì\8dì\90¬\82ð\83T\83|\81[\83g\82µ\82Ü\82·\81B<BR>\r
+<BR>\r
+<LI>\8bÈ\82Ì\8dÄ\90¶\91¬\93x\82ð\91¬\82\82µ\82½\82è\92x\82\82µ\82½\82è\8e©\8dÝ\82É\90Ý\92è\82Å\82«\82é<FONT COLOR="red"><B>\83g\83\8c\81[\83j\83\93\83O\8b@\94\</B></FONT>\82ð\93\8b\8dÚ\82µ\82Ü\82·\81B<BR>\r
+<BR>\r
+</UL>\r
+\r
+<BR>\r
+[<A HREF="../index.html">\96ß\82é</A>]\r
+\r
+<!-- \83t\83b\83^\81[ -->\r
+<HR SIZE="8" COLOR="green">\r
+<FONT FACE="Impact">\r
+<DIV ALIGN="right">\r
+(C) 2000-2002 FROM / K.YAMASAKI<BR>\r
+mailto: from@donburi.to<BR>\r
+</DIV>\r
+</FONT>\r
+\r
+</BODY>\r
+</HTML>\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
--- /dev/null
+<HTML>\r
+<HEAD>\r
+<TITLE>DTXMania\90à\96¾\8f\91 [\83C\83\93\83X\83g\81[\83\8b/\83A\83\93\83C\83\93\83X\83g\81[\83\8b]</TITLE>\r
+</HEAD>\r
+<BODY BGCOLOR="#EEFFEE" TEXT="black" LINK="#008800" VLINK="#006600">\r
+\r
+<!-- \83w\83b\83_ -->\r
+<P>\r
+<DIV ALIGN="right"><FONT SIZE="-1" FACE="Century"><I>DTXMania User's Manual \81\</I></FONT></DIV>\r
+<TABLE BORDER="0" CELLPADDING="5" CELLSPACING="5" WIDTH="100%">\r
+<TR>\r
+<TD BGCOLOR="green" WIDTH="80%">\r
+ <FONT SIZE="+1" COLOR="white"><B><I> \83C\83\93\83X\83g\81[\83\8b/\83A\83\93\83C\83\93\83X\83g\81[\83\8b</I></B></FONT>\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%">\r
+</TR>\r
+</TABLE>\r
+</P>\r
+\r
+<!-- \96{\95¶ -->\r
+\r
+<BLOCKQUOTE>\r
+<DL>\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\83C\83\93\83X\83g\81[\83\8b\8eè\8f\87</B></FONT><BR>\r
+<BR>\r
+<DD>\r
+<DL>\r
+<DT><FONT COLOR="green"><B>1. DTXMania \82Ì\83Z\83b\83g\83A\83b\83v</B></FONT>\r
+<DD>\93Á\82É\83Z\83b\83g\83A\83b\83v\8dì\8bÆ\82Í\82 \82è\82Ü\82¹\82ñ\81BDTXMania\82Ì\83A\81[\83J\83C\83u\83t\83@\83C\83\8b\81iDTXManiaXXX.lzh\81j\82ð\81A\82¨\8dD\82«\82È\8fê\8f\8a\82É\93W\8aJ\82µ\82Ä\89º\82³\82¢\81B<BR>\r
+<BR>\r
+<TABLE BORDER="0"><TR><TD BGCOLOR="#DDFFDD">\r
+<FONT SIZE="-1">\81¦\8aù\82É\8cÃ\82¢\83o\81[\83W\83\87\83\93\82Ì DTXMania \82ª\82 \82é\8fê\8d\87\82Í\81A\82»\82Ì\83t\83H\83\8b\83_\82É\81A\90V\82µ\82¢\83o\81[\83W\83\87\83\93\82Ì\83t\83H\83\8b\83_\82Ì\r
+\93à\97e\82ð\82»\82Ì\82Ü\82Ü\8fã\8f\91\82«\83R\83s\81[\82·\82ê\82Î\82n\82j\82Å\82·\81B</FONT>\r
+</TR></TABLE>\r
+<BR>\r
+<DT><FONT COLOR="green"><B>2. \8bÈ\83t\83H\83\8b\83_\82Ì\8dì\90¬</B></FONT>\r
+<DD>DTXMania \96{\91Ì\81iDTXMania.exe\81j\82Ì\91¶\8dÝ\82·\82é\83t\83H\83\8b\83_\82É\81A\81u<FONT COLOR="blue" FACE="Courier New"><B>DTXFiles</B></FONT>\81v\82Æ\82¢\82¤\96¼\91O\82Ì\83t\83H\83\8b\83_\82ð\8dì\90¬\82µ\82Ä\82\82¾\82³\82¢\81B<BR>\r
+\r
+<BR>\r
+<center><IMG SRC="MakeDTXFiles.jpg"></center>\r
+\r
+<BR>\r
+<DT><FONT COLOR="green"><B>3. \8bÈ\83f\81[\83^\82Ì\83C\83\93\83X\83g\81[\83\8b</B></FONT>\r
+<DD>2.\82Å\8dì\90¬\82µ\82½DTXFiles\83t\83H\83\8b\83_\82Ì\92\86\82É\81A\89\89\91t\83f\81[\83^\81i\82Ç\82±\82©\82©\82ç\93ü\8eè\82µ\82æ\82¤\81I\81j\82ð\83t\83H\83\8b\83_\82²\82Æ\93ü\82ê\82Ä\82\82¾\82³\82¢\81B\r
+</DL>\r
+</P>\r
+<BR>\r
+\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\83A\83\93\83C\83\93\83X\83g\81[\83\8b\8eè\8f\87</B></FONT><BR>\r
+<BR>\r
+<DD>DTXMania \88ê\8e®\82Ì\93ü\82Á\82Ä\82¢\82é\83t\83H\83\8b\83_\82ð\81A\8aÛ\82²\82Æ\8dí\8f\9c\82µ\82Ä\82\82¾\82³\82¢\81B<BR>\r
+\83\8c\83W\83X\83g\83\8a\93\99\82Í\88ê\90Ø\82¢\82¶\82Á\82Ä\82¢\82Ü\82¹\82ñ\81B<BR>\r
+</DL>\r
+</BLOCKQUOTE>\r
+\r
+<BR>\r
+[<A HREF="../index.html">\96ß\82é</A>]\r
+\r
+<!-- \83t\83b\83^\81[ -->\r
+<HR SIZE="8" COLOR="green">\r
+<FONT FACE="Impact">\r
+<DIV ALIGN="right">\r
+(C) 2000-2003 FROM / K.YAMASAKI<BR>\r
+mailto: from@donburi.to<BR>\r
+</DIV>\r
+</FONT>\r
+\r
+</BODY>\r
+</HTML>\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
--- /dev/null
+<HTML>\r
+<HEAD>\r
+<TITLE>DTXMania\90à\96¾\8f\91 [\83R\83\93\83t\83B\83O\81i\83V\83X\83e\83\80\90Ý\92è\81j\89æ\96Ê\82Ì\91\80\8dì]</TITLE>\r
+</HEAD>\r
+<BODY BGCOLOR="#EEFFEE" TEXT="black" LINK="#008800" VLINK="#006600">\r
+\r
+<!-- \83w\83b\83_ -->\r
+<P>\r
+<DIV ALIGN="right"><FONT SIZE="-1" FACE="Century"><I>DTXMania User's Manual \81\</I></FONT></DIV>\r
+<TABLE BORDER="0" CELLPADDING="5" CELLSPACING="5" WIDTH="100%">\r
+<TR>\r
+<TD BGCOLOR="green" WIDTH="80%">\r
+ <FONT SIZE="+1" COLOR="white"><B><I> \83R\83\93\83t\83B\83O\81i\83V\83X\83e\83\80\90Ý\92è\81j\89æ\96Ê\82Ì\91\80\8dì</I></B></FONT>\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%">\r
+</TR>\r
+</TABLE>\r
+</P>\r
+\r
+<!-- \96{\95¶ -->\r
+\r
+<P ALIGN="center">\r
+<IMG SRC="config.jpg"><BR><BR>\r
+<B>\83R\83\93\83t\83B\83O\89æ\96Ê</B><BR>\r
+</P>\r
+\r
+<BLOCKQUOTE>\r
+<DL>\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\8d\80\96Ú\82Ì\91I\91ð\82Æ\95Ï\8dX</B></FONT><BR>\r
+<DD>\83J\81[\83\\83\8b\83L\81[\82Å\8fã\89º\8d¶\89E\82É\88Ú\93®\82µ\81A\90Ý\92è\95Ï\8dX\82µ\82½\82¢\8d\80\96Ú\82É\82 \82í\82¹\82Ä\89º\82³\82¢\81B<BR>\r
+\8d\80\96Ú\82É\82 \82í\82¹\82Ä\8c\88\92è\82·\82é\82Æ\81A\92l\82ð\95Ï\8dX\82·\82é\82±\82Æ\82ª\82Å\82«\82Ü\82·\81B<BR>\r
+\90\94\92l\8d\80\96Ú\82É\82Â\82¢\82Ä\82Í\8c\88\92è\82·\82é\82Æ\90\94\92l\82ª\90Ô\90F\82É\82È\82è\82Ü\82·\82Ì\82Å\81A\82±\82±\82Å\90\94\92l\82ð\8fã\89º\82É\95Ï\8dX\82µ\81A\8dÄ\82Ñ\8c\88\92è\82·\82é\82Æ\8am\92è\82³\82ê\82Ü\82·\81B\81i\90à\96¾\82µ\82É\82\82¢\82È\81c(\8a¾)\81j<BR>\r
+<BR>\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\8d\80\96Ú\82Ì\90à\96¾</B></FONT><BR>\r
+<DD>\8d\80\96Ú\82É\83J\81[\83\\83\8b\82ð\8d\87\82í\82¹\82é\82Æ\81A\89æ\96Ê\89º\95\94\82É\82»\82Ì\8d\80\96Ú\82É\91Î\82·\82é\90à\96¾\95¶\82ª\95\\8e¦\82³\82ê\82Ü\82·\81B<BR>\r
+</DL>\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\95Û\91¶\8fI\97¹</B></FONT><BR>\r
+<DD>\81uEXIT\81v\82ð\91I\91ð\82µ\82Ä\8c\88\92è\82·\82é\82Æ\81A\90Ý\92è\82ð\95Û\91¶\82µ\82Ä\83^\83C\83g\83\8b\89æ\96Ê\82É\96ß\82è\82Ü\82·\81B<BR>\r
+</DL>\r
+</BLOCKQUOTE>\r
+\r
+<BR>\r
+[<A HREF="..\index.html">\96ß\82é</A>]\r
+\r
+<!-- \83t\83b\83^\81[ -->\r
+<HR SIZE="8" COLOR="green">\r
+<FONT FACE="Impact">\r
+<DIV ALIGN="right">\r
+(C) 2000-2003 FROM / K.YAMASAKI<BR>\r
+mailto: from@donburi.to<BR>\r
+</DIV>\r
+</FONT>\r
+\r
+</BODY>\r
+</HTML>\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
--- /dev/null
+<HTML>\r
+<HEAD>\r
+<TITLE>DTXMania\90à\96¾\8f\91 [\89\89\91t\89æ\96Ê\82Ì\91\80\8dì]</TITLE>\r
+</HEAD>\r
+<BODY BGCOLOR="#EEFFEE" TEXT="black" LINK="#008800" VLINK="#006600">\r
+\r
+<!-- \83w\83b\83_ -->\r
+<P>\r
+<DIV ALIGN="right"><FONT SIZE="-1" FACE="Century"><I>DTXMania User's Manual \81\</I></FONT></DIV>\r
+<TABLE BORDER="0" CELLPADDING="5" CELLSPACING="5" WIDTH="100%">\r
+<TR>\r
+<TD BGCOLOR="green" WIDTH="80%">\r
+ <FONT SIZE="+1" COLOR="white"><B><I> \89\89\91t\89æ\96Ê\82Ì\91\80\8dì</I></B></FONT>\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%">\r
+</TR>\r
+</TABLE>\r
+</P>\r
+\r
+<!-- \96{\95¶ -->\r
+\r
+<P ALIGN="center">\r
+<IMG SRC="ensou.jpg"><BR><BR>\r
+<B>\89\89\91t\89æ\96Ê</B><BR>\r
+</P>\r
+\r
+<BLOCKQUOTE>\r
+<DL>\r
+\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\89\89\91t\95û\96@</B></FONT><BR>\r
+<DD>\8ae\83\8c\81[\83\93\82Ì\83`\83b\83v\83I\83u\83W\83F\83N\83g\82ª\81A\89æ\96Ê\89º\82Ì\97Î\90F\82Ì\83o\81[\82Æ\8fd\82È\82Á\82½\8fu\8aÔ\82ð\91_\82Á\82Ä\81A\8aY\93\96\82·\82é\83p\83b\83h\82ð\92@\82¢\82Ä\89º\82³\82¢\81B\81i\83M\83^\81[\81^\83x\81[\83X\82Ì\8fê\8d\87\82Í\81A\8aY\93\96\82·\82é\90F\82Ì\83{\83^\83\93\82ð\89\9f\82µ\82È\82ª\82ç\83s\83b\83N\82ð\92e\82¢\82Ä\89º\82³\82¢\81B\81j<BR><BR>\r
+<TABLE BORDER="0" CELLSPACING="10">\r
+<TR><TD><IMG SRC="hit_timing.png"><TD><IMG SRC="hit_timing2.png"></TR>\r
+<TR><TD ALIGN="center"><B>\83h\83\89\83\80\91¤</B><TD ALIGN="center"><B>\83M\83^\81[\91¤</B></TR>\r
+</TABLE><BR>\r
+\92@\82¢\82½\83^\83C\83~\83\93\83O\82É\82æ\82Á\82Ä\81A\82T\92i\8aK\82Ì\94»\92è\81iPerfect, Great, Good, Poor, Miss\81j\82ª\95\\8e¦\82³\82ê\82Ü\82·\81B<BR>\r
+<BR>\r
+\8f\89\8aú\8fó\91Ô\82Å\82Ì\83L\81[\82Æ\83p\83b\83h\82Ì\8a\84\82è\93\96\82Ä\82É\82Â\82¢\82Ä\82Í\81A\81u<A HREF="..\3.\90Ý\92è\keybind.html">\83f\83t\83H\83\8b\83g\82Ì\83L\81[\8a\84\82è\93\96\82Ä</A>\81v\82ð\82²\8eQ\8fÆ\82\82¾\82³\82¢\81B<BR>\r
+<BR>\r
+\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\91Å\82¿\95ª\82¯\8b@\94\</B></FONT><BR>\r
+<DD>\81u\81\9b\81v\82Ì\82Â\82¢\82Í\83n\83C\83n\83b\83g\82Í<FONT COLOR="red"><B>\83n\83C\83n\83b\83g\83I\81[\83v\83\93</B></FONT>\81A\81u\81\9b\81v\82Ì\82Â\82¢\82½\83V\83\93\83o\83\8b\82Í<FONT COLOR="red"><B>\83\89\83C\83h\83V\83\93\83o\83\8b</B></FONT>\82Å\82·\81B<BR>\r
+<BR>\r
+\81@\81@<IMG SRC="hhopen.png">\81@\81@\81@<IMG SRC="ride.png"><BR><BR>\r
+<B>\83n\83C\83n\83b\83g\83I\81[\83v\83\93\82â\83\89\83C\83h\82Í\81A\83n\83C\83n\83b\83g\83N\83\8d\81[\83Y\82â\83V\83\93\83o\83\8b\82Å\92@\82¢\82½\82Æ\82µ\82Ä\82à Miss \82É\82Í\82È\82è\82Ü\82¹\82ñ\81B</B><BR><BR>\r
+\82½\82¾\82µ\81A\81u\82X\83\8c\81[\83\93\89\89\91t\81v\82ð\97L\8cø\82É\82µ\82Ä\82¢\82é\8fê\8d\87\82Í\81A\83n\83C\83n\83b\83g\83I\81[\83v\83\93\82Ì\83`\83b\83v\82Ì\82Æ\82«\82É\83n\83C\83n\83b\83g\83N\83\8d\81[\83Y\82Å\92@\82\82Æ\81A\83n\83C\83n\83b\83g\83N\83\8d\81[\83Y\82É\8a\84\82è\93\96\82Ä\82ç\82ê\82Ä\82¢\82é\89¹\90F\82Å\89\89\91t\82³\82ê\82Ü\82·\81B\83V\83\93\83o\83\8b\82Æ\83\89\83C\83h\82É\82Â\82¢\82Ä\82à\93¯\97l\82Å\82·\81B\81i\81u\82X\83\8c\81[\83\93\89\89\91t\81v\82ª\96³\8cø\82Å\82 \82é\82Æ\82«\81A\82Ü\82½\82Í\82X\83\8c\81[\83\93\83\82\81[\83h\82Å\82È\82¢\8bÈ\83f\81[\83^\82Ì\8fê\8d\87\82É\82Í\81A\82Ç\82¿\82ç\82Ì\83p\83b\83h\82Å\82Ç\82¿\82ç\82Ì\83`\83b\83v\82ð\92@\82¢\82Ä\82à\81A\90³\82µ\82¢\89¹\90F\82Å\89\89\91t\82³\82ê\82Ü\82·\81B\81j<BR>\r
+<BR>\r
+\82X\83\8c\81[\83\93\89\89\91t\82Ì\97L\8cø\81E\96³\8cø\82É\82Â\82¢\82Ä\82Í\81A<A HREF="config.html">\83R\83\93\83t\83B\83O\89æ\96Ê</A>\82Å\90Ý\92è\82Å\82«\82Ü\82·\81B<BR>\r
+<BR>\r
+\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\95\88\96Ê\83X\83N\83\8d\81[\83\8b\91¬\93x\82Ì\95Ï\8dX</B></FONT><BR>\r
+<DD>\89\89\91t\92\86\82É\81A<FONT COLOR="red"><B>\96î\88ó\83L\81[\82Ì\8fã\89º\81i\81u\81ª\81v\81u\81«\81v\81j</B></FONT>\82Å\81A\83h\83\89\83\80\95\88\96Ê\82Ì\83X\83N\83\8d\81[\83\8b\91¬\93x\82ð\83\8a\83A\83\8b\83^\83C\83\80\82É\95Ï\8dX\82·\82é\82±\82Æ\82ª\8fo\97\88\82Ü\82·\81B<BR>\r
+<BR>\r
+\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>DrumMIDI\8aÖ\98A\82Ì\8fî\95ñ\95\\8e¦</B></FONT><BR>\r
+<DD>MID\8c`\8e®\83t\83@\83C\83\8b\82ð\89\89\91t\92\86\82Ì\8fê\8d\87\82Í\81A\88È\89º\82Ì\83L\81[\91\80\8dì\82ª\97L\8cø\82É\82È\82è\82Ü\82·\81B<BR>\r
+<BR>\r
+<TABLE BORDER="1" CELLSPACING="0" CELLPADDING="10">\r
+<TR><TD BGCOLOR="#DDFFDD">PageUp<TD BGCOLOR="#DDFFDD">DrumMIDI\8aÖ\98A\8fî\95ñ\83y\81[\83W\82Ì\95\\8e¦</TR>\r
+<TR><TD BGCOLOR="#DDFFDD">PageDown<TD BGCOLOR="#DDFFDD">DrumMIDI\8aÖ\98A\8fî\95ñ\83y\81[\83W\82Ì\95\\8e¦</TR>\r
+</TABLE>\r
+<BR>\r
+<CENTER>\r
+<IMG SRC="drummidi1.png" ALIGN="center"> \81¨ \r
+<IMG SRC="drummidi2.png" ALIGN="center">\81¨ \r
+<IMG SRC="drummidi3.png" ALIGN="center"><BR>\r
+<B>DrumMIDI\8aÖ\98A\8fî\95ñ\83y\81[\83W</B>\r
+</CENTER>\r
+<BR>\r
+\r
+\82Ü\82½\81ADrumMIDI\8aÖ\98A\8fî\95ñ\83y\81[\83W\82ª\95\\8e¦\82³\82ê\82Ä\82¢\82é\8aÔ\82Í\81A\88È\89º\82Ì\83L\81[\91\80\8dì\82ª\97L\8cø\82É\82È\82è\82Ü\82·\81B<BR>\r
+<BR>\r
+<TABLE BORDER="1" CELLSPACING="0" CELLPADDING="10">\r
+<TR><TD BGCOLOR="#DDFFDD">PageUp<TD BGCOLOR="#DDFFDD">DrumMIDI\8aÖ\98A\8fî\95ñ\83y\81[\83W\82Ì\90Ø\82è\91Ö\82¦\81i\8f\87\95û\8cü\81j</TR>\r
+<TR><TD BGCOLOR="#DDFFDD">PageDown<TD BGCOLOR="#DDFFDD">DrumMIDI\8aÖ\98A\8fî\95ñ\83y\81[\83W\82Ì\90Ø\82è\91Ö\82¦\81i\8bt\95û\8cü\81j</TR>\r
+<TR><TD BGCOLOR="#DDFFDD">\81ª\81«\81©\81¨<TD BGCOLOR="#DDFFDD">DrumMIDI\83J\81[\83\\83\8b\88Ú\93®</TR>\r
+<TR><TD BGCOLOR="#DDFFDD">Enter<TD BGCOLOR="#DDFFDD">DrumMIDI\92l\82Ì\95Ï\8dX\81E\8c\88\92è</TR>\r
+<TR><TD BGCOLOR="#DDFFDD">End<TD BGCOLOR="#DDFFDD">DrumMIDI\8aÖ\98A\8fî\95ñ\83y\81[\83W\82Ì\95\\8e¦OFF</TR>\r
+</TABLE>\r
+<BR>\r
+\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\89\89\91t\82Ì\8fI\97¹</B></FONT><BR>\r
+<DD>\8bÈ\82ª\8dÅ\8cã\82Ü\82Å\89\89\91t\82³\82ê\82é\82Æ\81A\8e©\93®\93I\82É\8fI\97¹\82µ\82Ä\8c\8b\89Ê\95\\8e¦\89æ\96Ê\82Ö\82Æ\88Ú\82è\82Ü\82·\81B<BR>\r
+ \82Ü\82½\81A\89\89\91t\92\86\82É<FONT COLOR="red"><B>ESC\83L\81[</B></FONT>\82Ü\82½\82Í\83M\83^\81[\81E\83x\81[\83X\82Ì <font color="red"><B>Cancel \83L\81[</B></font>\82ð\89\9f\89º\82·\82é\82Æ\81A\89\89\91t\82ð\82»\82±\82Å\92\86\92f\82µ\82Ä\91I\8bÈ\89æ\96Ê\82É\96ß\82è\82Ü\82·\81B<BR>\r
+</DL>\r
+</BLOCKQUOTE>\r
+\r
+<BR>\r
+[<A HREF="..\index.html">\96ß\82é</A>]\r
+\r
+<!-- \83t\83b\83^\81[ -->\r
+<HR SIZE="8" COLOR="green">\r
+<FONT FACE="Impact">\r
+<DIV ALIGN="right">\r
+(C) 2000-2003 FROM / K.YAMASAKI<BR>\r
+mailto: from@donburi.to<BR>\r
+</DIV>\r
+</FONT>\r
+\r
+</BODY>\r
+</HTML>\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
--- /dev/null
+<HTML>\r
+<HEAD>\r
+<TITLE>DTXMania\90à\96¾\8f\91 [\8c\8b\89Ê\95\\8e¦\89æ\96Ê\82Ì\91\80\8dì]</TITLE>\r
+</HEAD>\r
+<BODY BGCOLOR="#EEFFEE" TEXT="black" LINK="#008800" VLINK="#006600">\r
+\r
+<!-- \83w\83b\83_ -->\r
+<P>\r
+<DIV ALIGN="right"><FONT SIZE="-1" FACE="Century"><I>DTXMania User's Manual \81\</I></FONT></DIV>\r
+<TABLE BORDER="0" CELLPADDING="5" CELLSPACING="5" WIDTH="100%">\r
+<TR>\r
+<TD BGCOLOR="green" WIDTH="80%">\r
+ <FONT SIZE="+1" COLOR="white"><B><I> \8c\8b\89Ê\95\\8e¦\89æ\96Ê\82Ì\91\80\8dì</I></B></FONT>\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%">\r
+</TR>\r
+</TABLE>\r
+</P>\r
+\r
+<!-- \96{\95¶ -->\r
+\r
+<P ALIGN="center">\r
+<IMG SRC="kekka.jpg"><BR><BR>\r
+<B>\8c\8b\89Ê\95\\8e¦\89æ\96Ê</B><BR>\r
+</P>\r
+\r
+<BLOCKQUOTE>\r
+<DL>\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\8c\8b\89Ê\95\\8e¦</B></FONT><BR>\r
+<DD>\89\89\91t\8c\8b\89Ê\82ð\95\\8e¦\82µ\82Ü\82·\81B<BR><BR>\r
+<HR>\r
+<TABLE BORDER="0">\r
+<TR><TD><FONT FACE="Arial">PERFECT</FONT><TD>\81c<TD>Perfect \94»\92è\82Ì\8cÂ\90\94\82Æ\94ä\97¦\82Å\82·\81B</TR>\r
+<TR><TD><FONT FACE="Arial">GREAT</FONT><TD>\81c<TD>Great \94»\92è\82Ì\8cÂ\90\94\82Æ\94ä\97¦\82Å\82·\81B</TR>\r
+<TR><TD><FONT FACE="Arial">GOOD</FONT><TD>\81c<TD>Good \94»\92è\82Ì\8cÂ\90\94\82Æ\94ä\97¦\82Å\82·\81B</TR>\r
+<TR><TD><FONT FACE="Arial">POOR</FONT><TD>\81c<TD>Poor \94»\92è\82Ì\8cÂ\90\94\82Æ\94ä\97¦\82Å\82·\81B</TR>\r
+<TR><TD><FONT FACE="Arial">MISS</FONT><TD>\81c<TD>Miss \94»\92è\82Ì\8cÂ\90\94\82Æ\94ä\97¦\82Å\82·\81B</TR>\r
+<TR><TD><FONT FACE="Arial">SCORE</FONT><TD>\81c<TD>\91\8d\8d\87\93¾\93_\82Å\82·\81B</TR>\r
+<TR><TD><FONT FACE="Arial">COMBO</FONT><TD>\81c<TD>\8dÅ\91å\83R\83\93\83{\90\94\81iPerfect\81`Good\82Ì\98A\91±\82µ\82½\8dÅ\91å\82Ì\89ñ\90\94\81j\82Å\82·\81B</TR>\r
+</TABLE><HR><BR>\r
+\89E\89º\82Ì\81u\82r\81v\82Ì\95\94\95ª\82Í\81A\91\8d\8d\87\93I\82È\89\89\91t\8bZ\8fp\94»\92è\82ð\95\\8e¦\82µ\82Ä\82¢\82Ü\82·\81B<BR>\r
+\82±\82ê\82É\82Í\81A\81uSS\81v\81uS\81v\81uA\81v\81uB\81v\81uC\81v\81uD\81v\81uE\81v\82Ì\82V\92i\8aK\82Ì\95]\89¿\83\89\83\93\83N\82ª\82 \82è\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\8c\8b\89Ê\95\\8e¦\89æ\96Ê\82Ì\8fI\97¹</B></FONT><BR>\r
+<DD><FONT COLOR="red"><B>ESC\83L\81[</B></FONT>\82ð\89\9f\89º\82·\82é\82©<FONT COLOR="red"><B>\83V\83\93\83o\83\8b</B></FONT>\82ð\92@\82\82Æ\81A\82±\82Ì\89æ\96Ê\82ð\8fI\97¹\82µ\81A\91I\8bÈ\89æ\96Ê\82Ö\82Æ\88Ú\82è\82Ü\82·\81B<BR>\r
+<BR>\r
+</BLOCKQUOTE>\r
+\r
+<BR>\r
+[<A HREF="..\index.html">\96ß\82é</A>]\r
+\r
+<!-- \83t\83b\83^\81[ -->\r
+<HR SIZE="8" COLOR="green">\r
+<FONT FACE="Impact">\r
+<DIV ALIGN="right">\r
+(C) 2000-2003 FROM / K.YAMASAKI<BR>\r
+mailto: from@donburi.to<BR>\r
+</DIV>\r
+</FONT>\r
+\r
+</BODY>\r
+</HTML>\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
--- /dev/null
+<HTML>\r
+<HEAD>\r
+<TITLE>DTXMania\90à\96¾\8f\91 [\8aî\96{\91\80\8dì]</TITLE>\r
+</HEAD>\r
+<BODY BGCOLOR="#EEFFEE" TEXT="black" LINK="#008800" VLINK="#006600">\r
+\r
+<!-- \83w\83b\83_ -->\r
+<P>\r
+<DIV ALIGN="right"><FONT SIZE="-1" FACE="Century"><I>DTXMania User's Manual \81\</I></FONT></DIV>\r
+<TABLE BORDER="0" CELLPADDING="5" CELLSPACING="5" WIDTH="100%">\r
+<TR>\r
+<TD BGCOLOR="green" WIDTH="80%">\r
+ <FONT SIZE="+1" COLOR="white"><B><I> \8aî\96{\91\80\8dì</I></B></FONT>\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%">\r
+</TR>\r
+</TABLE>\r
+</P>\r
+\r
+<!-- \96{\95¶ -->\r
+\r
+<P><B>\81¡\8fã\89º\88Ú\93®\82Æ\8c\88\92è</B></P>\r
+<BLOCKQUOTE>\r
+<B>DTXMania \82Å\82Ì\8aî\96{\91\80\8dì\82Æ\82µ\82Ä\81A\81u<FONT COLOR="blue">\83J\81[\83\\83\8b\82Ì\8fã\89º\88Ú\93®</FONT>\81v\82Æ\81u<FONT COLOR="blue">\8c\88\92è\81i\91I\91ð\81j</FONT>\81v\82ª\82 \82è\82Ü\82·\81B</B><BR>\r
+<BR><BR>\r
+\r
+<DL>\r
+<DT><IMG SRC="ball_y.gif"><B><FONT COLOR="red"> \83L\81[\83{\81[\83h</FONT>\82Ì\8fê\8d\87\81F</B><BR><BR>\r
+<DD>\96î\88ó\83L\81[\82Ì\8fã\89º\82Å\88Ú\93®\81AEnter\83L\81[\82Å\8c\88\92è\81B<BR>\r
+<P><IMG SRC="keyb_udd.png"></P>\r
+<DT><IMG SRC="ball_y.gif"><B><FONT COLOR="red"> \83h\83\89\83\80</FONT>\82Ì\8fê\8d\87\81F</B><BR><BR>\r
+<DD>\83X\83l\83A\91Å\82Å\8fã\88Ú\93®\81A\83\8d\81[\83^\83\80\91Å\82Å\89º\88Ú\93®\81A\83V\83\93\83o\83\8b\91Å\82Å\8c\88\92è\81B<BR>\r
+<P><IMG SRC="drum_udd.png"></P>\r
+<DT><IMG SRC="ball_y.gif"><B><FONT COLOR="red"> \83M\83^\81[\81^\83x\81[\83X</FONT>\82Ì\8fê\8d\87\81F</B><BR><BR>\r
+<DD>\90Ô\83{\83^\83\93\82Å\8fã\88Ú\93®\81A\90Â\83{\83^\83\93\82Å\89º\88Ú\93®\81ASTART\83{\83^\83\93\82Å\8c\88\92è\81B<BR>\r
+<P><IMG SRC="guitar_udd.png"></P>\r
+</DL>\r
+</BLOCKQUOTE>\r
+\r
+<BR>\r
+[<A HREF="../index.html">\96ß\82é</A>]\r
+\r
+<!-- \83t\83b\83^\81[ -->\r
+<HR SIZE="8" COLOR="green">\r
+<FONT FACE="Impact">\r
+<DIV ALIGN="right">\r
+(C) 2000-2003 FROM / K.YAMASAKI<BR>\r
+mailto: from@donburi.to<BR>\r
+</DIV>\r
+</FONT>\r
+\r
+</BODY>\r
+</HTML>\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
--- /dev/null
+<HTML>\r
+<HEAD>\r
+<TITLE>DTXMania\90à\96¾\8f\91 [\83I\83v\83V\83\87\83\93\81i\83Q\81[\83\80\90Ý\92è\81j\89æ\96Ê\82Ì\91\80\8dì]</TITLE>\r
+</HEAD>\r
+<BODY BGCOLOR="#EEFFEE" TEXT="black" LINK="#008800" VLINK="#006600">\r
+\r
+<!-- \83w\83b\83_ -->\r
+<P>\r
+<DIV ALIGN="right"><FONT SIZE="-1" FACE="Century"><I>DTXMania User's Manual \81\</I></FONT></DIV>\r
+<TABLE BORDER="0" CELLPADDING="5" CELLSPACING="5" WIDTH="100%">\r
+<TR>\r
+<TD BGCOLOR="green" WIDTH="80%">\r
+ <FONT SIZE="+1" COLOR="white"><B><I>\83I\83v\83V\83\87\83\93\81i\83Q\81[\83\80\90Ý\92è\81j\89æ\96Ê\82Ì\91\80\8dì</I></B></FONT>\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%">\r
+</TR>\r
+</TABLE>\r
+</P>\r
+\r
+<!-- \96{\95¶ -->\r
+\r
+<P ALIGN="center">\r
+<IMG SRC="option.jpg"><BR><BR>\r
+<B>\83I\83v\83V\83\87\83\93\81i\83Q\81[\83\80\90Ý\92è\81j\89æ\96Ê</B><BR>\r
+</P>\r
+\r
+<BLOCKQUOTE>\r
+<DL>\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\8d\80\96Ú\82Ì\91I\91ð\82Æ\95Ï\8dX</B></FONT><BR>\r
+<DD>\83J\81[\83\\83\8b\83L\81[\82Å\8fã\89º\8d¶\89E\82É\88Ú\93®\82µ\81A\90Ý\92è\95Ï\8dX\82µ\82½\82¢\8d\80\96Ú\82É\82 \82í\82¹\82Ä\89º\82³\82¢\81B<BR>\r
+\8d\80\96Ú\82É\82 \82í\82¹\82Ä\8c\88\92è\82·\82é\82Æ\81A\92l\82ð\95Ï\8dX\82·\82é\82±\82Æ\82ª\82Å\82«\82Ü\82·\81B<BR>\r
+\90\94\92l\8d\80\96Ú\82É\82Â\82¢\82Ä\82Í\8c\88\92è\82·\82é\82Æ\90\94\92l\82ª\90Ô\90F\82É\82È\82è\82Ü\82·\82Ì\82Å\81A\82±\82±\82Å\90\94\92l\82ð\8fã\89º\82É\95Ï\8dX\82µ\81A\8dÄ\82Ñ\8c\88\92è\82·\82é\82Æ\8am\92è\82³\82ê\82Ü\82·\81B\81i\90à\96¾\82µ\82É\82\82¢\82È\81c(\8a¾)\81j<BR>\r
+<BR>\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\8d\80\96Ú\82Ì\90à\96¾</B></FONT><BR>\r
+<DD>\8d\80\96Ú\82É\83J\81[\83\\83\8b\82ð\8d\87\82í\82¹\82é\82Æ\81A\89æ\96Ê\89º\95\94\82É\82»\82Ì\8d\80\96Ú\82É\91Î\82·\82é\90à\96¾\95¶\82ª\95\\8e¦\82³\82ê\82Ü\82·\81B<BR>\r
+</DL>\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\95Û\91¶\8fI\97¹</B></FONT><BR>\r
+<DD>\81uEXIT\81v\82ð\91I\91ð\82µ\82Ä\8c\88\92è\82·\82é\82Æ\81A\90Ý\92è\82ð\95Û\91¶\82µ\82Ä\83^\83C\83g\83\8b\89æ\96Ê\82É\96ß\82è\82Ü\82·\81B<BR>\r
+</DL>\r
+</BLOCKQUOTE>\r
+\r
+<BR>\r
+[<A HREF="..\index.html">\96ß\82é</A>]\r
+\r
+<!-- \83t\83b\83^\81[ -->\r
+<HR SIZE="8" COLOR="green">\r
+<FONT FACE="Impact">\r
+<DIV ALIGN="right">\r
+(C) 2000-2003 FROM / K.YAMASAKI<BR>\r
+mailto: from@donburi.to<BR>\r
+</DIV>\r
+</FONT>\r
+\r
+</BODY>\r
+</HTML>\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
--- /dev/null
+<HTML>\r
+<HEAD>\r
+<TITLE>DTXMania\90à\96¾\8f\91 [\91I\8bÈ\89æ\96Ê\82Ì\91\80\8dì]</TITLE>\r
+</HEAD>\r
+<BODY BGCOLOR="#EEFFEE" TEXT="black" LINK="#008800" VLINK="#006600">\r
+\r
+<!-- \83w\83b\83_ -->\r
+<P>\r
+<DIV ALIGN="right"><FONT SIZE="-1" FACE="Century"><I>DTXMania User's Manual \81\</I></FONT></DIV>\r
+<TABLE BORDER="0" CELLPADDING="5" CELLSPACING="5" WIDTH="100%">\r
+<TR>\r
+<TD BGCOLOR="green" WIDTH="80%">\r
+ <FONT SIZE="+1" COLOR="white"><B><I> \91I\8bÈ\89æ\96Ê\82Ì\91\80\8dì</I></B></FONT>\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%">\r
+</TR>\r
+</TABLE>\r
+</P>\r
+\r
+<!-- \96{\95¶ -->\r
+\r
+<P ALIGN="center">\r
+<IMG SRC="senkyoku.jpg"><BR><BR>\r
+<B>\91I\8bÈ\89æ\96Ê</B><BR>\r
+</P>\r
+\r
+<BLOCKQUOTE>\r
+<DL>\r
+\r
+<!---- \91I\8bÈ\82Æ\8c\88\92è ---->\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\91I\8bÈ\82Æ\8c\88\92è</B></FONT><BR>\r
+<DD>\8bÈ\83\8a\83X\83g\82ð\8fã\89º\82É\88Ú\93®\82µ\81A\89\89\91t\82µ\82½\82¢\8bÈ\82É<FONT COLOR="red"><B>\91I\8bÈ\83J\81[\83\\83\8b\82ð\8d\87\82í\82¹\82Ä\8c\88\92è</B></FONT>\82µ\82Ä\89º\82³\82¢\81B<BR>\r
+<BR>\r
+\r
+<!---- \83M\83^\81[\8bÈ\82Ì\91I\8bÈ ---->\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\83M\83^\81[\91Î\89\9e\8bÈ\82Ì\91I\8bÈ</B></FONT><BR>\r
+<DD>\83M\83^\81[\82Å\83J\81[\83\\83\8b\82Ì\8fã\89º\82ð\8ds\82È\82¤\82Æ\81A<font color="red"><B>\83M\83^\81[\91Î\89\9e\8bÈ\82Ì\82Ý\8b\92²\95\\8e¦</B></font>\82³\82ê\82é\82æ\82¤\82É\82È\82è\82Ü\82·\81B\81i\83M\83^\81[\91Î\89\9e\8bÈ\82Æ\82Í\81A#GLEVEL \82ª 0 \82Å\82È\82¢\8bÈ\82ð\88Ó\96¡\82µ\82Ü\82·\81B\81j\91Î\89\9e\8bÈ\88È\8aO\82à\91I\91ð\82·\82é\82±\82Æ\82Í\89Â\94\\82Å\82·\81B<BR>\r
+<BR>\r
+\r
+<!---- \83X\83s\81[\83h\83p\83l\83\8b ---->\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\83X\83s\81[\83h\83p\83l\83\8b</B></FONT><BR>\r
+<DD>\89\89\91t\89æ\96Ê\82Å\82Ì\95\88\96Ê\82Ì\83X\83N\83\8d\81[\83\8b\91¬\93x\82Ì\94{\97¦\82ð\95\\8e¦\82µ\82Ä\82¢\82Ü\82·\81B<FONT COLOR="red"><B>\83o\83X\83y\83_\83\8b\82ð\82Q\89ñ</B></FONT>\82·\82Î\82â\82\93¥\82Þ\82±\82Æ\82Å\81A\91¬\93x\82ð x0.5 \82¸\82Â\95Ï\8dX\82·\82é\82±\82Æ\82ª\82Å\82«\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\8bÈ\8eí\83p\83l\83\8b</B></FONT><BR>\r
+<DD>\8bÈ\83\8a\83X\83g\82É\95\\8e¦\82·\82×\82«\8bÈ\8eí\82ð\95\\8e¦\82µ\82Ä\82¢\82Ü\82·\81B<FONT COLOR="red"><B>\83n\83C\83^\83\80</B></FONT>\82ð\92@\82\82²\82Æ\82É\81A\95\\8e¦\82·\82é\8bÈ\8eí\82ð\90Ø\82è\91Ö\82¦\82é\82±\82Æ\82ª\82Å\82«\82Ü\82·\81B<BR>\r
+<BR>\r
+<table border="0" cellpadding="10"><tr><td bgcolor="white">\r
+ \95\\8e¦\8f\87\81F<BR>\r
+<table border="0"><tr>\r
+<td bgcolor="blue"><font face="Arial" color="white">ALL</font><td>\81¨\r
+<td bgcolor="red"><font face="Arial" color="white">DTX</font><td>\81¨\r
+<td bgcolor="green"><font face="Arial" color="white">BMS</font><td>\81¨\r
+<td bgcolor="blue"><font face="Arial" color="white">GDA</font><td>\81¨\r
+<td bgcolor="skyblue"><font face="Arial" color="white">G2D</font><td>\81¨\r
+<td bgcolor="purple"><font face="Arial" color="white">MID</font><td>\81¨\r
+<td> ALL \82É\96ß\82é\r
+</tr></table>\r
+</td></tr></table>\r
+<BR>\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\93ï\88Õ\93x\82Ì\95Ï\8dX\81i\91Î\89\9e\8bÈ\82Ì\82Ý\81j</B></FONT><BR>\r
+<DD>\83Z\83b\83g\83t\83@\83C\83\8b\82É\91Î\89\9e\82µ\82½\8bÈ\83f\81[\83^\82Ì\8fê\8d\87\81A\91I\8bÈ\83J\81[\83\\83\8b\82ð\8d\87\82í\82¹\82é\82Æ\81A\89æ\96Ê\89E\89º\82Ì\8bÈ\8fî\95ñ\95\\8e¦\82É\81A\88È\89º\82Ì\89æ\96Ê\82Å\8e¦\82·\82æ\82¤\82È\95¶\8e\9a\97ñ\81i[BASIC ADVANCED EXTREME]\82È\82Ç\81G\8bÈ\82É\82æ\82Á\82Ä\88Ù\82È\82é\81j\82ª\95\\8e¦\82³\82ê\82Ü\82·\81B<BR><BR>\r
+\81@\81@<IMG SRC="level.png">\81@<B>\81© \82R\82Â\82Ì\93ï\88Õ\93x\82ª\91¶\8dÝ</B><BR><BR>\r
+\82±\82Ì\8fê\8d\87\81A<FONT COLOR="red"><B>\83n\83C\83n\83b\83g\82ð\82Q\89ñ</B></FONT>\82·\82Î\82â\82\92@\82\81i\83M\83^\81[\82Ì\8fê\8d\87\82Í<FONT COLOR="red"><B>\82f\83{\83^\83\93\82ð\89\9f\82µ\82È\82ª\82çPick\82Q\89ñ</B></FONT>\81j\82±\82Æ\82Å\81A\82±\82Ì\93ï\88Õ\93x\82ð\95Ï\8dX\82·\82é\82±\82Æ\82ª\8fo\97\88\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>MUSIC BOX \82©\82ç\82Ì\92E\8fo</B></FONT><BR>\r
+<DD>\8bÈ\83\8a\83X\83g\82Í\8aK\91w\8d\\91¢\82ð\8e\9d\82¿\82Ü\82·\82ª\81A\8eq\8aK\91w\82©\82ç\90e\8aK\91w\82É\94²\82¯\82é\8fê\8d\87\82Í\81A\81u\81ª\96ß\82é\81v\82ð\91I\91ð\82·\82é\88È\8aO\82É\81A<FONT COLOR="red"><B>\83t\83\8d\83A\83^\83\80</B></FONT>\82ð\92@\82\82±\82Æ\82Å\82à\89Â\94\\82Å\82·\81B<BR>\r
+<BR>\r
+\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\8fI\97¹</B></FONT><BR>\r
+<DD><FONT COLOR="red"><B>ESC\83L\81[</B></FONT>\82ð\89\9f\89º\82·\82é\82±\82Æ\82É\82æ\82è\81A<A HREF="title.html">\83^\83C\83g\83\8b\89æ\96Ê</A>\82É\96ß\82è\82Ü\82·\81B<BR>\r
+<BR>\r
+</DL>\r
+</BLOCKQUOTE>\r
+\r
+<BR>\r
+[<A HREF="..\index.html">\96ß\82é</A>]\r
+\r
+<!-- \83t\83b\83^\81[ -->\r
+<HR SIZE="8" COLOR="green">\r
+<FONT FACE="Impact">\r
+<DIV ALIGN="right">\r
+(C) 2000-2003 FROM / K.YAMASAKI<BR>\r
+mailto: from@donburi.to<BR>\r
+</DIV>\r
+</FONT>\r
+\r
+</BODY>\r
+</HTML>\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
--- /dev/null
+<HTML>\r
+<HEAD>\r
+<TITLE>DTXMania\90à\96¾\8f\91 [\83^\83C\83g\83\8b\89æ\96Ê\82Ì\91\80\8dì]</TITLE>\r
+</HEAD>\r
+<BODY BGCOLOR="#EEFFEE" TEXT="black" LINK="#008800" VLINK="#006600">\r
+\r
+<!-- \83w\83b\83_ -->\r
+<P>\r
+<DIV ALIGN="right"><FONT SIZE="-1" FACE="Century"><I>DTXMania User's Manual \81\</I></FONT></DIV>\r
+<TABLE BORDER="0" CELLPADDING="5" CELLSPACING="5" WIDTH="100%">\r
+<TR>\r
+<TD BGCOLOR="green" WIDTH="80%">\r
+ <FONT SIZE="+1" COLOR="white"><B><I> \83^\83C\83g\83\8b\89æ\96Ê\82Ì\91\80\8dì</I></B></FONT>\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%">\r
+</TR>\r
+</TABLE>\r
+</P>\r
+\r
+<!-- \96{\95¶ -->\r
+\r
+<P ALIGN="center">\r
+<IMG SRC="title.jpg"><BR><BR>\r
+<B>\83^\83C\83g\83\8b\89æ\96Ê</B><BR>\r
+</P>\r
+\r
+<BLOCKQUOTE>\r
+<DL>\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\91I\91ð\82Æ\8c\88\92è</B></FONT><BR>\r
+<DD>\83J\81[\83\\83\8b\82ð\8fã\89º\82µ\81A\8aó\96]\82Ì\8d\80\96Ú\82Å\8c\88\92è\82µ\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>GAME START</B></FONT><BR>\r
+<DD>\83Q\81[\83\80\82ð\8aJ\8en\82µ\81A<A HREF="senkyoku.html">\91I\8bÈ\89æ\96Ê</A>\82É\88Ú\82è\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>OPTION</B></FONT><BR>\r
+<DD>DTXMania \82Ì\83Q\81[\83\80\93à\97e\82É\8aÖ\82·\82é\90Ý\92è\82ð\8ds\82È\82¤<A HREF="option.html">\83I\83v\83V\83\87\83\93\89æ\96Ê</A>\82É\88Ú\82è\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>CONFIGURATION</B></FONT><BR>\r
+<DD>DTXMania \82Ì\83V\83X\83e\83\80\82É\8aÖ\82·\82é\90Ý\92è\82ð\8ds\82È\82¤<A HREF="config.html">\83R\83\93\83t\83B\83O\89æ\96Ê</A>\82É\88Ú\82è\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>EXIT</B></FONT><BR>\r
+<DD>DTXMania \82ð\8fI\97¹\82µ\82Ü\82·\81B<BR>\r
+<BR>\r
+</BLOCKQUOTE>\r
+\r
+<BR>\r
+[<A HREF="..\index.html">\96ß\82é</A>]\r
+\r
+<!-- \83t\83b\83^\81[ -->\r
+<HR SIZE="8" COLOR="green">\r
+<FONT FACE="Impact">\r
+<DIV ALIGN="right">\r
+(C) 2000-2003 FROM / K.YAMASAKI<BR>\r
+mailto: from@donburi.to<BR>\r
+</DIV>\r
+</FONT>\r
+\r
+</BODY>\r
+</HTML>\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
--- /dev/null
+<HTML>\r
+<HEAD>\r
+<TITLE>DTXMania\90à\96¾\8f\91 [\83R\83\93\83t\83B\83O\83\8c\81[\83V\83\87\83\93]</TITLE>\r
+</HEAD>\r
+<BODY BGCOLOR="#EEFFEE" TEXT="black" LINK="#008800" VLINK="#006600">\r
+\r
+<!-- \83w\83b\83_ -->\r
+<P>\r
+<DIV ALIGN="right"><FONT SIZE="-1" FACE="Century"><I>DTXMania User's Manual \81\</I></FONT></DIV>\r
+<TABLE BORDER="0" CELLPADDING="5" CELLSPACING="5" WIDTH="100%">\r
+<TR>\r
+<TD BGCOLOR="green" WIDTH="80%">\r
+ <FONT SIZE="+1" COLOR="white"><B><I> \83R\83\93\83t\83B\83O\83\8c\81[\83V\83\87\83\93\81iDTXMania.ini\81j</I></B></FONT>\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%">\r
+</TR>\r
+</TABLE>\r
+</P>\r
+\r
+<!-- \96{\95¶ -->\r
+\r
+<BLOCKQUOTE>\r
+<DL>\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>DTXMania.ini</B></FONT><BR>\r
+<DD>DTXMania\82ð\82P\93x\82Å\82à\8bN\93®\82·\82é\82Æ\81ADTXMania.exe\82Æ\93¯\82¶\83t\83H\83\8b\83_\82É\81uDTXMania.ini\81v\82Æ\82¢\82¤\83e\83L\83X\83g\83t\83@\83C\83\8b\82ª\8dì\90¬\82³\82ê\82Ü\82·\81B\82±\82ê\82ð\83\81\83\82\92 \93\99\82Å\95Ò\8fW\82·\82é\82±\82Æ\82É\82æ\82è\81ADTXMania\82Ì\97l\81X\82È\90Ý\92è\82ð\95Ï\8dX\82·\82é\82±\82Æ\82ª\8fo\97\88\82Ü\82·\81B<BR>\r
+<B>\81¦ \90Ý\92è\95Ï\8dX\82Í\83R\83\93\83t\83B\83O\81i\90Ý\92è\81j\89æ\96Ê\82Å\8ds\82È\82¦\82Ü\82·\82ª\81ADTXMania.ini \82Å\82µ\82©\95Ï\8dX\82Å\82«\82È\82¢\8d\80\96Ú\82à\82 \82è\82Ü\82·\81B\81iDTXFiles \82È\82Ç\81j</B><BR>\r
+<BR>\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>DTXMania.ini \82Ì\93à\97e</B></FONT><BR>\r
+<DD>DTXMania.ini\82Ì\93à\97e\82â\90Ý\92è\8d\80\96Ú\82Ì\8fÚ\8d×\82É\82Â\82¢\82Ä\82Í\81ADTXMania.ini\93à\82É\8bL\8fq\82³\82ê\82Ä\82¢\82é\83R\83\81\83\93\83g\82ð\92¼\90Ú\82²\8eQ\8fÆ\82\82¾\82³\82¢\81B<BR>\r
+<BR>\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\8fC\90³\82Ì\94½\89f</B></FONT><BR>\r
+<DD>DTXMania.ini\82ð\8fC\90³\8cã\82ÉDTXMania\82ð\8dÄ\8bN\93®\82·\82ê\82Î\81A\95Ï\8dX\93à\97e\82ª\94½\89f\82³\82ê\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\90Ý\92è\82Ì\83\8a\83Z\83b\83g</B></FONT><BR>\r
+<DD>\90Ý\92è\8d\80\96Ú\82ð\82·\82×\82Ä\83\8a\83Z\83b\83g\82·\82é\82É\82Í\81ADTXMania.ini\82ð\8dí\8f\9c\82µ\82ÄDTXMania\82ð\8bN\93®\82µ\82Ä\89º\82³\82¢\81B\90V\82µ\82¢DTXMania.ini\82ª\8dì\90¬\82³\82ê\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\83o\81[\83W\83\87\83\93\83A\83b\83v\8e\9e\82Ì\8dX\90V</B></FONT><BR>\r
+<DD>DTXMania\82ª\83o\81[\83W\83\87\83\93\83A\83b\83v\82·\82é\82±\82Æ\82É\82æ\82Á\82Ä\81ADTXMania.ini \82Ì\8d\80\96Ú\82ª\91\9d\8c¸\82µ\82½\8fê\8d\87\82É\82Í\81ADTXMania\82ª\8bN\93®\82³\82ê\82½\82Æ\82«\82É\81A\8e©\93®\93I\82É\90V\82µ\82¢\83o\81[\83W\83\87\83\93\82Ì DTXMania.ini \82ª\8dì\90¬\82³\82ê\82Ü\82·\81B\82±\82Ì\82Æ\82«\81A\88È\91O\82ÌDTXMania.ini \82Ì\90Ý\92è\93à\97e\82Í\81A\89Â\94\\82È\8cÀ\82è\8cp\8f³\82³\82ê\82Ü\82·\81B<BR>\r
+<BR>\r
+</DL>\r
+</BLOCKQUOTE>\r
+\r
+<BR>\r
+[<A HREF="..\index.html">\96ß\82é</A>]\r
+\r
+<!-- \83t\83b\83^\81[ -->\r
+<HR SIZE="8" COLOR="green">\r
+<FONT FACE="Impact">\r
+<DIV ALIGN="right">\r
+(C) 2000-2003 FROM / K.YAMASAKI<BR>\r
+mailto: from@donburi.to<BR>\r
+</DIV>\r
+</FONT>\r
+\r
+</BODY>\r
+</HTML>\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
--- /dev/null
+<HTML>\r
+<HEAD>\r
+<TITLE>DTXMania\90à\96¾\8f\91 [\83f\83t\83H\83\8b\83g\82Ì\83L\81[\8a\84\82è\93\96\82Ä]</TITLE>\r
+</HEAD>\r
+<BODY BGCOLOR="#EEFFEE" TEXT="black" LINK="#008800" VLINK="#006600">\r
+\r
+<!-- \83w\83b\83_ -->\r
+<P>\r
+<DIV ALIGN="right"><FONT SIZE="-1" FACE="Century"><I>DTXMania User's Manual \81\</I></FONT></DIV>\r
+<TABLE BORDER="0" CELLPADDING="5" CELLSPACING="5" WIDTH="100%">\r
+<TR>\r
+<TD BGCOLOR="green" WIDTH="80%">\r
+ <FONT SIZE="+1" COLOR="white"><B><I> \83f\83t\83H\83\8b\83g\82Ì\83L\81[\8a\84\82è\93\96\82Ä</I></B></FONT>\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%">\r
+</TR>\r
+</TABLE>\r
+</P>\r
+\r
+<!-- \96{\95¶ -->\r
+\r
+<BLOCKQUOTE>\r
+<P>\81¡ \8f\89\8aú\8fó\91Ô\82É\82¨\82¯\82é\81A\83L\81[\83{\81[\83h\81A\83W\83\87\83C\83p\83b\83h\81AMIDI\83m\81[\83g\82Ì\8a\84\82è\93\96\82Ä\82É\82Â\82¢\82Ä\81A\88È\89º\82É\8e¦\82µ\82Ü\82·\81B</P>\r
+\r
+<DL>\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\83L\81[\83{\81[\83h</B></FONT>\r
+<DD><BR>\r
+<TABLE BORDER="1" CELLSPACING="0" CELLPADDING="10" BGCOLOR="#DDFFDD">\r
+<TR><TD ROWSPAN="9">\83h\83\89\83\80<TD>HiHat (Close)<TD>Z</TR>\r
+<TR><TD>Snare<TD>X</TR>\r
+<TR><TD>BassDrum<TD>C, Space</TR>\r
+<TR><TD>HighTom<TD>V</TR>\r
+<TR><TD>LowTom<TD>B</TR>\r
+<TR><TD>FloorTom<TD>N</TR>\r
+<TR><TD>Cymbal<TD>M</TR>\r
+<TR><TD>HiHat (Open)<TD>A</TR>\r
+<TR><TD>RideCymbal<TD>K</TR>\r
+</TABLE>\r
+<BR>\r
+\r
+<TABLE BORDER="1" CELLSPACING="0" CELLPADDING="10" BGCOLOR="#DDFFDD">\r
+<TR><TD ROWSPAN="7">\83M\83^\81[<TD>R<TD>F2</TR>\r
+<TR><TD>G<TD>F3</TR>\r
+<TR><TD>B<TD>F4</TR>\r
+<TR><TD>Pick<TD>Enter, \89EShift</TR>\r
+<TR><TD>Wail<TD>\89ECtrl</TR>\r
+<TR><TD>\8c\88\92è(Decide)<TD>Enter</TR>\r
+<TR><TD>\8eæ\8fÁ(Cancel)<TD>Esc</TR>\r
+</TABLE>\r
+<BR>\r
+\r
+<TABLE BORDER="1" CELLSPACING="0" CELLPADDING="10" BGCOLOR="#DDFFDD">\r
+<TR><TD ROWSPAN="7">\83x\81[\83X<TD>R<TD>\83e\83\93\83L\81[\82Ì1</TR>\r
+<TR><TD>G<TD>\83e\83\93\83L\81[\82Ì2</TR>\r
+<TR><TD>B<TD>\83e\83\93\83L\81[\82Ì3</TR>\r
+<TR><TD>Pick<TD>\83e\83\93\83L\81[\82Ì <TT>'.'</TT>\81A\83e\83\93\83L\81[\82ÌEnter</TR>\r
+<TR><TD>Wail<TD>\83e\83\93\83L\81[\82Ì0</TR>\r
+<TR><TD>\8c\88\92è(Decide)<TD>Enter</TR>\r
+<TR><TD>\8eæ\8fÁ(Cancel)<TD>Esc</TR>\r
+</TABLE>\r
+<BR>\r
+<BR>\r
+\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\83W\83\87\83C\83p\83b\83h</B></FONT>\r
+<DD><BR>\r
+\r
+\81¦\83W\83\87\83C\83p\83b\83h\82ÌID# \82Í Windows \82Ì\83R\83\93\83g\83\8d\81[\83\8b\83p\83l\83\8b\82©\82ç\8am\94F\81^\95Ï\8dX\89Â\94\\82Å\82·\81B\82Ü\82½\81A\83W\83\87\83C\83p\83b\83h\82ª\82P\82Â\82µ\82©\82È\82\82Ä\82à\81AID# \82ð 2 \82â 3 \82É\90Ý\92è\82Å\82«\82Ü\82·\81B<BR>\r
+<BR>\r
+\r
+<TABLE BORDER="1" CELLSPACING="0" CELLPADDING="10" BGCOLOR="#DDFFDD">\r
+<TR><TD ROWSPAN="9">\83h\83\89\83\80<TD>HiHat (Close)<TD>ID#1 \82Ì\83{\83^\83\931</TR>\r
+<TR><TD>Snare<TD>ID#1 \82Ì\83{\83^\83\932</TR>\r
+<TR><TD>BassDrum<TD>ID#1 \82Ì\83{\83^\83\935</TR>\r
+<TR><TD>HighTom<TD>ID#1 \82Ì\83{\83^\83\936</TR>\r
+<TR><TD>LowTom<TD>ID#1 \82Ì\83{\83^\83\938</TR>\r
+<TR><TD>FloorTom<TD>-</TR>\r
+<TR><TD>Cymbal<TD>ID#1 \82Ì\83{\83^\83\933</TR>\r
+<TR><TD>HiHat (Open)<TD>-</TR>\r
+<TR><TD>RideCymbal<TD>-</TR>\r
+</TABLE>\r
+<BR>\r
+\r
+<TABLE BORDER="1" CELLSPACING="0" CELLPADDING="10" BGCOLOR="#DDFFDD">\r
+<TR><TD ROWSPAN="7">\83M\83^\81[<TD>R<TD>ID#2 \82Ì\83{\83^\83\936</TR>\r
+<TR><TD>G<TD>ID#2 \82Ì\83{\83^\83\932</TR>\r
+<TR><TD>B<TD>ID#2 \82Ì\83{\83^\83\931</TR>\r
+<TR><TD>Pick<TD>ID#2 \82Ì\83{\83^\83\9313</TR>\r
+<TR><TD>Wail<TD>ID#2 \82Ì\83{\83^\83\935</TR>\r
+<TR><TD>\8c\88\92è(Decide)<TD>ID#2 \82Ì\83{\83^\83\9312</TR>\r
+<TR><TD>\8eæ\8fÁ(Cancel)<TD>ID#2 \82Ì\83{\83^\83\939</TR>\r
+</TABLE>\r
+<BR>\r
+\r
+<TABLE BORDER="1" CELLSPACING="0" CELLPADDING="10" BGCOLOR="#DDFFDD">\r
+<TR><TD ROWSPAN="7">\83x\81[\83X<TD>R<TD>ID#3 \82Ì\83{\83^\83\936</TR>\r
+<TR><TD>G<TD>ID#3 \82Ì\83{\83^\83\932</TR>\r
+<TR><TD>B<TD>ID#3 \82Ì\83{\83^\83\931</TR>\r
+<TR><TD>Pick<TD>ID#3 \82Ì\83{\83^\83\9313</TR>\r
+<TR><TD>Wail<TD>ID#3 \82Ì\83{\83^\83\935</TR>\r
+<TR><TD>\8c\88\92è(Decide)<TD>ID#3 \82Ì\83{\83^\83\9312</TR>\r
+<TR><TD>\8eæ\8fÁ(Cancel)<TD>ID#3 \82Ì\83{\83^\83\939</TR>\r
+</TABLE>\r
+<BR>\r
+<BR>\r
+\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>MIDI\93ü\97Í</B></FONT>\r
+<DD><BR>\r
+\r
+<TABLE BORDER="1" CELLSPACING="0" CELLPADDING="10" BGCOLOR="#DDFFDD">\r
+<TR><TD ROWSPAN="9">\83h\83\89\83\80<TD>HiHat (Close)<TD>42</TR>\r
+<TR><TD>Snare<TD>25, 26, 27, 28, 29, 31, 32, 34, 37, 38, 40, 113</TR>\r
+<TR><TD>BassDrum<TD>33, 35, 36, 112</TR>\r
+<TR><TD>HighTom<TD>48, 50</TR>\r
+<TR><TD>LowTom<TD>47</TR>\r
+<TR><TD>FloorTom<TD>41, 43, 45</TR>\r
+<TR><TD>Cymbal<TD>49, 52, 55, 57</TR>\r
+<TR><TD>HiHat (Open)<TD>46</TR>\r
+<TR><TD>RideCymbal<TD>51, 53, 59</TR>\r
+</TABLE>\r
+<BR>\r
+\r
+\r
+</DL>\r
+</BLOCKQUOTE>\r
+\r
+<BR>\r
+[<A HREF="..\index.html">\96ß\82é</A>]\r
+\r
+<!-- \83t\83b\83^\81[ -->\r
+<HR SIZE="8" COLOR="green">\r
+<FONT FACE="Impact">\r
+<DIV ALIGN="right">\r
+(C) 2000-2003 FROM / K.YAMASAKI<BR>\r
+mailto: from@donburi.to<BR>\r
+</DIV>\r
+</FONT>\r
+\r
+</BODY>\r
+</HTML>\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
--- /dev/null
+<HTML>\r
+<HEAD>\r
+<TITLE>DTXMania\90à\96¾\8f\91 [\89\89\91t\82Å\82«\82é\83f\81[\83^]</TITLE>\r
+</HEAD>\r
+<BODY BGCOLOR="#EEFFEE" TEXT="black" LINK="#008800" VLINK="#006600">\r
+\r
+<!-- \83w\83b\83_ -->\r
+<P>\r
+<DIV ALIGN="right"><FONT SIZE="-1" FACE="Century"><I>DTXMania User's Manual \81\</I></FONT></DIV>\r
+<TABLE BORDER="0" CELLPADDING="5" CELLSPACING="5" WIDTH="100%">\r
+<TR>\r
+<TD BGCOLOR="green" WIDTH="80%">\r
+ <FONT SIZE="+1" COLOR="white"><B><I> \89\89\91t\82Å\82«\82é\83f\81[\83^</I></B></FONT>\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%">\r
+</TR>\r
+</TABLE>\r
+</P>\r
+\r
+<!-- \96{\95¶ -->\r
+\r
+<BLOCKQUOTE>\r
+<DL>\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\89\89\91t\83f\81[\83^\82Ì\8eí\97Þ</B></FONT><BR><BR>\r
+<DD>DTXMania \82Å\82Í\81A\89\89\91t\83f\81[\83^\82Æ\82µ\82Ä\88È\89º\82Ì\8c`\8e®\82ð\83T\83|\81[\83g\82µ\82Ü\82·\81B<BR>\r
+<BR>\r
+<TABLE BORDER="0">\r
+<TR><TD BGCOLOR="red"><FONT FACE="Arial" COLOR="white">DTX</FONT><TD>\81@\81c<TD>DTXMania\8c`\8e®\81G \83h\83\89\83\80\81i\82V\83\8c\81[\83\93\81j\81A\83M\83^\81[\81\95\83x\81[\83X</TR>\r
+<TR><TD BGCOLOR="blue"><FONT FACE="Arial" COLOR="white">GDA</FONT><TD>\81@\81c<TD>BandJAM\8c`\8e®\81G \83h\83\89\83\80\81i\82U\83\8c\81[\83\93\81j\81A\83M\83^\81[</TR>\r
+<TR><TD BGCOLOR="skyblue"><FONT FACE="Arial" COLOR="white">G2D</FONT><TD>\81@\81c<TD>SessionStream\8c`\8e®\81G \83h\83\89\83\80\81i\82U\83\8c\81[\83\93\81j\81A\83M\83^\81[\81\95\83x\81[\83X</TR>\r
+<TR><TD BGCOLOR="green"><FONT FACE="Arial" COLOR="white">BMS</FONT><TD>\81@\81c<TD>BM98\8c`\8e®\81G \8c®\94Õ\81i\82T\83\8c\81[\83\93\81j</TR>\r
+<TR><TD BGCOLOR="green"><FONT FACE="Arial" COLOR="white">BME</FONT><TD>\81@\81c<TD>BM98\8c`\8e®\81G \8c®\94Õ\81i\82V\83\8c\81[\83\93\81j</TR>\r
+<TR><TD BGCOLOR="purple"><FONT FACE="Arial" COLOR="white">MID</FONT><TD>\81@\81c<TD>\95W\8f\80MIDI\8c`\8e®\81G \83h\83\89\83\80\83p\81[\83g\8e©\93®\92\8a\8fo\81E\95Ï\8a·\81iDrumMIDI\8ed\97l\81j</TR>\r
+</TABLE>\r
+<BR>\r
+\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>MID\83t\83@\83C\83\8b\82Ì\89\89\91t\82É\82Â\82¢\82Ä</B></FONT><BR><BR>\r
+<DD><B>DTXMania027 \88È\8d~\82Å\82Í\81AMMT \82³\82ñ\82Ì\8cä\8cú\88Ó\82É\82æ\82è\81ADrumMIDI \82Ì\83R\83A\8b@\94\\82ª\8bÃ\8fk\82³\82ê\82½\81uDrumMIDI.DLL\81v\82É\82æ\82é MIDI \83t\83@\83C\83\8b\82Ì\83\8a\83A\83\8b\83^\83C\83\80\95\88\96Ê\89»\82Æ\89\89\91t\82ª\89Â\94\\82É\82È\82è\82Ü\82µ\82½\81B</B><BR><BR>\r
+\8ag\92£\8eq .MID \82Ì\83t\83@\83C\83\8b\82ð MIDI\8c`\8e®\83t\83@\83C\83\8b\82Æ\8c©\82È\82µ\82Ä\89\89\91t\83f\81[\83^\82Æ\82µ\82Ä\92\8a\8fo\82µ\81ADrumMIDI \82É\82æ\82é\95\88\96Ê\89»\8f\88\97\9d\82ð\8ds\82Á\82½\8fã\81ADTXMania \82Æ DrumMIDI \82Ì\97¼\95û\82Å\8b¦\92²\89\89\91t\82ð\8ds\82¢\82Ü\82·\81B<BR><BR>\r
+MID \8c`\8e®\83t\83@\83C\83\8b\82É\82Â\82¢\82Ä\82Í\81ADrumMIDI \82Ì\95\88\96Ê\89»\8f\88\97\9d\82É Easy, Real, Raw \82Ì\82R\8eí\97Þ\82ª\82 \82é\82±\82Æ\82©\82ç\81A\83Z\83b\83g\83t\83@\83C\83\8b\81iset.def\81j\82ð\8f\80\94õ\82µ\82È\82\82Ä\82à\81A<FONT COLOR="red"><B>\8e©\93®\93I\82É [EASY REAL RAW] \82Æ\82¢\82¤\82R\8eí\97Þ\82Ì\93ï\88Õ\93x\82ª\90Ý\92è</B></FONT>\82³\82ê\82Ü\82·\81B<BR><BR>\r
+<BLOCKQUOTE>\r
+<TABLE BORDER="1" CELLPADDING="10">\r
+<TR><TD BGCOLOR="#DDFFAA">EASY<TD BGCOLOR="#DDFFDD">\8f\89\90S\8eÒ\8cü\82¯\82Ì\97D\82µ\82¢\95\88\96Ê\82É\82È\82è\82Ü\82·\81B</TR>\r
+<TR><TD BGCOLOR="#DDFFAA">REAL<TD BGCOLOR="#DDFFDD">\8fã\8b\89\8eÒ\8cü\82¯\82Ì\81A\82â\82â\93ï\82µ\82¢\95\88\96Ê\82É\82È\82è\82Ü\82·\81B\90l\8aÔ\82É\82Í\92@\82¯\82È\82¢\82æ\82¤\82È\83V\81[\83P\83\93\83X\82à\81A\92@\82¯\82é\82æ\82¤\82É\95Ï\8a·\82³\82ê\82Ü\82·\81B</TR>\r
+<TR><TD BGCOLOR="#DDFFAA">RAW<TD BGCOLOR="#DDFFDD">\83I\83\8a\83W\83i\83\8b\82ÌMID\83f\81[\83^\82Æ\93¯\82¶\95\88\96Ê\82É\82È\82è\82Ü\82·\81B\90l\8aÔ\82É\82Í\92@\82¯\82È\82¢\83V\81[\83P\83\93\83X\93\99\82à\81A\82»\82Ì\82Ü\82Ü\8ec\82è\82Ü\82·\81B</TR>\r
+</TABLE>\r
+</BLOCKQUOTE>\r
+<B>\81¦\92\8d\88Ó\81F<BR>\r
+<UL>\r
+<LI>\96{\83o\81[\83W\83\87\83\93\82É\95t\91®\82µ\82Ä\82¢\82é DrumMIDI.DLL \82Í\83f\83o\83b\83O\83o\81[\83W\83\87\83\93\82Å\82 \82é\82½\82ß\81A\8eÀ\8ds\82·\82é\82Æ log \82Æ\82¢\82¤\83t\83H\83\8b\83_\82ð\8dì\90¬\82µ\82Ä\83\8d\83O\83t\83@\83C\83\8b\82ð\8fo\97Í\82·\82é\82±\82Æ\82ª\82 \82è\82Ü\82·\81B<BR>\r
+<LI>\8f]\91®\83`\83b\83v\81A\82Q\83|\81[\83g\89\89\91t\82É\82Í\82Ü\82¾\91Î\89\9e\82µ\82Ä\82¨\82è\82Ü\82¹\82ñ(\8a¾<BR>\r
+</UL>\r
+</DL>\r
+</BLOCKQUOTE>\r
+\r
+<BR>\r
+[<A HREF="..\index.html">\96ß\82é</A>]\r
+\r
+<!-- \83t\83b\83^\81[ -->\r
+<HR SIZE="8" COLOR="green">\r
+<FONT FACE="Impact">\r
+<DIV ALIGN="right">\r
+(C) 2000-2003 FROM / K.YAMASAKI<BR>\r
+mailto: from@donburi.to<BR>\r
+</DIV>\r
+</FONT>\r
+\r
+</BODY>\r
+</HTML>\r
--- /dev/null
+<HTML>\r
+<HEAD>\r
+<TITLE>DTXMania\90à\96¾\8f\91 [MUSIC BOX \82Ì\8dì\90¬]</TITLE>\r
+</HEAD>\r
+<BODY BGCOLOR="#EEFFEE" TEXT="black" LINK="#008800" VLINK="#006600">\r
+\r
+<!-- \83w\83b\83_ -->\r
+<P>\r
+<DIV ALIGN="right"><FONT SIZE="-1" FACE="Century"><I>DTXMania User's Manual \81\</I></FONT></DIV>\r
+<TABLE BORDER="0" CELLPADDING="5" CELLSPACING="5" WIDTH="100%">\r
+<TR>\r
+<TD BGCOLOR="green" WIDTH="80%">\r
+ <FONT SIZE="+1" COLOR="white"><B><I> MUSIC BOX \82Ì\8dì\90¬</I></B></FONT>\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%">\r
+</TR>\r
+</TABLE>\r
+</P>\r
+\r
+<!-- \96{\95¶ -->\r
+\r
+<BLOCKQUOTE>\r
+<DL>\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>MUSIC BOX</B></FONT><BR><BR>\r
+<DD>Windows\82É\81u\83t\83H\83\8b\83_\81v\8aK\91w\82ª\82 \82é\82æ\82¤\82É\81ADTXMania\82Å\82Í\81u<FONT COLOR="red"><B>MUSIC BOX</B></FONT>\81v\82ð\8eg\82¤\82±\82Æ\82Å\81A\91I\8bÈ\89æ\96Ê\82Å\95\\8e¦\82³\82ê\82é\8bÈ\83\8a\83X\83g\82ð\8aK\91w\89»\82·\82é\82±\82Æ\82ª\8fo\97\88\82Ü\82·\81B<BR>\r
+<BR>\r
+\8bÈ\90\94\82ª\91½\82\82È\82è\81A\8bÈ\91I\91ð\89æ\96Ê\82Ì\83\8a\83X\83g\82ª\92·\91å\82É\82È\82Á\82Ä\82«\82½\82ç\81A\93K\93\96\82È\83W\83\83\83\93\83\8b\82É\95ª\82¯\82ÄBOX\89»\82·\82é\82±\82Æ\82ð\82¨\8a©\82ß\82µ\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>MUSIC BOX \82Ì\8dì\90¬</B></FONT><BR><BR>\r
+<DD>MUSIC BOX \82ð\8dì\90¬\82·\82é\82É\82Í\81A\81uDTXFiles\81v\83t\83H\83\8b\83_\82Ì\92\86\82É\81A\81u<FONT COLOR="red"><B><TT>DTXFiles.</TT></B></FONT>\81v\82Å\8en\82Ü\82é\83t\83H\83\8b\83_\82ð\8dì\90¬\82µ\82Ü\82·\81B<BR>\r
+<BR>\r
+<center><IMG SRC="DTXFiles.jpg"></center>\r
+<BR>\r
+\r
+</DL>\r
+</BLOCKQUOTE>\r
+\r
+<BR>\r
+[<A HREF="..\index.html">\96ß\82é</A>]\r
+\r
+<!-- \83t\83b\83^\81[ -->\r
+<HR SIZE="8" COLOR="green">\r
+<FONT FACE="Impact">\r
+<DIV ALIGN="right">\r
+(C) 2000-2003 FROM / K.YAMASAKI<BR>\r
+mailto: from@donburi.to<BR>\r
+</DIV>\r
+</FONT>\r
+\r
+</BODY>\r
+</HTML>\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
--- /dev/null
+<HTML>\r
+<HEAD>\r
+<TITLE>DTXMania\90à\96¾\8f\91 [\89\89\91t\83f\81[\83^\82Ì\92Ç\89Á\82Æ\8dí\8f\9c]</TITLE>\r
+</HEAD>\r
+<BODY BGCOLOR="#EEFFEE" TEXT="black" LINK="#008800" VLINK="#006600">\r
+\r
+<!-- \83w\83b\83_ -->\r
+<P>\r
+<DIV ALIGN="right"><FONT SIZE="-1" FACE="Century"><I>DTXMania User's Manual \81\</I></FONT></DIV>\r
+<TABLE BORDER="0" CELLPADDING="5" CELLSPACING="5" WIDTH="100%">\r
+<TR>\r
+<TD BGCOLOR="green" WIDTH="80%">\r
+ <FONT SIZE="+1" COLOR="white"><B><I> \89\89\91t\83f\81[\83^\82Ì\92Ç\89Á\82Æ\8dí\8f\9c</I></B></FONT>\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%">\r
+</TR>\r
+</TABLE>\r
+</P>\r
+\r
+<!-- \96{\95¶ -->\r
+\r
+<BLOCKQUOTE>\r
+<DL>\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\89\89\91t\83f\81[\83^\82Ì\92Ç\89Á</B></FONT><BR>\r
+<DD>DTXMania \82É\90V\82µ\82¢\89\89\91t\83f\81[\83^\82ð\92Ç\89Á\82·\82é\8fê\8d\87\82Ì\8eè\8f\87\82ð\81A\88È\89º\82É\8e¦\82µ\82Ü\82·\81B<BR>\r
+<BR>\r
+<DL>\r
+<DT><FONT COLOR="green"><B>1. \89\89\91t\83f\81[\83^\82ð\93ü\8eè\82·\82é\81B</B></FONT><BR>\r
+<DD>\93ü\8eè\82µ\82È\82¢\82±\82Æ\82É\82Í\8en\82Ü\82è\82Ü\82¹\82ñ\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="green"><B>2. \89\89\91t\83f\81[\83^\82ð\93W\8aJ\82·\82é\81B</B></FONT><BR>\r
+<DD>\82Ù\82Æ\82ñ\82Ç\82Ì\83f\81[\83^\82Í\81A\81u\81`.lzh\81v\82â\81u\81`.zip\81v\82È\82Ç\82Ì"\88³\8fk\8c`\8e®\83t\83@\83C\83\8b"\82È\82Ì\82Å\81A\82±\82ê\82ð\93W\8aJ\82·\82é\95K\97v\82ª\82 \82è\82Ü\82·\81B\81i\82½\82¢\82Ä\82¢\82Í\81A\88ê\82Â\82Ì\83t\83H\83\8b\83_\82Ì\92\86\82É\82½\82\82³\82ñ\82Ì\83t\83@\83C\83\8b\82ª\8ai\94[\82³\82ê\82é\8c`\8e®\82Å\93W\8aJ\82³\82ê\82é\82Æ\8ev\82¢\82Ü\82·\81B\81j<BR>\r
+<BR>\r
+<DT><FONT COLOR="green"><B>3. \93W\8aJ\82µ\82½\89\89\91t\83f\81[\83^\82ð\81A\81uDTXFiles\81v\83t\83H\83\8b\83_\82Ì\92\86\82É\8ai\94[\82·\82é\81B</B></FONT><BR>\r
+<DD>2.\82Å\93W\8aJ\82µ\82½\83f\81[\83^\82ð\81ADTXMania.exe \82Æ\93¯\82¶\8fê\8f\8a\82É\82 \82é\81uDTXFiles\81v\83t\83H\83\8b\83_\82Ì\92\86\82É\81A\82Ü\82é\82²\82Æ\93Ë\82Á\8d\9e\82ñ\82Å\81i\83R\83s\81[or\88Ú\93®\82µ\82Ä\81j\82\82¾\82³\82¢\81B<BR><BR>\r
+<B>\81¦\83C\83\93\83X\83g\81[\83\8b\92¼\8cã\82Í\81ADTXMania.exe \82Æ\93¯\82¶\8fê\8f\8a\82É\81uDTXFiles\81v\82Æ\82¢\82¤\83t\83H\83\8b\83_\82Í\91¶\8dÝ\82µ\82Ü\82¹\82ñ\81B\82»\82Ì\82½\82ß\81A\8e©\95ª\82Å\81uDTXFiles\81v\82Æ\82¢\82¤\96¼\91O\82Ì\83t\83H\83\8b\83_\82ð\8dì\90¬\82µ\82Ä\82â\82é\95K\97v\82ª\82 \82è\82Ü\82·\81B</B><BR>\r
+<BR>\r
+<DT><FONT COLOR="green"><B>4. DTXMania\82ð\8bN\93®\82µ\81A\91I\8bÈ\89æ\96Ê\82É\89\89\91t\83f\81[\83^\82ª\92Ç\89Á\82³\82ê\82Ä\82¢\82é\82±\82Æ\82ð\8am\94F\82·\82é\81B</B></FONT><BR>\r
+<DD>\82±\82ê\82Å\8a®\97¹\82Å\82·\81B\r
+</DL>\r
+<BR>\r
+\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\89\89\91t\83f\81[\83^\82Ì\8dí\8f\9c</B></FONT><BR>\r
+<DD>\89\89\91t\83f\81[\83^\82ð\8dí\8f\9c\82·\82é\82É\82Í\81A\89\89\91t\83f\81[\83^\88ê\8e®\82ð\82²\82Ý\94 \82É\88Ú\93®\82µ\82Ä\82µ\82Ü\82¤\82©\81A\82 \82é\82¢\82Í\81uDTXFiles\81v\83t\83H\83\8b\83_\82Ì\8aO\82É\88Ú\93®\82µ\82Ü\82·\81B<BR>\r
+<BR>\r
+\r
+</DL>\r
+</BLOCKQUOTE>\r
+\r
+<BR>\r
+[<A HREF="..\index.html">\96ß\82é</A>]\r
+\r
+<!-- \83t\83b\83^\81[ -->\r
+<HR SIZE="8" COLOR="green">\r
+<FONT FACE="Impact">\r
+<DIV ALIGN="right">\r
+(C) 2000-2003 FROM / K.YAMASAKI<BR>\r
+mailto: from@donburi.to<BR>\r
+</DIV>\r
+</FONT>\r
+\r
+</BODY>\r
+</HTML>\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
--- /dev/null
+<HTML>\r
+<HEAD>\r
+<TITLE>DTXMania\90à\96¾\8f\91 [\83Z\83b\83g\83t\83@\83C\83\8b\82Æ\93ï\88Õ\93x\90Ý\92è]</TITLE>\r
+</HEAD>\r
+<BODY BGCOLOR="#EEFFEE" TEXT="black" LINK="#008800" VLINK="#006600">\r
+\r
+<!-- \83w\83b\83_ -->\r
+<P>\r
+<DIV ALIGN="right"><FONT SIZE="-1" FACE="Century"><I>DTXMania User's Manual \81\</I></FONT></DIV>\r
+<TABLE BORDER="0" CELLPADDING="5" CELLSPACING="5" WIDTH="100%">\r
+<TR>\r
+<TD BGCOLOR="green" WIDTH="80%">\r
+ <FONT SIZE="+1" COLOR="white"><B><I> \83Z\83b\83g\83t\83@\83C\83\8b\82Æ\93ï\88Õ\93x\90Ý\92è</I></B></FONT>\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%">\r
+</TR>\r
+</TABLE>\r
+</P>\r
+\r
+<!-- \96{\95¶ -->\r
+\r
+<BLOCKQUOTE>\r
+<DL>\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\93ï\88Õ\93x\90Ý\92è\82É\82Â\82¢\82Ä</B></FONT><BR>\r
+<DD><BR>\r
+DTXMania027 \88È\8d~\82Å\82Í\81A<B>\93ï\88Õ\93x\82Ì\88á\82¤\95¡\90\94\82Ì\89\89\91t\83f\81[\83^\81i\8dÅ\91å\82R\82Â\81j\82ð\81A\8bÈ\91I\91ð\89æ\96Ê\82Å\82P\8ds\82É\82Ü\82Æ\82ß\82Ä\95\\8e¦\82·\82é\8b@\94\</B>\82ª\92Ç\89Á\82³\82ê\82Ü\82µ\82½\81B<BR>\r
+<P ALIGN="center">\r
+<IMG SRC="set_image.png"><BR>\r
+<B>\82R\82Â\82Ì\83t\83@\83C\83\8b\82ð\82P\82Â\82É\82Ü\82Æ\82ß\82é\82Ì\90}</B>\r
+</P>\r
+\82±\82Ì\82æ\82¤\82È\89\89\91t\83f\81[\83^\82É\91I\8bÈ\83J\81[\83\\83\8b\82ð\82 \82í\82¹\82é\82Æ\81A\83n\83C\83n\83b\83g\82ð\82Q\89ñ\82·\82Î\82â\82\92@\82\82±\82Æ\82Å\81A\94C\88Ó\82Ì\93ï\88Õ\93x\82ð\91I\91ð\82·\82é\82±\82Æ\82ª\8fo\97\88\82é\82æ\82¤\82É\82È\82è\82Ü\82·\81B<BR>\r
+<BR>\r
+\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\83Z\83b\83g\83t\83@\83C\83\8b\81i<TT>set.def</TT>\81j</B></FONT><BR>\r
+<DD><BR>\r
+\82±\82Ì\8b@\94\\82ð\8eg\97p\82·\82é\82É\82Í\81A<FONT COLOR="red"><B><TT>set.def</TT></B></FONT> \82Æ\82¢\82¤\83e\83L\83X\83g\83t\83@\83C\83\8b\81i\83Z\83b\83g\83t\83@\83C\83\8b\82Æ\8cÄ\82Ô\81j\82ð\8f\80\94õ\82µ\82Ü\82·\81B<BR>\r
+<BR>\r
+\r
+<CENTER>\r
+<TABLE BORDER="0" CELLPADDING="30"><TR><TD BGCOLOR="white">\r
+<TT>\r
+#TITLE: IN YOUR EYES<BR>\r
+<BR>\r
+#L1LABEL: BASIC<BR>\r
+#L1FILE: InYourEyes_bas.dtx<BR>\r
+<BR>\r
+#L2LABEL: ADVANCED<BR>\r
+#L2FILE: InYourEyes_adv.dtx<BR>\r
+<BR>\r
+#L3LABEL: EXTREME<BR>\r
+#L3FILE: InYourEyes_ext.dtx<BR>\r
+</TD></TR></TABLE>\r
+<B>\83Z\83b\83g\83t\83@\83C\83\8b\82Ì\97á</B>\r
+</CENTER>\r
+<BR>\r
+\r
+\82±\82Ì\83Z\83b\83g\83t\83@\83C\83\8b\82ð<FONT COLOR="red"><B>\89\89\91t\83f\81[\83^\81i<TT>InyourEyes_bas.dtx, InyourEyes_adv.dtx, InyourEyes_ext.dtx</TT>) \82Ì\82 \82é\83t\83H\83\8b\83_\82É\95ú\82è\8d\9e\82Þ</B></FONT>\82Æ\81A\90æ\8fq\82Ì\81u\82R\82Â\82Ì\83t\83@\83C\83\8b\82ð\82P\82Â\82É\82Ü\82Æ\82ß\82é\82Ì\90}\81v\82Ì\82æ\82¤\82É\95\\8e¦\82³\82ê\82é\82æ\82¤\82É\82È\82è\82Ü\82·\81B<BR>\r
+<BR>\r
+\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\83Z\83b\83g\83t\83@\83C\83\8b\82Ì\8f\91\8e®</B></FONT><BR>\r
+<DD><BR>\r
+<B><TT>#TITLE:</TT></B> \82É\82Í\81A\8bÈ\91I\91ð\89æ\96Ê\82Å\95\\8e¦\82³\82ê\82é\95¶\8e\9a\97ñ\82ð\8ew\92è\82µ\82Ü\82·\81B<BR><BR>\r
+<B><TT>#LxLABEL:(x=1\81`3)</TT></B> \82É\82Í\8dD\82«\82È\83\89\83x\83\8b\95¶\8e\9a\97ñ\82ð\8ew\92è\82·\82é\82±\82Æ\82ª\82Å\82«\82Ü\82·\81B\82±\82ê\82ð\8fÈ\97ª\82·\82é\82Æ\81A\82»\82ê\82¼\82ê BASIC, ADVANCE, EXTREME \82Æ\82¢\82¤\83\89\83x\83\8b\82É\82È\82è\82Ü\82·\81B\82È\82¨\81A\83\89\83x\83\8b\82Æ\82µ\82Ä\8eg\97p\82Å\82«\82é\95¶\8e\9a\97ñ\82Í\88È\89º\82Ì\82Æ\82¨\82è\82Å\82·\81B<BR><BR>\r
+<CENTER><IMG SRC="font16.png"></CENTER><BR>\r
+<B><TT>#LxFILE:(x=1\81`3)</TT></B> \82É\82Í\81A#LxLABEL \82É\91Î\89\9e\82·\82é\89\89\91t\83f\81[\83^\83t\83@\83C\83\8b\82ð\8ew\92è\82µ\82Ü\82·\81B<BR><BR>\r
+\r
+\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\95¡\90\94\82Ì\91g\82Ý\8d\87\82í\82¹\82Ì\8bL\8fq</B></FONT><BR>\r
+<DD><BR>\82P\82Â\82Ì\83Z\83b\83g\83t\83@\83C\83\8b\82É\82Í\81AL1\81`L3\82Ì\91g\82Ý\8d\87\82í\82¹\81i\83u\83\8d\83b\83N\81j\82ð\95¡\90\94\8cÂ\8bL\8fq\82·\82é\82±\82Æ\82ª\89Â\94\\82Å\82·\81B\82±\82ê\82ç\82Ì\83u\83\8d\83b\83N\82Í #TITLE \8ds\82ð\8b«\82Æ\82µ\82Ä\95ª\82¯\82ç\82ê\82Ü\82·\81B<BR>\r
+<BR>\r
+<CENTER>\r
+<TABLE BORDER="0" CELLPADDING="30"><TR><TD BGCOLOR="white">\r
+<TT>\r
+#TITLE: \82·\82Ä\82«\82È\89J\8fã\82ª\82è\81yDTX\81z<BR>\r
+<BR>\r
+#L1LABEL: BASIC<BR>\r
+#L1FILE: ameagari_basic.dtx<BR>\r
+<BR>\r
+#L2LABEL: ADVANCED<BR>\r
+#L2FILE: ameagari_adv.dtx<BR>\r
+<BR>\r
+#L3LABEL: EXTREME<BR>\r
+#L3FILE: ameagari_ext.dtx<BR>\r
+<BR>\r
+#TITLE: \82·\82Ä\82«\82È\89J\8fã\82ª\82è\81yGDA\81z<BR>\r
+<BR>\r
+#L1LABEL: BASIC<BR>\r
+#L1FILE: ameagari_basic.gda<BR>\r
+<BR>\r
+#L2LABEL: ADVANCED<BR>\r
+#L2FILE: ameagari_adv.gda<BR>\r
+<BR>\r
+#L3LABEL: EXTREME<BR>\r
+#L3FILE: ameagari_ext.gda<BR>\r
+</TD></TR></TABLE>\r
+<B>\95¡\90\94\83u\83\8d\83b\83N\82Ì\8bL\8fq\97á</B>\r
+</CENTER>\r
+<BR>\r
+\82±\82Ì\8fê\8d\87\81A\82»\82ê\82¼\82ê\82R\82Â\82Ì\93ï\88Õ\93x\82ð\8e\9d\82Â\81u\82·\82Ä\82«\82È\89J\8fã\82ª\82è\81yDTX\81z\81v\82Æ\81u\82·\82Ä\82«\82È\89J\8fã\82ª\82è\81yGDA\81z\81v\82Æ\82¢\82¤\82Q\82Â\82Ì\8ds\82ª\8bÈ\83\8a\83X\83g\82É\8dÚ\82é\82±\82Æ\82É\82È\82è\82Ü\82·\81B\81iset.def\82ð\82Q\82Â\8dì\90¬\82µ\82æ\82¤\82È\8a´\82¶\81B\81j<BR>\r
+<BR>\r
+\82P\82Â\82Ì set.def \82É\8bL\8fq\82Å\82«\82é\83u\83\8d\83b\83N\82Ì\90\94\82É\90§\8cÀ\82Í\82 \82è\82Ü\82¹\82ñ\81B<BR>\r
+<BR>\r
+\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\83Z\83b\83g\83t\83@\83C\83\8b\97\98\97p\82Ì\8dÛ\82Ì\92\8d\88Ó\81I</B></FONT><BR>\r
+<DD><BR>\r
+<UL>\r
+<LI>\83Z\83b\83g\83t\83@\83C\83\8b\82ª\82 \82é\83t\83H\83\8b\83_\82Å\82Í\81A\83Z\83b\83g\83t\83@\83C\83\8b\82É\8bL\8fq\82³\82ê\82Ä\82¢\82È\82¢\89\89\91t\83f\81[\83^\83t\83@\83C\83\8b\82Í\81A\83t\83H\83\8b\83_\93à\82É\91¶\8dÝ\82µ\82Ä\82¢\82Ä\82à\82·\82×\82Ä\96³\8e\8b\82³\82ê\82Ü\82·\81B<BR>\r
+<LI>\95K\82¸\82µ\82à L1 \82©\82ç\8ew\92è\82·\82é\95K\97v\82Í\82È\82\81AL2 \82Æ L3 \82¾\82¯\82Ì\8ew\92è\82Æ\82¢\82¤\90Ý\92è\82à\89Â\94\\82Å\82·\81B<BR>\r
+<LI>GDA \82Æ BMS \82Ì\82æ\82¤\82É\88Ù\82È\82é\83f\81[\83^\82ð\82P\82Â\82Ì\83Z\83b\83g\83t\83@\83C\83\8b\82Æ\82µ\82Ä\82Ü\82Æ\82ß\82é\82±\82Æ\82à\89Â\94\\82Å\82·\82ª\81A\95\\8e¦\8fã\82Í #L1FILE \82Å\8ew\92è\82³\82ê\82½\83t\83@\83C\83\8b\82Ì\83f\81[\83^\83^\83C\83v\82Æ\82µ\82Ä\88µ\82í\82ê\82Ü\82·\81B<BR>\r
+<LI>\8eÀ\91\95\82ª\95s\8f\\95ª\82Å\82 \82è\81A\8d¡\8cã\8ed\97l\95Ï\8dX\82Ì\8b°\82ê\82ª\82 \82è\82Ü\82·\81B\81i\8a¾<BR>\r
+<LI>#L1LABEL \82ð #L1LEVEL \82Æ\82©\8f\91\82¢\82Ä\82µ\82Ü\82¤\83~\83X\82É\82²\92\8d\88Ó\81I\81i\8co\8c±\92k<TT>(^^;;;;;;</TT></BR>\r
+</UL>\r
+\r
+</DL>\r
+</BLOCKQUOTE>\r
+\r
+<BR>\r
+[<A HREF="..\index.html">\96ß\82é</A>]\r
+\r
+<!-- \83t\83b\83^\81[ -->\r
+<HR SIZE="8" COLOR="green">\r
+<FONT FACE="Impact">\r
+<DIV ALIGN="right">\r
+(C) 2000-2003 FROM / K.YAMASAKI<BR>\r
+mailto: from@donburi.to<BR>\r
+</DIV>\r
+</FONT>\r
+\r
+</BODY>\r
+</HTML>\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
--- /dev/null
+<HTML>\r
+<HEAD>\r
+<TITLE>DTXMania\90à\96¾\8f\91 [\8aJ\94\83X\83^\83b\83t]</TITLE>\r
+</HEAD>\r
+<BODY BGCOLOR="#EEFFEE" TEXT="black" LINK="#008800" VLINK="#006600">\r
+\r
+<!-- \83w\83b\83_ -->\r
+<P>\r
+<DIV ALIGN="right"><FONT SIZE="-1" FACE="Century"><I>DTXMania User's Manual \81\</I></FONT></DIV>\r
+<TABLE BORDER="0" CELLPADDING="5" CELLSPACING="5" WIDTH="100%">\r
+<TR>\r
+<TD BGCOLOR="green" WIDTH="80%">\r
+ <FONT SIZE="+1" COLOR="white"><B><I> \8aJ\94\83X\83^\83b\83t</I></B></FONT>\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%">\r
+</TR>\r
+</TABLE>\r
+</P>\r
+\r
+<!-- \96{\95¶ -->\r
+\r
+<P>\81¡ DTXMania \8aJ\94\83X\83^\83b\83t</P>\r
+\r
+<BLOCKQUOTE>\r
+<TABLE BORDER="1" CELLSPACING="0" CELLPADDING="10">\r
+<TR><TD>\83v\83\8d\83O\83\89\83\80\81A\83T\83E\83\93\83h<TD>\82e\82q\82n\82l</TR>\r
+<TR><TD>\83O\83\89\83t\83B\83b\83N<TD>\82Ì\82è\82³\82ñ (thanx!) <BR>\89ä\89¤\82³\82ñ (thanx!) <BR>FROM</TR>\r
+<TR><TD>\83f\83o\83b\83O<TD>DTXMania\8cf\8e¦\94Â\82Ì\8aF\82³\82ñ<TT>(^^;</TT></TR>\r
+</TABLE>\r
+</BLOCKQUOTE>\r
+\r
+<BR>\r
+[<A HREF="..\index.html">\96ß\82é</A>]\r
+\r
+<!-- \83t\83b\83^\81[ -->\r
+<HR SIZE="8" COLOR="green">\r
+<FONT FACE="Impact">\r
+<DIV ALIGN="right">\r
+(C) 2000-2003 FROM / K.YAMASAKI<BR>\r
+mailto: from@donburi.to<BR>\r
+</DIV>\r
+</FONT>\r
+\r
+</BODY>\r
+</HTML>\r
--- /dev/null
+<HTML>\r
+<HEAD>\r
+<TITLE>DTXMania\90à\96¾\8f\91 [\83T\83|\81[\83g\82Æ\98A\97\8d\90æ]</TITLE>\r
+</HEAD>\r
+<BODY BGCOLOR="#EEFFEE" TEXT="black" LINK="#008800" VLINK="#006600">\r
+\r
+<!-- \83w\83b\83_ -->\r
+<P>\r
+<DIV ALIGN="right"><FONT SIZE="-1" FACE="Century"><I>DTXMania User's Manual \81\</I></FONT></DIV>\r
+<TABLE BORDER="0" CELLPADDING="5" CELLSPACING="5" WIDTH="100%">\r
+<TR>\r
+<TD BGCOLOR="green" WIDTH="80%">\r
+ <FONT SIZE="+1" COLOR="white"><B><I> \83T\83|\81[\83g\82Æ\98A\97\8d\90æ</I></B></FONT>\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%">\r
+</TR>\r
+</TABLE>\r
+</P>\r
+\r
+<!-- \96{\95¶ -->\r
+\r
+<BLOCKQUOTE>\r
+\r
+<P><IMG SRC="ball_y.gif"> DTXMania \82Í\83t\83\8a\81[\83E\83F\83A\82Å\82·\81B\96{\83\\83t\83g\83E\83F\83A\82Ì\8eg\97p\82É\82æ\82é\8cÌ\8fá\82»\82Ì\91¼\82 \82ç\82ä\82é\92¼\90Ú\93I\8by\82Ñ\8aÔ\90Ú\93I\94í\8aQ\82É\8aÖ\82µ\82Ä\88ê\90Ø\82Ì\90Ó\94C\82ð\95\89\82¢\82Ü\82¹\82ñ\81B</P>\r
+\r
+<P><IMG SRC="ball_y.gif"> DTXMania \82Ì\83T\83|\81[\83g\82Í\81ADTXMania \83z\81[\83\80\83y\81[\83W\82Ì\8cf\8e¦\94Â\82É\82Ä\8ds\82È\82¢\82Ü\82·\81B\82Ü\82½\81A\83\81\81[\83\8b\82É\82æ\82é\83T\83|\81[\83g\82à\8ds\82È\82Á\82Ä\82¨\82è\82Ü\82·\82Ì\82Å\89\93\97¶\82È\82\82²\98A\97\8d\89º\82³\82¢\81B<BR>\r
+\r
+<BR>\r
+<BLOCKQUOTE>\r
+<DL>\r
+<DT><B>\83z\81[\83\80\83y\81[\83W</B>\r
+<DD>DTXMania powered by YAMAHA DTX / DTXPRESS / DTXTREME<BR>\r
+ <A HREF="http://www.donburi.to/~from/dtxmania/">http://www.donburi.to/~from/dtxmania/</A><BR><BR>\r
+<DT><B>\83\81\81[\83\8b\83A\83h\83\8c\83X</B>\r
+<DD>FROM / \8eR\8dè \8c°\8e¡ <<A HREF="mailto:from@donburi.to">from@donburi.to</A>>\r
+</DL>\r
+</BLOCKQUOTE>\r
+</P>\r
+\r
+<P><IMG SRC="ball_y.gif"> \8a´\91z\81A\97v\96]\81A\95s\8bï\8d\87\95ñ\8d\90\93\99\81A\82¨\91Ò\82¿\82µ\82Ä\82¨\82è\82Ü\82·\81B</P>\r
+\r
+<P><IMG SRC="ball_y.gif"> \95s\8bï\8d\87\82Ì\95ñ\8d\90\8e\9e\82É\82Í\81A\82¨\8eg\82¢\82Ì\83p\83\\83R\83\93\82Ì\88È\89º\82Ì\8fî\95ñ\82ð\8b³\82¦\82Ä\82\82¾\82³\82é\82Æ\83T\83|\81[\83g\82ª\97e\88Õ\82É\82È\82è\82Ü\82·\81B<BR>\r
+<BR>\r
+<UL>\r
+<LI>\8b@\8eí\96¼\81i\97á\81F\81uSONY PCG-FX55V\81v\82È\82Ç\81G\8e©\8dì\83p\83\\83R\83\93\82È\82ç\95s\97v\81j\r
+<LI>\83O\83\89\83t\83B\83b\83N\83J\81[\83h\82Ì\96¼\91O\82Æ\97e\97Ê\81i\97á\81F\81uGeForce2MX 32MB\81v\82È\82Ç\81j\r
+<LI>\83T\83E\83\93\83h\83J\81[\83h\96¼\81i\97á\81F\81uSoundBlasterLive!\81v\82È\82Ç\81j\r
+<LI>\83\81\83\82\83\8a\97e\97Ê\81i\97á\81F\81u128MB\81v\82È\82Ç\81j\r
+</UL>\r
+</P>\r
+\r
+</BLOCKQUOTE>\r
+\r
+<BR>\r
+[<A HREF="..\index.html">\96ß\82é</A>]\r
+\r
+<!-- \83t\83b\83^\81[ -->\r
+<HR SIZE="8" COLOR="green">\r
+<FONT FACE="Impact">\r
+<DIV ALIGN="right">\r
+(C) 2000-2003 FROM / K.YAMASAKI<BR>\r
+mailto: from@donburi.to<BR>\r
+</DIV>\r
+</FONT>\r
+\r
+</BODY>\r
+</HTML>\r
--- /dev/null
+<HTML>\r
+<HEAD>\r
+<TITLE>DTXMania\90à\96¾\8f\91 [\8eÓ\8e«]</TITLE>\r
+</HEAD>\r
+<BODY BGCOLOR="#EEFFEE" TEXT="black" LINK="#008800" VLINK="#006600">\r
+\r
+<!-- \83w\83b\83_ -->\r
+<P>\r
+<DIV ALIGN="right"><FONT SIZE="-1" FACE="Century"><I>DTXMania User's Manual \81\</I></FONT></DIV>\r
+<TABLE BORDER="0" CELLPADDING="5" CELLSPACING="5" WIDTH="100%">\r
+<TR>\r
+<TD BGCOLOR="green" WIDTH="80%">\r
+ <FONT SIZE="+1" COLOR="white"><B><I> \8eÓ\8e«</I></B></FONT>\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%">\r
+</TR>\r
+</TABLE>\r
+</P>\r
+\r
+<!-- \96{\95¶ -->\r
+\r
+<BLOCKQUOTE>\r
+<IMG SRC="ball_y.gif"> \96{\83\\83t\83g\82Ì\8dì\90¬\82É\93\96\82½\82è\81A\88È\89º\82Ì\83\\83t\83g\83E\83F\83A\82ð\8eg\82í\82¹\82Ä\92¸\82«\82Ü\82µ\82½\81B\8ae\83\\83t\83g\82Ì\8dì\8eÒ\97l\82É\90[\82\8a´\8eÓ\82¢\82½\82µ\82Ü\82·\81B<BR>\r
+<BR>\r
+<DL>\r
+<DT><FONT COLOR="red"><I>XA\83f\83R\81[\83h\83\89\83C\83u\83\89\83\8a xadec.dll / S.Nakamoto\8e\81</I></FONT><BR>\r
+<DD>XA\8c`\8e®\89¹\90º\83t\83@\83C\83\8b\82ðWAV\8c`\8e®\82É\83f\83R\81[\83h\82·\82é\82½\82ß\82Ì\83C\83\93\83^\81[\83t\83F\83C\83X\82ð\92ñ\8b\9f\82µ\82Ä\82\82ê\82é\83\89\83C\83u\83\89\83\8a\82Å\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="red"><I>DrumMIDI.DLL / MMT\8e\81</I></FONT><BR>\r
+<DD>\95W\8f\80MIDI\8c`\8e®\81i\8ag\92£\8eq.mid\81j\82Ì\89\89\91t\83t\83@\83C\83\8b\82ð DTXMania \82É\93Ç\82Ý\8d\9e\82Ü\82¹\82é\8b@\94\\82Ì\82Ù\82©\81AMIDI\8eü\82è\82Ì\97l\81X\82È\83C\83\93\83^\81[\83t\83F\83C\83X\82ð\92ñ\8b\9f\82µ\82Ü\82·\81B\8dÅ\90V\94Å\82Å\82Í B.A.S.S.\8ed\97l\82ð\83T\83|\81[\83g\82µ\81A\82±\82ê\82É\91Î\89\9e\82µ\82½\89\89\91t\83\\83t\83g\81iKeyboardMIDI\81ADrumMIDI\82È\82Ç\81j\82Æ\82Ì\83Z\83b\83V\83\87\83\93\83v\83\8c\83C\82ð\89Â\94\\82É\82µ\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="red"><I>Dib library / O.Mizuno\8e\81</I></FONT><BR>\r
+<DD>JPEG\82ÆPNG\82ð\93Ç\82Ý\8d\9e\82Þ\82½\82ß\82ÌDLL\82ð\97¬\97p\82³\82¹\82Ä\92¸\82«\82Ü\82µ\82½\81B\82Ç\82¿\82ç\82àDIB\8c`\8e®\82É\95Ï\8a·\82µ\82Ä\95Ô\82µ\82Ä\82\82ê\82é\82Ì\82Å\81AJPEG\82âPNG\82Ì\92m\8e¯\82ª\82È\82\82Ä\82à\8eg\97p\82Å\82«\82é\82Æ\82¢\82¤\82·\82Î\82ç\82µ\82¢\83\89\83C\83u\83\89\83\8a\82Å\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="red"><I>\82Ö\82é\82Õ\83}\83V\83\93 \81`HTML Help Designer\81` / \82¤\82È\8e\81</I></FONT><BR>\r
+<DD>\82±\82Ì\83w\83\8b\83v\83t\83@\83C\83\8b\82ð\8dì\90¬\82·\82é\82½\82ß\82É\8eg\97p\82³\82¹\82Ä\92¸\82«\82Ü\82µ\82½\81B<BR>\r
+<BR>\r
+\r
+</DL>\r
+</BLOCKQUOTE>\r
+\r
+<BR>\r
+[<A HREF="..\index.html">\96ß\82é</A>]\r
+\r
+<!-- \83t\83b\83^\81[ -->\r
+<HR SIZE="8" COLOR="green">\r
+<FONT FACE="Impact">\r
+<DIV ALIGN="right">\r
+(C) 2000-2003 FROM / K.YAMASAKI<BR>\r
+mailto: from@donburi.to<BR>\r
+</DIV>\r
+</FONT>\r
+\r
+</BODY>\r
+</HTML>\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
--- /dev/null
+<HTML>\r
+<HEAD>\r
+<TITLE>DTXMania\90à\96¾\8f\91</TITLE>\r
+</HEAD>\r
+<BODY BGCOLOR="#EEFFEE" TEXT="black" LINK="#008800" VLINK="#006600">\r
+\r
+<!-- \83^\83C\83g\83\8b\81@-->\r
+<P ALIGN="center">\r
+<IMG SRC="dtx_l.gif" ALIGN="top"><BR><BR>\r
+<FONT SIZE="+3" FACE="Arial Black" COLOR="#00AA44">\r
+<B>DTXMania USER'S MANUAL</B><BR>\r
+</FONT>\r
+</P>\r
+\r
+<!-- Index \83o\81[ -->\r
+<P>\r
+<TABLE BORDER="0" CELLPADDING="5" CELLSPACING="5" WIDTH="100%">\r
+<TR>\r
+<TD BGCOLOR="green"><FONT SIZE="+1" COLOR="white"><B><I> Index</I></B></FONT>\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%">\r
+</TR>\r
+</TABLE>\r
+</P>\r
+\r
+<!-- \96Ú\8e\9f -->\r
+\r
+<BLOCKQUOTE>\r
+\r
+<P><FONT SIZE="+2"><B>1. \83C\83\93\83g\83\8d\83_\83N\83V\83\87\83\93</B></FONT><P>\r
+<BLOCKQUOTE>\r
+<FONT SIZE="+1"><IMG SRC="ball_y.gif"><B>\81@<A HREF="1.\83C\83\93\83g\83\8d\83_\83N\83V\83\87\83\93\hajimeni.html">\82Í\82¶\82ß\82É</A></B></FONT><BR>\r
+<FONT SIZE="+1"><IMG SRC="ball_y.gif"><B>\81@<A HREF="1.\83C\83\93\83g\83\8d\83_\83N\83V\83\87\83\93\dousa_kankyou.html">\93®\8dì\8aÂ\8b«</A></B></FONT><BR>\r
+<FONT SIZE="+1"><IMG SRC="ball_y.gif"><B>\81@<A HREF="1.\83C\83\93\83g\83\8d\83_\83N\83V\83\87\83\93\install.html">\83C\83\93\83X\83g\81[\83\8b/\83A\83\93\83C\83\93\83X\83g\81[\83\8b</A></B></FONT><BR>\r
+</BLOCKQUOTE>\r
+<BR>\r
+<P><FONT SIZE="+2"><B>2. \97V\82Ñ\82©\82½</B></FONT><P>\r
+<BLOCKQUOTE>\r
+<FONT SIZE="+1"><IMG SRC="ball_y.gif"><B>\81@<A HREF="2.\97V\82Ñ\95û\kihon_sousa.html">\8aî\96{\91\80\8dì</A></B></FONT><BR>\r
+<FONT SIZE="+1"><IMG SRC="ball_y.gif"><B>\81@<A HREF="2.\97V\82Ñ\95û\title.html">\83^\83C\83g\83\8b\89æ\96Ê\82Ì\91\80\8dì</A></B></FONT><BR>\r
+<FONT SIZE="+1"><IMG SRC="ball_y.gif"><B>\81@<A HREF="2.\97V\82Ñ\95û\option.html">\83I\83v\83V\83\87\83\93\81i\83Q\81[\83\80\90Ý\92è\81j\89æ\96Ê\82Ì\91\80\8dì</A></B></FONT><BR>\r
+<FONT SIZE="+1"><IMG SRC="ball_y.gif"><B>\81@<A HREF="2.\97V\82Ñ\95û\config.html">\83R\83\93\83t\83B\83O\81i\83V\83X\83e\83\80\90Ý\92è\81j\89æ\96Ê\82Ì\91\80\8dì</A></B></FONT><BR>\r
+<FONT SIZE="+1"><IMG SRC="ball_y.gif"><B>\81@<A HREF="2.\97V\82Ñ\95û\senkyoku.html">\91I\8bÈ\89æ\96Ê\82Ì\91\80\8dì</A></B></FONT><BR>\r
+<FONT SIZE="+1"><IMG SRC="ball_y.gif"><B>\81@<A HREF="2.\97V\82Ñ\95û\ensou.html">\89\89\91t\89æ\96Ê\82Ì\91\80\8dì</A></B></FONT><BR>\r
+<FONT SIZE="+1"><IMG SRC="ball_y.gif"><B>\81@<A HREF="2.\97V\82Ñ\95û\kekka.html">\8c\8b\89Ê\95\\8e¦\89æ\96Ê\82Ì\91\80\8dì</A></B></FONT><BR>\r
+</BLOCKQUOTE>\r
+<BR>\r
+<P><FONT SIZE="+2"><B>3. \90Ý\92è</B></FONT><P>\r
+<BLOCKQUOTE>\r
+<FONT SIZE="+1"><IMG SRC="ball_y.gif"><B>\81@<A HREF="3.\90Ý\92è\config2.html">\83R\83\93\83t\83B\83O\83\8c\81[\83V\83\87\83\93(DTXMania.ini)</A></B></FONT><BR>\r
+<FONT SIZE="+1"><IMG SRC="ball_y.gif"><B>\81@<A HREF="3.\90Ý\92è\keybind.html">\83f\83t\83H\83\8b\83g\82Ì\83L\81[\8a\84\82è\93\96\82Ä</A></B></FONT><BR>\r
+</BLOCKQUOTE>\r
+<BR>\r
+<P><FONT SIZE="+2"><B>4. \89\89\91t\83f\81[\83^\82Ì\8aÇ\97\9d</B></FONT><P>\r
+<BLOCKQUOTE>\r
+<FONT SIZE="+1"><IMG SRC="ball_y.gif"><B>\81@<A HREF="4.\89\89\91t\83f\81[\83^\82Ì\8aÇ\97\9d\data.html">\89\89\91t\82Å\82«\82é\83f\81[\83^</A></B></FONT><BR>\r
+<FONT SIZE="+1"><IMG SRC="ball_y.gif"><B>\81@<A HREF="4.\89\89\91t\83f\81[\83^\82Ì\8aÇ\97\9d\data_tuika_sakujo.html">\89\89\91t\83f\81[\83^\82Ì\92Ç\89Á\82Æ\8dí\8f\9c</A></B></FONT><BR>\r
+<FONT SIZE="+1"><IMG SRC="ball_y.gif"><B>\81@<A HREF="4.\89\89\91t\83f\81[\83^\82Ì\8aÇ\97\9d\data_box.html">MUSIC BOX \82Ì\8dì\90¬</A></B></FONT><BR>\r
+<FONT SIZE="+1"><IMG SRC="ball_y.gif"><B>\81@<A HREF="4.\89\89\91t\83f\81[\83^\82Ì\8aÇ\97\9d\setdef.html">\83Z\83b\83g\83t\83@\83C\83\8b\82Æ\93ï\88Õ\93x\90Ý\92è</A></B></FONT><BR>\r
+</BLOCKQUOTE>\r
+<BR>\r
+<P><FONT SIZE="+2"><B>5. \8dÅ\8cã\82É</B></FONT><P>\r
+<BLOCKQUOTE>\r
+<FONT SIZE="+1"><IMG SRC="ball_y.gif"><B>\81@<A HREF="5.\8dÅ\8cã\82É\support.html">\83T\83|\81[\83g\82Æ\98A\97\8d\90æ</A></B></FONT><BR>\r
+<FONT SIZE="+1"><IMG SRC="ball_y.gif"><B>\81@<A HREF="5.\8dÅ\8cã\82É\staff.html">\8aJ\94\83X\83^\83b\83t</A></B></FONT><BR>\r
+<FONT SIZE="+1"><IMG SRC="ball_y.gif"><B>\81@<A HREF="5.\8dÅ\8cã\82É\syaji.html">\8eÓ\8e«</A></B></FONT><BR>\r
+</BLOCKQUOTE>\r
+<BR>\r
+<P><FONT SIZE="+2"><B>\95t\98^</B></FONT><P>\r
+<BLOCKQUOTE>\r
+<FONT SIZE="+1"><IMG SRC="ball_y.gif"><B>\81@<A HREF="\95t\98^\dtx_spec.html">DTX\83t\83@\83C\83\8b\83t\83H\81[\83}\83b\83g</A></B></FONT><BR>\r
+</BLOCKQUOTE>\r
+\r
+</BLOCKQUOTE>\r
+\r
+<!-- \83t\83b\83^\81[ -->\r
+<HR SIZE="8" COLOR="green">\r
+<FONT FACE="Impact">\r
+<DIV ALIGN="right">\r
+(C) 2000-2003 FROM / K.YAMASAKI<BR>\r
+mailto: from@donburi.to<BR>\r
+</DIV>\r
+</FONT>\r
+\r
+</BODY>\r
+</HTML>\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
--- /dev/null
+<HTML>\r
+<HEAD>\r
+<TITLE>DTXMania\90à\96¾\8f\91 [DTX\83t\83@\83C\83\8b\83t\83H\81[\83}\83b\83g]</TITLE>\r
+</HEAD>\r
+<BODY BGCOLOR="#EEFFEE" TEXT="black" LINK="#008800" VLINK="#006600">\r
+\r
+<!-- \83w\83b\83_ -->\r
+<P>\r
+<DIV ALIGN="right"><FONT SIZE="-1" FACE="Century"><I>DTXMania User's Manual \81\</I></FONT></DIV>\r
+<TABLE BORDER="0" CELLPADDING="5" CELLSPACING="5" WIDTH="100%">\r
+<TR>\r
+<TD BGCOLOR="green" WIDTH="80%">\r
+ <FONT SIZE="+1" COLOR="white"><B><I> DTX\83t\83@\83C\83\8b\83t\83H\81[\83}\83b\83g</I></B></FONT>\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%"><TD BGCOLOR="green" WIDTH="2%">\r
+<TD BGCOLOR="green" WIDTH="2%">\r
+</TR>\r
+</TABLE>\r
+</P>\r
+\r
+<!-- \96{\95¶ -->\r
+\r
+<BLOCKQUOTE>\r
+<DL>\r
+<DT><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\8aî\96{\8d\\91¢</B></FONT><BR>\r
+<DD><BR>\r
+DTX\83t\83@\83C\83\8b\81i\8ag\92£\8eq <TT>.DTX</TT> \81j\82Í\81A\81u\83w\83b\83_\8bL\8fq\81v\82Æ\81u\83I\83u\83W\83F\83N\83g\8bL\8fq\81v\82©\82ç\82È\82é\83e\83L\83X\83g\83t\83@\83C\83\8b\82Å\82·\81B<BR>\r
+<BR>\r
+<TABLE BORDER="1" CELLPADDING="10" CELLSPACING="0">\r
+<TR><TD BGCOLOR="#DDFFDD"><B>\83w\83b\83_\8bL\8fq</B><TD BGCOLOR="#DDFFDD">\8bÈ\91S\91Ì\82É\8aÖ\82·\82é\8fî\95ñ\81i\83^\83C\83g\83\8b\82â\8eg\97p\82·\82é\89¹\90º\83t\83@\83C\83\8b\82È\82Ç\81j\82ð\92è\8b`\82·\82é\8ds\82Å\82·\81B</TR>\r
+<TR><TD BGCOLOR="#DDFFDD"><B>\83I\83u\83W\83F\83N\83g\8bL\8fq</B><TD BGCOLOR="#DDFFDD">\95\88\96Ê\82É\8aÖ\82·\82é\8fî\95ñ\81i\82Ç\82Ì\83`\83b\83v\82ð\82Ç\82±\82É\94z\92u\82µ\82Ä\82Ç\82Ì\89¹\82ð\96Â\82ç\82·\82©\81j\82ð\92è\8b`\82·\82é\8ds\82Å\82·\81B<B>\83`\83\83\83\93\83l\83\8b</B>\82ð\8eg\82Á\82Ä\83I\83u\83W\83F\83N\83g\82Ì\8b@\94\\82ð\8ew\92è\82µ\82Ü\82·\81B</TR>\r
+</TABLE>\r
+<P ALIGN="center">\r
+<IMG SRC="dtx_ex.png"><BR>\r
+<B>DTX\83t\83@\83C\83\8b\82Ì\8bL\8fq\97á</B>\r
+</P>\r
+\r
+<P>\8aî\96{\93I\82É\81ADTX\83t\83@\83C\83\8b\82Ì\8f\91\8e®\82ÍBMS\82É\8f\80\8b\92\82µ\82Ä\82¢\82Ü\82·\81B\82µ\82©\82µ\81ABMS\82Ì\82·\82×\82Ä\82Ì\8b@\94\\82ð\8eÀ\8c»\82µ\82Ä\82¢\82é\82í\82¯\82Å\82à\82È\82\81A\82Ü\82½\93Æ\8e©\82Ì\8ag\92£\82ð\8e{\82µ\82Ä\82¢\82é\82±\82Æ\82à\82 \82è\81ADTXMania \97p\82Ì\89\89\91t\83f\81[\83^\82ª\91¼\82ÌBMS\83v\83\8c\83C\83\84\81[\82Å\90³\8fí\82É\89\89\91t\82Å\82«\82é\82Æ\82¢\82¤\95Û\8fØ\82Í\82 \82è\82Ü\82¹\82ñ\81B\82 \82ç\82©\82¶\82ß\82²\97¹\8f³\89º\82³\82¢\81B</P>\r
+\r
+<P>\96¢\91Î\89\9e\82Ì\83w\83b\83_\82â '#' \82Å\8en\82Ü\82ç\82È\82¢\8ds\82Í\96³\8e\8b\82µ\82Ü\82·\81B\82Ü\82½\81A\8ds\92\86\82É ';' \82ª\8c»\82ê\82½\8fê\8d\87\82Í\81A\82»\82ê\88È\8d~\8ds\96\96\82Ü\82Å\82ð\83R\83\81\83\93\83g\82Æ\8c©\82È\82µ\96³\8e\8b\82µ\82Ü\82·\81B</P>\r
+</DL>\r
+\r
+<P><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\83w\83b\83_\8bL\8fq</B></FONT></P>\r
+<DL>\r
+<DT><FONT COLOR="green"><TT>#TITLE: <\8bÈ\82Ì\83^\83C\83g\83\8b></TT></FONT>\r
+<DD>\89\89\91t\83f\81[\83^\82Ì\83^\83C\83g\83\8b\82ð\8bL\8fq\82µ\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="green"><TT>#ARTIST: <\83A\81[\83e\83B\83X\83g\96¼></TT></FONT>\r
+<DD>\89\89\91t\83f\81[\83^\82Ì\83A\81[\83e\83B\83X\83g\96¼\82ð\8bL\8fq\82µ\82Ü\82·\81B\83A\81[\83e\83B\83X\83g\96¼\82Í\81A\8bÈ\91I\91ð\89æ\96Ê\82Å\91I\91ð\82³\82ê\82½\8bÈ\82Ì\83^\83C\83g\83\8b\82Ì\89º\82É\95\\8e¦\82³\82ê\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="green"><TT>#COMMENT: <\83R\83\81\83\93\83g></TT></FONT>\r
+<DD>\89\89\91t\83f\81[\83^\82É\91Î\82·\82é\83R\83\81\83\93\83g\82ð\8bL\8fq\82µ\82Ü\82·\81B\83R\83\81\83\93\83g\82Í\81A\8bÈ\91I\91ð\89æ\96Ê\82Å\81A\91I\91ð\82³\82ê\82½\8bÈ\82Ì\83^\83C\83g\83\8b\82Ì\89º\81i\83A\81[\83e\83B\83X\83g\96¼\82Ì\82à\82Ð\82Æ\82Â\89º\81j\82É\95\\8e¦\82³\82ê\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="green"><TT>#PANEL: <\83p\83l\83\8b\83R\83\81\83\93\83g></TT></FONT>\r
+<DD>BGA\97Ì\88æ\89º\95\94\82Ì\83p\83l\83\8b\83G\83\8a\83A\82É\95\\8e¦\82·\82é\83R\83\81\83\93\83g\82ð\8bL\8fq\82µ\82Ü\82·(DTXMania027\88È\8d~)\81B#PANEL: \82ª\82È\82¢\8fê\8d\87\82Í\81A\83p\83l\83\8b\83G\83\8a\83A\82É\82Í #TITLE \82Ì\93à\97e\82ª\95\\8e¦\82³\82ê\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="green"><TT>#DLEVEL: <\83\8c\83x\83\8b></TT></FONT>\r
+<DD>\83h\83\89\83\80\82Ì\93ï\88Õ\93x\82ð\81A1(\88Õ\82µ\82¢)\81`100(\93ï\82µ\82¢)\82Å\8e¦\82µ\82Ü\82·\81B\82½\82¾\82µ\81A10\88È\89º\82Ì\90\94\92l\82ð\8ew\92è\82µ\82½\8fê\8d\87\82Í\8e©\93®\93I\82É10\92i\8aK\8ew\92è\81i1\81`10\81j\82Æ\8c©\82È\82µ\81A\92l\82ð10\94{\82µ\82Ä\8eg\97p\82µ\82Ü\82·(10\81`100\82É\82È\82é)\81B\82Ü\82½\81AG2D \83f\81[\83^\82Ì\8fê\8d\87\82Í10\88È\89º\82Ì\92l\82Å\82 \82Á\82Ä\82à\8fí\82É100\92i\8aK\82Æ\8c©\82È\82³\82ê\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="green"><TT>#GLEVEL: <\83\8c\83x\83\8b></TT></FONT>\r
+<DD>\83M\83^\81[\82Ì\93ï\88Õ\93x\82ð\81A1(\88Õ\82µ\82¢)\81`100(\93ï\82µ\82¢)\82Å\8e¦\82µ\82Ü\82·\81B\82½\82¾\82µ\81A10\88È\89º\82Ì\90\94\92l\82ð\8ew\92è\82µ\82½\8fê\8d\87\82Í\8e©\93®\93I\82É10\92i\8aK\8ew\92è\81i1\81`10\81j\82Æ\8c©\82È\82µ\81A\92l\82ð10\94{\82µ\82Ä\8eg\97p\82µ\82Ü\82·(10\81`100\82É\82È\82é)\81B\82Ü\82½\81AG2D \83f\81[\83^\82Ì\8fê\8d\87\82Í10\88È\89º\82Ì\92l\82Å\82 \82Á\82Ä\82à\8fí\82É100\92i\8aK\82Æ\8c©\82È\82³\82ê\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="green"><TT>#BLEVEL: <\83\8c\83x\83\8b></TT></FONT>\r
+<DD>\83x\81[\83X\82Ì\93ï\88Õ\93x\82ð\81A1(\88Õ\82µ\82¢)\81`100(\93ï\82µ\82¢)\82Å\8e¦\82µ\82Ü\82·\81B\82½\82¾\82µ\81A10\88È\89º\82Ì\90\94\92l\82ð\8ew\92è\82µ\82½\8fê\8d\87\82Í\8e©\93®\93I\82É10\92i\8aK\8ew\92è\81i1\81`10\81j\82Æ\8c©\82È\82µ\81A\92l\82ð10\94{\82µ\82Ä\8eg\97p\82µ\82Ü\82·(10\81`100\82É\82È\82é)\81B\82Ü\82½\81AG2D \83f\81[\83^\82Ì\8fê\8d\87\82Í10\88È\89º\82Ì\92l\82Å\82 \82Á\82Ä\82à\8fí\82É100\92i\8aK\82Æ\8c©\82È\82³\82ê\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="green"><TT>#BPM: <BPM\92l></TT></FONT>\r
+<DD>\89\89\91t\83f\81[\83^\82ÌBPM\81iBeat per Minute\81G\82P\95ª\8aÔ\82É\82S\95ª\89¹\95\84\82ª\89½\8cÂ\82 \82é\82©\81j\82ð\8ew\92è\82µ\82Ü\82·\81B\8f¬\90\94\82Å\82Ì\8ew\92è\82ª\89Â\94\\82Å\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="green"><TT>#BPMzz: <BPM\92l></TT></FONT>\r
+<DD>\89\89\91t\83f\81[\83^\82ÌBPM\82ð\8ew\92è\82µ\82Ü\82·\81B(zz\82Ì\95\94\95ª\82ª\82È\82¢)#BPM: \82ª\89\89\91t\8aJ\8en\8e\9e\82ÌBPM\82Ì\92l\82ð\8ew\92è\82·\82é\82Ì\82É\91Î\82µ\81A#BPMzz: \82Å\82Í\81A\8ag\92£\8dÄ\90¶\83e\83\93\83|\83`\83\83\83\93\83l\83\8b(08)\82Å\8eg\97p\82·\82é\82½\82ß\82Ì\92l\82ð\92è\8b`\82µ\82Ü\82·\81B\8f¬\90\94\82Å\82Ì\8ew\92è\82ª\89Â\94\\82Å\82·\81Bzz \82Í36\90i\90\94\95\\8bL\82Å 01\81`ZZ \82Ü\82Å\82ð\8ew\92è\82·\82é\82±\82Æ\82ª\82Å\82«\82Ü\82·\81B<BR>\r
+\r
+<BR>\r
+<DT><FONT COLOR="green"><TT>#BASEBPM: <BASEBMP\92l></TT></FONT>\r
+<DD>\89\89\91t\83f\81[\83^\82ÌBPM\82Ì\8aî\96{\92l\82ð\8ew\92è\82µ\82Ü\82·\81B\83`\83\83\83\93\83l\83\8b03, 08\82Å\8ew\92è\82µ\82½\82·\82×\82Ä\82ÌBPM\82É\82±\82Ì\8aî\96{\92l\82ª\89Á\8eZ\82³\82ê\82Ü\82·\81i#BPM: \82Å\8ew\92è\82µ\82½\92l\82É\82Í\89Á\8eZ\82³\82ê\82Ü\82¹\82ñ\81j\81B<BR>\r
+<BR>\r
+<TABLE BORDER="0"><TR><TD BGCOLOR="white"><TT>\r
+\97á\81F<BR>\r
+\81@\81@#BASEBPM: 100<BR>\r
+\81@\81@#01003:FF\r
+<UL>\r
+<LI>\8f¬\90ß10\82Ì\90æ\93ª\82Å\81ABPM=255+100=355\82É\82È\82è\82Ü\82·\81B<BR>\r
+</UL>\r
+</TT></TR></TABLE>\r
+<BR>\r
+<DT><FONT COLOR="green"><TT>#MIDIFILE: <MIDI\83t\83@\83C\83\8b\96¼></TT></FONT>\r
+<DD>BGM\82Æ\82µ\82Ä\96Â\82ç\82·MIDI\83t\83@\83C\83\8b\82ð\8ew\92è\82µ\82Ü\82·\81BMIDI\83t\83@\83C\83\8b\82Í\81A\89\89\91t\83t\83@\83C\83\8b\82Ì\82 \82é\83t\83H\83\8b\83_\82ð\8aî\93_\82Æ\82µ\82Ä\91\8a\91Î\83p\83X\82Å\8ew\92è\82µ\82Ü\82·\81B\r
+\8c»\8dÝ\82Í\8b@\94\\82µ\82Ä\82¢\82Ü\82¹\82ñ\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="green"><TT>#STAGEFILE: <STAGE\83t\83@\83C\83\8b\96¼></TT></FONT>\r
+<DD>\8bÈ\82ª\91I\91ð\82³\82ê\82Ä\89\89\91t\83f\81[\83^\82ª\83\8d\81[\83h\82³\82ê\82Ä\82¢\82é\8aÔ\82É\95\\8e¦\82·\82é\89æ\91\9c\81i640x480\83h\83b\83g\88È\93à\82ÌBMP, JPEG, PNG\83t\83@\83C\83\8b\81G\82»\82ê\88È\8fã\82Ì\83T\83C\83Y\82Í\89E\89º\95û\82©\82ç\83J\83b\83g\81j\82ð\8ew\92è\82µ\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="green"><TT>#PREVIEW: <PREVIEW\83t\83@\83C\83\8b\96¼></TT></FONT>\r
+<DD>\8bÈ\91I\91ð\89æ\96Ê\82Å\83J\81[\83\\83\8b\82ª\8d\87\82í\82³\82ê\82½\8e\9e\82É\96Â\82ç\82·\89¹\90º\83t\83@\83C\83\8b\82ð\8ew\92è\82µ\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="green"><TT>#PREIMAGE: <PREVIEW\89æ\91\9c\83t\83@\83C\83\8b\96¼></TT></FONT>\r
+<DD>\8bÈ\91I\91ð\89æ\96Ê\82Å\83J\81[\83\\83\8b\82ª\8d\87\82í\82³\82ê\82½\8e\9e\82É\95\\8e¦\82·\82é\89æ\91\9c\83t\83@\83C\83\8b\82ð\8ew\92è\82µ\82Ü\82·\81BBMP, PNG, JPEG\82ª\8eg\97p\82Å\82«\82Ü\82·\81B\83T\83C\83Y\82Í 204x269 \82Å\81A\82±\82ê\82æ\82è\8f¬\82³\82¢\8fê\8d\87\82Í\92\86\89\9b\82É\95\\8e¦\82³\82ê\81A\82±\82ê\82æ\82è\91å\82«\82¢\8fê\8d\87\82Í\89E\89º\82©\82ç\90Ø\82è\8eÌ\82Ä\82ç\82ê\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="green"><TT>#BACKGROUND: <\94w\8ci\83t\83@\83C\83\8b\96¼></TT></FONT>\r
+<DD>\89\89\91t\89æ\96Ê\82Ì\94w\8ci\82Æ\82È\82é\89æ\91\9c\82ð\8ew\92è\82µ\82Ü\82·\81B\82±\82Ì\89æ\91\9c\82Í\81ADTXMania \82Ì\89\89\91t\83t\83\8c\81[\83\80\89æ\96Ê\82Æ\94¼\93§\96¾\8d\87\90¬\82³\82ê\82Ä\95\\8e¦\82³\82ê\82Ü\82·\81B\89æ\91\9c\83T\83C\83Y\82Í640x480\82Å\82·\82ª\81A\82±\82ê\82æ\82è\8f¬\82³\82¢\8fê\8d\87\82É\82Í\93¯\82¶\89æ\91\9c\82ª\8cJ\82è\95Ô\82µ\95À\82×\82Ä\95\\8e¦\82³\82ê\82Ü\82·\81BBMP, JPEG, PNG \82ª\8eg\97p\82Å\82«\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="green"><TT>#WALL: <\94w\8ci\83t\83@\83C\83\8b\96¼></TT></FONT>\r
+<DD>#BACKGROUND \82Æ\93¯\93\99\82Å\82·\81B\82µ\82©\82µ\81A#BACKGROUND \82Í BandJAM \82Å\82Í\94F\8e¯\82³\82ê\82È\82¢\82½\82ß\81A#WALL \81¨ #BACKGROUND \82Ì\8f\87\94Ô\82Å\95Ê\81X\82Ì\83t\83@\83C\83\8b\82ð\8ew\92è\82·\82é\82±\82Æ\82Å\81ADTXMania \82Æ BandJAM \82Å\95Ê\81X\82Ì\89æ\91\9c\82ð\94w\8ci\82É\82·\82é\82±\82Æ\82ª\89Â\94\\82Å\82·\81B\81iDTXMania\82Å\82Í\82Ç\82¿\82ç\82à\94F\8e¯\82µ\81A\8cã\82©\82ç\8fo\82Ä\82«\82½\95û\82ª\97D\90æ\82Æ\82È\82è\82Ü\82·\81B\81j<BR>\r
+<BR>\r
+<DT><FONT COLOR="green"><TT>#WAVzz: <WAV(MP3)\83t\83@\83C\83\8b\96¼></TT></FONT>\r
+<DD>\94Ô\8d\86 zz \82É\93o\98^\82·\82éWAV\83t\83@\83C\83\8b\82ð\8ew\92è\82µ\82Ü\82·\81Bzz \82Í36\90i\90\94\95\\8bL\82Å 01\81`ZZ \82Ü\82Å\82ð\8ew\92è\82·\82é\82±\82Æ\82ª\82Å\82«\82Ü\82·\81B\82Ü\82½\81AWAV\83t\83@\83C\83\8b\82Ì\91ã\82í\82è\82ÉMP3\83t\83@\83C\83\8b\82ð\8ew\92è\82·\82é\82±\82Æ\82à\89Â\94\\82Å\82·\81B\81iMP3\82Ì\8fê\8d\87\81A\83v\83\8c\83C\83\84\81[\82Ì\83p\83\\83R\83\93\82ÉMP3 CODEC \82ª\83C\83\93\83X\83g\81[\83\8b\82³\82ê\82Ä\82È\82¯\82ê\82Î\81A\89\89\91t\82É\8e¸\94s\82µ\82Ü\82·\81B\81j\82±\82±\82Å\8ew\92è\82µ\82½\83t\83@\83C\83\8b\82Í\81A\83h\83\89\83\80\83p\81[\83g\82É\8eg\97p\82³\82ê\82½\8fê\8d\87\82Í\8dÅ\91å\82Q\89¹\82Ü\82Å\8fd\82Ë\82Ä\94\90º\82³\82ê\82Ü\82·\82ª\81A\83M\83^\81[\82È\82ç\82Ñ\82É\83x\81[\83X\83p\81[\83g\82É\8eg\97p\82³\82ê\82½\8fê\8d\87\82Í\8fd\82Ë\82Ä\8dÄ\90¶\82³\82ê\82Ü\82¹\82ñ\81i\8e\9f\82Ì\8dÄ\90¶\82ð\8en\82ß\82é\8e\9e\82É\88È\91O\82Ì\8dÄ\90¶\82ª\92â\8e~\82µ\82Ü\82·\81j\81B<BR>\r
+#WAVzz: \82Å\93o\98^\82µ\82½\94Ô\8d\86 zz \82Í\81AWAVE\8aÖ\98A\83`\83\83\83\93\83l\83\8b(01,11\81`19,etc.)\82Å\8eg\97p\82³\82ê\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="green"><TT>#VOLUMEzz: <\89¹\97Ê\8a\84\8d\87></TT></FONT>\r
+<DD>\94Ô\8d\86 zz \82É\93o\98^\82³\82ê\82½WAV\83t\83@\83C\83\8b\82Ì\89¹\97Ê\82ð\8ew\92è\82µ\82Ü\82·\81Bzz \82Í36\90i\90\94\95\\8bL\82Å 01\81`ZZ \82Ü\82Å\82ð\8ew\92è\82·\82é\82±\82Æ\82ª\82Å\82«\82Ü\82·\81B\89¹\97Ê\8a\84\8d\87\82É\82Í\81A#WAVzz \82Å\8ew\92è\82µ\82½WAV\83t\83@\83C\83\8b\82Ì\8c´\89¹\82ð 100% \82Æ\82µ\82½\8e\9e\82Ì\8dÄ\90¶\89¹\97Ê\82ð 0\81`100 [%] \82Å\8ew\92è\82µ\82Ü\82·\81i10\90i\90\94\95\\8bL\81j\81B\89¹\97Ê\82ð100%\82ð\92´\82¦\82Ä\91\9d\95\9d\82·\82é\82±\82Æ\82Í\8fo\97\88\82Ü\82¹\82ñ\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="green"><TT>#WAVVOLzz: <\89¹\97Ê\8a\84\8d\87></TT></FONT>\r
+<DD>#VOLUMEzz \82Æ\93¯\93\99\82Å\82·\81B\82µ\82©\82µ\81AGDAC2 \82Å\82Í #WAVzz \82Æ\8d¬\93¯\82³\82ê\82Ä\8cë\93®\8dì\82·\82é\82½\82ß\81A#VOLUMEzz \82Ì\95û\82ð\8eg\97p\82·\82é\82±\82Æ\82ð\82¨\8a©\82ß\82µ\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="green"><TT>#PANzz: <\95û\8cü\8a\84\8d\87></TT></FONT>\r
+<DD>\94Ô\8d\86 zz \82É\93o\98^\82³\82ê\82½WAV\83t\83@\83C\83\8b\82Ì\83p\83\93\81i\8dÄ\90¶\88Ê\92u\81j\82ð\8ew\92è\82µ\82Ü\82·\81Bzz \82Í36\90i\90\94\95\\8bL\82Å 01\81`ZZ \82Ü\82Å\82ð\8ew\92è\82·\82é\82±\82Æ\82ª\82Å\82«\82Ü\82·\81B\95û\8cü\8a\84\8d\87\82É\82Í\81A-100\81`100 \82Ì\90\94\92l\82ð10\90i\90\94\82Å\8ew\92è\82µ\82Ü\82·\81B-100 \82Å\8a®\91S\82É\8d¶\81A0 \82Å\92\86\89\9b\81A100 \82Å\8a®\91S\89E\82Ì\88Ê\92u\82É\82È\82è\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="green"><TT>#WAVPANzz: <\89¹\97Ê\8a\84\8d\87></TT></FONT>\r
+<DD>#PANzz \82Æ\93¯\93\99\82Å\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="green"><TT>#BMPzz: <\89æ\91\9c\83t\83@\83C\83\8b\96¼></TT></FONT>\r
+<DD>\94Ô\8d\86 zz \82É\93o\98^\82·\82é\89æ\91\9c\83t\83@\83C\83\8b\82ð\8ew\92è\82µ\82Ü\82·\81BBMP, JPEG, PNG \82ª\8eg\97p\82Å\82«\82Ü\82·\81B\83T\83C\83Y\82Í 278x355 \82Å\81A\82±\82ê\82æ\82è\8f¬\82³\82¢\8fê\8d\87\82Í\8fã\92\86\89\9b\82É\82»\82ë\82¦\82ç\82ê\81A\82±\82ê\82æ\82è\91å\82«\82¢\8fê\8d\87\82Í\89E\89º\82©\82ç\90Ø\82è\8eÌ\82Ä\82ç\82ê\82Ü\82·\81B zz \82Í36\90i\90\94\95\\8bL\82Å 01\81`ZZ \82Ü\82Å\82ð\8ew\92è\82·\82é\82±\82Æ\82ª\82Å\82«\82Ü\82·\81B<BR>\r
+#BMPzz:\82Å\93o\98^\82µ\82½\94Ô\8d\86 zz \82Í\81ABGA\8aÖ\98A\83`\83\83\83\93\83l\83\8b(04,07,55\81`60)\82Å\8eg\97p\82³\82ê\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="green"><TT>#BGAzz: <BMP\94Ô\8d\86> <x1> <y1> <x2> <y2> <ox> <oy></TT></FONT>\r
+<DD>\94Ô\8d\86 zz \82É\93o\98^\82·\82é\8ag\92£BGA\97Ì\88æ\82ð\8ew\92è\82µ\82Ü\82·\81B\8ag\92£BGA\82Æ\82Í\81A\82 \82é\89æ\91\9c\82Ì\88ê\95\94\95ª\82¾\82¯\82ð\8dD\82«\82È\8fê\8f\8a\82É\95\\8e¦\82Å\82«\82é\8b@\94\\82Å\82·\81B<BR>\r
+#BGAzz:\82Å\93o\98^\82µ\82½\94Ô\8d\86 zz \82Í\81ABGA\8aÖ\98A\83`\83\83\83\93\83l\83\8b(04,07,55\81`60)\82Å\8eg\97p\82³\82ê\82Ü\82·\81B<BR>\r
+<BR>\r
+<TABLE BORDER="1" CELLPADDING="10" CELLSPACING="0">\r
+<TR><TD BGCOLOR="#DDFFDD">zz<TD BGCOLOR="#DDFFDD"> 36\90i\90\94\95\\8bL\82Å 01\81`ZZ \82Ü\82Å\82ð\8ew\92è\82·\82é\82±\82Æ\82ª\82Å\82«\82Ü\82·\81B</TR>\r
+<TR><TD BGCOLOR="#DDFFDD">BMP\94Ô\8d\86<TD BGCOLOR="#DDFFDD"> #BMPzz\82Å\8ew\92è\82³\82ê\82½BMP\94Ô\8d\86(01\81`ZZ)\82ª\93ü\82è\82Ü\82·\81B\95K\82¸\82Q\8c\85\82Å\8bL\8fq\82µ\82Ä\89º\82³\82¢\81B</TR>\r
+<TR><TD BGCOLOR="#DDFFDD">x1, y1<TD BGCOLOR="#DDFFDD"> BGA\82Ì\8d¶\8fã\8dÀ\95W(BMP\82Ì\8d¶\8fã\8b÷\82ª(0,0))\82ð\8ew\92è\82µ\82Ü\82·\81B</TR>\r
+<TR><TD BGCOLOR="#DDFFDD">x2, y2<TD BGCOLOR="#DDFFDD"> BGA\82Ì\89E\89º\8dÀ\95W(BMP\82Ì\8d¶\8fã\8b÷\82ª(0,0))\82ð\8ew\92è\82µ\82Ü\82·\81B</TR>\r
+<TR><TD BGCOLOR="#DDFFDD">ox, oy<TD BGCOLOR="#DDFFDD"> BGA\82Ì\95\\8e¦\8dÀ\95W(DTXMania\82ÌBGA\97Ì\88æ\82Ì\8d¶\8fã\8b÷\82ª(0,0))\82ð\8ew\92è\82µ\82Ü\82·\81B</TR>\r
+</TABLE>\r
+<BR>\r
+<TABLE BORDER="0"><TR><TD BGCOLOR="white"><TT>\r
+\97á\81F<BR>\r
+\81@\81@#BGA01: 01 -40 -30 60 70 0 0<BR>\r
+\81@\81@\81¨ #BMP01 \82Å\8ew\92è\82µ\82½\89æ\91\9c\82Ì (-40,-30)-(60,70) \82Ì\97Ì\88æ\82ð\81ADTXMania\82ÌBGA\97Ì\88æ\82Ì (0,0) \82Ì\88Ê\92u\82©\82ç\95\\8e¦\82µ\82Ü\82·\81B<BR>\r
+</TT></TR></TABLE>\r
+<BR>\r
+<B>\92\8d\81F<BR>\r
+x1\82 \82é\82¢\82Íy1\82ª\95\89\90\94\82Å\82 \82é\8fê\8d\87\82Í\81A\90æ\82É\82»\82ê\82ð 0 \82É\83N\83\8a\83b\83s\83\93\83O\82µ\81A\83N\83\8a\83b\83s\83\93\83O\8cã\82Ì\97Ì\88æ\82Ì\8d¶\8fã\8b÷\82ª (ox, oy) \82©\82ç\95\\8e¦\82³\82ê\82Ü\82·\81B</B>\81iBM98\95û\8e®\81j<BR>\r
+<P ALIGN="center">\r
+<IMG SRC="bga_desc.jpg"><BR>\r
+<B>#BGA \82Å\82Ì\83N\83\8a\83b\83s\83\93\83O\82Æ\88Ê\92u\8c\88\82ß</B><BR>\r
+</P><BR>\r
+<DT><FONT COLOR="green"><TT>#BGAPANzz: <BMP\94Ô\8d\86> <sw> <sh> <ew> <eh > <ssx> <ssy> <sex> <sey> <dsx> <dsy> <dex> <dey> <len> </TT></FONT>\r
+<DD>\94Ô\8d\86 zz \82É\93o\98^\82·\82éBGA\83C\83\81\81[\83W\83p\83\93\82ð\8ew\92è\82µ\82Ü\82·\81B<BR>\r
+\83C\83\81\81[\83W\83p\83\93\82Æ\82Í\81A\82 \82é\89æ\91\9c\82Ì\88ê\95\94\95ª\81i\97Ì\88æ\81j\82ð\81A\8f\89\8aú\88Ê\92u\82©\82ç\8fI\97¹\88Ê\92u\82Ü\82Å\88ê\92è\82Ì\91¬\93x\82Å\88Ú\93®\82³\82¹\82È\82ª\82ç\95\\8e¦\82·\82é\8b@\94\\82Å\82·\81B\82±\82Ì\82Æ\82«\81A\88Ê\92u\82¾\82¯\82Å\82Í\82È\82\97Ì\88æ\82Ì\91å\82«\82³\82à\95Ï\8dX\82³\82¹\82é\82±\82Æ\82ª\82Å\82«\82Ü\82·\81B\81i\82½\82¾\82µ\97Ì\88æ\82Ì\8ag\91å\8fk\8f¬\8b@\94\\82Í\82 \82è\82Ü\82¹\82ñ\81B\81j<BR>\r
+#BGAPANzz:\82Å\93o\98^\82µ\82½\94Ô\8d\86 zz \82Í\81ABGA\8aÖ\98A\83`\83\83\83\93\83l\83\8b(04,07,55\81`60)\82Å\8eg\97p\82³\82ê\82Ü\82·\81B<BR>\r
+<BR>\r
+<TABLE BORDER="1" CELLPADDING="10" CELLSPACING="0">\r
+<TR><TD BGCOLOR="#DDFFDD">zz<TD BGCOLOR="#DDFFDD"> 36\90i\90\94\95\\8bL\82Å 01\81`ZZ \82Ü\82Å\82ð\8ew\92è\82·\82é\82±\82Æ\82ª\82Å\82«\82Ü\82·\81B</TR>\r
+<TR><TD BGCOLOR="#DDFFDD">BMP\94Ô\8d\86<TD BGCOLOR="#DDFFDD"> #BMPzz\82Å\8ew\92è\82³\82ê\82½BMP\94Ô\8d\86(01\81`ZZ)\82ª\93ü\82è\82Ü\82·\81B\95K\82¸\82Q\8c\85\82Å\8bL\8fq\82µ\82Ä\89º\82³\82¢\81B</TR>\r
+<TR><TD BGCOLOR="#DDFFDD">sw, sh<TD BGCOLOR="#DDFFDD"> \97Ì\88æ\83T\83C\83Y\81i\95\9d\81A\8d\82\82³\81j\82Ì\8f\89\8aú\92l\82ð\8ew\92è\82µ\82Ü\82·\81B</TR>\r
+<TR><TD BGCOLOR="#DDFFDD">ew, eh<TD BGCOLOR="#DDFFDD"> \97Ì\88æ\83T\83C\83Y\81i\95\9d\81A\8d\82\82³\81j\82Ì\8fI\97¹\92l\82ð\8ew\92è\82µ\82Ü\82·\81B</TR>\r
+<TR><TD BGCOLOR="#DDFFDD">ssx, ssy<TD BGCOLOR="#DDFFDD"> \89æ\91\9c\91¤\82Ì\8f\89\8aú\88Ê\92u\81i\89æ\91\9c\82Ì\8d¶\8fã\82ð(0,0)\82Æ\82·\82é\81j\82ð\8ew\92è\82µ\82Ü\82·\81B</TR>\r
+<TR><TD BGCOLOR="#DDFFDD">sex, sey<TD BGCOLOR="#DDFFDD"> \89æ\91\9c\91¤\82Ì\8fI\97¹\88Ê\92u\81i\89æ\91\9c\82Ì\8d¶\8fã\82ð(0,0)\82Æ\82·\82é\81j\82ð\8ew\92è\82µ\82Ü\82·\81B</TR>\r
+<TR><TD BGCOLOR="#DDFFDD">dsx, dsy<TD BGCOLOR="#DDFFDD"> \95\\8e¦\91¤\82Ì\8f\89\8aú\88Ê\92u\81iDTXMania\82ÌBGA\97Ì\88æ\82Ì\8d¶\8fã\82ð(0,0)\82Æ\82·\82é\81j\82ð\8ew\92è\82µ\82Ü\82·\81B</TR>\r
+<TR><TD BGCOLOR="#DDFFDD">dex, dey<TD BGCOLOR="#DDFFDD"> \95\\8e¦\91¤\82Ì\8fI\97¹\88Ê\92u\81iDTXMania\82ÌBGA\97Ì\88æ\82Ì\8d¶\8fã\82ð(0,0)\82Æ\82·\82é\81j\82ð\8ew\92è\82µ\82Ü\82·\81B</TR>\r
+<TR><TD BGCOLOR="#DDFFDD">len<TD BGCOLOR="#DDFFDD"> \8f\89\8aú\88Ê\92u\82©\82ç\8fI\97¹\88Ê\92u\82Ö\82Ì\88Ú\93®\82É\82©\82¯\82é\8d\87\8cv\8e\9e\8aÔ\82ð\83J\83E\83\93\83g\92P\88Ê\82Å\8ew\92è\82µ\82Ü\82·\81B\8f¬\90ß\92·\94{\97¦\82É\82æ\82ç\82¸\81A\8fí\82É\82P\8f¬\90ß\81\81384\83J\83E\83\93\83g\82É\82È\82è\82Ü\82·\81B\81i\8f¬\90ß\92·\94{\97¦ 0.5 \82Ì\8e\9e\82Í\81A\92Ê\8fí(1.0)\8e\9e\82É\94ä\82× 2 \94{\82Ì\91¬\82³\82Å\88Ú\93®\82µ\82Ü\82·\81B\81j</TR>\r
+</TABLE>\r
+<BR>\r
+<B>\92\8d\81F<BR>\r
+x1\82 \82é\82¢\82Íy1\82ª\95\89\90\94\82Å\82 \82é\8fê\8d\87\82Í\81A\82»\82ê\82ð 0 \82É\83N\83\8a\83b\83s\83\93\83O\82µ\82È\82¢\8fó\91Ô\82Å\95\\8e¦\88Ê\92u\82ð\8c\88\92è\82µ\82Ü\82·\81B</B>\81iDTXMania\95û\8e®\81G#BGA \82Æ\82Í\88Ù\82È\82è\82Ü\82·\82Ì\82Å\82²\92\8d\88Ó\89º\82³\82¢\81B\81j<BR>\r
+<P ALIGN="center">\r
+<IMG SRC="bgapan_desc.jpg"><BR>\r
+<B>#BGAPAN \82Å\82Ì\83N\83\8a\83b\83s\83\93\83O\82Æ\88Ê\92u\8c\88\82ß</B>\r
+</P><BR>\r
+<TABLE BORDER="0"><TR><TD BGCOLOR="white"><TT>\r
+\97á\81F<BR>\r
+\81@\81@#BGAPAN01: 01 50 50 100 80 0 0 60 200 85 60 55 250 192<BR>\r
+\81@\81@\81¨ #BMP01 \82Å\8ew\92è\82µ\82½\89æ\91\9c\82É\82Â\82¢\82Ä\81A<BR>\r
+<UL>\r
+<LI>\8f\89\8aú\81F BMP01 \82Ì (0,0)-(0+50,0+50) \82Ì\97Ì\88æ\82ð\81ADTXMania\82ÌBGA\97Ì\88æ\82Ì (85,60)-(85+50,60+50) \82É\95\\8e¦\82µ\82Ü\82·\81B<BR>\r
+<LI>\8fI\97¹\81F BMP01 \82Ì (60,200)-(60+100,200+80) \82Ì\97Ì\88æ\82ð\81ADTXMania\82ÌBGA\97Ì\88æ\82Ì (55,250)-(55+100,250+80) \82É\95\\8e¦\82µ\82Ü\82·\81B<BR>\r
+\81¨\81@\8f\89\8aú\82©\82ç\8fI\97¹\82Ü\82Å\81A\8ae\97Ì\88æ\82Ì\83T\83C\83Y\82Í\90ü\8c`\82É\95Ï\89»\82µ\82Ü\82·\81B<BR>\r
+<LI>\8f\89\8aú\82©\82ç\8fI\97¹\82Ü\82Å\81A192\83J\83E\83\93\83g\81i\82Q\95ª\89¹\95\84\81j\82Ì\8e\9e\8aÔ\82ð\82©\82¯\82Ü\82·\81B<BR>\r
+</UL>\r
+</TT></TR></TABLE>\r
+<BR>\r
+<P ALIGN="center">\r
+<IMG SRC="bgapan_ex.jpg"><BR>\r
+<B>#BGAPAN \82Ì\97á</B>\r
+</P>\r
+\r
+<BR>\r
+<DT><FONT COLOR="green"><TT>#AVIzz: <AVI\83t\83@\83C\83\8b\96¼></TT></FONT>\r
+<DD>\94Ô\8d\86 zz \82É\93o\98^\82·\82éAVI\83t\83@\83C\83\8b\82ð\8ew\92è\82µ\82Ü\82·\81Bzz \82Í36\90i\90\94\95\\8bL\82Å 01\81`ZZ \82Ü\82Å\82ð\8ew\92è\82·\82é\82±\82Æ\82ª\82Å\82«\82Ü\82·\81B<BR>\r
+#AVIzz:\82Å\93o\98^\82µ\82½\94Ô\8d\86 zz \82Í\81A\93®\89æ\8dÄ\90¶\83`\83\83\83\93\83l\83\8b(54)\82Å\8eg\97p\82³\82ê\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="green"><TT>#VIDEOzz: <AVI\83t\83@\83C\83\8b\96¼></TT></FONT>\r
+<DD>#AVIzz \82Æ\93¯\93\99\82Å\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="green"><TT>#MIDINOTE: <ON|OFF></TT></FONT>\r
+<DD>\92Ê\8fí\81A\89Â\8e\8b\83I\83u\83W\83F\83N\83g\83`\83\83\83\93\83l\83\8b\82Å\8ew\92è\82³\82ê\82é\92l\82ÍWAV\94Ô\8d\86\82Å\82·\82ª\81AMIDINOTE\82ðON\82É\90Ý\92è\82·\82é\82Æ\81AWAV\94Ô\8d\86\82Å\82 \82é\82Æ\93¯\8e\9e\82ÉMIDI\83m\81[\83g\82Å\82à\82 \82é\82Æ\82Ý\82È\82³\82ê\81AWAV\94\90º\82Æ\93¯\8e\9e\82ÉMIDI OUT Ch.10 \82É NoteOn \90M\8d\86\82ª\91\97\90M\82³\82ê\82Ü\82·\81B\82½\82¾\82µ\81AMIDI\82©\82ç\93ü\97Í\82³\82ê\82Ä\83q\83b\83g\82µ\82½\83I\83u\83W\83F\83N\83g\82É\82Â\82¢\82Ä\82Í\81AWAV\82Ì\82Ý\82Ì\94\90º\82Æ\82È\82è\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="green"><TT>#RANDOM <\90\94\92l></TT></FONT>\r
+<DD>1\81`<\90\94\92l>\82Ü\82Å\82Ì\90®\90\94\82Ì\97\90\90\94\82ð\90¶\90¬\82µ\82Ü\82·\81B\82±\82Ì\97\90\90\94\82Í #IF \83^\83O\82Å\8eg\97p\82³\82ê\82Ü\82·\81B\90\94\92l\82Í10\90i\90\94\95\\8bL\82Å\82P\88È\8fã\82ð\8ew\92è\89Â\94\\82Å\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="green"><TT>#IF <\90\94\92l> \81` #ENDIF</TT></FONT>\r
+<DD>#RANDOM\83^\83O\82Å\90¶\90¬\82µ\82½\97\90\90\94\82ª<\90\94\92l>\82Æ\93\99\82µ\82¢\8fê\8d\87\82É\81A#IF\81`#ENDIF \82Ü\82Å\82Ì\83f\81[\83^\82ð\97L\8cø\82Æ\82µ\82Ü\82·\81B\97\90\90\94\82ª<\90\94\92l>\82Æ\93\99\82µ\82\82È\82¢\8fê\8d\87\82É\82Í\81A#IF \81` #ENDIF \82Í\83X\83L\83b\83v\82³\82ê\82Ü\82·\81B\8dÅ\91å255\8fd\82Ü\82Å\82Ì\93ü\82ê\8eq\82ª\89Â\94\\82Å\82·\81B<BR>\r
+<BR>\r
+<TABLE BORDER="0"><TR><TD BGCOLOR="white"><TT>\r
+\97á\81F<BR>\r
+\81@\81@#RANDOM 3<BR>\r
+\81@\81@#IF 1<BR>\r
+\81@\81@ #WAV01: voice1.mp3<BR>\r
+\81@\81@#ENDIF<BR>\r
+\81@\81@#IF 2<BR>\r
+\81@\81@ #WAV01: voice2.mp3<BR>\r
+\81@\81@#ENDIF<BR>\r
+\81@\81@#IF 3<BR>\r
+\81@\81@ #WAV01: voice3.mp3<BR>\r
+\81@\81@#ENDIF<BR>\r
+<BR>\r
+<UL>\r
+<LI>#RANDOM \82Å\90¶\90¬\82³\82ê\82½\97\90\90\94\82ª 1 \82Ì\8fê\8d\87\82Í voice1.mp3\81A2 \82Ì\8fê\8d\87\82Í voice2.mp3\81A3 \82Ì\8fê\8d\87\82Í voice3.mp3 \82ª\81AWAV01 \82É\8a\84\82è\93\96\82Ä\82ç\82ê\82Ü\82·\81B<BR>\r
+<LI>\90¶\90¬\82³\82ê\82é\90\94\82Í\83f\81[\83^\82ª\89\89\91t\82³\82ê\82é\82½\82Ñ\82É\83\89\83\93\83_\83\80\82É\95Ï\82í\82é\82Ì\82Å\81AWAV01 \82Ì\89¹\82à\82Ü\82½\89\89\91t\82·\82é\82½\82Ñ\83\89\83\93\83_\83\80\82É\95Ï\82í\82é\82±\82Æ\82É\82È\82è\82Ü\82·\81B<BR>\r
+</UL>\r
+</TT></TR></TABLE>\r
+<BR>\r
+\82½\82¾\82µ\81ADTXMania \82ª\8bÈ\83f\81[\83^\82Ì\93Ç\82Ý\8d\9e\82Ý\82ð\8d\82\91¬\89»\82·\82é\82½\82ß\82Ì\8ed\97l\8fã\81A\83w\83b\83_\8fî\95ñ\82É\8aÖ\82·\82é #RANDOM \82Í\82Ù\82Æ\82ñ\82Ç\96³\8cø\82Å\82·\81B\r
+\r
+</DL>\r
+<BR>\r
+\r
+<P><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\83I\83u\83W\83F\83N\83g\8bL\8fq</B></FONT></P>\r
+<DL>\r
+<DT><FONT COLOR="green"><TT>#nnncc: <\83I\83u\83W\83F\83N\83g\83\8a\83X\83g></TT></FONT>\r
+<DD>\8f¬\90ß nnn \82É\82¨\82¯\82é\83`\83\83\83\93\83l\83\8b cc \82Ì\89\89\91t\8fî\95ñ\82ð\83I\83u\83W\83F\83N\83g\83\8a\83X\83g\82Æ\82µ\82Ä\8ew\92è\82µ\82Ü\82·\81Bnnn \82Í10\90i\90\94\95\\8bL\82Å 000\81`999<SUP><font size="-2">\81¦</font></SUP>\82Ü\82Å\81Acc \82Í16\90i\90\94\95\\8bL\82Å 01\81`FF \82Ü\82Å\82ð\8ew\92è\89Â\94\\82Å\82·\81icc\82É\82Â\82¢\82Ä\82Í\81A\8e\9f\82Ì\81u\83`\83\83\83\93\83l\83\8b\8fî\95ñ\81v\82ð\8eQ\8fÆ\81j\81B<BR>\r
+\83I\83u\83W\83F\83N\83g\83\8a\83X\83g\92\86\82Ì\94C\88Ó\82Ì\8cÂ\8f\8a\82É\81A'_' \8bL\8d\86\82ð\8eg\82¤\82±\82Æ\82ª\82Å\82«\82Ü\82·\81B\82±\82Ì\8bL\8d\86\82Í\8c©\82â\82·\82³\8cü\8fã\82Ì\82½\82ß\82ÉGDA\82Å\93±\93ü\82³\82ê\82½\82à\82Ì\82Å\81A\93Ç\82Ý\82±\82Ý\8e\9e\82É\82Í\96³\8e\8b\82³\82ê\82Ü\82·\81B<BR><BR>\r
+<font size="-2">\81¦... 041a\88È\8d~\82Å\82Í\81A\95S\82Ì\88Ê\82¾\82¯36\90i\90\94\82Å\82 \82è\81A000\81`Z99 \82Ü\82Å\8eg\97p\82·\82é\82±\82Æ\82ª\82Å\82«\82é\81B</font><BR>\r
+</DL>\r
+<BR>\r
+\r
+<!---- \83`\83\83\83\93\83l\83\8b\8fî\95ñ ---->\r
+\r
+<P><IMG SRC="ball_y.gif"> <FONT COLOR="blue"><B>\83`\83\83\83\93\83l\83\8b\8fî\95ñ</B></FONT></P>\r
+<DL>\r
+<DT><FONT COLOR="red">00\81@[\83e\83\93\83|\82Ì\8ew\92è(16\90i\90\94\81^\95\82\93®\8f¬\90\94)]</FONT><BR>\r
+<DD>BMS\82Å\94p\8e~\82É\82È\82Á\82½\82½\82ß\81A\94ñ\91Î\89\9e\81B\83`\83\83\83\93\83l\83\8b03\82ð\82²\8eg\97p\89º\82³\82¢\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="red">01\81@[\83o\83b\83N\83R\81[\83\89\83X]</FONT><BR>\r
+<DD>\82»\82Ì\88Ê\92u\82Å\8e©\93®\93I\82É\8dÄ\90¶\82·\82éWAV\82Ì\94Ô\8d\86\82ð\8ew\92è\82µ\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="red">02\81@[\8f¬\90ß\82Ì\92Z\8fk\89»(10\90i\90\94\81^\95\82\93®\8f¬\90\94)]</FONT><BR>\r
+<DD>\82P\8f¬\90ß\82Ì\92·\82³\82ð\81A\82S\95ª\82Ì\82S\94\8f\8eq\82ð\8aî\8f\80\82Æ\82µ\82½\94{\97¦\82Å\8ew\92è\82µ\82Ü\82·\81B<BR><BR>\r
+\92\8d\81F<BR>\r
+\8f¬\90ß\82ª\92Z\8fk\82³\82ê\82Ä\82à\94\8f\90ü\81i\82P\94\8f\82²\82Æ\82É\8c»\82ê\82é\94\96\82¢\94\92\90ü\81j\82Ì\8aÔ\8au\82Í\95Ï\82í\82è\82Ü\82¹\82ñ\81B\82½\82¾\82µ\81A\8f¬\90ß\90ü\81i\92Ê\8fí\82Í\82S\94\8f\82²\82Æ\82É\8c»\82ê\82é\96¾\82é\82¢\94\92\90ü\81j\82Ì\8aÔ\8au\82Í\81A\92Z\8fk\94{\97¦\82É\89\9e\82¶\82Ä\95Ï\89»\82µ\82Ü\82·\81B\82±\82ê\82É\82æ\82è\81A\82½\82Æ\82¦\82Î\82S\95ª\82Ì\82R\94\8f\8eq\82È\82Ç\82Ì\8e©\91R\82È\95\\8c»\82ª\89Â\94\\82Å\82·\81B<BR><BR>\r
+<TABLE BORDER="0" CELLPADDING="10"><TR><TD BGCOLOR="white"><TT>\r
+\97á\81F<BR>\r
+\81@\81@#01902:0.75<BR>\r
+\81@\81@#01911:010101<BR>\r
+\81@\81@#01912:010101010101010101<BR>\r
+<BR>\r
+<UL>\r
+<LI>\82P\82X\8f¬\90ß\96Ú\82©\82ç\82Í\82S\95ª\82Ì\82R\94\8f\8eq\81i\82S\95ª\82Ì\82S\94\8f\8eq\82Ì0.75\94{\81j\82Æ\82È\82è\81A\94\8f\90ü\82Í\8f¬\90ß\90ü\82Æ\8f¬\90ß\90ü\82Ì\8aÔ\82É\82R\96{\82µ\82©\8c»\82ê\82È\82\82È\82è\82Ü\82·\81i\94\8f\90ü\93¯\8em\82Ì\8aÔ\8au\82Í\82S\95ª\82Ì\82S\94\8f\8eq\82Ì\82Æ\82«\82Æ\93¯\82¶\81j\81B<BR>\r
+<LI>\8fã\8bL\82Ì\97á\82Ì\8fê\8d\87\81A\82P\82X\8f¬\90ß\96Ú\82É\83n\83C\83n\83b\83g\82ª\82S\95ª\89¹\95\84\82Å\82R\94\8f\93ü\82è\81A\83X\83l\83A\82Ì\82R\98A\95\84\82ª\82R\94\8f\95ª\93ü\82è\82Ü\82·\81B<BR>\r
+</UL>\r
+</TR></TABLE>\r
+<BR>\r
+<DT><FONT COLOR="red">03\81@[\8dÄ\90¶\83e\83\93\83|(BPM/\82P\95ª\8aÔ\82Ì\82S\95ª\89¹\95\84\82Ì\90\94\81j]</FONT><BR>\r
+<DD>\82»\82Ì\88Ê\92u\82ÅBPM\82ð\95Ï\8dX\82µ\82Ü\82·\81B\92l\82Í16\90i\90\94\82Å\8ew\92è\82µ\82Ü\82·\82Ì\82Å\82²\92\8d\88Ó\89º\82³\82¢\81i36\90i\90\94\82Å\82Í\82 \82è\82Ü\82¹\82ñ\81j\81B\82Ü\82½\81A\82±\82Ì\83`\83\83\83\93\83l\83\8b\82Å\8ew\92è\82µ\82½\92l\82É\82Í #BASEBPM: \82Å\8ew\92è\82µ\82½\92l\82ª\89Á\8eZ\82³\82ê\82Ä\97p\82¢\82ç\82ê\82Ü\82·\81B<BR><BR>\r
+<TABLE BORDER="0" CELLPADDING="10"><TR><TD BGCOLOR="white"><TT>\r
+\97á\81F<BR>\r
+\81@\81@#03103:0070<BR>\r
+\81@\81@\81¨31\8f¬\90ß\96Ú\82Ì3\94\8f\96Ú\82©\82ç\81ABPM\82ð112\82É\95Ï\8dX\82µ\82Ü\82·\81B(BASEBPM=0\82Ì\8e\9e)<BR>\r
+</TR></TABLE>\r
+<BR>\r
+<DT><FONT COLOR="red">04\81@[BGA\81i\83o\83b\83N\83O\83\89\83E\83\93\83h\83A\83j\83\81\81[\83V\83\87\83\93\81j]</FONT><BR>\r
+<DD>\82»\82Ì\88Ê\92u\82ÅBGA\97Ì\88æ\82É\95\\8e¦\82·\82é\89æ\91\9c\82Ì\94Ô\8d\86\81i#BMPzz:\81A#BGAzz:\81A#BGAPANzz: \82Å\90Ý\92è\82µ\82½zz\81j\82ð\8ew\92è\82µ\82Ü\82·\81B<BR>\r
+#BPM\81A#BGA\81A#BGAPAN \8aÔ\82Å\93¯\82¶\94Ô\8d\86\82ª\91¶\8dÝ\82·\82é\8fê\8d\87\82É\82Í\81A#BGAPAN \81¨ #BGA \81¨ #BMP \82Ì\8f\87\82É\97D\90æ\82³\82ê\82Ü\82·\81B<BR>\r
+DTXMania\82Ì\8fê\8d\87\81ABGA\97Ì\88æ\82Ì\83T\83C\83Y\82Í278x355\83h\83b\83g\82Å\82·\81B\82±\82ê\82æ\82è\8f¬\82³\82¢\83T\83C\83Y\82Ì\89æ\91\9c\82Í\81A\8d¶\89E\82Í\92\86\89\9b\91µ\82¦\81A\8fã\89º\82Í\8fã\8bl\82ß\82Å\95\\8e¦\82³\82ê\82Ü\82·\81B\82Í\82Ý\8fo\82µ\82½\97Ì\88æ\82Í\83J\83b\83g\82³\82ê\82Ü\82·\81B\88ê\93x\95\\8e¦\82³\82ê\82½\89æ\91\9c\82Í\8e\9f\82Ì\8ew\92è\82ª\82È\82¢\8cÀ\82è\95\\8e¦\82³\82ê\82½\82Ü\82Ü\82É\82È\82è\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="red">05\81@[Extend Object]</FONT><BR>\r
+<DD>\94ñ\91Î\89\9e\81B\91Î\89\9e\82Ì\97\\92è\82È\82µ\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="red">06\81@[MISS\83A\83j\83\81\82Ì\95Ï\8dX]</FONT><BR>\r
+<DD>\94ñ\91Î\89\9e\81B\81iMISS\89æ\96Ê\82ª\82 \82é\82Æ\82¤\82Á\82Æ\82¨\82µ\82¢\82Ì\82Å\91Î\89\9e\82µ\82½\82\82È\82¢\81c\81B\81j<BR>\r
+<BR>\r
+<DT><FONT COLOR="red">07\81@[\83\8c\83C\83\84BGA]</FONT><BR>\r
+<DD>\82»\82Ì\88Ê\92u\82ÅBGA\97Ì\88æ\82É\95\\8e¦\82·\82é\83\8c\83C\83\84\81[\89æ\91\9c\82Ì\94Ô\8d\86\81i#BMPzz:\81A#BGAzz:\81A#BGAPANzz: \82Å\90Ý\92è\82µ\82½zz\81j\82ð\8ew\92è\82µ\82Ü\82·\81B<BR>\r
+\83\8c\83C\83\84\81[\89æ\91\9c\82Í\81A\83`\83\83\83\93\83l\83\8b\82S\82Å\8ew\92è\82µ\82½\89æ\91\9c\82Ì\8fã\82É\8fd\82Ë\82Ä\95`\89æ\82³\82ê\82é\89æ\91\9c\82Å\82·\81B\82±\82Ì\82Æ\82«\81A\8d\95\81iDirectX\82ª\83r\83b\83g\82ð\8aÛ\82ß\82½\8fã\82Å 0 \82¾\82Æ\82Ý\82È\82·\90F\81j\82ª\93§\89ß\90F\82Æ\82È\82è\82Ü\82·\81B<BR>\r
+#BPM\81A#BGA\81A#BGAPAN \8aÔ\82Å\93¯\82¶\94Ô\8d\86\82ª\91¶\8dÝ\82·\82é\8fê\8d\87\82É\82Í\81A#BGAPAN \81¨ #BGA \81¨ #BMP \82Ì\8f\87\82É\97D\90æ\82³\82ê\82Ü\82·\81B<BR>\r
+DTXMania\82Ì\8fê\8d\87\81ABGA\97Ì\88æ\82Ì\83T\83C\83Y\82Í278x355\83h\83b\83g\82Å\82·\81B\82±\82ê\82æ\82è\8f¬\82³\82¢\83T\83C\83Y\82Ì\89æ\91\9c\82Í\81A\8d¶\89E\82Í\92\86\89\9b\91µ\82¦\81A\8fã\89º\82Í\8fã\8bl\82ß\82Å\95\\8e¦\82³\82ê\82Ü\82·\81B\82Í\82Ý\8fo\82µ\82½\97Ì\88æ\82Í\83J\83b\83g\82³\82ê\82Ü\82·\81B\88ê\93x\95\\8e¦\82³\82ê\82½\83\8c\83C\83\84\81[\89æ\91\9c\82Í\81A\8e\9f\82Ì\83\8c\83C\83\84\81[\82Ì\8ew\92è\82ª\82È\82¢\8cÀ\82è\95\\8e¦\82³\82ê\82½\82Ü\82Ü\82É\82È\82è\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="red">08\81@[\8ag\92£\8dÄ\90¶\83e\83\93\83|(BPM/\82P\95ª\8aÔ\82Ì\82S\95ª\89¹\95\84\82Ì\90\94)]</FONT><BR>\r
+<DD>\82»\82Ì\88Ê\92u\82ÅBPM\82ð\95Ï\8dX\82µ\82Ü\82·\82ª\81ACh.03\82Ì\82æ\82¤\82ÉBPM\82ð16\90i\90\94\95\\8bL\82Å\8ew\92è\82·\82é\82Ì\82Å\82Í\82È\82\81ABPM\82Ì\94Ô\8d\86\81i#BPMzz: \82Å\90Ý\92è\82µ\82½\82â\82Â\82Ì zz \95\94\95ª\81j\82ð\8ew\92è\82µ\82Ü\82·\81B\90®\90\94BPM\82Ì\8fê\8d\87\82É\82ÍCh.03\82ð\81A\8eÀ\90\94BPM\82Ì\8fê\8d\87\82É\82ÍCh.08\82ð\8eg\82¤\82Æ\97Ç\82¢\82Å\82µ\82å\82¤\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="red">09\81`10\81@[BMS\97\\96ñ\83`\83\83\83\93\83l\83\8b]</FONT><BR>\r
+<DD><BR>\r
+<DT><FONT COLOR="red">11\81`19\81@[\83`\83b\83v\94z\92u\81i\83h\83\89\83\80\81j]</FONT><BR>\r
+<DD>\82»\82Ì\88Ê\92u\82É\94z\92u\82·\82é\83h\83\89\83\80\83`\83b\83v\97p\82ÌWAV\94Ô\8d\86(#WAVzz:\82Å\90Ý\92è\82µ\82½\82â\82Â\82Ìzz\82Ì\95\94\95ª)\82ð\8ew\92è\82µ\82Ü\82·\81B\83`\83\83\83\93\83l\83\8b\82Æ\83`\83b\83v\82Í\8e\9f\82Ì\82æ\82¤\82É\91Î\89\9e\82µ\82Ü\82·\81B<BR><BR>\r
+<TABLE BORDER="0" CELLPADDING="10"><TR><TD BGCOLOR="white"><TT>\r
+11 = HiHatClose<BR>\r
+12 = Snare<BR>\r
+13 = BassDrum<BR>\r
+14 = HighTom<BR>\r
+15 = LowTom<BR>\r
+16 = Cymbal<BR>\r
+17 = FloorTom<BR>\r
+18 = HiHatOpen<BR>\r
+19 = RideCymbal<BR>\r
+</TR></TABLE><BR>\r
+\92\8d\88Ó\81F<BR>\r
+\83V\83\93\83o\83\8b\82Æ\83t\83\8d\83A\83^\83\80\82Ì\8f\87\94Ô\82É\82²\92\8d\88Ó\89º\82³\82¢\81B\82Ü\82½BM98\82Å\82Í\81A16=\83X\83N\83\89\83b\83`\83L\81[\81A17=\83t\83\8a\81[\83X\83N\83\89\83b\83`\81A18,19=\97\\96ñ\83`\83\83\83\93\83l\83\8b \82Æ\82È\82Á\82Ä\82¢\82Ü\82·\81B\81j<BR>\r
+<BR>\r
+<DT><FONT COLOR="red">20\81`27\81@[\83`\83b\83v\94z\92u\81i\83M\83^\81[\81j]</FONT><BR>\r
+<DD>\82»\82Ì\88Ê\92u\82É\94z\92u\82·\82é\83M\83^\81[\83`\83b\83v\97p\82ÌWAV\94Ô\8d\86(#WAVzz:\82Å\90Ý\92è\82µ\82½\82â\82Â\82Ìzz\82Ì\95\94\95ª)\82ð\8ew\92è\82µ\82Ü\82·\81B\83`\83\83\83\93\83l\83\8b\82Æ\83`\83b\83v\82Í\8e\9f\82Ì\82æ\82¤\82É\91Î\89\9e\82µ\82Ü\82·\81B<BR><BR>\r
+<TABLE BORDER="0" CELLPADDING="10"><TR><TD BGCOLOR="white"><TT>\r
+20 = \82\98\82\98\82\98 ; GDA,G2D\8c`\8e®\82É\82¨\82¯\82éG0\83`\83\83\83\93\83l\83\8b\81iOPEN\81j<BR>\r
+21 = \82\98\82\98\82a ; \81@\81@\81@\81@\81V\81@\81@\81@\81@ G1\81@\81@\81V<BR>\r
+22 = \82\98\82f\82\98 ; \81@\81@\81@\81@\81V\81@\81@\81@\81@ G2\81@\81@\81V<BR>\r
+23 = \82\98\82f\82a ; \81@\81@\81@\81@\81V\81@\81@\81@\81@ G3\81@\81@\81V<BR>\r
+24 = \82q\82\98\82\98 ; \81@\81@\81@\81@\81V\81@\81@\81@\81@ G4\81@\81@\81V<BR>\r
+25 = \82q\82\98\82a ; \81@\81@\81@\81@\81V\81@\81@\81@\81@ G5\81@\81@\81V<BR>\r
+26 = \82q\82f\82\98 ; \81@\81@\81@\81@\81V\81@\81@\81@\81@ G6\81@\81@\81V<BR>\r
+27 = \82q\82f\82a ; \81@\81@\81@\81@\81V\81@\81@\81@\81@ G7\81@\81@\81V<BR>\r
+</TR></TABLE>\r
+<BR>\r
+<DT><FONT COLOR="red">28\81@[\83\8f\83C\83\8a\83\93\83O\81i\83M\83^\81[\81j]</FONT><BR>\r
+<DD>GDA & G2D \8c`\8e®\83t\83@\83C\83\8b\82É\82¨\82¯\82éGW\83`\83\83\83\93\83l\83\8b\81BDTXMania\82Å\82Í\93Á\82É\89½\82à\82µ\82Ü\82¹\82ñ\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="red">29 [\83t\83\8d\81[\83X\83s\81[\83h(\83M\83^\81[\81j] </FONT><BR>\r
+<DD>\94ñ\91Î\89\9e\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="red">30 [\83t\83\8d\81[\83X\83s\81[\83h(\83h\83\89\83\80\81j]</FONT><BR>\r
+<DD>\94ñ\91Î\89\9e\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="red">31\81`39\81@[\95s\89Â\8e\8b\83I\83u\83W\83F\83N\83g\82Ì\94z\92u]</FONT><BR>\r
+<DD>\82»\82Ì\88Ê\92u\82É\81A\95\88\96Ê\8fã\82É\82Í\8c»\82ê\82¸\8dÄ\90¶\82à\82³\82ê\82È\82¢\81i\83Q\81[\83\80\82É\82Í\91S\82\8aÖ\8cW\82µ\82È\82¢\81j\83`\83b\83v\82ð\94z\92u\82µ\82Ü\82·\81BDTXMania \82Å\82Í\8bó\82¤\82¿\82Ì\8dÛ\82É\82Í\88ê\94Ô\8bß\82¢\83`\83b\83v\82Ì\89¹\82ð\94\90º\82·\82é\82æ\82¤\82É\82È\82Á\82Ä\82¢\82é\82½\82ß\88Ó\90}\93I\82É\81u\88ê\94Ô\8bß\82¢\83`\83b\83v\81v\82ð\95Ï\8dX\82µ\82½\82¢\8fê\8d\87\82â\81A\8bÈ\92\86\82É\83^\83\80\82Í\8fo\82Ä\82±\82È\82¢\82¯\82Ç\83^\83\80\82ð\92@\82¢\82½\81i\8bó\82¤\82¿\82µ\82½\81j\8e\9e\82É\82Í\89½\82©\89¹\82ð\94\90º\82µ\82½\82¢\8fê\8d\87\82È\82Ç\82É\97L\97p\82Å\82·\81B31\81`39 \82Í\81A\82»\82ê\82¼\82ê 11\81`19 \83`\83\83\83\93\83l\83\8b\82É\91Î\89\9e\82·\82é\95s\89Â\8e\8b\83I\83u\83W\83F\83N\83g\82Å\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="red">40\81@[BMS\97\\96ñ\83`\83\83\83\93\83l\83\8b]</FONT><BR>\r
+<DD><BR>\r
+<DT><FONT COLOR="red">41\81`46\81@[2\83v\83\8c\83C\83\84\81[\91¤\95s\89Â\8e\8b\83I\83u\83W\83F\83N\83g\82Ì\94z\92u]</FONT><BR>\r
+<DD>\94ñ\91Î\89\9e\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="red">47\81`49\81@[BMS\97\\96ñ\83`\83\83\83\93\83l\83\8b]</FONT><BR>\r
+<DD><BR>\r
+<DT><FONT COLOR="red">50\81@[\8f¬\90ß\90ü] </FONT><BR>\r
+<DD>\82»\82Ì\88Ê\92u\82É\8f¬\90ß\90ü\82ð\92u\82«\82Ü\82·\81BDTXMania\93à\95\94\8f\88\97\9d\97p\82Å\82·\82ª\81A\82±\82Ì\83`\83\83\83\93\83l\83\8b\82ð\8eg\82Á\82Ä\96¾\8e¦\93I\82É\8f¬\90ß\90ü\82ð\92u\82\82±\82Æ\82à\82Å\82«\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="red">51\81@[\94\8f\90ü]</FONT><BR>\r
+<DD>\82»\82Ì\88Ê\92u\82É\94\8f\90ü\82ð\92u\82«\82Ü\82·\81BDTXMania\93à\95\94\8f\88\97\9d\97p\82Å\82·\82ª\81A\82±\82Ì\83`\83\83\83\93\83l\83\8b\82ð\8eg\82Á\82Ä\96¾\8e¦\93I\82É\94\8f\90ü\82ð\92u\82\82±\82Æ\82à\82Å\82«\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="red">52\81@[MIDI\83h\83\89\83\80\83R\81[\83\89\83X]</FONT><BR>\r
+<DD>\82»\82Ì\88Ê\92u\82ÅMIDI\83`\83\83\83\93\83l\83\8b10\82ÉNoteOn\82ð\91\97\90M\82µ\82Ü\82·\81B #MIDINOTE \82Ì\92l\82É\8aÖ\82í\82ç\82¸\81A\91\97\90M\82³\82ê\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="red">53\81@[\83t\83B\83\8b\83C\83\93]</FONT><BR>\r
+<DD>\83t\83B\83\8b\83C\83\93\82Ì\88Ê\92u\81A\8fI\97¹\88Ê\92u\82ð\8ew\92è\82µ\82Ü\82·\81B01\82Å\83t\83B\83\8b\8aJ\8en\81A02\82Å\83t\83B\83\8b\8fI\97¹\82Æ\82È\82è\82Ü\82·\81B\83t\83B\83\8b\83C\83\93\8fI\97¹\8e\9e\82É\83R\83\93\83{\82ª\82P\88È\8fã\82 \82é\8fê\8d\87\82Í\8a½\90º\82ª\96Â\82è\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="red">54\81@[\93®\89æ\8dÄ\90¶]</FONT><BR>\r
+<DD>\82»\82Ì\88Ê\92u\82Å\82a\82f\82`\97Ì\88æ\82É\95\\8e¦\82·\82éAVI\82Ì\94Ô\8d\86\81i#AVIzz:\82Ü\82½\82Í#VIDEOzz:\82Å\90Ý\92è\82µ\82½\82â\82Â\82Ìzz\82Ì\95\94\95ª\81j\82ð\8ew\92è\82µ\82Ü\82·\81BDTXMania\82Ì\8fê\8d\87\81ABGA\97Ì\88æ\82Ì\83T\83C\83Y\82Í278x355\83h\83b\83g\82Å\82·\81B\82»\82Ì\91O\82É\8dÄ\90¶\82³\82ê\82Ä\82¢\82é\93®\89æ\82Í\83L\83\83\83\93\83Z\83\8b\82³\82ê\82Ü\82·\81B\82Ü\82½\81A\93®\89æ\82æ\82èBGA&LayerBGA\82ª\8fã\88Ê\82É\95`\89æ\82³\82ê\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="red">55\81`59,60 [\83\8c\83C\83\84BGA]</FONT><BR>\r
+<DD>\83`\83\83\83\93\83l\83\8b07\82Æ\93¯\93\99\82Ì\8b@\94\\82ð\92ñ\8b\9f\82µ\82Ü\82·\81B\82½\82¾\82µ\81A\83`\83\83\83\93\83l\83\8b 04, 07 \82à\8aÜ\82ß\82Ä\81A\83`\83\83\83\93\83l\83\8b\94Ô\8d\86\82Ì\91å\82«\82¢\82à\82Ì\82Ù\82Ç\8fã\88Ê\82É\95`\82©\82ê\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="red">61\81`69, 70\81`79, 80\81`89, 90\81`92 [BGM]</FONT><BR>\r
+<DD>\82»\82Ì\88Ê\92u\82Å\8e©\93®\93I\82É\8dÄ\90¶\82·\82éWAV\82Ì\94Ô\8d\86\82ð\8ew\92è\82µ\82Ü\82·\81B\82½\82¾\82µ\81A01 \82Æ\82Í\88á\82¢\81A\82»\82Ì\83`\83\83\83\93\83l\83\8b\82Å\96Â\82Á\82Ä\82¢\82½\88È\91O\82Ì\89¹\82ª\92â\8e~\82³\82ê\82Ä\82©\82ç\8dÄ\90¶\82³\82ê\82Ü\82·\81BGDA & G2D \8c`\8e®\82É\82¨\82¯\82é 01\81`20 \83`\83\83\83\93\83l\83\8b\81iBGM\83p\81[\83g\81j\82ª\82±\82±\82É\93W\8aJ\82³\82ê\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="red">93\81`99 [\97\\96ñ\83`\83\83\83\93\83l\83\8b]</FONT><BR>\r
+<DD><BR>\r
+<DT><FONT COLOR="red">A0\81`A7 [\83`\83b\83v\94z\92u\81i\83x\81[\83X\81j]</FONT><BR>\r
+<DD>\82»\82Ì\88Ê\92u\82É\94z\92u\82·\82é\83M\83^\81[\83`\83b\83v\97p\82ÌWAV\94Ô\8d\86(#WAVzz:\82Å\90Ý\92è\82µ\82½\82â\82Â\82Ìzz\82Ì\95\94\95ª)\82ð\8ew\92è\82µ\82Ü\82·\81B\83`\83\83\83\93\83l\83\8b\82Æ\83`\83b\83v\82Í\8e\9f\82Ì\82æ\82¤\82É\91Î\89\9e\82µ\82Ü\82·\81B<BR><BR>\r
+<TABLE BORDER="0" CELLPADDING="10"><TR><TD BGCOLOR="white"><TT>\r
+A0 = \82\98\82\98\82\98 ; G2D\8c`\8e®\82É\82¨\82¯\82éB0\83`\83\83\83\93\83l\83\8b\81iOPEN\81j<BR>\r
+A1 = \82\98\82\98\82a ;\81@\81@\81@ \81V\81@\81@\81@ B1\81@\81@\81V<BR>\r
+A2 = \82\98\82f\82\98 ; \81@\81@\81@\81V\81@\81@\81@ B2\81@\81@\81V<BR>\r
+A3 = \82\98\82f\82a ; \81@\81@\81@\81V\81@\81@\81@ B3\81@\81@\81V<BR>\r
+A4 = \82q\82\98\82\98 ; \81@\81@\81@\81V\81@\81@\81@ B4\81@\81@\81V<BR>\r
+A5 = \82q\82\98\82a ; \81@\81@\81@\81V\81@\81@\81@ B5\81@\81@\81V<BR>\r
+A6 = \82q\82f\82\98 ; \81@\81@\81@\81V\81@\81@\81@ B6\81@\81@\81V<BR>\r
+A7 = \82q\82f\82a ; \81@\81@\81@\81V\81@\81@\81@ B7\81@\81@\81V<BR>\r
+</TR></TABLE>\r
+<BR>\r
+<DT><FONT COLOR="red">A8\81@[\83\8f\83C\83\8a\83\93\83O\81i\83x\81[\83X\81j]</FONT><BR>\r
+<DD>G2D \8c`\8e®\83t\83@\83C\83\8b\82É\82¨\82¯\82éBW\83`\83\83\83\93\83l\83\8b\81BDTXMania\82Å\82Í\93Á\82É\89½\82à\82µ\82Ü\82¹\82ñ\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="red">B1\81`B9 [\8bó\91Å\82¿\81i\83h\83\89\83\80\81j]</FONT><BR>\r
+<DD>\82»\82Ì\88Ê\92u\82É\94z\92u\82·\82é\8bó\91Å\82¿\83h\83\89\83\80\83`\83b\83v\97p\82ÌWAV\94Ô\8d\86(#WAVzz:\82Å\90Ý\92è\82µ\82½\82â\82Â\82Ìzz\82Ì\95\94\95ª)\82ð\8ew\92è\82µ\82Ü\82·\81B\82»\82Ì\88Ê\92u\88È\8d~\82Ì\8bó\91Å\82¿\89¹\82Í\81A\8ew\92è\82µ\82½WAV\82É\95Ï\8dX\82³\82ê\82Ü\82·\81B\8bÈ\83f\81[\83^\92\86\82É\8bó\91Å\82¿\82Ì\8ew\92è\82ª\82Ð\82Æ\82Â\82à\82È\82¢\8fê\8d\87\82Í\81A\82»\82Ì\83\8c\81[\83\93\82Ì\91O\8cã\82Å\8dÅ\82à\8bß\82¢\83`\83b\83v\82ÌWAV\82ª\8eg\97p\82³\82ê\82Ü\82·\81B\82Ü\82½\81A\8f¬\90ß 0 \82Å\82Ì\8bó\91Å\82¿\89¹\82Í\81A\8dÅ\82à\8f¬\90ß 0 \82É\8bß\82¢\8bó\91Å\82¿\8ew\92èWAV\82ª\93K\97p\82³\82ê\82Ü\82·\81B\83`\83\83\83\93\83l\83\8b\82Æ\83`\83b\83v\82Í\8e\9f\82Ì\82æ\82¤\82É\91Î\89\9e\82µ\82Ü\82·\81B<BR><BR>\r
+<TABLE BORDER="0" CELLPADDING="10"><TR><TD BGCOLOR="white"><TT>\r
+B1 = HiHatClose<BR>\r
+B2 = Snare<BR>\r
+B3 = BassDrum<BR>\r
+B4 = HighTom<BR>\r
+B5 = LowTom<BR>\r
+B6 = Cymbal<BR>\r
+B7 = FloorTom<BR>\r
+B8 = HiHatOpen<BR>\r
+B9 = RideCymbal<BR>\r
+</TR></TABLE><BR>\r
+\92\8d\88Ó\81F<BR>\r
+\83V\83\93\83o\83\8b\82Æ\83t\83\8d\83A\83^\83\80\82Ì\8f\87\94Ô\82É\82²\92\8d\88Ó\89º\82³\82¢\81B\82Ü\82½BM98\82Å\82Í\81A16=\83X\83N\83\89\83b\83`\83L\81[\81A17=\83t\83\8a\81[\83X\83N\83\89\83b\83`\81A18,19=\97\\96ñ\83`\83\83\83\93\83l\83\8b \82Æ\82È\82Á\82Ä\82¢\82Ü\82·\81B\81j<BR>\r
+<BR>\r
+<DT><FONT COLOR="red">BA\81@[\8bó\91Å\82¿\81i\83M\83^\81[\81j]</FONT><BR>\r
+<DD>\82»\82Ì\88Ê\92u\82É\94z\92u\82·\82é\8bó\91Å\82¿\83M\83^\81[\83`\83b\83v\97p\82ÌWAV\94Ô\8d\86(#WAVzz:\82Å\90Ý\92è\82µ\82½\82â\82Â\82Ìzz\82Ì\95\94\95ª)\82ð\8ew\92è\82µ\82Ü\82·\81B\82»\82Ì\88Ê\92u\88È\8d~\82Ì\8bó\91Å\82¿\89¹\82Í\81A\8ew\92è\82µ\82½WAV\82É\95Ï\8dX\82³\82ê\82Ü\82·\81B\8bÈ\83f\81[\83^\92\86\82É\8bó\91Å\82¿\82Ì\8ew\92è\82ª\82Ð\82Æ\82Â\82à\82È\82¢\8fê\8d\87\82Í\81A\82»\82Ì\91O\8cã\82Å\8dÅ\82à\8bß\82¢\83`\83b\83v\82ÌWAV\82ª\8eg\97p\82³\82ê\82Ü\82·\81B\82Ü\82½\81A\8f¬\90ß 0 \82Å\82Ì\8bó\91Å\82¿\89¹\82Í\81A\8dÅ\82à\8f¬\90ß 0 \82É\8bß\82¢\8bó\91Å\82¿\8ew\92èWAV\82ª\93K\97p\82³\82ê\82Ü\82·\81B<BR>\r
+<BR>\r
+<DT><FONT COLOR="red">BB\81@[\8bó\91Å\82¿\81i\83x\81[\83X\81j]</FONT><BR>\r
+<DD>\82»\82Ì\88Ê\92u\82É\94z\92u\82·\82é\8bó\91Å\82¿\83x\81[\83X\83`\83b\83v\97p\82ÌWAV\94Ô\8d\86(#WAVzz:\82Å\90Ý\92è\82µ\82½\82â\82Â\82Ìzz\82Ì\95\94\95ª)\82ð\8ew\92è\82µ\82Ü\82·\81B\82»\82Ì\88Ê\92u\88È\8d~\82Ì\8bó\91Å\82¿\89¹\82Í\81A\8ew\92è\82µ\82½WAV\82É\95Ï\8dX\82³\82ê\82Ü\82·\81B\8bÈ\83f\81[\83^\92\86\82É\8bó\91Å\82¿\82Ì\8ew\92è\82ª\82Ð\82Æ\82Â\82à\82È\82¢\8fê\8d\87\82Í\81A\82»\82Ì\91O\8cã\82Å\8dÅ\82à\8bß\82¢\83`\83b\83v\82ÌWAV\82ª\8eg\97p\82³\82ê\82Ü\82·\81B\82Ü\82½\81A\8f¬\90ß 0 \82Å\82Ì\8bó\91Å\82¿\89¹\82Í\81A\8dÅ\82à\8f¬\90ß 0 \82É\8bß\82¢\8bó\91Å\82¿\8ew\92èWAV\82ª\93K\97p\82³\82ê\82Ü\82·\81B<BR>\r
+<BR>\r
+</DL>\r
+\r
+</BLOCKQUOTE>\r
+\r
+<BR>\r
+[<A HREF="..\index.html">\96ß\82é</A>]\r
+\r
+<!-- \83t\83b\83^\81[ -->\r
+<HR SIZE="8" COLOR="green">\r
+<FONT FACE="Impact">\r
+<DIV ALIGN="right">\r
+(C) 2000-2003 FROM / K.YAMASAKI<BR>\r
+mailto: from@donburi.to<BR>\r
+</DIV>\r
+</FONT>\r
+\r
+</BODY>\r
+</HTML>\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+ <PropertyGroup>\r
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>\r
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>\r
+ <ProductVersion>9.0.30729</ProductVersion>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectGuid>{BCD40908-F3E2-4707-BFAA-1DD99DF6357D}</ProjectGuid>\r
+ <OutputType>Library</OutputType>\r
+ <AppDesignerFolder>Properties</AppDesignerFolder>\r
+ <RootNamespace>FDK</RootNamespace>\r
+ <AssemblyName>FDK</AssemblyName>\r
+ <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>\r
+ <FileAlignment>512</FileAlignment>\r
+ <TargetFrameworkSubset>\r
+ </TargetFrameworkSubset>\r
+ <SignAssembly>false</SignAssembly>\r
+ <AssemblyOriginatorKeyFile>\r
+ </AssemblyOriginatorKeyFile>\r
+ <ApplicationIcon>\r
+ </ApplicationIcon>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">\r
+ <PlatformTarget>x86</PlatformTarget>\r
+ <OutputPath>bin\x86\Debug\</OutputPath>\r
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\r
+ <DocumentationFile>\r
+ </DocumentationFile>\r
+ <UseVSHostingProcess>false</UseVSHostingProcess>\r
+ <NoWarn>0219</NoWarn>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">\r
+ <PlatformTarget>x86</PlatformTarget>\r
+ <OutputPath>bin\x86\Release\</OutputPath>\r
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\r
+ <DocumentationFile>\r
+ </DocumentationFile>\r
+ <UseVSHostingProcess>false</UseVSHostingProcess>\r
+ <NoWarn>0219</NoWarn>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Reference Include="SlimDXc_net20x86_Jun2010, Version=1002.0.10.43, Culture=neutral, PublicKeyToken=bd5d7f5e586685f5, processorArchitecture=x86">\r
+ <SpecificVersion>False</SpecificVersion>\r
+ <HintPath>..\実行時フォルダ\SlimDXc_net20x86_Jun2010.dll</HintPath>\r
+ </Reference>\r
+ <Reference Include="System" />\r
+ <Reference Include="System.Data" />\r
+ <Reference Include="System.Drawing" />\r
+ <Reference Include="System.Windows.Forms" />\r
+ <Reference Include="System.Xml" />\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <Compile Include="コード\01.フレームワーク\Core\Game.cs" />\r
+ <Compile Include="コード\01.フレームワーク\Core\GameClock.cs" />\r
+ <Compile Include="コード\01.フレームワーク\Core\GameTime.cs" />\r
+ <Compile Include="コード\01.フレームワーク\Core\GameWindow.cs">\r
+ <SubType>Form</SubType>\r
+ </Compile>\r
+ <Compile Include="コード\01.フレームワーク\DeviceSettings\ConversionMethods.cs" />\r
+ <Compile Include="コード\01.フレームワーク\DeviceSettings\DeviceSettings.cs" />\r
+ <Compile Include="コード\01.フレームワーク\DeviceSettings\Direct3D9Settings.cs" />\r
+ <Compile Include="コード\01.フレームワーク\Enumeration\Enumeration9.cs" />\r
+ <Compile Include="コード\01.フレームワーク\Properties\Resources.Designer.cs" />\r
+ <Compile Include="コード\01.フレームワーク\Rendering\DeviceCreationException.cs" />\r
+ <Compile Include="コード\01.フレームワーク\Rendering\Direct3D9Manager.cs" />\r
+ <Compile Include="コード\01.フレームワーク\Rendering\Enums.cs" />\r
+ <Compile Include="コード\01.フレームワーク\Rendering\GraphicsDeviceManager.cs" />\r
+ <Compile Include="コード\01.フレームワーク\Rendering\NoCompatibleDevicesException.cs" />\r
+ <Compile Include="コード\01.フレームワーク\Rendering\VertexElementAttribute.cs" />\r
+ <Compile Include="コード\01.フレームワーク\Utilities\Camera.cs" />\r
+ <Compile Include="コード\01.フレームワーク\Utilities\TransformedColoredTexturedVertex.cs" />\r
+ <Compile Include="コード\01.フレームワーク\Utilities\TransformedColoredVertex.cs" />\r
+ <Compile Include="コード\01.フレームワーク\Win32\NativeMethods.cs" />\r
+ <Compile Include="コード\01.フレームワーク\Win32\NativeStructures.cs" />\r
+ <Compile Include="コード\01.フレームワーク\Win32\WindowConstants.cs" />\r
+ <Compile Include="コード\02.入力\CInputJoystick.cs" />\r
+ <Compile Include="コード\02.入力\CInputKeyboard.cs" />\r
+ <Compile Include="コード\02.入力\CInputMIDI.cs" />\r
+ <Compile Include="コード\02.入力\CInputMouse.cs" />\r
+ <Compile Include="コード\02.入力\CInput管理.cs" />\r
+ <Compile Include="コード\02.入力\DeviceConstantConverter.cs" />\r
+ <Compile Include="コード\02.入力\E入力デバイス種別.cs" />\r
+ <Compile Include="コード\02.入力\IInputDevice.cs" />\r
+ <Compile Include="コード\02.入力\STInputEvent.cs" />\r
+ <Compile Include="コード\03.サウンド\CSound.cs" />\r
+ <Compile Include="コード\03.サウンド\CSoundMp3.cs" />\r
+ <Compile Include="コード\03.サウンド\CSoundOggVorbis.cs" />\r
+ <Compile Include="コード\03.サウンド\CSoundRiffWave.cs" />\r
+ <Compile Include="コード\03.サウンド\CSoundXA.cs" />\r
+ <Compile Include="コード\03.サウンド\CSound管理.cs" />\r
+ <Compile Include="コード\04.グラフィック\BitmapUtil.cs" />\r
+ <Compile Include="コード\04.グラフィック\CAvi.cs" />\r
+ <Compile Include="コード\04.グラフィック\頂点フォーマット%28Vertex%29\ColoredVertex.cs" />\r
+ <Compile Include="コード\04.グラフィック\CTexture.cs" />\r
+ <Compile Include="コード\04.グラフィック\CTextureCreateFailedException.cs" />\r
+ <Compile Include="コード\04.グラフィック\頂点フォーマット%28Vertex%29\PositionColoredTexturedVertex.cs" />\r
+ <Compile Include="コード\04.グラフィック\頂点フォーマット%28Vertex%29\TexturedVertex.cs" />\r
+ <Compile Include="コード\04.グラフィック\頂点フォーマット%28Vertex%29\TransformedColoredTexturedVertex.cs" />\r
+ <Compile Include="コード\04.グラフィック\頂点フォーマット%28Vertex%29\TransformedColoredVertex.cs" />\r
+ <Compile Include="Properties\AssemblyInfo.cs" />\r
+ <Compile Include="コード\00.共通\CActivity.cs" />\r
+ <Compile Include="コード\00.共通\CCounter.cs" />\r
+ <Compile Include="コード\00.共通\CFPS.cs" />\r
+ <Compile Include="コード\00.共通\CIniFile.cs" />\r
+ <Compile Include="コード\00.共通\CTimer.cs" />\r
+ <Compile Include="コード\00.共通\CTraceLogListener.cs" />\r
+ <Compile Include="コード\00.共通\CWin32.cs" />\r
+ <Compile Include="コード\00.共通\C変換.cs" />\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <EmbeddedResource Include="コード\01.フレームワーク\Properties\Resources.resx" />\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <Content Include="コード\01.フレームワーク\Resources\sdx_icon_black.ico" />\r
+ </ItemGroup>\r
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />\r
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r
+ Other similar extension points exist, see Microsoft.Common.targets.\r
+ <Target Name="BeforeBuild">\r
+ </Target>\r
+ <Target Name="AfterBuild">\r
+ </Target>\r
+ -->\r
+ <PropertyGroup>\r
+ <PostBuildEvent>copy /Y "$(TargetPath)" "$(SolutionDir)..\実行時フォルダ"\r
+</PostBuildEvent>\r
+ </PropertyGroup>\r
+</Project>
\ No newline at end of file
--- /dev/null
+using System.Reflection;\r
+using System.Runtime.CompilerServices;\r
+using System.Runtime.InteropServices;\r
+using System.Resources;\r
+\r
+// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。\r
+// アセンブリに関連付けられている情報を変更するには、\r
+// これらの属性値を変更してください。\r
+[assembly: AssemblyTitle( "FDKライブラリ" )]\r
+[assembly: AssemblyDescription("")]\r
+[assembly: AssemblyConfiguration("")]\r
+[assembly: AssemblyCompany("")]\r
+[assembly: AssemblyProduct( "FDKライブラリ ver.17" )]\r
+[assembly: AssemblyCopyright("Copyright 2000-2010 FROM / Kenji YAMAZAKI")]\r
+[assembly: AssemblyTrademark("")]\r
+[assembly: AssemblyCulture("")]\r
+//[assembly: AssemblyKeyName( "FROMsCspContainer" )]\r
+\r
+// ComVisible を false に設定すると、その型はこのアセンブリ内で COM コンポーネントから \r
+// 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、\r
+// その型の ComVisible 属性を true に設定してください。\r
+[assembly: ComVisible(false)]\r
+\r
+// 次の GUID は、このプロジェクトが COM に公開される場合の、typelib の ID です\r
+[assembly: Guid("c5f9e698-bec1-4d94-b8a4-3e39b636ccb8")]\r
+\r
+// アセンブリのバージョン情報は、以下の 4 つの値で構成されています:\r
+//\r
+// Major Version\r
+// Minor Version \r
+// Build Number\r
+// Revision\r
+//\r
+// すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を \r
+// 既定値にすることができます:\r
+// [assembly: AssemblyVersion("1.0.*")]\r
+[assembly: AssemblyVersion( "17.0.0.0" )]\r
+[assembly: AssemblyFileVersion( "17.0.0.4" )]\r
+[assembly: NeutralResourcesLanguageAttribute("ja-JP")]\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+\r
+namespace FDK\r
+{\r
+ public class CActivity\r
+ {\r
+ // プロパティ\r
+\r
+ public bool b活性化してる { get; private set; }\r
+ public bool b活性化してない\r
+ {\r
+ get\r
+ {\r
+ return !this.b活性化してる;\r
+ }\r
+ set\r
+ {\r
+ this.b活性化してる = !value;\r
+ }\r
+ }\r
+ public List<CActivity> list子Activities;\r
+\r
+ /// <summary>\r
+ /// <para>初めて On進行描画() を呼び出す場合に true を示す。(On活性化() 内で true にセットされる。)</para>\r
+ /// <para>このフラグは、On活性化() では行えないタイミングのシビアな初期化を On進行描画() で行うために準備されている。利用は必須ではない。</para>\r
+ /// <para>On進行描画() 側では、必要な初期化を追えたら false をセットすること。</para>\r
+ /// </summary>\r
+ protected bool b初めての進行描画 = true;\r
+\r
+ \r
+ // コンストラクタ\r
+\r
+ public CActivity()\r
+ {\r
+ this.b活性化してない = true;\r
+ this.list子Activities = new List<CActivity>();\r
+ }\r
+\r
+\r
+ // ライフサイクルメソッド\r
+\r
+ #region [ 子クラスで必要なもののみ override すること。]\r
+ //-----------------\r
+\r
+ public virtual void On活性化()\r
+ {\r
+ // すでに活性化してるなら何もしない。\r
+ if( this.b活性化してる )\r
+ return;\r
+\r
+ this.b活性化してる = true; // このフラグは、以下の処理をする前にセットする。\r
+\r
+ // 自身のリソースを作成する。\r
+ this.OnManagedリソースの作成();\r
+ this.OnUnmanagedリソースの作成();\r
+\r
+ // すべての子 Activity を活性化する。\r
+ foreach( CActivity activity in this.list子Activities )\r
+ activity.On活性化();\r
+\r
+ // その他の初期化\r
+ this.b初めての進行描画 = true;\r
+ }\r
+ public virtual void On非活性化()\r
+ {\r
+ // 活性化してないなら何もしない。\r
+ if( this.b活性化してない )\r
+ return;\r
+\r
+ // 自身のリソースを解放する。\r
+ this.OnUnmanagedリソースの解放();\r
+ this.OnManagedリソースの解放();\r
+\r
+ // すべての 子Activity を非活性化する。\r
+ foreach( CActivity activity in this.list子Activities )\r
+ activity.On非活性化();\r
+\r
+ this.b活性化してない = true; // このフラグは、以上のメソッドを呼び出した後にセットする。\r
+ }\r
+\r
+ /// <summary>\r
+ /// <para>Managed リソースの作成を行う。</para>\r
+ /// <para>Direct3D デバイスが作成された直後に呼び出されるので、自分が活性化している時に限り、\r
+ /// Managed リソースを作成(または再構築)すること。</para>\r
+ /// <para>いつどのタイミングで呼び出されるか(いつDirect3Dが再作成されるか)分からないので、\r
+ /// いつ何時呼び出されても問題無いようにコーディングしておくこと。</para>\r
+ /// </summary>\r
+ public virtual void OnManagedリソースの作成()\r
+ {\r
+ // 活性化してないなら何もしない。\r
+ if( this.b活性化してない )\r
+ return;\r
+\r
+ // すべての 子Activity の Managed リソースを作成する。\r
+ foreach( CActivity activity in this.list子Activities )\r
+ activity.OnManagedリソースの作成();\r
+ }\r
+\r
+ /// <summary>\r
+ /// <para>Unmanaged リソースの作成を行う。</para>\r
+ /// <para>Direct3D デバイスが作成またはリセットされた直後に呼び出されるので、自分が活性化している時に限り、\r
+ /// Unmanaged リソースを作成(または再構築)すること。</para>\r
+ /// <para>いつどのタイミングで呼び出されるか(いつDirect3Dが再作成またはリセットされるか)分からないので、\r
+ /// いつ何時呼び出されても問題無いようにコーディングしておくこと。</para>\r
+ /// </summary>\r
+ public virtual void OnUnmanagedリソースの作成()\r
+ {\r
+ // 活性化してないなら何もしない。\r
+ if( this.b活性化してない )\r
+ return;\r
+\r
+ // すべての 子Activity の Unmanaged リソースを作成する。\r
+ foreach( CActivity activity in this.list子Activities )\r
+ activity.OnUnmanagedリソースの作成();\r
+ }\r
+ \r
+ /// <summary>\r
+ /// <para>Unmanaged リソースの解放を行う。</para>\r
+ /// <para>Direct3D デバイスの解放直前またはリセット直前に呼び出される。</para>\r
+ /// <para>いつどのタイミングで呼び出されるか(いつDirect3Dが解放またはリセットされるか)分からないので、\r
+ /// いつ何時呼び出されても問題無いようにコーディングしておくこと。</para>\r
+ /// </summary>\r
+ public virtual void OnUnmanagedリソースの解放()\r
+ {\r
+ // 活性化してないなら何もしない。\r
+ if( this.b活性化してない )\r
+ return;\r
+\r
+ // すべての 子Activity の Unmanaged リソースを解放する。\r
+ foreach( CActivity activity in this.list子Activities )\r
+ activity.OnUnmanagedリソースの解放();\r
+ }\r
+\r
+ /// <summary>\r
+ /// <para>Managed リソースの解放を行う。</para>\r
+ /// <para>Direct3D デバイスの解放直前に呼び出される。\r
+ /// (Unmanaged リソースとは異なり、Direct3D デバイスのリセット時には呼び出されない。)</para>\r
+ /// <para>いつどのタイミングで呼び出されるか(いつDirect3Dが解放されるか)分からないので、\r
+ /// いつ何時呼び出されても問題無いようにコーディングしておくこと。</para>\r
+ /// </summary>\r
+ public virtual void OnManagedリソースの解放()\r
+ {\r
+ // 活性化してないなら何もしない。\r
+ if( this.b活性化してない )\r
+ return;\r
+\r
+ // すべての 子Activity の Managed リソースを解放する。\r
+ foreach( CActivity activity in this.list子Activities )\r
+ activity.OnManagedリソースの解放();\r
+ }\r
+\r
+ /// <summary>\r
+ /// <para>進行と描画を行う。(これらは分離されず、この1つのメソッドだけで実装する。)</para>\r
+ /// <para>このメソッドは BeginScene() の後に呼び出されるので、メソッド内でいきなり描画を行ってかまわない。</para>\r
+ /// </summary>\r
+ /// <returns>任意の整数。呼び出し元との整合性を合わせておくこと。</returns>\r
+ public virtual int On進行描画()\r
+ {\r
+ // 活性化してないなら何もしない。\r
+ if( this.b活性化してない )\r
+ return 0;\r
+\r
+\r
+ /* ここで進行と描画を行う。*/\r
+\r
+\r
+ // 戻り値とその意味は子クラスで自由に決めていい。\r
+ return 0;\r
+ }\r
+ \r
+ //-----------------\r
+ #endregion\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+\r
+namespace FDK\r
+{\r
+ /// <summary>\r
+ /// 一定間隔で単純増加する整数(カウント値)を扱う。\r
+ /// </summary>\r
+ public class CCounter\r
+ {\r
+ // 値プロパティ\r
+\r
+ public int n開始値\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+ public int n終了値\r
+ { \r
+ get;\r
+ private set;\r
+ }\r
+ public int n現在の値 \r
+ {\r
+ get;\r
+ set;\r
+ }\r
+ public long n現在の経過時間ms\r
+ { \r
+ get; \r
+ set; \r
+ }\r
+\r
+\r
+ // 状態プロパティ\r
+\r
+ public bool b進行中\r
+ {\r
+ get { return ( this.n現在の経過時間ms != -1 ); }\r
+ }\r
+ public bool b停止中\r
+ {\r
+ get { return !this.b進行中; } \r
+ }\r
+ public bool b終了値に達した\r
+ {\r
+ get { return ( this.n現在の値 >= this.n終了値 ); }\r
+ }\r
+ public bool b終了値に達してない\r
+ {\r
+ get { return !this.b終了値に達した; } \r
+ }\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public CCounter()\r
+ {\r
+ this.timer = null;\r
+ this.n開始値 = 0;\r
+ this.n終了値 = 0;\r
+ this.n間隔ms = 0;\r
+ this.n現在の値 = 0;\r
+ this.n現在の経過時間ms = CTimer.n未使用;\r
+ }\r
+\r
+ /// <summary>生成と同時に開始する。</summary>\r
+ public CCounter( int n開始値, int n終了値, int n間隔ms, CTimer timer )\r
+ : this()\r
+ {\r
+ this.t開始( n開始値, n終了値, n間隔ms, timer );\r
+ }\r
+\r
+\r
+ // 状態操作メソッド\r
+\r
+ /// <summary>\r
+ /// カウントを開始する。\r
+ /// </summary>\r
+ /// <param name="n開始値">最初のカウント値。</param>\r
+ /// <param name="n終了値">最後のカウント値。</param>\r
+ /// <param name="n間隔ms">カウント値を1増加させるのにかける時間(ミリ秒単位)。</param>\r
+ /// <param name="timer">カウントに使用するタイマ。</param>\r
+ public void t開始( int n開始値, int n終了値, int n間隔ms, CTimer timer )\r
+ {\r
+ this.n開始値 = n開始値;\r
+ this.n終了値 = n終了値;\r
+ this.n間隔ms = n間隔ms;\r
+ this.timer = timer;\r
+ this.n現在の経過時間ms = this.timer.n現在時刻;\r
+ this.n現在の値 = n開始値;\r
+ }\r
+\r
+ /// <summary>\r
+ /// 前回の t進行() の呼び出しからの経過時間をもとに、必要なだけカウント値を増加させる。\r
+ /// カウント値が終了値に達している場合は、それ以上増加しない(終了値を維持する)。\r
+ /// </summary>\r
+ public void t進行()\r
+ {\r
+ if( ( this.timer != null ) && ( this.n現在の経過時間ms != CTimer.n未使用 ) )\r
+ {\r
+ long num = this.timer.n現在時刻;\r
+ if( num < this.n現在の経過時間ms )\r
+ this.n現在の経過時間ms = num;\r
+\r
+ while( ( num - this.n現在の経過時間ms ) >= this.n間隔ms )\r
+ {\r
+ if( ++this.n現在の値 > this.n終了値 )\r
+ this.n現在の値 = this.n終了値;\r
+\r
+ this.n現在の経過時間ms += this.n間隔ms;\r
+ }\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// 前回の t進行Loop() の呼び出しからの経過時間をもとに、必要なだけカウント値を増加させる。\r
+ /// カウント値が終了値に達している場合は、次の増加タイミングで開始値に戻る(値がループする)。\r
+ /// </summary>\r
+ public void t進行Loop()\r
+ {\r
+ if( ( this.timer != null ) && ( this.n現在の経過時間ms != CTimer.n未使用 ) )\r
+ {\r
+ long num = this.timer.n現在時刻;\r
+ if( num < this.n現在の経過時間ms )\r
+ this.n現在の経過時間ms = num;\r
+\r
+ while( ( num - this.n現在の経過時間ms ) >= this.n間隔ms )\r
+ {\r
+ if( ++this.n現在の値 > this.n終了値 )\r
+ this.n現在の値 = this.n開始値;\r
+\r
+ this.n現在の経過時間ms += this.n間隔ms;\r
+ }\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// カウントを停止する。\r
+ /// これ以降に t進行() や t進行Loop() を呼び出しても何も処理されない。\r
+ /// </summary>\r
+ public void t停止()\r
+ {\r
+ this.n現在の経過時間ms = CTimer.n未使用;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ 応用:キーの反復入力をエミュレーションする ]\r
+ //-----------------\r
+\r
+ /// <summary>\r
+ /// <para>「bキー押下」引数が true の間中、「tキー処理」デリゲート引数を呼び出す。</para>\r
+ /// <para>ただし、2回目の呼び出しは1回目から 200ms の間を開けてから行い、3回目以降の呼び出しはそれぞれ 30ms の間隔で呼び出す。</para>\r
+ /// <para>「bキー押下」が false の場合は何もせず、呼び出し回数を 0 にリセットする。</para>\r
+ /// </summary>\r
+ /// <param name="bキー押下">キーが押下されている場合は true。</param>\r
+ /// <param name="tキー処理">キーが押下されている場合に実行する処理。</param>\r
+ public void tキー反復( bool bキー押下, DGキー処理 tキー処理 )\r
+ {\r
+ const int n1回目 = 0;\r
+ const int n2回目 = 1;\r
+ const int n3回目以降 = 2;\r
+\r
+ if( bキー押下 )\r
+ {\r
+ switch( this.n現在の値 )\r
+ {\r
+ case n1回目:\r
+\r
+ tキー処理();\r
+ this.n現在の値 = n2回目;\r
+ this.n現在の経過時間ms = this.timer.n現在時刻;\r
+ return;\r
+\r
+ case n2回目:\r
+\r
+ if( ( this.timer.n現在時刻 - this.n現在の経過時間ms ) > 200 )\r
+ {\r
+ tキー処理();\r
+ this.n現在の経過時間ms = this.timer.n現在時刻;\r
+ this.n現在の値 = n3回目以降;\r
+ }\r
+ return;\r
+\r
+ case n3回目以降:\r
+\r
+ if( ( this.timer.n現在時刻 - this.n現在の経過時間ms ) > 30 )\r
+ {\r
+ tキー処理();\r
+ this.n現在の経過時間ms = this.timer.n現在時刻;\r
+ }\r
+ return;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ this.n現在の値 = n1回目;\r
+ }\r
+ }\r
+ public delegate void DGキー処理();\r
+ \r
+ //-----------------\r
+ #endregion\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private CTimer timer;\r
+ private int n間隔ms;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+\r
+namespace FDK\r
+{\r
+ public class CFPS\r
+ {\r
+ // プロパティ\r
+\r
+ public int n現在のFPS\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+ public bool bFPSの値が変化した\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public CFPS()\r
+ {\r
+ this.n現在のFPS = 0;\r
+ this.timer = new CTimer( CTimer.E種別.MultiMedia );\r
+ this.基点時刻ms = this.timer.n現在時刻;\r
+ this.内部FPS = 0;\r
+ this.bFPSの値が変化した = false;\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ public void tカウンタ更新()\r
+ {\r
+ this.timer.t更新();\r
+ this.bFPSの値が変化した = false;\r
+\r
+ const long INTERVAL = 1000;\r
+ while( ( this.timer.n現在時刻 - this.基点時刻ms ) >= INTERVAL )\r
+ {\r
+ this.n現在のFPS = this.内部FPS;\r
+ this.内部FPS = 0;\r
+ this.bFPSの値が変化した = true;\r
+ this.基点時刻ms += INTERVAL;\r
+ }\r
+ this.内部FPS++;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private CTimer timer;\r
+ private long 基点時刻ms;\r
+ private int 内部FPS;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.IO;\r
+using System.Diagnostics;\r
+\r
+namespace FDK\r
+{\r
+ /// <summary>\r
+ /// 汎用的な .iniファイルを扱う。\r
+ /// </summary>\r
+ public class CIniFile\r
+ {\r
+ // プロパティ\r
+\r
+ public string strファイル名 \r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+ public List<CSection> Sections\r
+ {\r
+ get;\r
+ set; \r
+ }\r
+ public class CSection\r
+ {\r
+ public string strセクション名 = "";\r
+ public List<KeyValuePair<string,string>> listパラメータリスト = new List<KeyValuePair<string, string>>();\r
+ }\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public CIniFile()\r
+ {\r
+ this.strファイル名 = "";\r
+ this.Sections = new List<CSection>();\r
+ }\r
+ public CIniFile( string strファイル名 )\r
+ :this()\r
+ {\r
+ this.t読み込み( strファイル名 );\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ public void t読み込み( string strファイル名 )\r
+ {\r
+ this.strファイル名 = strファイル名;\r
+\r
+ StreamReader sr = null;\r
+ CSection section = null;\r
+ try\r
+ {\r
+ sr = new StreamReader( this.strファイル名, Encoding.GetEncoding( "shift-jis" ) ); // ファイルが存在しない場合は例外発生。\r
+\r
+ string line;\r
+ while( ( line = sr.ReadLine() ) != null )\r
+ {\r
+ line = line.Replace( '\t', ' ' ).TrimStart( new char[] { '\t', ' ' } );\r
+ if( string.IsNullOrEmpty( line ) || line[ 0 ] == ';' ) // ';'以降はコメントとして無視\r
+ continue;\r
+\r
+ if( line[ 0 ] == '[' )\r
+ {\r
+ #region [ セクションの変更 ]\r
+ //-----------------------------\r
+ var builder = new StringBuilder( 32 );\r
+ int num = 1;\r
+ while( ( num < line.Length ) && ( line[ num ] != ']' ) )\r
+ builder.Append( line[ num++ ] );\r
+\r
+ // 変数 section が使用中の場合は、List<CSection> に追加して新しい section を作成する。\r
+ if( section != null )\r
+ this.Sections.Add( section );\r
+\r
+ section = new CSection();\r
+ section.strセクション名 = builder.ToString();\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ continue;\r
+ }\r
+\r
+ string[] strArray = line.Split( new char[] { '=' } );\r
+ if( strArray.Length != 2 )\r
+ continue;\r
+\r
+ string key = strArray[ 0 ].Trim();\r
+ string value = strArray[ 1 ].Trim();\r
+\r
+ if( section != null && !string.IsNullOrEmpty( key ) && !string.IsNullOrEmpty( value ) )\r
+ section.listパラメータリスト.Add( new KeyValuePair<string, string>( key, value ) );\r
+ }\r
+\r
+ if( section != null )\r
+ this.Sections.Add( section );\r
+ }\r
+ finally\r
+ {\r
+ if( sr != null )\r
+ sr.Close();\r
+ }\r
+ }\r
+ public void t書き出し( string strファイル名 )\r
+ {\r
+ this.strファイル名 = strファイル名;\r
+ this.t書き出し();\r
+ }\r
+ public void t書き出し()\r
+ {\r
+ StreamWriter sw = null;\r
+ try\r
+ {\r
+ sw = new StreamWriter( this.strファイル名, false, Encoding.GetEncoding( "shift-jis" ) ); // オープン失敗の場合は例外発生。\r
+\r
+ foreach( CSection section in this.Sections )\r
+ {\r
+ sw.WriteLine( "[{0}]", section.strセクション名 );\r
+\r
+ foreach( KeyValuePair<string,string> kvp in section.listパラメータリスト )\r
+ sw.WriteLine( "{0}={1}", kvp.Key, kvp.Value );\r
+ }\r
+ }\r
+ finally\r
+ {\r
+ if( sw != null )\r
+ sw.Close();\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+\r
+namespace FDK\r
+{\r
+ public class CTimer : IDisposable\r
+ {\r
+ // 定数\r
+\r
+ public enum E種別\r
+ {\r
+ GetTickCount = 2,\r
+ MultiMedia = 1,\r
+ PerformanceCounter = 0,\r
+ Unknown = -1\r
+ }\r
+ public const long n未使用 = -1;\r
+\r
+\r
+ // プロパティ\r
+\r
+ public E種別 eタイマ種別 {\r
+ get;\r
+ private set;\r
+ }\r
+ public long nシステム時刻\r
+ {\r
+ get\r
+ {\r
+ switch( this.eタイマ種別 )\r
+ {\r
+ case E種別.PerformanceCounter:\r
+ {\r
+ double num = 0.0;\r
+ if( this.n現在の周波数 != 0L )\r
+ {\r
+ long x = 0L;\r
+ QueryPerformanceCounter( ref x );\r
+ num = ( (double) x ) / ( ( (double) this.n現在の周波数 ) / 1000.0 );\r
+ }\r
+ return (long) num;\r
+ }\r
+ case E種別.MultiMedia:\r
+ return (long) timeGetTime();\r
+\r
+ case E種別.GetTickCount:\r
+ return (long) Environment.TickCount;\r
+ }\r
+ return 0;\r
+ }\r
+ }\r
+ public long n現在時刻\r
+ {\r
+ get\r
+ {\r
+ if( this.n停止数 > 0 )\r
+ return ( this.n一時停止時刻 - this.n前回リセットした時のシステム時刻 );\r
+\r
+ return ( this.n更新時刻 - this.n前回リセットした時のシステム時刻 );\r
+ }\r
+ set\r
+ {\r
+ if( this.n停止数 > 0 )\r
+ this.n前回リセットした時のシステム時刻 = this.n一時停止時刻 - value;\r
+ else\r
+ this.n前回リセットした時のシステム時刻 = this.n更新時刻 - value;\r
+ }\r
+ }\r
+ public long n前回リセットした時のシステム時刻\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+\r
+ \r
+ // コンストラクタ\r
+\r
+ public CTimer()\r
+ : this( E種別.MultiMedia )\r
+ {\r
+ }\r
+ \r
+ public CTimer( E種別 eタイマ種別 )\r
+ {\r
+ this.eタイマ種別 = eタイマ種別;\r
+ this.n前回リセットした時のシステム時刻 = 0;\r
+ this.n更新時刻 = 0;\r
+ this.n停止数 = 0;\r
+ this.n一時停止時刻 = 0;\r
+\r
+ if( n参照カウント[ (int) this.eタイマ種別 ] == 0 )\r
+ {\r
+ switch( this.eタイマ種別 )\r
+ {\r
+ case E種別.PerformanceCounter:\r
+ if( !this.b確認と設定_PerformanceCounter() && !this.b確認と設定_MultiMedia() )\r
+ this.b確認と設定_GetTickCount();\r
+ break;\r
+\r
+ case E種別.MultiMedia:\r
+ if( !this.b確認と設定_MultiMedia() && !this.b確認と設定_PerformanceCounter() )\r
+ this.b確認と設定_GetTickCount();\r
+ break;\r
+\r
+ case E種別.GetTickCount:\r
+ this.b確認と設定_GetTickCount();\r
+ break;\r
+ }\r
+ }\r
+ this.tリセット();\r
+ n参照カウント[ (int) this.eタイマ種別 ]++;\r
+ }\r
+\r
+ \r
+ // メソッド\r
+\r
+ public void tリセット()\r
+ {\r
+ this.t更新();\r
+ this.n前回リセットした時のシステム時刻 = this.n更新時刻;\r
+ this.n一時停止時刻 = this.n更新時刻;\r
+ this.n停止数 = 0;\r
+ }\r
+ public void t一時停止()\r
+ {\r
+ if( this.n停止数 == 0 )\r
+ this.n一時停止時刻 = this.n更新時刻;\r
+\r
+ this.n停止数++;\r
+ }\r
+ public void t更新()\r
+ {\r
+ this.n更新時刻 = this.nシステム時刻;\r
+ }\r
+ public void t再開()\r
+ {\r
+ if( this.n停止数 > 0 )\r
+ {\r
+ this.n停止数--;\r
+ if( this.n停止数 == 0 )\r
+ {\r
+ this.t更新();\r
+ this.n前回リセットした時のシステム時刻 += this.n更新時刻 - this.n一時停止時刻;\r
+ }\r
+ }\r
+ }\r
+\r
+ #region [ IDisposable+α 実装 ]\r
+ //-----------------\r
+ public void Dispose()\r
+ {\r
+ this.Dispose( true );\r
+ GC.SuppressFinalize( this );\r
+ }\r
+ protected virtual void Dispose( bool disposing )\r
+ {\r
+ if( !this.bDisposed )\r
+ {\r
+ this.bDisposed = true;\r
+ if( disposing )\r
+ {\r
+ if( this.eタイマ種別 != E種別.Unknown )\r
+ {\r
+ n参照カウント[ (int) this.eタイマ種別 ]--;\r
+ if( n参照カウント[ (int) this.eタイマ種別 ] == 0 )\r
+ {\r
+ switch( this.eタイマ種別 )\r
+ {\r
+ case E種別.Unknown:\r
+ case E種別.PerformanceCounter:\r
+ case E種別.GetTickCount:\r
+ return;\r
+\r
+ case E種別.MultiMedia:\r
+ timeEndPeriod( this.timeCaps.wPeriodMin );\r
+ return;\r
+ }\r
+ }\r
+ else if( n参照カウント[ (int) this.eタイマ種別 ] < 0 )\r
+ {\r
+ n参照カウント[ (int) this.eタイマ種別 ] = 0;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ \r
+ \r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private bool bDisposed;\r
+ private long n一時停止時刻;\r
+ private long n現在の周波数;\r
+ private long n更新時刻;\r
+ private static int[] n参照カウント = new int[ 3 ];\r
+ private int n停止数;\r
+ private TimeCaps timeCaps;\r
+\r
+ private bool b確認と設定_GetTickCount()\r
+ {\r
+ this.eタイマ種別 = E種別.GetTickCount;\r
+ return true;\r
+ }\r
+ private bool b確認と設定_MultiMedia()\r
+ {\r
+ this.timeCaps = new TimeCaps();\r
+ if( ( timeGetDevCaps( out this.timeCaps, (uint) Marshal.SizeOf( typeof( TimeCaps ) ) ) == 0 ) && ( this.timeCaps.wPeriodMin < 10 ) )\r
+ {\r
+ this.eタイマ種別 = E種別.MultiMedia;\r
+ timeBeginPeriod( this.timeCaps.wPeriodMin );\r
+ return true;\r
+ }\r
+ return false;\r
+ }\r
+ private bool b確認と設定_PerformanceCounter()\r
+ {\r
+ if( QueryPerformanceFrequency( ref this.n現在の周波数 ) != 0 )\r
+ {\r
+ this.eタイマ種別 = E種別.PerformanceCounter;\r
+ return true;\r
+ }\r
+ return false;\r
+ }\r
+ //-----------------\r
+ #endregion\r
+\r
+ #region [ DllImport ]\r
+ //-----------------\r
+ [DllImport( "kernel32.dll" )]\r
+ private static extern short QueryPerformanceCounter( ref long x );\r
+ [DllImport( "kernel32.dll" )]\r
+ private static extern short QueryPerformanceFrequency( ref long x );\r
+ [DllImport( "winmm.dll" )]\r
+ private static extern void timeBeginPeriod( uint x );\r
+ [DllImport( "winmm.dll" )]\r
+ private static extern void timeEndPeriod( uint x );\r
+ [DllImport( "winmm.dll" )]\r
+ private static extern uint timeGetDevCaps( out TimeCaps timeCaps, uint size );\r
+ [DllImport( "winmm.dll" )]\r
+ private static extern uint timeGetTime();\r
+\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ private struct TimeCaps\r
+ {\r
+ public uint wPeriodMin;\r
+ public uint wPeriodMax;\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.IO;\r
+using System.Diagnostics;\r
+\r
+namespace FDK\r
+{\r
+ public class CTraceLogListener : TraceListener\r
+ {\r
+ public CTraceLogListener( StreamWriter stream )\r
+ {\r
+ this.streamWriter = stream;\r
+ }\r
+\r
+ public override void Flush()\r
+ {\r
+ if( this.streamWriter != null )\r
+ {\r
+ try\r
+ {\r
+ this.streamWriter.Flush();\r
+ }\r
+ catch( ObjectDisposedException )\r
+ {\r
+ }\r
+ }\r
+ }\r
+ public override void TraceEvent( TraceEventCache eventCache, string source, TraceEventType eventType, int id, string message )\r
+ {\r
+ if( this.streamWriter != null )\r
+ {\r
+ try\r
+ {\r
+ this.tイベント種別を出力する( eventType );\r
+ this.tインデントを出力する();\r
+ this.streamWriter.WriteLine( message );\r
+ }\r
+ catch( ObjectDisposedException )\r
+ {\r
+ }\r
+ }\r
+ }\r
+ public override void TraceEvent( TraceEventCache eventCache, string source, TraceEventType eventType, int id, string format, params object[] args )\r
+ {\r
+ if( this.streamWriter != null )\r
+ {\r
+ try\r
+ {\r
+ this.tイベント種別を出力する( eventType );\r
+ this.tインデントを出力する();\r
+ this.streamWriter.WriteLine( string.Format( format, args ) );\r
+ }\r
+ catch( ObjectDisposedException )\r
+ {\r
+ }\r
+ }\r
+ }\r
+ public override void Write( string message )\r
+ {\r
+ if( this.streamWriter != null )\r
+ {\r
+ try\r
+ {\r
+ this.streamWriter.Write( message );\r
+ }\r
+ catch( ObjectDisposedException )\r
+ {\r
+ }\r
+ }\r
+ }\r
+ public override void WriteLine( string message )\r
+ {\r
+ if( this.streamWriter != null )\r
+ {\r
+ try\r
+ {\r
+ this.streamWriter.WriteLine( message );\r
+ }\r
+ catch( ObjectDisposedException )\r
+ {\r
+ }\r
+ }\r
+ }\r
+\r
+ protected override void Dispose( bool disposing )\r
+ {\r
+ if( this.streamWriter != null )\r
+ {\r
+ try\r
+ {\r
+ this.streamWriter.Close();\r
+ }\r
+ catch\r
+ {\r
+ }\r
+ this.streamWriter = null;\r
+ }\r
+ base.Dispose( disposing );\r
+ }\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private StreamWriter streamWriter;\r
+\r
+ private void tイベント種別を出力する( TraceEventType eventType )\r
+ {\r
+ if( this.streamWriter != null )\r
+ {\r
+ try\r
+ {\r
+ var now = DateTime.Now;\r
+ this.streamWriter.Write( string.Format( "{0:D4}/{1:D2}/{2:D2} {3:D2}:{4:D2}:{5:D2}.{6:D3} ", new object[] { now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second, now.Millisecond } ) );\r
+ switch( eventType )\r
+ {\r
+ case TraceEventType.Error:\r
+ this.streamWriter.Write( "[ERROR] " );\r
+ return;\r
+\r
+ case ( TraceEventType.Error | TraceEventType.Critical ):\r
+ return;\r
+\r
+ case TraceEventType.Warning:\r
+ this.streamWriter.Write( "[WARNING] " );\r
+ return;\r
+\r
+ case TraceEventType.Information:\r
+ break;\r
+\r
+ default:\r
+ return;\r
+ }\r
+ this.streamWriter.Write( "[INFO] " );\r
+ }\r
+ catch( ObjectDisposedException )\r
+ {\r
+ }\r
+ }\r
+ }\r
+ private void tインデントを出力する()\r
+ {\r
+ if( ( this.streamWriter != null ) && ( base.IndentLevel > 0 ) )\r
+ {\r
+ try\r
+ {\r
+ for( int i = 0; i < base.IndentLevel; i++ )\r
+ this.streamWriter.Write( " " );\r
+ }\r
+ catch( ObjectDisposedException )\r
+ {\r
+ }\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using System.Drawing;\r
+\r
+namespace FDK\r
+{\r
+ public class CWin32\r
+ {\r
+ #region [ Win32 定数 ]\r
+ //-----------------\r
+ public const int BROADCAST_QUERY_DENY = 0x424d5144;\r
+ public const uint CALLBACK_FUNCTION = 0x30000;\r
+ public const uint ES_CONTINUOUS = 0x80000000;\r
+ public const uint ES_DISPLAY_REQUIRED = 2;\r
+ public const uint ES_SYSTEM_REQUIRED = 1;\r
+ public const uint ES_USER_PRESENT = 4;\r
+ public const int GWL_EXSTYLE = -20;\r
+ public const int GWL_HINSTANCE = -6;\r
+ public const int GWL_HWNDPARENT = -8;\r
+ public const int GWL_ID = -12;\r
+ public const int GWL_STYLE = -16;\r
+ public const int GWL_USERDATA = -21;\r
+ public const int GWL_WNDPROC = -4;\r
+ public static readonly IntPtr HWND_NOTOPMOST = new IntPtr( -2 );\r
+ public static readonly IntPtr HWND_TOPMOST = new IntPtr( -1 );\r
+ public const uint MAXPNAMELEN = 0x20;\r
+ public const uint MIM_CLOSE = 0x3c2;\r
+ public const uint MIM_DATA = 0x3c3;\r
+ public const uint MIM_ERROR = 0x3c5;\r
+ public const uint MIM_LONGDATA = 0x3c4;\r
+ public const uint MIM_LONGERROR = 0x3c6;\r
+ public const uint MIM_OPEN = 0x3c1;\r
+ public const int MONITOR_DEFAULTTOPRIMARY = 1;\r
+ public const int PBT_APMQUERYSTANDBY = 1;\r
+ public const int PBT_APMQUERYSUSPEND = 0;\r
+ public const int SC_MONITORPOWER = 0xf170;\r
+ public const int SC_SCREENSAVE = 0xf140;\r
+ public const int SIZE_MAXIMIZED = 2;\r
+ public const int SIZE_MINIMIZED = 1;\r
+ public const int SIZE_RESTORED = 0;\r
+ public const uint SWP_FRAMECHANGED = 0x20;\r
+ public const uint SWP_HIDEWINDOW = 0x80;\r
+ public const uint SWP_NOACTIVATE = 0x10;\r
+ public const uint SWP_NOCOPYBITS = 0x100;\r
+ public const uint SWP_NOMOVE = 2;\r
+ public const uint SWP_NOOWNERZORDER = 0x200;\r
+ public const uint SWP_NOREDRAW = 8;\r
+ public const uint SWP_NOSENDCHANGING = 0x400;\r
+ public const uint SWP_NOSIZE = 1;\r
+ public const uint SWP_NOZORDER = 4;\r
+ public const uint SWP_SHOWWINDOW = 0x40;\r
+ public const int WM_ACTIVATEAPP = 0x1c;\r
+ public const int WM_POWERBROADCAST = 0x218;\r
+ public const int WM_SIZE = 5;\r
+ public const int WM_SYSCOMMAND = 0x112;\r
+ public const int WM_SYSKEYDOWN = 260;\r
+ public const int WPF_RESTORETOMAXIMIZED = 2;\r
+ public const long WS_BORDER = 0x800000L;\r
+ public const long WS_CAPTION = 0xc00000L;\r
+ public const long WS_CHILD = 0x40000000L;\r
+ public const long WS_CHILDWINDOW = 0x40000000L;\r
+ public const long WS_CLIPCHILDREN = 0x2000000L;\r
+ public const long WS_CLIPSIBLINGS = 0x4000000L;\r
+ public const long WS_DISABLED = 0x8000000L;\r
+ public const long WS_DLGFRAME = 0x400000L;\r
+ public const long WS_EX_ACCEPTFILES = 0x10L;\r
+ public const long WS_EX_APPWINDOW = 0x40000L;\r
+ public const long WS_EX_CLIENTEDGE = 0x200L;\r
+ public const long WS_EX_COMPOSITED = 0x2000000L;\r
+ public const long WS_EX_CONTEXTHELP = 0x400L;\r
+ public const long WS_EX_CONTROLPARENT = 0x10000L;\r
+ public const long WS_EX_DLGMODALFRAME = 1L;\r
+ public const long WS_EX_LAYERED = 0x80000L;\r
+ public const long WS_EX_LAYOUTRTL = 0x400000L;\r
+ public const long WS_EX_LEFT = 0L;\r
+ public const long WS_EX_LEFTSCROLLBAR = 0x4000L;\r
+ public const long WS_EX_LTRREADING = 0L;\r
+ public const long WS_EX_MDICHILD = 0x40L;\r
+ public const long WS_EX_NOACTIVATE = 0x8000000L;\r
+ public const long WS_EX_NOINHERITLAYOUT = 0x100000L;\r
+ public const long WS_EX_NOPARENTNOTIFY = 4L;\r
+ public const long WS_EX_OVERLAPPEDWINDOW = 0x300L;\r
+ public const long WS_EX_PALETTEWINDOW = 0x188L;\r
+ public const long WS_EX_RIGHT = 0x1000L;\r
+ public const long WS_EX_RIGHTSCROLLBAR = 0L;\r
+ public const long WS_EX_RTLREADING = 0x2000L;\r
+ public const long WS_EX_STATICEDGE = 0x20000L;\r
+ public const long WS_EX_TOOLWINDOW = 0x80L;\r
+ public const long WS_EX_TOPMOST = 8L;\r
+ public const long WS_EX_TRANSPARENT = 0x20L;\r
+ public const long WS_EX_WINDOWEDGE = 0x100L;\r
+ public const long WS_GROUP = 0x20000L;\r
+ public const long WS_HSCROLL = 0x100000L;\r
+ public const long WS_ICONIC = 0x20000000L;\r
+ public const long WS_MAXIMIZE = 0x1000000L;\r
+ public const long WS_MAXIMIZEBOX = 0x10000L;\r
+ public const long WS_MINIMIZE = 0x20000000L;\r
+ public const long WS_MINIMIZEBOX = 0x20000L;\r
+ public const long WS_OVERLAPPED = 0L;\r
+ public const long WS_OVERLAPPEDWINDOW = 0xcf0000L;\r
+ public const long WS_POPUP = 0x80000000L;\r
+ public const long WS_POPUPWINDOW = 0x80880000L;\r
+ public const long WS_SIZEBOX = 0x40000L;\r
+ public const long WS_SYSMENU = 0x80000L;\r
+ public const long WS_TABSTOP = 0x10000L;\r
+ public const long WS_THICKFRAME = 0x40000L;\r
+ public const long WS_TILED = 0L;\r
+ public const long WS_TILEDWINDOW = 0xcf0000L;\r
+ public const long WS_VISIBLE = 0x10000000L;\r
+ public const long WS_VSCROLL = 0x200000L;\r
+\r
+ public enum EShowWindow\r
+ {\r
+ ForceMinimize = 11,\r
+ Hide = 0,\r
+ Maximize = 3,\r
+ Minimize = 6,\r
+ Normal = 1,\r
+ Restore = 9,\r
+ Show = 5,\r
+ ShowDefault = 10,\r
+ ShowMaximized = 3,\r
+ ShowMinimized = 2,\r
+ ShowMinNoActive = 7,\r
+ ShowNA = 8,\r
+ ShowNoActivate = 4\r
+ }\r
+ public enum MMSYSERR\r
+ {\r
+ NOERROR,\r
+ ERROR,\r
+ BADDEVICEID,\r
+ NOTENABLED,\r
+ ALLOCATED,\r
+ INVALHANDLE,\r
+ NODRIVER,\r
+ NOMEM,\r
+ NOTSUPPORTED,\r
+ BADERRNUM,\r
+ INVALFLAG,\r
+ INVALPARAM,\r
+ HANDLEBUSY,\r
+ INVALIDALIAS,\r
+ BADDB,\r
+ KEYNOTFOUND,\r
+ READERROR,\r
+ WRITEERROR,\r
+ DELETEERROR,\r
+ VALNOTFOUND,\r
+ NODRIVERCB,\r
+ MOREDATA\r
+ }\r
+ //-----------------\r
+ #endregion\r
+\r
+ #region [ Win32 関数 ]\r
+ //-----------------\r
+ [return: MarshalAs( UnmanagedType.Bool )]\r
+ [DllImport( "user32.dll", CharSet = CharSet.Auto, SetLastError = true )]\r
+ public static extern bool AdjustWindowRect( ref RECT lpRect, uint dwStyle, [MarshalAs( UnmanagedType.Bool )] bool bMenu );\r
+ [return: MarshalAs( UnmanagedType.Bool )]\r
+ [DllImport( "user32.dll", CharSet = CharSet.Auto, SetLastError = true )]\r
+ public static extern bool GetClientRect( IntPtr hWnd, out RECT lpRect );\r
+ [DllImport( "user32.dll", CharSet = CharSet.Auto, SetLastError = true )]\r
+ public static extern uint GetWindowLong( IntPtr hWnd, int nIndex );\r
+ [return: MarshalAs( UnmanagedType.Bool )]\r
+ [DllImport( "user32.dll", CharSet = CharSet.Auto, SetLastError = true )]\r
+ public static extern bool GetWindowPlacement( IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl );\r
+ [return: MarshalAs( UnmanagedType.Bool )]\r
+ [DllImport( "user32.dll", CharSet = CharSet.Auto )]\r
+ public static extern bool IsIconic( IntPtr hWnd );\r
+ [return: MarshalAs( UnmanagedType.Bool )]\r
+ [DllImport( "user32.dll", CharSet = CharSet.Auto )]\r
+ public static extern bool IsWindowVisible( IntPtr hWnd );\r
+ [return: MarshalAs( UnmanagedType.Bool )]\r
+ [DllImport( "user32.dll", CharSet = CharSet.Auto )]\r
+ public static extern bool IsZoomed( IntPtr hWnd );\r
+ [DllImport( "winmm.dll" )]\r
+ public static extern uint midiInClose( uint hMidiIn );\r
+ [DllImport( "winmm.dll" )]\r
+ public static extern uint midiInGetDevCaps( uint uDeviceID, ref MIDIINCAPS lpMidiInCaps, uint cbMidiInCaps );\r
+ [DllImport( "winmm.dll" )]\r
+ public static extern uint midiInGetID( uint hMidiIn, ref uint puDeviceID );\r
+ [DllImport( "winmm.dll" )]\r
+ public static extern uint midiInGetNumDevs();\r
+ [DllImport( "winmm.dll" )]\r
+ public static extern uint midiInOpen( ref uint phMidiIn, uint uDeviceID, MidiInProc dwCallback, int dwInstance, int fdwOpen );\r
+ [DllImport( "winmm.dll" )]\r
+ public static extern uint midiInReset( uint hMidiIn );\r
+ [DllImport( "winmm.dll" )]\r
+ public static extern uint midiInStart( uint hMidiIn );\r
+ [DllImport( "winmm.dll" )]\r
+ public static extern uint midiInStop( uint hMidiIn );\r
+ [DllImport( "user32.dll", CharSet = CharSet.Auto )]\r
+ public static extern IntPtr MonitorFromWindow( IntPtr hwnd, uint dwFlags );\r
+ [return: MarshalAs( UnmanagedType.Bool )]\r
+ [DllImport( "user32.dll", CharSet = CharSet.Auto )]\r
+ public static extern bool PeekMessage( out WindowMessage message, IntPtr hwnd, uint messageFilterMin, uint messageFilterMax, uint flags );\r
+ [DllImport( "kernel32.dll", CharSet = CharSet.Auto )]\r
+ public static extern uint SetThreadExecutionState( uint esFlags );\r
+ [DllImport( "user32.dll", CharSet = CharSet.Auto, SetLastError = true )]\r
+ public static extern uint SetWindowLong( IntPtr hWnd, int nIndex, uint dwNewLong );\r
+ [return: MarshalAs( UnmanagedType.Bool )]\r
+ [DllImport( "user32.dll", CharSet = CharSet.Auto, SetLastError = true )]\r
+ public static extern bool SetWindowPlacement( IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl );\r
+ [return: MarshalAs( UnmanagedType.Bool )]\r
+ [DllImport( "user32.dll", CharSet = CharSet.Auto, SetLastError = true )]\r
+ public static extern bool SetWindowPos( IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags );\r
+ [return: MarshalAs( UnmanagedType.Bool )]\r
+ [DllImport( "user32.dll", CharSet = CharSet.Auto )]\r
+ public static extern bool ShowWindow( IntPtr hWnd, EShowWindow nCmdShow );\r
+ [return: MarshalAs( UnmanagedType.Bool )]\r
+ [DllImport( "user32.dll", CharSet = CharSet.Auto, SetLastError = true )]\r
+ public static extern bool SystemParametersInfo( uint uiAction, uint uiParam, IntPtr pvParam, uint fWinIni );\r
+ //-----------------\r
+ #endregion\r
+\r
+ #region [ Win32 構造体 ]\r
+ //-----------------\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ private struct FILTERKEYS\r
+ {\r
+ public int cbSize;\r
+ public int dwFlags;\r
+ }\r
+\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ public struct MIDIINCAPS\r
+ {\r
+ public ushort wMid;\r
+ public ushort wPid;\r
+ public uint vDriverVersion;\r
+ [MarshalAs( UnmanagedType.ByValTStr, SizeConst = 0x20 )]\r
+ public string szPname;\r
+ public uint dwSupport;\r
+ }\r
+\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ public struct RECT\r
+ {\r
+ public int left;\r
+ public int top;\r
+ public int right;\r
+ public int bottom;\r
+ }\r
+\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ private struct STICKYKEYS\r
+ {\r
+ public int cbSize;\r
+ public int dwFlags;\r
+ }\r
+\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ private struct TOGGLEKEYS\r
+ {\r
+ public int cbSize;\r
+ public int dwFlags;\r
+ }\r
+\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ public struct WAVEFORMATEX\r
+ {\r
+ public ushort wFormatTag;\r
+ public ushort nChannels;\r
+ public uint nSamplesPerSec;\r
+ public uint nAvgBytesPerSec;\r
+ public ushort nBlockAlign;\r
+ public ushort wBitsPerSample;\r
+ public ushort cbSize;\r
+ }\r
+\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ public struct WindowMessage\r
+ {\r
+ public IntPtr hWnd;\r
+ public uint msg;\r
+ public IntPtr wParam;\r
+ public IntPtr lParam;\r
+ public uint time;\r
+ public Point p;\r
+ }\r
+\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ public struct WINDOWPLACEMENT\r
+ {\r
+ public int length;\r
+ public int flags;\r
+ public CWin32.EShowWindow showCmd;\r
+ public Point ptMinPosition;\r
+ public Point ptMaxPosition;\r
+ public CWin32.RECT rcNormalPosition;\r
+ public static int Length\r
+ {\r
+ get\r
+ {\r
+ return Marshal.SizeOf( typeof( CWin32.WINDOWPLACEMENT ) );\r
+ }\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+\r
+ \r
+ // プロパティ\r
+\r
+ public static bool bアプリがIdle状態である\r
+ {\r
+ get\r
+ {\r
+ WindowMessage message;\r
+ return !PeekMessage( out message, IntPtr.Zero, 0, 0, 0 );\r
+ }\r
+ }\r
+\r
+\r
+ // キーボードの特殊機能の制御\r
+\r
+ public static class Cトグルキー機能\r
+ {\r
+ public static void t無効化する()\r
+ {\r
+ if( ( stored.dwFlags & 1L ) == 0L )\r
+ {\r
+ CWin32.TOGGLEKEYS structure = new CWin32.TOGGLEKEYS();\r
+ structure.dwFlags = stored.dwFlags;\r
+ structure.cbSize = stored.cbSize;\r
+ structure.dwFlags &= -5;\r
+ structure.dwFlags &= -9;\r
+ int cb = Marshal.SizeOf( structure );\r
+ IntPtr ptr = Marshal.AllocCoTaskMem( cb );\r
+ Marshal.StructureToPtr( structure, ptr, false );\r
+ CWin32.SystemParametersInfo( 0x35, (uint) cb, ptr, 0 );\r
+ Marshal.FreeCoTaskMem( ptr );\r
+ }\r
+ }\r
+ public static void t復元する()\r
+ {\r
+ int cb = Marshal.SizeOf( stored );\r
+ IntPtr ptr = Marshal.AllocCoTaskMem( cb );\r
+ Marshal.StructureToPtr( stored, ptr, false );\r
+ CWin32.SystemParametersInfo( 0x35, (uint) cb, ptr, 0 );\r
+ Marshal.FreeCoTaskMem( ptr );\r
+ }\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ static Cトグルキー機能()\r
+ {\r
+ int cb = Marshal.SizeOf( stored );\r
+ IntPtr ptr = Marshal.AllocCoTaskMem( cb );\r
+ Marshal.StructureToPtr( stored, ptr, false );\r
+ CWin32.SystemParametersInfo( 0x34, (uint) cb, ptr, 0 );\r
+ stored = (CWin32.TOGGLEKEYS) Marshal.PtrToStructure( ptr, typeof( CWin32.TOGGLEKEYS ) );\r
+ Marshal.FreeCoTaskMem( ptr );\r
+ }\r
+\r
+ private const uint SPI_GETTOGGLEKEYS = 0x34;\r
+ private const uint SPI_SETTOGGLEKEYS = 0x35;\r
+ private static CWin32.TOGGLEKEYS stored = new CWin32.TOGGLEKEYS();\r
+ private const uint TKF_CONFIRMHOTKEY = 8;\r
+ private const uint TKF_HOTKEYACTIVE = 4;\r
+ private const uint TKF_TOGGLEKEYSON = 1;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+ public static class Cフィルタキー機能\r
+ {\r
+ public static void t無効化する()\r
+ {\r
+ if( ( stored.dwFlags & 1L ) == 0L )\r
+ {\r
+ CWin32.FILTERKEYS structure = new CWin32.FILTERKEYS();\r
+ structure.dwFlags = stored.dwFlags;\r
+ structure.cbSize = stored.cbSize;\r
+ structure.dwFlags &= -5;\r
+ structure.dwFlags &= -9;\r
+ int cb = Marshal.SizeOf( structure );\r
+ IntPtr ptr = Marshal.AllocCoTaskMem( cb );\r
+ Marshal.StructureToPtr( structure, ptr, false );\r
+ CWin32.SystemParametersInfo( 0x3b, (uint) cb, ptr, 0 );\r
+ Marshal.FreeCoTaskMem( ptr );\r
+ }\r
+ }\r
+ public static void t復元する()\r
+ {\r
+ int cb = Marshal.SizeOf( stored );\r
+ IntPtr ptr = Marshal.AllocCoTaskMem( cb );\r
+ Marshal.StructureToPtr( stored, ptr, false );\r
+ CWin32.SystemParametersInfo( 0x3b, (uint) cb, ptr, 0 );\r
+ Marshal.FreeCoTaskMem( ptr );\r
+ }\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ static Cフィルタキー機能()\r
+ {\r
+ stored.cbSize = 0;\r
+ stored.dwFlags = 0;\r
+ int cb = Marshal.SizeOf( stored );\r
+ IntPtr ptr = Marshal.AllocCoTaskMem( cb );\r
+ Marshal.StructureToPtr( stored, ptr, false );\r
+ CWin32.SystemParametersInfo( 50, (uint) cb, ptr, 0 );\r
+ stored = (CWin32.FILTERKEYS) Marshal.PtrToStructure( ptr, typeof( CWin32.FILTERKEYS ) );\r
+ Marshal.FreeCoTaskMem( ptr );\r
+ }\r
+ \r
+ private const uint FKF_CONFIRMHOTKEY = 8;\r
+ private const uint FKF_FILTERKEYSON = 1;\r
+ private const uint FKF_HOTKEYACTIVE = 4;\r
+ private const uint SPI_GETFILTERKEYS = 50;\r
+ private const uint SPI_SETFILTERKEYS = 0x3b;\r
+ private static CWin32.FILTERKEYS stored = new CWin32.FILTERKEYS();\r
+ //-----------------\r
+ #endregion\r
+ }\r
+ public static class C固定キー機能\r
+ {\r
+ public static void t無効化する()\r
+ {\r
+ if( ( stored.dwFlags & 1L ) == 0L )\r
+ {\r
+ CWin32.STICKYKEYS structure = new CWin32.STICKYKEYS();\r
+ structure.dwFlags = stored.dwFlags;\r
+ structure.cbSize = stored.cbSize;\r
+ structure.dwFlags &= -5;\r
+ structure.dwFlags &= -9;\r
+ int cb = Marshal.SizeOf( structure );\r
+ IntPtr ptr = Marshal.AllocCoTaskMem( cb );\r
+ Marshal.StructureToPtr( structure, ptr, false );\r
+ CWin32.SystemParametersInfo( 0x3b, (uint) cb, ptr, 0 );\r
+ Marshal.FreeCoTaskMem( ptr );\r
+ }\r
+ }\r
+ public static void t復元する()\r
+ {\r
+ int cb = Marshal.SizeOf( stored );\r
+ IntPtr ptr = Marshal.AllocCoTaskMem( cb );\r
+ Marshal.StructureToPtr( stored, ptr, false );\r
+ CWin32.SystemParametersInfo( 0x3b, (uint) cb, ptr, 0 );\r
+ Marshal.FreeCoTaskMem( ptr );\r
+ }\r
+ \r
+ #region [ private ]\r
+ //-----------------\r
+ static C固定キー機能()\r
+ {\r
+ stored.cbSize = 0;\r
+ stored.dwFlags = 0;\r
+ int cb = Marshal.SizeOf( stored );\r
+ IntPtr ptr = Marshal.AllocCoTaskMem( cb );\r
+ Marshal.StructureToPtr( stored, ptr, false );\r
+ CWin32.SystemParametersInfo( 0x3a, (uint) cb, ptr, 0 );\r
+ stored = (CWin32.STICKYKEYS) Marshal.PtrToStructure( ptr, typeof( CWin32.STICKYKEYS ) );\r
+ Marshal.FreeCoTaskMem( ptr );\r
+ }\r
+\r
+ private const uint SKF_CONFIRMHOTKEY = 8;\r
+ private const uint SKF_HOTKEYACTIVE = 4;\r
+ private const uint SKF_STICKYKEYSON = 1;\r
+ private const uint SPI_GETSTICKYKEYS = 0x3a;\r
+ private const uint SPI_SETSTICKYKEYS = 0x3b;\r
+ private static CWin32.STICKYKEYS stored = new CWin32.STICKYKEYS();\r
+ //-----------------\r
+ #endregion\r
+ }\r
+\r
+\r
+ // Win32 メッセージ処理デリゲート\r
+\r
+ public delegate void MidiInProc( uint hMidiIn, uint wMsg, int dwInstance, int dwParam1, int dwParam2 );\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+\r
+namespace FDK\r
+{\r
+ public class C変換\r
+ {\r
+ // メソッド\r
+\r
+ public static bool bONorOFF( char c )\r
+ {\r
+ return ( c != '0' );\r
+ }\r
+\r
+ public static double DegreeToRadian( double angle )\r
+ {\r
+ return ( ( Math.PI * angle ) / 180.0 );\r
+ }\r
+ public static double RadianToDegree( double angle )\r
+ {\r
+ return ( angle * 180.0 / Math.PI );\r
+ }\r
+ public static float DegreeToRadian( float angle )\r
+ {\r
+ return (float) DegreeToRadian( (double) angle );\r
+ }\r
+ public static float RadianToDegree( float angle )\r
+ {\r
+ return (float) RadianToDegree( (double) angle );\r
+ }\r
+\r
+ public static int n値を範囲内に丸めて返す( int n値, int n最小値, int n最大値 )\r
+ {\r
+ if( n値 < n最小値 )\r
+ return n最小値;\r
+\r
+ if( n値 > n最大値 )\r
+ return n最大値;\r
+\r
+ return n値;\r
+ }\r
+ public static int n値を文字列から取得して範囲内に丸めて返す( string str数値文字列, int n最小値, int n最大値, int n取得失敗時のデフォルト値 )\r
+ {\r
+ int num;\r
+ if( ( int.TryParse( str数値文字列, out num ) && ( num >= n最小値 ) ) && ( num <= n最大値 ) )\r
+ return num;\r
+\r
+ return n取得失敗時のデフォルト値;\r
+ }\r
+ public static int n値を文字列から取得して返す( string str数値文字列, int n取得失敗時のデフォルト値 )\r
+ {\r
+ int num;\r
+ if( !int.TryParse( str数値文字列, out num ) )\r
+ num = n取得失敗時のデフォルト値;\r
+\r
+ return num;\r
+ }\r
+ \r
+ public static int n16進数2桁の文字列を数値に変換して返す( string num )\r
+ {\r
+ if( num.Length < 2 )\r
+ return -1;\r
+\r
+ int index = _16進数文字.IndexOf( num[ 0 ] );\r
+ if( index < 0 )\r
+ return -1;\r
+\r
+ if( index >= 16 )\r
+ index -= 6;\r
+\r
+ int num3 = _16進数文字.IndexOf( num[ 1 ] );\r
+ if( num3 < 0 )\r
+ return -1;\r
+\r
+ if( num3 >= 16 )\r
+ num3 -= 6;\r
+\r
+ return ( ( index * 16 ) + num3 );\r
+ }\r
+ public static int n36進数2桁の文字列を数値に変換して返す( string num )\r
+ {\r
+ if( num.Length < 2 )\r
+ return -1;\r
+\r
+ int index = _36進数文字.IndexOf( num[ 0 ] );\r
+ if( index < 0 )\r
+ return -1;\r
+\r
+ if( index >= 0x24 )\r
+ index -= 0x1a;\r
+\r
+ int num3 = _36進数文字.IndexOf( num[ 1 ] );\r
+ if( num3 < 0 )\r
+ return -1;\r
+\r
+ if( num3 >= 0x24 )\r
+ num3 -= 0x1a;\r
+\r
+ return ( ( index * 0x24 ) + num3 );\r
+ }\r
+ public static int n小節番号の文字列3桁を数値に変換して返す( string num )\r
+ {\r
+ if( num.Length >= 3 )\r
+ {\r
+ int index = _36進数文字.IndexOf( num[ 0 ] );\r
+ if( index < 0 )\r
+ return -1;\r
+\r
+ if( index >= 0x24 )\r
+ index -= 0x1a;\r
+\r
+ int num3 = _16進数文字.IndexOf( num[ 1 ] );\r
+ if( ( num3 < 0 ) || ( num3 > 9 ) )\r
+ return -1;\r
+\r
+ int num4 = _16進数文字.IndexOf( num[ 2 ] );\r
+ if( ( num4 >= 0 ) && ( num4 <= 9 ) )\r
+ return ( ( ( index * 100 ) + ( num3 * 10 ) ) + num4 );\r
+ }\r
+ return -1;\r
+ }\r
+ \r
+ public static string str小節番号を文字列3桁に変換して返す( int num )\r
+ {\r
+ if( ( num < 0 ) || ( num >= 0xe10 ) )\r
+ return "000";\r
+\r
+ int num2 = num / 100;\r
+ int num3 = ( num % 100 ) / 10;\r
+ int num4 = ( num % 100 ) % 10;\r
+ char ch = _36進数文字[ num2 ];\r
+ char ch2 = _16進数文字[ num3 ];\r
+ char ch3 = _16進数文字[ num4 ];\r
+ return ( ch.ToString() + ch2.ToString() + ch3.ToString() );\r
+ }\r
+ public static string str数値を16進数2桁に変換して返す( int num )\r
+ {\r
+ if( ( num < 0 ) || ( num >= 0x100 ) )\r
+ return "00";\r
+\r
+ char ch = _16進数文字[ num / 0x10 ];\r
+ char ch2 = _16進数文字[ num % 0x10 ];\r
+ return ( ch.ToString() + ch2.ToString() );\r
+ }\r
+ public static string str数値を36進数2桁に変換して返す( int num )\r
+ {\r
+ if( ( num < 0 ) || ( num >= 0x510 ) )\r
+ return "00";\r
+\r
+ char ch = _36進数文字[ num / 0x24 ];\r
+ char ch2 = _36進数文字[ num % 0x24 ];\r
+ return ( ch.ToString() + ch2.ToString() );\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+\r
+ // private コンストラクタでインスタンス生成を禁止する。\r
+ private C変換()\r
+ {\r
+ }\r
+\r
+ private static readonly string _16進数文字 = "0123456789ABCDEFabcdef";\r
+ private static readonly string _36進数文字 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";\r
+ //-----------------\r
+ #endregion\r
+ } \r
+}\r
--- /dev/null
+/*\r
+* Copyright (c) 2007-2009 SlimDX Group\r
+* \r
+* Permission is hereby granted, free of charge, to any person obtaining a copy\r
+* of this software and associated documentation files (the "Software"), to deal\r
+* in the Software without restriction, including without limitation the rights\r
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+* copies of the Software, and to permit persons to whom the Software is\r
+* furnished to do so, subject to the following conditions:\r
+* \r
+* The above copyright notice and this permission notice shall be included in\r
+* all copies or substantial portions of the Software.\r
+* \r
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+* THE SOFTWARE.\r
+*/\r
+using System;\r
+using System.ComponentModel;\r
+using System.Threading;\r
+using System.Windows.Forms;\r
+using SlimDX;\r
+using SlimDX.Direct3D9;\r
+using System.Collections.ObjectModel;\r
+\r
+namespace SampleFramework\r
+{\r
+ /// <summary>\r
+ /// Presents an easy to use wrapper for making games and samples.\r
+ /// </summary>\r
+ public abstract class Game : IDisposable\r
+ {\r
+ GameClock clock = new GameClock();\r
+ GameTime gameTime = new GameTime();\r
+ TimeSpan maximumElapsedTime = TimeSpan.FromMilliseconds(500.0);\r
+ TimeSpan totalGameTime;\r
+ TimeSpan accumulatedElapsedGameTime;\r
+ TimeSpan lastFrameElapsedGameTime;\r
+ TimeSpan lastFrameElapsedRealTime;\r
+ TimeSpan targetElapsedTime = TimeSpan.FromTicks(166667);\r
+ TimeSpan inactiveSleepTime = TimeSpan.FromMilliseconds(20.0);\r
+ int updatesSinceRunningSlowly1 = int.MaxValue;\r
+ int updatesSinceRunningSlowly2 = int.MaxValue;\r
+ bool forceElapsedTimeToZero;\r
+ bool drawRunningSlowly;\r
+ long lastUpdateFrame;\r
+ float lastUpdateTime;\r
+\r
+ /// <summary>\r
+ /// Occurs when the game is disposed.\r
+ /// </summary>\r
+ public event EventHandler Disposed;\r
+\r
+ /// <summary>\r
+ /// Occurs when the game is activated.\r
+ /// </summary>\r
+ public event EventHandler Activated;\r
+\r
+ /// <summary>\r
+ /// Occurs when the game is deactivated.\r
+ /// </summary>\r
+ public event EventHandler Deactivated;\r
+\r
+ /// <summary>\r
+ /// Occurs when the game is exiting.\r
+ /// </summary>\r
+ public event EventHandler Exiting;\r
+\r
+ /// <summary>\r
+ /// Occurs when a drawing frame is about to start.\r
+ /// </summary>\r
+ public event CancelEventHandler FrameStart;\r
+\r
+ /// <summary>\r
+ /// Occurs when a drawing frame ends.\r
+ /// </summary>\r
+ public event EventHandler FrameEnd;\r
+\r
+ /// <summary>\r
+ /// Gets or sets the inactive sleep time.\r
+ /// </summary>\r
+ /// <value>The inactive sleep time.</value>\r
+ public TimeSpan InactiveSleepTime\r
+ {\r
+ get { return inactiveSleepTime; }\r
+ set\r
+ {\r
+ // error checking\r
+ if (value < TimeSpan.Zero)\r
+ throw new ArgumentOutOfRangeException("value", "Inactive sleep time cannot be less than zero.");\r
+ inactiveSleepTime = value;\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the target elapsed time.\r
+ /// </summary>\r
+ /// <value>The target elapsed time.</value>\r
+ public TimeSpan TargetElapsedTime\r
+ {\r
+ get { return targetElapsedTime; }\r
+ set\r
+ {\r
+ // error checking\r
+ if (value <= TimeSpan.Zero)\r
+ throw new ArgumentOutOfRangeException("value", "Target elapsed time must be greater than zero.");\r
+ targetElapsedTime = value;\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets a value indicating whether the game is using a fixed time step.\r
+ /// </summary>\r
+ /// <value>\r
+ /// <c>true</c> if the game is using a fixed time step; otherwise, <c>false</c>.\r
+ /// </value>\r
+ public bool IsFixedTimeStep\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets a value indicating whether this <see cref="Game"/> is exiting.\r
+ /// </summary>\r
+ /// <value><c>true</c> if exiting; otherwise, <c>false</c>.</value>\r
+ public bool IsExiting\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets a value indicating whether this instance is running.\r
+ /// </summary>\r
+ /// <value>\r
+ /// <c>true</c> if this instance is running; otherwise, <c>false</c>.\r
+ /// </value>\r
+ public bool IsRunning\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets the game window.\r
+ /// </summary>\r
+ /// <value>The game window.</value>\r
+ public GameWindow Window\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets the graphics device manager.\r
+ /// </summary>\r
+ /// <value>The graphics device manager.</value>\r
+ public GraphicsDeviceManager GraphicsDeviceManager\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets a value indicating whether this <see cref="Game"/> is active.\r
+ /// </summary>\r
+ /// <value><c>true</c> if active; otherwise, <c>false</c>.</value>\r
+ public bool IsActive\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Initializes the <see cref="Game"/> class.\r
+ /// </summary>\r
+ static Game()\r
+ {\r
+ // configure SlimDX\r
+ Configuration.ThrowOnError = true;\r
+ Configuration.AddResultWatch(ResultCode.DeviceLost, ResultWatchFlags.AlwaysIgnore);\r
+ Configuration.AddResultWatch(ResultCode.WasStillDrawing, ResultWatchFlags.AlwaysIgnore);\r
+\r
+#if DEBUG\r
+ Configuration.DetectDoubleDispose = true;\r
+ Configuration.EnableObjectTracking = true;\r
+#else\r
+ Configuration.DetectDoubleDispose = false;\r
+ Configuration.EnableObjectTracking = false;\r
+#endif\r
+\r
+ // setup the application\r
+ Application.EnableVisualStyles();\r
+ Application.SetCompatibleTextRenderingDefault(false);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="Game"/> class.\r
+ /// </summary>\r
+ protected Game()\r
+ {\r
+ IsFixedTimeStep = true;\r
+\r
+ Window = new GameWindow();\r
+ Window.ApplicationActivated += Window_ApplicationActivated;\r
+ Window.ApplicationDeactivated += Window_ApplicationDeactivated;\r
+ Window.Suspend += Window_Suspend;\r
+ Window.Resume += Window_Resume;\r
+ Window.Paint += Window_Paint;\r
+\r
+ GraphicsDeviceManager = new GraphicsDeviceManager(this);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.\r
+ /// </summary>\r
+ public void Dispose()\r
+ {\r
+ // GraphicsDeviceManager.Dispose will come around and call the Dispose(bool)\r
+ // overload, so we don't need to do it here. It's convoluted, but it works well.\r
+ if (GraphicsDeviceManager != null)\r
+ GraphicsDeviceManager.Dispose();\r
+ GraphicsDeviceManager = null;\r
+\r
+ if (Disposed != null)\r
+ Disposed(this, EventArgs.Empty);\r
+\r
+ GC.SuppressFinalize(this);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Exits the game.\r
+ /// </summary>\r
+ public void Exit()\r
+ {\r
+ // request the game to terminate\r
+ IsExiting = true;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Runs the game.\r
+ /// </summary>\r
+ public void Run()\r
+ {\r
+ IsRunning = true;\r
+\r
+ try\r
+ {\r
+ gameTime.ElapsedGameTime = 0;\r
+ gameTime.ElapsedRealTime = 0;\r
+ gameTime.TotalGameTime = (float)totalGameTime.TotalSeconds;\r
+ gameTime.TotalRealTime = (float)clock.CurrentTime.TotalSeconds;\r
+ gameTime.IsRunningSlowly = false;\r
+\r
+ Update(gameTime);\r
+\r
+ Application.Idle += Application_Idle;\r
+ Application.Run(Window);\r
+ }\r
+ finally\r
+ {\r
+ Application.Idle -= Application_Idle;\r
+ IsRunning = false;\r
+ OnExiting(EventArgs.Empty);\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Performs one complete frame for the game.\r
+ /// </summary>\r
+ public void Tick()\r
+ {\r
+ // if we are exiting, do nothing\r
+ if (IsExiting)\r
+ return;\r
+\r
+ // if we are inactive, sleep for a bit\r
+ //if (!IsActive)\r
+ // Thread.Sleep((int)InactiveSleepTime.TotalMilliseconds);\r
+\r
+ clock.Step();\r
+\r
+ gameTime.TotalRealTime = (float)clock.CurrentTime.TotalSeconds;\r
+ gameTime.ElapsedRealTime = (float)clock.ElapsedTime.TotalSeconds;\r
+ lastFrameElapsedRealTime += clock.ElapsedTime;\r
+ TimeSpan elapsedAdjustedTime = clock.ElapsedAdjustedTime;\r
+ if (elapsedAdjustedTime < TimeSpan.Zero)\r
+ elapsedAdjustedTime = TimeSpan.Zero;\r
+\r
+ if (forceElapsedTimeToZero)\r
+ {\r
+ gameTime.ElapsedRealTime = 0;\r
+ lastFrameElapsedRealTime = elapsedAdjustedTime = TimeSpan.Zero;\r
+ forceElapsedTimeToZero = false;\r
+ }\r
+\r
+ // cap the adjusted time\r
+ if (elapsedAdjustedTime > maximumElapsedTime)\r
+ elapsedAdjustedTime = maximumElapsedTime;\r
+\r
+ // check if we are using a fixed or variable time step\r
+ if (IsFixedTimeStep)\r
+ {\r
+ accumulatedElapsedGameTime += elapsedAdjustedTime;\r
+ long ratio = accumulatedElapsedGameTime.Ticks / TargetElapsedTime.Ticks;\r
+ accumulatedElapsedGameTime = TimeSpan.FromTicks(accumulatedElapsedGameTime.Ticks % TargetElapsedTime.Ticks);\r
+ lastFrameElapsedGameTime = TimeSpan.Zero;\r
+ if (ratio == 0)\r
+ return;\r
+ TimeSpan targetElapsedTime = TargetElapsedTime;\r
+\r
+ if (ratio > 1)\r
+ {\r
+ updatesSinceRunningSlowly2 = updatesSinceRunningSlowly1;\r
+ updatesSinceRunningSlowly1 = 0;\r
+ }\r
+ else\r
+ {\r
+ if (updatesSinceRunningSlowly1 < int.MaxValue)\r
+ updatesSinceRunningSlowly1++;\r
+ if (updatesSinceRunningSlowly2 < int.MaxValue)\r
+ updatesSinceRunningSlowly2++;\r
+ }\r
+\r
+ drawRunningSlowly = updatesSinceRunningSlowly2 < 20;\r
+\r
+ // update until it's time to draw the next frame\r
+ while (ratio > 0 && !IsExiting)\r
+ {\r
+ ratio -= 1;\r
+\r
+ try\r
+ {\r
+ gameTime.ElapsedGameTime = (float)targetElapsedTime.TotalSeconds;\r
+ gameTime.TotalGameTime = (float)totalGameTime.TotalSeconds;\r
+ gameTime.IsRunningSlowly = drawRunningSlowly;\r
+\r
+ Update(gameTime);\r
+ }\r
+ finally\r
+ {\r
+ lastFrameElapsedGameTime += targetElapsedTime;\r
+ totalGameTime += targetElapsedTime;\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ drawRunningSlowly = false;\r
+ updatesSinceRunningSlowly1 = int.MaxValue;\r
+ updatesSinceRunningSlowly2 = int.MaxValue;\r
+\r
+ // make sure we shouldn't be exiting\r
+ if (!IsExiting)\r
+ {\r
+ try\r
+ {\r
+ gameTime.ElapsedGameTime = 0;\r
+ lastFrameElapsedGameTime = elapsedAdjustedTime;\r
+ gameTime.TotalGameTime = (float)totalGameTime.TotalSeconds;\r
+ gameTime.IsRunningSlowly = false;\r
+\r
+ Update(gameTime);\r
+ }\r
+ finally\r
+ {\r
+ totalGameTime += elapsedAdjustedTime;\r
+ }\r
+ }\r
+ }\r
+\r
+ DrawFrame();\r
+\r
+ // refresh the FPS counter once per second\r
+ lastUpdateFrame++;\r
+ if ((float)clock.CurrentTime.TotalSeconds - lastUpdateTime > 1.0f)\r
+ {\r
+ gameTime.FramesPerSecond = (float)lastUpdateFrame / (float)(clock.CurrentTime.TotalSeconds - lastUpdateTime);\r
+ lastUpdateTime = (float)clock.CurrentTime.TotalSeconds;\r
+ lastUpdateFrame = 0;\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Resets the elapsed time.\r
+ /// </summary>\r
+ public void ResetElapsedTime()\r
+ {\r
+ forceElapsedTimeToZero = true;\r
+ updatesSinceRunningSlowly1 = int.MaxValue;\r
+ updatesSinceRunningSlowly2 = int.MaxValue;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Allows the game to perform logic processing.\r
+ /// </summary>\r
+ /// <param name="gameTime">The time passed since the last update.</param>\r
+ protected virtual void Update(GameTime gameTime)\r
+ {\r
+ }\r
+\r
+ /// <summary>\r
+ /// Called when a frame is ready to be drawn.\r
+ /// </summary>\r
+ /// <param name="gameTime">The time passed since the last frame.</param>\r
+ protected virtual void Draw(GameTime gameTime)\r
+ {\r
+ }\r
+\r
+ /// <summary>\r
+ /// Initializes the game.\r
+ /// </summary>\r
+ protected internal virtual void Initialize()\r
+ {\r
+ }\r
+\r
+ /// <summary>\r
+ /// Loads graphical resources.\r
+ /// </summary>\r
+ protected internal virtual void LoadContent()\r
+ {\r
+ }\r
+\r
+ /// <summary>\r
+ /// Unloads graphical resources.\r
+ /// </summary>\r
+ protected internal virtual void UnloadContent()\r
+ {\r
+ }\r
+\r
+ /// <summary>\r
+ /// Releases unmanaged and - optionally - managed resources\r
+ /// </summary>\r
+ /// <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>\r
+ protected internal virtual void Dispose(bool disposing)\r
+ {\r
+ }\r
+\r
+ /// <summary>\r
+ /// Raises the <see cref="E:Activated"/> event.\r
+ /// </summary>\r
+ /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>\r
+ protected virtual void OnActivated(EventArgs e)\r
+ {\r
+ if (Activated != null)\r
+ Activated(this, e);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Raises the <see cref="E:Deactivated"/> event.\r
+ /// </summary>\r
+ /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>\r
+ protected virtual void OnDeactivated(EventArgs e)\r
+ {\r
+ if (Deactivated != null)\r
+ Deactivated(this, e);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Raises the <see cref="E:Exiting"/> event.\r
+ /// </summary>\r
+ /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>\r
+ protected virtual void OnExiting(EventArgs e)\r
+ {\r
+ if (Exiting != null)\r
+ Exiting(this, e);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Raises the <see cref="E:FrameStart"/> event.\r
+ /// </summary>\r
+ /// <param name="e">The <see cref="System.ComponentModel.CancelEventArgs"/> instance containing the event data.</param>\r
+ protected virtual void OnFrameStart(CancelEventArgs e)\r
+ {\r
+ if (FrameStart != null)\r
+ FrameStart(this, e);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Raises the <see cref="E:FrameEnd"/> event.\r
+ /// </summary>\r
+ /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>\r
+ protected virtual void OnFrameEnd(EventArgs e)\r
+ {\r
+ if (FrameEnd != null)\r
+ FrameEnd(this, e);\r
+ }\r
+\r
+ void DrawFrame()\r
+ {\r
+ try\r
+ {\r
+ if (!IsExiting && !Window.IsMinimized)\r
+ {\r
+ CancelEventArgs e = new CancelEventArgs(false);\r
+ OnFrameStart(e);\r
+ if (!e.Cancel)\r
+ {\r
+ gameTime.TotalRealTime = (float)clock.CurrentTime.TotalSeconds;\r
+ gameTime.ElapsedRealTime = (float)lastFrameElapsedRealTime.TotalSeconds;\r
+ gameTime.TotalGameTime = (float)totalGameTime.TotalSeconds;\r
+ gameTime.ElapsedGameTime = (float)lastFrameElapsedGameTime.TotalSeconds;\r
+ gameTime.IsRunningSlowly = drawRunningSlowly;\r
+\r
+ Draw(gameTime);\r
+\r
+ OnFrameEnd(EventArgs.Empty);\r
+ }\r
+ }\r
+ }\r
+ finally\r
+ {\r
+ lastFrameElapsedGameTime = TimeSpan.Zero;\r
+ lastFrameElapsedRealTime = TimeSpan.Zero;\r
+ }\r
+ }\r
+\r
+ void Application_Idle(object sender, EventArgs e)\r
+ {\r
+ NativeMessage message;\r
+ while (!NativeMethods.PeekMessage(out message, IntPtr.Zero, 0, 0, 0))\r
+ {\r
+ if (IsExiting)\r
+ Window.Close();\r
+ else\r
+ Tick();\r
+ }\r
+ }\r
+\r
+ void Window_ApplicationDeactivated(object sender, EventArgs e)\r
+ {\r
+ if (IsActive)\r
+ {\r
+ IsActive = false;\r
+ OnDeactivated(EventArgs.Empty);\r
+ }\r
+ }\r
+\r
+ void Window_ApplicationActivated(object sender, EventArgs e)\r
+ {\r
+ if (!IsActive)\r
+ {\r
+ IsActive = true;\r
+ OnActivated(EventArgs.Empty);\r
+ }\r
+ }\r
+\r
+ void Window_Paint(object sender, PaintEventArgs e)\r
+ {\r
+ DrawFrame();\r
+ }\r
+\r
+ void Window_Resume(object sender, EventArgs e)\r
+ {\r
+ clock.Resume();\r
+ }\r
+\r
+ void Window_Suspend(object sender, EventArgs e)\r
+ {\r
+ clock.Suspend();\r
+ }\r
+ }\r
+}\r
--- /dev/null
+/*\r
+* Copyright (c) 2007-2009 SlimDX Group\r
+* \r
+* Permission is hereby granted, free of charge, to any person obtaining a copy\r
+* of this software and associated documentation files (the "Software"), to deal\r
+* in the Software without restriction, including without limitation the rights\r
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+* copies of the Software, and to permit persons to whom the Software is\r
+* furnished to do so, subject to the following conditions:\r
+* \r
+* The above copyright notice and this permission notice shall be included in\r
+* all copies or substantial portions of the Software.\r
+* \r
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+* THE SOFTWARE.\r
+*/\r
+using System;\r
+using System.Diagnostics;\r
+\r
+namespace SampleFramework\r
+{\r
+ class GameClock\r
+ {\r
+ long baseRealTime;\r
+ long lastRealTime;\r
+ bool lastRealTimeValid;\r
+ int suspendCount;\r
+ long suspendStartTime;\r
+ long timeLostToSuspension;\r
+ TimeSpan currentTimeBase;\r
+ TimeSpan currentTimeOffset;\r
+\r
+ public TimeSpan CurrentTime\r
+ {\r
+ get { return currentTimeBase + currentTimeOffset; }\r
+ }\r
+\r
+ public TimeSpan ElapsedTime\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+\r
+ public TimeSpan ElapsedAdjustedTime\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+\r
+ public static long Frequency\r
+ {\r
+ get { return Stopwatch.Frequency; }\r
+ }\r
+\r
+ public GameClock()\r
+ {\r
+ Reset();\r
+ }\r
+\r
+ public void Reset()\r
+ {\r
+ currentTimeBase = TimeSpan.Zero;\r
+ currentTimeOffset = TimeSpan.Zero;\r
+ baseRealTime = Stopwatch.GetTimestamp();\r
+ lastRealTimeValid = false;\r
+ }\r
+\r
+ public void Suspend()\r
+ {\r
+ suspendCount++;\r
+ if (suspendCount == 1)\r
+ suspendStartTime = Stopwatch.GetTimestamp();\r
+ }\r
+\r
+ /// <summary>\r
+ /// Resumes a previously suspended clock.\r
+ /// </summary>\r
+ public void Resume()\r
+ {\r
+ suspendCount--;\r
+ if (suspendCount <= 0)\r
+ {\r
+ timeLostToSuspension += Stopwatch.GetTimestamp() - suspendStartTime;\r
+ suspendStartTime = 0;\r
+ }\r
+ }\r
+\r
+ public void Step()\r
+ {\r
+ long counter = Stopwatch.GetTimestamp();\r
+\r
+ if (!lastRealTimeValid)\r
+ {\r
+ lastRealTime = counter;\r
+ lastRealTimeValid = true;\r
+ }\r
+\r
+ try\r
+ {\r
+ currentTimeOffset = CounterToTimeSpan(counter - baseRealTime);\r
+ }\r
+ catch (OverflowException)\r
+ {\r
+ // update the base value and try again to adjust for overflow\r
+ currentTimeBase += currentTimeOffset;\r
+ baseRealTime = lastRealTime;\r
+\r
+ try\r
+ {\r
+ // get the current offset\r
+ currentTimeOffset = CounterToTimeSpan(counter - baseRealTime);\r
+ }\r
+ catch (OverflowException)\r
+ {\r
+ // account for overflow\r
+ baseRealTime = counter;\r
+ currentTimeOffset = TimeSpan.Zero;\r
+ }\r
+ }\r
+\r
+ try\r
+ {\r
+ ElapsedTime = CounterToTimeSpan(counter - lastRealTime);\r
+ }\r
+ catch (OverflowException)\r
+ {\r
+ ElapsedTime = TimeSpan.Zero;\r
+ }\r
+\r
+ try\r
+ {\r
+ ElapsedAdjustedTime = CounterToTimeSpan(counter - (lastRealTime + timeLostToSuspension));\r
+ timeLostToSuspension = 0;\r
+ }\r
+ catch (OverflowException)\r
+ {\r
+ ElapsedAdjustedTime = TimeSpan.Zero;\r
+ }\r
+\r
+ lastRealTime = counter;\r
+ }\r
+\r
+ static TimeSpan CounterToTimeSpan(long delta)\r
+ {\r
+ return TimeSpan.FromTicks((delta * 10000000) / Frequency);\r
+ }\r
+ }\r
+}\r
--- /dev/null
+/*\r
+* Copyright (c) 2007-2009 SlimDX Group\r
+* \r
+* Permission is hereby granted, free of charge, to any person obtaining a copy\r
+* of this software and associated documentation files (the "Software"), to deal\r
+* in the Software without restriction, including without limitation the rights\r
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+* copies of the Software, and to permit persons to whom the Software is\r
+* furnished to do so, subject to the following conditions:\r
+* \r
+* The above copyright notice and this permission notice shall be included in\r
+* all copies or substantial portions of the Software.\r
+* \r
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+* THE SOFTWARE.\r
+*/\r
+\r
+namespace SampleFramework\r
+{\r
+ /// <summary>\r
+ /// Contains the current timing state of the game.\r
+ /// </summary>\r
+ public class GameTime\r
+ {\r
+ private float m_FramesPerSecond;\r
+ /// <summary>\r
+ /// Gets the current frames-per-second measure.\r
+ /// </summary>\r
+ /// <value>The current frames-per-second measure.</value>\r
+ public float FramesPerSecond\r
+ {\r
+ get { return m_FramesPerSecond; }\r
+ internal set { m_FramesPerSecond = value; }\r
+ }\r
+\r
+ private float m_ElapsedGameTime;\r
+ /// <summary>\r
+ /// Gets the elapsed game time, in seconds.\r
+ /// </summary>\r
+ /// <value>The elapsed game time.</value>\r
+ public float ElapsedGameTime\r
+ {\r
+ get { return m_ElapsedGameTime; }\r
+ internal set { m_ElapsedGameTime = value; }\r
+ }\r
+\r
+ private float m_ElapsedRealTime;\r
+ /// <summary>\r
+ /// Gets the elapsed real time, in seconds.\r
+ /// </summary>\r
+ /// <value>The elapsed real time.</value>\r
+ public float ElapsedRealTime\r
+ {\r
+ get { return m_ElapsedRealTime; }\r
+ internal set { m_ElapsedRealTime = value; }\r
+ }\r
+\r
+ private float m_TotalGameTime;\r
+ /// <summary>\r
+ /// Gets the total game time, in seconds.\r
+ /// </summary>\r
+ /// <value>The total game time.</value>\r
+ public float TotalGameTime\r
+ {\r
+ get { return m_TotalGameTime; }\r
+ internal set { m_TotalGameTime = value; }\r
+ }\r
+\r
+ private float m_TotalRealTime;\r
+ /// <summary>\r
+ /// Gets the total real time, in seconds.\r
+ /// </summary>\r
+ /// <value>The total real time.</value>\r
+ public float TotalRealTime\r
+ {\r
+ get { return m_TotalRealTime; }\r
+ internal set { m_TotalRealTime = value; }\r
+ }\r
+\r
+ private bool m_IsRunningSlowly;\r
+ /// <summary>\r
+ /// Gets or sets a value indicating whether this instance is running slowly.\r
+ /// </summary>\r
+ /// <value>\r
+ /// <c>true</c> if this instance is running slowly; otherwise, <c>false</c>.\r
+ /// </value>\r
+ public bool IsRunningSlowly\r
+ {\r
+ get { return m_IsRunningSlowly; }\r
+ internal set { m_IsRunningSlowly = value; }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="GameTime"/> class.\r
+ /// </summary>\r
+ public GameTime()\r
+ {\r
+ }\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="GameTime"/> class.\r
+ /// </summary>\r
+ /// <param name="totalRealTime">The total real time.</param>\r
+ /// <param name="elapsedRealTime">The elapsed real time.</param>\r
+ /// <param name="totalGameTime">The total game time.</param>\r
+ /// <param name="elapsedGameTime">The elapsed game time.</param>\r
+ public GameTime(float totalRealTime, float elapsedRealTime, float totalGameTime, float elapsedGameTime)\r
+ {\r
+ TotalRealTime = totalRealTime;\r
+ ElapsedRealTime = elapsedRealTime;\r
+ TotalGameTime = totalGameTime;\r
+ ElapsedGameTime = elapsedGameTime;\r
+ }\r
+ }\r
+}\r
--- /dev/null
+/*\r
+* Copyright (c) 2007-2009 SlimDX Group\r
+* \r
+* Permission is hereby granted, free of charge, to any person obtaining a copy\r
+* of this software and associated documentation files (the "Software"), to deal\r
+* in the Software without restriction, including without limitation the rights\r
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+* copies of the Software, and to permit persons to whom the Software is\r
+* furnished to do so, subject to the following conditions:\r
+* \r
+* The above copyright notice and this permission notice shall be included in\r
+* all copies or substantial portions of the Software.\r
+* \r
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+* THE SOFTWARE.\r
+*/\r
+using System;\r
+using System.ComponentModel;\r
+using System.Drawing;\r
+using System.IO;\r
+using System.Reflection;\r
+using System.Security.Permissions;\r
+using System.Windows.Forms;\r
+using SampleFramework.Properties;\r
+\r
+namespace SampleFramework\r
+{\r
+ /// <summary>\r
+ /// Implements a specialized window for games and rendering.\r
+ /// </summary>\r
+ public class GameWindow : Form\r
+ {\r
+ const int DefaultWidth = 800;\r
+ const int DefaultHeight = 600;\r
+ const string DefaultTitle = "Game";\r
+\r
+ Size cachedSize;\r
+ bool minimized;\r
+ bool maximized;\r
+ bool inSizeMove;\r
+\r
+ /// <summary>\r
+ /// Occurs when the application is suspended.\r
+ /// </summary>\r
+ public event EventHandler Suspend;\r
+\r
+ /// <summary>\r
+ /// Occurs when the application is resumed.\r
+ /// </summary>\r
+ public event EventHandler Resume;\r
+\r
+ /// <summary>\r
+ /// Occurs when the user resizes the window.\r
+ /// </summary>\r
+ public event EventHandler UserResized;\r
+\r
+ /// <summary>\r
+ /// Occurs when the screen on which the window resides is changed.\r
+ /// </summary>\r
+ public event EventHandler ScreenChanged;\r
+\r
+ /// <summary>\r
+ /// Occurs when the application is activated.\r
+ /// </summary>\r
+ public event EventHandler ApplicationActivated;\r
+\r
+ /// <summary>\r
+ /// Occurs when the application is deactivated.\r
+ /// </summary>\r
+ public event EventHandler ApplicationDeactivated;\r
+\r
+ /// <summary>\r
+ /// Occurs when the system is suspended.\r
+ /// </summary>\r
+ public event EventHandler SystemSuspend;\r
+\r
+ /// <summary>\r
+ /// Occurs when the system is resumed.\r
+ /// </summary>\r
+ public event EventHandler SystemResume;\r
+\r
+ /// <summary>\r
+ /// Occurs when a screen saver is about to be activated.\r
+ /// </summary>\r
+ public event CancelEventHandler Screensaver;\r
+\r
+ /// <summary>\r
+ /// Gets a value indicating whether this instance is minimized.\r
+ /// </summary>\r
+ /// <value>\r
+ /// <c>true</c> if this instance is minimized; otherwise, <c>false</c>.\r
+ /// </value>\r
+ public bool IsMinimized\r
+ {\r
+ get { return minimized; }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets a value indicating whether this instance is maximized.\r
+ /// </summary>\r
+ /// <value>\r
+ /// <c>true</c> if this instance is maximized; otherwise, <c>false</c>.\r
+ /// </value>\r
+ public bool IsMaximized\r
+ {\r
+ get { return maximized; }\r
+ }\r
+\r
+ private Screen m_Screen;\r
+ /// <summary>\r
+ /// Gets the screen on which the window resides.\r
+ /// </summary>\r
+ /// <value>The screen.</value>\r
+ public Screen Screen\r
+ {\r
+ get { return m_Screen; }\r
+ private set { m_Screen = value; }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="GameWindow"/> class.\r
+ /// </summary>\r
+ public GameWindow()\r
+ {\r
+ MinimumSize = new Size(200, 200);\r
+\r
+ Screen = ScreenFromHandle(Handle);\r
+\r
+ //Icon = GetDefaultIcon();\r
+ Text = GetDefaultTitle();\r
+ }\r
+\r
+ /// <summary>\r
+ /// Raises the <see cref="E:Suspend"/> event.\r
+ /// </summary>\r
+ /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>\r
+ protected virtual void OnSuspend(EventArgs e)\r
+ {\r
+ if (Suspend != null)\r
+ Suspend(this, e);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Raises the <see cref="E:Resume"/> event.\r
+ /// </summary>\r
+ /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>\r
+ protected virtual void OnResume(EventArgs e)\r
+ {\r
+ if (Resume != null)\r
+ Resume(this, e);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Raises the <see cref="E:UserResized"/> event.\r
+ /// </summary>\r
+ /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>\r
+ protected virtual void OnUserResized(EventArgs e)\r
+ {\r
+ if (UserResized != null)\r
+ UserResized(this, e);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Raises the <see cref="E:ScreenChanged"/> event.\r
+ /// </summary>\r
+ /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>\r
+ protected virtual void OnScreenChanged(EventArgs e)\r
+ {\r
+ if (ScreenChanged != null)\r
+ ScreenChanged(this, e);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Raises the <see cref="E:ApplicationActivated"/> event.\r
+ /// </summary>\r
+ /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>\r
+ protected virtual void OnApplicationActivated(EventArgs e)\r
+ {\r
+ if (ApplicationActivated != null)\r
+ ApplicationActivated(this, e);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Raises the <see cref="E:ApplicationDeactivated"/> event.\r
+ /// </summary>\r
+ /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>\r
+ protected virtual void OnApplicationDeactivated(EventArgs e)\r
+ {\r
+ if (ApplicationDeactivated != null)\r
+ ApplicationDeactivated(this, e);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Raises the <see cref="E:SystemSuspend"/> event.\r
+ /// </summary>\r
+ /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>\r
+ protected virtual void OnSystemSuspend(EventArgs e)\r
+ {\r
+ if (SystemSuspend != null)\r
+ SystemSuspend(this, e);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Raises the <see cref="E:SystemResume"/> event.\r
+ /// </summary>\r
+ /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>\r
+ protected virtual void OnSystemResume(EventArgs e)\r
+ {\r
+ if (SystemResume != null)\r
+ SystemResume(this, e);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Raises the <see cref="E:Screensaver"/> event.\r
+ /// </summary>\r
+ /// <param name="e">The <see cref="System.ComponentModel.CancelEventArgs"/> instance containing the event data.</param>\r
+ protected virtual void OnScreensaver(CancelEventArgs e)\r
+ {\r
+ if (Screensaver != null)\r
+ Screensaver(this, e);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Raises the <see cref="E:System.Windows.Forms.Form.Load"/> event.\r
+ /// </summary>\r
+ /// <param name="e">An <see cref="T:System.EventArgs"/> that contains the event data.</param>\r
+ protected override void OnLoad(EventArgs e)\r
+ {\r
+ base.OnLoad(e);\r
+\r
+ cachedSize = Size;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Raises the <see cref="E:System.Windows.Forms.Form.ResizeBegin"/> event.\r
+ /// </summary>\r
+ /// <param name="e">A <see cref="T:System.EventArgs"/> that contains the event data.</param>\r
+ protected override void OnResizeBegin(EventArgs e)\r
+ {\r
+ base.OnResizeBegin(e);\r
+\r
+ // suspend any processing until we are done being minimized\r
+ inSizeMove = true;\r
+ cachedSize = Size;\r
+ OnSuspend(EventArgs.Empty);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Raises the <see cref="E:System.Windows.Forms.Form.ResizeEnd"/> event.\r
+ /// </summary>\r
+ /// <param name="e">A <see cref="T:System.EventArgs"/> that contains the event data.</param>\r
+ protected override void OnResizeEnd(EventArgs e)\r
+ {\r
+ base.OnResizeEnd(e);\r
+\r
+ // check for screen and size changes\r
+ OnUserResized(EventArgs.Empty);\r
+ UpdateScreen();\r
+ inSizeMove = false;\r
+\r
+ // resume application processing\r
+ OnResume(EventArgs.Empty);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Handles raw window messages.\r
+ /// </summary>\r
+ /// <param name="m">The raw message.</param>\r
+ [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]\r
+ protected override void WndProc(ref Message m)\r
+ {\r
+ if (m.Msg == WindowConstants.WM_SIZE)\r
+ {\r
+ if (m.WParam == WindowConstants.SIZE_MINIMIZED)\r
+ {\r
+ minimized = true;\r
+ maximized = false;\r
+\r
+ OnSuspend(EventArgs.Empty);\r
+ }\r
+ else\r
+ {\r
+ Rectangle client = NativeMethods.GetClientRectangle(m.HWnd);\r
+ if (client.Height == 0)\r
+ {\r
+ // rapidly clicking the task bar to minimize and restore a window\r
+ // can cause a WM_SIZE message with SIZE_RESTORED when \r
+ // the window has actually become minimized due to rapid change\r
+ // so just ignore this message\r
+ }\r
+ else if (m.WParam == WindowConstants.SIZE_MAXIMIZED)\r
+ {\r
+ if (minimized)\r
+ OnResume(EventArgs.Empty);\r
+\r
+ minimized = false;\r
+ maximized = true;\r
+\r
+ OnUserResized(EventArgs.Empty);\r
+ UpdateScreen();\r
+ }\r
+ else if (m.WParam == WindowConstants.SIZE_RESTORED)\r
+ {\r
+ if (minimized)\r
+ OnResume(EventArgs.Empty);\r
+\r
+ minimized = false;\r
+ maximized = false;\r
+\r
+ if (!inSizeMove && Size != cachedSize)\r
+ {\r
+ OnUserResized(EventArgs.Empty);\r
+ UpdateScreen();\r
+ cachedSize = Size;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ else if (m.Msg == WindowConstants.WM_ACTIVATEAPP)\r
+ {\r
+ if (m.WParam != IntPtr.Zero)\r
+ OnApplicationActivated(EventArgs.Empty);\r
+ else\r
+ OnApplicationDeactivated(EventArgs.Empty);\r
+ }\r
+ else if (m.Msg == WindowConstants.WM_POWERBROADCAST)\r
+ {\r
+ if (m.WParam == WindowConstants.PBT_APMQUERYSUSPEND)\r
+ {\r
+ OnSystemSuspend(EventArgs.Empty);\r
+ m.Result = (IntPtr)1;\r
+ return;\r
+ }\r
+ else if (m.WParam == WindowConstants.PBT_APMRESUMESUSPEND)\r
+ {\r
+ OnSystemResume(EventArgs.Empty);\r
+ m.Result = (IntPtr)1;\r
+ return;\r
+ }\r
+ }\r
+ else if (m.Msg == WindowConstants.WM_SYSCOMMAND)\r
+ {\r
+ long wparam = m.WParam.ToInt64() & 0xFFF0;\r
+ if (wparam == WindowConstants.SC_MONITORPOWER || wparam == WindowConstants.SC_SCREENSAVE)\r
+ {\r
+ CancelEventArgs e = new CancelEventArgs();\r
+ OnScreensaver(e);\r
+ if (e.Cancel)\r
+ {\r
+ m.Result = IntPtr.Zero;\r
+ return;\r
+ }\r
+ }\r
+ }\r
+\r
+ base.WndProc(ref m);\r
+ }\r
+\r
+ void UpdateScreen()\r
+ {\r
+ Screen current = Screen.FromHandle(Handle);\r
+ if (Screen == null || Screen.DeviceName != current.DeviceName)\r
+ {\r
+ Screen = current;\r
+ if (Screen != null)\r
+ OnScreenChanged(EventArgs.Empty);\r
+ }\r
+ }\r
+\r
+ static Screen ScreenFromHandle(IntPtr windowHandle)\r
+ {\r
+ Rectangle rectangle = NativeMethods.GetWindowRectangle(windowHandle);\r
+\r
+ Screen bestScreen = null;\r
+ int mostArea = 0;\r
+ foreach (Screen screen in Screen.AllScreens)\r
+ {\r
+ Rectangle r = Rectangle.Intersect(rectangle, screen.Bounds);\r
+ int area = r.Width * r.Height;\r
+\r
+ if (area > mostArea)\r
+ {\r
+ mostArea = area;\r
+ bestScreen = screen;\r
+ }\r
+ }\r
+\r
+ if (bestScreen == null)\r
+ bestScreen = Screen.PrimaryScreen;\r
+ return bestScreen;\r
+ }\r
+\r
+ static string GetAssemblyTitle(Assembly assembly)\r
+ {\r
+ if (assembly == null)\r
+ return null;\r
+\r
+ AssemblyTitleAttribute[] customAttributes = (AssemblyTitleAttribute[])assembly.GetCustomAttributes(typeof(AssemblyTitleAttribute), true);\r
+ if (customAttributes != null && customAttributes.Length > 0)\r
+ return customAttributes[0].Title;\r
+\r
+ return null;\r
+ }\r
+\r
+ static string GetDefaultTitle()\r
+ {\r
+ string assemblyTitle = GetAssemblyTitle(Assembly.GetEntryAssembly());\r
+ if (!string.IsNullOrEmpty(assemblyTitle))\r
+ return assemblyTitle;\r
+\r
+ try\r
+ {\r
+ Uri uri = new Uri(Application.ExecutablePath);\r
+ return Path.GetFileNameWithoutExtension(uri.LocalPath);\r
+ }\r
+ catch (ArgumentNullException)\r
+ {\r
+ // swallow the exception\r
+ }\r
+ catch (UriFormatException)\r
+ {\r
+ // swallow the exception\r
+ }\r
+\r
+ return DefaultTitle;\r
+ }\r
+\r
+ static Icon GetDefaultIcon()\r
+ {\r
+ return (Icon)Resources.sdx_icon_black.Clone();\r
+ }\r
+ }\r
+}\r
--- /dev/null
+/*\r
+* Copyright (c) 2007-2009 SlimDX Group\r
+* \r
+* Permission is hereby granted, free of charge, to any person obtaining a copy\r
+* of this software and associated documentation files (the "Software"), to deal\r
+* in the Software without restriction, including without limitation the rights\r
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+* copies of the Software, and to permit persons to whom the Software is\r
+* furnished to do so, subject to the following conditions:\r
+* \r
+* The above copyright notice and this permission notice shall be included in\r
+* all copies or substantial portions of the Software.\r
+* \r
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+* THE SOFTWARE.\r
+*/\r
+using SlimDX;\r
+using SlimDX.Direct3D9;\r
+using DXGI = SlimDX.DXGI;\r
+\r
+namespace SampleFramework\r
+{\r
+ static class ConversionMethods\r
+ {\r
+ public static int GetDepthBits(Format format)\r
+ {\r
+ switch (format)\r
+ {\r
+ case Format.D32SingleLockable:\r
+ case Format.D32:\r
+ return 32;\r
+\r
+ case Format.D24X8:\r
+ case Format.D24S8:\r
+ case Format.D24X4S4:\r
+ case Format.D24SingleS8:\r
+ return 24;\r
+\r
+ case Format.D16Lockable:\r
+ case Format.D16:\r
+ return 16;\r
+\r
+ case Format.D15S1:\r
+ return 15;\r
+\r
+ default:\r
+ return 0;\r
+ }\r
+ }\r
+\r
+ public static int GetStencilBits(Format format)\r
+ {\r
+ switch (format)\r
+ {\r
+ case Format.D15S1:\r
+ return 1;\r
+\r
+ case Format.D24X4S4:\r
+ return 4;\r
+\r
+ case Format.D24S8:\r
+ case Format.D24SingleS8:\r
+ return 8;\r
+\r
+ default:\r
+ return 0;\r
+ }\r
+ }\r
+\r
+ public static int GetColorBits(Format format)\r
+ {\r
+ switch (format)\r
+ {\r
+ case Format.R8G8B8:\r
+ case Format.A8R8G8B8:\r
+ case Format.A8B8G8R8:\r
+ case Format.X8R8G8B8:\r
+ return 8;\r
+\r
+ case Format.R5G6B5:\r
+ case Format.X1R5G5B5:\r
+ case Format.A1R5G5B5:\r
+ return 5;\r
+\r
+ case Format.A4R4G4B4:\r
+ case Format.X4R4G4B4:\r
+ return 4;\r
+\r
+ case Format.R3G3B2:\r
+ case Format.A8R3G3B2:\r
+ return 2;\r
+\r
+ case Format.A2R10G10B10:\r
+ case Format.A2B10G10R10:\r
+ return 10;\r
+\r
+ case Format.A16B16G16R16:\r
+ return 16;\r
+\r
+ default:\r
+ return 0;\r
+ }\r
+ }\r
+\r
+ public static int GetColorBits(DXGI.Format format)\r
+ {\r
+ switch (format)\r
+ {\r
+ case SlimDX.DXGI.Format.R32G32B32A32_Float:\r
+ case SlimDX.DXGI.Format.R32G32B32A32_SInt:\r
+ case SlimDX.DXGI.Format.R32G32B32A32_Typeless:\r
+ case SlimDX.DXGI.Format.R32G32B32A32_UInt:\r
+ case SlimDX.DXGI.Format.R32G32B32_Float:\r
+ case SlimDX.DXGI.Format.R32G32B32_SInt:\r
+ case SlimDX.DXGI.Format.R32G32B32_Typeless:\r
+ case SlimDX.DXGI.Format.R32G32B32_UInt:\r
+ return 32;\r
+\r
+ case SlimDX.DXGI.Format.R16G16B16A16_Float:\r
+ case SlimDX.DXGI.Format.R16G16B16A16_SInt:\r
+ case SlimDX.DXGI.Format.R16G16B16A16_SNorm:\r
+ case SlimDX.DXGI.Format.R16G16B16A16_Typeless:\r
+ case SlimDX.DXGI.Format.R16G16B16A16_UInt:\r
+ case SlimDX.DXGI.Format.R16G16B16A16_UNorm:\r
+ return 16;\r
+\r
+ case SlimDX.DXGI.Format.R10G10B10A2_Typeless:\r
+ case SlimDX.DXGI.Format.R10G10B10A2_UInt:\r
+ case SlimDX.DXGI.Format.R10G10B10A2_UNorm:\r
+ return 10;\r
+\r
+ case SlimDX.DXGI.Format.R8G8B8A8_SInt:\r
+ case SlimDX.DXGI.Format.R8G8B8A8_SNorm:\r
+ case SlimDX.DXGI.Format.R8G8B8A8_Typeless:\r
+ case SlimDX.DXGI.Format.R8G8B8A8_UInt:\r
+ case SlimDX.DXGI.Format.R8G8B8A8_UNorm:\r
+ case SlimDX.DXGI.Format.R8G8B8A8_UNorm_SRGB:\r
+ return 8;\r
+\r
+ case SlimDX.DXGI.Format.B5G5R5A1_UNorm:\r
+ case SlimDX.DXGI.Format.B5G6R5_UNorm:\r
+ return 5;\r
+\r
+ default:\r
+ return 0;\r
+ }\r
+ }\r
+\r
+ public static MultisampleType ToDirect3D9(int type)\r
+ {\r
+ return (MultisampleType)type;\r
+ }\r
+\r
+ public static Format ToDirect3D9(DXGI.Format format)\r
+ {\r
+ switch (format)\r
+ {\r
+ case SlimDX.DXGI.Format.R8G8B8A8_UNorm:\r
+ return Format.A8R8G8B8;\r
+ case SlimDX.DXGI.Format.B5G6R5_UNorm:\r
+ return Format.R5G6B5;\r
+ case SlimDX.DXGI.Format.B5G5R5A1_UNorm:\r
+ return Format.A1R5G5B5;\r
+ case SlimDX.DXGI.Format.A8_UNorm:\r
+ return Format.A8;\r
+ case SlimDX.DXGI.Format.R10G10B10A2_UNorm:\r
+ return Format.A2B10G10R10;\r
+ case SlimDX.DXGI.Format.B8G8R8A8_UNorm:\r
+ return Format.A8B8G8R8;\r
+ case SlimDX.DXGI.Format.R16G16_UNorm:\r
+ return Format.G16R16;\r
+ case SlimDX.DXGI.Format.R16G16B16A16_UNorm:\r
+ return Format.A16B16G16R16;\r
+ case SlimDX.DXGI.Format.R16_Float:\r
+ return Format.R16F;\r
+ case SlimDX.DXGI.Format.R16G16_Float:\r
+ return Format.G16R16F;\r
+ case SlimDX.DXGI.Format.R16G16B16A16_Float:\r
+ return Format.A16B16G16R16F;\r
+ case SlimDX.DXGI.Format.R32_Float:\r
+ return Format.R32F;\r
+ case SlimDX.DXGI.Format.R32G32_Float:\r
+ return Format.G32R32F;\r
+ case SlimDX.DXGI.Format.R32G32B32A32_Float:\r
+ return Format.A32B32G32R32F;\r
+ }\r
+\r
+ return Format.Unknown;\r
+ }\r
+\r
+ public static float ToFloat(Rational rational)\r
+ {\r
+ float denom = 1;\r
+ if (rational.Denominator != 0)\r
+ denom = rational.Denominator;\r
+ return rational.Numerator / denom;\r
+ }\r
+ }\r
+}\r
--- /dev/null
+/*\r
+* Copyright (c) 2007-2009 SlimDX Group\r
+* \r
+* Permission is hereby granted, free of charge, to any person obtaining a copy\r
+* of this software and associated documentation files (the "Software"), to deal\r
+* in the Software without restriction, including without limitation the rights\r
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+* copies of the Software, and to permit persons to whom the Software is\r
+* furnished to do so, subject to the following conditions:\r
+* \r
+* The above copyright notice and this permission notice shall be included in\r
+* all copies or substantial portions of the Software.\r
+* \r
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+* THE SOFTWARE.\r
+*/\r
+using System;\r
+using SlimDX.Direct3D9;\r
+namespace SampleFramework\r
+{\r
+ /// <summary>\r
+ /// Contains settings for creating a 3D device.\r
+ /// </summary>\r
+ public class DeviceSettings : ICloneable\r
+ {\r
+ /// <summary>\r
+ /// Gets or sets the adapter ordinal.\r
+ /// </summary>\r
+ /// <value>The adapter ordinal.</value>\r
+ public int AdapterOrdinal\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the type of the device.\r
+ /// </summary>\r
+ /// <value>The type of the device.</value>\r
+ public DeviceType DeviceType\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the refresh rate.\r
+ /// </summary>\r
+ /// <value>The refresh rate.</value>\r
+ public int RefreshRate\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the width of the back buffer.\r
+ /// </summary>\r
+ /// <value>The width of the back buffer.</value>\r
+ public int BackBufferWidth\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the height of the back buffer.\r
+ /// </summary>\r
+ /// <value>The height of the back buffer.</value>\r
+ public int BackBufferHeight\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the back buffer format.\r
+ /// </summary>\r
+ /// <value>The back buffer format.</value>\r
+ public Format BackBufferFormat\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the back buffer count.\r
+ /// </summary>\r
+ /// <value>The back buffer count.</value>\r
+ public int BackBufferCount\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets a value indicating whether the device is windowed.\r
+ /// </summary>\r
+ /// <value><c>true</c> if windowed; otherwise, <c>false</c>.</value>\r
+ public bool Windowed\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets a value indicating whether VSync is enabled.\r
+ /// </summary>\r
+ /// <value><c>true</c> if VSync is enabled; otherwise, <c>false</c>.</value>\r
+ public bool EnableVSync\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets a value indicating whether this <see cref="DeviceSettings"/> is multithreaded.\r
+ /// </summary>\r
+ /// <value><c>true</c> if multithreaded; otherwise, <c>false</c>.</value>\r
+ /// <remarks>This only has an effect for Direct3D9 devices.</remarks>\r
+ public bool Multithreaded\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the multisample type.\r
+ /// </summary>\r
+ /// <value>The multisample type.</value>\r
+ public MultisampleType MultisampleType\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the multisample quality.\r
+ /// </summary>\r
+ /// <value>The multisample quality.</value>\r
+ public int MultisampleQuality\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the depth stencil format.\r
+ /// </summary>\r
+ /// <value>The depth stencil format.</value>\r
+ public Format DepthStencilFormat\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the Direct3D9 specific settings.\r
+ /// </summary>\r
+ /// <value>The Direct3D9 specific settings.</value>\r
+ internal Direct3D9Settings Direct3D9\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="DeviceSettings"/> class.\r
+ /// </summary>\r
+ public DeviceSettings()\r
+ {\r
+ // set sane defaults\r
+ DeviceType = DeviceType.Hardware;\r
+ BackBufferFormat = Format.Unknown;\r
+ BackBufferCount = 1;\r
+ MultisampleType = MultisampleType.None;\r
+ DepthStencilFormat = Format.Unknown;\r
+ Windowed = true;\r
+ EnableVSync = true;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Creates a new object that is a copy of the current instance.\r
+ /// </summary>\r
+ /// <returns>\r
+ /// A new object that is a copy of this instance.\r
+ /// </returns>\r
+ public DeviceSettings Clone()\r
+ {\r
+ DeviceSettings result = new DeviceSettings();\r
+ result.DeviceType = DeviceType;\r
+ result.RefreshRate = RefreshRate;\r
+ result.BackBufferCount = BackBufferCount;\r
+ result.BackBufferFormat = BackBufferFormat;\r
+ result.BackBufferHeight = BackBufferHeight;\r
+ result.BackBufferWidth = BackBufferWidth;\r
+ result.DepthStencilFormat = DepthStencilFormat;\r
+ result.MultisampleQuality = MultisampleQuality;\r
+ result.MultisampleType = MultisampleType;\r
+ result.Windowed = Windowed;\r
+ result.EnableVSync = EnableVSync;\r
+ result.AdapterOrdinal = AdapterOrdinal;\r
+ result.Multithreaded = Multithreaded;\r
+\r
+ if (Direct3D9 != null)\r
+ result.Direct3D9 = Direct3D9.Clone();\r
+\r
+ return result;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Creates a new object that is a copy of the current instance.\r
+ /// </summary>\r
+ /// <returns>\r
+ /// A new object that is a copy of this instance.\r
+ /// </returns>\r
+ object ICloneable.Clone()\r
+ {\r
+ return Clone();\r
+ }\r
+\r
+ /// <summary>\r
+ /// Finds valid device settings based upon the desired settings.\r
+ /// </summary>\r
+ /// <param name="settings">The desired settings.</param>\r
+ /// <returns>The best valid device settings matching the input settings.</returns>\r
+ public static DeviceSettings FindValidSettings( DeviceSettings settings )\r
+ {\r
+ try\r
+ {\r
+ GraphicsDeviceManager.EnsureD3D9();\r
+ }\r
+ catch( Exception e )\r
+ {\r
+ throw new NoCompatibleDevicesException( "Could not initialize Direct3D9.", e );\r
+ }\r
+\r
+ if( !Enumeration9.HasEnumerated )\r
+ Enumeration9.Enumerate();\r
+\r
+ DeviceSettings newSettings = settings.Clone();\r
+ Direct3D9Settings d3d9 = FindValidD3D9Settings( settings );\r
+ newSettings.Direct3D9 = d3d9;\r
+ return newSettings;\r
+ }\r
+\r
+ static Direct3D9Settings FindValidD3D9Settings(DeviceSettings settings)\r
+ {\r
+ Direct3D9Settings optimal = Direct3D9Settings.BuildOptimalSettings(settings);\r
+\r
+ SettingsCombo9 bestCombo = null;\r
+ float bestRanking = -1.0f;\r
+\r
+ foreach (AdapterInfo9 adapterInfo in Enumeration9.Adapters)\r
+ {\r
+ DisplayMode desktopMode = GraphicsDeviceManager.Direct3D9Object.GetAdapterDisplayMode(adapterInfo.AdapterOrdinal);\r
+ foreach (DeviceInfo9 deviceInfo in adapterInfo.Devices)\r
+ {\r
+ foreach (SettingsCombo9 combo in deviceInfo.DeviceSettings)\r
+ {\r
+ if (combo.Windowed && combo.AdapterFormat != desktopMode.Format)\r
+ continue;\r
+\r
+ float ranking = Direct3D9Settings.RankSettingsCombo(combo, optimal, desktopMode);\r
+ if (ranking > bestRanking)\r
+ {\r
+ bestCombo = combo;\r
+ bestRanking = ranking;\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ if (bestCombo == null)\r
+ throw new NoCompatibleDevicesException("No compatible Direct3D9 devices found.");\r
+\r
+ return Direct3D9Settings.BuildValidSettings(bestCombo, optimal);\r
+ }\r
+ }\r
+}\r
--- /dev/null
+/*\r
+* Copyright (c) 2007-2009 SlimDX Group\r
+* \r
+* Permission is hereby granted, free of charge, to any person obtaining a copy\r
+* of this software and associated documentation files (the "Software"), to deal\r
+* in the Software without restriction, including without limitation the rights\r
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+* copies of the Software, and to permit persons to whom the Software is\r
+* furnished to do so, subject to the following conditions:\r
+* \r
+* The above copyright notice and this permission notice shall be included in\r
+* all copies or substantial portions of the Software.\r
+* \r
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+* THE SOFTWARE.\r
+*/\r
+using System;\r
+using System.Collections.Generic;\r
+using SlimDX.Direct3D9;\r
+\r
+namespace SampleFramework\r
+{\r
+ class Direct3D9Settings : ICloneable\r
+ {\r
+ public int AdapterOrdinal\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ public DeviceType DeviceType\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ public Format AdapterFormat\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ public CreateFlags CreationFlags\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ public PresentParameters PresentParameters\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+\r
+ public Direct3D9Settings()\r
+ {\r
+ PresentParameters = new PresentParameters();\r
+ DeviceType = DeviceType.Hardware;\r
+ PresentParameters.Windowed = true;\r
+ AdapterFormat = Format.Unknown;\r
+ CreationFlags = CreateFlags.HardwareVertexProcessing;\r
+ PresentParameters.BackBufferFormat = Format.Unknown;\r
+ PresentParameters.BackBufferCount = 1;\r
+ PresentParameters.Multisample = MultisampleType.None;\r
+ PresentParameters.SwapEffect = SwapEffect.Discard;\r
+ PresentParameters.EnableAutoDepthStencil = true;\r
+ PresentParameters.AutoDepthStencilFormat = Format.Unknown;\r
+ PresentParameters.PresentFlags = PresentFlags.DiscardDepthStencil;\r
+ PresentParameters.PresentationInterval = PresentInterval.Default;\r
+ }\r
+\r
+ public Direct3D9Settings Clone()\r
+ {\r
+ Direct3D9Settings clone = new Direct3D9Settings();\r
+ clone.AdapterFormat = AdapterFormat;\r
+ clone.AdapterOrdinal = AdapterOrdinal;\r
+ clone.CreationFlags = CreationFlags;\r
+ clone.DeviceType = DeviceType;\r
+ clone.PresentParameters = PresentParameters.Clone();\r
+\r
+ return clone;\r
+ }\r
+\r
+ object ICloneable.Clone()\r
+ {\r
+ return Clone();\r
+ }\r
+\r
+ public static Direct3D9Settings BuildOptimalSettings(DeviceSettings settings)\r
+ {\r
+ DisplayMode desktopMode = GraphicsDeviceManager.Direct3D9Object.GetAdapterDisplayMode(0);\r
+ Direct3D9Settings optimal = new Direct3D9Settings();\r
+\r
+ optimal.AdapterOrdinal = settings.AdapterOrdinal;\r
+ optimal.DeviceType = settings.DeviceType;\r
+ optimal.PresentParameters.Windowed = settings.Windowed;\r
+ optimal.PresentParameters.BackBufferCount = settings.BackBufferCount;\r
+ optimal.PresentParameters.Multisample = settings.MultisampleType;\r
+ optimal.PresentParameters.MultisampleQuality = settings.MultisampleQuality;\r
+ optimal.PresentParameters.FullScreenRefreshRateInHertz = settings.RefreshRate;\r
+\r
+ if(settings.Multithreaded)\r
+ optimal.CreationFlags |= CreateFlags.Multithreaded;\r
+\r
+ if(optimal.PresentParameters.Windowed || ConversionMethods.GetColorBits(desktopMode.Format) >= 8)\r
+ optimal.AdapterFormat = desktopMode.Format;\r
+ else\r
+ optimal.AdapterFormat = Format.X8R8G8B8;\r
+\r
+ if(settings.BackBufferWidth == 0 || settings.BackBufferHeight == 0)\r
+ {\r
+ if(optimal.PresentParameters.Windowed)\r
+ {\r
+ optimal.PresentParameters.BackBufferWidth = 640;\r
+ optimal.PresentParameters.BackBufferHeight = 480;\r
+ }\r
+ else\r
+ {\r
+ optimal.PresentParameters.BackBufferWidth = desktopMode.Width;\r
+ optimal.PresentParameters.BackBufferHeight = desktopMode.Height;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ optimal.PresentParameters.BackBufferWidth = settings.BackBufferWidth;\r
+ optimal.PresentParameters.BackBufferHeight = settings.BackBufferHeight;\r
+ }\r
+\r
+ if(settings.BackBufferFormat == Format.Unknown)\r
+ optimal.PresentParameters.BackBufferFormat = optimal.AdapterFormat;\r
+ else\r
+ optimal.PresentParameters.BackBufferFormat = settings.BackBufferFormat;\r
+\r
+ if(settings.DepthStencilFormat == Format.Unknown)\r
+ {\r
+ if(ConversionMethods.GetColorBits(optimal.PresentParameters.BackBufferFormat) >= 8)\r
+ optimal.PresentParameters.AutoDepthStencilFormat = Format.D32;\r
+ else\r
+ optimal.PresentParameters.AutoDepthStencilFormat = Format.D16;\r
+ }\r
+ else\r
+ optimal.PresentParameters.AutoDepthStencilFormat = settings.DepthStencilFormat;\r
+\r
+ if(!settings.EnableVSync)\r
+ optimal.PresentParameters.PresentationInterval = PresentInterval.Immediate;\r
+\r
+ return optimal;\r
+ }\r
+\r
+ public static float RankSettingsCombo(SettingsCombo9 combo, Direct3D9Settings optimal, DisplayMode desktopMode)\r
+ {\r
+ float ranking = 0.0f;\r
+\r
+ if(combo.AdapterOrdinal == optimal.AdapterOrdinal)\r
+ ranking += 1000.0f;\r
+\r
+ if(combo.DeviceType == optimal.DeviceType)\r
+ ranking += 100.0f;\r
+\r
+ if(combo.DeviceType == DeviceType.Hardware)\r
+ ranking += 0.1f;\r
+\r
+ if(combo.Windowed == optimal.PresentParameters.Windowed)\r
+ ranking += 10.0f;\r
+\r
+ if(combo.AdapterFormat == optimal.AdapterFormat)\r
+ ranking += 1.0f;\r
+ else\r
+ {\r
+ int bitDepthDelta = Math.Abs(ConversionMethods.GetColorBits(combo.AdapterFormat) -\r
+ ConversionMethods.GetColorBits(optimal.AdapterFormat));\r
+ float scale = Math.Max(0.9f - bitDepthDelta * 0.2f, 0.0f);\r
+ ranking += scale;\r
+ }\r
+\r
+ if(!combo.Windowed)\r
+ {\r
+ bool match;\r
+ if(ConversionMethods.GetColorBits(desktopMode.Format) >= 8)\r
+ match = (combo.AdapterFormat == desktopMode.Format);\r
+ else\r
+ match = (combo.AdapterFormat == Format.X8R8G8B8);\r
+\r
+ if(match)\r
+ ranking += 0.1f;\r
+ }\r
+\r
+ if((optimal.CreationFlags & CreateFlags.HardwareVertexProcessing) != 0 &&\r
+ (optimal.CreationFlags & CreateFlags.MixedVertexProcessing) != 0)\r
+ {\r
+ if((combo.DeviceInfo.Capabilities.DeviceCaps & DeviceCaps.HWTransformAndLight) != 0)\r
+ ranking += 1.0f;\r
+ }\r
+\r
+ if((combo.DeviceInfo.Capabilities.DeviceCaps & DeviceCaps.HWTransformAndLight) != 0)\r
+ ranking += 0.1f;\r
+\r
+ foreach(DisplayMode displayMode in combo.AdapterInfo.DisplayModes)\r
+ {\r
+ if(displayMode.Format == combo.AdapterFormat &&\r
+ displayMode.Width == optimal.PresentParameters.BackBufferWidth &&\r
+ displayMode.Height == optimal.PresentParameters.BackBufferHeight)\r
+ {\r
+ ranking += 1.0f;\r
+ break;\r
+ }\r
+ }\r
+\r
+ if(combo.BackBufferFormat == optimal.PresentParameters.BackBufferFormat)\r
+ ranking += 1.0f;\r
+ else\r
+ {\r
+ int bitDepthDelta = Math.Abs(ConversionMethods.GetColorBits(combo.BackBufferFormat) -\r
+ ConversionMethods.GetColorBits(optimal.PresentParameters.BackBufferFormat));\r
+ float scale = Math.Max(0.9f - bitDepthDelta * 0.2f, 0.0f);\r
+ ranking += scale;\r
+ }\r
+\r
+ if(combo.BackBufferFormat == combo.AdapterFormat)\r
+ ranking += 0.1f;\r
+\r
+ for(int i = 0; i < combo.MultisampleTypes.Count; i++)\r
+ {\r
+ MultisampleType type = combo.MultisampleTypes[i];\r
+ int quality = combo.MultisampleQualities[i];\r
+\r
+ if(type == optimal.PresentParameters.Multisample && quality == optimal.PresentParameters.MultisampleQuality)\r
+ {\r
+ ranking += 1.0f;\r
+ break;\r
+ }\r
+ }\r
+\r
+ if(combo.DepthStencilFormats.Contains(optimal.PresentParameters.AutoDepthStencilFormat))\r
+ ranking += 1.0f;\r
+\r
+ foreach(DisplayMode displayMode in combo.AdapterInfo.DisplayModes)\r
+ {\r
+ if(displayMode.Format == combo.AdapterFormat &&\r
+ displayMode.RefreshRate == optimal.PresentParameters.FullScreenRefreshRateInHertz)\r
+ {\r
+ ranking += 1.0f;\r
+ break;\r
+ }\r
+ }\r
+\r
+ if(combo.PresentIntervals.Contains(optimal.PresentParameters.PresentationInterval))\r
+ ranking += 1.0f;\r
+\r
+ return ranking;\r
+ }\r
+\r
+ public static Direct3D9Settings BuildValidSettings(SettingsCombo9 combo, Direct3D9Settings input)\r
+ {\r
+ Direct3D9Settings settings = new Direct3D9Settings();\r
+\r
+ settings.AdapterOrdinal = combo.AdapterOrdinal;\r
+ settings.DeviceType = combo.DeviceType;\r
+ settings.PresentParameters.Windowed = combo.Windowed;\r
+ settings.AdapterFormat = combo.AdapterFormat;\r
+ settings.PresentParameters.BackBufferFormat = combo.BackBufferFormat;\r
+ settings.PresentParameters.SwapEffect = input.PresentParameters.SwapEffect;\r
+ settings.PresentParameters.PresentFlags = input.PresentParameters.PresentFlags | PresentFlags.DiscardDepthStencil;\r
+\r
+ settings.CreationFlags = input.CreationFlags;\r
+ if((combo.DeviceInfo.Capabilities.DeviceCaps & DeviceCaps.HWTransformAndLight) == 0 &&\r
+ ((settings.CreationFlags & CreateFlags.HardwareVertexProcessing) != 0 ||\r
+ (settings.CreationFlags & CreateFlags.MixedVertexProcessing) != 0))\r
+ {\r
+ settings.CreationFlags &= ~CreateFlags.HardwareVertexProcessing;\r
+ settings.CreationFlags &= ~CreateFlags.MixedVertexProcessing;\r
+ settings.CreationFlags |= CreateFlags.SoftwareVertexProcessing;\r
+ }\r
+\r
+ if((settings.CreationFlags & CreateFlags.HardwareVertexProcessing) == 0 &&\r
+ (settings.CreationFlags & CreateFlags.MixedVertexProcessing) == 0 &&\r
+ (settings.CreationFlags & CreateFlags.SoftwareVertexProcessing) == 0)\r
+ {\r
+ if((combo.DeviceInfo.Capabilities.DeviceCaps & DeviceCaps.HWTransformAndLight) != 0)\r
+ settings.CreationFlags |= CreateFlags.HardwareVertexProcessing;\r
+ else\r
+ settings.CreationFlags |= CreateFlags.SoftwareVertexProcessing;\r
+ }\r
+\r
+ DisplayMode bestDisplayMode = FindValidResolution(combo, input);\r
+ settings.PresentParameters.BackBufferWidth = bestDisplayMode.Width;\r
+ settings.PresentParameters.BackBufferHeight = bestDisplayMode.Height;\r
+\r
+ settings.PresentParameters.BackBufferCount = input.PresentParameters.BackBufferCount;\r
+ if(settings.PresentParameters.BackBufferCount > 3)\r
+ settings.PresentParameters.BackBufferCount = 3;\r
+ if(settings.PresentParameters.BackBufferCount < 1)\r
+ settings.PresentParameters.BackBufferCount = 1;\r
+\r
+ if(input.PresentParameters.SwapEffect != SwapEffect.Discard)\r
+ {\r
+ settings.PresentParameters.Multisample = MultisampleType.None;\r
+ settings.PresentParameters.MultisampleQuality = 0;\r
+ }\r
+ else\r
+ {\r
+ MultisampleType bestType = MultisampleType.None;\r
+ int bestQuality = 0;\r
+\r
+ for(int i = 0; i < combo.MultisampleTypes.Count; i++)\r
+ {\r
+ MultisampleType type = combo.MultisampleTypes[i];\r
+ int quality = combo.MultisampleQualities[0];\r
+\r
+ if(Math.Abs(type - input.PresentParameters.Multisample) < Math.Abs(bestType -\r
+ input.PresentParameters.Multisample))\r
+ {\r
+ bestType = type;\r
+ bestQuality = Math.Min(quality - 1, input.PresentParameters.MultisampleQuality);\r
+ }\r
+ }\r
+\r
+ settings.PresentParameters.Multisample = bestType;\r
+ settings.PresentParameters.MultisampleQuality = bestQuality;\r
+ }\r
+\r
+ List<int> rankings = new List<int>();\r
+ int inputDepthBitDepth = ConversionMethods.GetDepthBits(input.PresentParameters.AutoDepthStencilFormat);\r
+ int inputStencilBitDepth = ConversionMethods.GetStencilBits(input.PresentParameters.AutoDepthStencilFormat);\r
+\r
+ foreach(Format format in combo.DepthStencilFormats)\r
+ {\r
+ int currentBitDepth = ConversionMethods.GetDepthBits(format);\r
+ int currentStencilDepth = ConversionMethods.GetStencilBits(format);\r
+\r
+ int ranking = Math.Abs(currentBitDepth - inputDepthBitDepth);\r
+ ranking += Math.Abs(currentStencilDepth - inputStencilBitDepth);\r
+ rankings.Add(ranking);\r
+ }\r
+\r
+ int bestRanking = int.MaxValue;\r
+ foreach(int ranking in rankings)\r
+ {\r
+ if(ranking < bestRanking)\r
+ bestRanking = ranking;\r
+ }\r
+ int bestIndex = rankings.IndexOf(bestRanking);\r
+\r
+ if(bestIndex >= 0)\r
+ {\r
+ settings.PresentParameters.AutoDepthStencilFormat = combo.DepthStencilFormats[bestIndex];\r
+ settings.PresentParameters.EnableAutoDepthStencil = true;\r
+ }\r
+ else\r
+ {\r
+ settings.PresentParameters.AutoDepthStencilFormat = Format.Unknown;\r
+ settings.PresentParameters.EnableAutoDepthStencil = false;\r
+ }\r
+\r
+ if(combo.Windowed)\r
+ settings.PresentParameters.FullScreenRefreshRateInHertz = 0;\r
+ else\r
+ {\r
+ int match = input.PresentParameters.FullScreenRefreshRateInHertz;\r
+ bestDisplayMode.RefreshRate = 0;\r
+ if(match != 0)\r
+ {\r
+ bestRanking = 100000;\r
+ foreach(DisplayMode displayMode in combo.AdapterInfo.DisplayModes)\r
+ {\r
+ if(displayMode.Format != combo.AdapterFormat ||\r
+ displayMode.Width != bestDisplayMode.Width ||\r
+ displayMode.Height != bestDisplayMode.Height)\r
+ continue;\r
+\r
+ int ranking = Math.Abs(displayMode.RefreshRate - match);\r
+\r
+ if(ranking < bestRanking)\r
+ {\r
+ bestDisplayMode.RefreshRate = displayMode.RefreshRate;\r
+ bestRanking = ranking;\r
+\r
+ if(bestRanking == 0)\r
+ break;\r
+ }\r
+ }\r
+ }\r
+\r
+ settings.PresentParameters.FullScreenRefreshRateInHertz = bestDisplayMode.RefreshRate;\r
+ }\r
+\r
+ if(combo.PresentIntervals.Contains(input.PresentParameters.PresentationInterval))\r
+ settings.PresentParameters.PresentationInterval = input.PresentParameters.PresentationInterval;\r
+ else\r
+ settings.PresentParameters.PresentationInterval = PresentInterval.Default;\r
+\r
+ return settings;\r
+ }\r
+\r
+ static DisplayMode FindValidResolution(SettingsCombo9 combo, Direct3D9Settings input)\r
+ {\r
+ DisplayMode bestMode = new DisplayMode();\r
+\r
+ if(combo.Windowed)\r
+ {\r
+ bestMode.Width = input.PresentParameters.BackBufferWidth;\r
+ bestMode.Height = input.PresentParameters.BackBufferHeight;\r
+ return bestMode;\r
+ }\r
+\r
+ int bestRanking = 100000;\r
+ int ranking;\r
+ foreach(DisplayMode mode in combo.AdapterInfo.DisplayModes)\r
+ {\r
+ if(mode.Format != combo.AdapterFormat)\r
+ continue;\r
+\r
+ ranking = Math.Abs(mode.Width - input.PresentParameters.BackBufferWidth) +\r
+ Math.Abs(mode.Height - input.PresentParameters.BackBufferHeight);\r
+\r
+ if(ranking < bestRanking)\r
+ {\r
+ bestMode = mode;\r
+ bestRanking = ranking;\r
+\r
+ if(bestRanking == 0)\r
+ break;\r
+ }\r
+ }\r
+\r
+ if(bestMode.Width == 0)\r
+ {\r
+ bestMode.Width = input.PresentParameters.BackBufferWidth;\r
+ bestMode.Height = input.PresentParameters.BackBufferHeight;\r
+ }\r
+\r
+ return bestMode;\r
+ }\r
+ }\r
+}\r
--- /dev/null
+/*\r
+* Copyright (c) 2007-2009 SlimDX Group\r
+* \r
+* Permission is hereby granted, free of charge, to any person obtaining a copy\r
+* of this software and associated documentation files (the "Software"), to deal\r
+* in the Software without restriction, including without limitation the rights\r
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+* copies of the Software, and to permit persons to whom the Software is\r
+* furnished to do so, subject to the following conditions:\r
+* \r
+* The above copyright notice and this permission notice shall be included in\r
+* all copies or substantial portions of the Software.\r
+* \r
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+* THE SOFTWARE.\r
+*/\r
+using System.Collections.Generic;\r
+using System.Globalization;\r
+using SlimDX.Direct3D9;\r
+\r
+namespace SampleFramework\r
+{\r
+ class AdapterInfo9\r
+ {\r
+ public int AdapterOrdinal\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ public AdapterDetails Details\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ public string Description\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ public List<DisplayMode> DisplayModes\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+\r
+ public List<DeviceInfo9> Devices\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+\r
+ public AdapterInfo9()\r
+ {\r
+ // create lists\r
+ DisplayModes = new List<DisplayMode>();\r
+ Devices = new List<DeviceInfo9>();\r
+ }\r
+ }\r
+\r
+ class DeviceInfo9\r
+ {\r
+ public DeviceType DeviceType\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ public Capabilities Capabilities\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ public List<SettingsCombo9> DeviceSettings\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+\r
+ public DeviceInfo9()\r
+ {\r
+ DeviceSettings = new List<SettingsCombo9>();\r
+ }\r
+ }\r
+\r
+ class SettingsCombo9\r
+ {\r
+ public int AdapterOrdinal\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ public DeviceType DeviceType\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ public Format AdapterFormat\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ public Format BackBufferFormat\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ public bool Windowed\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ public List<Format> DepthStencilFormats\r
+ {\r
+ get;\r
+ internal set;\r
+ }\r
+\r
+ public List<MultisampleType> MultisampleTypes\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+\r
+ public List<int> MultisampleQualities\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+\r
+ public List<PresentInterval> PresentIntervals\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+\r
+ public AdapterInfo9 AdapterInfo\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ public DeviceInfo9 DeviceInfo\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ public SettingsCombo9()\r
+ {\r
+ DepthStencilFormats = new List<Format>();\r
+ MultisampleQualities = new List<int>();\r
+ MultisampleTypes = new List<MultisampleType>();\r
+ PresentIntervals = new List<PresentInterval>();\r
+ }\r
+ }\r
+\r
+ class DisplayModeComparer9 : IComparer<DisplayMode>\r
+ {\r
+ static DisplayModeComparer9 comparer = new DisplayModeComparer9();\r
+\r
+ public static DisplayModeComparer9 Comparer\r
+ {\r
+ get { return comparer; }\r
+ }\r
+\r
+ public DisplayModeComparer9()\r
+ {\r
+ }\r
+\r
+ public int Compare(DisplayMode x, DisplayMode y)\r
+ {\r
+ if (x.Width > y.Width)\r
+ return 1;\r
+ if (x.Width < y.Width)\r
+ return -1;\r
+ if (x.Height > y.Height)\r
+ return 1;\r
+ if (x.Height < y.Height)\r
+ return -1;\r
+ if (x.Format > y.Format)\r
+ return 1;\r
+ if (x.Format < y.Format)\r
+ return -1;\r
+ if (x.RefreshRate > y.RefreshRate)\r
+ return 1;\r
+ if (x.RefreshRate < y.RefreshRate)\r
+ return -1;\r
+\r
+ return 0;\r
+ }\r
+ }\r
+\r
+ static class Enumeration9\r
+ {\r
+ public static DeviceSettings MinimumSettings\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ public static List<AdapterInfo9> Adapters\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+\r
+ public static bool HasEnumerated\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+\r
+ public static void Enumerate()\r
+ {\r
+ HasEnumerated = true;\r
+ Adapters = new List<AdapterInfo9>();\r
+ List<Format> adapterFormats = new List<Format>();\r
+ Format[] allowedAdapterFormats = { Format.X8R8G8B8, Format.X1R5G5B5, Format.R5G6B5, \r
+ Format.A2R10G10B10 };\r
+\r
+ foreach (AdapterInformation adapter in GraphicsDeviceManager.Direct3D9Object.Adapters)\r
+ {\r
+ AdapterInfo9 info = new AdapterInfo9();\r
+ info.AdapterOrdinal = adapter.Adapter;\r
+ info.Details = adapter.Details;\r
+\r
+ adapterFormats.Clear();\r
+ foreach (Format adapterFormat in allowedAdapterFormats)\r
+ {\r
+ foreach (DisplayMode displayMode in adapter.GetDisplayModes(adapterFormat))\r
+ {\r
+ if (MinimumSettings != null)\r
+ {\r
+ if (displayMode.Width < MinimumSettings.BackBufferWidth ||\r
+ displayMode.Height < MinimumSettings.BackBufferHeight ||\r
+ displayMode.RefreshRate < MinimumSettings.RefreshRate)\r
+ continue;\r
+ }\r
+\r
+ info.DisplayModes.Add(displayMode);\r
+\r
+ if (!adapterFormats.Contains(displayMode.Format))\r
+ adapterFormats.Add(displayMode.Format);\r
+ }\r
+ }\r
+\r
+ if (!adapterFormats.Contains(adapter.CurrentDisplayMode.Format))\r
+ adapterFormats.Add(adapter.CurrentDisplayMode.Format);\r
+\r
+ info.DisplayModes.Sort(DisplayModeComparer9.Comparer);\r
+\r
+ EnumerateDevices(info, adapterFormats);\r
+\r
+ if (info.Devices.Count > 0)\r
+ Adapters.Add(info);\r
+ }\r
+\r
+ bool unique = true;\r
+ foreach (AdapterInfo9 adapter1 in Adapters)\r
+ {\r
+ foreach (AdapterInfo9 adapter2 in Adapters)\r
+ {\r
+ if (adapter1 == adapter2)\r
+ continue;\r
+ if (adapter1.Details.Description == adapter2.Details.Description)\r
+ {\r
+ unique = false;\r
+ break;\r
+ }\r
+ }\r
+\r
+ if (!unique)\r
+ break;\r
+ }\r
+\r
+ foreach (AdapterInfo9 info in Adapters)\r
+ {\r
+ info.Description = info.Details.Description;\r
+ if (!unique)\r
+ info.Description += " " + info.AdapterOrdinal.ToString(CultureInfo.CurrentCulture);\r
+ }\r
+ }\r
+\r
+ static void EnumerateDevices(AdapterInfo9 info, List<Format> adapterFormats)\r
+ {\r
+ DeviceType[] deviceTypes = { DeviceType.Hardware, DeviceType.Reference };\r
+\r
+ foreach (DeviceType deviceType in deviceTypes)\r
+ {\r
+ if (MinimumSettings != null && MinimumSettings.DeviceType != deviceType)\r
+ continue;\r
+\r
+ DeviceInfo9 deviceInfo = new DeviceInfo9();\r
+ deviceInfo.DeviceType = deviceType;\r
+ deviceInfo.Capabilities = GraphicsDeviceManager.Direct3D9Object.GetDeviceCaps(info.AdapterOrdinal, deviceInfo.DeviceType);\r
+\r
+ EnumerateSettingsCombos(info, deviceInfo, adapterFormats);\r
+\r
+ if (deviceInfo.DeviceSettings.Count > 0)\r
+ info.Devices.Add(deviceInfo);\r
+ }\r
+ }\r
+\r
+ static void EnumerateSettingsCombos(AdapterInfo9 adapterInfo, DeviceInfo9 deviceInfo, List<Format> adapterFormats)\r
+ {\r
+ Format[] backBufferFormats = { Format.A8R8G8B8, Format.X8R8G8B8, Format.A2R10G10B10,\r
+ Format.R5G6B5, Format.A1R5G5B5, Format.X1R5G5B5 };\r
+\r
+ foreach (Format adapterFormat in adapterFormats)\r
+ {\r
+ foreach (Format backBufferFormat in backBufferFormats)\r
+ {\r
+ for (int windowed = 0; windowed < 2; windowed++)\r
+ {\r
+ if (windowed == 0 && adapterInfo.DisplayModes.Count == 0)\r
+ continue;\r
+\r
+ if (!GraphicsDeviceManager.Direct3D9Object.CheckDeviceType(adapterInfo.AdapterOrdinal, deviceInfo.DeviceType,\r
+ adapterFormat, backBufferFormat, (windowed == 1)))\r
+ continue;\r
+\r
+ if (!GraphicsDeviceManager.Direct3D9Object.CheckDeviceFormat(adapterInfo.AdapterOrdinal,\r
+ deviceInfo.DeviceType, adapterFormat, Usage.QueryPostPixelShaderBlending,\r
+ ResourceType.Texture, backBufferFormat))\r
+ continue;\r
+\r
+ SettingsCombo9 combo = new SettingsCombo9();\r
+ combo.AdapterOrdinal = adapterInfo.AdapterOrdinal;\r
+ combo.DeviceType = deviceInfo.DeviceType;\r
+ combo.AdapterFormat = adapterFormat;\r
+ combo.BackBufferFormat = backBufferFormat;\r
+ combo.Windowed = (windowed == 1);\r
+ combo.AdapterInfo = adapterInfo;\r
+ combo.DeviceInfo = deviceInfo;\r
+\r
+ BuildDepthStencilFormatList(combo);\r
+ BuildMultisampleTypeList(combo);\r
+\r
+ if (combo.MultisampleTypes.Count == 0)\r
+ continue;\r
+\r
+ BuildPresentIntervalList(combo);\r
+\r
+ if (MinimumSettings != null)\r
+ {\r
+ if (MinimumSettings.BackBufferFormat != Format.Unknown &&\r
+ MinimumSettings.BackBufferFormat != backBufferFormat)\r
+ continue;\r
+\r
+ if (MinimumSettings.DepthStencilFormat != Format.Unknown &&\r
+ !combo.DepthStencilFormats.Contains(MinimumSettings.DepthStencilFormat))\r
+ continue;\r
+\r
+ if (!combo.MultisampleTypes.Contains(MinimumSettings.MultisampleType))\r
+ continue;\r
+ }\r
+\r
+ deviceInfo.DeviceSettings.Add(combo);\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ static void BuildDepthStencilFormatList(SettingsCombo9 combo)\r
+ {\r
+ List<Format> possibleDepthStencilFormats = new List<Format> {\r
+ Format.D16, Format.D15S1, Format.D24X8,\r
+ Format.D24S8, Format.D24X4S4, Format.D32 };\r
+\r
+ foreach (Format format in possibleDepthStencilFormats)\r
+ {\r
+ if (GraphicsDeviceManager.Direct3D9Object.CheckDeviceFormat(combo.AdapterOrdinal, combo.DeviceType, combo.AdapterFormat,\r
+ Usage.DepthStencil, ResourceType.Surface, format) &&\r
+ GraphicsDeviceManager.Direct3D9Object.CheckDepthStencilMatch(combo.AdapterOrdinal, combo.DeviceType,\r
+ combo.AdapterFormat, combo.BackBufferFormat, format))\r
+ combo.DepthStencilFormats.Add(format);\r
+ }\r
+ }\r
+\r
+ static void BuildMultisampleTypeList(SettingsCombo9 combo)\r
+ {\r
+ List<MultisampleType> possibleMultisampleTypes = new List<MultisampleType>() {\r
+ MultisampleType.None, MultisampleType.NonMaskable,\r
+ MultisampleType.TwoSamples, MultisampleType.ThreeSamples,\r
+ MultisampleType.FourSamples, MultisampleType.FiveSamples,\r
+ MultisampleType.SixSamples, MultisampleType.SevenSamples,\r
+ MultisampleType.EightSamples, MultisampleType.NineSamples,\r
+ MultisampleType.TenSamples, MultisampleType.ElevenSamples,\r
+ MultisampleType.TwelveSamples, MultisampleType.ThirteenSamples,\r
+ MultisampleType.FourteenSamples, MultisampleType.FifteenSamples,\r
+ MultisampleType.SixteenSamples\r
+ };\r
+\r
+ int quality;\r
+ foreach (MultisampleType type in possibleMultisampleTypes)\r
+ {\r
+ if (GraphicsDeviceManager.Direct3D9Object.CheckDeviceMultisampleType(combo.AdapterOrdinal, combo.DeviceType,\r
+ combo.AdapterFormat, combo.Windowed, type, out quality))\r
+ {\r
+ combo.MultisampleTypes.Add(type);\r
+ combo.MultisampleQualities.Add(quality);\r
+ }\r
+ }\r
+ }\r
+\r
+ static void BuildPresentIntervalList(SettingsCombo9 combo)\r
+ {\r
+ List<PresentInterval> possiblePresentIntervals = new List<PresentInterval>() {\r
+ PresentInterval.Immediate, PresentInterval.Default,\r
+ PresentInterval.One, PresentInterval.Two,\r
+ PresentInterval.Three, PresentInterval.Four\r
+ };\r
+\r
+ foreach (PresentInterval interval in possiblePresentIntervals)\r
+ {\r
+ if (combo.Windowed && (interval == PresentInterval.Two ||\r
+ interval == PresentInterval.Three || interval == PresentInterval.Four))\r
+ continue;\r
+\r
+ if (interval == PresentInterval.Default ||\r
+ (combo.DeviceInfo.Capabilities.PresentationIntervals & interval) != 0)\r
+ combo.PresentIntervals.Add(interval);\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+//------------------------------------------------------------------------------\r
+// <auto-generated>\r
+// This code was generated by a tool.\r
+// Runtime Version:2.0.50727.1434\r
+//\r
+// Changes to this file may cause incorrect behavior and will be lost if\r
+// the code is regenerated.\r
+// </auto-generated>\r
+//------------------------------------------------------------------------------\r
+\r
+namespace SampleFramework.Properties {\r
+ using System;\r
+ \r
+ \r
+ /// <summary>\r
+ /// A strongly-typed resource class, for looking up localized strings, etc.\r
+ /// </summary>\r
+ // This class was auto-generated by the StronglyTypedResourceBuilder\r
+ // class via a tool like ResGen or Visual Studio.\r
+ // To add or remove a member, edit your .ResX file then rerun ResGen\r
+ // with the /str option, or rebuild your VS project.\r
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]\r
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r
+ internal class Resources {\r
+ \r
+ private static global::System.Resources.ResourceManager resourceMan;\r
+ \r
+ private static global::System.Globalization.CultureInfo resourceCulture;\r
+ \r
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]\r
+ internal Resources() {\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Returns the cached ResourceManager instance used by this class.\r
+ /// </summary>\r
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r
+ internal static global::System.Resources.ResourceManager ResourceManager {\r
+ get {\r
+ if (object.ReferenceEquals(resourceMan, null)) {\r
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SampleFramework.Properties.Resources", typeof(Resources).Assembly);\r
+ resourceMan = temp;\r
+ }\r
+ return resourceMan;\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Overrides the current thread's CurrentUICulture property for all\r
+ /// resource lookups using this strongly typed resource class.\r
+ /// </summary>\r
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r
+ internal static global::System.Globalization.CultureInfo Culture {\r
+ get {\r
+ return resourceCulture;\r
+ }\r
+ set {\r
+ resourceCulture = value;\r
+ }\r
+ }\r
+ \r
+ internal static System.Drawing.Icon sdx_icon_black {\r
+ get {\r
+ object obj = ResourceManager.GetObject("sdx_icon_black", resourceCulture);\r
+ return ((System.Drawing.Icon)(obj));\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<root>\r
+ <!-- \r
+ Microsoft ResX Schema \r
+ \r
+ Version 2.0\r
+ \r
+ The primary goals of this format is to allow a simple XML format \r
+ that is mostly human readable. The generation and parsing of the \r
+ various data types are done through the TypeConverter classes \r
+ associated with the data types.\r
+ \r
+ Example:\r
+ \r
+ ... ado.net/XML headers & schema ...\r
+ <resheader name="resmimetype">text/microsoft-resx</resheader>\r
+ <resheader name="version">2.0</resheader>\r
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>\r
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>\r
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">\r
+ <value>[base64 mime encoded serialized .NET Framework object]</value>\r
+ </data>\r
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r
+ <comment>This is a comment</comment>\r
+ </data>\r
+ \r
+ There are any number of "resheader" rows that contain simple \r
+ name/value pairs.\r
+ \r
+ Each data row contains a name, and value. The row also contains a \r
+ type or mimetype. Type corresponds to a .NET class that support \r
+ text/value conversion through the TypeConverter architecture. \r
+ Classes that don't support this are serialized and stored with the \r
+ mimetype set.\r
+ \r
+ The mimetype is used for serialized objects, and tells the \r
+ ResXResourceReader how to depersist the object. This is currently not \r
+ extensible. For a given mimetype the value must be set accordingly:\r
+ \r
+ Note - application/x-microsoft.net.object.binary.base64 is the format \r
+ that the ResXResourceWriter will generate, however the reader can \r
+ read any of the formats listed below.\r
+ \r
+ mimetype: application/x-microsoft.net.object.binary.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r
+ : and then encoded with base64 encoding.\r
+ \r
+ mimetype: application/x-microsoft.net.object.soap.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r
+ : and then encoded with base64 encoding.\r
+\r
+ mimetype: application/x-microsoft.net.object.bytearray.base64\r
+ value : The object must be serialized into a byte array \r
+ : using a System.ComponentModel.TypeConverter\r
+ : and then encoded with base64 encoding.\r
+ -->\r
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">\r
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />\r
+ <xsd:element name="root" msdata:IsDataSet="true">\r
+ <xsd:complexType>\r
+ <xsd:choice maxOccurs="unbounded">\r
+ <xsd:element name="metadata">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" use="required" type="xsd:string" />\r
+ <xsd:attribute name="type" type="xsd:string" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="assembly">\r
+ <xsd:complexType>\r
+ <xsd:attribute name="alias" type="xsd:string" />\r
+ <xsd:attribute name="name" type="xsd:string" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="data">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />\r
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="resheader">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:choice>\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:schema>\r
+ <resheader name="resmimetype">\r
+ <value>text/microsoft-resx</value>\r
+ </resheader>\r
+ <resheader name="version">\r
+ <value>2.0</value>\r
+ </resheader>\r
+ <resheader name="reader">\r
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <resheader name="writer">\r
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />\r
+ <data name="sdx_icon_black" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+ <value>..\Resources\sdx_icon_black.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+ </data>\r
+</root>
\ No newline at end of file
--- /dev/null
+/*\r
+* Copyright (c) 2007-2009 SlimDX Group\r
+* \r
+* Permission is hereby granted, free of charge, to any person obtaining a copy\r
+* of this software and associated documentation files (the "Software"), to deal\r
+* in the Software without restriction, including without limitation the rights\r
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+* copies of the Software, and to permit persons to whom the Software is\r
+* furnished to do so, subject to the following conditions:\r
+* \r
+* The above copyright notice and this permission notice shall be included in\r
+* all copies or substantial portions of the Software.\r
+* \r
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+* THE SOFTWARE.\r
+*/\r
+using System;\r
+using System.Runtime.Serialization;\r
+\r
+namespace SampleFramework\r
+{\r
+ /// <summary>\r
+ /// Thrown when a graphics device cannot be created.\r
+ /// </summary>\r
+ [Serializable]\r
+ public class DeviceCreationException : Exception\r
+ {\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="DeviceCreationException"/> class.\r
+ /// </summary>\r
+ public DeviceCreationException()\r
+ {\r
+ }\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="DeviceCreationException"/> class.\r
+ /// </summary>\r
+ /// <param name="message">The message.</param>\r
+ public DeviceCreationException(string message)\r
+ : base(message)\r
+ {\r
+ }\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="DeviceCreationException"/> class.\r
+ /// </summary>\r
+ /// <param name="message">The message.</param>\r
+ /// <param name="innerException">The inner exception.</param>\r
+ public DeviceCreationException(string message, Exception innerException)\r
+ : base(message, innerException)\r
+ {\r
+ }\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="DeviceCreationException"/> class.\r
+ /// </summary>\r
+ /// <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>\r
+ /// <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param>\r
+ /// <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception>\r
+ /// <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception>\r
+ protected DeviceCreationException(SerializationInfo info, StreamingContext context)\r
+ : base(info, context)\r
+ {\r
+ }\r
+ }\r
+}\r
--- /dev/null
+/*\r
+* Copyright (c) 2007-2009 SlimDX Group\r
+* \r
+* Permission is hereby granted, free of charge, to any person obtaining a copy\r
+* of this software and associated documentation files (the "Software"), to deal\r
+* in the Software without restriction, including without limitation the rights\r
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+* copies of the Software, and to permit persons to whom the Software is\r
+* furnished to do so, subject to the following conditions:\r
+* \r
+* The above copyright notice and this permission notice shall be included in\r
+* all copies or substantial portions of the Software.\r
+* \r
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+* THE SOFTWARE.\r
+*/\r
+using System;\r
+using System.Collections.Generic;\r
+using System.Reflection;\r
+using System.Runtime.InteropServices;\r
+using System.Security.Permissions;\r
+using SlimDX;\r
+using SlimDX.Direct3D9;\r
+\r
+namespace SampleFramework\r
+{\r
+ /// <summary>\r
+ /// Manages aspects of the graphics device unique to Direct3D9.\r
+ /// </summary>\r
+ public class Direct3D9Manager\r
+ {\r
+ GraphicsDeviceManager manager;\r
+\r
+ /// <summary>\r
+ /// Gets the graphics device.\r
+ /// </summary>\r
+ /// <value>The graphics device.</value>\r
+ public Device Device\r
+ {\r
+ get;\r
+ internal set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="Direct3D9Manager"/> class.\r
+ /// </summary>\r
+ /// <param name="manager">The parent manager.</param>\r
+ internal Direct3D9Manager(GraphicsDeviceManager manager)\r
+ {\r
+ this.manager = manager;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Creates a vertex declaration using the specified vertex type.\r
+ /// </summary>\r
+ /// <param name="vertexType">Type of the vertex.</param>\r
+ /// <returns>The vertex declaration for the specified vertex type.</returns>\r
+ [EnvironmentPermission(SecurityAction.LinkDemand)]\r
+ public VertexDeclaration CreateVertexDeclaration(Type vertexType)\r
+ {\r
+ // ensure that we have a value type\r
+ if (!vertexType.IsValueType)\r
+ throw new InvalidOperationException("Vertex types must be value types.");\r
+\r
+ // grab the list of elements in the vertex\r
+ List<VertexElementAttribute> objectAttributes = new List<VertexElementAttribute>();\r
+ FieldInfo[] fields = vertexType.GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);\r
+ foreach (FieldInfo field in fields)\r
+ {\r
+ // check for the custom attribute\r
+ VertexElementAttribute[] attributes = (VertexElementAttribute[])field.GetCustomAttributes(typeof(VertexElementAttribute), false);\r
+ if (field.Name.Contains("<") && field.Name.Contains(">"))\r
+ {\r
+ // look up the property matching this field to see if it has the attribute\r
+ int index1 = field.Name.IndexOf('<');\r
+ int index2 = field.Name.IndexOf('>');\r
+\r
+ // parse out the name\r
+ string propertyName = field.Name.Substring(index1 + 1, index2 - index1 - 1);\r
+ PropertyInfo property = vertexType.GetProperty(propertyName, field.FieldType);\r
+ if (property != null)\r
+ attributes = (VertexElementAttribute[])property.GetCustomAttributes(typeof(VertexElementAttribute), false);\r
+ }\r
+ if (attributes.Length == 1)\r
+ {\r
+ // add the attribute to the list\r
+ attributes[0].Offset = Marshal.OffsetOf(vertexType, field.Name).ToInt32();\r
+ objectAttributes.Add(attributes[0]);\r
+ }\r
+ }\r
+\r
+ // make sure we have at least one element\r
+ if (objectAttributes.Count < 1)\r
+ throw new InvalidOperationException("The vertex type must have at least one field or property marked with the VertexElement attribute.");\r
+\r
+ // loop through the attributes and start building vertex elements\r
+ List<VertexElement> elements = new List<VertexElement>();\r
+ Dictionary<DeclarationUsage, int> usages = new Dictionary<DeclarationUsage, int>();\r
+ foreach (VertexElementAttribute attribute in objectAttributes)\r
+ {\r
+ // check the current usage index\r
+ if (!usages.ContainsKey(attribute.Usage))\r
+ usages.Add(attribute.Usage, 0);\r
+\r
+ // advance the current usage count\r
+ int index = usages[attribute.Usage];\r
+ usages[attribute.Usage]++;\r
+\r
+ // create the element\r
+ elements.Add(new VertexElement((short)attribute.Stream, (short)attribute.Offset, attribute.Type,\r
+ attribute.Method, attribute.Usage, (byte)index));\r
+ }\r
+\r
+ elements.Add(VertexElement.VertexDeclarationEnd);\r
+ return new VertexDeclaration(Device, elements.ToArray());\r
+ }\r
+\r
+ /// <summary>\r
+ /// Creates a render target surface that is compatible with the current device settings.\r
+ /// </summary>\r
+ /// <param name="width">The width of the surface.</param>\r
+ /// <param name="height">The height of the surface.</param>\r
+ /// <returns>The newly created render target surface.</returns>\r
+ public Texture CreateRenderTarget(int width, int height)\r
+ {\r
+ return new Texture(Device, width, height, 1, Usage.RenderTarget, manager.CurrentSettings.BackBufferFormat, Pool.Default);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Creates a resolve target for capturing the back buffer.\r
+ /// </summary>\r
+ /// <returns>The newly created resolve target.</returns>\r
+ public Texture CreateResolveTarget()\r
+ {\r
+ return new Texture(Device, manager.ScreenWidth, manager.ScreenHeight, 1, Usage.RenderTarget, manager.CurrentSettings.BackBufferFormat, Pool.Default);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Resolves the current back buffer into a texture.\r
+ /// </summary>\r
+ /// <param name="target">The target texture.</param>\r
+ /// <exception cref="InvalidOperationException">Thrown when the resolve process fails.</exception>\r
+ public void ResolveBackBuffer(Texture target)\r
+ {\r
+ ResolveBackBuffer(target, 0);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Resolves the current back buffer into a texture.\r
+ /// </summary>\r
+ /// <param name="target">The target texture.</param>\r
+ /// <param name="backBufferIndex">The index of the back buffer.</param>\r
+ /// <exception cref="InvalidOperationException">Thrown when the resolve process fails.</exception>\r
+ public void ResolveBackBuffer(Texture target, int backBufferIndex)\r
+ {\r
+ // disable exceptions for this method\r
+ bool storedThrow = Configuration.ThrowOnError;\r
+ Configuration.ThrowOnError = false;\r
+ Surface destination = null;\r
+\r
+ try\r
+ {\r
+ // grab the current back buffer\r
+ Surface backBuffer = Device.GetBackBuffer(0, backBufferIndex);\r
+ if (backBuffer == null || Result.Last.IsFailure)\r
+ throw new InvalidOperationException("Could not obtain back buffer surface.");\r
+\r
+ // grab the destination surface\r
+ destination = target.GetSurfaceLevel(0);\r
+ if (destination == null || Result.Last.IsFailure)\r
+ throw new InvalidOperationException("Could not obtain resolve target surface.");\r
+\r
+ // first try to copy using linear filtering\r
+ if (Device.StretchRectangle(backBuffer, destination, TextureFilter.Linear).IsFailure)\r
+ {\r
+ // that failed, so try with no filtering\r
+ if (Device.StretchRectangle(backBuffer, destination, TextureFilter.None).IsFailure)\r
+ {\r
+ // that failed as well, so the last thing we can try is a load surface call\r
+ if (Surface.FromSurface(destination, backBuffer, Filter.Default, 0).IsFailure)\r
+ throw new InvalidOperationException("Could not copy surfaces.");\r
+ }\r
+ }\r
+ }\r
+ finally\r
+ {\r
+ if (destination != null)\r
+ destination.Dispose();\r
+ Configuration.ThrowOnError = storedThrow;\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Resets the render target.\r
+ /// </summary>\r
+ public void ResetRenderTarget()\r
+ {\r
+ Surface backBuffer = Device.GetBackBuffer(0, 0);\r
+\r
+ try\r
+ {\r
+ Device.SetRenderTarget(0, backBuffer);\r
+ }\r
+ finally\r
+ {\r
+ backBuffer.Dispose();\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+/*\r
+* Copyright (c) 2007-2009 SlimDX Group\r
+* \r
+* Permission is hereby granted, free of charge, to any person obtaining a copy\r
+* of this software and associated documentation files (the "Software"), to deal\r
+* in the Software without restriction, including without limitation the rights\r
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+* copies of the Software, and to permit persons to whom the Software is\r
+* furnished to do so, subject to the following conditions:\r
+* \r
+* The above copyright notice and this permission notice shall be included in\r
+* all copies or substantial portions of the Software.\r
+* \r
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+* THE SOFTWARE.\r
+*/\r
+\r
+namespace SampleFramework\r
+{\r
+}\r
--- /dev/null
+/*\r
+* Copyright (c) 2007-2009 SlimDX Group\r
+* \r
+* Permission is hereby granted, free of charge, to any person obtaining a copy\r
+* of this software and associated documentation files (the "Software"), to deal\r
+* in the Software without restriction, including without limitation the rights\r
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+* copies of the Software, and to permit persons to whom the Software is\r
+* furnished to do so, subject to the following conditions:\r
+* \r
+* The above copyright notice and this permission notice shall be included in\r
+* all copies or substantial portions of the Software.\r
+* \r
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+* THE SOFTWARE.\r
+*/\r
+using System;\r
+using System.ComponentModel;\r
+using System.Drawing;\r
+using System.Text;\r
+using System.Threading;\r
+using System.Windows.Forms;\r
+using SlimDX;\r
+using SlimDX.Direct3D9;\r
+using SlimDX.DXGI;\r
+\r
+namespace SampleFramework\r
+{\r
+ /// <summary>\r
+ /// Handles the configuration and management of the graphics device.\r
+ /// </summary>\r
+ public class GraphicsDeviceManager : IDisposable\r
+ {\r
+ Game game;\r
+ bool ignoreSizeChanges;\r
+ bool deviceLost;\r
+ bool doNotStoreBufferSize;\r
+ bool renderingOccluded;\r
+\r
+ int fullscreenWindowWidth;\r
+ int fullscreenWindowHeight;\r
+ int windowedWindowWidth;\r
+ int windowedWindowHeight;\r
+ WINDOWPLACEMENT windowedPlacement;\r
+ long windowedStyle;\r
+ bool savedTopmost;\r
+\r
+ internal static Direct3D Direct3D9Object\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+\r
+ public DeviceSettings CurrentSettings\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+ public bool IsWindowed\r
+ {\r
+ get { return CurrentSettings.Windowed; }\r
+ }\r
+ public int ScreenWidth\r
+ {\r
+ get { return CurrentSettings.BackBufferWidth; }\r
+ }\r
+ public int ScreenHeight\r
+ {\r
+ get { return CurrentSettings.BackBufferHeight; }\r
+ }\r
+ public Size ScreenSize\r
+ {\r
+ get { return new Size(CurrentSettings.BackBufferWidth, CurrentSettings.BackBufferHeight); }\r
+ }\r
+ public Direct3D9Manager Direct3D9\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+ public string DeviceStatistics\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+ public string DeviceInformation\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+\r
+ public GraphicsDeviceManager( Game game )\r
+ {\r
+ if( game == null )\r
+ throw new ArgumentNullException( "game" );\r
+\r
+ this.game = game;\r
+\r
+ game.Window.ScreenChanged += Window_ScreenChanged;\r
+ game.Window.UserResized += Window_UserResized;\r
+\r
+ game.FrameStart += game_FrameStart;\r
+ game.FrameEnd += game_FrameEnd;\r
+\r
+ Direct3D9 = new Direct3D9Manager( this );\r
+ }\r
+\r
+ public void Dispose()\r
+ {\r
+ Dispose(true);\r
+ GC.SuppressFinalize(this);\r
+ }\r
+\r
+ public void ChangeDevice( DeviceSettings settings, DeviceSettings minimumSettings )\r
+ {\r
+ if( settings == null )\r
+ throw new ArgumentNullException( "settings" );\r
+\r
+ Enumeration9.MinimumSettings = minimumSettings;\r
+\r
+ DeviceSettings validSettings = DeviceSettings.FindValidSettings( settings );\r
+\r
+ validSettings.Direct3D9.PresentParameters.DeviceWindowHandle = game.Window.Handle;\r
+\r
+ CreateDevice( validSettings );\r
+ }\r
+ public void ChangeDevice(bool windowed, int desiredWidth, int desiredHeight)\r
+ {\r
+ DeviceSettings desiredSettings = new DeviceSettings();\r
+ desiredSettings.Windowed = windowed;\r
+ desiredSettings.BackBufferWidth = desiredWidth;\r
+ desiredSettings.BackBufferHeight = desiredHeight;\r
+\r
+ ChangeDevice(desiredSettings, null);\r
+ }\r
+ public void ChangeDevice(DeviceSettings settings)\r
+ {\r
+ ChangeDevice(settings, null);\r
+ }\r
+\r
+ public void ToggleFullScreen()\r
+ {\r
+ if (!EnsureDevice())\r
+ throw new InvalidOperationException("No valid device.");\r
+\r
+ DeviceSettings newSettings = CurrentSettings.Clone();\r
+\r
+ newSettings.Windowed = !newSettings.Windowed;\r
+\r
+ int width = newSettings.Windowed ? windowedWindowWidth : fullscreenWindowWidth;\r
+ int height = newSettings.Windowed ? windowedWindowHeight : fullscreenWindowHeight;\r
+\r
+ newSettings.BackBufferWidth = width;\r
+ newSettings.BackBufferHeight = height;\r
+\r
+ ChangeDevice(newSettings);\r
+ }\r
+ public bool EnsureDevice()\r
+ {\r
+ if (Direct3D9.Device != null && !deviceLost)\r
+ return true;\r
+\r
+ return false;\r
+ }\r
+\r
+ protected virtual void Dispose( bool disposing )\r
+ {\r
+ if( this.bDisposed )\r
+ return;\r
+ this.bDisposed = true;\r
+\r
+ if( disposing )\r
+ ReleaseDevice();\r
+\r
+ }\r
+ private bool bDisposed = false;\r
+\r
+ void CreateDevice(DeviceSettings settings)\r
+ {\r
+ DeviceSettings oldSettings = CurrentSettings;\r
+ CurrentSettings = settings;\r
+\r
+ ignoreSizeChanges = true;\r
+\r
+ bool keepCurrentWindowSize = false;\r
+ if (settings.BackBufferWidth == 0 && settings.BackBufferHeight == 0)\r
+ keepCurrentWindowSize = true;\r
+\r
+ // handle the window state in Direct3D9 (it will be handled for us in DXGI)\r
+ // check if we are going to windowed or fullscreen mode\r
+ if( settings.Windowed )\r
+ {\r
+ if( oldSettings != null && !oldSettings.Windowed )\r
+ NativeMethods.SetWindowLong( game.Window.Handle, WindowConstants.GWL_STYLE, (uint) windowedStyle );\r
+ }\r
+ else\r
+ {\r
+ if( oldSettings == null || oldSettings.Windowed )\r
+ {\r
+ savedTopmost = game.Window.TopMost;\r
+ long style = NativeMethods.GetWindowLong( game.Window.Handle, WindowConstants.GWL_STYLE );\r
+ style &= ~WindowConstants.WS_MAXIMIZE & ~WindowConstants.WS_MINIMIZE;\r
+ windowedStyle = style;\r
+\r
+ windowedPlacement = new WINDOWPLACEMENT();\r
+ windowedPlacement.length = WINDOWPLACEMENT.Length;\r
+ NativeMethods.GetWindowPlacement( game.Window.Handle, ref windowedPlacement );\r
+ }\r
+\r
+ // hide the window until we are done messing with it\r
+ game.Window.Hide();\r
+ NativeMethods.SetWindowLong( game.Window.Handle, WindowConstants.GWL_STYLE, (uint) ( WindowConstants.WS_POPUP | WindowConstants.WS_SYSMENU ) );\r
+\r
+ WINDOWPLACEMENT placement = new WINDOWPLACEMENT();\r
+ placement.length = WINDOWPLACEMENT.Length;\r
+ NativeMethods.GetWindowPlacement( game.Window.Handle, ref placement );\r
+\r
+ // check if we are in the middle of a restore\r
+ if( ( placement.flags & WindowConstants.WPF_RESTORETOMAXIMIZED ) != 0 )\r
+ {\r
+ // update the flags to avoid sizing issues\r
+ placement.flags &= ~WindowConstants.WPF_RESTORETOMAXIMIZED;\r
+ placement.showCmd = WindowConstants.SW_RESTORE;\r
+ NativeMethods.SetWindowPlacement( game.Window.Handle, ref placement );\r
+ }\r
+ }\r
+\r
+ if (settings.Windowed)\r
+ {\r
+ if (oldSettings != null && !oldSettings.Windowed)\r
+ {\r
+ fullscreenWindowWidth = oldSettings.BackBufferWidth;\r
+ fullscreenWindowHeight = oldSettings.BackBufferHeight;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ if (oldSettings != null && oldSettings.Windowed)\r
+ {\r
+ windowedWindowWidth = oldSettings.BackBufferWidth;\r
+ windowedWindowHeight = oldSettings.BackBufferHeight;\r
+ }\r
+ }\r
+\r
+ // check if the device can be reset, or if we need to completely recreate it\r
+ Result result = SlimDX.Direct3D9.ResultCode.Success;\r
+ bool canReset = CanDeviceBeReset(oldSettings, settings);\r
+ if (canReset)\r
+ result = ResetDevice();\r
+\r
+ if (result == SlimDX.Direct3D9.ResultCode.DeviceLost)\r
+ deviceLost = true;\r
+ else if (!canReset || result.IsFailure)\r
+ {\r
+ if (oldSettings != null)\r
+ ReleaseDevice();\r
+\r
+ InitializeDevice();\r
+ }\r
+\r
+ UpdateDeviceInformation();\r
+\r
+ // check if we changed from fullscreen to windowed mode\r
+ if (oldSettings != null && !oldSettings.Windowed && settings.Windowed)\r
+ {\r
+ NativeMethods.SetWindowPlacement(game.Window.Handle, ref windowedPlacement);\r
+ game.Window.TopMost = savedTopmost;\r
+ }\r
+\r
+ // check if we need to resize\r
+ if (settings.Windowed && !keepCurrentWindowSize)\r
+ {\r
+ int width;\r
+ int height;\r
+ if (NativeMethods.IsIconic(game.Window.Handle))\r
+ {\r
+ WINDOWPLACEMENT placement = new WINDOWPLACEMENT();\r
+ placement.length = WINDOWPLACEMENT.Length;\r
+ NativeMethods.GetWindowPlacement(game.Window.Handle, ref placement);\r
+\r
+ // check if we are being restored\r
+ if ((placement.flags & WindowConstants.WPF_RESTORETOMAXIMIZED) != 0 && placement.showCmd == WindowConstants.SW_SHOWMINIMIZED)\r
+ {\r
+ NativeMethods.ShowWindow(game.Window.Handle, WindowConstants.SW_RESTORE);\r
+\r
+ Rectangle rect = NativeMethods.GetClientRectangle(game.Window.Handle);\r
+\r
+ width = rect.Width;\r
+ height = rect.Height;\r
+ NativeMethods.ShowWindow(game.Window.Handle, WindowConstants.SW_MINIMIZE);\r
+ }\r
+ else\r
+ {\r
+ NativeRectangle frame = new NativeRectangle();\r
+ NativeMethods.AdjustWindowRect(ref frame, (uint)windowedStyle, false);\r
+ int frameWidth = frame.right - frame.left;\r
+ int frameHeight = frame.bottom - frame.top;\r
+\r
+ width = placement.rcNormalPosition.right - placement.rcNormalPosition.left - frameWidth;\r
+ height = placement.rcNormalPosition.bottom - placement.rcNormalPosition.top - frameHeight;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ Rectangle rect = NativeMethods.GetClientRectangle(game.Window.Handle);\r
+ width = rect.Width;\r
+ height = rect.Height;\r
+ }\r
+\r
+ // check if we have a different desired size\r
+ if (width != settings.BackBufferWidth ||\r
+ height != settings.BackBufferHeight)\r
+ {\r
+ if (NativeMethods.IsIconic(game.Window.Handle))\r
+ NativeMethods.ShowWindow(game.Window.Handle, WindowConstants.SW_RESTORE);\r
+ if (NativeMethods.IsZoomed(game.Window.Handle))\r
+ NativeMethods.ShowWindow(game.Window.Handle, WindowConstants.SW_RESTORE);\r
+\r
+ NativeRectangle rect = new NativeRectangle();\r
+ rect.right = settings.BackBufferWidth;\r
+ rect.bottom = settings.BackBufferHeight;\r
+ NativeMethods.AdjustWindowRect(ref rect,\r
+ NativeMethods.GetWindowLong(game.Window.Handle, WindowConstants.GWL_STYLE), false);\r
+\r
+ NativeMethods.SetWindowPos(game.Window.Handle, IntPtr.Zero, 0, 0, rect.right - rect.left,\r
+ rect.bottom - rect.top, WindowConstants.SWP_NOZORDER | WindowConstants.SWP_NOMOVE);\r
+\r
+ Rectangle r = NativeMethods.GetClientRectangle(game.Window.Handle);\r
+ int clientWidth = r.Width;\r
+ int clientHeight = r.Height;\r
+\r
+ // check if the size was modified by Windows\r
+ if (clientWidth != settings.BackBufferWidth ||\r
+ clientHeight != settings.BackBufferHeight)\r
+ {\r
+ DeviceSettings newSettings = CurrentSettings.Clone();\r
+ newSettings.BackBufferWidth = 0;\r
+ newSettings.BackBufferHeight = 0;\r
+ if (newSettings.Direct3D9 != null)\r
+ {\r
+ newSettings.Direct3D9.PresentParameters.BackBufferWidth = 640; // #23510 2010.10.31 add yyagi: to avoid setting BackBufferSize=ClientSize\r
+ newSettings.Direct3D9.PresentParameters.BackBufferHeight = 480; // #23510 2010.10.31 add yyagi: to avoid setting BackBufferSize=ClientSize\r
+ }\r
+\r
+ CreateDevice(newSettings);\r
+ }\r
+ }\r
+ }\r
+\r
+ // if the window is still hidden, make sure it is shown\r
+ if (!game.Window.Visible)\r
+ NativeMethods.ShowWindow(game.Window.Handle, WindowConstants.SW_SHOW);\r
+\r
+ // set the execution state of the thread\r
+ if (!IsWindowed)\r
+ NativeMethods.SetThreadExecutionState(WindowConstants.ES_DISPLAY_REQUIRED | WindowConstants.ES_CONTINUOUS);\r
+ else\r
+ NativeMethods.SetThreadExecutionState(WindowConstants.ES_CONTINUOUS);\r
+\r
+ ignoreSizeChanges = false;\r
+ }\r
+\r
+ void Window_UserResized( object sender, EventArgs e )\r
+ {\r
+ if( ignoreSizeChanges || !EnsureDevice() || ( !IsWindowed ) )\r
+ return;\r
+\r
+ DeviceSettings newSettings = CurrentSettings.Clone();\r
+\r
+ Rectangle rect = NativeMethods.GetClientRectangle( game.Window.Handle );\r
+ if( rect.Width != newSettings.BackBufferWidth || rect.Height != newSettings.BackBufferHeight )\r
+ {\r
+ newSettings.BackBufferWidth = 0;\r
+ newSettings.BackBufferHeight = 0;\r
+ newSettings.Direct3D9.PresentParameters.BackBufferWidth = 640; // #23510 2010.10.31 add yyagi: to avoid setting BackBufferSize=ClientSize\r
+ newSettings.Direct3D9.PresentParameters.BackBufferHeight = 480; // \r
+ CreateDevice( newSettings );\r
+ }\r
+ }\r
+ void Window_ScreenChanged( object sender, EventArgs e )\r
+ {\r
+ if( !EnsureDevice() || !CurrentSettings.Windowed || ignoreSizeChanges )\r
+ return;\r
+\r
+ IntPtr windowMonitor = NativeMethods.MonitorFromWindow( game.Window.Handle, WindowConstants.MONITOR_DEFAULTTOPRIMARY );\r
+\r
+ DeviceSettings newSettings = CurrentSettings.Clone();\r
+ int adapterOrdinal = GetAdapterOrdinal( windowMonitor );\r
+ if( adapterOrdinal == -1 )\r
+ return;\r
+ newSettings.Direct3D9.AdapterOrdinal = adapterOrdinal;\r
+\r
+ CreateDevice( newSettings );\r
+ }\r
+\r
+ void game_FrameEnd( object sender, EventArgs e )\r
+ {\r
+ Result result = Direct3D9.Device.Present();\r
+ if( result == SlimDX.Direct3D9.ResultCode.DeviceLost )\r
+ deviceLost = true;\r
+ }\r
+ void game_FrameStart(object sender, CancelEventArgs e)\r
+ {\r
+ if (Direct3D9.Device == null )\r
+ {\r
+ e.Cancel = true;\r
+ return;\r
+ }\r
+\r
+ if (!game.IsActive || deviceLost)\r
+ Thread.Sleep(50);\r
+\r
+ if (deviceLost)\r
+ {\r
+ Result result = Direct3D9.Device.TestCooperativeLevel();\r
+ if (result == SlimDX.Direct3D9.ResultCode.DeviceLost)\r
+ {\r
+ e.Cancel = true;\r
+ return;\r
+ }\r
+\r
+ // if we are windowed, check the adapter format to see if the user\r
+ // changed the desktop format, causing a lost device\r
+ if (IsWindowed)\r
+ {\r
+ DisplayMode displayMode = GraphicsDeviceManager.Direct3D9Object.GetAdapterDisplayMode(CurrentSettings.Direct3D9.AdapterOrdinal);\r
+ if (CurrentSettings.Direct3D9.AdapterFormat != displayMode.Format)\r
+ {\r
+ DeviceSettings newSettings = CurrentSettings.Clone();\r
+ ChangeDevice(newSettings);\r
+ e.Cancel = true;\r
+ return;\r
+ }\r
+ }\r
+\r
+ result = ResetDevice();\r
+ if (result.IsFailure)\r
+ {\r
+ e.Cancel = true;\r
+ return;\r
+ }\r
+ }\r
+\r
+ deviceLost = false;\r
+ }\r
+\r
+ bool CanDeviceBeReset( DeviceSettings oldSettings, DeviceSettings newSettings )\r
+ {\r
+ if( oldSettings == null )\r
+ return false;\r
+\r
+ return Direct3D9.Device != null &&\r
+ oldSettings.Direct3D9.AdapterOrdinal == newSettings.Direct3D9.AdapterOrdinal &&\r
+ oldSettings.Direct3D9.DeviceType == newSettings.Direct3D9.DeviceType &&\r
+ oldSettings.Direct3D9.CreationFlags == newSettings.Direct3D9.CreationFlags;\r
+ }\r
+\r
+ void InitializeDevice()\r
+ {\r
+ try\r
+ {\r
+ EnsureD3D9();\r
+\r
+ Direct3D9.Device = new SlimDX.Direct3D9.Device( Direct3D9Object, CurrentSettings.Direct3D9.AdapterOrdinal,\r
+ CurrentSettings.Direct3D9.DeviceType, game.Window.Handle,\r
+ CurrentSettings.Direct3D9.CreationFlags, CurrentSettings.Direct3D9.PresentParameters );\r
+\r
+ if( Result.Last == SlimDX.Direct3D9.ResultCode.DeviceLost )\r
+ {\r
+ deviceLost = true;\r
+ return;\r
+ }\r
+ }\r
+ catch( Exception e )\r
+ {\r
+ throw new DeviceCreationException( "Could not create graphics device.", e );\r
+ }\r
+\r
+ PropogateSettings();\r
+\r
+ UpdateDeviceStats();\r
+\r
+ game.Initialize();\r
+ game.LoadContent();\r
+ }\r
+\r
+ Result ResetDevice()\r
+ {\r
+ game.UnloadContent();\r
+\r
+ Result result = Direct3D9.Device.Reset( CurrentSettings.Direct3D9.PresentParameters );\r
+ if( result == SlimDX.Direct3D9.ResultCode.DeviceLost )\r
+ return result;\r
+\r
+ PropogateSettings();\r
+ UpdateDeviceStats();\r
+ game.LoadContent();\r
+\r
+ return Result.Last;\r
+ }\r
+\r
+ void ReleaseDevice()\r
+ {\r
+ ReleaseDevice9();\r
+ }\r
+ void ReleaseDevice9()\r
+ {\r
+ if (Direct3D9.Device == null)\r
+ return;\r
+\r
+ if (game != null)\r
+ {\r
+ game.UnloadContent();\r
+ game.Dispose(true);\r
+ }\r
+\r
+ try\r
+ {\r
+ Direct3D9.Device.Dispose();\r
+ }\r
+ catch( ObjectDisposedException )\r
+ {\r
+ // 時々発生するのでキャッチしておく。\r
+ }\r
+ Direct3D9Object.Dispose();\r
+\r
+ Direct3D9Object = null;\r
+ Direct3D9.Device = null;\r
+ }\r
+ void PropogateSettings()\r
+ {\r
+ CurrentSettings.BackBufferCount = CurrentSettings.Direct3D9.PresentParameters.BackBufferCount;\r
+ CurrentSettings.BackBufferWidth = CurrentSettings.Direct3D9.PresentParameters.BackBufferWidth;\r
+ CurrentSettings.BackBufferHeight = CurrentSettings.Direct3D9.PresentParameters.BackBufferHeight;\r
+ CurrentSettings.BackBufferFormat = CurrentSettings.Direct3D9.PresentParameters.BackBufferFormat;\r
+ CurrentSettings.DepthStencilFormat = CurrentSettings.Direct3D9.PresentParameters.AutoDepthStencilFormat;\r
+ CurrentSettings.DeviceType = CurrentSettings.Direct3D9.DeviceType;\r
+ CurrentSettings.MultisampleQuality = CurrentSettings.Direct3D9.PresentParameters.MultisampleQuality;\r
+ CurrentSettings.MultisampleType = CurrentSettings.Direct3D9.PresentParameters.Multisample;\r
+ CurrentSettings.RefreshRate = CurrentSettings.Direct3D9.PresentParameters.FullScreenRefreshRateInHertz;\r
+ CurrentSettings.Windowed = CurrentSettings.Direct3D9.PresentParameters.Windowed;\r
+ }\r
+\r
+ void UpdateDeviceInformation()\r
+ {\r
+ StringBuilder builder = new StringBuilder();\r
+\r
+ if( CurrentSettings.Direct3D9.DeviceType == DeviceType.Hardware )\r
+ builder.Append( "HAL" );\r
+ else if( CurrentSettings.Direct3D9.DeviceType == DeviceType.Reference )\r
+ builder.Append( "REF" );\r
+ else if( CurrentSettings.Direct3D9.DeviceType == DeviceType.Software )\r
+ builder.Append( "SW" );\r
+\r
+ if( ( CurrentSettings.Direct3D9.CreationFlags & CreateFlags.HardwareVertexProcessing ) != 0 )\r
+ if( CurrentSettings.Direct3D9.DeviceType == DeviceType.Hardware )\r
+ builder.Append( " (hw vp)" );\r
+ else\r
+ builder.Append( " (simulated hw vp)" );\r
+ else if( ( CurrentSettings.Direct3D9.CreationFlags & CreateFlags.MixedVertexProcessing ) != 0 )\r
+ if( CurrentSettings.Direct3D9.DeviceType == DeviceType.Hardware )\r
+ builder.Append( " (mixed vp)" );\r
+ else\r
+ builder.Append( " (simulated mixed vp)" );\r
+ else\r
+ builder.Append( " (sw vp)" );\r
+\r
+ if( CurrentSettings.Direct3D9.DeviceType == DeviceType.Hardware )\r
+ {\r
+ // loop through each adapter until we find the right one\r
+ foreach( AdapterInfo9 adapterInfo in Enumeration9.Adapters )\r
+ {\r
+ if( adapterInfo.AdapterOrdinal == CurrentSettings.Direct3D9.AdapterOrdinal )\r
+ {\r
+ builder.AppendFormat( ": {0}", adapterInfo.Description );\r
+ break;\r
+ }\r
+ }\r
+ }\r
+\r
+ DeviceInformation = builder.ToString();\r
+ }\r
+\r
+ void UpdateDeviceStats()\r
+ {\r
+ StringBuilder builder = new StringBuilder();\r
+\r
+ builder.Append( "D3D9 Vsync " );\r
+\r
+ if( CurrentSettings.Direct3D9.PresentParameters.PresentationInterval == PresentInterval.Immediate )\r
+ builder.Append( "off" );\r
+ else\r
+ builder.Append( "on" );\r
+\r
+ builder.AppendFormat( " ({0}x{1}), ", CurrentSettings.Direct3D9.PresentParameters.BackBufferWidth, CurrentSettings.Direct3D9.PresentParameters.BackBufferHeight );\r
+\r
+ if( CurrentSettings.Direct3D9.AdapterFormat == CurrentSettings.Direct3D9.PresentParameters.BackBufferFormat )\r
+ builder.Append( Enum.GetName( typeof( SlimDX.Direct3D9.Format ), CurrentSettings.Direct3D9.AdapterFormat ) );\r
+ else\r
+ builder.AppendFormat( "backbuf {0}, adapter {1}",\r
+ Enum.GetName( typeof( SlimDX.Direct3D9.Format ), CurrentSettings.Direct3D9.AdapterFormat ),\r
+ Enum.GetName( typeof( SlimDX.Direct3D9.Format ), CurrentSettings.Direct3D9.PresentParameters.BackBufferFormat ) );\r
+\r
+ builder.AppendFormat( " ({0})", Enum.GetName( typeof( SlimDX.Direct3D9.Format ), CurrentSettings.Direct3D9.PresentParameters.AutoDepthStencilFormat ) );\r
+\r
+ if( CurrentSettings.Direct3D9.PresentParameters.Multisample == MultisampleType.NonMaskable )\r
+ builder.Append( " (Nonmaskable Multisample)" );\r
+ else if( CurrentSettings.Direct3D9.PresentParameters.Multisample != MultisampleType.None )\r
+ builder.AppendFormat( " ({0}x Multisample)", (int) CurrentSettings.Direct3D9.PresentParameters.Multisample );\r
+\r
+ DeviceStatistics = builder.ToString();\r
+ }\r
+\r
+ int GetAdapterOrdinal( IntPtr screen )\r
+ {\r
+ AdapterInfo9 adapter = null;\r
+ foreach( AdapterInfo9 a in Enumeration9.Adapters )\r
+ {\r
+ if( Direct3D9Object.GetAdapterMonitor( a.AdapterOrdinal ) == screen )\r
+ {\r
+ adapter = a;\r
+ break;\r
+ }\r
+ }\r
+\r
+ if( adapter != null )\r
+ return adapter.AdapterOrdinal;\r
+\r
+ return -1;\r
+ }\r
+\r
+ internal static void EnsureD3D9()\r
+ {\r
+ if (Direct3D9Object == null)\r
+ Direct3D9Object = new Direct3D();\r
+ }\r
+ }\r
+}\r
--- /dev/null
+/*\r
+* Copyright (c) 2007-2009 SlimDX Group\r
+* \r
+* Permission is hereby granted, free of charge, to any person obtaining a copy\r
+* of this software and associated documentation files (the "Software"), to deal\r
+* in the Software without restriction, including without limitation the rights\r
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+* copies of the Software, and to permit persons to whom the Software is\r
+* furnished to do so, subject to the following conditions:\r
+* \r
+* The above copyright notice and this permission notice shall be included in\r
+* all copies or substantial portions of the Software.\r
+* \r
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+* THE SOFTWARE.\r
+*/\r
+using System;\r
+using System.Runtime.Serialization;\r
+\r
+namespace SampleFramework\r
+{\r
+ /// <summary>\r
+ /// Thrown when no available graphics device fits the given device preferences.\r
+ /// </summary>\r
+ [Serializable]\r
+ public class NoCompatibleDevicesException : Exception\r
+ {\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="NoCompatibleDevicesException"/> class.\r
+ /// </summary>\r
+ public NoCompatibleDevicesException()\r
+ {\r
+ }\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="NoCompatibleDevicesException"/> class.\r
+ /// </summary>\r
+ /// <param name="message">The message.</param>\r
+ public NoCompatibleDevicesException(string message)\r
+ : base(message)\r
+ {\r
+ }\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="NoCompatibleDevicesException"/> class.\r
+ /// </summary>\r
+ /// <param name="message">The message.</param>\r
+ /// <param name="innerException">The inner exception.</param>\r
+ public NoCompatibleDevicesException(string message, Exception innerException)\r
+ : base(message, innerException)\r
+ {\r
+ }\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="NoCompatibleDevicesException"/> class.\r
+ /// </summary>\r
+ /// <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>\r
+ /// <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param>\r
+ /// <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception>\r
+ /// <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception>\r
+ protected NoCompatibleDevicesException(SerializationInfo info, StreamingContext context)\r
+ : base(info, context)\r
+ {\r
+ }\r
+ }\r
+}\r
--- /dev/null
+/*\r
+* Copyright (c) 2007-2009 SlimDX Group\r
+* \r
+* Permission is hereby granted, free of charge, to any person obtaining a copy\r
+* of this software and associated documentation files (the "Software"), to deal\r
+* in the Software without restriction, including without limitation the rights\r
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+* copies of the Software, and to permit persons to whom the Software is\r
+* furnished to do so, subject to the following conditions:\r
+* \r
+* The above copyright notice and this permission notice shall be included in\r
+* all copies or substantial portions of the Software.\r
+* \r
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+* THE SOFTWARE.\r
+*/\r
+using System;\r
+using SlimDX.Direct3D9;\r
+\r
+namespace SampleFramework\r
+{\r
+ /// <summary>\r
+ /// Indicates that the target code element is part of a vertex declaration.\r
+ /// </summary>\r
+ [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]\r
+ public sealed class VertexElementAttribute : Attribute\r
+ {\r
+ /// <summary>\r
+ /// Gets or sets the stream index.\r
+ /// </summary>\r
+ /// <value>The stream index.</value>\r
+ public int Stream\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the tessellation method.\r
+ /// </summary>\r
+ /// <value>The tessellation method.</value>\r
+ public DeclarationMethod Method\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the element usage.\r
+ /// </summary>\r
+ /// <value>The element usage.</value>\r
+ public DeclarationUsage Usage\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the type of the data.\r
+ /// </summary>\r
+ /// <value>The type of the data.</value>\r
+ public DeclarationType Type\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the offset.\r
+ /// </summary>\r
+ /// <value>The offset.</value>\r
+ internal int Offset\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="VertexElementAttribute"/> class.\r
+ /// </summary>\r
+ /// <param name="type">The type.</param>\r
+ /// <param name="usage">The vertex element usage.</param>\r
+ public VertexElementAttribute(DeclarationType type, DeclarationUsage usage)\r
+ {\r
+ Type = type;\r
+ Usage = usage;\r
+ }\r
+ }\r
+}\r
--- /dev/null
+/*\r
+* Copyright (c) 2007-2009 SlimDX Group\r
+* \r
+* Permission is hereby granted, free of charge, to any person obtaining a copy\r
+* of this software and associated documentation files (the "Software"), to deal\r
+* in the Software without restriction, including without limitation the rights\r
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+* copies of the Software, and to permit persons to whom the Software is\r
+* furnished to do so, subject to the following conditions:\r
+* \r
+* The above copyright notice and this permission notice shall be included in\r
+* all copies or substantial portions of the Software.\r
+* \r
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+* THE SOFTWARE.\r
+*/\r
+using SlimDX;\r
+\r
+namespace SampleFramework\r
+{\r
+ /// <summary>\r
+ /// Represents a view onto a 3D scene.\r
+ /// </summary>\r
+ public class Camera\r
+ {\r
+ Vector3 location;\r
+ Vector3 target;\r
+ float fieldOfView;\r
+ float aspectRatio;\r
+ float nearPlane;\r
+ float farPlane;\r
+ Matrix viewMatrix;\r
+ Matrix projectionMatrix;\r
+ bool viewDirty = true;\r
+ bool projectionDirty = true;\r
+\r
+ /// <summary>\r
+ /// Gets or sets the location of the camera eye point.\r
+ /// </summary>\r
+ /// <value>The location of the camera eye point.</value>\r
+ public Vector3 Location\r
+ {\r
+ get { return location; }\r
+ set\r
+ {\r
+ if (location == value)\r
+ return;\r
+\r
+ location = value;\r
+ viewDirty = true;\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the view target point.\r
+ /// </summary>\r
+ /// <value>The view target point.</value>\r
+ public Vector3 Target\r
+ {\r
+ get { return target; }\r
+ set\r
+ {\r
+ if (target == value)\r
+ return;\r
+\r
+ target = value;\r
+ viewDirty = true;\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the field of view.\r
+ /// </summary>\r
+ /// <value>The field of view.</value>\r
+ public float FieldOfView\r
+ {\r
+ get { return fieldOfView; }\r
+ set\r
+ {\r
+ if (fieldOfView == value)\r
+ return;\r
+\r
+ fieldOfView = value;\r
+ projectionDirty = true;\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the aspect ratio.\r
+ /// </summary>\r
+ /// <value>The aspect ratio.</value>\r
+ public float AspectRatio\r
+ {\r
+ get { return aspectRatio; }\r
+ set\r
+ {\r
+ if (aspectRatio == value)\r
+ return;\r
+\r
+ aspectRatio = value;\r
+ projectionDirty = true;\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the near plane.\r
+ /// </summary>\r
+ /// <value>The near plane.</value>\r
+ public float NearPlane\r
+ {\r
+ get { return nearPlane; }\r
+ set\r
+ {\r
+ if (nearPlane == value)\r
+ return;\r
+\r
+ nearPlane = value;\r
+ projectionDirty = true;\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the far plane.\r
+ /// </summary>\r
+ /// <value>The far plane.</value>\r
+ public float FarPlane\r
+ {\r
+ get { return farPlane; }\r
+ set\r
+ {\r
+ if (farPlane == value)\r
+ return;\r
+\r
+ farPlane = value;\r
+ projectionDirty = true;\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets the view matrix.\r
+ /// </summary>\r
+ /// <value>The view matrix.</value>\r
+ public Matrix ViewMatrix\r
+ {\r
+ get\r
+ {\r
+ if (viewDirty)\r
+ RebuildViewMatrix();\r
+ return viewMatrix;\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets the projection matrix.\r
+ /// </summary>\r
+ /// <value>The projection matrix.</value>\r
+ public Matrix ProjectionMatrix\r
+ {\r
+ get\r
+ {\r
+ if (projectionDirty)\r
+ RebuildProjectionMatrix();\r
+ return projectionMatrix;\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="Camera"/> class.\r
+ /// </summary>\r
+ public Camera()\r
+ {\r
+ }\r
+\r
+ /// <summary>\r
+ /// Rebuilds the view matrix.\r
+ /// </summary>\r
+ protected virtual void RebuildViewMatrix()\r
+ {\r
+ viewMatrix = Matrix.LookAtLH(Location, Target, Vector3.UnitY);\r
+ viewDirty = false;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Rebuilds the projection matrix.\r
+ /// </summary>\r
+ protected virtual void RebuildProjectionMatrix()\r
+ {\r
+ projectionMatrix = Matrix.PerspectiveFovLH(FieldOfView, AspectRatio, NearPlane, FarPlane);\r
+ projectionDirty = false;\r
+ }\r
+ }\r
+}\r
--- /dev/null
+/*\r
+* Copyright (c) 2007-2009 SlimDX Group\r
+* \r
+* Permission is hereby granted, free of charge, to any person obtaining a copy\r
+* of this software and associated documentation files (the "Software"), to deal\r
+* in the Software without restriction, including without limitation the rights\r
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+* copies of the Software, and to permit persons to whom the Software is\r
+* furnished to do so, subject to the following conditions:\r
+* \r
+* The above copyright notice and this permission notice shall be included in\r
+* all copies or substantial portions of the Software.\r
+* \r
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+* THE SOFTWARE.\r
+*/\r
+using System;\r
+using System.Globalization;\r
+using System.Runtime.InteropServices;\r
+using SlimDX;\r
+using SlimDX.Direct3D9;\r
+\r
+namespace SampleFramework\r
+{\r
+ /// <summary>\r
+ /// Represents a single transformed, colored, and textured vertex.\r
+ /// </summary>\r
+ [StructLayout(LayoutKind.Sequential)]\r
+ public struct TransformedColoredTexturedVertex : IEquatable<TransformedColoredTexturedVertex>\r
+ {\r
+ private Vector4 m_Position;\r
+ /// <summary>\r
+ /// Gets or sets the transformed position of the vertex.\r
+ /// </summary>\r
+ /// <value>The transformed position of the vertex.</value>\r
+ [VertexElement(DeclarationType.Float4, DeclarationUsage.PositionTransformed)]\r
+ public Vector4 Position\r
+ {\r
+ get { return m_Position; }\r
+ set { m_Position = value; }\r
+ }\r
+\r
+ private int m_Color;\r
+ /// <summary>\r
+ /// Gets or sets the color of the vertex.\r
+ /// </summary>\r
+ /// <value>The color of the vertex.</value>\r
+ [VertexElement(DeclarationType.Color, DeclarationUsage.Color)]\r
+ public int Color\r
+ {\r
+ get { return m_Color; }\r
+ set { m_Color = value; }\r
+ }\r
+\r
+ private Vector2 m_TextureCoordinates;\r
+ /// <summary>\r
+ /// Gets or sets the texture coordinates.\r
+ /// </summary>\r
+ /// <value>The texture coordinates.</value>\r
+ [VertexElement(DeclarationType.Float2, DeclarationUsage.TextureCoordinate)]\r
+ public Vector2 TextureCoordinates\r
+ {\r
+ get { return m_TextureCoordinates; }\r
+ set { m_TextureCoordinates = value; }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets the size in bytes.\r
+ /// </summary>\r
+ /// <value>The size in bytes.</value>\r
+ public static int SizeInBytes\r
+ {\r
+ get { return Marshal.SizeOf(typeof(TransformedColoredTexturedVertex)); }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets the format.\r
+ /// </summary>\r
+ /// <value>The format.</value>\r
+ public static VertexFormat Format\r
+ {\r
+ get { return VertexFormat.PositionRhw | VertexFormat.Diffuse | VertexFormat.Texture1; }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="TransformedColoredTexturedVertex"/> struct.\r
+ /// </summary>\r
+ /// <param name="position">The position.</param>\r
+ /// <param name="color">The color.</param>\r
+ /// <param name="textureCoordinates">The texture coordinates.</param>\r
+ public TransformedColoredTexturedVertex(Vector4 position, int color, Vector2 textureCoordinates)\r
+ : this()\r
+ {\r
+ Position = position;\r
+ Color = color;\r
+ TextureCoordinates = textureCoordinates;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Implements the operator ==.\r
+ /// </summary>\r
+ /// <param name="left">The left side of the operator.</param>\r
+ /// <param name="right">The right side of the operator.</param>\r
+ /// <returns>The result of the operator.</returns>\r
+ public static bool operator ==(TransformedColoredTexturedVertex left, TransformedColoredTexturedVertex right)\r
+ {\r
+ return left.Equals(right);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Implements the operator !=.\r
+ /// </summary>\r
+ /// <param name="left">The left side of the operator.</param>\r
+ /// <param name="right">The right side of the operator.</param>\r
+ /// <returns>The result of the operator.</returns>\r
+ public static bool operator !=(TransformedColoredTexturedVertex left, TransformedColoredTexturedVertex right)\r
+ {\r
+ return !(left == right);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Returns the hash code for this instance.\r
+ /// </summary>\r
+ /// <returns>\r
+ /// A 32-bit signed integer that is the hash code for this instance.\r
+ /// </returns>\r
+ public override int GetHashCode()\r
+ {\r
+ return Position.GetHashCode() + Color.GetHashCode() + TextureCoordinates.GetHashCode();\r
+ }\r
+\r
+ /// <summary>\r
+ /// Indicates whether this instance and a specified object are equal.\r
+ /// </summary>\r
+ /// <param name="obj">Another object to compare to.</param>\r
+ /// <returns>\r
+ /// true if <paramref name="obj"/> and this instance are the same type and represent the same value; otherwise, false.\r
+ /// </returns>\r
+ public override bool Equals(object obj)\r
+ {\r
+ if (obj == null)\r
+ return false;\r
+\r
+ if (GetType() != obj.GetType())\r
+ return false;\r
+\r
+ return Equals((TransformedColoredTexturedVertex)obj);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Indicates whether the current object is equal to another object of the same type.\r
+ /// </summary>\r
+ /// <param name="other">An object to compare with this object.</param>\r
+ /// <returns>\r
+ /// true if the current object is equal to the <paramref name="other"/> parameter; otherwise, false.\r
+ /// </returns>\r
+ public bool Equals(TransformedColoredTexturedVertex other)\r
+ {\r
+ return (Position == other.Position && Color == other.Color && TextureCoordinates == other.TextureCoordinates);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Returns a string representation of the current object.\r
+ /// </summary>\r
+ /// <returns>\r
+ /// A <see cref="T:System.String"/> representing the vertex.\r
+ /// </returns>\r
+ public override string ToString()\r
+ {\r
+ return string.Format(CultureInfo.CurrentCulture, "{0} ({1}, {2})", Position.ToString(), System.Drawing.Color.FromArgb(Color).ToString(), TextureCoordinates.ToString());\r
+ }\r
+ }\r
+}\r
--- /dev/null
+/*\r
+* Copyright (c) 2007-2009 SlimDX Group\r
+* \r
+* Permission is hereby granted, free of charge, to any person obtaining a copy\r
+* of this software and associated documentation files (the "Software"), to deal\r
+* in the Software without restriction, including without limitation the rights\r
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+* copies of the Software, and to permit persons to whom the Software is\r
+* furnished to do so, subject to the following conditions:\r
+* \r
+* The above copyright notice and this permission notice shall be included in\r
+* all copies or substantial portions of the Software.\r
+* \r
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+* THE SOFTWARE.\r
+*/\r
+using System;\r
+using System.Globalization;\r
+using System.Runtime.InteropServices;\r
+using SlimDX;\r
+using SlimDX.Direct3D9;\r
+\r
+namespace SampleFramework\r
+{\r
+ /// <summary>\r
+ /// Represents a single transformed and colored vertex.\r
+ /// </summary>\r
+ [StructLayout(LayoutKind.Sequential)]\r
+ public struct TransformedColoredVertex : IEquatable<TransformedColoredVertex>\r
+ {\r
+ /// <summary>\r
+ /// Gets or sets the transformed position of the vertex.\r
+ /// </summary>\r
+ /// <value>The transformed position of the vertex.</value>\r
+ [VertexElement(DeclarationType.Float4, DeclarationUsage.PositionTransformed)]\r
+ public Vector4 Position\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the color of the vertex.\r
+ /// </summary>\r
+ /// <value>The color of the vertex.</value>\r
+ [VertexElement(DeclarationType.Color, DeclarationUsage.Color)]\r
+ public int Color\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets the size in bytes.\r
+ /// </summary>\r
+ /// <value>The size in bytes.</value>\r
+ public static int SizeInBytes\r
+ {\r
+ get { return Marshal.SizeOf(typeof(TransformedColoredVertex)); }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets the format.\r
+ /// </summary>\r
+ /// <value>The format.</value>\r
+ public static VertexFormat Format\r
+ {\r
+ get { return VertexFormat.PositionRhw | VertexFormat.Diffuse; }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="TransformedColoredVertex"/> struct.\r
+ /// </summary>\r
+ /// <param name="position">The position.</param>\r
+ /// <param name="color">The color.</param>\r
+ public TransformedColoredVertex(Vector4 position, int color)\r
+ : this()\r
+ {\r
+ Position = position;\r
+ Color = color;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Implements the operator ==.\r
+ /// </summary>\r
+ /// <param name="left">The left side of the operator.</param>\r
+ /// <param name="right">The right side of the operator.</param>\r
+ /// <returns>The result of the operator.</returns>\r
+ public static bool operator ==(TransformedColoredVertex left, TransformedColoredVertex right)\r
+ {\r
+ return left.Equals(right);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Implements the operator !=.\r
+ /// </summary>\r
+ /// <param name="left">The left side of the operator.</param>\r
+ /// <param name="right">The right side of the operator.</param>\r
+ /// <returns>The result of the operator.</returns>\r
+ public static bool operator !=(TransformedColoredVertex left, TransformedColoredVertex right)\r
+ {\r
+ return !(left == right);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Returns the hash code for this instance.\r
+ /// </summary>\r
+ /// <returns>\r
+ /// A 32-bit signed integer that is the hash code for this instance.\r
+ /// </returns>\r
+ public override int GetHashCode()\r
+ {\r
+ return Position.GetHashCode() + Color.GetHashCode();\r
+ }\r
+\r
+ /// <summary>\r
+ /// Indicates whether this instance and a specified object are equal.\r
+ /// </summary>\r
+ /// <param name="obj">Another object to compare to.</param>\r
+ /// <returns>\r
+ /// true if <paramref name="obj"/> and this instance are the same type and represent the same value; otherwise, false.\r
+ /// </returns>\r
+ public override bool Equals(object obj)\r
+ {\r
+ if (obj == null)\r
+ return false;\r
+\r
+ if (GetType() != obj.GetType())\r
+ return false;\r
+\r
+ return Equals((TransformedColoredVertex)obj);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Indicates whether the current object is equal to another object of the same type.\r
+ /// </summary>\r
+ /// <param name="other">An object to compare with this object.</param>\r
+ /// <returns>\r
+ /// true if the current object is equal to the <paramref name="other"/> parameter; otherwise, false.\r
+ /// </returns>\r
+ public bool Equals(TransformedColoredVertex other)\r
+ {\r
+ return (Position == other.Position && Color == other.Color);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Returns a string representation of the current object.\r
+ /// </summary>\r
+ /// <returns>\r
+ /// A <see cref="T:System.String"/> representing the vertex.\r
+ /// </returns>\r
+ public override string ToString()\r
+ {\r
+ return string.Format(CultureInfo.CurrentCulture, "{0} ({1})", Position.ToString(), System.Drawing.Color.FromArgb(Color).ToString());\r
+ }\r
+ }\r
+}\r
--- /dev/null
+/*\r
+* Copyright (c) 2007-2009 SlimDX Group\r
+* \r
+* Permission is hereby granted, free of charge, to any person obtaining a copy\r
+* of this software and associated documentation files (the "Software"), to deal\r
+* in the Software without restriction, including without limitation the rights\r
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+* copies of the Software, and to permit persons to whom the Software is\r
+* furnished to do so, subject to the following conditions:\r
+* \r
+* The above copyright notice and this permission notice shall be included in\r
+* all copies or substantial portions of the Software.\r
+* \r
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+* THE SOFTWARE.\r
+*/\r
+using System;\r
+using System.Drawing;\r
+using System.Runtime.InteropServices;\r
+using System.Security;\r
+\r
+namespace SampleFramework\r
+{\r
+ static class NativeMethods\r
+ {\r
+ [SuppressUnmanagedCodeSecurityAttribute]\r
+ [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]\r
+ [return: MarshalAs(UnmanagedType.Bool)]\r
+ public static extern bool PeekMessage(out NativeMessage message, IntPtr hwnd, uint messageFilterMin, uint messageFilterMax, uint flags);\r
+\r
+ [SuppressUnmanagedCodeSecurityAttribute]\r
+ [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]\r
+ [return: MarshalAs(UnmanagedType.Bool)]\r
+ static extern bool GetClientRect(IntPtr hWnd, out NativeRectangle lpRect);\r
+\r
+ [SuppressUnmanagedCodeSecurityAttribute]\r
+ [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]\r
+ [return: MarshalAs(UnmanagedType.Bool)]\r
+ static extern bool GetWindowRect(IntPtr hWnd, out NativeRectangle lpRect);\r
+\r
+ [SuppressUnmanagedCodeSecurityAttribute]\r
+ [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]\r
+ [return: MarshalAs(UnmanagedType.Bool)]\r
+ public static extern bool GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);\r
+\r
+ [SuppressUnmanagedCodeSecurityAttribute]\r
+ [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]\r
+ [return: MarshalAs(UnmanagedType.Bool)]\r
+ public static extern bool SetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);\r
+\r
+ [SuppressUnmanagedCodeSecurityAttribute]\r
+ [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]\r
+ public static extern uint SetWindowLong(IntPtr hWnd, int nIndex, uint dwNewLong);\r
+\r
+ [SuppressUnmanagedCodeSecurityAttribute]\r
+ [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]\r
+ public static extern uint GetWindowLong(IntPtr hWnd, int nIndex);\r
+\r
+ [SuppressUnmanagedCodeSecurityAttribute]\r
+ [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]\r
+ [return: MarshalAs(UnmanagedType.Bool)]\r
+ public static extern bool IsIconic(IntPtr hWnd);\r
+\r
+ [SuppressUnmanagedCodeSecurityAttribute]\r
+ [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]\r
+ [return: MarshalAs(UnmanagedType.Bool)]\r
+ public static extern bool IsZoomed(IntPtr hWnd);\r
+\r
+ [SuppressUnmanagedCodeSecurityAttribute]\r
+ [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]\r
+ [return: MarshalAs(UnmanagedType.Bool)]\r
+ public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);\r
+\r
+ [SuppressUnmanagedCodeSecurityAttribute]\r
+ [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]\r
+ [return: MarshalAs(UnmanagedType.Bool)]\r
+ public static extern bool AdjustWindowRect(ref NativeRectangle lpRect, uint dwStyle, [MarshalAs(UnmanagedType.Bool)]bool bMenu);\r
+\r
+ [SuppressUnmanagedCodeSecurityAttribute]\r
+ [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = false)]\r
+ public static extern uint SetThreadExecutionState(uint esFlags);\r
+\r
+ [SuppressUnmanagedCodeSecurityAttribute]\r
+ [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]\r
+ [return: MarshalAs(UnmanagedType.Bool)]\r
+ public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);\r
+\r
+ [SuppressUnmanagedCodeSecurityAttribute]\r
+ [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]\r
+ public static extern IntPtr MonitorFromWindow(IntPtr hwnd, uint dwFlags);\r
+\r
+ public static Rectangle GetClientRectangle(IntPtr handle)\r
+ {\r
+ NativeRectangle rect;\r
+ if (!GetClientRect(handle, out rect))\r
+ return Rectangle.Empty;\r
+\r
+ return Rectangle.FromLTRB(rect.left, rect.top, rect.right, rect.bottom);\r
+ }\r
+\r
+ public static Rectangle GetWindowRectangle(IntPtr handle)\r
+ {\r
+ NativeRectangle rect;\r
+ if (!GetWindowRect(handle, out rect))\r
+ return Rectangle.Empty;\r
+\r
+ return Rectangle.FromLTRB(rect.left, rect.top, rect.right, rect.bottom);\r
+ }\r
+ }\r
+}\r
--- /dev/null
+/*\r
+* Copyright (c) 2007-2009 SlimDX Group\r
+* \r
+* Permission is hereby granted, free of charge, to any person obtaining a copy\r
+* of this software and associated documentation files (the "Software"), to deal\r
+* in the Software without restriction, including without limitation the rights\r
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+* copies of the Software, and to permit persons to whom the Software is\r
+* furnished to do so, subject to the following conditions:\r
+* \r
+* The above copyright notice and this permission notice shall be included in\r
+* all copies or substantial portions of the Software.\r
+* \r
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+* THE SOFTWARE.\r
+*/\r
+using System;\r
+using System.Drawing;\r
+using System.Runtime.InteropServices;\r
+\r
+namespace SampleFramework\r
+{\r
+ [StructLayout(LayoutKind.Sequential)]\r
+ struct NativeRectangle\r
+ {\r
+ public int left;\r
+ public int top;\r
+ public int right;\r
+ public int bottom;\r
+ }\r
+\r
+ [StructLayout(LayoutKind.Sequential)]\r
+ struct NativeMessage\r
+ {\r
+ public IntPtr hWnd;\r
+ public uint msg;\r
+ public IntPtr wParam;\r
+ public IntPtr lParam;\r
+ public uint time;\r
+ public Point p;\r
+ }\r
+\r
+ [StructLayout(LayoutKind.Sequential)]\r
+ struct WINDOWPLACEMENT\r
+ {\r
+ public int length;\r
+ public int flags;\r
+ public int showCmd;\r
+ public Point ptMinPosition;\r
+ public Point ptMaxPosition;\r
+ public NativeRectangle rcNormalPosition;\r
+\r
+ public static int Length\r
+ {\r
+ get { return Marshal.SizeOf(typeof(WINDOWPLACEMENT)); }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+/*\r
+* Copyright (c) 2007-2009 SlimDX Group\r
+* \r
+* Permission is hereby granted, free of charge, to any person obtaining a copy\r
+* of this software and associated documentation files (the "Software"), to deal\r
+* in the Software without restriction, including without limitation the rights\r
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+* copies of the Software, and to permit persons to whom the Software is\r
+* furnished to do so, subject to the following conditions:\r
+* \r
+* The above copyright notice and this permission notice shall be included in\r
+* all copies or substantial portions of the Software.\r
+* \r
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+* THE SOFTWARE.\r
+*/\r
+using System;\r
+\r
+namespace SampleFramework\r
+{\r
+ static class WindowConstants\r
+ {\r
+ public const int WM_SIZE = 0x5;\r
+ public const int WM_SYSCOMMAND = 0x112;\r
+ public const int WM_ACTIVATEAPP = 0x001C;\r
+ public const int WM_POWERBROADCAST = 0x0218;\r
+\r
+ public const int SC_SCREENSAVE = 0xF140;\r
+ public const int SC_MONITORPOWER = 0xF170;\r
+\r
+ public const int VK_LWIN = 0x5B;\r
+ public const int VK_RWIN = 0x5C;\r
+\r
+ public static readonly IntPtr SIZE_MINIMIZED = new IntPtr(1);\r
+ public static readonly IntPtr SIZE_MAXIMIZED = new IntPtr(2);\r
+ public static readonly IntPtr SIZE_RESTORED = new IntPtr(0);\r
+\r
+ public static readonly IntPtr PBT_APMQUERYSUSPEND = new IntPtr(0x0000);\r
+ public static readonly IntPtr PBT_APMRESUMESUSPEND = new IntPtr(0x0007);\r
+\r
+ public const int WPF_RESTORETOMAXIMIZED = 2;\r
+\r
+ public const int SW_RESTORE = 9;\r
+ public const int SW_SHOWMINIMIZED = 2;\r
+ public const int SW_MAXIMIZE = 3;\r
+ public const int SW_SHOW = 5;\r
+ public const int SW_MINIMIZE = 6;\r
+\r
+ public const int GWL_STYLE = -16;\r
+ public const int GWL_EXSTYLE = -20;\r
+\r
+ public const long WS_MAXIMIZE = 0x01000000;\r
+ public const long WS_MINIMIZE = 0x20000000;\r
+ public const long WS_POPUP = 0x80000000;\r
+ public const long WS_SYSMENU = 0x00080000;\r
+\r
+ public const long WS_EX_TOPMOST = 0x00000008;\r
+\r
+ public const uint SWP_NOSIZE = 0x0001;\r
+ public const uint SWP_NOMOVE = 0x0002;\r
+ public const uint SWP_NOZORDER = 0x0004;\r
+ public const uint SWP_NOREDRAW = 0x0008;\r
+\r
+ public const uint ES_CONTINUOUS = 0x80000000;\r
+ public const uint ES_DISPLAY_REQUIRED = 0x00000002;\r
+\r
+ public const int MONITOR_DEFAULTTOPRIMARY = 1;\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Diagnostics;\r
+using SlimDX;\r
+using SlimDX.DirectInput;\r
+\r
+namespace FDK\r
+{\r
+ public class CInputJoystick : IInputDevice, IDisposable\r
+ {\r
+ // コンストラクタ\r
+\r
+ public CInputJoystick( IntPtr hWnd, DeviceInstance di, DirectInput directInput )\r
+ {\r
+ this.e入力デバイス種別 = E入力デバイス種別.Joystick;\r
+ this.GUID = di.InstanceGuid.ToString();\r
+ this.ID = 0;\r
+ try\r
+ {\r
+ this.devJoystick = new Joystick( directInput, di.InstanceGuid );\r
+ this.devJoystick.SetCooperativeLevel( hWnd, CooperativeLevel.Foreground | CooperativeLevel.Exclusive );\r
+ this.devJoystick.Properties.BufferSize = 32;\r
+ Trace.TraceInformation( this.devJoystick.Information.InstanceName + "を生成しました。" );\r
+ }\r
+ catch( DirectInputException )\r
+ {\r
+ if( this.devJoystick != null )\r
+ {\r
+ this.devJoystick.Dispose();\r
+ this.devJoystick = null;\r
+ }\r
+ Trace.TraceError( this.devJoystick.Information.InstanceName, new object[] { " の生成に失敗しました。" } );\r
+ throw;\r
+ }\r
+ foreach( DeviceObjectInstance instance in this.devJoystick.GetObjects() )\r
+ {\r
+ if( ( instance.ObjectType & ObjectDeviceType.Axis ) != ObjectDeviceType.All )\r
+ {\r
+ this.devJoystick.GetObjectPropertiesById( (int) instance.ObjectType ).SetRange( -1000, 0x3e8 );\r
+ }\r
+ }\r
+ try\r
+ {\r
+ this.devJoystick.Acquire();\r
+ }\r
+ catch( DirectInputException )\r
+ {\r
+ }\r
+\r
+ for( int i = 0; i < this.bButtonState.Length; i++ )\r
+ this.bButtonState[ i ] = false;\r
+\r
+ this.timer = new CTimer( CTimer.E種別.MultiMedia );\r
+ }\r
+ \r
+ \r
+ // メソッド\r
+ \r
+ public void SetID( int nID )\r
+ {\r
+ this.ID = nID;\r
+ }\r
+\r
+ #region [ IInputDevice 実装 ]\r
+ //-----------------\r
+ public E入力デバイス種別 e入力デバイス種別\r
+ { \r
+ get;\r
+ private set;\r
+ }\r
+ public string GUID\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+ public int ID\r
+ { \r
+ get; \r
+ private set;\r
+ }\r
+ public List<STInputEvent> list入力イベント \r
+ {\r
+ get;\r
+ private set; \r
+ }\r
+\r
+ public void tポーリング( bool bWindowがアクティブ中, bool bバッファ入力を使用する )\r
+ {\r
+ for( int i = 0; i < 256; i++ )\r
+ {\r
+ this.bButtonPushDown[ i ] = false;\r
+ this.bButtonPullUp[ i ] = false;\r
+ }\r
+\r
+ if( ( bWindowがアクティブ中 && !this.devJoystick.Acquire().IsFailure ) && !this.devJoystick.Poll().IsFailure )\r
+ {\r
+ STInputEvent event29;\r
+ this.list入力イベント = new List<STInputEvent>( 32 );\r
+\r
+ if( bバッファ入力を使用する )\r
+ {\r
+ #region [ a.バッファ入力 ]\r
+ //-----------------------------\r
+ var bufferedData = this.devJoystick.GetBufferedData();\r
+\r
+ if( Result.Last.IsSuccess && bufferedData != null )\r
+ {\r
+ foreach( JoystickState data in bufferedData )\r
+ {\r
+ #region [ X軸- ]\r
+ //-----------------------------\r
+ if( data.X < -500 )\r
+ {\r
+ STInputEvent event43 = new STInputEvent();\r
+ STInputEvent event16 = event43;\r
+ event16.nKey = 0;\r
+ event16.b押された = true;\r
+ event16.nTimeStamp = data.TimeStamp;\r
+ event16.nVelocity = CInput管理.n通常音量;\r
+ this.list入力イベント.Add( event16 );\r
+\r
+ this.bButtonState[ 0 ] = true;\r
+ this.bButtonPushDown[ 0 ] = true;\r
+ }\r
+ else\r
+ {\r
+ STInputEvent event44 = new STInputEvent();\r
+ STInputEvent event17 = event44;\r
+ event17.nKey = 0;\r
+ event17.b押された = false;\r
+ event17.nTimeStamp = data.TimeStamp;\r
+ event17.nVelocity = 0;\r
+ this.list入力イベント.Add( event17 );\r
+\r
+ this.bButtonState[ 0 ] = false;\r
+ this.bButtonPullUp[ 0 ] = true;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ #region [ X軸+ ]\r
+ //-----------------------------\r
+ if( data.X > 500 )\r
+ {\r
+ STInputEvent event45 = new STInputEvent();\r
+ STInputEvent event18 = event45;\r
+ event18.nKey = 1;\r
+ event18.b押された = true;\r
+ event18.nTimeStamp = data.TimeStamp;\r
+ event18.nVelocity = CInput管理.n通常音量;\r
+ this.list入力イベント.Add( event18 );\r
+\r
+ this.bButtonState[ 1 ] = true;\r
+ this.bButtonPushDown[ 1 ] = true;\r
+ }\r
+ else\r
+ {\r
+ STInputEvent event46 = new STInputEvent();\r
+ STInputEvent event19 = event46;\r
+ event19.nKey = 1;\r
+ event19.b押された = false;\r
+ event19.nTimeStamp = data.TimeStamp;\r
+ event19.nVelocity = 0;\r
+ this.list入力イベント.Add( event19 );\r
+\r
+ this.bButtonState[ 1 ] = false;\r
+ this.bButtonPullUp[ 1 ] = true;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ #region [ Y軸- ]\r
+ //-----------------------------\r
+ if( data.Y < -500 )\r
+ {\r
+ STInputEvent event47 = new STInputEvent();\r
+ STInputEvent event20 = event47;\r
+ event20.nKey = 2;\r
+ event20.b押された = true;\r
+ event20.nTimeStamp = data.TimeStamp;\r
+ event20.nVelocity = CInput管理.n通常音量;\r
+ this.list入力イベント.Add( event20 );\r
+\r
+ this.bButtonState[ 2 ] = true;\r
+ this.bButtonPushDown[ 2 ] = true;\r
+ }\r
+ else\r
+ {\r
+ STInputEvent event48 = new STInputEvent();\r
+ STInputEvent event21 = event48;\r
+ event21.nKey = 2;\r
+ event21.b押された = false;\r
+ event21.nTimeStamp = data.TimeStamp;\r
+ event21.nVelocity = 0;\r
+ this.list入力イベント.Add( event21 );\r
+\r
+ this.bButtonState[ 2 ] = false;\r
+ this.bButtonPullUp[ 2 ] = true;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ #region [ Y軸+ ]\r
+ //-----------------------------\r
+ if( data.Y > 500 )\r
+ {\r
+ event29 = new STInputEvent();\r
+ STInputEvent event22 = event29;\r
+ event22.nKey = 3;\r
+ event22.b押された = true;\r
+ event22.nTimeStamp = data.TimeStamp;\r
+ event22.nVelocity = CInput管理.n通常音量;\r
+ this.list入力イベント.Add( event22 );\r
+\r
+ this.bButtonState[ 3 ] = true;\r
+ this.bButtonPushDown[ 3 ] = true;\r
+ }\r
+ else\r
+ {\r
+ event29 = new STInputEvent();\r
+ STInputEvent event23 = event29;\r
+ event23.nKey = 3;\r
+ event23.b押された = false;\r
+ event23.nTimeStamp = data.TimeStamp;\r
+ event23.nVelocity = 0;\r
+ this.list入力イベント.Add( event23 );\r
+\r
+ this.bButtonState[ 3 ] = false;\r
+ this.bButtonPullUp[ 3 ] = true;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ #region [ Z軸- ]\r
+ //-----------------------------\r
+ if( data.Z < -500 )\r
+ {\r
+ event29 = new STInputEvent();\r
+ STInputEvent event24 = event29;\r
+ event24.nKey = 4;\r
+ event24.b押された = true;\r
+ event24.nTimeStamp = data.TimeStamp;\r
+ event24.nVelocity = CInput管理.n通常音量;\r
+ this.list入力イベント.Add( event24 );\r
+\r
+ this.bButtonState[ 4 ] = true;\r
+ this.bButtonPushDown[ 4 ] = true;\r
+ }\r
+ else\r
+ {\r
+ event29 = new STInputEvent();\r
+ STInputEvent event25 = event29;\r
+ event25.nKey = 4;\r
+ event25.b押された = false;\r
+ event25.nTimeStamp = data.TimeStamp;\r
+ event25.nVelocity = 0;\r
+ this.list入力イベント.Add( event25 );\r
+\r
+ this.bButtonState[ 4 ] = false;\r
+ this.bButtonPullUp[ 4 ] = true;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ #region [ Z軸+ ]\r
+ //-----------------------------\r
+ if( data.Z > 500 )\r
+ {\r
+ event29 = new STInputEvent();\r
+ STInputEvent event26 = event29;\r
+ event26.nKey = 5;\r
+ event26.b押された = true;\r
+ event26.nTimeStamp = data.TimeStamp;\r
+ event26.nVelocity = CInput管理.n通常音量;\r
+ this.list入力イベント.Add( event26 );\r
+\r
+ this.bButtonState[ 5 ] = true;\r
+ this.bButtonPushDown[ 5 ] = true;\r
+ }\r
+ else\r
+ {\r
+ event29 = new STInputEvent();\r
+ STInputEvent event27 = event29;\r
+ event27.nKey = 5;\r
+ event27.b押された = false;\r
+ event27.nTimeStamp = data.TimeStamp;\r
+ event27.nVelocity = 0;\r
+ this.list入力イベント.Add( event27 );\r
+\r
+ this.bButtonState[ 5 ] = false;\r
+ this.bButtonPullUp[ 5 ] = true;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ #region [ ボタン ]\r
+ //-----------------------------\r
+ for( int i = 0; i < 32; i++ )\r
+ {\r
+ if( data.IsPressed( i ) )\r
+ {\r
+ event29 = new STInputEvent();\r
+ STInputEvent event28 = event29;\r
+ event28.nKey = 6 + i;\r
+ event28.b押された = true;\r
+ event28.b離された = false;\r
+ event28.nTimeStamp = data.TimeStamp;\r
+ event28.nVelocity = CInput管理.n通常音量;\r
+ this.list入力イベント.Add( event28 );\r
+\r
+ this.bButtonState[ 6 + i ] = true;\r
+ this.bButtonPushDown[ 6 + i ] = true;\r
+ }\r
+ else if( data.IsReleased( i ) )\r
+ {\r
+ var ev = new STInputEvent() {\r
+ nKey = 6 + i,\r
+ b押された = false,\r
+ b離された = true,\r
+ nTimeStamp = data.TimeStamp,\r
+ nVelocity = CInput管理.n通常音量,\r
+ };\r
+ this.list入力イベント.Add( ev );\r
+\r
+ this.bButtonState[ 6 + i ] = false;\r
+ this.bButtonPullUp[ 6 + i ] = true;\r
+ }\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ }\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ }\r
+ else\r
+ {\r
+ #region [ b.状態入力 ]\r
+ //-----------------------------\r
+ JoystickState currentState = this.devJoystick.GetCurrentState();\r
+ if( Result.Last.IsSuccess && currentState != null )\r
+ {\r
+ #region [ X軸- ]\r
+ //-----------------------------\r
+ if( currentState.X < -500 )\r
+ {\r
+ if( this.bButtonState[ 0 ] == false )\r
+ {\r
+ STInputEvent event4 = new STInputEvent();\r
+ event4.nKey = 0;\r
+ event4.b押された = true;\r
+ event4.nTimeStamp = this.timer.nシステム時刻;\r
+ event4.nVelocity = CInput管理.n通常音量;\r
+ this.list入力イベント.Add( event4 );\r
+\r
+ this.bButtonState[ 0 ] = true;\r
+ this.bButtonPushDown[ 0 ] = true;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ if( this.bButtonState[ 0 ] == true )\r
+ {\r
+ STInputEvent event5 = new STInputEvent();\r
+ event5.nKey = 0;\r
+ event5.b押された = false;\r
+ event5.nTimeStamp = this.timer.nシステム時刻;\r
+ event5.nVelocity = CInput管理.n通常音量;\r
+ this.list入力イベント.Add( event5 );\r
+\r
+ this.bButtonState[ 0 ] = false;\r
+ this.bButtonPullUp[ 0 ] = true;\r
+ }\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ #region [ X軸+ ]\r
+ //-----------------------------\r
+ if( currentState.X > 500 )\r
+ {\r
+ if( this.bButtonState[ 1 ] == false )\r
+ {\r
+ STInputEvent event6 = new STInputEvent();\r
+ event6.nKey = 1;\r
+ event6.b押された = true;\r
+ event6.nTimeStamp = this.timer.nシステム時刻;\r
+ event6.nVelocity = CInput管理.n通常音量;\r
+ this.list入力イベント.Add( event6 );\r
+\r
+ this.bButtonState[ 1 ] = true;\r
+ this.bButtonPushDown[ 1 ] = true;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ if( this.bButtonState[ 1 ] == true )\r
+ {\r
+ STInputEvent event7 = new STInputEvent();\r
+ event7.nKey = 1;\r
+ event7.b押された = false;\r
+ event7.nTimeStamp = this.timer.nシステム時刻;\r
+ event7.nVelocity = CInput管理.n通常音量;\r
+ this.list入力イベント.Add( event7 );\r
+\r
+ this.bButtonState[ 1 ] = false;\r
+ this.bButtonPullUp[ 1 ] = true;\r
+ }\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ #region [ Y軸- ]\r
+ //-----------------------------\r
+ if( currentState.Y < -500 )\r
+ {\r
+ if( this.bButtonState[ 2 ] == false )\r
+ {\r
+ STInputEvent event8 = new STInputEvent();\r
+ event8.nKey = 2;\r
+ event8.b押された = true;\r
+ event8.nTimeStamp = this.timer.nシステム時刻;\r
+ event8.nVelocity = CInput管理.n通常音量;\r
+ this.list入力イベント.Add( event8 );\r
+\r
+ this.bButtonState[ 2 ] = true;\r
+ this.bButtonPushDown[ 2 ] = true;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ if( this.bButtonState[ 2 ] == true )\r
+ {\r
+ STInputEvent event9 = new STInputEvent();\r
+ event9.nKey = 2;\r
+ event9.b押された = false;\r
+ event9.nTimeStamp = this.timer.nシステム時刻;\r
+ event9.nVelocity = CInput管理.n通常音量;\r
+ this.list入力イベント.Add( event9 );\r
+\r
+ this.bButtonState[ 2 ] = false;\r
+ this.bButtonPullUp[ 2 ] = true;\r
+ }\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ #region [ Y軸+ ]\r
+ //-----------------------------\r
+ if( currentState.Y > 500 )\r
+ {\r
+ if( this.bButtonState[ 3 ] == false )\r
+ {\r
+ STInputEvent event10 = new STInputEvent();\r
+ event10.nKey = 3;\r
+ event10.b押された = true;\r
+ event10.nTimeStamp = this.timer.nシステム時刻;\r
+ event10.nVelocity = CInput管理.n通常音量;\r
+ this.list入力イベント.Add( event10 );\r
+\r
+ this.bButtonState[ 3 ] = true;\r
+ this.bButtonPushDown[ 3 ] = true;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ if( this.bButtonState[ 3 ] == true )\r
+ {\r
+ STInputEvent event11 = new STInputEvent();\r
+ event11.nKey = 3;\r
+ event11.b押された = false;\r
+ event11.nTimeStamp = this.timer.nシステム時刻;\r
+ event11.nVelocity = CInput管理.n通常音量;\r
+ this.list入力イベント.Add( event11 );\r
+\r
+ this.bButtonState[ 3 ] = false;\r
+ this.bButtonPullUp[ 3 ] = true;\r
+ }\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ #region [ Z軸- ]\r
+ //-----------------------------\r
+ if( currentState.Z < -500 )\r
+ {\r
+ if( this.bButtonState[ 4 ] == false )\r
+ {\r
+ STInputEvent event12 = new STInputEvent();\r
+ event12.nKey = 4;\r
+ event12.b押された = true;\r
+ event12.nTimeStamp = this.timer.nシステム時刻;\r
+ event12.nVelocity = CInput管理.n通常音量;\r
+ this.list入力イベント.Add( event12 );\r
+\r
+ this.bButtonState[ 4 ] = true;\r
+ this.bButtonPushDown[ 4 ] = true;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ if( this.bButtonState[ 4 ] == true )\r
+ {\r
+ STInputEvent event13 = new STInputEvent();\r
+ event13.nKey = 4;\r
+ event13.b押された = false;\r
+ event13.nTimeStamp = this.timer.nシステム時刻;\r
+ event13.nVelocity = CInput管理.n通常音量;\r
+ this.list入力イベント.Add( event13 );\r
+\r
+ this.bButtonState[ 4 ] = false;\r
+ this.bButtonPullUp[ 4 ] = true;\r
+ }\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ #region [ Z軸+ ]\r
+ //-----------------------------\r
+ if( currentState.Z > 500 )\r
+ {\r
+ if( this.bButtonState[ 5 ] == false )\r
+ {\r
+ STInputEvent event14 = new STInputEvent();\r
+ event14.nKey = 5;\r
+ event14.b押された = true;\r
+ event14.nTimeStamp = this.timer.nシステム時刻;\r
+ event14.nVelocity = CInput管理.n通常音量;\r
+ this.list入力イベント.Add( event14 );\r
+\r
+ this.bButtonState[ 5 ] = true;\r
+ this.bButtonPushDown[ 5 ] = true;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ if( this.bButtonState[ 5 ] == true )\r
+ {\r
+ STInputEvent event15 = new STInputEvent();\r
+ event15.nKey = 5;\r
+ event15.b押された = false;\r
+ event15.nTimeStamp = this.timer.nシステム時刻;\r
+ event15.nVelocity = CInput管理.n通常音量;\r
+ this.list入力イベント.Add( event15 );\r
+\r
+ this.bButtonState[ 5 ] = false;\r
+ this.bButtonPullUp[ 5 ] = true;\r
+ }\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ #region [ ボタン ]\r
+ //-----------------------------\r
+ bool[] buttons = currentState.GetButtons();\r
+ for( int j = 0; ( j < buttons.Length ) && ( j < 128 ); j++ )\r
+ {\r
+ if( this.bButtonState[ 6 + j ] == false && buttons[ j ] )\r
+ {\r
+ event29 = new STInputEvent();\r
+ STInputEvent item = event29;\r
+ item.nKey = 6 + j;\r
+ item.b押された = true;\r
+ item.nTimeStamp = this.timer.nシステム時刻;\r
+ item.nVelocity = CInput管理.n通常音量;\r
+ this.list入力イベント.Add( item );\r
+\r
+ this.bButtonState[ 6 + j ] = true;\r
+ this.bButtonPushDown[ 6 + j ] = true;\r
+ }\r
+ else if( this.bButtonState[ 6 + j ] == true && !buttons[ j ] )\r
+ {\r
+ STInputEvent event30 = new STInputEvent();\r
+ STInputEvent event3 = event30;\r
+ event3.nKey = 6 + j;\r
+ event3.b押された = false;\r
+ event3.nTimeStamp = this.timer.nシステム時刻;\r
+ event3.nVelocity = CInput管理.n通常音量;\r
+ this.list入力イベント.Add( event3 );\r
+\r
+ this.bButtonState[ 6 + j ] = false;\r
+ this.bButtonPullUp[ 6 + j ] = true;\r
+ }\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ }\r
+ }\r
+ }\r
+ public bool bキーが押された( int nButton )\r
+ {\r
+ return this.bButtonPushDown[ nButton ];\r
+ }\r
+ public bool bキーが押されている( int nButton )\r
+ {\r
+ return this.bButtonState[ nButton ];\r
+ }\r
+ public bool bキーが離された( int nButton )\r
+ {\r
+ return this.bButtonPullUp[ nButton ];\r
+ }\r
+ public bool bキーが離されている( int nButton )\r
+ {\r
+ return !this.bButtonState[ nButton ];\r
+ }\r
+ //-----------------\r
+ #endregion\r
+\r
+ #region [ IDisposable 実装 ]\r
+ //-----------------\r
+ public void Dispose()\r
+ {\r
+ if( !this.bDispose完了済み )\r
+ {\r
+ if( this.devJoystick != null )\r
+ {\r
+ this.devJoystick.Dispose();\r
+ this.devJoystick = null;\r
+ }\r
+ if( this.timer != null )\r
+ {\r
+ this.timer.Dispose();\r
+ this.timer = null;\r
+ }\r
+ this.bDispose完了済み = true;\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private bool[] bButtonPullUp = new bool[ 0x100 ];\r
+ private bool[] bButtonPushDown = new bool[ 0x100 ];\r
+ private bool[] bButtonState = new bool[ 0x100 ];\r
+ private bool bDispose完了済み;\r
+ private Joystick devJoystick;\r
+ private CTimer timer;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Diagnostics;\r
+using SlimDX;\r
+using SlimDX.DirectInput;\r
+\r
+namespace FDK\r
+{\r
+ public class CInputKeyboard : IInputDevice, IDisposable\r
+ {\r
+ // コンストラクタ\r
+\r
+ public CInputKeyboard( IntPtr hWnd, DirectInput directInput )\r
+ {\r
+ this.e入力デバイス種別 = E入力デバイス種別.Keyboard;\r
+ this.GUID = "";\r
+ this.ID = 0;\r
+ try\r
+ {\r
+ this.devKeyboard = new Keyboard( directInput );\r
+ this.devKeyboard.SetCooperativeLevel( hWnd, CooperativeLevel.NoWinKey | CooperativeLevel.Foreground | CooperativeLevel.Nonexclusive );\r
+ this.devKeyboard.Properties.BufferSize = 0x20;\r
+ Trace.TraceInformation( this.devKeyboard.Information.ProductName + " を生成しました。" );\r
+ }\r
+ catch( DirectInputException )\r
+ {\r
+ if( this.devKeyboard != null )\r
+ {\r
+ this.devKeyboard.Dispose();\r
+ this.devKeyboard = null;\r
+ }\r
+ Trace.TraceWarning( "Keyboard デバイスの生成に失敗しました。" );\r
+ throw;\r
+ }\r
+ try\r
+ {\r
+ this.devKeyboard.Acquire();\r
+ }\r
+ catch( DirectInputException )\r
+ {\r
+ }\r
+\r
+ for( int i = 0; i < this.bKeyState.Length; i++ )\r
+ this.bKeyState[ i ] = false;\r
+\r
+ this.timer = new CTimer( CTimer.E種別.MultiMedia );\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ #region [ IInputDevice 実装 ]\r
+ //-----------------\r
+ public E入力デバイス種別 e入力デバイス種別 { get; private set; }\r
+ public string GUID { get; private set; }\r
+ public int ID { get; private set; }\r
+ public List<STInputEvent> list入力イベント { get; private set; }\r
+\r
+ public void tポーリング( bool bWindowがアクティブ中, bool bバッファ入力を使用する )\r
+ {\r
+ for( int i = 0; i < 256; i++ )\r
+ {\r
+ this.bKeyPushDown[ i ] = false;\r
+ this.bKeyPullUp[ i ] = false;\r
+ }\r
+\r
+ if( ( ( bWindowがアクティブ中 && ( this.devKeyboard != null ) ) && !this.devKeyboard.Acquire().IsFailure ) && !this.devKeyboard.Poll().IsFailure )\r
+ {\r
+ this.list入力イベント = new List<STInputEvent>( 32 );\r
+\r
+ if( bバッファ入力を使用する )\r
+ {\r
+ #region [ a.バッファ入力 ]\r
+ //-----------------------------\r
+ var bufferedData = this.devKeyboard.GetBufferedData();\r
+ if( Result.Last.IsSuccess && bufferedData != null )\r
+ {\r
+ foreach( KeyboardState data in bufferedData )\r
+ {\r
+ foreach( Key key3 in data.PressedKeys )\r
+ {\r
+ STInputEvent event4 = new STInputEvent();\r
+ STInputEvent item = event4;\r
+ item.nKey = (int) key3;\r
+ item.b押された = true;\r
+ item.b離された = false;\r
+ item.nTimeStamp = data.TimeStamp;\r
+ item.nVelocity = CInput管理.n通常音量;\r
+ this.list入力イベント.Add( item );\r
+\r
+ this.bKeyState[ (int) key3 ] = true;\r
+ this.bKeyPushDown[ (int) key3 ] = true;\r
+ }\r
+ foreach( Key key4 in data.ReleasedKeys )\r
+ {\r
+ STInputEvent event5 = new STInputEvent();\r
+ STInputEvent event3 = event5;\r
+ event3.nKey = (int) key4;\r
+ event3.b押された = false;\r
+ event3.b離された = true;\r
+ event3.nTimeStamp = data.TimeStamp;\r
+ event3.nVelocity = CInput管理.n通常音量;\r
+ this.list入力イベント.Add( event3 );\r
+\r
+ this.bKeyState[ (int) key4 ] = false;\r
+ this.bKeyPullUp[ (int) key4 ] = true;\r
+ }\r
+ }\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ }\r
+ else\r
+ {\r
+ #region [ b.状態入力 ]\r
+ //-----------------------------\r
+ KeyboardState currentState = this.devKeyboard.GetCurrentState();\r
+ if( Result.Last.IsSuccess && currentState != null )\r
+ {\r
+ foreach( Key key in currentState.PressedKeys )\r
+ {\r
+ if( this.bKeyState[ (int) key ] == false )\r
+ {\r
+ var ev = new STInputEvent() {\r
+ nKey = (int) key,\r
+ b押された = true,\r
+ b離された = false,\r
+ nTimeStamp = this.timer.nシステム時刻,\r
+ nVelocity = CInput管理.n通常音量,\r
+ };\r
+ this.list入力イベント.Add( ev );\r
+\r
+ this.bKeyState[ (int) key ] = true;\r
+ this.bKeyPushDown[ (int) key ] = true;\r
+ }\r
+ }\r
+ foreach( Key key2 in currentState.ReleasedKeys )\r
+ {\r
+ if( this.bKeyState[ (int) key2 ] == true )\r
+ {\r
+ var ev = new STInputEvent() {\r
+ nKey = (int) key2,\r
+ b押された = false,\r
+ b離された = true,\r
+ nTimeStamp = this.timer.nシステム時刻,\r
+ nVelocity = CInput管理.n通常音量,\r
+ };\r
+ this.list入力イベント.Add( ev );\r
+\r
+ this.bKeyState[ (int) key2 ] = false;\r
+ this.bKeyPullUp[ (int) key2 ] = true;\r
+ }\r
+ }\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ }\r
+ }\r
+ }\r
+ public bool bキーが押された( int nKey )\r
+ {\r
+ return this.bKeyPushDown[ nKey ];\r
+ }\r
+ public bool bキーが押されている( int nKey )\r
+ {\r
+ return this.bKeyState[ nKey ];\r
+ }\r
+ public bool bキーが離された( int nKey )\r
+ {\r
+ return this.bKeyPullUp[ nKey ];\r
+ }\r
+ public bool bキーが離されている( int nKey )\r
+ {\r
+ return !this.bKeyState[ nKey ];\r
+ }\r
+ //-----------------\r
+ #endregion\r
+\r
+ #region [ IDisposable 実装 ]\r
+ //-----------------\r
+ public void Dispose()\r
+ {\r
+ if( !this.bDispose完了済み )\r
+ {\r
+ if( this.devKeyboard != null )\r
+ {\r
+ this.devKeyboard.Dispose();\r
+ this.devKeyboard = null;\r
+ }\r
+ if( this.timer != null )\r
+ {\r
+ this.timer.Dispose();\r
+ this.timer = null;\r
+ }\r
+ this.bDispose完了済み = true;\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private bool bDispose完了済み;\r
+ private bool[] bKeyPullUp = new bool[ 0x100 ];\r
+ private bool[] bKeyPushDown = new bool[ 0x100 ];\r
+ private bool[] bKeyState = new bool[ 0x100 ];\r
+ private Keyboard devKeyboard;\r
+ private CTimer timer;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+\r
+namespace FDK\r
+{\r
+ public class CInputMIDI : IInputDevice, IDisposable\r
+ {\r
+ // プロパティ\r
+\r
+ public uint hMidiIn;\r
+ public List<STInputEvent> listEventBuffer;\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public CInputMIDI( uint nID )\r
+ {\r
+ this.hMidiIn = 0;\r
+ this.listEventBuffer = new List<STInputEvent>( 32 );\r
+ this.e入力デバイス種別 = E入力デバイス種別.MidiIn;\r
+ this.GUID = "";\r
+ this.ID = (int) nID;\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ public void tメッセージからMIDI信号のみ受信( uint wMsg, int dwInstance, int dwParam1, int dwParam2, long n受信システム時刻 )\r
+ {\r
+ if( wMsg == CWin32.MIM_DATA )\r
+ {\r
+ int num = dwParam1 & 0xF0;\r
+ int num2 = ( dwParam1 >> 8 ) & 0xFF;\r
+ int num3 = ( dwParam1 >> 16 ) & 0xFF;\r
+ if( ( num == 0x90 ) && ( num3 != 0 ) )\r
+ {\r
+ STInputEvent item = new STInputEvent();\r
+ item.nKey = num2;\r
+ item.b押された = true;\r
+ item.nTimeStamp = n受信システム時刻;\r
+ item.nVelocity = num3;\r
+ this.listEventBuffer.Add( item );\r
+ }\r
+ }\r
+ }\r
+\r
+ #region [ IInputDevice 実装 ]\r
+ //-----------------\r
+ public E入力デバイス種別 e入力デバイス種別 { get; private set; }\r
+ public string GUID { get; private set; }\r
+ public int ID { get; private set; }\r
+ public List<STInputEvent> list入力イベント { get; private set; }\r
+\r
+ public void tポーリング( bool bWindowがアクティブ中, bool bバッファ入力を使用する )\r
+ {\r
+ this.list入力イベント = new List<STInputEvent>( 32 );\r
+\r
+ for( int i = 0; i < this.listEventBuffer.Count; i++ )\r
+ this.list入力イベント.Add( this.listEventBuffer[ i ] );\r
+\r
+ this.listEventBuffer.Clear();\r
+ }\r
+ public bool bキーが押された( int nKey )\r
+ {\r
+ foreach( STInputEvent event2 in this.list入力イベント )\r
+ {\r
+ if( ( event2.nKey == nKey ) && event2.b押された )\r
+ {\r
+ return true;\r
+ }\r
+ }\r
+ return false;\r
+ }\r
+ public bool bキーが押されている( int nKey )\r
+ {\r
+ return false;\r
+ }\r
+ public bool bキーが離された( int nKey )\r
+ {\r
+ return false;\r
+ }\r
+ public bool bキーが離されている( int nKey )\r
+ {\r
+ return false;\r
+ }\r
+ //-----------------\r
+ #endregion\r
+\r
+ #region [ IDisposable 実装 ]\r
+ //-----------------\r
+ public void Dispose()\r
+ {\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Diagnostics;\r
+using SlimDX;\r
+using SlimDX.DirectInput;\r
+\r
+namespace FDK\r
+{\r
+ public class CInputMouse : IInputDevice, IDisposable\r
+ {\r
+ // 定数\r
+\r
+ public const int nマウスの最大ボタン数 = 8;\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public CInputMouse( IntPtr hWnd, DirectInput directInput )\r
+ {\r
+ this.e入力デバイス種別 = E入力デバイス種別.Mouse;\r
+ this.GUID = "";\r
+ this.ID = 0;\r
+ try\r
+ {\r
+ this.devMouse = new Mouse( directInput );\r
+ this.devMouse.SetCooperativeLevel( hWnd, CooperativeLevel.Foreground | CooperativeLevel.Nonexclusive );\r
+ this.devMouse.Properties.BufferSize = 0x20;\r
+ Trace.TraceInformation( this.devMouse.Information.ProductName + " を生成しました。" );\r
+ }\r
+ catch( DirectInputException )\r
+ {\r
+ if( this.devMouse != null )\r
+ {\r
+ this.devMouse.Dispose();\r
+ this.devMouse = null;\r
+ }\r
+ Trace.TraceWarning( "Mouse デバイスの生成に失敗しました。" );\r
+ throw;\r
+ }\r
+ try\r
+ {\r
+ this.devMouse.Acquire();\r
+ }\r
+ catch( DirectInputException )\r
+ {\r
+ }\r
+\r
+ for( int i = 0; i < this.bMouseState.Length; i++ )\r
+ this.bMouseState[ i ] = false;\r
+\r
+ this.timer = new CTimer( CTimer.E種別.MultiMedia );\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ #region [ IInputDevice 実装 ]\r
+ //-----------------\r
+ public E入力デバイス種別 e入力デバイス種別 { get; private set; }\r
+ public string GUID { get; private set; }\r
+ public int ID { get; private set; }\r
+ public List<STInputEvent> list入力イベント { get; private set; }\r
+\r
+ public void tポーリング( bool bWindowがアクティブ中, bool bバッファ入力を使用する )\r
+ {\r
+ for( int i = 0; i < 8; i++ )\r
+ {\r
+ this.bMousePushDown[ i ] = false;\r
+ this.bMousePullUp[ i ] = false;\r
+ }\r
+\r
+ if( ( ( bWindowがアクティブ中 && ( this.devMouse != null ) ) && !this.devMouse.Acquire().IsFailure ) && !this.devMouse.Poll().IsFailure )\r
+ {\r
+ this.list入力イベント = new List<STInputEvent>( 32 );\r
+\r
+ if( bバッファ入力を使用する )\r
+ {\r
+ #region [ a.バッファ入力 ]\r
+ //-----------------------------\r
+ var bufferedData = this.devMouse.GetBufferedData();\r
+ if( Result.Last.IsSuccess && bufferedData != null )\r
+ {\r
+ foreach( MouseState data in bufferedData )\r
+ {\r
+ for( int k = 0; k < 8; k++ )\r
+ {\r
+ if( data.IsPressed( k ) )\r
+ {\r
+ STInputEvent event4 = new STInputEvent();\r
+ STInputEvent item = event4;\r
+ item.nKey = k;\r
+ item.b押された = true;\r
+ item.b離された = false;\r
+ item.nTimeStamp = data.TimeStamp;\r
+ item.nVelocity = CInput管理.n通常音量;\r
+ this.list入力イベント.Add( item );\r
+\r
+ this.bMouseState[ k ] = true;\r
+ this.bMousePushDown[ k ] = true;\r
+ }\r
+ else if( data.IsReleased( k ) )\r
+ {\r
+ STInputEvent event5 = new STInputEvent();\r
+ STInputEvent event3 = event5;\r
+ event3.nKey = k;\r
+ event3.b押された = false;\r
+ event3.b離された = true;\r
+ event3.nTimeStamp = data.TimeStamp;\r
+ event3.nVelocity = CInput管理.n通常音量;\r
+ this.list入力イベント.Add( event3 );\r
+\r
+ this.bMouseState[ k ] = false;\r
+ this.bMousePullUp[ k ] = true;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ }\r
+ else\r
+ {\r
+ #region [ b.状態入力 ]\r
+ //-----------------------------\r
+ MouseState currentState = this.devMouse.GetCurrentState();\r
+ if( Result.Last.IsSuccess && currentState != null )\r
+ {\r
+ bool[] buttons = currentState.GetButtons();\r
+ for( int j = 0; ( j < buttons.Length ) && ( j < 8 ); j++ )\r
+ {\r
+ if( this.bMouseState[ j ] == false && buttons[ j ] == true )\r
+ {\r
+ var ev = new STInputEvent() {\r
+ nKey = j,\r
+ b押された = true,\r
+ b離された = false,\r
+ nTimeStamp = this.timer.nシステム時刻,\r
+ nVelocity = CInput管理.n通常音量,\r
+ };\r
+ this.list入力イベント.Add( ev );\r
+\r
+ this.bMouseState[ j ] = true;\r
+ this.bMousePushDown[ j ] = true;\r
+ }\r
+ else if( this.bMouseState[ j ] == true && buttons[ j ] == false )\r
+ {\r
+ var ev = new STInputEvent() {\r
+ nKey = j,\r
+ b押された = false,\r
+ b離された = true,\r
+ nTimeStamp = this.timer.nシステム時刻,\r
+ nVelocity = CInput管理.n通常音量,\r
+ };\r
+ this.list入力イベント.Add( ev );\r
+\r
+ this.bMouseState[ j ] = false;\r
+ this.bMousePullUp[ j ] = true;\r
+ }\r
+ }\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ }\r
+ }\r
+ }\r
+ public bool bキーが押された( int nButton )\r
+ {\r
+ return ( ( ( 0 <= nButton ) && ( nButton < 8 ) ) && this.bMousePushDown[ nButton ] );\r
+ }\r
+ public bool bキーが押されている( int nButton )\r
+ {\r
+ return ( ( ( 0 <= nButton ) && ( nButton < 8 ) ) && this.bMouseState[ nButton ] );\r
+ }\r
+ public bool bキーが離された( int nButton )\r
+ {\r
+ return ( ( ( 0 <= nButton ) && ( nButton < 8 ) ) && this.bMousePullUp[ nButton ] );\r
+ }\r
+ public bool bキーが離されている( int nButton )\r
+ {\r
+ return ( ( ( 0 <= nButton ) && ( nButton < 8 ) ) && !this.bMouseState[ nButton ] );\r
+ }\r
+ //-----------------\r
+ #endregion\r
+\r
+ #region [ IDisposable 実装 ]\r
+ //-----------------\r
+ public void Dispose()\r
+ {\r
+ if( !this.bDispose完了済み )\r
+ {\r
+ if( this.devMouse != null )\r
+ {\r
+ this.devMouse.Dispose();\r
+ this.devMouse = null;\r
+ }\r
+ if( this.timer != null )\r
+ {\r
+ this.timer.Dispose();\r
+ this.timer = null;\r
+ }\r
+ this.bDispose完了済み = true;\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private bool bDispose完了済み;\r
+ private bool[] bMousePullUp = new bool[ 8 ];\r
+ private bool[] bMousePushDown = new bool[ 8 ];\r
+ private bool[] bMouseState = new bool[ 8 ];\r
+ private Mouse devMouse;\r
+ private CTimer timer;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Diagnostics;\r
+using System.Runtime.InteropServices;\r
+using SlimDX;\r
+using SlimDX.DirectInput;\r
+\r
+namespace FDK\r
+{\r
+ public class CInput管理 : IDisposable\r
+ {\r
+ // 定数\r
+\r
+ public static int n通常音量 = 110;\r
+\r
+\r
+ // プロパティ\r
+\r
+ public List<IInputDevice> list入力デバイス \r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+ public IInputDevice Keyboard\r
+ {\r
+ get\r
+ {\r
+ if( this._Keyboard != null )\r
+ {\r
+ return this._Keyboard;\r
+ }\r
+ foreach( IInputDevice device in this.list入力デバイス )\r
+ {\r
+ if( device.e入力デバイス種別 == E入力デバイス種別.Keyboard )\r
+ {\r
+ this._Keyboard = device;\r
+ return device;\r
+ }\r
+ }\r
+ return null;\r
+ }\r
+ }\r
+ public IInputDevice Mouse\r
+ {\r
+ get\r
+ {\r
+ if( this._Mouse != null )\r
+ {\r
+ return this._Mouse;\r
+ }\r
+ foreach( IInputDevice device in this.list入力デバイス )\r
+ {\r
+ if( device.e入力デバイス種別 == E入力デバイス種別.Mouse )\r
+ {\r
+ this._Mouse = device;\r
+ return device;\r
+ }\r
+ }\r
+ return null;\r
+ }\r
+ }\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public CInput管理( IntPtr hWnd )\r
+ {\r
+ this.directInput = new DirectInput();\r
+ this.timer = new CTimer( CTimer.E種別.MultiMedia );\r
+\r
+ this.list入力デバイス = new List<IInputDevice>( 10 );\r
+ this.list入力デバイス.Add( new CInputKeyboard( hWnd, directInput ) );\r
+ this.list入力デバイス.Add( new CInputMouse( hWnd, directInput ) );\r
+ foreach( DeviceInstance instance in this.directInput.GetDevices( DeviceClass.GameController, DeviceEnumerationFlags.AttachedOnly ) )\r
+ {\r
+ this.list入力デバイス.Add( new CInputJoystick( hWnd, instance, directInput ) );\r
+ }\r
+ this.proc = new CWin32.MidiInProc( this.MidiInCallback );\r
+ uint num = CWin32.midiInGetNumDevs();\r
+ Trace.TraceInformation( "MIDI入力デバイス数: {0}", new object[] { num } );\r
+ for( uint i = 0; i < num; i++ )\r
+ {\r
+ CInputMIDI item = new CInputMIDI( i );\r
+ this.list入力デバイス.Add( item );\r
+ CWin32.MIDIINCAPS lpMidiInCaps = new CWin32.MIDIINCAPS();\r
+ uint num3 = CWin32.midiInGetDevCaps( i, ref lpMidiInCaps, (uint) Marshal.SizeOf( lpMidiInCaps ) );\r
+ if( num3 != 0 )\r
+ {\r
+ Trace.TraceError( "MIDI In: Device{0}: midiInDevCaps(): {1:X2}: ", new object[] { i, num3 } );\r
+ }\r
+ else if( ( CWin32.midiInOpen( ref item.hMidiIn, i, this.proc, 0, 0x30000 ) == 0 ) && ( item.hMidiIn != 0 ) )\r
+ {\r
+ CWin32.midiInStart( item.hMidiIn );\r
+ Trace.TraceInformation( "MIDI In: [{0}] \"{1}\" の入力受付を開始しました。", new object[] { i, lpMidiInCaps.szPname } );\r
+ }\r
+ else\r
+ {\r
+ Trace.TraceError( "MIDI In: [{0}] \"{1}\" の入力受付の開始に失敗しました。", new object[] { i, lpMidiInCaps.szPname } );\r
+ }\r
+ }\r
+ }\r
+ \r
+ \r
+ // メソッド\r
+\r
+ public IInputDevice Joystick( int ID )\r
+ {\r
+ foreach( IInputDevice device in this.list入力デバイス )\r
+ {\r
+ if( ( device.e入力デバイス種別 == E入力デバイス種別.Joystick ) && ( device.ID == ID ) )\r
+ {\r
+ return device;\r
+ }\r
+ }\r
+ return null;\r
+ }\r
+ public IInputDevice Joystick( string GUID )\r
+ {\r
+ foreach( IInputDevice device in this.list入力デバイス )\r
+ {\r
+ if( ( device.e入力デバイス種別 == E入力デバイス種別.Joystick ) && device.GUID.Equals( GUID ) )\r
+ {\r
+ return device;\r
+ }\r
+ }\r
+ return null;\r
+ }\r
+ public IInputDevice MidiIn( int ID )\r
+ {\r
+ foreach( IInputDevice device in this.list入力デバイス )\r
+ {\r
+ if( ( device.e入力デバイス種別 == E入力デバイス種別.MidiIn ) && ( device.ID == ID ) )\r
+ {\r
+ return device;\r
+ }\r
+ }\r
+ return null;\r
+ }\r
+ public void tポーリング( bool bWindowがアクティブ中, bool bバッファ入力を使用する )\r
+ {\r
+ lock( this.objMidiIn排他用 )\r
+ {\r
+ foreach( IInputDevice device in this.list入力デバイス )\r
+ {\r
+ device.tポーリング( bWindowがアクティブ中, bバッファ入力を使用する );\r
+ }\r
+ }\r
+ }\r
+\r
+ #region [ IDisposable+α ]\r
+ //-----------------\r
+ public void Dispose()\r
+ {\r
+ this.Dispose( true );\r
+ }\r
+ public void Dispose( bool disposeManagedObjects )\r
+ {\r
+ if( !this.bDisposed済み )\r
+ {\r
+ if( disposeManagedObjects )\r
+ {\r
+ foreach( IInputDevice device in this.list入力デバイス )\r
+ {\r
+ CInputMIDI tmidi = device as CInputMIDI;\r
+ if( tmidi != null )\r
+ {\r
+ CWin32.midiInStop( tmidi.hMidiIn );\r
+ CWin32.midiInReset( tmidi.hMidiIn );\r
+ CWin32.midiInClose( tmidi.hMidiIn );\r
+ Trace.TraceInformation( "MIDI In: [{0}] を停止しました。", new object[] { tmidi.ID } );\r
+ }\r
+ }\r
+ foreach( IInputDevice device2 in this.list入力デバイス )\r
+ {\r
+ device2.Dispose();\r
+ }\r
+ lock( this.objMidiIn排他用 )\r
+ {\r
+ this.list入力デバイス.Clear();\r
+ }\r
+\r
+ this.directInput.Dispose();\r
+\r
+ if( this.timer != null )\r
+ {\r
+ this.timer.Dispose();\r
+ this.timer = null;\r
+ }\r
+ }\r
+ this.bDisposed済み = true;\r
+ }\r
+ }\r
+ ~CInput管理()\r
+ {\r
+ this.Dispose( false );\r
+ GC.KeepAlive( this );\r
+ }\r
+ //-----------------\r
+ #endregion\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private DirectInput directInput;\r
+ private IInputDevice _Keyboard;\r
+ private IInputDevice _Mouse;\r
+ private bool bDisposed済み;\r
+ private List<uint> listHMIDIIN = new List<uint>( 8 );\r
+ private object objMidiIn排他用 = new object();\r
+ private CWin32.MidiInProc proc;\r
+ private CTimer timer;\r
+\r
+ private void MidiInCallback( uint hMidiIn, uint wMsg, int dwInstance, int dwParam1, int dwParam2 )\r
+ {\r
+ int p = dwParam1 & 0xF0;\r
+ if( wMsg != CWin32.MIM_DATA || ( p != 0x80 && p != 0x90 ) )\r
+ return;\r
+\r
+ long time = this.timer.nシステム時刻; // lock前に取得\r
+\r
+ lock( this.objMidiIn排他用 )\r
+ {\r
+ if( ( this.list入力デバイス != null ) && ( this.list入力デバイス.Count != 0 ) )\r
+ {\r
+ foreach( IInputDevice device in this.list入力デバイス )\r
+ {\r
+ CInputMIDI tmidi = device as CInputMIDI;\r
+ if( ( tmidi != null ) && ( tmidi.hMidiIn == hMidiIn ) )\r
+ {\r
+ tmidi.tメッセージからMIDI信号のみ受信( wMsg, dwInstance, dwParam1, dwParam2, time );\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using SlimDX.DirectInput;\r
+\r
+namespace FDK\r
+{\r
+ public class DeviceConstantConverter\r
+ {\r
+ // メソッド\r
+\r
+ public static Key DIKtoKey( int dik )\r
+ {\r
+ switch( dik )\r
+ {\r
+ case 1:\r
+ return Key.Escape;\r
+\r
+ case 2:\r
+ return Key.D1;\r
+\r
+ case 3:\r
+ return Key.D2;\r
+\r
+ case 4:\r
+ return Key.D3;\r
+\r
+ case 5:\r
+ return Key.D4;\r
+\r
+ case 6:\r
+ return Key.D5;\r
+\r
+ case 7:\r
+ return Key.D6;\r
+\r
+ case 8:\r
+ return Key.D7;\r
+\r
+ case 9:\r
+ return Key.D8;\r
+\r
+ case 10:\r
+ return Key.D9;\r
+\r
+ case 11:\r
+ return Key.D0;\r
+\r
+ case 12:\r
+ return Key.Minus;\r
+\r
+ case 13:\r
+ return Key.Equals;\r
+\r
+ case 14:\r
+ return Key.Backspace;\r
+\r
+ case 15:\r
+ return Key.Tab;\r
+\r
+ case 0x10:\r
+ return Key.Q;\r
+\r
+ case 0x11:\r
+ return Key.W;\r
+\r
+ case 0x12:\r
+ return Key.E;\r
+\r
+ case 0x13:\r
+ return Key.R;\r
+\r
+ case 20:\r
+ return Key.T;\r
+\r
+ case 0x15:\r
+ return Key.Y;\r
+\r
+ case 0x16:\r
+ return Key.U;\r
+\r
+ case 0x17:\r
+ return Key.I;\r
+\r
+ case 0x18:\r
+ return Key.O;\r
+\r
+ case 0x19:\r
+ return Key.P;\r
+\r
+ case 0x1a:\r
+ return Key.LeftBracket;\r
+\r
+ case 0x1b:\r
+ return Key.RightBracket;\r
+\r
+ case 0x1c:\r
+ return Key.Return;\r
+\r
+ case 0x1d:\r
+ return Key.LeftControl;\r
+\r
+ case 30:\r
+ return Key.A;\r
+\r
+ case 0x1f:\r
+ return Key.S;\r
+\r
+ case 0x20:\r
+ return Key.D;\r
+\r
+ case 0x21:\r
+ return Key.F;\r
+\r
+ case 0x22:\r
+ return Key.G;\r
+\r
+ case 0x23:\r
+ return Key.H;\r
+\r
+ case 0x24:\r
+ return Key.J;\r
+\r
+ case 0x25:\r
+ return Key.K;\r
+\r
+ case 0x26:\r
+ return Key.L;\r
+\r
+ case 0x27:\r
+ return Key.Semicolon;\r
+\r
+ case 40:\r
+ return Key.Apostrophe;\r
+\r
+ case 0x29:\r
+ return Key.Grave;\r
+\r
+ case 0x2a:\r
+ return Key.LeftShift;\r
+\r
+ case 0x2b:\r
+ return Key.Backslash;\r
+\r
+ case 0x2c:\r
+ return Key.Z;\r
+\r
+ case 0x2d:\r
+ return Key.X;\r
+\r
+ case 0x2e:\r
+ return Key.C;\r
+\r
+ case 0x2f:\r
+ return Key.V;\r
+\r
+ case 0x30:\r
+ return Key.B;\r
+\r
+ case 0x31:\r
+ return Key.N;\r
+\r
+ case 50:\r
+ return Key.M;\r
+\r
+ case 0x33:\r
+ return Key.Comma;\r
+\r
+ case 0x34:\r
+ return Key.Period;\r
+\r
+ case 0x35:\r
+ return Key.Slash;\r
+\r
+ case 0x36:\r
+ return Key.RightShift;\r
+\r
+ case 0x37:\r
+ return Key.NumberPadStar;\r
+\r
+ case 0x38:\r
+ return Key.LeftAlt;\r
+\r
+ case 0x39:\r
+ return Key.Space;\r
+\r
+ case 0x3a:\r
+ return Key.CapsLock;\r
+\r
+ case 0x3b:\r
+ return Key.F1;\r
+\r
+ case 60:\r
+ return Key.F2;\r
+\r
+ case 0x3d:\r
+ return Key.F3;\r
+\r
+ case 0x3e:\r
+ return Key.F4;\r
+\r
+ case 0x3f:\r
+ return Key.F5;\r
+\r
+ case 0x40:\r
+ return Key.F6;\r
+\r
+ case 0x41:\r
+ return Key.F7;\r
+\r
+ case 0x42:\r
+ return Key.F8;\r
+\r
+ case 0x43:\r
+ return Key.F9;\r
+\r
+ case 0x44:\r
+ return Key.F10;\r
+\r
+ case 0x45:\r
+ return Key.NumberLock;\r
+\r
+ case 70:\r
+ return Key.ScrollLock;\r
+\r
+ case 0x47:\r
+ return Key.NumberPad7;\r
+\r
+ case 0x48:\r
+ return Key.NumberPad8;\r
+\r
+ case 0x49:\r
+ return Key.NumberPad9;\r
+\r
+ case 0x4a:\r
+ return Key.NumberPadMinus;\r
+\r
+ case 0x4b:\r
+ return Key.NumberPad4;\r
+\r
+ case 0x4c:\r
+ return Key.NumberPad5;\r
+\r
+ case 0x4d:\r
+ return Key.NumberPad6;\r
+\r
+ case 0x4e:\r
+ return Key.NumberPadPlus;\r
+\r
+ case 0x4f:\r
+ return Key.NumberPad1;\r
+\r
+ case 80:\r
+ return Key.NumberPad2;\r
+\r
+ case 0x51:\r
+ return Key.NumberPad3;\r
+\r
+ case 0x52:\r
+ return Key.NumberPad0;\r
+\r
+ case 0x53:\r
+ return Key.NumberPadPeriod;\r
+\r
+ case 0x56:\r
+ return Key.Oem102;\r
+\r
+ case 0x57:\r
+ return Key.F11;\r
+\r
+ case 0x58:\r
+ return Key.F12;\r
+\r
+ case 100:\r
+ return Key.F13;\r
+\r
+ case 0x65:\r
+ return Key.F14;\r
+\r
+ case 0x66:\r
+ return Key.F15;\r
+\r
+ case 0x70:\r
+ return Key.Kana;\r
+\r
+ case 0x73:\r
+ return Key.AbntC1;\r
+\r
+ case 0x79:\r
+ return Key.Convert;\r
+\r
+ case 0x7b:\r
+ return Key.NoConvert;\r
+\r
+ case 0x7d:\r
+ return Key.Yen;\r
+\r
+ case 0x7e:\r
+ return Key.AbntC2;\r
+\r
+ case 0x8d:\r
+ return Key.NumberPadEquals;\r
+\r
+ case 0x90:\r
+ return Key.PreviousTrack;\r
+\r
+ case 0x91:\r
+ return Key.AT;\r
+\r
+ case 0x92:\r
+ return Key.Colon;\r
+\r
+ case 0x93:\r
+ return Key.Underline;\r
+\r
+ case 0x94:\r
+ return Key.Kanji;\r
+\r
+ case 0x95:\r
+ return Key.Stop;\r
+\r
+ case 150:\r
+ return Key.AX;\r
+\r
+ case 0x97:\r
+ return Key.Unlabeled;\r
+\r
+ case 0x99:\r
+ return Key.NextTrack;\r
+\r
+ case 0x9c:\r
+ return Key.NumberPadEnter;\r
+\r
+ case 0x9d:\r
+ return Key.RightControl;\r
+\r
+ case 160:\r
+ return Key.Mute;\r
+\r
+ case 0xa1:\r
+ return Key.Calculator;\r
+\r
+ case 0xa2:\r
+ return Key.PlayPause;\r
+\r
+ case 0xa4:\r
+ return Key.MediaStop;\r
+\r
+ case 0xae:\r
+ return Key.VolumeDown;\r
+\r
+ case 0xb0:\r
+ return Key.VolumeUp;\r
+\r
+ case 0xb2:\r
+ return Key.WebHome;\r
+\r
+ case 0xb3:\r
+ return Key.NumberPadComma;\r
+\r
+ case 0xb5:\r
+ return Key.NumberPadSlash;\r
+\r
+ case 0xb7:\r
+ return Key.PrintScreen;\r
+\r
+ case 0xb8:\r
+ return Key.RightAlt;\r
+\r
+ case 0xc5:\r
+ return Key.Pause;\r
+\r
+ case 0xc7:\r
+ return Key.Home;\r
+\r
+ case 200:\r
+ return Key.UpArrow;\r
+\r
+ case 0xc9:\r
+ return Key.PageUp;\r
+\r
+ case 0xcb:\r
+ return Key.LeftArrow;\r
+\r
+ case 0xcd:\r
+ return Key.RightArrow;\r
+\r
+ case 0xcf:\r
+ return Key.End;\r
+\r
+ case 0xd0:\r
+ return Key.DownArrow;\r
+\r
+ case 0xd1:\r
+ return Key.PageDown;\r
+\r
+ case 210:\r
+ return Key.Insert;\r
+\r
+ case 0xd3:\r
+ return Key.Delete;\r
+\r
+ case 0xdb:\r
+ return Key.LeftWindowsKey;\r
+\r
+ case 220:\r
+ return Key.RightWindowsKey;\r
+\r
+ case 0xdd:\r
+ return Key.Applications;\r
+\r
+ case 0xde:\r
+ return Key.Power;\r
+\r
+ case 0xdf:\r
+ return Key.Sleep;\r
+\r
+ case 0xe3:\r
+ return Key.Wake;\r
+\r
+ case 0xe5:\r
+ return Key.WebSearch;\r
+\r
+ case 230:\r
+ return Key.WebFavorites;\r
+\r
+ case 0xe7:\r
+ return Key.WebRefresh;\r
+\r
+ case 0xe8:\r
+ return Key.WebStop;\r
+\r
+ case 0xe9:\r
+ return Key.WebForward;\r
+\r
+ case 0xea:\r
+ return Key.WebBack;\r
+\r
+ case 0xeb:\r
+ return Key.MyComputer;\r
+\r
+ case 0xec:\r
+ return Key.Mail;\r
+\r
+ case 0xed:\r
+ return Key.MediaSelect;\r
+ }\r
+ return Key.Unknown;\r
+ }\r
+ public static int KeyToDIK( Key key )\r
+ {\r
+ switch( key )\r
+ {\r
+ case Key.D0:\r
+ return 11;\r
+\r
+ case Key.D1:\r
+ return 2;\r
+\r
+ case Key.D2:\r
+ return 3;\r
+\r
+ case Key.D3:\r
+ return 4;\r
+\r
+ case Key.D4:\r
+ return 5;\r
+\r
+ case Key.D5:\r
+ return 6;\r
+\r
+ case Key.D6:\r
+ return 7;\r
+\r
+ case Key.D7:\r
+ return 8;\r
+\r
+ case Key.D8:\r
+ return 9;\r
+\r
+ case Key.D9:\r
+ return 10;\r
+\r
+ case Key.A:\r
+ return 30;\r
+\r
+ case Key.B:\r
+ return 0x30;\r
+\r
+ case Key.C:\r
+ return 0x2e;\r
+\r
+ case Key.D:\r
+ return 0x20;\r
+\r
+ case Key.E:\r
+ return 0x12;\r
+\r
+ case Key.F:\r
+ return 0x21;\r
+\r
+ case Key.G:\r
+ return 0x22;\r
+\r
+ case Key.H:\r
+ return 0x23;\r
+\r
+ case Key.I:\r
+ return 0x17;\r
+\r
+ case Key.J:\r
+ return 0x24;\r
+\r
+ case Key.K:\r
+ return 0x25;\r
+\r
+ case Key.L:\r
+ return 0x26;\r
+\r
+ case Key.M:\r
+ return 50;\r
+\r
+ case Key.N:\r
+ return 0x31;\r
+\r
+ case Key.O:\r
+ return 0x18;\r
+\r
+ case Key.P:\r
+ return 0x19;\r
+\r
+ case Key.Q:\r
+ return 0x10;\r
+\r
+ case Key.R:\r
+ return 0x13;\r
+\r
+ case Key.S:\r
+ return 0x1f;\r
+\r
+ case Key.T:\r
+ return 20;\r
+\r
+ case Key.U:\r
+ return 0x16;\r
+\r
+ case Key.V:\r
+ return 0x2f;\r
+\r
+ case Key.W:\r
+ return 0x11;\r
+\r
+ case Key.X:\r
+ return 0x2d;\r
+\r
+ case Key.Y:\r
+ return 0x15;\r
+\r
+ case Key.Z:\r
+ return 0x2c;\r
+\r
+ case Key.AbntC1:\r
+ return 0x73;\r
+\r
+ case Key.AbntC2:\r
+ return 0x7e;\r
+\r
+ case Key.Apostrophe:\r
+ return 40;\r
+\r
+ case Key.Applications:\r
+ return 0xdd;\r
+\r
+ case Key.AT:\r
+ return 0x91;\r
+\r
+ case Key.AX:\r
+ return 150;\r
+\r
+ case Key.Backspace:\r
+ return 14;\r
+\r
+ case Key.Backslash:\r
+ return 0x2b;\r
+\r
+ case Key.Calculator:\r
+ return 0xa1;\r
+\r
+ case Key.CapsLock:\r
+ return 0x3a;\r
+\r
+ case Key.Colon:\r
+ return 0x92;\r
+\r
+ case Key.Comma:\r
+ return 0x33;\r
+\r
+ case Key.Convert:\r
+ return 0x79;\r
+\r
+ case Key.Delete:\r
+ return 0xd3;\r
+\r
+ case Key.DownArrow:\r
+ return 0xd0;\r
+\r
+ case Key.End:\r
+ return 0xcf;\r
+\r
+ case Key.Equals:\r
+ return 13;\r
+\r
+ case Key.Escape:\r
+ return 1;\r
+\r
+ case Key.F1:\r
+ return 0x3b;\r
+\r
+ case Key.F2:\r
+ return 60;\r
+\r
+ case Key.F3:\r
+ return 0x3d;\r
+\r
+ case Key.F4:\r
+ return 0x3e;\r
+\r
+ case Key.F5:\r
+ return 0x3f;\r
+\r
+ case Key.F6:\r
+ return 0x40;\r
+\r
+ case Key.F7:\r
+ return 0x41;\r
+\r
+ case Key.F8:\r
+ return 0x42;\r
+\r
+ case Key.F9:\r
+ return 0x43;\r
+\r
+ case Key.F10:\r
+ return 0x44;\r
+\r
+ case Key.F11:\r
+ return 0x57;\r
+\r
+ case Key.F12:\r
+ return 0x58;\r
+\r
+ case Key.F13:\r
+ return 100;\r
+\r
+ case Key.F14:\r
+ return 0x65;\r
+\r
+ case Key.F15:\r
+ return 0x66;\r
+\r
+ case Key.Grave:\r
+ return 0x29;\r
+\r
+ case Key.Home:\r
+ return 0xc7;\r
+\r
+ case Key.Insert:\r
+ return 210;\r
+\r
+ case Key.Kana:\r
+ return 0x70;\r
+\r
+ case Key.Kanji:\r
+ return 0x94;\r
+\r
+ case Key.LeftBracket:\r
+ return 0x1a;\r
+\r
+ case Key.LeftControl:\r
+ return 0x1d;\r
+\r
+ case Key.LeftArrow:\r
+ return 0xcb;\r
+\r
+ case Key.LeftAlt:\r
+ return 0x38;\r
+\r
+ case Key.LeftShift:\r
+ return 0x2a;\r
+\r
+ case Key.LeftWindowsKey:\r
+ return 0xdb;\r
+\r
+ case Key.Mail:\r
+ return 0xec;\r
+\r
+ case Key.MediaSelect:\r
+ return 0xed;\r
+\r
+ case Key.MediaStop:\r
+ return 0xa4;\r
+\r
+ case Key.Minus:\r
+ return 12;\r
+\r
+ case Key.Mute:\r
+ return 160;\r
+\r
+ case Key.MyComputer:\r
+ return 0xeb;\r
+\r
+ case Key.NextTrack:\r
+ return 0x99;\r
+\r
+ case Key.NoConvert:\r
+ return 0x7b;\r
+\r
+ case Key.NumberLock:\r
+ return 0x45;\r
+\r
+ case Key.NumberPad0:\r
+ return 0x52;\r
+\r
+ case Key.NumberPad1:\r
+ return 0x4f;\r
+\r
+ case Key.NumberPad2:\r
+ return 80;\r
+\r
+ case Key.NumberPad3:\r
+ return 0x51;\r
+\r
+ case Key.NumberPad4:\r
+ return 0x4b;\r
+\r
+ case Key.NumberPad5:\r
+ return 0x4c;\r
+\r
+ case Key.NumberPad6:\r
+ return 0x4d;\r
+\r
+ case Key.NumberPad7:\r
+ return 0x47;\r
+\r
+ case Key.NumberPad8:\r
+ return 0x48;\r
+\r
+ case Key.NumberPad9:\r
+ return 0x49;\r
+\r
+ case Key.NumberPadComma:\r
+ return 0xb3;\r
+\r
+ case Key.NumberPadEnter:\r
+ return 0x9c;\r
+\r
+ case Key.NumberPadEquals:\r
+ return 0x8d;\r
+\r
+ case Key.NumberPadMinus:\r
+ return 0x4a;\r
+\r
+ case Key.NumberPadPeriod:\r
+ return 0x53;\r
+\r
+ case Key.NumberPadPlus:\r
+ return 0x4e;\r
+\r
+ case Key.NumberPadSlash:\r
+ return 0xb5;\r
+\r
+ case Key.NumberPadStar:\r
+ return 0x37;\r
+\r
+ case Key.Oem102:\r
+ return 0x56;\r
+\r
+ case Key.PageDown:\r
+ return 0xd1;\r
+\r
+ case Key.PageUp:\r
+ return 0xc9;\r
+\r
+ case Key.Pause:\r
+ return 0xc5;\r
+\r
+ case Key.Period:\r
+ return 0x34;\r
+\r
+ case Key.PlayPause:\r
+ return 0xa2;\r
+\r
+ case Key.Power:\r
+ return 0xde;\r
+\r
+ case Key.PreviousTrack:\r
+ return 0x90;\r
+\r
+ case Key.RightBracket:\r
+ return 0x1b;\r
+\r
+ case Key.RightControl:\r
+ return 0x9d;\r
+\r
+ case Key.Return:\r
+ return 0x1c;\r
+\r
+ case Key.RightArrow:\r
+ return 0xcd;\r
+\r
+ case Key.RightAlt:\r
+ return 0xb8;\r
+\r
+ case Key.RightShift:\r
+ return 0x36;\r
+\r
+ case Key.RightWindowsKey:\r
+ return 220;\r
+\r
+ case Key.ScrollLock:\r
+ return 70;\r
+\r
+ case Key.Semicolon:\r
+ return 0x27;\r
+\r
+ case Key.Slash:\r
+ return 0x35;\r
+\r
+ case Key.Sleep:\r
+ return 0xdf;\r
+\r
+ case Key.Space:\r
+ return 0x39;\r
+\r
+ case Key.Stop:\r
+ return 0x95;\r
+\r
+ case Key.PrintScreen:\r
+ return 0xb7;\r
+\r
+ case Key.Tab:\r
+ return 15;\r
+\r
+ case Key.Underline:\r
+ return 0x93;\r
+\r
+ case Key.Unlabeled:\r
+ return 0x97;\r
+\r
+ case Key.UpArrow:\r
+ return 200;\r
+\r
+ case Key.VolumeDown:\r
+ return 0xae;\r
+\r
+ case Key.VolumeUp:\r
+ return 0xb0;\r
+\r
+ case Key.Wake:\r
+ return 0xe3;\r
+\r
+ case Key.WebBack:\r
+ return 0xea;\r
+\r
+ case Key.WebFavorites:\r
+ return 230;\r
+\r
+ case Key.WebForward:\r
+ return 0xe9;\r
+\r
+ case Key.WebHome:\r
+ return 0xb2;\r
+\r
+ case Key.WebRefresh:\r
+ return 0xe7;\r
+\r
+ case Key.WebSearch:\r
+ return 0xe5;\r
+\r
+ case Key.WebStop:\r
+ return 0xe8;\r
+\r
+ case Key.Yen:\r
+ return 0x7d;\r
+ }\r
+ return 0;\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+\r
+namespace FDK\r
+{\r
+ // 定数\r
+\r
+ public enum E入力デバイス種別\r
+ {\r
+ Keyboard,\r
+ Mouse,\r
+ Joystick,\r
+ MidiIn,\r
+ Unknown\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+\r
+namespace FDK\r
+{\r
+ public interface IInputDevice : IDisposable\r
+ {\r
+ // プロパティ\r
+\r
+ E入力デバイス種別 e入力デバイス種別\r
+ {\r
+ get;\r
+ }\r
+ string GUID \r
+ {\r
+ get; \r
+ }\r
+ int ID \r
+ {\r
+ get;\r
+ }\r
+ List<STInputEvent> list入力イベント\r
+ {\r
+ get;\r
+ }\r
+\r
+\r
+ // メソッドインターフェース\r
+\r
+ void tポーリング( bool bWindowがアクティブ中, bool bバッファ入力を使用する );\r
+ bool bキーが押された( int nKey );\r
+ bool bキーが押されている( int nKey );\r
+ bool bキーが離された( int nKey );\r
+ bool bキーが離されている( int nKey );\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+\r
+namespace FDK\r
+{\r
+ // 構造体\r
+\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ public struct STInputEvent\r
+ {\r
+ public int nKey { get; set; }\r
+ public bool b押された { get; set; }\r
+ public bool b離された { get; set; }\r
+ public long nTimeStamp { get; set; }\r
+ public int nVelocity { get; set; }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using System.IO;\r
+using System.Diagnostics;\r
+using SlimDX;\r
+using SlimDX.DirectSound;\r
+using SlimDX.Multimedia;\r
+\r
+namespace FDK\r
+{\r
+ public class CSound : IDisposable\r
+ {\r
+ // (1) 以下は全子クラスに共通\r
+\r
+\r
+ // プロパティ\r
+\r
+ public SecondarySoundBuffer Buffer\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+ public bool bストリーム再生する\r
+ {\r
+ get\r
+ {\r
+ if( this.nHandle < 0 )\r
+ {\r
+ return false;\r
+ }\r
+ return true;\r
+ }\r
+ }\r
+ public bool bループする\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+ public bool b一時停止中\r
+ {\r
+ get\r
+ {\r
+ return ( this.n一時停止回数 > 0 );\r
+ }\r
+ }\r
+ public bool b再生中\r
+ {\r
+ get\r
+ {\r
+ return ( ( this.Buffer.Status & BufferStatus.Playing ) != BufferStatus.None );\r
+ }\r
+ }\r
+ public double db再生速度\r
+ {\r
+ get\r
+ {\r
+ return this._db再生速度;\r
+ }\r
+ set\r
+ {\r
+ if( this._db再生速度 != value )\r
+ {\r
+ this._db再生速度 = value;\r
+ if( this.b再生中 )\r
+ {\r
+ this.Buffer.Frequency = (int) ( ( this.nオリジナルの周波数 * this._db再生速度 ) * this.db周波数倍率 );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ public double db周波数倍率\r
+ {\r
+ get\r
+ {\r
+ return this._db周波数倍率;\r
+ }\r
+ set\r
+ {\r
+ if( this._db周波数倍率 != value )\r
+ {\r
+ this._db周波数倍率 = value;\r
+ if( this.b再生中 )\r
+ {\r
+ this.Buffer.Frequency = (int) ( ( this.nオリジナルの周波数 * this.db再生速度 ) * this.db周波数倍率 );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ public DateTime dt最終更新時刻\r
+ {\r
+ get; \r
+ private set;\r
+ }\r
+ public WaveFormat Format\r
+ { \r
+ get;\r
+ private set;\r
+ }\r
+ public int nオリジナルの周波数 \r
+ { \r
+ get; \r
+ private set;\r
+ }\r
+ public int nサウンドバッファサイズ\r
+ {\r
+ get\r
+ {\r
+ return this.Buffer.Capabilities.BufferSize;\r
+ }\r
+ }\r
+ public int n位置\r
+ {\r
+ get\r
+ {\r
+ return this._n位置;\r
+ }\r
+ set\r
+ {\r
+ this._n位置 = value;\r
+ if( this._n位置 < -100 )\r
+ {\r
+ this._n位置 = -100;\r
+ }\r
+ else if( this._n位置 > 100 )\r
+ {\r
+ this._n位置 = 100;\r
+ }\r
+ if( this._n位置 == 0 )\r
+ {\r
+ this._n位置db = 0;\r
+ }\r
+ else if( this._n位置 == -100 )\r
+ {\r
+ this._n位置db = -10000;\r
+ }\r
+ else if( this._n位置 == 100 )\r
+ {\r
+ this._n位置db = 0x2710;\r
+ }\r
+ else if( this._n位置 < 0 )\r
+ {\r
+ this._n位置db = (int) ( ( 20.0 * Math.Log10( ( (double) ( this._n位置 + 100 ) ) / 100.0 ) ) * 100.0 );\r
+ }\r
+ else\r
+ {\r
+ this._n位置db = (int) ( ( -20.0 * Math.Log10( ( (double) ( 100 - this._n位置 ) ) / 100.0 ) ) * 100.0 );\r
+ }\r
+ if( this.b再生中 )\r
+ {\r
+ this.Buffer.Pan = this._n位置db;\r
+ }\r
+ }\r
+ }\r
+ public int n音量\r
+ {\r
+ get\r
+ {\r
+ return this._n音量;\r
+ }\r
+ set\r
+ {\r
+ this._n音量 = value;\r
+ if( this._n音量 == 0 )\r
+ {\r
+ this._n音量db = -10000;\r
+ }\r
+ else\r
+ {\r
+ this._n音量db = (int) ( ( 20.0 * Math.Log10( ( (double) this._n音量 ) / 100.0 ) ) * 100.0 );\r
+ }\r
+ if( this.b再生中 )\r
+ {\r
+ this.Buffer.Volume = this._n音量db;\r
+ }\r
+ }\r
+ }\r
+ public int n周波数\r
+ {\r
+ get\r
+ {\r
+ return this.Buffer.Frequency;\r
+ }\r
+ set\r
+ {\r
+ this.Buffer.Frequency = value;\r
+ }\r
+ }\r
+ public int n総演奏時間ms\r
+ {\r
+ get\r
+ {\r
+ return (int) ( ( (double) this.GetTotalPCMSize( this.nHandle ) ) / ( this.Buffer.Format.AverageBytesPerSecond * 0.001 ) );\r
+ }\r
+ }\r
+ public string strファイル名\r
+ {\r
+ get; \r
+ private set; \r
+ }\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public CSound()\r
+ {\r
+ this.Buffer = null;\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ public int tデコード後のサイズを調べる( string strファイル名 )\r
+ {\r
+ int nHandle = this.Open( strファイル名 );\r
+ if( nHandle < 0 )\r
+ {\r
+ return -1;\r
+ }\r
+ CWin32.WAVEFORMATEX wfx = new CWin32.WAVEFORMATEX();\r
+ if( this.GetFormat( nHandle, ref wfx ) < 0 )\r
+ {\r
+ this.Close( nHandle );\r
+ return -2;\r
+ }\r
+ uint totalPCMSize = this.GetTotalPCMSize( nHandle );\r
+ if( totalPCMSize == 0 )\r
+ {\r
+ this.Close( nHandle );\r
+ return -3;\r
+ }\r
+ this.Close( nHandle );\r
+ return (int) totalPCMSize;\r
+ }\r
+ public void tオンメモリ方式で作成する( SlimDX.DirectSound.DirectSound Device, string strファイル名 )\r
+ {\r
+ byte[] buffer = null;\r
+ int num = this.Open( strファイル名 );\r
+ if( num < 0 )\r
+ {\r
+ throw new Exception( string.Format( "Open() に失敗しました。({0})({1})", num, strファイル名 ) );\r
+ }\r
+ CWin32.WAVEFORMATEX wfx = new CWin32.WAVEFORMATEX();\r
+ if( this.GetFormat( num, ref wfx ) < 0 )\r
+ {\r
+ this.Close( num );\r
+ throw new Exception( string.Format( "GetFormat() に失敗しました。({0})", strファイル名 ) );\r
+ }\r
+ int totalPCMSize = (int) this.GetTotalPCMSize( num );\r
+ if( totalPCMSize == 0 )\r
+ {\r
+ this.Close( num );\r
+ throw new Exception( string.Format( "GetTotalPCMSize() に失敗しました。({0})", strファイル名 ) );\r
+ }\r
+ totalPCMSize += ( ( totalPCMSize % 2 ) != 0 ) ? 1 : 0;\r
+ buffer = new byte[ totalPCMSize ];\r
+ GCHandle handle = GCHandle.Alloc( buffer, GCHandleType.Pinned );\r
+ try\r
+ {\r
+ if( this.Decode( num, Marshal.UnsafeAddrOfPinnedArrayElement( buffer, 0 ), (uint) totalPCMSize, 0 ) < 0 )\r
+ {\r
+ buffer = null;\r
+ throw new Exception( string.Format( "デコードに失敗しました。({0})", strファイル名 ) );\r
+ }\r
+ }\r
+ finally\r
+ {\r
+ handle.Free();\r
+ this.Close( num );\r
+ }\r
+ WaveFormat format = new WaveFormat();\r
+ format.FormatTag = WaveFormatTag.Pcm;\r
+ format.Channels = (short) wfx.nChannels;\r
+ format.SamplesPerSecond = (int) wfx.nSamplesPerSec;\r
+ format.AverageBytesPerSecond = (int) wfx.nAvgBytesPerSec;\r
+ format.BlockAlignment = (short) wfx.nBlockAlign;\r
+ format.BitsPerSample = (short) wfx.wBitsPerSample;\r
+ this.Format = format;\r
+ SoundBufferDescription description = new SoundBufferDescription();\r
+ description.Format = this.Format;\r
+ description.Flags = BufferFlags.Defer | BufferFlags.GetCurrentPosition2 | BufferFlags.GlobalFocus | BufferFlags.ControlVolume | BufferFlags.ControlPan | BufferFlags.ControlFrequency;\r
+ description.SizeInBytes = totalPCMSize;\r
+ this.Buffer = new SecondarySoundBuffer( Device, description );\r
+ this.Buffer.Write( buffer, 0, LockFlags.None );\r
+ this.strファイル名 = strファイル名;\r
+ this.dt最終更新時刻 = File.GetLastWriteTime( strファイル名 );\r
+ this.nオリジナルの周波数 = this.Buffer.Frequency;\r
+ }\r
+ public void tストリーム方式で作成する( SlimDX.DirectSound.DirectSound Device, string strファイル名 )\r
+ {\r
+ this.nHandle = this.Open( strファイル名 );\r
+ if( this.nHandle < 0 )\r
+ {\r
+ throw new Exception( string.Format( "Open() に失敗しました。({0})", strファイル名 ) );\r
+ }\r
+ CWin32.WAVEFORMATEX wfx = new CWin32.WAVEFORMATEX();\r
+ if( this.GetFormat( this.nHandle, ref wfx ) < 0 )\r
+ {\r
+ this.Close( this.nHandle );\r
+ this.nHandle = -1;\r
+ throw new Exception( string.Format( "GetFormat() に失敗しました。({0})", strファイル名 ) );\r
+ }\r
+ WaveFormat format = new WaveFormat();\r
+ format.FormatTag = WaveFormatTag.Pcm;\r
+ format.AverageBytesPerSecond = (int) wfx.nAvgBytesPerSec;\r
+ format.BitsPerSample = (short) wfx.wBitsPerSample;\r
+ format.BlockAlignment = (short) wfx.nBlockAlign;\r
+ format.Channels = (short) wfx.nChannels;\r
+ format.SamplesPerSecond = (int) wfx.nSamplesPerSec;\r
+ this.Format = format;\r
+ this.by中継バッファ = new byte[ CSound管理.nバッファサイズ ];\r
+ this.gch中継バッファ = GCHandle.Alloc( this.by中継バッファ, GCHandleType.Pinned );\r
+ SoundBufferDescription description = new SoundBufferDescription();\r
+ description.Format = this.Format;\r
+ description.Flags = BufferFlags.Defer | BufferFlags.GetCurrentPosition2 | BufferFlags.GlobalFocus | BufferFlags.ControlVolume | BufferFlags.ControlPan | BufferFlags.ControlFrequency;\r
+ description.SizeInBytes = this.by中継バッファ.Length * CSound管理.nバッファの数;\r
+ this.Buffer = new SecondarySoundBuffer( Device, description );\r
+ this.tストリーム再生位置リセット();\r
+ for( int i = 0; i < CSound管理.nバッファの数; i++ )\r
+ {\r
+ this.tデコーダの現在の読み出し位置から1バッファ分のPCMを指定されたバッファに書き込む( this.Buffer, i, this.bループする );\r
+ }\r
+ this.n現在書き込み許可待ちのバッファ番号 = 0;\r
+ this.strファイル名 = strファイル名;\r
+ this.dt最終更新時刻 = File.GetLastWriteTime( strファイル名 );\r
+ this.nオリジナルの周波数 = this.Buffer.Frequency;\r
+ }\r
+ public void t再生を一時停止する()\r
+ {\r
+ if( this.b再生中 )\r
+ {\r
+ this.n一時停止位置byte = this.Buffer.CurrentPlayPosition;\r
+ this.Buffer.Stop();\r
+ this.n一時停止回数++;\r
+ }\r
+ }\r
+ public void t再生を開始する()\r
+ {\r
+ this.t再生を開始する( false );\r
+ }\r
+ public void t再生を開始する( bool bループする )\r
+ {\r
+ this.Buffer.Stop();\r
+ this.Buffer.CurrentPlayPosition = 0;\r
+ this.Buffer.Frequency = ( ( this.db再生速度 != 1.0 ) || ( this.db周波数倍率 != 1.0 ) ) ? ( (int) ( ( this.nオリジナルの周波数 * this.db再生速度 ) * this.db周波数倍率 ) ) : this.nオリジナルの周波数;\r
+ this.Buffer.Volume = this._n音量db;\r
+ this.Buffer.Pan = this._n位置db;\r
+ try\r
+ {\r
+ this.Buffer.Play( 0, ( this.bストリーム再生する || bループする ) ? PlayFlags.Looping : PlayFlags.None );\r
+ }\r
+ catch( OutOfMemoryException )\r
+ {\r
+ Trace.TraceError( "サウンドを再生するために必要なメモリ領域が不足しています。" );\r
+ }\r
+ this.n一時停止回数 = 0;\r
+ }\r
+ public void t再生を再開する()\r
+ {\r
+ if( this.n一時停止回数 > 0 )\r
+ {\r
+ this.n一時停止回数--;\r
+ if( this.n一時停止回数 <= 0 )\r
+ {\r
+ this.Buffer.CurrentPlayPosition = this.n一時停止位置byte;\r
+ this.Buffer.Frequency = ( ( this.db再生速度 != 1.0 ) || ( this.db周波数倍率 != 1.0 ) ) ? ( (int) ( ( this.nオリジナルの周波数 * this.db再生速度 ) * this.db周波数倍率 ) ) : this.nオリジナルの周波数;\r
+ this.Buffer.Volume = this._n音量db;\r
+ this.Buffer.Pan = this._n位置db;\r
+ try\r
+ {\r
+ this.Buffer.Play( 0, ( this.bストリーム再生する || this.bループする ) ? PlayFlags.Looping : PlayFlags.None );\r
+ }\r
+ catch( OutOfMemoryException )\r
+ {\r
+ Trace.TraceError( "サウンドを再生するために必要なメモリ領域が不足しています。" );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ public void t再生を再開する( long n再生開始位置ms )\r
+ {\r
+ this.t再生位置を変更する( this.t時刻から位置を返す( n再生開始位置ms ) );\r
+ this.t再生を再開する();\r
+ }\r
+ public void t再生を停止する()\r
+ {\r
+ this.Buffer.Stop();\r
+ this.Buffer.CurrentPlayPosition = 0;\r
+ this.n一時停止回数 = 0;\r
+ if( this.bストリーム再生する )\r
+ {\r
+ this.tストリーム再生位置リセット();\r
+ for( int i = 0; i < CSound管理.nバッファの数; i++ )\r
+ {\r
+ this.tデコーダの現在の読み出し位置から1バッファ分のPCMを指定されたバッファに書き込む( this.Buffer, i, this.bループする );\r
+ }\r
+ this.n現在書き込み許可待ちのバッファ番号 = 0;\r
+ }\r
+ }\r
+ public void t再生位置を変更する( int n新しい再生位置sample )\r
+ {\r
+ if( this.nHandle >= 0 )\r
+ {\r
+ int num = n新しい再生位置sample * this.Buffer.Format.BlockAlignment;\r
+ if( this.bストリーム再生する )\r
+ {\r
+ this.t再生中の処理をする();\r
+ int num2 = this.n現在のPCM側の位置byte - ( CSound管理.nバッファサイズ * CSound管理.nバッファの数 );\r
+ if( num2 < 0 )\r
+ {\r
+ num2 = 0;\r
+ }\r
+ int num3 = this.n現在のPCM側の位置byte - 1;\r
+ if( num3 < 0 )\r
+ {\r
+ num3 = 0;\r
+ }\r
+ if( ( num >= num2 ) && ( num <= num3 ) )\r
+ {\r
+ this.Buffer.CurrentPlayPosition = num % ( CSound管理.nバッファサイズ * CSound管理.nバッファの数 );\r
+ }\r
+ else\r
+ {\r
+ this.Seek( this.nHandle, (uint) num );\r
+ for( int i = 0; i < CSound管理.nバッファの数; i++ )\r
+ {\r
+ this.tデコーダの現在の読み出し位置から1バッファ分のPCMを指定されたバッファに書き込む( this.Buffer, i, this.bループする );\r
+ }\r
+ this.n現在書き込み許可待ちのバッファ番号 = 0;\r
+ this.Buffer.CurrentPlayPosition = 0;\r
+ }\r
+ }\r
+ else if( ( num >= 0 ) || ( num < this.nサウンドバッファサイズ ) )\r
+ {\r
+ this.Buffer.CurrentPlayPosition = num;\r
+ }\r
+ }\r
+ }\r
+ public void t再生中の処理をする()\r
+ {\r
+ if( ( this.bストリーム再生する && ( this.Buffer != null ) ) && ( this.b再生中 && ( this.n一時停止回数 <= 0 ) ) )\r
+ {\r
+ int num2 = this.Buffer.CurrentPlayPosition / this.by中継バッファ.Length;\r
+ int num3 = num2 - CSound管理.nキープする再生済みバッファの数;\r
+ if( this.n現在書き込み許可待ちのバッファ番号 < num2 )\r
+ {\r
+ while( this.n現在書き込み許可待ちのバッファ番号 < num3 )\r
+ {\r
+ this.tデコーダの現在の読み出し位置から1バッファ分のPCMを指定されたバッファに書き込む( this.Buffer, this.n現在書き込み許可待ちのバッファ番号, this.bループする );\r
+ this.n現在書き込み許可待ちのバッファ番号++;\r
+ }\r
+ }\r
+ else if( this.n現在書き込み許可待ちのバッファ番号 > num2 )\r
+ {\r
+ num3 = ( num3 + CSound管理.nバッファの数 ) % CSound管理.nバッファの数;\r
+ if( this.n現在書き込み許可待ちのバッファ番号 < num3 )\r
+ {\r
+ while( this.n現在書き込み許可待ちのバッファ番号 < num3 )\r
+ {\r
+ this.tデコーダの現在の読み出し位置から1バッファ分のPCMを指定されたバッファに書き込む( this.Buffer, this.n現在書き込み許可待ちのバッファ番号, this.bループする );\r
+ this.n現在書き込み許可待ちのバッファ番号++;\r
+ }\r
+ }\r
+ else if( this.n現在書き込み許可待ちのバッファ番号 > num3 )\r
+ {\r
+ while( this.n現在書き込み許可待ちのバッファ番号 < CSound管理.nバッファの数 )\r
+ {\r
+ this.tデコーダの現在の読み出し位置から1バッファ分のPCMを指定されたバッファに書き込む( this.Buffer, this.n現在書き込み許可待ちのバッファ番号, this.bループする );\r
+ this.n現在書き込み許可待ちのバッファ番号++;\r
+ }\r
+ this.n現在書き込み許可待ちのバッファ番号 = 0;\r
+ while( this.n現在書き込み許可待ちのバッファ番号 < num3 )\r
+ {\r
+ this.tデコーダの現在の読み出し位置から1バッファ分のPCMを指定されたバッファに書き込む( this.Buffer, this.n現在書き込み許可待ちのバッファ番号, this.bループする );\r
+ this.n現在書き込み許可待ちのバッファ番号++;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ public int t時刻から位置を返す( long n時刻 )\r
+ {\r
+ double num = ( n時刻 * this.db再生速度 ) * this.db周波数倍率;\r
+ return (int) ( ( num * 0.001 ) * this.Buffer.Format.SamplesPerSecond );\r
+ }\r
+\r
+ #region [ IDisposable 実装 ]\r
+ //-----------------\r
+ public void Dispose()\r
+ {\r
+ if( !this.bDispose完了済み )\r
+ {\r
+ if( this.Buffer != null )\r
+ {\r
+ this.Buffer.Stop();\r
+ this.Buffer.Dispose();\r
+ this.Buffer = null;\r
+ }\r
+ if( this.gch中継バッファ.IsAllocated )\r
+ {\r
+ this.gch中継バッファ.Free();\r
+ }\r
+ if( this.by中継バッファ != null )\r
+ {\r
+ this.by中継バッファ = null;\r
+ }\r
+ if( this.nHandle >= 0 )\r
+ {\r
+ this.Close( this.nHandle );\r
+ }\r
+ this.bDispose完了済み = true;\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+\r
+\r
+\r
+ // (2) 以下は各子クラスごとに実装する\r
+\r
+ protected virtual int Open( string filename )\r
+ {\r
+ throw new NotImplementedException();\r
+ }\r
+ protected virtual int GetFormat( int nHandle, ref CWin32.WAVEFORMATEX wfx )\r
+ {\r
+ throw new NotImplementedException();\r
+ }\r
+ protected virtual uint GetTotalPCMSize( int nHandle )\r
+ {\r
+ throw new NotImplementedException();\r
+ }\r
+ protected virtual int Seek( int nHandle, uint dwPosition )\r
+ {\r
+ throw new NotImplementedException();\r
+ }\r
+ protected virtual int Decode( int nHandle, IntPtr pDest, uint szDestSize, int bLoop )\r
+ {\r
+ throw new NotImplementedException();\r
+ }\r
+ protected virtual void Close( int nHandle )\r
+ {\r
+ throw new NotImplementedException();\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private double _db再生速度 = 1.0;\r
+ private double _db周波数倍率 = 1.0;\r
+ private int _n位置;\r
+ private int _n位置db;\r
+ private int _n音量 = 100;\r
+ private int _n音量db;\r
+ private bool bDispose完了済み;\r
+ private byte[] by中継バッファ;\r
+ private GCHandle gch中継バッファ;\r
+ private int nHandle = -1;\r
+ private int n一時停止位置byte;\r
+ private int n一時停止回数;\r
+ private int n現在のPCM側の位置byte;\r
+ private int n現在書き込み許可待ちのバッファ番号;\r
+\r
+ private void tストリーム再生位置リセット()\r
+ {\r
+ if( this.nHandle != -1 )\r
+ {\r
+ this.Seek( this.nHandle, 0 );\r
+ this.n現在のPCM側の位置byte = 0;\r
+ }\r
+ }\r
+ private void tデコーダの現在の読み出し位置から1バッファ分のPCMを指定されたバッファに書き込む( SecondarySoundBuffer buffer, int n書込先バッファ番号, bool bPCMの末尾に達したら先頭に戻る )\r
+ {\r
+ if( !this.bDispose完了済み && ( this.nHandle >= 0 ) )\r
+ {\r
+ this.Decode( this.nHandle, Marshal.UnsafeAddrOfPinnedArrayElement( this.by中継バッファ, 0 ), (uint) this.by中継バッファ.Length, bPCMの末尾に達したら先頭に戻る ? 1 : 0 );\r
+ this.n現在のPCM側の位置byte += this.by中継バッファ.Length;\r
+ if( bPCMの末尾に達したら先頭に戻る )\r
+ {\r
+ this.n現在のPCM側の位置byte = (int) ( this.n現在のPCM側の位置byte % this.GetTotalPCMSize( this.nHandle ) );\r
+ }\r
+ this.Buffer.Write( this.by中継バッファ, n書込先バッファ番号 * this.by中継バッファ.Length, LockFlags.None );\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+\r
+namespace FDK\r
+{\r
+ public class CSoundMp3 : CSound\r
+ {\r
+ // CSound 実装\r
+\r
+ protected override int Open( string filename )\r
+ {\r
+ return mp3Open( filename );\r
+ }\r
+ protected override int GetFormat( int nHandle, ref CWin32.WAVEFORMATEX wfx )\r
+ {\r
+ return mp3GetFormat( nHandle, ref wfx );\r
+ }\r
+ protected override uint GetTotalPCMSize( int nHandle )\r
+ {\r
+ return mp3GetTotalPCMSize( nHandle );\r
+ }\r
+ protected override int Seek( int nHandle, uint dwPosition )\r
+ {\r
+ return mp3Seek( nHandle, dwPosition );\r
+ }\r
+ protected override int Decode( int nHandle, IntPtr pDest, uint szDestSize, int bLoop )\r
+ {\r
+ return mp3Decode( nHandle, pDest, szDestSize, bLoop );\r
+ }\r
+ protected override void Close( int nHandle )\r
+ {\r
+ mp3Close( nHandle );\r
+ }\r
+\r
+ #region [ SoundDecoder.dll インポート(mp3 関連)]\r
+ //-----------------\r
+ [DllImport( "SoundDecoder.dll" )]\r
+ private static extern void mp3Close( int nHandle );\r
+ [DllImport( "SoundDecoder.dll" )]\r
+ private static extern int mp3Decode( int nHandle, IntPtr pDest, uint szDestSize, int bLoop );\r
+ [DllImport( "SoundDecoder.dll" )]\r
+ private static extern int mp3GetFormat( int nHandle, ref CWin32.WAVEFORMATEX wfx );\r
+ [DllImport( "SoundDecoder.dll" )]\r
+ private static extern uint mp3GetTotalPCMSize( int nHandle );\r
+ [DllImport( "SoundDecoder.dll" )]\r
+ private static extern int mp3Open( string fileName );\r
+ [DllImport( "SoundDecoder.dll" )]\r
+ private static extern int mp3Seek( int nHandle, uint dwPosition );\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+\r
+namespace FDK\r
+{\r
+ public class CSoundOggVorbis : CSound\r
+ {\r
+ // CSound 実装\r
+\r
+ protected override int Open( string filename )\r
+ {\r
+ return oggOpen( filename );\r
+ }\r
+ protected override int GetFormat( int nHandle, ref CWin32.WAVEFORMATEX wfx )\r
+ {\r
+ return oggGetFormat( nHandle, ref wfx );\r
+ }\r
+ protected override uint GetTotalPCMSize( int nHandle )\r
+ {\r
+ return oggGetTotalPCMSize( nHandle );\r
+ }\r
+ protected override int Seek( int nHandle, uint dwPosition )\r
+ {\r
+ return oggSeek( nHandle, dwPosition );\r
+ }\r
+ protected override int Decode( int nHandle, IntPtr pDest, uint szDestSize, int bLoop )\r
+ {\r
+ return oggDecode( nHandle, pDest, szDestSize, bLoop );\r
+ }\r
+ protected override void Close( int nHandle )\r
+ {\r
+ oggClose( nHandle );\r
+ }\r
+\r
+ #region [ SoundDecoder.dll インポート(ogg 関連)]\r
+ //-----------------\r
+ [DllImport( "SoundDecoder.dll" )]\r
+ private static extern void oggClose( int nHandle );\r
+ [DllImport( "SoundDecoder.dll" )]\r
+ private static extern int oggDecode( int nHandle, IntPtr pDest, uint szDestSize, int bLoop );\r
+ [DllImport( "SoundDecoder.dll" )]\r
+ private static extern int oggGetFormat( int nHandle, ref CWin32.WAVEFORMATEX wfx );\r
+ [DllImport( "SoundDecoder.dll" )]\r
+ private static extern uint oggGetTotalPCMSize( int nHandle );\r
+ [DllImport( "SoundDecoder.dll" )]\r
+ private static extern int oggOpen( string fileName );\r
+ [DllImport( "SoundDecoder.dll" )]\r
+ private static extern int oggSeek( int nHandle, uint dwPosition );\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+\r
+namespace FDK\r
+{\r
+ public class CSoundRiffWave : CSound\r
+ {\r
+ // CSound 実装\r
+\r
+ protected override int Open( string filename )\r
+ {\r
+ return riffOpen( filename );\r
+ }\r
+ protected override int GetFormat( int nHandle, ref CWin32.WAVEFORMATEX wfx )\r
+ {\r
+ return riffGetFormat( nHandle, ref wfx );\r
+ }\r
+ protected override uint GetTotalPCMSize( int nHandle )\r
+ {\r
+ return riffGetTotalPCMSize( nHandle );\r
+ }\r
+ protected override int Seek( int nHandle, uint dwPosition )\r
+ {\r
+ return riffSeek( nHandle, dwPosition );\r
+ }\r
+ protected override int Decode( int nHandle, IntPtr pDest, uint szDestSize, int bLoop )\r
+ {\r
+ return riffDecode( nHandle, pDest, szDestSize, bLoop );\r
+ }\r
+ protected override void Close( int nHandle )\r
+ {\r
+ riffClose( nHandle );\r
+ }\r
+\r
+ #region [ SoundDecoder.dll インポート(RiffWave 関連)]\r
+ //-----------------\r
+ [DllImport( "SoundDecoder.dll" )]\r
+ private static extern void riffClose( int nHandle );\r
+ [DllImport( "SoundDecoder.dll" )]\r
+ private static extern int riffDecode( int nHandle, IntPtr pDest, uint szDestSize, int bLoop );\r
+ [DllImport( "SoundDecoder.dll" )]\r
+ private static extern int riffGetFormat( int nHandle, ref CWin32.WAVEFORMATEX wfx );\r
+ [DllImport( "SoundDecoder.dll" )]\r
+ private static extern uint riffGetTotalPCMSize( int nHandle );\r
+ [DllImport( "SoundDecoder.dll" )]\r
+ private static extern int riffOpen( string fileName );\r
+ [DllImport( "SoundDecoder.dll" )]\r
+ private static extern int riffSeek( int nHandle, uint dwPosition );\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+\r
+namespace FDK\r
+{\r
+ public class CSoundXA : CSound\r
+ {\r
+ // CSound 実装\r
+\r
+ protected override int Open( string filename )\r
+ {\r
+ return xaOpen( filename );\r
+ }\r
+ protected override int GetFormat( int nHandle, ref CWin32.WAVEFORMATEX wfx )\r
+ {\r
+ return xaGetFormat( nHandle, ref wfx );\r
+ }\r
+ protected override uint GetTotalPCMSize( int nHandle )\r
+ {\r
+ return xaGetTotalPCMSize( nHandle );\r
+ }\r
+ protected override int Seek( int nHandle, uint dwPosition )\r
+ {\r
+ return xaSeek( nHandle, dwPosition );\r
+ }\r
+ protected override int Decode( int nHandle, IntPtr pDest, uint szDestSize, int bLoop )\r
+ {\r
+ return xaDecode( nHandle, pDest, szDestSize, bLoop );\r
+ }\r
+ protected override void Close( int nHandle )\r
+ {\r
+ xaClose( nHandle );\r
+ }\r
+\r
+ #region [ SoundDecoder.dll インポート(XA 関連)]\r
+ //-----------------\r
+ [DllImport( "SoundDecoder.dll" )]\r
+ private static extern void xaClose( int nHandle );\r
+ [DllImport( "SoundDecoder.dll" )]\r
+ private static extern int xaDecode( int nHandle, IntPtr pDest, uint szDestSize, int bLoop );\r
+ [DllImport( "SoundDecoder.dll" )]\r
+ private static extern int xaGetFormat( int nHandle, ref CWin32.WAVEFORMATEX wfx );\r
+ [DllImport( "SoundDecoder.dll" )]\r
+ private static extern uint xaGetTotalPCMSize( int nHandle );\r
+ [DllImport( "SoundDecoder.dll" )]\r
+ private static extern int xaOpen( string fileName );\r
+ [DllImport( "SoundDecoder.dll" )]\r
+ private static extern int xaSeek( int nHandle, uint dwPosition );\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Diagnostics;\r
+using System.IO;\r
+using SlimDX;\r
+using SlimDX.DirectSound;\r
+\r
+namespace FDK\r
+{\r
+ public class CSound管理 : IDisposable\r
+ {\r
+ // 定数\r
+\r
+ public static int nキープする再生済みバッファの数 = ( nバッファの数 / 3 );\r
+ public static int nバッファサイズ = 0x1000;\r
+ public static int nバッファの数 = 0x20;\r
+ public static int n最大オンメモリ可能サイズ = 0x300000;\r
+\r
+\r
+ // プロパティ\r
+\r
+ public DirectSound Device { get; private set; }\r
+ public int n登録サウンド数\r
+ {\r
+ get\r
+ {\r
+ if( this.listSound == null )\r
+ {\r
+ return 0;\r
+ }\r
+ return this.listSound.Count;\r
+ }\r
+ }\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public CSound管理( IntPtr hWnd )\r
+ {\r
+ try\r
+ {\r
+ this.Device = new SlimDX.DirectSound.DirectSound();\r
+ Trace.TraceInformation( "MaxHardwareMixing: AllBuffers={0}, StaticBuffers={1}, StreamingBuffers={2}", new object[] { this.Device.Capabilities.MaxHardwareMixingAllBuffers, this.Device.Capabilities.MaxHardwareMixingStaticBuffers, this.Device.Capabilities.MaxHardwareMixingStreamingBuffers } );\r
+ Trace.TraceInformation( "FreeHardwareMixing: AllBuffers={0}, StaticBuffers={1}, StreamingBuffers={2}", new object[] { this.Device.Capabilities.FreeHardwareMixingAllBuffers, this.Device.Capabilities.FreeHardwareMixingStaticBuffers, this.Device.Capabilities.FreeHardwareMixingStreamingBuffers } );\r
+ Trace.TraceInformation( "FreeHardwareMemory: {0}", new object[] { this.Device.Capabilities.FreeHardwareMemory } );\r
+ Trace.TraceInformation( "MaxContiguousFreeHardwareMemoryBytes: {0}", new object[] { this.Device.Capabilities.MaxContiguousFreeHardwareMemoryBytes } );\r
+ Trace.TraceInformation( "SecondarySampleRate: {0} - {1} Hz", new object[] { this.Device.Capabilities.MinSecondarySampleRate, this.Device.Capabilities.MaxSecondarySampleRate } );\r
+ Trace.TraceInformation( "PlayCpuOverheadSoftwareBuffers: {0}", new object[] { this.Device.Capabilities.PlayCpuOverheadSoftwareBuffers } );\r
+ Trace.TraceInformation( "PrimaryBuffers: {0}", new object[] { this.Device.Capabilities.PrimaryBuffers } );\r
+ Trace.TraceInformation( "Primary 8Bit:{0}, 16Bit:{1}, Mono:{2}, Stereo:{3}", new object[] { this.Device.Capabilities.Primary8Bit ? "supported" : "not supported", this.Device.Capabilities.Primary16Bit ? "supported" : "not supported", this.Device.Capabilities.PrimaryMono ? "supported" : "not supported", this.Device.Capabilities.PrimaryStereo ? "supported" : "not supported" } );\r
+ Trace.TraceInformation( "Secondary 8Bit:{0}, 16Bit:{1}, Mono:{2}, Stereo:{3}", new object[] { this.Device.Capabilities.Secondary8Bit ? "supported" : "not supported", this.Device.Capabilities.Secondary16Bit ? "supported" : "not supported", this.Device.Capabilities.SecondaryMono ? "supported" : "not supported", this.Device.Capabilities.SecondaryStereo ? "supported" : "not supported" } );\r
+ Trace.TraceInformation( "TotalHardwareMemory: {0}", new object[] { this.Device.Capabilities.TotalHardwareMemory } );\r
+ Trace.TraceInformation( "UnlockTransferRateHardwareBuffers: {0}", new object[] { this.Device.Capabilities.UnlockTransferRateHardwareBuffers } );\r
+ }\r
+ catch( DirectSoundException exception )\r
+ {\r
+ Trace.TraceError( exception.Message );\r
+ Trace.TraceError( "DirectSound デバイスの作成に失敗しました。" );\r
+ this.Device = null;\r
+ return;\r
+ }\r
+ try\r
+ {\r
+ this.Device.SetCooperativeLevel( hWnd, CooperativeLevel.Priority );\r
+ Trace.TraceInformation( " DirectSound デバイスの協調レベルを Priority に設定しました。" );\r
+ }\r
+ catch( DirectSoundException )\r
+ {\r
+ try\r
+ {\r
+ this.Device.SetCooperativeLevel( hWnd, CooperativeLevel.Normal );\r
+ Trace.TraceInformation( " DirectSound デバイスの協調レベルを Normal に設定しました。" );\r
+ }\r
+ catch( DirectSoundException )\r
+ {\r
+ this.Dispose();\r
+ Trace.TraceError( " DirectSound デバイスの協調レベルの設定に失敗しました。" );\r
+ }\r
+ }\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ public CSound tサウンドを生成する( string strファイル名 )\r
+ {\r
+ if( string.IsNullOrEmpty( strファイル名 ) || !File.Exists( strファイル名 ) )\r
+ throw new ArgumentException( "ファイル名が無効です。" );\r
+\r
+ CSound item = null;\r
+ if( ( ( ( item = this.tネイティブOggVorbisの場合( strファイル名 ) ) == null ) && ( ( item = this.tネイティブXAの場合( strファイル名 ) ) == null ) ) && ( ( ( item = this.tネイティブmp3の場合( strファイル名 ) ) == null ) && ( ( item = this.tRIFF_WAVEの場合( strファイル名 ) ) == null ) ) )\r
+ throw new Exception( "OggVorbis, mp3, XA, RIFF ACM のいずれでもデコードに失敗しました。" );\r
+\r
+ lock( this.obj排他用 )\r
+ {\r
+ this.listSound.Add( item );\r
+ }\r
+ return item;\r
+ }\r
+ public void t再生中の処理をする()\r
+ {\r
+ lock( this.obj排他用 )\r
+ {\r
+ foreach( CSound sound in this.listSound )\r
+ {\r
+ if( sound.b再生中 && sound.bストリーム再生する )\r
+ {\r
+ sound.t再生中の処理をする();\r
+ }\r
+ }\r
+ }\r
+ }\r
+ public void tサウンドを破棄する( CSound sound )\r
+ {\r
+ lock( this.obj排他用 )\r
+ {\r
+ if( sound != null )\r
+ {\r
+ sound.Dispose();\r
+ this.listSound.Remove( sound );\r
+ }\r
+ }\r
+ }\r
+\r
+ #region [ IDisposable 実装 ]\r
+ //-----------------\r
+ public void Dispose()\r
+ {\r
+ if( !this.bDisposed )\r
+ {\r
+ foreach( CSound sound in this.listSound )\r
+ {\r
+ sound.Dispose();\r
+ }\r
+ this.listSound.Clear();\r
+ if( this.Device != null )\r
+ {\r
+ this.Device.Dispose();\r
+ this.Device = null;\r
+ }\r
+\r
+ this.bDisposed = true;\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private object obj排他用 = new object();\r
+ private bool bDisposed = false;\r
+ private List<CSound> listSound = new List<CSound>();\r
+\r
+ private CSound tネイティブmp3の場合( string strファイル名 )\r
+ {\r
+ CSoundMp3 mp = new CSoundMp3();\r
+ int num = mp.tデコード後のサイズを調べる( strファイル名 );\r
+ if( num < 0 )\r
+ {\r
+ mp.Dispose();\r
+ mp = null;\r
+ return null;\r
+ }\r
+ if( num < n最大オンメモリ可能サイズ )\r
+ {\r
+ mp.tオンメモリ方式で作成する( this.Device, strファイル名 );\r
+ return mp;\r
+ }\r
+ mp.tストリーム方式で作成する( this.Device, strファイル名 );\r
+ return mp;\r
+ }\r
+ private CSound tネイティブOggVorbisの場合( string strファイル名 )\r
+ {\r
+ CSoundOggVorbis vorbis = new CSoundOggVorbis();\r
+ int num = vorbis.tデコード後のサイズを調べる( strファイル名 );\r
+ if( num < 0 )\r
+ {\r
+ vorbis.Dispose();\r
+ vorbis = null;\r
+ return null;\r
+ }\r
+ if( num < n最大オンメモリ可能サイズ )\r
+ {\r
+ vorbis.tオンメモリ方式で作成する( this.Device, strファイル名 );\r
+ return vorbis;\r
+ }\r
+ vorbis.tストリーム方式で作成する( this.Device, strファイル名 );\r
+ return vorbis;\r
+ }\r
+ private CSound tネイティブXAの場合( string strファイル名 )\r
+ {\r
+ CSoundXA dxa = new CSoundXA();\r
+ int num = dxa.tデコード後のサイズを調べる( strファイル名 );\r
+ if( num < 0 )\r
+ {\r
+ dxa.Dispose();\r
+ dxa = null;\r
+ return null;\r
+ }\r
+ if( num < n最大オンメモリ可能サイズ )\r
+ {\r
+ dxa.tオンメモリ方式で作成する( this.Device, strファイル名 );\r
+ return dxa;\r
+ }\r
+ dxa.tストリーム方式で作成する( this.Device, strファイル名 );\r
+ return dxa;\r
+ }\r
+ private CSound tRIFF_WAVEの場合( string strファイル名 )\r
+ {\r
+ CSoundRiffWave wave = new CSoundRiffWave();\r
+ int num = wave.tデコード後のサイズを調べる( strファイル名 );\r
+ if( num < 0 )\r
+ {\r
+ wave.Dispose();\r
+ wave = null;\r
+ return null;\r
+ }\r
+ if( num < n最大オンメモリ可能サイズ )\r
+ {\r
+ wave.tオンメモリ方式で作成する( this.Device, strファイル名 );\r
+ return wave;\r
+ }\r
+ wave.tストリーム方式で作成する( this.Device, strファイル名 );\r
+ return wave;\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using System.Drawing;\r
+using System.IO;\r
+\r
+namespace FDK\r
+{\r
+ public static class BitmapUtil\r
+ {\r
+ // 定数\r
+\r
+ public const uint DIB_PAL_COLORS = 1;\r
+ public const uint DIB_RGB_COLORS = 0;\r
+\r
+\r
+ // 構造体\r
+\r
+ [StructLayout( LayoutKind.Sequential, Pack = 1 )]\r
+ public struct BITMAPFILEHEADER\r
+ {\r
+ public ushort bfType;\r
+ public uint bfSize;\r
+ public ushort bfReserved1;\r
+ public ushort bfReserved2;\r
+ public uint bfOffBits;\r
+ }\r
+\r
+ [StructLayout( LayoutKind.Sequential, Pack = 1 )]\r
+ public struct BITMAPINFOHEADER\r
+ {\r
+ public const int BI_RGB = 0;\r
+ public uint biSize構造体のサイズ;\r
+ public int biWidthビットマップの幅dot;\r
+ public int biHeightビットマップの高さdot;\r
+ public ushort biPlanes面の数;\r
+ public ushort biBitCount;\r
+ public uint biCompression圧縮形式;\r
+ public uint biSizeImage画像イメージのサイズ;\r
+ public int biXPelsPerMete水平方向の解像度;\r
+ public int biYPelsPerMeter垂直方向の解像度;\r
+ public uint biClrUsed色テーブルのインデックス数;\r
+ public uint biClrImportant表示に必要な色インデックスの数;\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ public static unsafe Bitmap ToBitmap( IntPtr pBITMAPINFOHEADER )\r
+ {\r
+ BITMAPFILEHEADER bitmapfileheader;\r
+ BITMAPINFOHEADER* bitmapinfoheaderPtr = (BITMAPINFOHEADER*) pBITMAPINFOHEADER;\r
+ bitmapfileheader.bfType = 0x4d42;\r
+ bitmapfileheader.bfOffBits = (uint) ( sizeof( BITMAPFILEHEADER ) + sizeof( BITMAPINFOHEADER ) );\r
+ bitmapfileheader.bfSize = bitmapfileheader.bfOffBits + bitmapinfoheaderPtr->biSizeImage画像イメージのサイズ;\r
+ MemoryStream output = new MemoryStream();\r
+ BinaryWriter writer = new BinaryWriter( output );\r
+ byte[] destination = new byte[ sizeof( BITMAPFILEHEADER ) ];\r
+ Marshal.Copy( (IntPtr) ( &bitmapfileheader ), destination, 0, destination.Length );\r
+ writer.Write( destination );\r
+ destination = new byte[ sizeof( BITMAPINFOHEADER ) ];\r
+ Marshal.Copy( pBITMAPINFOHEADER, destination, 0, destination.Length );\r
+ writer.Write( destination );\r
+ destination = new byte[ bitmapinfoheaderPtr->biSizeImage画像イメージのサイズ ];\r
+ bitmapinfoheaderPtr++;\r
+ Marshal.Copy( (IntPtr) bitmapinfoheaderPtr, destination, 0, destination.Length );\r
+ writer.Write( destination );\r
+ writer.Flush();\r
+ writer.BaseStream.Position = 0L;\r
+ return new Bitmap( writer.BaseStream );\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using System.Drawing;\r
+using SlimDX;\r
+\r
+namespace FDK\r
+{\r
+ public class CAvi : IDisposable\r
+ {\r
+ // プロパティ\r
+\r
+ public uint dwスケール \r
+ {\r
+ get;\r
+ set; \r
+ }\r
+ public uint dwレート\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+ public uint nフレーム高さ\r
+ { \r
+ get;\r
+ set;\r
+ }\r
+ public uint nフレーム幅\r
+ {\r
+ get;\r
+ set; \r
+ }\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public CAvi( string filename )\r
+ {\r
+ if( AVIFileOpen( out this.aviFile, filename, OpenFileFlags.OF_READ, IntPtr.Zero ) != 0 )\r
+ {\r
+ this.Release();\r
+ throw new Exception( "AVIFileOpen failed." );\r
+ }\r
+ if( AVIFileGetStream( this.aviFile, out this.aviStream, streamtypeVIDEO, 0 ) != 0 )\r
+ {\r
+ this.Release();\r
+ throw new Exception( "AVIFileGetStream failed." );\r
+ }\r
+ AVISTREAMINFO psi = new AVISTREAMINFO();\r
+ AVIStreamInfo( this.aviStream, ref psi, Marshal.SizeOf( psi ) );\r
+ this.dwレート = psi.dwRate;\r
+ this.dwスケール = psi.dwScale;\r
+ this.nフレーム幅 = psi.rcFrame.right - psi.rcFrame.left;\r
+ this.nフレーム高さ = psi.rcFrame.bottom - psi.rcFrame.top;\r
+ try\r
+ {\r
+ this.frame = AVIStreamGetFrameOpen( this.aviStream, 0 );\r
+ }\r
+ catch\r
+ {\r
+ this.Release();\r
+ throw new Exception( "AVIStreamGetFrameOpen failed." );\r
+ }\r
+ }\r
+\r
+ \r
+ // メソッド\r
+\r
+ public static void t初期化()\r
+ {\r
+ AVIFileInit();\r
+ }\r
+ public static void t終了()\r
+ {\r
+ AVIFileExit();\r
+ }\r
+ \r
+ public Bitmap GetFrame( int no )\r
+ {\r
+ if( this.aviStream == IntPtr.Zero )\r
+ {\r
+ throw new InvalidOperationException();\r
+ }\r
+ return BitmapUtil.ToBitmap( AVIStreamGetFrame( this.frame, no ) );\r
+ }\r
+ public int GetFrameNoFromTime( int time )\r
+ {\r
+ return (int) ( time * ( ( (double) this.dwレート ) / ( 1000.0 * this.dwスケール ) ) );\r
+ }\r
+ public IntPtr GetFramePtr( int no )\r
+ {\r
+ if( this.aviStream == IntPtr.Zero )\r
+ {\r
+ throw new InvalidOperationException();\r
+ }\r
+ return AVIStreamGetFrame( this.frame, no );\r
+ }\r
+ public int GetMaxFrameCount()\r
+ {\r
+ if( this.aviStream == IntPtr.Zero )\r
+ {\r
+ throw new InvalidOperationException();\r
+ }\r
+ return AVIStreamLength( this.aviStream );\r
+ }\r
+ \r
+ public unsafe void tBitmap24ToGraphicsStreamR5G6B5( BitmapUtil.BITMAPINFOHEADER* pBITMAPINFOHEADER, DataStream gs, int nWidth, int nHeight )\r
+ {\r
+ int num = pBITMAPINFOHEADER->biWidthビットマップの幅dot;\r
+ int num2 = pBITMAPINFOHEADER->biHeightビットマップの高さdot;\r
+ int num3 = ( num * 3 ) + ( ( 4 - ( ( num * 3 ) % 4 ) ) % 4 );\r
+ ushort* numPtr = (ushort*) gs.DataPointer.ToPointer();\r
+ byte* numPtr2 = (byte*) ( pBITMAPINFOHEADER + 1 );\r
+ for( int i = 0; i < num2; i++ )\r
+ {\r
+ if( i >= nHeight )\r
+ {\r
+ return;\r
+ }\r
+ for( int j = 0; j < num; j++ )\r
+ {\r
+ if( j >= nWidth )\r
+ {\r
+ break;\r
+ }\r
+ ushort num6 = (ushort) ( ( ( numPtr2 + ( ( ( num2 - i ) - 1 ) * num3 ) )[ j * 3 ] >> 3 ) & 0x1f );\r
+ ushort num5 = (ushort) ( ( ( ( numPtr2 + ( ( ( num2 - i ) - 1 ) * num3 ) ) + ( j * 3 ) )[ 1 ] >> 2 ) & 0x3f );\r
+ ushort num4 = (ushort) ( ( ( ( numPtr2 + ( ( ( num2 - i ) - 1 ) * num3 ) ) + ( j * 3 ) )[ 2 ] >> 3 ) & 0x1f );\r
+ ( numPtr + ( i * nWidth ) )[ j ] = (ushort) ( ( ( num4 << 11 ) | ( num5 << 5 ) ) | num6 );\r
+ }\r
+ }\r
+ }\r
+ public unsafe void tBitmap24ToGraphicsStreamX8R8G8B8( BitmapUtil.BITMAPINFOHEADER* pBITMAPINFOHEADER, DataStream ds, int nWidth, int nHeight )\r
+ {\r
+ int num = pBITMAPINFOHEADER->biWidthビットマップの幅dot;\r
+ int num2 = pBITMAPINFOHEADER->biHeightビットマップの高さdot;\r
+ int num3 = ( num * 3 ) + ( ( 4 - ( ( num * 3 ) % 4 ) ) % 4 );\r
+ uint* numPtr = (uint*) ds.DataPointer.ToPointer();\r
+ byte* numPtr2 = (byte*) ( pBITMAPINFOHEADER + 1 );\r
+ for( int i = 0; i < num2; i++ )\r
+ {\r
+ if( i >= nHeight )\r
+ {\r
+ return;\r
+ }\r
+ for( int j = 0; j < num; j++ )\r
+ {\r
+ if( j >= nWidth )\r
+ {\r
+ break;\r
+ }\r
+ uint num6 = ( numPtr2 + ( ( ( num2 - i ) - 1 ) * num3 ) )[ j * 3 ];\r
+ uint num5 = ( ( numPtr2 + ( ( ( num2 - i ) - 1 ) * num3 ) ) + ( j * 3 ) )[ 1 ];\r
+ uint num4 = ( ( numPtr2 + ( ( ( num2 - i ) - 1 ) * num3 ) ) + ( j * 3 ) )[ 2 ];\r
+ ( numPtr + ( i * nWidth ) )[ j ] = ( ( num4 << 0x10 ) | ( num5 << 8 ) ) | num6;\r
+ }\r
+ }\r
+ }\r
+\r
+ #region [ IDisposable+α 実装 ]\r
+ //-----------------\r
+ public void Dispose()\r
+ {\r
+ this.Dispose( true );\r
+ }\r
+ protected void Dispose( bool disposeManagedObjects )\r
+ {\r
+ if( !this.bDispose完了済み )\r
+ {\r
+ if( this.frame != IntPtr.Zero )\r
+ {\r
+ AVIStreamGetFrameClose( this.frame );\r
+ }\r
+ this.Release();\r
+ this.bDispose完了済み = true;\r
+ }\r
+ }\r
+ ~CAvi()\r
+ {\r
+ this.Dispose( false );\r
+ }\r
+ //-----------------\r
+ #endregion\r
+\r
+\r
+ // その他\r
+\r
+ #region [ Win32 AVI関連関数インポート ]\r
+ //-----------------\r
+ internal enum OpenFileFlags : uint\r
+ {\r
+ OF_CANCEL = 0x800,\r
+ OF_CREATE = 0x1000,\r
+ OF_DELETE = 0x200,\r
+ OF_EXIST = 0x4000,\r
+ OF_PARSE = 0x100,\r
+ OF_PROMPT = 0x2000,\r
+ OF_READ = 0,\r
+ OF_READWRITE = 2,\r
+ OF_REOPEN = 0x8000,\r
+ OF_SHARE_COMPAT = 0,\r
+ OF_SHARE_DENY_NONE = 0x40,\r
+ OF_SHARE_DENY_READ = 0x30,\r
+ OF_SHARE_DENY_WRITE = 0x20,\r
+ OF_SHARE_EXCLUSIVE = 0x10,\r
+ OF_VERIFY = 0x400,\r
+ OF_WRITE = 1\r
+ }\r
+\r
+ [StructLayout( LayoutKind.Sequential, Pack = 1 )]\r
+ internal struct AVISTREAMINFO\r
+ {\r
+ public uint fccType;\r
+ public uint fccHandler;\r
+ public uint dwFlags;\r
+ public uint dwCaps;\r
+ public ushort wPriority;\r
+ public ushort wLanguage;\r
+ public uint dwScale;\r
+ public uint dwRate;\r
+ public uint dwStart;\r
+ public uint dwLength;\r
+ public uint dwInitialFrames;\r
+ public uint dwSuggestedBufferSize;\r
+ public uint dwQuality;\r
+ public uint dwSampleSize;\r
+ public CAvi.RECT rcFrame;\r
+ public uint dwEditCount;\r
+ public uint dwFormatChangeCount;\r
+ [MarshalAs( UnmanagedType.ByValArray, SizeConst = 0x40 )]\r
+ public ushort[] szName;\r
+ }\r
+\r
+ [StructLayout( LayoutKind.Sequential, Pack = 1 )]\r
+ internal struct RECT\r
+ {\r
+ public uint left;\r
+ public uint top;\r
+ public uint right;\r
+ public uint bottom;\r
+ }\r
+\r
+ [DllImport( "AVIFIL32" )]\r
+ private static extern void AVIFileExit();\r
+ [DllImport( "AVIFIL32" )]\r
+ private static extern uint AVIFileGetStream( IntPtr pfile, out IntPtr ppavi, uint fccType, int lParam );\r
+ [DllImport( "AVIFIL32" )]\r
+ private static extern void AVIFileInit();\r
+ [DllImport( "AVIFIL32" )]\r
+ private static extern uint AVIFileOpen( out IntPtr ppfile, string szFile, OpenFileFlags mode, IntPtr pclsidHandler );\r
+ [DllImport( "AVIFIL32" )]\r
+ private static extern int AVIFileRelease( IntPtr pfile );\r
+ [DllImport( "AVIFIL32" )]\r
+ private static extern IntPtr AVIStreamGetFrame( IntPtr pgf, int lPos );\r
+ [DllImport( "AVIFIL32" )]\r
+ private static extern uint AVIStreamGetFrameClose( IntPtr pget );\r
+ [DllImport( "AVIFIL32" )]\r
+ private static extern IntPtr AVIStreamGetFrameOpen( IntPtr pavi, int lpbiWanted );\r
+ [DllImport( "AVIFIL32" )]\r
+ private static extern int AVIStreamInfo( IntPtr pavi, ref AVISTREAMINFO psi, int lSize );\r
+ [DllImport( "AVIFIL32" )]\r
+ private static extern int AVIStreamLength( IntPtr pavi );\r
+ [DllImport( "AVIFIL32" )]\r
+ private static extern int AVIStreamRelease( IntPtr pavi );\r
+ //-----------------\r
+ #endregion\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private IntPtr aviFile = IntPtr.Zero;\r
+ private const string AVIFILE32 = "AVIFIL32";\r
+ private const int AVIGETFRAMEF_BESTDISPLAYFMT = 1;\r
+ private IntPtr aviStream = IntPtr.Zero;\r
+ private bool bDispose完了済み;\r
+ private IntPtr frame = IntPtr.Zero;\r
+ private static readonly uint streamtypeAUDIO = mmioFOURCC( 'a', 'u', 'd', 's' );\r
+ private static readonly uint streamtypeMIDI = mmioFOURCC( 'm', 'i', 'd', 's' );\r
+ private static readonly uint streamtypeTEXT = mmioFOURCC( 't', 'x', 't', 's' );\r
+ private static readonly uint streamtypeVIDEO = mmioFOURCC( 'v', 'i', 'd', 's' );\r
+\r
+ private static uint mmioFOURCC( char c0, char c1, char c2, char c3 )\r
+ {\r
+ return ( ( ( ( (uint) c3 << 0x18 ) | ( (uint) c2 << 0x10 ) ) | ( (uint) c1 << 8 ) ) | (uint) c0 );\r
+ }\r
+ private void Release()\r
+ {\r
+ if( this.aviStream != IntPtr.Zero )\r
+ {\r
+ AVIStreamRelease( this.aviStream );\r
+ this.aviStream = IntPtr.Zero;\r
+ }\r
+ if( this.aviFile != IntPtr.Zero )\r
+ {\r
+ AVIFileRelease( this.aviFile );\r
+ this.aviFile = IntPtr.Zero;\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Drawing;\r
+using System.Drawing.Imaging;\r
+using System.IO;\r
+using SlimDX;\r
+using SlimDX.Direct3D9;\r
+\r
+namespace FDK\r
+{\r
+ public class CTexture : IDisposable\r
+ {\r
+ // プロパティ\r
+\r
+ public bool b加算合成\r
+ {\r
+ get;\r
+ set; \r
+ }\r
+ public float fZ軸中心回転\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+ public int n透明度\r
+ {\r
+ get\r
+ {\r
+ return this._透明度;\r
+ }\r
+ set\r
+ {\r
+ if( value < 0 )\r
+ {\r
+ this._透明度 = 0;\r
+ }\r
+ else if( value > 0xff )\r
+ {\r
+ this._透明度 = 0xff;\r
+ }\r
+ else\r
+ {\r
+ this._透明度 = value;\r
+ }\r
+ }\r
+ }\r
+ public Size szテクスチャサイズ\r
+ {\r
+ get; \r
+ private set;\r
+ }\r
+ public Size sz画像サイズ\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+ public Texture texture\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+ public Vector3 vc拡大縮小倍率;\r
+\r
+\r
+ // コンストラクタ\r
+\r
+ public CTexture()\r
+ {\r
+ this.sz画像サイズ = new Size( 0, 0 );\r
+ this.szテクスチャサイズ = new Size( 0, 0 );\r
+ this._透明度 = 0xff;\r
+ this.texture = null;\r
+ this.vbPositionColoredVertexBuffer = null;\r
+ this.cvPositionColoredVertexies = null;\r
+ this.b加算合成 = false;\r
+ this.fZ軸中心回転 = 0f;\r
+ this.vc拡大縮小倍率 = new Vector3( 1f, 1f, 1f );\r
+ }\r
+ \r
+ /// <summary>\r
+ /// <para>指定されたビットマップオブジェクトから Managed テクスチャを作成する。</para>\r
+ /// <para>テクスチャのサイズは、BITMAP画像のサイズ以上、かつ、D3D9デバイスで生成可能な最小のサイズに自動的に調節される。\r
+ /// その際、テクスチャの調節後のサイズにあわせた画像の拡大縮小は行わない。</para>\r
+ /// <para>その他、ミップマップ数は 1、Usage は None、Pool は Managed、イメージフィルタは Point、ミップマップフィルタは\r
+ /// None、カラーキーは 0xFFFFFFFF(完全なる黒を透過)になる。</para>\r
+ /// </summary>\r
+ /// <param name="device">Direct3D9 デバイス。</param>\r
+ /// <param name="bitmap">作成元のビットマップ。</param>\r
+ /// <param name="format">テクスチャのフォーマット。</param>\r
+ /// <exception cref="CTextureCreateFailedException">テクスチャの作成に失敗しました。</exception>\r
+ public CTexture( Device device, Bitmap bitmap, Format format )\r
+ : this()\r
+ {\r
+ try\r
+ {\r
+ this.sz画像サイズ = new Size( bitmap.Width, bitmap.Height );\r
+ this.szテクスチャサイズ = this.t指定されたサイズを超えない最適なテクスチャサイズを返す( device, this.sz画像サイズ );\r
+ using( MemoryStream stream = new MemoryStream() )\r
+ {\r
+ bitmap.Save( stream, ImageFormat.Bmp );\r
+ stream.Seek( 0L, SeekOrigin.Begin );\r
+ int colorKey = 0;\r
+ colorKey = -16777216;\r
+ this.texture = Texture.FromStream( device, stream, this.szテクスチャサイズ.Width, this.szテクスチャサイズ.Height, 1, Usage.None, format, Pool.Managed, Filter.Point, Filter.None, colorKey );\r
+ }\r
+ this.t頂点バッファの作成( device );\r
+ }\r
+ catch\r
+ {\r
+ this.Dispose();\r
+ throw new CTextureCreateFailedException( "ビットマップからのテクスチャの生成に失敗しました。" );\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// <para>空の Managed テクスチャを作成する。</para>\r
+ /// <para>テクスチャのサイズは、指定された希望サイズ以上、かつ、D3D9デバイスで生成可能な最小のサイズに自動的に調節される。\r
+ /// その際、テクスチャの調節後のサイズにあわせた画像の拡大縮小は行わない。</para>\r
+ /// <para>テクスチャのテクセルデータは未初期化。(おそらくゴミデータが入ったまま。)</para>\r
+ /// <para>その他、ミップマップ数は 1、Usage は None、イメージフィルタは Point、ミップマップフィルタは None、\r
+ /// カラーキーは 0x00000000(透過しない)になる。</para>\r
+ /// </summary>\r
+ /// <param name="device">Direct3D9 デバイス。</param>\r
+ /// <param name="n幅">テクスチャの幅(希望値)。</param>\r
+ /// <param name="n高さ">テクスチャの高さ(希望値)。</param>\r
+ /// <param name="format">テクスチャのフォーマット。</param>\r
+ /// <exception cref="CTextureCreateFailedException">テクスチャの作成に失敗しました。</exception>\r
+ public CTexture( Device device, int n幅, int n高さ, Format format )\r
+ : this( device, n幅, n高さ, format, Pool.Managed )\r
+ {\r
+ }\r
+ \r
+ /// <summary>\r
+ /// <para>指定された画像ファイルから Managed テクスチャを作成する。</para>\r
+ /// <para>利用可能な画像形式は、BMP, JPG, PNG, TGA, DDS, PPM, DIB, HDR, PFM のいずれか。</para>\r
+ /// </summary>\r
+ /// <param name="device">Direct3D9 デバイス。</param>\r
+ /// <param name="strファイル名">画像ファイル名。</param>\r
+ /// <param name="format">テクスチャのフォーマット。</param>\r
+ /// <param name="b黒を透過する">画像の黒(0xFFFFFFFF)を透過させるなら true。</param>\r
+ /// <exception cref="CTextureCreateFailedException">テクスチャの作成に失敗しました。</exception>\r
+ public CTexture( Device device, string strファイル名, Format format, bool b黒を透過する )\r
+ : this( device, strファイル名, format, b黒を透過する, Pool.Managed )\r
+ {\r
+ }\r
+ \r
+ /// <summary>\r
+ /// <para>空のテクスチャを作成する。</para>\r
+ /// <para>テクスチャのサイズは、指定された希望サイズ以上、かつ、D3D9デバイスで生成可能な最小のサイズに自動的に調節される。\r
+ /// その際、テクスチャの調節後のサイズにあわせた画像の拡大縮小は行わない。</para>\r
+ /// <para>テクスチャのテクセルデータは未初期化。(おそらくゴミデータが入ったまま。)</para>\r
+ /// <para>その他、ミップマップ数は 1、Usage は None、イメージフィルタは Point、ミップマップフィルタは None、\r
+ /// カラーキーは 0x00000000(透過しない)になる。</para>\r
+ /// </summary>\r
+ /// <param name="device">Direct3D9 デバイス。</param>\r
+ /// <param name="n幅">テクスチャの幅(希望値)。</param>\r
+ /// <param name="n高さ">テクスチャの高さ(希望値)。</param>\r
+ /// <param name="format">テクスチャのフォーマット。</param>\r
+ /// <param name="pool">テクスチャの管理方法。</param>\r
+ /// <exception cref="CTextureCreateFailedException">テクスチャの作成に失敗しました。</exception>\r
+ public CTexture( Device device, int n幅, int n高さ, Format format, Pool pool )\r
+ : this()\r
+ {\r
+ try\r
+ {\r
+ this.sz画像サイズ = new Size( n幅, n高さ );\r
+ this.szテクスチャサイズ = this.t指定されたサイズを超えない最適なテクスチャサイズを返す( device, this.sz画像サイズ );\r
+ using( Bitmap bitmap = new Bitmap( 1, 1 ) )\r
+ {\r
+ using( Graphics graphics = Graphics.FromImage( bitmap ) )\r
+ {\r
+ graphics.FillRectangle( Brushes.Black, 0, 0, 1, 1 );\r
+ }\r
+ using( MemoryStream stream = new MemoryStream() )\r
+ {\r
+ bitmap.Save( stream, ImageFormat.Bmp );\r
+ stream.Seek( 0L, SeekOrigin.Begin );\r
+ this.texture = Texture.FromStream( device, stream, n幅, n高さ, 1, Usage.None, format, pool, Filter.Point, Filter.None, 0 );\r
+ }\r
+ }\r
+ this.t頂点バッファの作成( device );\r
+ }\r
+ catch\r
+ {\r
+ this.Dispose();\r
+ throw new CTextureCreateFailedException( string.Format( "テクスチャの生成に失敗しました。\n({0}x{1}, {2})", n幅, n高さ, format ) );\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// <para>画像ファイルからテクスチャを生成する。</para>\r
+ /// <para>利用可能な画像形式は、BMP, JPG, PNG, TGA, DDS, PPM, DIB, HDR, PFM のいずれか。</para>\r
+ /// <para>テクスチャのサイズは、画像のサイズ以上、かつ、D3D9デバイスで生成可能な最小のサイズに自動的に調節される。\r
+ /// その際、テクスチャの調節後のサイズにあわせた画像の拡大縮小は行わない。</para>\r
+ /// <para>その他、ミップマップ数は 1、Usage は None、イメージフィルタは Point、ミップマップフィルタは None になる。</para>\r
+ /// </summary>\r
+ /// <param name="device">Direct3D9 デバイス。</param>\r
+ /// <param name="strファイル名">画像ファイル名。</param>\r
+ /// <param name="format">テクスチャのフォーマット。</param>\r
+ /// <param name="b黒を透過する">画像の黒(0xFFFFFFFF)を透過させるなら true。</param>\r
+ /// <param name="pool">テクスチャの管理方法。</param>\r
+ /// <exception cref="CTextureCreateFailedException">テクスチャの作成に失敗しました。</exception>\r
+ public CTexture( Device device, string strファイル名, Format format, bool b黒を透過する, Pool pool )\r
+ : this()\r
+ {\r
+ try\r
+ {\r
+ ImageInformation information = ImageInformation.FromFile( strファイル名 );\r
+ this.sz画像サイズ = new Size( information.Width, information.Height );\r
+ this.szテクスチャサイズ = this.t指定されたサイズを超えない最適なテクスチャサイズを返す( device, this.sz画像サイズ );\r
+ this.texture = Texture.FromFile( device, strファイル名, this.sz画像サイズ.Width, this.sz画像サイズ.Height, 1, Usage.None, format, pool, Filter.Point, Filter.None, b黒を透過する ? -16777216 : 0 );\r
+ this.t頂点バッファの作成( device );\r
+ }\r
+ catch\r
+ {\r
+ this.Dispose();\r
+ throw new CTextureCreateFailedException( string.Format( "テクスチャの生成に失敗しました。\n{0}", strファイル名 ) );\r
+ }\r
+ }\r
+\r
+\r
+ // メソッド\r
+\r
+ /// <summary>\r
+ /// テクスチャを 2D 画像と見なして描画する。\r
+ /// </summary>\r
+ /// <param name="device">Direct3D9 デバイス。</param>\r
+ /// <param name="x">描画位置(テクスチャの左上位置の X 座標[dot])。</param>\r
+ /// <param name="y">描画位置(テクスチャの左上位置の Y 座標[dot])。</param>\r
+ public void t2D描画( Device device, int x, int y )\r
+ {\r
+ this.t2D描画( device, x, y, new Rectangle( 0, 0, this.sz画像サイズ.Width, this.sz画像サイズ.Height ) );\r
+ }\r
+ public void t2D描画( Device device, int x, int y, Rectangle rc画像内の描画領域 )\r
+ {\r
+ this.t2D描画( device, x, y, 1f, rc画像内の描画領域 );\r
+ }\r
+ public void t2D描画( Device device, int x, int y, float depth, Rectangle rc画像内の描画領域 )\r
+ {\r
+ if( this.texture != null )\r
+ {\r
+ this.tレンダリングステートの設定( device );\r
+ if( this.fZ軸中心回転 == 0f )\r
+ {\r
+ float num = -0.5f;\r
+ float num2 = -0.5f;\r
+ float width = rc画像内の描画領域.Width;\r
+ float height = rc画像内の描画領域.Height;\r
+ float num5 = ( (float) rc画像内の描画領域.Left ) / ( (float) this.szテクスチャサイズ.Width );\r
+ float num6 = ( (float) rc画像内の描画領域.Right ) / ( (float) this.szテクスチャサイズ.Width );\r
+ float num7 = ( (float) rc画像内の描画領域.Top ) / ( (float) this.szテクスチャサイズ.Height );\r
+ float num8 = ( (float) rc画像内の描画領域.Bottom ) / ( (float) this.szテクスチャサイズ.Height );\r
+ int num9 = new Color4( ( (float) this._透明度 ) / 255f, 1f, 1f, 1f ).ToArgb();\r
+ if( this.cvTransformedColoredVertexies == null )\r
+ {\r
+ this.cvTransformedColoredVertexies = new TransformedColoredTexturedVertex[ 4 ];\r
+ }\r
+ this.cvTransformedColoredVertexies[ 0 ].Position = new Vector4( x + num, y + num2, depth, 1f );\r
+ this.cvTransformedColoredVertexies[ 0 ].Color = num9;\r
+ this.cvTransformedColoredVertexies[ 0 ].TextureCoordinates = new Vector2( num5, num7 );\r
+ this.cvTransformedColoredVertexies[ 1 ].Position = new Vector4( ( x + ( width * this.vc拡大縮小倍率.X ) ) + num, y + num2, depth, 1f );\r
+ this.cvTransformedColoredVertexies[ 1 ].Color = num9;\r
+ this.cvTransformedColoredVertexies[ 1 ].TextureCoordinates = new Vector2( num6, num7 );\r
+ this.cvTransformedColoredVertexies[ 2 ].Position = new Vector4( x + num, ( y + ( height * this.vc拡大縮小倍率.Y ) ) + num2, depth, 1f );\r
+ this.cvTransformedColoredVertexies[ 2 ].Color = num9;\r
+ this.cvTransformedColoredVertexies[ 2 ].TextureCoordinates = new Vector2( num5, num8 );\r
+ this.cvTransformedColoredVertexies[ 3 ].Position = new Vector4( ( x + ( width * this.vc拡大縮小倍率.X ) ) + num, ( y + ( height * this.vc拡大縮小倍率.Y ) ) + num2, depth, 1f );\r
+ this.cvTransformedColoredVertexies[ 3 ].Color = num9;\r
+ this.cvTransformedColoredVertexies[ 3 ].TextureCoordinates = new Vector2( num6, num8 );\r
+ device.SetTexture( 0, this.texture );\r
+ device.VertexFormat = TransformedColoredTexturedVertex.Format;\r
+ device.DrawUserPrimitives<TransformedColoredTexturedVertex>( PrimitiveType.TriangleStrip, 0, 2, this.cvTransformedColoredVertexies );\r
+ }\r
+ else\r
+ {\r
+ float num10 = ( ( rc画像内の描画領域.Width % 2 ) == 0 ) ? -0.5f : 0f;\r
+ float num11 = ( ( rc画像内の描画領域.Height % 2 ) == 0 ) ? -0.5f : 0f;\r
+ float num12 = ( (float) rc画像内の描画領域.Width ) / 2f;\r
+ float num13 = ( (float) rc画像内の描画領域.Height ) / 2f;\r
+ int num1 = rc画像内の描画領域.Width;\r
+ int num21 = rc画像内の描画領域.Height;\r
+ float num14 = ( (float) rc画像内の描画領域.Left ) / ( (float) this.szテクスチャサイズ.Width );\r
+ float num15 = ( (float) rc画像内の描画領域.Right ) / ( (float) this.szテクスチャサイズ.Width );\r
+ float num16 = ( (float) rc画像内の描画領域.Top ) / ( (float) this.szテクスチャサイズ.Height );\r
+ float num17 = ( (float) rc画像内の描画領域.Bottom ) / ( (float) this.szテクスチャサイズ.Height );\r
+ int num18 = new Color4( ( (float) this._透明度 ) / 255f, 1f, 1f, 1f ).ToArgb();\r
+ if( this.cvPositionColoredVertexies == null )\r
+ {\r
+ this.cvPositionColoredVertexies = new PositionColoredTexturedVertex[ 4 ];\r
+ }\r
+ this.cvPositionColoredVertexies[ 0 ].Position = new Vector3( -num12 + num10, num13 + num11, depth );\r
+ this.cvPositionColoredVertexies[ 0 ].Color = num18;\r
+ this.cvPositionColoredVertexies[ 0 ].TextureCoordinates = new Vector2( num14, num16 );\r
+ this.cvPositionColoredVertexies[ 1 ].Position = new Vector3( num12 + num10, num13 + num11, depth );\r
+ this.cvPositionColoredVertexies[ 1 ].Color = num18;\r
+ this.cvPositionColoredVertexies[ 1 ].TextureCoordinates = new Vector2( num15, num16 );\r
+ this.cvPositionColoredVertexies[ 2 ].Position = new Vector3( -num12 + num10, -num13 + num11, depth );\r
+ this.cvPositionColoredVertexies[ 2 ].Color = num18;\r
+ this.cvPositionColoredVertexies[ 2 ].TextureCoordinates = new Vector2( num14, num17 );\r
+ this.cvPositionColoredVertexies[ 3 ].Position = new Vector3( num12 + num10, -num13 + num11, depth );\r
+ this.cvPositionColoredVertexies[ 3 ].Color = num18;\r
+ this.cvPositionColoredVertexies[ 3 ].TextureCoordinates = new Vector2( num15, num17 );\r
+ using( DataStream stream = this.vbPositionColoredVertexBuffer.Lock( 0, 0, LockFlags.None ) )\r
+ {\r
+ stream.WriteRange<PositionColoredTexturedVertex>( this.cvPositionColoredVertexies );\r
+ this.vbPositionColoredVertexBuffer.Unlock();\r
+ }\r
+ int num19 = x + ( rc画像内の描画領域.Width / 2 );\r
+ int num20 = y + ( rc画像内の描画領域.Height / 2 );\r
+ Vector3 amount = new Vector3( num19 - ( ( (float) device.Viewport.Width ) / 2f ), -( num20 - ( ( (float) device.Viewport.Height ) / 2f ) ), 0f );\r
+ Matrix matrix = Matrix.Identity * Matrix.Scaling( this.vc拡大縮小倍率 );\r
+ matrix *= Matrix.RotationZ( this.fZ軸中心回転 );\r
+ matrix *= Matrix.Translation( amount );\r
+ device.SetTransform( TransformState.World, matrix );\r
+ device.SetTexture( 0, this.texture );\r
+ device.SetStreamSource( 0, this.vbPositionColoredVertexBuffer, 0, PositionColoredTexturedVertex.SizeInBytes );\r
+ device.VertexFormat = PositionColoredTexturedVertex.Format;\r
+ device.DrawPrimitives( PrimitiveType.TriangleStrip, 0, 2 );\r
+ }\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// テクスチャを 3D 画像と見なして描画する。\r
+ /// </summary>\r
+ public void t3D描画( Device device, Matrix mat )\r
+ {\r
+ this.t3D描画( device, mat, new Rectangle( 0, 0, this.sz画像サイズ.Width, this.sz画像サイズ.Height ) );\r
+ }\r
+ public void t3D描画( Device device, Matrix mat, Rectangle rc画像内の描画領域 )\r
+ {\r
+ if( this.texture != null )\r
+ {\r
+ float x = ( (float) rc画像内の描画領域.Width ) / 2f;\r
+ float y = ( (float) rc画像内の描画領域.Height ) / 2f;\r
+ int width = rc画像内の描画領域.Width;\r
+ int height = rc画像内の描画領域.Height;\r
+ float num3 = ( (float) rc画像内の描画領域.Left ) / ( (float) this.szテクスチャサイズ.Width );\r
+ float num4 = ( (float) rc画像内の描画領域.Right ) / ( (float) this.szテクスチャサイズ.Width );\r
+ float num5 = ( (float) rc画像内の描画領域.Top ) / ( (float) this.szテクスチャサイズ.Height );\r
+ float num6 = ( (float) rc画像内の描画領域.Bottom ) / ( (float) this.szテクスチャサイズ.Height );\r
+ int num7 = new Color4( ( (float) this._透明度 ) / 255f, 1f, 1f, 1f ).ToArgb();\r
+ if( this.cvPositionColoredVertexies == null )\r
+ {\r
+ this.cvPositionColoredVertexies = new PositionColoredTexturedVertex[ 4 ];\r
+ }\r
+ float z = 0f;\r
+ this.cvPositionColoredVertexies[ 0 ].Position = new Vector3( -x, y, z );\r
+ this.cvPositionColoredVertexies[ 0 ].Color = num7;\r
+ this.cvPositionColoredVertexies[ 0 ].TextureCoordinates = new Vector2( num3, num5 );\r
+ this.cvPositionColoredVertexies[ 1 ].Position = new Vector3( x, y, z );\r
+ this.cvPositionColoredVertexies[ 1 ].Color = num7;\r
+ this.cvPositionColoredVertexies[ 1 ].TextureCoordinates = new Vector2( num4, num5 );\r
+ this.cvPositionColoredVertexies[ 2 ].Position = new Vector3( -x, -y, z );\r
+ this.cvPositionColoredVertexies[ 2 ].Color = num7;\r
+ this.cvPositionColoredVertexies[ 2 ].TextureCoordinates = new Vector2( num3, num6 );\r
+ this.cvPositionColoredVertexies[ 3 ].Position = new Vector3( x, -y, z );\r
+ this.cvPositionColoredVertexies[ 3 ].Color = num7;\r
+ this.cvPositionColoredVertexies[ 3 ].TextureCoordinates = new Vector2( num4, num6 );\r
+ using( DataStream stream = this.vbPositionColoredVertexBuffer.Lock( 0, 0, LockFlags.None ) )\r
+ {\r
+ stream.WriteRange<PositionColoredTexturedVertex>( this.cvPositionColoredVertexies );\r
+ this.vbPositionColoredVertexBuffer.Unlock();\r
+ }\r
+ this.tレンダリングステートの設定( device );\r
+ device.SetTransform( TransformState.World, mat );\r
+ device.SetTexture( 0, this.texture );\r
+ device.SetStreamSource( 0, this.vbPositionColoredVertexBuffer, 0, PositionColoredTexturedVertex.SizeInBytes );\r
+ device.VertexFormat = PositionColoredTexturedVertex.Format;\r
+ device.DrawPrimitives( PrimitiveType.TriangleStrip, 0, 2 );\r
+ }\r
+ }\r
+\r
+ #region [ IDosposable 実装 ]\r
+ //-----------------\r
+ public void Dispose()\r
+ {\r
+ if( !this.bDispose完了済み )\r
+ {\r
+ // テクスチャの破棄\r
+ if( this.texture != null )\r
+ {\r
+ this.texture.Dispose();\r
+ this.texture = null;\r
+ }\r
+\r
+ // 頂点バッファの破棄\r
+ if( this.vbPositionColoredVertexBuffer != null )\r
+ {\r
+ this.vbPositionColoredVertexBuffer.Dispose();\r
+ this.vbPositionColoredVertexBuffer = null;\r
+ }\r
+ this.bDispose完了済み = true;\r
+ }\r
+ }\r
+ //-----------------\r
+ #endregion\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private int _透明度;\r
+ private bool bDispose完了済み;\r
+ private PositionColoredTexturedVertex[] cvPositionColoredVertexies;\r
+ private TransformedColoredTexturedVertex[] cvTransformedColoredVertexies;\r
+ private VertexBuffer vbPositionColoredVertexBuffer;\r
+\r
+ private void tレンダリングステートの設定( Device device )\r
+ {\r
+ if( this.b加算合成 )\r
+ {\r
+ device.SetRenderState( RenderState.AlphaBlendEnable, true );\r
+ device.SetRenderState( RenderState.SourceBlend, 5 );\r
+ device.SetRenderState( RenderState.DestinationBlend, 2 );\r
+ }\r
+ else\r
+ {\r
+ device.SetRenderState( RenderState.AlphaBlendEnable, true );\r
+ device.SetRenderState( RenderState.SourceBlend, 5 );\r
+ device.SetRenderState( RenderState.DestinationBlend, 6 );\r
+ }\r
+ }\r
+ private Size t指定されたサイズを超えない最適なテクスチャサイズを返す( Device device, Size sz指定サイズ )\r
+ {\r
+ bool flag = ( device.Capabilities.TextureCaps & TextureCaps.NonPow2Conditional ) != 0;\r
+ bool flag2 = ( device.Capabilities.TextureCaps & TextureCaps.Pow2 ) != 0;\r
+ bool flag3 = ( device.Capabilities.TextureCaps & TextureCaps.SquareOnly ) != 0;\r
+ int maxTextureWidth = device.Capabilities.MaxTextureWidth;\r
+ int maxTextureHeight = device.Capabilities.MaxTextureHeight;\r
+ Size size = new Size( sz指定サイズ.Width, sz指定サイズ.Height );\r
+ if( flag2 && !flag )\r
+ {\r
+ int num3 = 1;\r
+ do\r
+ {\r
+ num3 *= 2;\r
+ }\r
+ while( num3 <= sz指定サイズ.Width );\r
+ sz指定サイズ.Width = num3;\r
+ num3 = 1;\r
+ do\r
+ {\r
+ num3 *= 2;\r
+ }\r
+ while( num3 <= sz指定サイズ.Height );\r
+ sz指定サイズ.Height = num3;\r
+ }\r
+ if( sz指定サイズ.Width > maxTextureWidth )\r
+ {\r
+ sz指定サイズ.Width = maxTextureWidth;\r
+ }\r
+ if( sz指定サイズ.Height > maxTextureHeight )\r
+ {\r
+ sz指定サイズ.Height = maxTextureHeight;\r
+ }\r
+ if( flag3 )\r
+ {\r
+ if( size.Width > size.Height )\r
+ {\r
+ size.Height = size.Width;\r
+ return size;\r
+ }\r
+ if( size.Width < size.Height )\r
+ {\r
+ size.Width = size.Height;\r
+ }\r
+ }\r
+ return size;\r
+ }\r
+ private void t頂点バッファの作成( Device device )\r
+ {\r
+ this.vbPositionColoredVertexBuffer = new VertexBuffer( device, 4 * PositionColoredTexturedVertex.SizeInBytes, Usage.WriteOnly, VertexFormat.None, Pool.Managed );\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.Serialization;\r
+\r
+namespace FDK\r
+{\r
+ /// <summary>\r
+ /// テクスチャの作成に失敗しました。\r
+ /// </summary>\r
+ public class CTextureCreateFailedException : Exception\r
+ {\r
+ public CTextureCreateFailedException()\r
+ {\r
+ }\r
+ public CTextureCreateFailedException( string message )\r
+ : base( message )\r
+ {\r
+ }\r
+ public CTextureCreateFailedException( SerializationInfo info, StreamingContext context )\r
+ : base( info, context )\r
+ {\r
+ }\r
+ public CTextureCreateFailedException( string message, Exception innerException )\r
+ : base( message, innerException )\r
+ {\r
+ }\r
+ }\r
+}\r
--- /dev/null
+/*\r
+* Copyright (c) 2007-2010 SlimDX Group\r
+* \r
+* Permission is hereby granted, free of charge, to any person obtaining a copy\r
+* of this software and associated documentation files (the "Software"), to deal\r
+* in the Software without restriction, including without limitation the rights\r
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+* copies of the Software, and to permit persons to whom the Software is\r
+* furnished to do so, subject to the following conditions:\r
+* \r
+* The above copyright notice and this permission notice shall be included in\r
+* all copies or substantial portions of the Software.\r
+* \r
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+* THE SOFTWARE.\r
+*/\r
+\r
+using System;\r
+using System.Globalization;\r
+using System.Runtime.InteropServices;\r
+\r
+using SlimDX;\r
+\r
+namespace FDK {\r
+ /// <summary>\r
+ /// Represents a vertex with a position and a color.\r
+ /// </summary>\r
+ [StructLayout(LayoutKind.Sequential)]\r
+ public struct ColoredVertex : IEquatable<ColoredVertex> {\r
+ /// <summary>\r
+ /// Gets or sets the position of the vertex.\r
+ /// </summary>\r
+ public Vector3 Position {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the color of the vertex.\r
+ /// </summary>\r
+ public int Color {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="ColoredVertex"/> struct.\r
+ /// </summary>\r
+ /// <param name="position">The position.</param>\r
+ /// <param name="color">The color.</param>\r
+ public ColoredVertex(Vector3 position, int color)\r
+ : this() {\r
+ Position = position;\r
+ Color = color;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Implements operator ==.\r
+ /// </summary>\r
+ /// <param name="left">The left.</param>\r
+ /// <param name="right">The right.</param>\r
+ /// <returns>The result of the operator.</returns>\r
+ public static bool operator ==(ColoredVertex left, ColoredVertex right) {\r
+ return left.Equals(right);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Implements operator !=.\r
+ /// </summary>\r
+ /// <param name="left">The left side of the operator.</param>\r
+ /// <param name="right">The right side of the operator.</param>\r
+ /// <returns>The result of the operator.</returns>\r
+ public static bool operator !=(ColoredVertex left, ColoredVertex right) {\r
+ return !(left == right);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Returns the hash code for this instance.\r
+ /// </summary>\r
+ /// <returns>\r
+ /// A 32-bit signed integer that is the hash code for this instance.\r
+ /// </returns>\r
+ public override int GetHashCode() {\r
+ return Position.GetHashCode() + Color.GetHashCode();\r
+ }\r
+\r
+ /// <summary>\r
+ /// Indicates whether this instance and a specified object are equal.\r
+ /// </summary>\r
+ /// <param name="obj">Another object to compare to.</param>\r
+ /// <returns>\r
+ /// true if <paramref name="obj"/> and this instance are the same type and represent the same value; otherwise, false.\r
+ /// </returns>\r
+ public override bool Equals(object obj) {\r
+ if (obj == null)\r
+ return false;\r
+\r
+ if (GetType() != obj.GetType())\r
+ return false;\r
+\r
+ return Equals((ColoredVertex)obj);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Indicates whether the current object is equal to another object of the same type.\r
+ /// </summary>\r
+ /// <param name="other">An object to compare with this object.</param>\r
+ /// <returns>\r
+ /// true if the current object is equal to the <paramref name="other"/> parameter; otherwise, false.\r
+ /// </returns>\r
+ public bool Equals(ColoredVertex other) {\r
+ return (Position == other.Position && Color == other.Color);\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using System.Globalization;\r
+using SlimDX;\r
+using SlimDX.Direct3D9;\r
+\r
+namespace FDK\r
+{\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ public struct PositionColoredTexturedVertex : IEquatable<PositionColoredTexturedVertex>\r
+ {\r
+ public Vector3 Position { get; set; }\r
+ public int Color { get; set; }\r
+ public Vector2 TextureCoordinates { get; set; }\r
+\r
+ public static int SizeInBytes\r
+ {\r
+ get\r
+ {\r
+ return Marshal.SizeOf( typeof( PositionColoredTexturedVertex ) );\r
+ }\r
+ }\r
+ public static VertexFormat Format\r
+ {\r
+ get\r
+ {\r
+ return ( VertexFormat.Texture1 | VertexFormat.Diffuse | VertexFormat.Position );\r
+ }\r
+ }\r
+ public PositionColoredTexturedVertex( Vector3 position, int color, Vector2 textureCoordinates )\r
+ {\r
+ this = new PositionColoredTexturedVertex();\r
+ this.Position = position;\r
+ this.Color = color;\r
+ this.TextureCoordinates = textureCoordinates;\r
+ }\r
+\r
+ public static bool operator ==( PositionColoredTexturedVertex left, PositionColoredTexturedVertex right )\r
+ {\r
+ return left.Equals( right );\r
+ }\r
+ public static bool operator !=( PositionColoredTexturedVertex left, PositionColoredTexturedVertex right )\r
+ {\r
+ return !( left == right );\r
+ }\r
+ public override int GetHashCode()\r
+ {\r
+ return ( ( this.Position.GetHashCode() + this.Color.GetHashCode() ) + this.TextureCoordinates.GetHashCode() );\r
+ }\r
+ public override bool Equals( object obj )\r
+ {\r
+ if( obj == null )\r
+ {\r
+ return false;\r
+ }\r
+ if( base.GetType() != obj.GetType() )\r
+ {\r
+ return false;\r
+ }\r
+ return this.Equals( (PositionColoredTexturedVertex) obj );\r
+ }\r
+ public bool Equals( PositionColoredTexturedVertex other )\r
+ {\r
+ return ( ( ( this.Position == other.Position ) && ( this.Color == other.Color ) ) && ( this.TextureCoordinates == other.TextureCoordinates ) );\r
+ }\r
+ public override string ToString()\r
+ {\r
+ return string.Format( CultureInfo.CurrentCulture, "{0} ({1}, {2})", new object[] { this.Position.ToString(), System.Drawing.Color.FromArgb( this.Color ).ToString(), this.TextureCoordinates.ToString() } );\r
+ }\r
+ }\r
+}\r
--- /dev/null
+/*\r
+* Copyright (c) 2007-2010 SlimDX Group\r
+* \r
+* Permission is hereby granted, free of charge, to any person obtaining a copy\r
+* of this software and associated documentation files (the "Software"), to deal\r
+* in the Software without restriction, including without limitation the rights\r
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+* copies of the Software, and to permit persons to whom the Software is\r
+* furnished to do so, subject to the following conditions:\r
+* \r
+* The above copyright notice and this permission notice shall be included in\r
+* all copies or substantial portions of the Software.\r
+* \r
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+* THE SOFTWARE.\r
+*/\r
+\r
+using System;\r
+using System.Globalization;\r
+using System.Runtime.InteropServices;\r
+\r
+using SlimDX;\r
+\r
+namespace FDK {\r
+ /// <summary>\r
+ /// Represents a vertex with a position and a texture coordinate.\r
+ /// </summary>\r
+ [StructLayout(LayoutKind.Sequential)]\r
+ public struct TexturedVertex : IEquatable<TexturedVertex> {\r
+ /// <summary>\r
+ /// Gets or sets the position of the vertex.\r
+ /// </summary>\r
+ public Vector3 Position {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the texture coordinate for the vertex.\r
+ /// </summary>\r
+ public Vector2 TextureCoordinate {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="TexturedVertex"/> struct.\r
+ /// </summary>\r
+ /// <param name="position">The position.</param>\r
+ /// <param name="color">The color.</param>\r
+ public TexturedVertex(Vector3 position, Vector2 textureCoordinate)\r
+ : this() {\r
+ Position = position;\r
+ TextureCoordinate = textureCoordinate;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Implements operator ==.\r
+ /// </summary>\r
+ /// <param name="left">The left.</param>\r
+ /// <param name="right">The right.</param>\r
+ /// <returns>The result of the operator.</returns>\r
+ public static bool operator ==(TexturedVertex left, TexturedVertex right) {\r
+ return left.Equals(right);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Implements operator !=.\r
+ /// </summary>\r
+ /// <param name="left">The left side of the operator.</param>\r
+ /// <param name="right">The right side of the operator.</param>\r
+ /// <returns>The result of the operator.</returns>\r
+ public static bool operator !=(TexturedVertex left, TexturedVertex right) {\r
+ return !(left == right);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Returns the hash code for this instance.\r
+ /// </summary>\r
+ /// <returns>\r
+ /// A 32-bit signed integer that is the hash code for this instance.\r
+ /// </returns>\r
+ public override int GetHashCode() {\r
+ return Position.GetHashCode() + TextureCoordinate.GetHashCode();\r
+ }\r
+\r
+ /// <summary>\r
+ /// Indicates whether this instance and a specified object are equal.\r
+ /// </summary>\r
+ /// <param name="obj">Another object to compare to.</param>\r
+ /// <returns>\r
+ /// true if <paramref name="obj"/> and this instance are the same type and represent the same value; otherwise, false.\r
+ /// </returns>\r
+ public override bool Equals(object obj) {\r
+ if (obj == null)\r
+ return false;\r
+\r
+ if (GetType() != obj.GetType())\r
+ return false;\r
+\r
+ return Equals((TexturedVertex)obj);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Indicates whether the current object is equal to another object of the same type.\r
+ /// </summary>\r
+ /// <param name="other">An object to compare with this object.</param>\r
+ /// <returns>\r
+ /// true if the current object is equal to the <paramref name="other"/> parameter; otherwise, false.\r
+ /// </returns>\r
+ public bool Equals(TexturedVertex other) {\r
+ return (Position == other.Position && TextureCoordinate == other.TextureCoordinate);\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using System.Globalization;\r
+using SlimDX;\r
+using SlimDX.Direct3D9;\r
+\r
+namespace FDK\r
+{\r
+ [StructLayout( LayoutKind.Sequential )]\r
+ public struct TransformedColoredTexturedVertex : IEquatable<TransformedColoredTexturedVertex>\r
+ {\r
+ public Vector4 Position { get; set; }\r
+ public int Color { get; set; }\r
+ public Vector2 TextureCoordinates { get; set; }\r
+\r
+ public static int SizeInBytes\r
+ {\r
+ get\r
+ {\r
+ return Marshal.SizeOf( typeof( TransformedColoredTexturedVertex ) );\r
+ }\r
+ }\r
+ public static VertexFormat Format\r
+ {\r
+ get\r
+ {\r
+ return ( VertexFormat.Texture1 | VertexFormat.Diffuse | VertexFormat.PositionRhw );\r
+ }\r
+ }\r
+ public TransformedColoredTexturedVertex( Vector4 position, int color, Vector2 textureCoordinates )\r
+ {\r
+ this = new TransformedColoredTexturedVertex();\r
+ this.Position = position;\r
+ this.Color = color;\r
+ this.TextureCoordinates = textureCoordinates;\r
+ }\r
+\r
+ public static bool operator ==( TransformedColoredTexturedVertex left, TransformedColoredTexturedVertex right )\r
+ {\r
+ return left.Equals( right );\r
+ }\r
+ public static bool operator !=( TransformedColoredTexturedVertex left, TransformedColoredTexturedVertex right )\r
+ {\r
+ return !( left == right );\r
+ }\r
+ public override int GetHashCode()\r
+ {\r
+ return ( ( this.Position.GetHashCode() + this.Color.GetHashCode() ) + this.TextureCoordinates.GetHashCode() );\r
+ }\r
+ public override bool Equals( object obj )\r
+ {\r
+ if( obj == null )\r
+ {\r
+ return false;\r
+ }\r
+ if( base.GetType() != obj.GetType() )\r
+ {\r
+ return false;\r
+ }\r
+ return this.Equals( (TransformedColoredTexturedVertex) obj );\r
+ }\r
+ public bool Equals( TransformedColoredTexturedVertex other )\r
+ {\r
+ return ( ( ( this.Position == other.Position ) && ( this.Color == other.Color ) ) && ( this.TextureCoordinates == other.TextureCoordinates ) );\r
+ }\r
+ public override string ToString()\r
+ {\r
+ return string.Format( CultureInfo.CurrentCulture, "{0} ({1}, {2})", new object[] { this.Position.ToString(), System.Drawing.Color.FromArgb( this.Color ).ToString(), this.TextureCoordinates.ToString() } );\r
+ }\r
+ }\r
+}\r
--- /dev/null
+/*\r
+* Copyright (c) 2007-2010 SlimDX Group\r
+* \r
+* Permission is hereby granted, free of charge, to any person obtaining a copy\r
+* of this software and associated documentation files (the "Software"), to deal\r
+* in the Software without restriction, including without limitation the rights\r
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+* copies of the Software, and to permit persons to whom the Software is\r
+* furnished to do so, subject to the following conditions:\r
+* \r
+* The above copyright notice and this permission notice shall be included in\r
+* all copies or substantial portions of the Software.\r
+* \r
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+* THE SOFTWARE.\r
+*/\r
+\r
+using System;\r
+using System.Globalization;\r
+using System.Runtime.InteropServices;\r
+\r
+using SlimDX;\r
+\r
+namespace FDK {\r
+ /// <summary>\r
+ /// Represents a vertex with a pre-transformed position and a color.\r
+ /// </summary>\r
+ [StructLayout(LayoutKind.Sequential)]\r
+ public struct TransformedColoredVertex : IEquatable<TransformedColoredVertex> {\r
+ /// <summary>\r
+ /// Gets or sets the pre-transformed position of the vertex.\r
+ /// </summary>\r
+ public Vector4 Position {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the color of the vertex.\r
+ /// </summary>\r
+ public int Color {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="TransformedColoredVertex"/> struct.\r
+ /// </summary>\r
+ /// <param name="position">The position.</param>\r
+ /// <param name="color">The color.</param>\r
+ public TransformedColoredVertex(Vector4 position, int color)\r
+ : this() {\r
+ Position = position;\r
+ Color = color;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Implements operator ==.\r
+ /// </summary>\r
+ /// <param name="left">The left.</param>\r
+ /// <param name="right">The right.</param>\r
+ /// <returns>The result of the operator.</returns>\r
+ public static bool operator ==(TransformedColoredVertex left, TransformedColoredVertex right) {\r
+ return left.Equals(right);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Implements operator !=.\r
+ /// </summary>\r
+ /// <param name="left">The left side of the operator.</param>\r
+ /// <param name="right">The right side of the operator.</param>\r
+ /// <returns>The result of the operator.</returns>\r
+ public static bool operator !=(TransformedColoredVertex left, TransformedColoredVertex right) {\r
+ return !(left == right);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Returns the hash code for this instance.\r
+ /// </summary>\r
+ /// <returns>\r
+ /// A 32-bit signed integer that is the hash code for this instance.\r
+ /// </returns>\r
+ public override int GetHashCode() {\r
+ return Position.GetHashCode() + Color.GetHashCode();\r
+ }\r
+\r
+ /// <summary>\r
+ /// Indicates whether this instance and a specified object are equal.\r
+ /// </summary>\r
+ /// <param name="obj">Another object to compare to.</param>\r
+ /// <returns>\r
+ /// true if <paramref name="obj"/> and this instance are the same type and represent the same value; otherwise, false.\r
+ /// </returns>\r
+ public override bool Equals(object obj) {\r
+ if (obj == null)\r
+ return false;\r
+\r
+ if (GetType() != obj.GetType())\r
+ return false;\r
+\r
+ return Equals((TransformedColoredVertex)obj);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Indicates whether the current object is equal to another object of the same type.\r
+ /// </summary>\r
+ /// <param name="other">An object to compare with this object.</param>\r
+ /// <returns>\r
+ /// true if the current object is equal to the <paramref name="other"/> parameter; otherwise, false.\r
+ /// </returns>\r
+ public bool Equals(TransformedColoredVertex other) {\r
+ return (Position == other.Position && Color == other.Color);\r
+ }\r
+ }\r
+}\r
--- /dev/null
+\r
+\81¡ \8dÅ\8f¬\8cÀ\82Ì DirectX \83\89\83\93\83^\83C\83\80\r
+\r
+\82±\82Ì\83t\83H\83\8b\83_\82Í\81A\96{\83Q\81[\83\80\81i\82Æ\82¢\82¤\82© SlimDX\81j\82ª\95K\97v\82Æ\82·\82é\81A\8dÅ\8f¬\8cÀ\82Ì DirectX\r
+\83\89\83\93\83^\83C\83\80\82ª\93ü\82Á\82Ä\82¢\82Ü\82·\81B\r
+\r
+\82í\82´\82í\82´\96{\89Æ\83T\83C\83g\82©\82ç\8b\90\91å\82È\8dÅ\90V\83\89\83\93\83^\83C\83\80\82ð\83_\83E\83\93\83\8d\81[\83h\82·\82é\82Ì\82ª\83C\83\84\82¾\82Æ\r
+\82¢\82¤\90l\82Í\81A\82±\82¿\82ç\82Ì\8f¬\82³\82È DirectX \83\89\83\93\83^\83C\83\80\82ð\83C\83\93\83X\83g\81[\83\8b\82·\82é\82±\82Æ\82ð\82¨\8a©\82ß\r
+\82µ\82Ü\82·\81B\r
+\r
+\83C\83\93\83X\83g\81[\83\8b\82·\82é\82É\82Í\81ADXSETUP.exe \82ð\8bN\93®\82µ\81A\82 \82Æ\82Í\89æ\96Ê\82Ì\8ew\8e¦\82É\8f]\82Á\82Ä\89º\82³\82¢\81B\r
+\r
--- /dev/null
+Copyright (c) 2007-2010 SlimDX Group\r
+\r
+Permission is hereby granted, free of charge, to any person obtaining a copy\r
+of this software and associated documentation files (the "Software"), to deal\r
+in the Software without restriction, including without limitation the rights\r
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+copies of the Software, and to permit persons to whom the Software is\r
+furnished to do so, subject to the following conditions:\r
+\r
+The above copyright notice and this permission notice shall be included in\r
+all copies or substantial portions of the Software.\r
+\r
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+THE SOFTWARE.
\ No newline at end of file
--- /dev/null
+All of the SlimDX media is covered by the Creative Commons Attribution-Share Alike 3.0 License:\r
+http://creativecommons.org/licenses/by-sa/3.0/us/\r
+\r
+You are free:\r
+* To Share \97 to copy, distribute, display, and perform the work\r
+* To Remix \97 to make derivative works \r
+\r
+Under the following conditions:\r
+* Attribution - You must attribute the work in the manner specified by the author or\r
+licensor (but not in any way that suggests that they endorse you or your use of the work). \r
+* Share Alike - If you alter, transform, or build upon this work, you may distribute\r
+the resulting work only under the same, similar or a compatible license.\r
+\r
+For any reuse or distribution, you must make clear to others the license terms of this work.\r
+The best way to do this is with a link to the above web page. \r
+\r
+Any of the above conditions can be waived if you get permission from the copyright holder.\r
+\r
+Apart from the remix rights granted under this license, nothing in this license impairs or\r
+restricts the author's moral rights.
\ No newline at end of file
--- /dev/null
+\r
+DTXMania \8eg\97p\8b\96\91ø\r
+Copyright (C) 2000 2010 DTXMania Group\r
+\r
+\88È\89º\82É\92è\82ß\82é\8fð\8c\8f\82É\8f]\82¢\81A\96{\83\\83t\83g\83E\83F\83A\82¨\82æ\82Ñ\8aÖ\98A\95¶\8f\91\82Ì\83t\83@\83C\83\8b\r
+\81i\88È\89º\81u\83\\83t\83g\83E\83F\83A\81v\81j\82Ì\95¡\90»\82ð\8eæ\93¾\82·\82é\82·\82×\82Ä\82Ì\90l\82É\91Î\82µ\81A\r
+\83\\83t\83g\83E\83F\83A\82ð\96³\90§\8cÀ\82É\88µ\82¤\82±\82Æ\82ð\96³\8f\9e\82Å\8b\96\89Â\82µ\82Ü\82·\81B\r
+\82±\82ê\82É\82Í\81A\83\\83t\83g\83E\83F\83A\82Ì\95¡\90»\82ð\8eg\97p\81A\95¡\8eÊ\81A\95Ï\8dX\81A\8c\8b\8d\87\81A\8cf\8dÚ\81A\94Ð\95z\81A\r
+\83T\83u\83\89\83C\83Z\83\93\83X\81A\82¨\82æ\82Ñ/\82Ü\82½\82Í\94Ì\94\84\82·\82é\8c \97\98\81A\82¨\82æ\82Ñ\83\\83t\83g\83E\83F\83A\82ð\r
+\92ñ\8b\9f\82·\82é\91\8a\8eè\82É\93¯\82¶\82±\82Æ\82ð\8b\96\89Â\82·\82é\8c \97\98\82à\96³\90§\8cÀ\82É\8aÜ\82Ü\82ê\82Ü\82·\81B\r
+\r
+\8fã\8bL\82Ì\92\98\8dì\8c \95\\8e¦\82¨\82æ\82Ñ\96{\8b\96\91ø\95\\8e¦\82ð\81A\83\\83t\83g\83E\83F\83A\82Ì\82·\82×\82Ä\82Ì\95¡\90»\r
+\82Ü\82½\82Í\8fd\97v\82È\95\94\95ª\82É\8bL\8dÚ\82·\82é\82à\82Ì\82Æ\82µ\82Ü\82·\81B\r
+\r
+\83\\83t\83g\83E\83F\83A\82Í\81u\8c»\8fó\82Ì\82Ü\82Ü\81v\82Å\81A\96¾\8e¦\82Å\82 \82é\82©\88Ã\96Ù\82Å\82 \82é\82©\82ð\96â\82í\82¸\81A\r
+\89½\82ç\82Ì\95Û\8fØ\82à\82È\82\92ñ\8b\9f\82³\82ê\82Ü\82·\81B\82±\82±\82Å\82¢\82¤\95Û\8fØ\82Æ\82Í\81A\8f¤\95i\90«\81A\93Á\92è\82Ì\r
+\96Ú\93I\82Ö\82Ì\93K\8d\87\90«\81A\82¨\82æ\82Ñ\8c \97\98\94ñ\90N\8aQ\82É\82Â\82¢\82Ä\82Ì\95Û\8fØ\82à\8aÜ\82Ý\82Ü\82·\82ª\81A\82»\82ê\82É\r
+\8cÀ\92è\82³\82ê\82é\82à\82Ì\82Å\82Í\82 \82è\82Ü\82¹\82ñ\81B \r
+\8dì\8eÒ\82Ü\82½\82Í\92\98\8dì\8c \8eÒ\82Í\81A\8c_\96ñ\8ds\88×\81A\95s\96@\8ds\88×\81A\82Ü\82½\82Í\82»\82ê\88È\8aO\82Å\82 \82ë\82¤\82Æ\81A\r
+\83\\83t\83g\83E\83F\83A\82É\8bN\88ö\82Ü\82½\82Í\8aÖ\98A\82µ\81A\82 \82é\82¢\82Í\83\\83t\83g\83E\83F\83A\82Ì\8eg\97p\82Ü\82½\82Í\r
+\82»\82Ì\91¼\82Ì\88µ\82¢\82É\82æ\82Á\82Ä\90¶\82¶\82é\88ê\90Ø\82Ì\90¿\8b\81\81A\91¹\8aQ\81A\82»\82Ì\91¼\82Ì\8b`\96±\82É\82Â\82¢\82Ä\r
+\89½\82ç\82Ì\90Ó\94C\82à\95\89\82í\82È\82¢\82à\82Ì\82Æ\82µ\82Ü\82·\81B \r
+\r
--- /dev/null
+Copyright (c) 2002, Xiph.org Foundation
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+- Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+- Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+- Neither the name of the Xiph.org Foundation nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION
+OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--- /dev/null
+\r
+\81¡\8dÄ\94z\95z\82É\82Â\82¢\82Ä\r
+\81@\82±\82ÌDLL\82ð\8eg\97p\82µ\82Ä\82¢\82é\81u\83t\83\8a\81[\83\\83t\83g\83E\83F\83A\81v\82É\8cÀ\82è\81Axadec.dll\92P\91Ì\82ð\r
+\81@\91g\82Ý\8d\9e\82ñ\82Å\82Ì\94z\95z\82ð\8b\96\89Â\82µ\82Ü\82·\81B\r
+\81@\8es\94Ì\83\\83t\83g\82â\83V\83F\83A\83E\83F\83A\82È\82Ç\82É\82Í\90â\91Î\82É\91g\82Ý\8d\9e\82Ü\82È\82¢\82Å\82\82¾\82³\82¢\81B\r
+\r
+\81¡\96Æ\90Ó\r
+\81@\82±\82Ì\83v\83\8d\83O\83\89\83\80\82Í\96³\95Û\8fØ\82Å\82·\81B\r
+\81@\93\96DLL\82ð\8eg\97p\82µ\82Ä\94\90¶\82µ\82½\94@\89½\82È\82é\95s\8bï\8d\87\82à\82±\82¿\82ç\82Í\88ê\90Ø\90Ó\94C\82ð\8e\9d\82¿\82©\82Ë\82Ü\82·\81B\r
+\r
+\81¡\98A\97\8d\90æ\r
+\81@http://www.bandjam.net/\r
+\81@\92\86\96{ \90i\88ê(webmaster@bandjam.net)\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\r
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">\r
+ <noInheritable></noInheritable>\r
+ <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"/>\r
+ <file name="msvcr90.dll" />\r
+ <file name="msvcp90.dll" />\r
+ <file name="msvcm90.dll" />\r
+</assembly>
\ No newline at end of file
--- /dev/null
+============================================================\r
+ DTXMania .NET style\r
+ (C) 2000 2010 DTXMania Group\r
+============================================================\r
+\r
+\81¡\93®\8dì\82É\95K\97v\82È\82à\82Ì\r
+\r
+(1) OS ... WindowsXP / Vista / 7 (x86, x64)\r
+(2) .NET Framework ... 2.0 \88È\8d~\r
+(3) DirectX \83G\83\93\83h\83\86\81[\83U \83\89\83\93\83^\83C\83\80 ... June 2010 \88È\8d~\r
+\r
+\8fã\8bL\82ª\93±\93ü\82³\82ê\82Ä\82¢\82È\82¢\8fê\8d\87\81A\88È\89º\82Ì\82æ\82¤\82È\83G\83\89\81[\83_\83C\83A\83\8d\83O\82ª\r
+\95\\8e¦\82³\82ê\81ADTXMania \82ð\8bN\93®\82·\82é\82±\82Æ\82ª\82Å\82«\82Ü\82¹\82ñ\81B\r
+\r
+\81u\83A\83v\83\8a\83P\81[\83V\83\87\83\93\82ð\90³\82µ\82\8f\89\8aú\89»\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½\81v\r
+\81u****.dll \82ª\8c©\82Â\82©\82ç\82È\82©\82Á\82½\82½\82ß\81A\82±\82Ì\83A\83v\83\8a\83P\81[\83V\83\87\83\93\82ð\r
+\81@\8aJ\8en\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½\81v\81i\81¦ **** \82Í\94C\88Ó\82Ì\96¼\91O\81j\r
+\r
+\81¡DirectX \83G\83\93\83h\83\86\81[\83U\83\89\83\93\83^\83C\83\80\82Ì\83C\83\93\83X\83g\81[\83\8b\r
+\r
+\91O\90ß(3)\82Ì DirectX \83G\83\93\83h\83\86\81[\83U\83\89\83\93\83^\83C\83\80\82Í\81A\96{\83A\81[\83J\83C\83u\82Ì\r
+"DirectX Redist" \82Ì\92\86\82É\81ADTXMania \82Ì\93®\8dì\82É\81u\95K\97v\8dÅ\8f¬\8cÀ\81v\82Ì\r
+\8d\\90¬\82ð\93ü\82ê\82Ä\82 \82è\82Ü\82·\81B\r
+\r
+Microsoft \82Ì\83T\83C\83g\82©\82ç\89½\95SMB\82à\82 \82é\82Ç\82Å\82©\82¢\83G\83\93\83h\83\86\81[\83U\83\89\83\93\83^\83C\83\80\82ð\r
+\83_\83E\83\93\83\8d\81[\83h\82µ\82Ä\82\82é\82Ì\82ª\96Ê\93|\82¾\82Æ\82¢\82¤\90l\82Í\81A\82±\82±\82É\82 \82é DXSETUP.exe \82Å\r
+DirectX \82ð\83C\83\93\83X\83g\81[\83\8b\82µ\82Ä\89º\82³\82¢\81B\r
+\r
+\81¡DTXMania \82Ì\83C\83\93\83X\83g\81[\83\8b\r
+\r
+DTXMania \82Ì\83C\83\93\83X\83g\81[\83\8b\82Í\95s\97v\82Å\82·\81B\r
+\82¨\8dD\82«\82È\8fê\8f\8a\82É\94z\92u\82µ\82Ä\89º\82³\82¢\81B\r
+\r
+\81¡\83A\83\93\83C\83\93\83X\83g\81[\83\8b\r
+\r
+DTXMania \82Ì\83t\83H\83\8b\83_\82²\82Æ\91S\95\94\8dí\8f\9c\82µ\82Ä\89º\82³\82¢\81B\r
+\83\8c\83W\83X\83g\83\8a\93\99\82Í\82¢\82¶\82Á\82Ä\82Ü\82¹\82ñ\81B\r
+\r
+\81¡\8bÈ\83f\81[\83^\82Ì\83C\83\93\83X\83g\81[\83\8b\r
+\r
+\8bÈ\83f\81[\83^\81iDTX, GDA\82È\82Ç\81j\82Í\96{\83A\81[\83J\83C\83u\82É\82Í\8aÜ\82Ü\82ê\82Ä\82¢\82Ü\82¹\82ñ\82Ì\82Å\81A\r
+\8f\89\8aú\8fó\91Ô\82Å\82Í\8bÈ\82ª\82P\82Â\82à\95\\8e¦\82³\82ê\82Ü\82¹\82ñ\81B\r
+\8ae\8e©\81A\82¢\82ë\82¢\82ë\82È\8eè\92i\82Å\93ü\8eè\82µ\82Ä\89º\82³\82¢\81B\81i\8a¾\r
+\r
+\93ü\8eè\82µ\82½\8bÈ\83f\81[\83^\82Í\81ADTXManiaGR.exe \82Æ\93¯\82¶\83t\83H\83\8b\83_\82Ì\92\86\82É\r
+\93K\93\96\82È\96¼\91O\81i\89½\82Å\82à\82æ\82¢\81j\82Ì\83t\83H\83\8b\83_\82ð\8dì\82è\81A\82»\82Ì\92\86\82É\83R\83s\81[\82µ\82Ä\r
+\89º\82³\82¢\81B\r
+\r
+DTXMania \82Í\81AConfig.ini\81iDTXMania\82ð1\89ñ\82Å\82à\8bN\93®\82·\82é\82Æ\8e©\93®\93I\82É\r
+\8dì\90¬\82³\82ê\82Ü\82·\81j\82Ì DTXPath \82Å\8ew\92è\82³\82ê\82½\83t\83H\83\8b\83_\82ð\83\8b\81[\83g\83t\83H\83\8b\83_\r
+\82Æ\82µ\82Ä\8bÈ\83f\81[\83^\82ð\8c\9f\8dõ\82µ\82Ü\82·\81B\r
+\r
+\83\8b\81[\83g\83t\83H\83\8b\83_\82©\82ç\82Ì\8aK\91w\82Ì\90[\82³\82Í\96â\82¢\82Ü\82¹\82ñ\81B\r
+\82Ç\82±\82Ü\82Å\82à\90[\82\92T\82µ\82É\8ds\82«\82Ü\82·\81B\r
+\r
+\81y\92\8d\88Ó\81z\r
+\8f\89\8aú\8fó\91Ô\82Å\82Í\81ADTXPath \82É\82Í DTXManiaGR.exe \82Ì\91¶\8dÝ\82·\82é\83t\83H\83\8b\83_\82ª\r
+\8ew\92è\82³\82ê\82Ä\82¢\82Ü\82·\81B\r
+\r
+DTXMania \82Í\81A\8bÈ\82Ì\89\89\91t\8c\8b\89Ê\82ð\81A\8bÈ\83f\81[\83^\82Ì\91¶\8dÝ\82·\82é\83t\83H\83\8b\83_\93à\82É\r
+socre.ini \83t\83@\83C\83\8b\82Æ\82µ\82Ä\8fo\97Í\82µ\82Ü\82·\81B\82»\82Ì\82½\82ß\81A\r
+\81u\8bÈ\83f\81[\83^\82Ì\91¶\8dÝ\82·\82é\83t\83H\83\8b\83_\82É"\8f\91\82«\8d\9e\82Ý\8c \8cÀ"\82ª\96³\82¯\82ê\82Î\81ADTXMania \82ª\r
+\81@\83G\83\89\81[\8fI\97¹\82·\82é\82©\81A\82Ü\82½\82Í\8bL\98^\82ª\8ec\82³\82ê\82Ü\82¹\82ñ\81B\81v\r
+\r
+\82æ\82Á\82Ä\81APC \82Ì\8aÇ\97\9d\8eÒ\88È\8aO\82Ì\90l\82ª DTXMania \82Å\97V\82Ô\8fê\8d\87\82Í\81A\8bÈ\83f\81[\83^\82Ì\94z\92u\r
+\8fê\8f\8a\82É\82²\92\8d\88Ó\82\82¾\82³\82¢\81B\r