1
0
mirror of synced 2024-11-28 01:10:53 +01:00

remove compact mode unused references

This commit is contained in:
0auBSQ 2024-10-22 05:04:45 +09:00
parent d19654e3c0
commit b20302627f
5 changed files with 1761 additions and 1809 deletions

View File

@ -1210,7 +1210,7 @@ namespace OpenTaiko {
for (int j = 0; j < (int)EKeyConfigPad.Max; j++) {
for (int k = 0; k < 0x10; k++) {
if ((this.KeyAssign[i][j][k].InputDevice == EInputDevice.Keyboard) &&
(this.KeyAssign[i][j][k].Code == (int)SlimDXKeys.Key.Return)) {
(this.KeyAssign[i][j][k].Code == (int)SlimDXKeys.Key.Return)) {
return false;
}
}
@ -1641,8 +1641,8 @@ namespace OpenTaiko {
this.bBufferedInputs = true;
this.bIsAllowedDoubleClickFullscreen = false; // #26752 2011.11.26 ダブルクリックでのフルスクリーンモード移行を許可
this.nPoliphonicSounds = 4; // #28228 2012.5.1 yyagi レーン毎の最大同時発音数
// #24820 2013.1.15 yyagi 初期値を4から2に変更。BASS.net使用時の負荷軽減のため。
// #24820 2013.1.17 yyagi 初期値を4に戻した。動的なミキサー制御がうまく動作しているため。
// #24820 2013.1.15 yyagi 初期値を4から2に変更。BASS.net使用時の負荷軽減のため。
// #24820 2013.1.17 yyagi 初期値を4に戻した。動的なミキサー制御がうまく動作しているため。
this.bIsEnabledSystemMenu = true; // #28200 2012.5.1 yyagi System Menuの利用可否切替(使用可)
this.strSystemSkinSubfolderFullName = ""; // #28195 2012.5.2 yyagi 使用中のSkinサブフォルダ名
this.bTight = false; // #29500 2012.9.11 kairera0467 TIGHTモード
@ -1657,7 +1657,7 @@ namespace OpenTaiko {
nBassBufferSizeMs = 1;
this.nWASAPIBufferSizeMs = 50; // #24820 2013.1.15 yyagi 初期値は50(0で自動設定)
this.nASIODevice = 0; // #24820 2013.1.17 yyagi
// this.nASIOBufferSizeMs = 0; // #24820 2012.12.25 yyagi 初期値は0(自動設定)
// this.nASIOBufferSizeMs = 0; // #24820 2012.12.25 yyagi 初期値は0(自動設定)
#endregion
@ -1760,8 +1760,7 @@ namespace OpenTaiko {
bool isMenu = pad is EKeyConfigPad.Decide or EKeyConfigPad.RightChange or EKeyConfigPad.LeftChange;
for (int i = 0; i <= (int)EKeyConfigPart.System; i++) {
// Do not restrict duplicate keybinds for System controls
for (int j = 0; j < (int)EKeyConfigPad.Capture; j++)
{
for (int j = 0; j < (int)EKeyConfigPad.Capture; j++) {
bool isJMenu = j is (int)EKeyConfigPad.LeftChange
or (int)EKeyConfigPad.RightChange
or (int)EKeyConfigPad.Decide;
@ -1770,8 +1769,8 @@ namespace OpenTaiko {
}
for (int k = 0; k < 0x10; k++) {
if (this.KeyAssign[i][j][k].InputDevice != deviceType ||
this.KeyAssign[i][j][k].ID != nID ||
this.KeyAssign[i][j][k].Code != nCode) {
this.KeyAssign[i][j][k].ID != nID ||
this.KeyAssign[i][j][k].Code != nCode) {
continue;
}
@ -2633,7 +2632,7 @@ namespace OpenTaiko {
string str;
this.ClearAllKeyAssignments();
using (StreamReader reader =
new StreamReader(this.ConfigIniFileName, Encoding.GetEncoding(OpenTaiko.sEncType))) {
new StreamReader(this.ConfigIniFileName, Encoding.GetEncoding(OpenTaiko.sEncType))) {
str = reader.ReadToEnd();
}
@ -2705,41 +2704,41 @@ namespace OpenTaiko {
this.nLayoutType = int.Parse(value);
break;
case "SaveFileName": {
var _s = value.Split(new char[] { ',' });
var _s = value.Split(new char[] { ',' });
// Ignore custom save file names if duplicates
if (!_s.GroupBy(x => x).Any(g => g.Count() > 1)) {
for (int i = 0; i < Math.Min(5, _s.Length); i++) {
this.sSaveFile[i] = _s[i];
// Ignore custom save file names if duplicates
if (!_s.GroupBy(x => x).Any(g => g.Count() > 1)) {
for (int i = 0; i < Math.Min(5, _s.Length); i++) {
this.sSaveFile[i] = _s[i];
}
}
}
break;
}
break;
}
case "IgnoreSongUnlockables":
this.bIgnoreSongUnlockables = CConversion.bONorOFF(value[0]);
break;
case "SkinPath": {
string absSkinPath = value;
if (!System.IO.Path.IsPathRooted(value)) {
absSkinPath = System.IO.Path.Combine(OpenTaiko.strEXEのあるフォルダ, "System");
absSkinPath = System.IO.Path.Combine(absSkinPath, value);
Uri u = new Uri(absSkinPath);
absSkinPath = u.AbsolutePath.ToString(); // str4内に相対パスがある場合に備える
absSkinPath = System.Web.HttpUtility.UrlDecode(absSkinPath); // デコードする
absSkinPath =
absSkinPath.Replace('/', System.IO.Path.DirectorySeparatorChar); // 区切り文字が\ではなく/なので置換する
}
string absSkinPath = value;
if (!System.IO.Path.IsPathRooted(value)) {
absSkinPath = System.IO.Path.Combine(OpenTaiko.strEXEのあるフォルダ, "System");
absSkinPath = System.IO.Path.Combine(absSkinPath, value);
Uri u = new Uri(absSkinPath);
absSkinPath = u.AbsolutePath.ToString(); // str4内に相対パスがある場合に備える
absSkinPath = System.Web.HttpUtility.UrlDecode(absSkinPath); // デコードする
absSkinPath =
absSkinPath.Replace('/', System.IO.Path.DirectorySeparatorChar); // 区切り文字が\ではなく/なので置換する
}
if (absSkinPath[absSkinPath.Length - 1] !=
System.IO.Path.DirectorySeparatorChar) // フォルダ名末尾に\を必ずつけて、CSkin側と表記を統一する
{
absSkinPath += System.IO.Path.DirectorySeparatorChar;
}
if (absSkinPath[absSkinPath.Length - 1] !=
System.IO.Path.DirectorySeparatorChar) // フォルダ名末尾に\を必ずつけて、CSkin側と表記を統一する
{
absSkinPath += System.IO.Path.DirectorySeparatorChar;
}
this.strSystemSkinSubfolderFullName = absSkinPath;
break;
}
this.strSystemSkinSubfolderFullName = absSkinPath;
break;
}
case nameof(this.PreAssetsLoading):
this.PreAssetsLoading = CConversion.bONorOFF(value[0]);
break;
@ -2767,21 +2766,21 @@ namespace OpenTaiko {
value, 0, 9999, this.nWindowBaseYPosition);
break;
case "WindowWidth": {
this.nWindowWidth = CConversion.ParseIntInRange(value, 1, 65535, this.nWindowWidth);
if (this.nWindowWidth <= 0) {
this.nWindowWidth = SampleFramework.GameWindowSize.Width;
}
this.nWindowWidth = CConversion.ParseIntInRange(value, 1, 65535, this.nWindowWidth);
if (this.nWindowWidth <= 0) {
this.nWindowWidth = SampleFramework.GameWindowSize.Width;
}
break;
}
break;
}
case "WindowHeight": {
this.nWindowHeight = CConversion.ParseIntInRange(value, 1, 65535, this.nWindowHeight);
if (this.nWindowHeight <= 0) {
this.nWindowHeight = SampleFramework.GameWindowSize.Height;
}
this.nWindowHeight = CConversion.ParseIntInRange(value, 1, 65535, this.nWindowHeight);
if (this.nWindowHeight <= 0) {
this.nWindowHeight = SampleFramework.GameWindowSize.Height;
}
break;
}
break;
}
case "DoubleClickFullScreen":
this.bIsAllowedDoubleClickFullscreen = CConversion.bONorOFF(value[0]);
break;
@ -2801,10 +2800,10 @@ namespace OpenTaiko {
this.nWASAPIBufferSizeMs = CConversion.ParseIntInRange(value, 0, 9999, this.nWASAPIBufferSizeMs);
break;
case "ASIODevice": {
string[] asiodev = CEnumerateAllAsioDevices.GetAllASIODevices();
this.nASIODevice = CConversion.ParseIntInRange(value, 0, asiodev.Length - 1, this.nASIODevice);
break;
}
string[] asiodev = CEnumerateAllAsioDevices.GetAllASIODevices();
this.nASIODevice = CConversion.ParseIntInRange(value, 0, asiodev.Length - 1, this.nASIODevice);
break;
}
case "SoundTimerType":
this.bUseOSTimer = CConversion.bONorOFF(value[0]);
break;
@ -3417,122 +3416,122 @@ namespace OpenTaiko {
private void ProcessSystemKeyAssignmentSection(string key, string value) {
switch (key) {
case "Capture": {
this.ReadAndSetKey(value, this.KeyAssign.System.Capture);
break;
}
this.ReadAndSetKey(value, this.KeyAssign.System.Capture);
break;
}
case "SongVolumeIncrease": {
this.ReadAndSetKey(value, this.KeyAssign.System.SongVolIncrease);
break;
}
this.ReadAndSetKey(value, this.KeyAssign.System.SongVolIncrease);
break;
}
case "SongVolumeDecrease": {
this.ReadAndSetKey(value, this.KeyAssign.System.SongVolDecrease);
break;
}
this.ReadAndSetKey(value, this.KeyAssign.System.SongVolDecrease);
break;
}
case "DisplayHits": {
this.ReadAndSetKey(value, this.KeyAssign.System.DisplayHits);
break;
}
this.ReadAndSetKey(value, this.KeyAssign.System.DisplayHits);
break;
}
case "DisplayDebug": {
this.ReadAndSetKey(value, this.KeyAssign.System.DisplayDebug);
break;
}
this.ReadAndSetKey(value, this.KeyAssign.System.DisplayDebug);
break;
}
case "QuickConfig": {
this.ReadAndSetKey(value, this.KeyAssign.System.QuickConfig);
break;
}
this.ReadAndSetKey(value, this.KeyAssign.System.QuickConfig);
break;
}
case "NewHeya": {
this.ReadAndSetKey(value, this.KeyAssign.System.NewHeya);
break;
}
this.ReadAndSetKey(value, this.KeyAssign.System.NewHeya);
break;
}
case "SortSongs": {
this.ReadAndSetKey(value, this.KeyAssign.System.SortSongs);
break;
}
this.ReadAndSetKey(value, this.KeyAssign.System.SortSongs);
break;
}
case "ToggleAutoP1": {
this.ReadAndSetKey(value, this.KeyAssign.System.ToggleAutoP1);
break;
}
this.ReadAndSetKey(value, this.KeyAssign.System.ToggleAutoP1);
break;
}
case "ToggleAutoP2": {
this.ReadAndSetKey(value, this.KeyAssign.System.ToggleAutoP2);
break;
}
this.ReadAndSetKey(value, this.KeyAssign.System.ToggleAutoP2);
break;
}
case "ToggleTrainingMode": {
this.ReadAndSetKey(value, this.KeyAssign.System.ToggleTrainingMode);
break;
}
this.ReadAndSetKey(value, this.KeyAssign.System.ToggleTrainingMode);
break;
}
case "CycleVideoDisplayMode": {
this.ReadAndSetKey(value, this.KeyAssign.System.CycleVideoDisplayMode);
break;
}
this.ReadAndSetKey(value, this.KeyAssign.System.CycleVideoDisplayMode);
break;
}
}
}
private void ProcessTrainingKeyAssignmentSection(string key, string value) {
switch (key) {
case "TrainingIncreaseScrollSpeed": {
this.ReadAndSetKey(value, this.KeyAssign.Drums.TrainingIncreaseScrollSpeed);
break;
}
this.ReadAndSetKey(value, this.KeyAssign.Drums.TrainingIncreaseScrollSpeed);
break;
}
case "TrainingDecreaseScrollSpeed": {
this.ReadAndSetKey(value, this.KeyAssign.Drums.TrainingDecreaseScrollSpeed);
break;
}
this.ReadAndSetKey(value, this.KeyAssign.Drums.TrainingDecreaseScrollSpeed);
break;
}
case "TrainingIncreaseSongSpeed": {
this.ReadAndSetKey(value, this.KeyAssign.Drums.TrainingIncreaseSongSpeed);
break;
}
this.ReadAndSetKey(value, this.KeyAssign.Drums.TrainingIncreaseSongSpeed);
break;
}
case "TrainingDecreaseSongSpeed": {
this.ReadAndSetKey(value, this.KeyAssign.Drums.TrainingDecreaseSongSpeed);
break;
}
this.ReadAndSetKey(value, this.KeyAssign.Drums.TrainingDecreaseSongSpeed);
break;
}
case "TrainingToggleAuto": {
this.ReadAndSetKey(value, this.KeyAssign.Drums.TrainingToggleAuto);
break;
}
this.ReadAndSetKey(value, this.KeyAssign.Drums.TrainingToggleAuto);
break;
}
case "TrainingBranchNormal": {
this.ReadAndSetKey(value, this.KeyAssign.Drums.TrainingBranchNormal);
break;
}
this.ReadAndSetKey(value, this.KeyAssign.Drums.TrainingBranchNormal);
break;
}
case "TrainingBranchExpert": {
this.ReadAndSetKey(value, this.KeyAssign.Drums.TrainingBranchExpert);
break;
}
this.ReadAndSetKey(value, this.KeyAssign.Drums.TrainingBranchExpert);
break;
}
case "TrainingBranchMaster": {
this.ReadAndSetKey(value, this.KeyAssign.Drums.TrainingBranchMaster);
break;
}
this.ReadAndSetKey(value, this.KeyAssign.Drums.TrainingBranchMaster);
break;
}
case "TrainingPause": {
this.ReadAndSetKey(value, this.KeyAssign.Drums.TrainingPause);
break;
}
this.ReadAndSetKey(value, this.KeyAssign.Drums.TrainingPause);
break;
}
case "TrainingBookmark": {
this.ReadAndSetKey(value, this.KeyAssign.Drums.TrainingBookmark);
break;
}
this.ReadAndSetKey(value, this.KeyAssign.Drums.TrainingBookmark);
break;
}
case "TrainingMoveForwardMeasure": {
this.ReadAndSetKey(value, this.KeyAssign.Drums.TrainingMoveForwardMeasure);
break;
}
this.ReadAndSetKey(value, this.KeyAssign.Drums.TrainingMoveForwardMeasure);
break;
}
case "TrainingMoveBackMeasure": {
this.ReadAndSetKey(value, this.KeyAssign.Drums.TrainingMoveBackMeasure);
break;
}
this.ReadAndSetKey(value, this.KeyAssign.Drums.TrainingMoveBackMeasure);
break;
}
case "TrainingSkipForwardMeasure": {
this.ReadAndSetKey(value, this.KeyAssign.Drums.TrainingSkipForwardMeasure);
break;
}
this.ReadAndSetKey(value, this.KeyAssign.Drums.TrainingSkipForwardMeasure);
break;
}
case "TrainingSkipBackMeasure": {
this.ReadAndSetKey(value, this.KeyAssign.Drums.TrainingSkipBackMeasure);
break;
}
this.ReadAndSetKey(value, this.KeyAssign.Drums.TrainingSkipBackMeasure);
break;
}
case "TrainingJumpToFirstMeasure": {
this.ReadAndSetKey(value, this.KeyAssign.Drums.TrainingJumpToFirstMeasure);
break;
}
this.ReadAndSetKey(value, this.KeyAssign.Drums.TrainingJumpToFirstMeasure);
break;
}
case "TrainingJumpToLastMeasure": {
this.ReadAndSetKey(value, this.KeyAssign.Drums.TrainingJumpToLastMeasure);
break;
}
this.ReadAndSetKey(value, this.KeyAssign.Drums.TrainingJumpToLastMeasure);
break;
}
}
}
@ -3563,7 +3562,7 @@ namespace OpenTaiko {
Temp,
}
private Dictionary<ESectionType, Action<string, string>> sectionProcess;
private Dictionary<ESectionType, Action<string, string>> sectionProcess = new Dictionary<ESectionType, Action<string, string>>();
private bool _bDrumsEnabled;
private bool _bGuitarEnabled;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,437 +1,433 @@
using System.Diagnostics;
using System.Runtime.Serialization.Formatters.Binary;
namespace OpenTaiko {
internal class CEnumSongs // #27060 2011.2.7 yyagi 曲リストを取得するクラス
{ // ファイルキャッシュ(songslist.db)からの取得と、ディスクからの取得を、この一つのクラスに集約。
public CSongs管理 Songs管理 // 曲の探索結果はこのSongs管理に読み込まれる
{
get;
private set;
}
public bool IsSongListEnumCompletelyDone // 曲リスト探索と、実際の曲リストへの反映が完了した?
{
get {
return (this.state == DTXEnumState.CompletelyDone);
}
}
public bool IsEnumerating {
get {
if (thDTXFileEnumerate == null) {
return false;
}
return thDTXFileEnumerate.IsAlive;
}
}
public bool IsSongListEnumerated // 曲リスト探索が完了したが、実際の曲リストへの反映はまだ?
{
get {
return (this.state == DTXEnumState.Enumeratad);
}
}
public bool IsSongListEnumStarted // 曲リスト探索開始後?(探索完了も含む)
{
get {
return (this.state != DTXEnumState.None);
}
}
public void SongListEnumCompletelyDone() {
this.state = DTXEnumState.CompletelyDone;
this.Songs管理 = null; // GCはOSに任せる
}
public bool IsSlowdown // #PREMOVIE再生中は検索負荷を落とす
{
get {
return this.Songs管理.bIsSlowdown;
}
set {
this.Songs管理.bIsSlowdown = value;
}
}
public void ChangeEnumeratePriority(ThreadPriority tp) {
if (this.thDTXFileEnumerate != null && this.thDTXFileEnumerate.IsAlive == true) {
this.thDTXFileEnumerate.Priority = tp;
}
}
private readonly string strPathSongsDB = OpenTaiko.strEXEのあるフォルダ + "songs.db";
private readonly string strPathSongList = OpenTaiko.strEXEのあるフォルダ + "songlist.db";
public Thread thDTXFileEnumerate {
get;
private set;
}
private enum DTXEnumState {
None,
Ongoing,
Suspended,
Enumeratad, // 探索完了、現在の曲リストに未反映
CompletelyDone // 探索完了、現在の曲リストに反映完了
}
private DTXEnumState state = DTXEnumState.None;
/// <summary>
/// Constractor
/// </summary>
public CEnumSongs() {
this.Songs管理 = new CSongs管理();
}
public void Init() {
}
/// <summary>
/// 曲リストのキャッシュ(songlist.db)取得スレッドの開始
/// </summary>
public void StartEnumFromCache() {
this.thDTXFileEnumerate = new Thread(new ThreadStart(this.t曲リストの構築1));
this.thDTXFileEnumerate.Name = "曲リストの構築";
this.thDTXFileEnumerate.IsBackground = true;
this.thDTXFileEnumerate.Start();
}
/// <summary>
///
/// </summary>
public delegate void AsyncDelegate();
/// <summary>
/// 曲検索スレッドの開始
/// </summary>
public void StartEnumFromDisk(bool hard_reload = false) {
if (state == DTXEnumState.None || state == DTXEnumState.CompletelyDone) {
Trace.TraceInformation("★曲データ検索スレッドを起動しました。");
lock (this) {
state = DTXEnumState.Ongoing;
}
// this.autoReset = new AutoResetEvent( true );
if (this.Songs管理 == null) // Enumerating Songs完了後、CONFIG画面から再スキャンしたときにこうなる
{
this.Songs管理 = new CSongs管理();
}
if (hard_reload)
this.thDTXFileEnumerate = new Thread(new ThreadStart(this.HardReloadSongList));
else
this.thDTXFileEnumerate = new Thread(new ThreadStart(this.ReloadSongList));
this.thDTXFileEnumerate.Name = "曲リストの構築";
this.thDTXFileEnumerate.IsBackground = true;
this.thDTXFileEnumerate.Priority = System.Threading.ThreadPriority.Lowest;
this.thDTXFileEnumerate.Start();
}
}
private void HardReloadSongList() {
this.t曲リストの構築2(true);
}
private void ReloadSongList() {
this.t曲リストの構築2(false);
}
/// <summary>
/// 曲探索スレッドのサスペンド
/// </summary>
public void Suspend() {
if (this.state != DTXEnumState.CompletelyDone &&
((thDTXFileEnumerate.ThreadState & (System.Threading.ThreadState.Background)) != 0)) {
// this.thDTXFileEnumerate.Suspend(); // obsoleteにつき使用中止
this.Songs管理.bIsSuspending = true;
this.state = DTXEnumState.Suspended;
Trace.TraceInformation("★曲データ検索スレッドを中断しました。");
}
}
/// <summary>
/// 曲探索スレッドのレジューム
/// </summary>
public void Resume() {
if (this.state == DTXEnumState.Suspended) {
if ((this.thDTXFileEnumerate.ThreadState & (System.Threading.ThreadState.WaitSleepJoin | System.Threading.ThreadState.StopRequested)) != 0) //
{
// this.thDTXFileEnumerate.Resume(); // obsoleteにつき使用中止
this.Songs管理.bIsSuspending = false;
this.Songs管理.AutoReset.Set();
this.state = DTXEnumState.Ongoing;
Trace.TraceInformation("★曲データ検索スレッドを再開しました。");
}
}
}
/// <summary>
/// 曲探索スレッドにサスペンド指示を出してから、本当にサスペンド状態に遷移するまでの間、ブロックする
/// 500ms * 10回5秒でタイムアウトし、サスペンド完了して無くてもブロック解除する
/// </summary>
public void WaitUntilSuspended() {
// 曲検索が一時中断されるまで待機
for (int i = 0; i < 10; i++) {
if (this.state == DTXEnumState.CompletelyDone ||
(thDTXFileEnumerate.ThreadState & (System.Threading.ThreadState.WaitSleepJoin | System.Threading.ThreadState.Background | System.Threading.ThreadState.Stopped)) != 0) {
break;
}
Trace.TraceInformation("★曲データ検索スレッドの中断待ちです: {0}", this.thDTXFileEnumerate.ThreadState.ToString());
Thread.Sleep(500);
}
}
/// <summary>
/// 曲探索スレッドを強制終了する
/// </summary>
public void Abort() {
if (thDTXFileEnumerate != null) {
thDTXFileEnumerate.Abort();
thDTXFileEnumerate = null;
this.state = DTXEnumState.None;
this.Songs管理 = null; // Songs管理を再初期化する (途中まで作った曲リストの最後に、一から重複して追記することにならないようにする。)
this.Songs管理 = new CSongs管理();
}
}
/// <summary>
/// songlist.dbからの曲リスト構築
/// </summary>
public void t曲リストの構築1() {
// !注意!
// 本メソッドは別スレッドで動作するが、プラグイン側でカレントディレクトリを変更しても大丈夫なように、
// すべてのファイルアクセスは「絶対パス」で行うこと。(2010.9.16)
// 構築が完了したら、DTXEnumerateState state を DTXEnumerateState.Done にすること。(2012.2.9)
DateTime now = DateTime.Now;
try {
#region [ 0) ]
//-----------------------------
OpenTaiko.stage起動.ePhaseID = CStage.EPhase.Startup_0_CreateSystemSound;
Trace.TraceInformation("0) システムサウンドを構築します。");
Trace.Indent();
try {
OpenTaiko.Skin.bgm起動画面.tPlay();
for (int i = 0; i < OpenTaiko.Skin.nシステムサウンド数; i++) {
if (!OpenTaiko.Skin[i].bExclusive) // BGM系以外のみ読み込む。(BGM系は必要になったときに読み込む)
{
CSkin.CSystemSound cシステムサウンド = OpenTaiko.Skin[i];
if (!OpenTaiko.bコンパクトモード || cシステムサウンド.bCompact対象) {
try {
cシステムサウンド.tLoading();
Trace.TraceInformation("システムサウンドを読み込みました。({0})", cシステムサウンド.strFileName);
//if ( ( cシステムサウンド == CDTXMania.Skin.bgm起動画面 ) && cシステムサウンド.b読み込み成功 )
//{
// cシステムサウンド.t再生する();
//}
} catch (FileNotFoundException) {
Trace.TraceWarning("システムサウンドが存在しません。({0})", cシステムサウンド.strFileName);
} catch (Exception e) {
Trace.TraceWarning(e.ToString());
Trace.TraceWarning("システムサウンドの読み込みに失敗しました。({0})", cシステムサウンド.strFileName);
}
}
}
}
lock (OpenTaiko.stage起動.list進行文字列) {
OpenTaiko.stage起動.list進行文字列.Add("SYSTEM SOUND...OK");
}
} finally {
Trace.Unindent();
}
//-----------------------------
#endregion
if (OpenTaiko.bコンパクトモード) {
Trace.TraceInformation("コンパクトモードなので残りの起動処理は省略します。");
return;
}
} finally {
OpenTaiko.stage起動.ePhaseID = CStage.EPhase.Startup_6_LoadTextures;
TimeSpan span = (TimeSpan)(DateTime.Now - now);
Trace.TraceInformation("起動所要時間: {0}", span.ToString());
lock (this) // #28700 2012.6.12 yyagi; state change must be in finally{} for exiting as of compact mode.
{
state = DTXEnumState.CompletelyDone;
}
}
}
/// <summary>
/// 起動してタイトル画面に遷移した後にバックグラウンドで発生させる曲検索
/// #27060 2012.2.6 yyagi
/// </summary>
private void t曲リストの構築2(bool hard_reload = false) {
// !注意!
// 本メソッドは別スレッドで動作するが、プラグイン側でカレントディレクトリを変更しても大丈夫なように、
// すべてのファイルアクセスは「絶対パス」で行うこと。(2010.9.16)
// 構築が完了したら、DTXEnumerateState state を DTXEnumerateState.Done にすること。(2012.2.9)
DateTime now = DateTime.Now;
try {
if (hard_reload) {
if (File.Exists($"{OpenTaiko.strEXEのあるフォルダ}songlist.db"))
File.Delete($"{OpenTaiko.strEXEのあるフォルダ}songlist.db");
}
Deserialize();
#region [ 2) ]
//-----------------------------
// base.eフェーズID = CStage.Eフェーズ.起動2_曲を検索してリストを作成する;
Trace.TraceInformation("enum2) 曲データを検索します。");
Trace.Indent();
try {
if (!string.IsNullOrEmpty(OpenTaiko.ConfigIni.strSongsPath)) {
CSongDict.tClearSongNodes();
string[] strArray = OpenTaiko.ConfigIni.strSongsPath.Split(new char[] { ';' });
if (strArray.Length > 0) {
// 全パスについて…
foreach (string str in strArray) {
string path = str;
if (!Path.IsPathRooted(path)) {
path = OpenTaiko.strEXEのあるフォルダ + str; // 相対パスの場合、絶対パスに直す(2010.9.16)
}
if (!string.IsNullOrEmpty(path)) {
Trace.TraceInformation("検索パス: " + path);
Trace.Indent();
try {
this.Songs管理.t曲を検索してリストを作成する(path, true);
} catch (Exception e) {
Trace.TraceError(e.ToString());
Trace.TraceError("例外が発生しましたが処理を継続します。 (105fd674-e722-4a4e-bd9a-e6f82ac0b1d3)");
} finally {
Trace.Unindent();
}
}
}
}
} else {
Trace.TraceWarning("曲データの検索パス(TJAPath)の指定がありません。");
}
} finally {
Trace.TraceInformation("曲データの検索を完了しました。[{0}曲{1}スコア]", this.Songs管理.n検索された曲ード数, this.Songs管理.n検索されたスコア数);
Trace.Unindent();
}
// lock ( this.list進行文字列 )
// {
// this.list進行文字列.Add( string.Format( "{0} ... {1} scores ({2} songs)", "Enumerating songs", this..Songs管理_裏読.n検索されたスコア数, this.Songs管理_裏読.n検索された曲ード数 ) );
// }
//-----------------------------
#endregion
#region [ 4) songs.db ]
//-----------------------------
// base.eフェーズID = CStage.Eフェーズ.起動4_スコアキャッシュになかった曲をファイルから読み込んで反映する;
/*
int num2 = this.Songs管理.n検索されたスコア数 - this.Songs管理.nスコアキャッシュから反映できたスコア数;
Trace.TraceInformation( "{0}, {1}", this.Songs管理.n検索されたスコア数, this.Songs管理.nスコアキャッシュから反映できたスコア数 );
Trace.TraceInformation( "enum4) songs.db になかった曲データ[{0}スコア]の情報をファイルから読み込んで反映します。", num2 );
Trace.Indent();
try
{
this.Songs管理.tSongsDBになかった曲をファイルから読み込んで反映する();
}
catch ( Exception e )
{
Trace.TraceError( e.ToString() );
Trace.TraceError( "例外が発生しましたが処理を継続します。 (276bb40f-6406-40c1-9f03-e2a9869dbc88)" );
}
finally
{
Trace.TraceInformation( "曲データへの反映を完了しました。[{0}/{1}スコア]", this.Songs管理.nファイルから反映できたスコア数, num2 );
Trace.Unindent();
}
// lock ( this.list進行文字列 )
// {
// this.list進行文字列.Add( string.Format( "{0} ... {1}/{2}", "Loading score properties from files", CDTXMania.Songs管理_裏読.nファイルから反映できたスコア数, CDTXMania.Songs管理_裏読.n検索されたスコア数 - cs.nスコアキャッシュから反映できたスコア数 ) );
// }
*/
//-----------------------------
#endregion
#region [ 5) ]
//-----------------------------
// base.eフェーズID = CStage.Eフェーズ.起動5_曲リストへ後処理を適用する;
Trace.TraceInformation("enum5) 曲リストへの後処理を適用します。");
Trace.Indent();
try {
this.Songs管理.t曲リストへ後処理を適用する();
} catch (Exception e) {
Trace.TraceError(e.ToString());
Trace.TraceError("例外が発生しましたが処理を継続します。 (6480ffa0-1cc1-40d4-9cc9-aceeecd0264b)");
} finally {
Trace.TraceInformation("曲リストへの後処理を完了しました。");
Trace.Unindent();
}
// lock ( this.list進行文字列 )
// {
// this.list進行文字列.Add( string.Format( "{0} ... OK", "Building songlists" ) );
// }
//-----------------------------
#endregion
// if ( !bSucceededFastBoot ) // songs2.db読み込みに成功したなら、songs2.dbを新たに作らない
#region [ 7) songs2.db ] // #27060 2012.1.26 yyagi
Trace.TraceInformation("enum7) 曲データの情報を songlist.db へ出力します。");
Trace.Indent();
SerializeSongList();
Trace.TraceInformation("songlist.db への出力を完了しました。");
Trace.Unindent();
//-----------------------------
#endregion
// }
} finally {
// base.eフェーズID = CStage.Eフェーズ.起動7_完了;
TimeSpan span = (TimeSpan)(DateTime.Now - now);
Trace.TraceInformation("曲探索所要時間: {0}", span.ToString());
}
lock (this) {
// state = DTXEnumState.Done; // DoneにするのはCDTXMania.cs側にて。
state = DTXEnumState.Enumeratad;
}
}
#pragma warning disable SYSLIB0011
/// <summary>
/// 曲リストのserialize
/// </summary>
private void SerializeSongList() {
BinaryFormatter songlistdb_ = new BinaryFormatter();
using Stream songlistdb = File.OpenWrite($"{OpenTaiko.strEXEのあるフォルダ}songlist.db");
songlistdb_.Serialize(songlistdb, Songs管理.listSongsDB);
}
/// <summary>
/// 曲リストのdeserialize
/// </summary>
/// <param name="songs管理"></param>
/// <param name="strPathSongList"></param>
public void Deserialize() {
try {
if (File.Exists($"{OpenTaiko.strEXEのあるフォルダ}songlist.db")) {
BinaryFormatter songlistdb_ = new BinaryFormatter();
using Stream songlistdb = File.OpenRead($"{OpenTaiko.strEXEのあるフォルダ}songlist.db");
this.Songs管理.listSongsDB = (Dictionary<string, CSongListNode>)songlistdb_.Deserialize(songlistdb);
}
} catch (Exception exception) {
this.Songs管理.listSongsDB = new();
} finally {
}
}
#pragma warning restore SYSLIB0011
}
}
using System.Diagnostics;
using System.Runtime.Serialization.Formatters.Binary;
namespace OpenTaiko {
internal class CEnumSongs // #27060 2011.2.7 yyagi 曲リストを取得するクラス
{ // ファイルキャッシュ(songslist.db)からの取得と、ディスクからの取得を、この一つのクラスに集約。
public CSongs管理 Songs管理 // 曲の探索結果はこのSongs管理に読み込まれる
{
get;
private set;
}
public bool IsSongListEnumCompletelyDone // 曲リスト探索と、実際の曲リストへの反映が完了した?
{
get {
return (this.state == DTXEnumState.CompletelyDone);
}
}
public bool IsEnumerating {
get {
if (thDTXFileEnumerate == null) {
return false;
}
return thDTXFileEnumerate.IsAlive;
}
}
public bool IsSongListEnumerated // 曲リスト探索が完了したが、実際の曲リストへの反映はまだ?
{
get {
return (this.state == DTXEnumState.Enumeratad);
}
}
public bool IsSongListEnumStarted // 曲リスト探索開始後?(探索完了も含む)
{
get {
return (this.state != DTXEnumState.None);
}
}
public void SongListEnumCompletelyDone() {
this.state = DTXEnumState.CompletelyDone;
this.Songs管理 = null; // GCはOSに任せる
}
public bool IsSlowdown // #PREMOVIE再生中は検索負荷を落とす
{
get {
return this.Songs管理.bIsSlowdown;
}
set {
this.Songs管理.bIsSlowdown = value;
}
}
public void ChangeEnumeratePriority(ThreadPriority tp) {
if (this.thDTXFileEnumerate != null && this.thDTXFileEnumerate.IsAlive == true) {
this.thDTXFileEnumerate.Priority = tp;
}
}
private readonly string strPathSongsDB = OpenTaiko.strEXEのあるフォルダ + "songs.db";
private readonly string strPathSongList = OpenTaiko.strEXEのあるフォルダ + "songlist.db";
public Thread thDTXFileEnumerate {
get;
private set;
}
private enum DTXEnumState {
None,
Ongoing,
Suspended,
Enumeratad, // 探索完了、現在の曲リストに未反映
CompletelyDone // 探索完了、現在の曲リストに反映完了
}
private DTXEnumState state = DTXEnumState.None;
/// <summary>
/// Constractor
/// </summary>
public CEnumSongs() {
this.Songs管理 = new CSongs管理();
}
public void Init() {
}
/// <summary>
/// 曲リストのキャッシュ(songlist.db)取得スレッドの開始
/// </summary>
public void StartEnumFromCache() {
this.thDTXFileEnumerate = new Thread(new ThreadStart(this.t曲リストの構築1));
this.thDTXFileEnumerate.Name = "曲リストの構築";
this.thDTXFileEnumerate.IsBackground = true;
this.thDTXFileEnumerate.Start();
}
/// <summary>
///
/// </summary>
public delegate void AsyncDelegate();
/// <summary>
/// 曲検索スレッドの開始
/// </summary>
public void StartEnumFromDisk(bool hard_reload = false) {
if (state == DTXEnumState.None || state == DTXEnumState.CompletelyDone) {
Trace.TraceInformation("★曲データ検索スレッドを起動しました。");
lock (this) {
state = DTXEnumState.Ongoing;
}
// this.autoReset = new AutoResetEvent( true );
if (this.Songs管理 == null) // Enumerating Songs完了後、CONFIG画面から再スキャンしたときにこうなる
{
this.Songs管理 = new CSongs管理();
}
if (hard_reload)
this.thDTXFileEnumerate = new Thread(new ThreadStart(this.HardReloadSongList));
else
this.thDTXFileEnumerate = new Thread(new ThreadStart(this.ReloadSongList));
this.thDTXFileEnumerate.Name = "曲リストの構築";
this.thDTXFileEnumerate.IsBackground = true;
this.thDTXFileEnumerate.Priority = System.Threading.ThreadPriority.Lowest;
this.thDTXFileEnumerate.Start();
}
}
private void HardReloadSongList() {
this.t曲リストの構築2(true);
}
private void ReloadSongList() {
this.t曲リストの構築2(false);
}
/// <summary>
/// 曲探索スレッドのサスペンド
/// </summary>
public void Suspend() {
if (this.state != DTXEnumState.CompletelyDone &&
((thDTXFileEnumerate.ThreadState & (System.Threading.ThreadState.Background)) != 0)) {
// this.thDTXFileEnumerate.Suspend(); // obsoleteにつき使用中止
this.Songs管理.bIsSuspending = true;
this.state = DTXEnumState.Suspended;
Trace.TraceInformation("★曲データ検索スレッドを中断しました。");
}
}
/// <summary>
/// 曲探索スレッドのレジューム
/// </summary>
public void Resume() {
if (this.state == DTXEnumState.Suspended) {
if ((this.thDTXFileEnumerate.ThreadState & (System.Threading.ThreadState.WaitSleepJoin | System.Threading.ThreadState.StopRequested)) != 0) //
{
// this.thDTXFileEnumerate.Resume(); // obsoleteにつき使用中止
this.Songs管理.bIsSuspending = false;
this.Songs管理.AutoReset.Set();
this.state = DTXEnumState.Ongoing;
Trace.TraceInformation("★曲データ検索スレッドを再開しました。");
}
}
}
/// <summary>
/// 曲探索スレッドにサスペンド指示を出してから、本当にサスペンド状態に遷移するまでの間、ブロックする
/// 500ms * 10回5秒でタイムアウトし、サスペンド完了して無くてもブロック解除する
/// </summary>
public void WaitUntilSuspended() {
// 曲検索が一時中断されるまで待機
for (int i = 0; i < 10; i++) {
if (this.state == DTXEnumState.CompletelyDone ||
(thDTXFileEnumerate.ThreadState & (System.Threading.ThreadState.WaitSleepJoin | System.Threading.ThreadState.Background | System.Threading.ThreadState.Stopped)) != 0) {
break;
}
Trace.TraceInformation("★曲データ検索スレッドの中断待ちです: {0}", this.thDTXFileEnumerate.ThreadState.ToString());
Thread.Sleep(500);
}
}
/// <summary>
/// 曲探索スレッドを強制終了する
/// </summary>
public void Abort() {
if (thDTXFileEnumerate != null) {
thDTXFileEnumerate.Abort();
thDTXFileEnumerate = null;
this.state = DTXEnumState.None;
this.Songs管理 = null; // Songs管理を再初期化する (途中まで作った曲リストの最後に、一から重複して追記することにならないようにする。)
this.Songs管理 = new CSongs管理();
}
}
/// <summary>
/// songlist.dbからの曲リスト構築
/// </summary>
public void t曲リストの構築1() {
// !注意!
// 本メソッドは別スレッドで動作するが、プラグイン側でカレントディレクトリを変更しても大丈夫なように、
// すべてのファイルアクセスは「絶対パス」で行うこと。(2010.9.16)
// 構築が完了したら、DTXEnumerateState state を DTXEnumerateState.Done にすること。(2012.2.9)
DateTime now = DateTime.Now;
try {
#region [ 0) ]
//-----------------------------
OpenTaiko.stage起動.ePhaseID = CStage.EPhase.Startup_0_CreateSystemSound;
Trace.TraceInformation("0) システムサウンドを構築します。");
Trace.Indent();
try {
OpenTaiko.Skin.bgm起動画面.tPlay();
for (int i = 0; i < OpenTaiko.Skin.nシステムサウンド数; i++) {
if (!OpenTaiko.Skin[i].bExclusive) // BGM系以外のみ読み込む。(BGM系は必要になったときに読み込む)
{
CSkin.CSystemSound cシステムサウンド = OpenTaiko.Skin[i];
if (cシステムサウンド.bCompact対象) {
try {
cシステムサウンド.tLoading();
Trace.TraceInformation("システムサウンドを読み込みました。({0})", cシステムサウンド.strFileName);
//if ( ( cシステムサウンド == CDTXMania.Skin.bgm起動画面 ) && cシステムサウンド.b読み込み成功 )
//{
// cシステムサウンド.t再生する();
//}
} catch (FileNotFoundException) {
Trace.TraceWarning("システムサウンドが存在しません。({0})", cシステムサウンド.strFileName);
} catch (Exception e) {
Trace.TraceWarning(e.ToString());
Trace.TraceWarning("システムサウンドの読み込みに失敗しました。({0})", cシステムサウンド.strFileName);
}
}
}
}
lock (OpenTaiko.stage起動.list進行文字列) {
OpenTaiko.stage起動.list進行文字列.Add("SYSTEM SOUND...OK");
}
} finally {
Trace.Unindent();
}
//-----------------------------
#endregion
} finally {
OpenTaiko.stage起動.ePhaseID = CStage.EPhase.Startup_6_LoadTextures;
TimeSpan span = (TimeSpan)(DateTime.Now - now);
Trace.TraceInformation("起動所要時間: {0}", span.ToString());
lock (this) // #28700 2012.6.12 yyagi; state change must be in finally{} for exiting as of compact mode.
{
state = DTXEnumState.CompletelyDone;
}
}
}
/// <summary>
/// 起動してタイトル画面に遷移した後にバックグラウンドで発生させる曲検索
/// #27060 2012.2.6 yyagi
/// </summary>
private void t曲リストの構築2(bool hard_reload = false) {
// !注意!
// 本メソッドは別スレッドで動作するが、プラグイン側でカレントディレクトリを変更しても大丈夫なように、
// すべてのファイルアクセスは「絶対パス」で行うこと。(2010.9.16)
// 構築が完了したら、DTXEnumerateState state を DTXEnumerateState.Done にすること。(2012.2.9)
DateTime now = DateTime.Now;
try {
if (hard_reload) {
if (File.Exists($"{OpenTaiko.strEXEのあるフォルダ}songlist.db"))
File.Delete($"{OpenTaiko.strEXEのあるフォルダ}songlist.db");
}
Deserialize();
#region [ 2) ]
//-----------------------------
// base.eフェーズID = CStage.Eフェーズ.起動2_曲を検索してリストを作成する;
Trace.TraceInformation("enum2) 曲データを検索します。");
Trace.Indent();
try {
if (!string.IsNullOrEmpty(OpenTaiko.ConfigIni.strSongsPath)) {
CSongDict.tClearSongNodes();
string[] strArray = OpenTaiko.ConfigIni.strSongsPath.Split(new char[] { ';' });
if (strArray.Length > 0) {
// 全パスについて…
foreach (string str in strArray) {
string path = str;
if (!Path.IsPathRooted(path)) {
path = OpenTaiko.strEXEのあるフォルダ + str; // 相対パスの場合、絶対パスに直す(2010.9.16)
}
if (!string.IsNullOrEmpty(path)) {
Trace.TraceInformation("検索パス: " + path);
Trace.Indent();
try {
this.Songs管理.t曲を検索してリストを作成する(path, true);
} catch (Exception e) {
Trace.TraceError(e.ToString());
Trace.TraceError("例外が発生しましたが処理を継続します。 (105fd674-e722-4a4e-bd9a-e6f82ac0b1d3)");
} finally {
Trace.Unindent();
}
}
}
}
} else {
Trace.TraceWarning("曲データの検索パス(TJAPath)の指定がありません。");
}
} finally {
Trace.TraceInformation("曲データの検索を完了しました。[{0}曲{1}スコア]", this.Songs管理.n検索された曲ード数, this.Songs管理.n検索されたスコア数);
Trace.Unindent();
}
// lock ( this.list進行文字列 )
// {
// this.list進行文字列.Add( string.Format( "{0} ... {1} scores ({2} songs)", "Enumerating songs", this..Songs管理_裏読.n検索されたスコア数, this.Songs管理_裏読.n検索された曲ード数 ) );
// }
//-----------------------------
#endregion
#region [ 4) songs.db ]
//-----------------------------
// base.eフェーズID = CStage.Eフェーズ.起動4_スコアキャッシュになかった曲をファイルから読み込んで反映する;
/*
int num2 = this.Songs管理.n検索されたスコア数 - this.Songs管理.nスコアキャッシュから反映できたスコア数;
Trace.TraceInformation( "{0}, {1}", this.Songs管理.n検索されたスコア数, this.Songs管理.nスコアキャッシュから反映できたスコア数 );
Trace.TraceInformation( "enum4) songs.db になかった曲データ[{0}スコア]の情報をファイルから読み込んで反映します。", num2 );
Trace.Indent();
try
{
this.Songs管理.tSongsDBになかった曲をファイルから読み込んで反映する();
}
catch ( Exception e )
{
Trace.TraceError( e.ToString() );
Trace.TraceError( "例外が発生しましたが処理を継続します。 (276bb40f-6406-40c1-9f03-e2a9869dbc88)" );
}
finally
{
Trace.TraceInformation( "曲データへの反映を完了しました。[{0}/{1}スコア]", this.Songs管理.nファイルから反映できたスコア数, num2 );
Trace.Unindent();
}
// lock ( this.list進行文字列 )
// {
// this.list進行文字列.Add( string.Format( "{0} ... {1}/{2}", "Loading score properties from files", CDTXMania.Songs管理_裏読.nファイルから反映できたスコア数, CDTXMania.Songs管理_裏読.n検索されたスコア数 - cs.nスコアキャッシュから反映できたスコア数 ) );
// }
*/
//-----------------------------
#endregion
#region [ 5) ]
//-----------------------------
// base.eフェーズID = CStage.Eフェーズ.起動5_曲リストへ後処理を適用する;
Trace.TraceInformation("enum5) 曲リストへの後処理を適用します。");
Trace.Indent();
try {
this.Songs管理.t曲リストへ後処理を適用する();
} catch (Exception e) {
Trace.TraceError(e.ToString());
Trace.TraceError("例外が発生しましたが処理を継続します。 (6480ffa0-1cc1-40d4-9cc9-aceeecd0264b)");
} finally {
Trace.TraceInformation("曲リストへの後処理を完了しました。");
Trace.Unindent();
}
// lock ( this.list進行文字列 )
// {
// this.list進行文字列.Add( string.Format( "{0} ... OK", "Building songlists" ) );
// }
//-----------------------------
#endregion
// if ( !bSucceededFastBoot ) // songs2.db読み込みに成功したなら、songs2.dbを新たに作らない
#region [ 7) songs2.db ] // #27060 2012.1.26 yyagi
Trace.TraceInformation("enum7) 曲データの情報を songlist.db へ出力します。");
Trace.Indent();
SerializeSongList();
Trace.TraceInformation("songlist.db への出力を完了しました。");
Trace.Unindent();
//-----------------------------
#endregion
// }
} finally {
// base.eフェーズID = CStage.Eフェーズ.起動7_完了;
TimeSpan span = (TimeSpan)(DateTime.Now - now);
Trace.TraceInformation("曲探索所要時間: {0}", span.ToString());
}
lock (this) {
// state = DTXEnumState.Done; // DoneにするのはCDTXMania.cs側にて。
state = DTXEnumState.Enumeratad;
}
}
#pragma warning disable SYSLIB0011
/// <summary>
/// 曲リストのserialize
/// </summary>
private void SerializeSongList() {
BinaryFormatter songlistdb_ = new BinaryFormatter();
using Stream songlistdb = File.OpenWrite($"{OpenTaiko.strEXEのあるフォルダ}songlist.db");
songlistdb_.Serialize(songlistdb, Songs管理.listSongsDB);
}
/// <summary>
/// 曲リストのdeserialize
/// </summary>
/// <param name="songs管理"></param>
/// <param name="strPathSongList"></param>
public void Deserialize() {
try {
if (File.Exists($"{OpenTaiko.strEXEのあるフォルダ}songlist.db")) {
BinaryFormatter songlistdb_ = new BinaryFormatter();
using Stream songlistdb = File.OpenRead($"{OpenTaiko.strEXEのあるフォルダ}songlist.db");
this.Songs管理.listSongsDB = (Dictionary<string, CSongListNode>)songlistdb_.Deserialize(songlistdb);
}
} catch (Exception exception) {
this.Songs管理.listSongsDB = new();
} finally {
}
}
#pragma warning restore SYSLIB0011
}
}

View File

@ -2,20 +2,20 @@
using FDK;
namespace OpenTaiko {
internal class CStage曲読み込み : CStage {
// コンストラクタ
internal class CStage曲読み込み : CStage {
// コンストラクタ
public CStage曲読み込み() {
base.eStageID = CStage.EStage.SongLoading;
base.ePhaseID = CStage.EPhase.Common_NORMAL;
base.IsDeActivated = true;
//base.list子Activities.Add( this.actFI = new CActFIFOBlack() ); // #27787 2012.3.10 yyagi 曲読み込み画面のフェードインの省略
//base.list子Activities.Add( this.actFO = new CActFIFOBlack() );
}
// CStage 実装
base.IsDeActivated = true;
//base.list子Activities.Add( this.actFI = new CActFIFOBlack() ); // #27787 2012.3.10 yyagi 曲読み込み画面のフェードインの省略
//base.list子Activities.Add( this.actFO = new CActFIFOBlack() );
}
// CStage 実装
public override void Activate() {
Trace.TraceInformation("曲読み込みステージを活性化します。");
Trace.Indent();
@ -33,41 +33,27 @@ namespace OpenTaiko {
OpenTaiko.ConfigIni.bTokkunMode = false;
}
if (OpenTaiko.bコンパクトモード) {
string strDTXファイルパス = OpenTaiko.strコンパクトモードファイル;
string strDTXファイルパス = OpenTaiko.stageSongSelect.r確定されたスコア..;
CDTX cdtx = new CDTX(strDTXファイルパス, true, 1.0, 0, 0);
var strフォルダ名 = Path.GetDirectoryName(strDTXファイルパス) + Path.DirectorySeparatorChar;
if (File.Exists(cdtx.strフォルダ名 + @"set.def"))
cdtx = new CDTX(strDTXファイルパス, true, 1.0, 0, 1);
if (File.Exists(strフォルダ名 + @"set.def")) {
var cdtx = new CDTX(strDTXファイルパス, true, 1.0, 0, 1);
this.str曲タイトル = cdtx.TITLE.GetString("");
this.strサブタイトル = cdtx.SUBTITLE.GetString("");
cdtx.DeActivate();
} else {
string strDTXファイルパス = OpenTaiko.stageSongSelect.r確定されたスコア..;
var strフォルダ名 = Path.GetDirectoryName(strDTXファイルパス) + Path.DirectorySeparatorChar;
if (File.Exists(strフォルダ名 + @"set.def")) {
var cdtx = new CDTX(strDTXファイルパス, true, 1.0, 0, 1);
this.str曲タイトル = cdtx.TITLE.GetString("");
this.strサブタイトル = cdtx.SUBTITLE.GetString("");
cdtx.DeActivate();
} else {
var = OpenTaiko.stageSongSelect.r確定されたスコア.;
this.str曲タイトル = .;
this.strサブタイトル = .strサブタイトル;
}
}
// For the moment, detect that we are performing
// calibration via there being an actual single
// player and the special song title and subtitle
// of the .tja used to perform input calibration
var = OpenTaiko.stageSongSelect.r確定されたスコア.;
this.str曲タイトル = .;
this.strサブタイトル = .strサブタイトル;
}
// For the moment, detect that we are performing
// calibration via there being an actual single
// player and the special song title and subtitle
// of the .tja used to perform input calibration
OpenTaiko.IsPerformingCalibration =
!OpenTaiko.ConfigIni.bAutoPlay[0] &&
OpenTaiko.ConfigIni.nPlayerCount == 1 &&
@ -85,11 +71,11 @@ namespace OpenTaiko {
this.ct待機 = new CCounter(0, wait, 5, OpenTaiko.Timer);
this.ct曲名表示 = new CCounter(1, 30, 30, OpenTaiko.Timer);
try {
// When performing calibration, inform the player that
// calibration is about to begin, rather than
// displaying the song title and subtitle as usual.
try {
// When performing calibration, inform the player that
// calibration is about to begin, rather than
// displaying the song title and subtitle as usual.
var = OpenTaiko.IsPerformingCalibration
? "Input calibration is about to begin."
: this.str曲タイトル;
@ -98,11 +84,11 @@ namespace OpenTaiko {
? "Please play as accurately as possible."
: this.strサブタイトル;
if (!string.IsNullOrEmpty()) {
//this.txタイトル = new CTexture( CDTXMania.app.Device, image, CDTXMania.TextureFormat );
//this.txタイトル.vc拡大縮小倍率 = new Vector3( 0.5f, 0.5f, 1f );
if (!string.IsNullOrEmpty()) {
//this.txタイトル = new CTexture( CDTXMania.app.Device, image, CDTXMania.TextureFormat );
//this.txタイトル.vc拡大縮小倍率 = new Vector3( 0.5f, 0.5f, 1f );
using (var bmpSongTitle = this.pfTITLE.DrawText(, OpenTaiko.Skin.SongLoading_Title_ForeColor, OpenTaiko.Skin.SongLoading_Title_BackColor, null, 30)) {
this.txタイトル = new CTexture(bmpSongTitle);
txタイトル.vcScaleRatio.X = OpenTaiko.GetSongNameXScaling(ref txタイトル, OpenTaiko.Skin.SongLoading_Title_MaxSize);
@ -135,8 +121,8 @@ namespace OpenTaiko {
Trace.TraceInformation("曲読み込みステージを非活性化します。");
Trace.Indent();
try {
OpenTaiko.tテクスチャの解放(ref this.txタイトル);
//CDTXMania.tテクスチャの解放( ref this.txSongnamePlate );
OpenTaiko.tテクスチャの解放(ref this.txタイトル);
//CDTXMania.tテクスチャの解放( ref this.txSongnamePlate );
OpenTaiko.tテクスチャの解放(ref this.txサブタイトル);
base.DeActivate();
} finally {
@ -150,8 +136,8 @@ namespace OpenTaiko {
pfDanTitle = HPrivateFastFont.tInstantiateMainFont(OpenTaiko.Skin.Game_DanC_Title_Size);
pfDanSubTitle = HPrivateFastFont.tInstantiateMainFont(OpenTaiko.Skin.Game_DanC_SubTitle_Size);
this.tx背景 = OpenTaiko.tテクスチャの生成(this.strSTAGEFILE, false);
//this.txSongnamePlate = CDTXMania.tテクスチャの生成( CSkin.Path( @$"Graphics{Path.DirectorySeparatorChar}6_SongnamePlate.png" ) );
this.tx背景 = OpenTaiko.tテクスチャの生成(this.strSTAGEFILE, false);
//this.txSongnamePlate = CDTXMania.tテクスチャの生成( CSkin.Path( @$"Graphics{Path.DirectorySeparatorChar}6_SongnamePlate.png" ) );
base.CreateManagedResource();
}
public override void ReleaseManagedResource() {
@ -168,10 +154,10 @@ namespace OpenTaiko {
string str;
if (base.IsDeActivated)
return 0;
return 0;
#region [ ]
//-----------------------------
//-----------------------------
if (base.IsFirstDraw) {
Cスコア cスコア1 = OpenTaiko.stageSongSelect.r確定されたスコア;
if (this.sd読み込み音 != null) {
@ -185,17 +171,17 @@ namespace OpenTaiko {
OpenTaiko.Skin.sound曲読込開始音.tPlay();
this.nBGM再生開始時刻 = SoundManager.PlayTimer.NowTime;
this.nBGMの総再生時間ms = OpenTaiko.Skin.sound曲読込開始音.n長さ_現在のサウンド;
}
//this.actFI.tフェードイン開始(); // #27787 2012.3.10 yyagi 曲読み込み画面のフェードインの省略
}
//this.actFI.tフェードイン開始(); // #27787 2012.3.10 yyagi 曲読み込み画面のフェードインの省略
base.ePhaseID = CStage.EPhase.Common_FADEIN;
base.IsFirstDraw = false;
nWAVcount = 1;
}
//-----------------------------
}
//-----------------------------
#endregion
this.ct待機.Tick();
this.ct待機.Tick();
#region [ Cancel loading with esc ]
if (tキー入力()) {
if (this.sd読み込み音 != null) {
@ -203,13 +189,13 @@ namespace OpenTaiko {
this.sd読み込み音.tDispose();
}
return (int)ESongLoadingScreenReturnValue.LoadCanceled;
}
}
#endregion
if (OpenTaiko.stageSongSelect.nChoosenSongDifficulty[0] != (int)Difficulty.Dan) {
void drawPlate() {
if (OpenTaiko.Tx.SongLoading_Plate != null) {
OpenTaiko.Tx.SongLoading_Plate.bスクリーン合成 = OpenTaiko.Skin.SongLoading_Plate_ScreenBlend; //あまりにも出番が無い
OpenTaiko.Tx.SongLoading_Plate.bスクリーン合成 = OpenTaiko.Skin.SongLoading_Plate_ScreenBlend; //あまりにも出番が無い
OpenTaiko.Tx.SongLoading_Plate.Opacity = 255;
if (OpenTaiko.Skin.SongLoading_Plate_ReferencePoint == CSkin.ReferencePoint.Left) {
OpenTaiko.Tx.SongLoading_Plate.t2D描画(OpenTaiko.Skin.SongLoading_Plate_X, OpenTaiko.Skin.SongLoading_Plate_Y - (OpenTaiko.Tx.SongLoading_Plate.sz画像サイズ.Height / 2));
@ -218,10 +204,10 @@ namespace OpenTaiko {
} else {
OpenTaiko.Tx.SongLoading_Plate.t2D描画(OpenTaiko.Skin.SongLoading_Plate_X - (OpenTaiko.Tx.SongLoading_Plate.sz画像サイズ.Width / 2), OpenTaiko.Skin.SongLoading_Plate_Y - (OpenTaiko.Tx.SongLoading_Plate.sz画像サイズ.Height / 2));
}
}
//CDTXMania.act文字コンソール.tPrint( 0, 16, C文字コンソール.Eフォント種別.灰, C変換.nParsentTo255( ( this.ct曲名表示.n現在の値 / 30.0 ) ).ToString() );
}
//CDTXMania.act文字コンソール.tPrint( 0, 16, C文字コンソール.Eフォント種別.灰, C変換.nParsentTo255( ( this.ct曲名表示.n現在の値 / 30.0 ) ).ToString() );
int y = 720 - 45;
if (this.txタイトル != null) {
int nサブタイトル補正 = string.IsNullOrEmpty(OpenTaiko.stageSongSelect.r確定されたスコア..strサブタイトル) ? 15 : 0;
@ -249,7 +235,7 @@ namespace OpenTaiko {
void drawPlate_AI() {
if (OpenTaiko.Tx.SongLoading_Plate_AI != null) {
OpenTaiko.Tx.SongLoading_Plate_AI.bスクリーン合成 = OpenTaiko.Skin.SongLoading_Plate_ScreenBlend; //あまりにも出番が無い
OpenTaiko.Tx.SongLoading_Plate_AI.bスクリーン合成 = OpenTaiko.Skin.SongLoading_Plate_ScreenBlend; //あまりにも出番が無い
OpenTaiko.Tx.SongLoading_Plate_AI.Opacity = 255;
if (OpenTaiko.Skin.SongLoading_Plate_ReferencePoint == CSkin.ReferencePoint.Left) {
OpenTaiko.Tx.SongLoading_Plate_AI.t2D描画(OpenTaiko.Skin.SongLoading_Plate_X_AI, OpenTaiko.Skin.SongLoading_Plate_Y_AI - (OpenTaiko.Tx.SongLoading_Plate_AI.sz画像サイズ.Height / 2));
@ -258,10 +244,10 @@ namespace OpenTaiko {
} else {
OpenTaiko.Tx.SongLoading_Plate_AI.t2D描画(OpenTaiko.Skin.SongLoading_Plate_X_AI - (OpenTaiko.Tx.SongLoading_Plate_AI.sz画像サイズ.Width / 2), OpenTaiko.Skin.SongLoading_Plate_Y_AI - (OpenTaiko.Tx.SongLoading_Plate_AI.sz画像サイズ.Height / 2));
}
}
//CDTXMania.act文字コンソール.tPrint( 0, 16, C文字コンソール.Eフォント種別.灰, C変換.nParsentTo255( ( this.ct曲名表示.n現在の値 / 30.0 ) ).ToString() );
}
//CDTXMania.act文字コンソール.tPrint( 0, 16, C文字コンソール.Eフォント種別.灰, C変換.nParsentTo255( ( this.ct曲名表示.n現在の値 / 30.0 ) ).ToString() );
int y = 720 - 45;
if (this.txタイトル != null) {
int nサブタイトル補正 = string.IsNullOrEmpty(OpenTaiko.stageSongSelect.r確定されたスコア..strサブタイトル) ? 15 : 0;
@ -285,15 +271,15 @@ namespace OpenTaiko {
this.txサブタイトル.t2D描画((OpenTaiko.Skin.SongLoading_SubTitle_X_AI - ((this.txサブタイトル.sz画像サイズ.Width * txサブタイトル.vcScaleRatio.X) / 2)), OpenTaiko.Skin.SongLoading_SubTitle_Y_AI - (this.txサブタイトル.sz画像サイズ.Height / 2));
}
}
}
}
#region [ Loading screen (except dan) ]
//-----------------------------
//-----------------------------
this.ct曲名表示.Tick();
if (OpenTaiko.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Tower) {
if (OpenTaiko.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Tower) {
#region [Tower loading screen]
if (OpenTaiko.Skin.Game_Tower_Ptn_Result > 0) {
int xFactor = 0;
float yFactor = 1f;
@ -315,32 +301,32 @@ namespace OpenTaiko {
if (currentTowerType < OpenTaiko.Tx.TowerResult_Tower.Length)
OpenTaiko.Tx.TowerResult_Tower[currentTowerType]?.t2D描画(xFactor, -1 * yFactor * pos);
}
}
#endregion
drawPlate();
} else if (OpenTaiko.ConfigIni.bAIBattleMode) {
OpenTaiko.ConfigIni.tInitializeAILevel();
OpenTaiko.Tx.SongLoading_Bg_AI_Wait.t2D描画(0, 0);
drawPlate_AI();
} else {
} else {
#region [Ensou loading screen]
if (OpenTaiko.Tx.SongLoading_BgWait != null) OpenTaiko.Tx.SongLoading_BgWait.t2D描画(0, 0);
if (OpenTaiko.Tx.SongLoading_Chara != null) OpenTaiko.Tx.SongLoading_Chara.t2D描画(0, 0);
drawPlate();
drawPlate();
#endregion
}
//CDTXMania.act文字コンソール.tPrint( 0, 0, C文字コンソール.Eフォント種別.灰, this.ct曲名表示.n現在の値.ToString() );
//-----------------------------
}
//CDTXMania.act文字コンソール.tPrint( 0, 0, C文字コンソール.Eフォント種別.灰, this.ct曲名表示.n現在の値.ToString() );
//-----------------------------
#endregion
} else {
} else {
#region [ Dan Loading screen ]
OpenTaiko.Tx.SongLoading_Bg_Dan.t2D描画(0, 0 - (ct待機.CurrentValue <= 600 ? ct待機.CurrentValue / 10f : 60));
CTexture dp = (OpenTaiko.stage段位選択..stバー情報 != null)
@ -354,39 +340,35 @@ namespace OpenTaiko {
if (OpenTaiko.Tx.Tile_Black != null) {
OpenTaiko.Tx.Tile_Black.Opacity = (int)(ct待機.CurrentValue <= 51 ? (255 - ct待機.CurrentValue / 0.2f) : (this.ct待機.CurrentValue - 949) / 0.2);
for (int i = 0; i <= (SampleFramework.GameWindowSize.Width / OpenTaiko.Tx.Tile_Black.szTextureSize.Width); i++) // #23510 2010.10.31 yyagi: change "clientSize.Width" to "640" to fix FIFO drawing size
for (int i = 0; i <= (SampleFramework.GameWindowSize.Width / OpenTaiko.Tx.Tile_Black.szTextureSize.Width); i++) // #23510 2010.10.31 yyagi: change "clientSize.Width" to "640" to fix FIFO drawing size
{
for (int j = 0; j <= (SampleFramework.GameWindowSize.Height / OpenTaiko.Tx.Tile_Black.szTextureSize.Height); j++) // #23510 2010.10.31 yyagi: change "clientSize.Height" to "480" to fix FIFO drawing size
for (int j = 0; j <= (SampleFramework.GameWindowSize.Height / OpenTaiko.Tx.Tile_Black.szTextureSize.Height); j++) // #23510 2010.10.31 yyagi: change "clientSize.Height" to "480" to fix FIFO drawing size
{
OpenTaiko.Tx.Tile_Black.t2D描画(i * OpenTaiko.Tx.Tile_Black.szTextureSize.Width, j * OpenTaiko.Tx.Tile_Black.szTextureSize.Height);
}
}
}
}
#endregion
}
switch (base.ePhaseID) {
case CStage.EPhase.Common_FADEIN:
//if( this.actFI.On進行描画() != 0 ) // #27787 2012.3.10 yyagi 曲読み込み画面のフェードインの省略
// 必ず一度「CStaeg.Eフェーズ.共通_フェードイン」フェーズを経由させること。
// さもないと、曲読み込みが完了するまで、曲読み込み画面が描画されない。
case CStage.EPhase.Common_FADEIN:
//if( this.actFI.On進行描画() != 0 ) // #27787 2012.3.10 yyagi 曲読み込み画面のフェードインの省略
// 必ず一度「CStaeg.Eフェーズ.共通_フェードイン」フェーズを経由させること。
// さもないと、曲読み込みが完了するまで、曲読み込み画面が描画されない。
base.ePhaseID = CStage.EPhase.SongLoading_LoadDTXFile;
return (int)ESongLoadingScreenReturnValue.Continue;
case CStage.EPhase.SongLoading_LoadDTXFile: {
timeBeginLoad = DateTime.Now;
TimeSpan span;
str = null;
if (!OpenTaiko.bコンパクトモード)
str = OpenTaiko.stageSongSelect.r確定されたスコア..;
else
str = OpenTaiko.strコンパクトモードファイル;
str = OpenTaiko.stageSongSelect.r確定されたスコア..;
if ((OpenTaiko.DTX != null) && OpenTaiko.DTX.IsActivated)
OpenTaiko.DTX.DeActivate();
//if( CDTXMania.DTX == null )
OpenTaiko.DTX.DeActivate();
//if( CDTXMania.DTX == null )
{
OpenTaiko.DTX = new CDTX(str, false, 1.0, 0, 0, 0, true, OpenTaiko.stageSongSelect.nChoosenSongDifficulty[0]);
if (OpenTaiko.ConfigIni.nPlayerCount >= 2)
@ -401,8 +383,8 @@ namespace OpenTaiko {
if (OpenTaiko.DTX.listErrors.Count != 0) {
string message = "";
foreach (var text in OpenTaiko.DTX.listErrors) {
OpenTaiko.VisualLogManager.PushCard(CVisualLogManager.ELogCardType.LogError, text);
//System.Windows.Forms.MessageBox.Show(text, "譜面にエラーが見つかりました");
OpenTaiko.VisualLogManager.PushCard(CVisualLogManager.ELogCardType.LogError, text);
//System.Windows.Forms.MessageBox.Show(text, "譜面にエラーが見つかりました");
}
}
@ -412,9 +394,9 @@ namespace OpenTaiko {
Trace.TraceInformation("---------------------------");
span = (TimeSpan)(DateTime.Now - timeBeginLoad);
Trace.TraceInformation("Chart loading time: {0}", span.ToString());
// 段位認定モード用。
Trace.TraceInformation("Chart loading time: {0}", span.ToString());
// 段位認定モード用。
#region [dan setup]
if (OpenTaiko.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Dan && OpenTaiko.DTX.List_DanSongs != null) {
@ -439,7 +421,7 @@ namespace OpenTaiko {
}
}
}
}
#endregion
}
@ -456,9 +438,9 @@ namespace OpenTaiko {
}
case CStage.EPhase.SongLoading_LoadWAVFile: {
int looptime = (OpenTaiko.ConfigIni.bEnableVSync) ? 3 : 1; // VSyncWait=ON時は1frame(1/60s)あたり3つ読むようにする
int looptime = (OpenTaiko.ConfigIni.bEnableVSync) ? 3 : 1; // VSyncWait=ON時は1frame(1/60s)あたり3つ読むようにする
for (int i = 0; i < looptime && nWAVcount <= OpenTaiko.DTX.listWAV.Count; i++) {
if (OpenTaiko.DTX.listWAV[nWAVcount].listこのWAVを使用するチャンネル番号の集合.Count > 0) // #28674 2012.5.8 yyagi
if (OpenTaiko.DTX.listWAV[nWAVcount].listこのWAVを使用するチャンネル番号の集合.Count > 0) // #28674 2012.5.8 yyagi
{
OpenTaiko.DTX.tWAVの読み込み(OpenTaiko.DTX.listWAV[nWAVcount]);
}
@ -508,8 +490,8 @@ namespace OpenTaiko {
}
OpenTaiko.Timer.Update();
//CSound管理.rc演奏用タイマ.t更新();
OpenTaiko.Timer.Update();
//CSound管理.rc演奏用タイマ.t更新();
base.ePhaseID = CStage.EPhase.SongLoading_WaitForSoundSystemBGM;
return (int)ESongLoadingScreenReturnValue.Continue;
}
@ -517,10 +499,10 @@ namespace OpenTaiko {
case CStage.EPhase.SongLoading_WaitForSoundSystemBGM: {
long nCurrentTime = OpenTaiko.Timer.NowTime;
if (nCurrentTime < this.nBGM再生開始時刻)
this.nBGM再生開始時刻 = nCurrentTime;
// if ( ( nCurrentTime - this.nBGM再生開始時刻 ) > ( this.nBGMの総再生時間ms - 1000 ) )
if ((nCurrentTime - this.nBGM再生開始時刻) >= (this.nBGMの総再生時間ms)) // #27787 2012.3.10 yyagi 1000ms == フェードイン分の時間
this.nBGM再生開始時刻 = nCurrentTime;
// if ( ( nCurrentTime - this.nBGM再生開始時刻 ) > ( this.nBGMの総再生時間ms - 1000 ) )
if ((nCurrentTime - this.nBGM再生開始時刻) >= (this.nBGMの総再生時間ms)) // #27787 2012.3.10 yyagi 1000ms == フェードイン分の時間
{
base.ePhaseID = CStage.EPhase.Common_FADEOUT;
}
@ -528,7 +510,7 @@ namespace OpenTaiko {
}
case CStage.EPhase.Common_FADEOUT:
if (this.ct待機.IsUnEnded) // DTXVモード時は、フェードアウト省略
if (this.ct待機.IsUnEnded) // DTXVモード時は、フェードアウト省略
return (int)ESongLoadingScreenReturnValue.Continue;
if (this.sd読み込み音 != null) {
@ -537,27 +519,27 @@ namespace OpenTaiko {
return (int)ESongLoadingScreenReturnValue.LoadComplete;
}
return (int)ESongLoadingScreenReturnValue.Continue;
}
}
/// <summary>
/// ESC押下時、trueを返す
/// </summary>
/// <returns></returns>
protected bool tキー入力() {
IInputDevice keyboard = OpenTaiko.InputManager.Keyboard;
if (keyboard.KeyPressed((int)SlimDXKeys.Key.Escape)) // escape (exit)
if (keyboard.KeyPressed((int)SlimDXKeys.Key.Escape)) // escape (exit)
{
return true;
}
return false;
}
// その他
}
// その他
#region [ private ]
//-----------------
//private CActFIFOBlack actFI;
//private CActFIFOBlack actFO;
//-----------------
//private CActFIFOBlack actFI;
//private CActFIFOBlack actFO;
private long nBGMの総再生時間ms;
private long nBGM再生開始時刻;
private CSound sd読み込み音;
@ -566,8 +548,8 @@ namespace OpenTaiko {
private string strサブタイトル;
private CTexture txタイトル;
private CTexture txサブタイトル;
private CTexture tx背景;
//private CTexture txSongnamePlate;
private CTexture tx背景;
//private CTexture txSongnamePlate;
private DateTime timeBeginLoad;
private DateTime timeBeginLoadWAV;
private int nWAVcount;
@ -578,8 +560,8 @@ namespace OpenTaiko {
private CCachedFontRenderer pfSUBTITLE;
private CCachedFontRenderer pfDanTitle = null;
private CCachedFontRenderer pfDanSubTitle = null;
//-----------------
private CCachedFontRenderer pfDanSubTitle = null;
//-----------------
#endregion
}
}