1
0
mirror of synced 2024-11-23 23:21:06 +01:00

remove deprecated DTX plugin references

This commit is contained in:
0auBSQ 2024-10-22 05:33:49 +09:00
parent b28c2f6c56
commit 4957d54710
9 changed files with 251 additions and 796 deletions

View File

@ -1,5 +1,4 @@
using System.Diagnostics;
using System.Drawing;
using System.Globalization;
using System.Net.NetworkInformation;
using System.Reflection;
@ -370,7 +369,6 @@ namespace OpenTaiko {
get;
private set;
}
internal static IPluginActivity act現在入力を占有中のプラグイン = null;
public bool b次のタイミングで垂直帰線同期切り替えを行う {
get;
set;
@ -379,22 +377,6 @@ namespace OpenTaiko {
get;
set;
}
public CPluginHost PluginHost {
get;
private set;
}
public List<STPlugin> PluginList = new List<STPlugin>();
public struct STPlugin {
public IPluginActivity plugin;
public string pluginDirectory;
public string assemblyName;
public Version Version;
}
private static Size currentClientSize // #23510 2010.10.27 add yyagi to keep current window size
{
get;
set;
}
public static DiscordRpcClient DiscordClient;
// 0 : 1P, 1 : 2P
@ -550,24 +532,12 @@ namespace OpenTaiko {
foreach (CActivity activity in this.listトップレベルActivities)
activity.CreateUnmanagedResource();
}
foreach (STPlugin st in this.PluginList) {
Directory.SetCurrentDirectory(st.pluginDirectory);
st.plugin.OnUnmanagedリソースの作成();
Directory.SetCurrentDirectory(OpenTaiko.strEXEのあるフォルダ);
}
}
protected override void UnloadContent() {
if (this.listトップレベルActivities != null) {
foreach (CActivity activity in this.listトップレベルActivities)
activity.ReleaseUnmanagedResource();
}
foreach (STPlugin st in this.PluginList) {
Directory.SetCurrentDirectory(st.pluginDirectory);
st.plugin.OnUnmanagedリソースの解放();
Directory.SetCurrentDirectory(OpenTaiko.strEXEのあるフォルダ);
}
}
protected override void OnExiting() {
ConfigIni.nWindowBaseXPosition = WindowPosition.X;
@ -607,22 +577,6 @@ namespace OpenTaiko {
OpenTaiko.NamePlate.lcNamePlate.Update();
this.n進行描画の戻り値 = (r現在のステージ != null) ? r現在のステージ.Draw() : 0;
#region [ ]
//---------------------
foreach (STPlugin sp in this.PluginList) {
Directory.SetCurrentDirectory(sp.pluginDirectory);
if (OpenTaiko.act現在入力を占有中のプラグイン == null || OpenTaiko.act現在入力を占有中のプラグイン == sp.plugin)
sp.plugin.On進行描画(OpenTaiko.Pad, OpenTaiko.InputManager.Keyboard);
else
sp.plugin.On進行描画(null, null);
Directory.SetCurrentDirectory(OpenTaiko.strEXEのあるフォルダ);
}
//---------------------
#endregion
CScoreIni scoreIni = null;
#region [ / ]
@ -726,11 +680,6 @@ namespace OpenTaiko {
}
r直前のステージ = r現在のステージ;
r現在のステージ = stageタイトル;
foreach (STPlugin pg in this.PluginList) {
Directory.SetCurrentDirectory(pg.pluginDirectory);
pg.plugin.Onステージ変更();
Directory.SetCurrentDirectory(OpenTaiko.strEXEのあるフォルダ);
}
this.tガベージコレクションを実行する();
}
@ -940,12 +889,6 @@ namespace OpenTaiko {
#endregion
break;
}
foreach (STPlugin pg in this.PluginList) {
Directory.SetCurrentDirectory(pg.pluginDirectory);
pg.plugin.Onステージ変更();
Directory.SetCurrentDirectory(OpenTaiko.strEXEのあるフォルダ);
}
//-----------------------------
@ -976,12 +919,6 @@ namespace OpenTaiko {
r直前のステージ = r現在のステージ;
r現在のステージ = stageタイトル;
foreach (STPlugin pg in this.PluginList) {
Directory.SetCurrentDirectory(pg.pluginDirectory);
pg.plugin.Onステージ変更();
Directory.SetCurrentDirectory(OpenTaiko.strEXEのあるフォルダ);
}
this.tガベージコレクションを実行する();
break;
//-----------------------------
@ -1005,12 +942,6 @@ namespace OpenTaiko {
r直前のステージ = r現在のステージ;
r現在のステージ = stageSongSelect;
foreach (STPlugin pg in this.PluginList) {
Directory.SetCurrentDirectory(pg.pluginDirectory);
pg.plugin.Onステージ変更();
Directory.SetCurrentDirectory(OpenTaiko.strEXEのあるフォルダ);
}
this.tガベージコレクションを実行する();
break;
//-----------------------------
@ -1051,16 +982,6 @@ namespace OpenTaiko {
ConfigIni.nPlayerCount = ConfigIni.nPreviousPlayerCount;
ConfigIni.bAIBattleMode = false;
}
/*
Skin.bgm選曲画面イン.t停止する();
Skin.bgm選曲画面.t停止する();
*/
foreach (STPlugin pg in this.PluginList) {
Directory.SetCurrentDirectory(pg.pluginDirectory);
pg.plugin.Onステージ変更();
Directory.SetCurrentDirectory(OpenTaiko.strEXEのあるフォルダ);
}
this.tガベージコレクションを実行する();
break;
@ -1092,12 +1013,6 @@ namespace OpenTaiko {
CSongSelectSongManager.stopSong();
CSongSelectSongManager.enable();
foreach (STPlugin pg in this.PluginList) {
Directory.SetCurrentDirectory(pg.pluginDirectory);
pg.plugin.Onステージ変更();
Directory.SetCurrentDirectory(OpenTaiko.strEXEのあるフォルダ);
}
this.tガベージコレクションを実行する();
break;
//-----------------------------
@ -1146,12 +1061,6 @@ namespace OpenTaiko {
CSongSelectSongManager.stopSong();
CSongSelectSongManager.enable();
foreach (STPlugin pg in this.PluginList) {
Directory.SetCurrentDirectory(pg.pluginDirectory);
pg.plugin.Onステージ変更();
Directory.SetCurrentDirectory(OpenTaiko.strEXEのあるフォルダ);
}
this.tガベージコレクションを実行する();
break;
//-----------------------------
@ -1207,12 +1116,6 @@ namespace OpenTaiko {
CSongSelectSongManager.stopSong();
CSongSelectSongManager.enable();
foreach (STPlugin pg in this.PluginList) {
Directory.SetCurrentDirectory(pg.pluginDirectory);
pg.plugin.Onステージ変更();
Directory.SetCurrentDirectory(OpenTaiko.strEXEのあるフォルダ);
}
this.tガベージコレクションを実行する();
break;
//-----------------------------
@ -1237,12 +1140,6 @@ namespace OpenTaiko {
r直前のステージ = r現在のステージ;
r現在のステージ = stage曲読み込み;
foreach (STPlugin pg in this.PluginList) {
Directory.SetCurrentDirectory(pg.pluginDirectory);
pg.plugin.Onステージ変更();
Directory.SetCurrentDirectory(OpenTaiko.strEXEのあるフォルダ);
}
this.tガベージコレクションを実行する();
break;
//-----------------------------
@ -1275,12 +1172,6 @@ namespace OpenTaiko {
CSongSelectSongManager.stopSong();
CSongSelectSongManager.enable();
foreach (STPlugin pg in this.PluginList) {
Directory.SetCurrentDirectory(pg.pluginDirectory);
pg.plugin.Onステージ変更();
Directory.SetCurrentDirectory(OpenTaiko.strEXEのあるフォルダ);
}
this.tガベージコレクションを実行する();
break;
//-----------------------------
@ -1341,12 +1232,6 @@ namespace OpenTaiko {
// Seek latest registered song select screen
r現在のステージ = OpenTaiko.latestSongSelect;
foreach (STPlugin pg in this.PluginList) {
Directory.SetCurrentDirectory(pg.pluginDirectory);
pg.plugin.Onステージ変更();
Directory.SetCurrentDirectory(OpenTaiko.strEXEのあるフォルダ);
}
break;
}
#endregion
@ -1367,11 +1252,6 @@ for (int i = 0; i < 3; i++) {
#endif
r直前のステージ = r現在のステージ;
r現在のステージ = stage演奏ドラム画面;
foreach (STPlugin pg in this.PluginList) {
Directory.SetCurrentDirectory(pg.pluginDirectory);
pg.plugin.Onステージ変更();
Directory.SetCurrentDirectory(OpenTaiko.strEXEのあるフォルダ);
}
this.tガベージコレクションを実行する();
}
@ -1417,16 +1297,6 @@ for (int i = 0; i < 3; i++) {
#region [ ]
//-----------------------------
#region [ On演奏キャンセル() ]
//---------------------
foreach (STPlugin pg in this.PluginList) {
Directory.SetCurrentDirectory(pg.pluginDirectory);
pg.plugin.On演奏キャンセル(scoreIni);
Directory.SetCurrentDirectory(OpenTaiko.strEXEのあるフォルダ);
}
//---------------------
#endregion
DTX.t全チップの再生停止();
DTX.DeActivate();
DTX.ReleaseManagedResource();
@ -1437,27 +1307,6 @@ for (int i = 0; i < 3; i++) {
r現在のステージ.ReleaseUnmanagedResource();
}
// Play cancelled return screen
/*
if(stage選曲.n確定された曲の難易度[0] == (int)Difficulty.Dan)
{
Trace.TraceInformation("----------------------");
Trace.TraceInformation("■ 段位選択");
stage段位選択.On活性化();
r直前のステージ = r現在のステージ;
r現在のステージ = stage段位選択;
}
else
{
Trace.TraceInformation("----------------------");
Trace.TraceInformation("■ 選曲");
stage選曲.On活性化();
r直前のステージ = r現在のステージ;
r現在のステージ = stage選曲;
}
*/
Trace.TraceInformation("----------------------");
Trace.TraceInformation("■ Return to song select menu");
OpenTaiko.latestSongSelect.Activate();
@ -1468,17 +1317,7 @@ for (int i = 0; i < 3; i++) {
r直前のステージ = r現在のステージ;
// Seek latest registered song select screen
r現在のステージ = OpenTaiko.latestSongSelect;
#region [ Onステージ変更() ]
//---------------------
foreach (STPlugin pg in this.PluginList) {
Directory.SetCurrentDirectory(pg.pluginDirectory);
pg.plugin.Onステージ変更();
Directory.SetCurrentDirectory(OpenTaiko.strEXEのあるフォルダ);
}
//---------------------
#endregion
r現在のステージ = OpenTaiko.latestSongSelect;
this.tガベージコレクションを実行する();
this.tガベージコレクションを実行する();
@ -1490,16 +1329,6 @@ for (int i = 0; i < 3; i++) {
#region [ (StageFailed) ]
//-----------------------------
#region [ On演奏失敗() ]
//---------------------
foreach (STPlugin pg in this.PluginList) {
Directory.SetCurrentDirectory(pg.pluginDirectory);
pg.plugin.On演奏失敗(scoreIni);
Directory.SetCurrentDirectory(OpenTaiko.strEXEのあるフォルダ);
}
//---------------------
#endregion
DTX.t全チップの再生停止();
DTX.DeActivate();
DTX.ReleaseManagedResource();
@ -1518,17 +1347,7 @@ for (int i = 0; i < 3; i++) {
stageSongSelect.CreateUnmanagedResource();
}
r直前のステージ = r現在のステージ;
r現在のステージ = stageSongSelect;
#region [ Onステージ変更() ]
//---------------------
foreach (STPlugin pg in this.PluginList) {
Directory.SetCurrentDirectory(pg.pluginDirectory);
pg.plugin.Onステージ変更();
Directory.SetCurrentDirectory(OpenTaiko.strEXEのあるフォルダ);
}
//---------------------
#endregion
r現在のステージ = stageSongSelect;
this.tガベージコレクションを実行する();
break;
@ -1541,18 +1360,7 @@ for (int i = 0; i < 3; i++) {
// Fetch the results of the finished play
CScoreIni.C演奏記録 c演奏記録_Drums;
stage演奏ドラム画面.t演奏結果を格納する(out c演奏記録_Drums);
#region [ On演奏クリア() ]
//---------------------
foreach (STPlugin pg in this.PluginList) {
Directory.SetCurrentDirectory(pg.pluginDirectory);
pg.plugin.On演奏クリア(scoreIni);
Directory.SetCurrentDirectory(OpenTaiko.strEXEのあるフォルダ);
}
//---------------------
#endregion
stage演奏ドラム画面.t演奏結果を格納する(out c演奏記録_Drums);
r現在のステージ.DeActivate();
if (!ConfigIni.PreAssetsLoading) {
@ -1568,17 +1376,7 @@ for (int i = 0; i < 3; i++) {
stage結果.CreateUnmanagedResource();
}
r直前のステージ = r現在のステージ;
r現在のステージ = stage結果;
#region [ Onステージ変更() ]
//---------------------
foreach (STPlugin pg in this.PluginList) {
Directory.SetCurrentDirectory(pg.pluginDirectory);
pg.plugin.Onステージ変更();
Directory.SetCurrentDirectory(OpenTaiko.strEXEのあるフォルダ);
}
//---------------------
#endregion
r現在のステージ = stage結果;
break;
//-----------------------------
@ -1640,12 +1438,6 @@ for (int i = 0; i < 3; i++) {
stageSongSelect.NowSong++;
foreach (STPlugin pg in this.PluginList) {
Directory.SetCurrentDirectory(pg.pluginDirectory);
pg.plugin.Onステージ変更();
Directory.SetCurrentDirectory(OpenTaiko.strEXEのあるフォルダ);
}
this.tガベージコレクションを実行する();
}
//-----------------------------
@ -1677,12 +1469,6 @@ for (int i = 0; i < 3; i++) {
CSongSelectSongManager.stopSong();
CSongSelectSongManager.enable();
foreach (STPlugin pg in this.PluginList) {
Directory.SetCurrentDirectory(pg.pluginDirectory);
pg.plugin.Onステージ変更();
Directory.SetCurrentDirectory(OpenTaiko.strEXEのあるフォルダ);
}
this.tガベージコレクションを実行する();
break;
//-----------------------------
@ -1707,12 +1493,6 @@ for (int i = 0; i < 3; i++) {
r直前のステージ = r現在のステージ;
r現在のステージ = stage曲読み込み;
foreach (STPlugin pg in this.PluginList) {
Directory.SetCurrentDirectory(pg.pluginDirectory);
pg.plugin.Onステージ変更();
Directory.SetCurrentDirectory(OpenTaiko.strEXEのあるフォルダ);
}
this.tガベージコレクションを実行する();
break;
//-----------------------------
@ -1780,12 +1560,6 @@ for (int i = 0; i < 3; i++) {
CSongSelectSongManager.stopSong();
CSongSelectSongManager.enable();
foreach (STPlugin pg in this.PluginList) {
Directory.SetCurrentDirectory(pg.pluginDirectory);
pg.plugin.Onステージ変更();
Directory.SetCurrentDirectory(OpenTaiko.strEXEのあるフォルダ);
}
this.tガベージコレクションを実行する();
break;
//-----------------------------
@ -2408,44 +2182,6 @@ for (int i = 0; i < 3; i++) {
this.listトップレベルActivities.Add(stage結果);
this.listトップレベルActivities.Add(stageChangeSkin);
this.listトップレベルActivities.Add(stage終了);
//---------------------
#endregion
#region [ ]
//---------------------
PluginHost = new CPluginHost();
Trace.TraceInformation("Initializing and generating plugins...");
Trace.Indent();
try {
this.tプラグイン検索と生成();
Trace.TraceInformation("Plugin generation and initialization complete.");
} finally {
Trace.Unindent();
}
//---------------------
#endregion
#region [ ]
//---------------------
if (this.PluginList != null && this.PluginList.Count > 0) {
Trace.TraceInformation("Initializing plugin(s)...");
Trace.Indent();
try {
foreach (STPlugin st in this.PluginList) {
Directory.SetCurrentDirectory(st.pluginDirectory);
st.plugin.On初期化(this.PluginHost);
st.plugin.OnManagedリソースの作成();
st.plugin.OnUnmanagedリソースの作成();
Directory.SetCurrentDirectory(OpenTaiko.strEXEのあるフォルダ);
}
Trace.TraceInformation("All plugins have been initialized.");
} catch {
Trace.TraceError("Plugins could not be initialized.");
throw;
} finally {
Trace.Unindent();
}
}
//---------------------
#endregion
@ -2535,27 +2271,7 @@ for (int i = 0; i < 3; i++) {
}
//---------------------
#endregion
#region [ ]
//--------------------- from this point this is where i gave up - tfd500
if (this.PluginList != null && this.PluginList.Count > 0) {
Trace.TraceInformation("Ending all plugins...");
Trace.Indent();
try {
foreach (STPlugin st in this.PluginList) {
Directory.SetCurrentDirectory(st.pluginDirectory);
st.plugin.OnUnmanagedリソースの解放();
st.plugin.OnManagedリソースの解放();
st.plugin.On終了();
Directory.SetCurrentDirectory(OpenTaiko.strEXEのあるフォルダ);
}
PluginHost = null;
Trace.TraceInformation("All plugins have been terminated.");
} finally {
Trace.Unindent();
}
}
//---------------------
#endregion
#region Discordの処理
DiscordClient?.Dispose();
#endregion
@ -2756,17 +2472,6 @@ for (int i = 0; i < 3; i++) {
GC.WaitForPendingFinalizers();
GC.Collect(GC.MaxGeneration);
}
private void tプラグイン検索と生成() {
this.PluginList = new List<STPlugin>();
string PluginActivityName = typeof(IPluginActivity).FullName;
string PluginFolderPath = strEXEのあるフォルダ + "Plugins" + Path.DirectorySeparatorChar;
this.SearchAndGeneratePluginsInFolder(PluginFolderPath, PluginActivityName);
if (this.PluginList.Count > 0)
Trace.TraceInformation(this.PluginList.Count + "Plugins loaded.");
}
private void ChangeResolution(int nWidth, int nHeight) {
GameWindowSize.Width = nWidth;
@ -2800,51 +2505,6 @@ for (int i = 0; i < 3; i++) {
CActSelectPopupMenu.RefleshSkin();
CActSelect段位リスト.RefleshSkin();
}
#region [ Windowイベント処理 ]
private void SearchAndGeneratePluginsInFolder(string PluginFolderPath, string PluginTypeName) {
// 指定されたパスが存在しないとエラー
if (!Directory.Exists(PluginFolderPath)) {
Trace.TraceWarning("The plugin folder does not exist. (" + PluginFolderPath + ")");
return;
}
// (1) すべての *.dll について…
string[] strDLLs = System.IO.Directory.GetFiles(PluginFolderPath, "*.dll");
foreach (string dllName in strDLLs) {
try {
// (1-1) dll をアセンブリとして読み込む。
System.Reflection.Assembly asm = System.Reflection.Assembly.LoadFrom(dllName);
// (1-2) アセンブリ内のすべての型について、プラグインとして有効か調べる
foreach (Type t in asm.GetTypes()) {
// (1-3) ↓クラスであり↓Publicであり↓抽象クラスでなく↓IPlugin型のインスタンスが作れる 型を持っていれば有効
if (t.IsClass && t.IsPublic && !t.IsAbstract && t.GetInterface(PluginTypeName) != null) {
// (1-4) クラス名からインスタンスを作成する
var st = new STPlugin() {
plugin = (IPluginActivity)asm.CreateInstance(t.FullName),
pluginDirectory = Path.GetDirectoryName(dllName),
assemblyName = asm.GetName().Name,
Version = asm.GetName().Version,
};
// (1-5) プラグインリストへ登録
this.PluginList.Add(st);
Trace.TraceInformation("Plugin {0} ({1}, {2}, {3}) has been loaded.", t.FullName, Path.GetFileName(dllName), st.assemblyName, st.Version.ToString());
}
}
} catch (Exception e) {
Trace.TraceError(e.ToString());
Trace.TraceInformation(dllName + "could not be used to generate a plugin. Skipping plugin.");
}
}
// (2) サブフォルダがあれば再帰する
string[] strDirs = Directory.GetDirectories(PluginFolderPath, "*");
foreach (string dir in strDirs)
this.SearchAndGeneratePluginsInFolder(dir + Path.DirectorySeparatorChar, PluginTypeName);
}
//-----------------
#endregion
#endregion
#region [ EXTENDED VARIABLES ]

View File

@ -1,61 +0,0 @@
using System.Drawing;
using FDK;
namespace OpenTaiko {
internal class CPluginHost : IPluginHost {
// Constructor
public CPluginHost() {
this._DTXManiaVersion = new CDTXVersion(OpenTaiko.VERSION);
}
// IPluginHost 実装
public CDTXVersion DTXManiaVersion {
get { return this._DTXManiaVersion; }
}
public CTimer Timer {
get { return OpenTaiko.Timer; }
}
public SoundManager Sound管理 {
get { return OpenTaiko.SoundManager; }
}
public Size ClientSize {
get { return new Size(OpenTaiko.app.Window_.Size.X, OpenTaiko.app.Window_.Size.Y); }
}
public CStage.EStage e現在のステージ {
get { return (OpenTaiko.r現在のステージ != null) ? OpenTaiko.r現在のステージ.eStageID : CStage.EStage.None; }
}
public CStage.EPhase e現在のフェーズ {
get { return (OpenTaiko.r現在のステージ != null) ? OpenTaiko.r現在のステージ.ePhaseID : CStage.EPhase.Common_NORMAL; }
}
public bool t入力を占有する(IPluginActivity act) {
if (OpenTaiko.act現在入力を占有中のプラグイン != null)
return false;
OpenTaiko.act現在入力を占有中のプラグイン = act;
return true;
}
public bool t入力の占有を解除する(IPluginActivity act) {
if (OpenTaiko.act現在入力を占有中のプラグイン == null || OpenTaiko.act現在入力を占有中のプラグイン != act)
return false;
OpenTaiko.act現在入力を占有中のプラグイン = null;
return true;
}
public void tシステムサウンドを再生する(Eシステムサウンド sound) {
if (OpenTaiko.Skin != null)
OpenTaiko.Skin[sound].tPlay();
}
// その他
#region [ private ]
//-----------------
private CDTXVersion _DTXManiaVersion;
//-----------------
#endregion
}
}

View File

@ -1,74 +0,0 @@
namespace OpenTaiko {
/// <summary>
/// <para>Activity プラグインへのインターフェース。</para>
/// <para>DTXMania は、IPluginActivity に対して、以下のライフサイクルを実行します。</para>
/// <para>(1) DTXMania の起動処理の最後セットアップ画面が表示される直前に一度だけ、On初期化()_OnManagedリソースの作成()_OnUnmanagedリソースの作成() をこの順番で1回ずつ呼び出します。</para>
/// <para>(2) DTXMania の終了処理の最初Thank you for playing が消えた直後に一度だけ、OnUnmanagedリソースの解放()_OnManagedリソースの解放()_On終了() をこの順番で1回ずつ呼び出します。</para>
/// <para>(3) DTXMania の起動中、すなわち(1)(2)の間は、どんなシーンであっても、常に On進行描画() を1フレームにつき1回ずつ呼び出します。</para>
/// <para>(4) Direct3D デバイスのリセット時には、デバイスのリセット前に OnUnmanagedリソースの解放() を1回呼び出し、デバイスをリセットしたのち、OnUnmanagedリソースの作成() を1回呼び出します。</para>
/// <para>(5) Direct3D デバイスのロスト時には、デバイスの再生成前に OnUnmanagedリソースの解放()_OnManagedリソースの解放() を1回ずつ呼び出し、デバイスを再生成したのち、OnManagedリソースの作成()_OnUnmanagedリソースの作成() を1回ずつ呼び出します。</para>
/// </summary>
public interface IPluginActivity {
/// <summary>
/// <para>プラグインの初期化を行います。</para>
/// <para>DTXMania の起動処理の最後セットアップ画面が表示される直前に、DTXMania から一度だけ呼び出されます。</para>
/// <param name="PluginHost">プラグインが、ホストDTXManiaの情報にアクセスするためのオブジェクト。</param>
/// </summary>
void On初期化(global::OpenTaiko.IPluginHost PluginHost);
/// <summary>
/// <para>プラグインの終了処理を行います。</para>
/// <para>DTXMania の終了処理の最初Thank you for playing が消えた直後に、DTXMania から一度だけ呼び出されます。</para>
/// </summary>
void On終了();
/// <summary>
/// Managed リソースを作成します。
/// </summary>
void OnManagedリソースの作成();
/// <summary>
/// Unmanaged リソースを作成します。
/// </summary>
void OnUnmanagedリソースの作成();
/// <summary>
/// Unmanaged リソースを解放します。
/// </summary>
void OnUnmanagedリソースの解放();
/// <summary>
/// Managed リソースを解放します。
/// </summary>
void OnManagedリソースの解放();
/// <summary>
/// <para>プラグインの進行と描画を行います。</para>
/// <para>※現在の DTXMania では、進行と描画は分離されていません。</para>
/// <para>※BeginScene()/EndScene() は DTXMania 側で行うため、プラグイン側では不要です。</para>
/// <para>※keyboard.tポーリング() は DTXMania 側で行いますのでプラグイン側では行わないで下さい。</para>
/// <param name="pad">パッド入力。他のプラグインが入力占有中である場合は null が渡されます。</param>
/// <param name="keyboard">キーボード入力。他のプラグインが入力占有中である場合は null が渡されます。</param>
/// </summary>
void On進行描画(global::OpenTaiko.CPad pad, FDK.IInputDevice keyboard);
/// <summary>
/// <para>ステージが変わる度に呼び出されます。</para>
/// <para>呼び出しタイミングは、新しいステージの活性化直後かつ描画開始前です。</para>
/// </summary>
void Onステージ変更();
/// <summary>
/// <para>選曲画面で選択曲が変更された場合に呼び出されます。</para>
/// <para>同じ set.def に属する曲の難易度がHH×2で変更された場合でも呼び出されます。</para>
/// <para>ただし、選択が曲でないBOX, BACK, RANDOM など)場合には呼び出されません。</para>
/// </summary>
/// <param name="str選択曲ファイル名">選択されている曲のファイルの名前。絶対パス。</param>
/// <param name="n曲番号inブロック">選択されている曲のブロック内の曲番号(04)。</param>
void On選択曲変更(string str選択曲ファイル名, int n曲番号inブロック);
void On演奏クリア(global::OpenTaiko.CScoreIni scoreIni);
void On演奏失敗(global::OpenTaiko.CScoreIni scoreIni);
void On演奏キャンセル(global::OpenTaiko.CScoreIni scoreIni);
}
}

View File

@ -1,57 +0,0 @@

namespace OpenTaiko {
/// <summary>
/// <para>プラグインホスト情報提供インターフェース。</para>
/// <para>プラグインでは、On初期化() で渡されるこのインターフェースオブジェクトを通じて、
/// DTXMania の持つ様々なリソースにアクセスできます。</para>
/// </summary>
public interface IPluginHost {
/// <summary>
/// DTXMania のバージョンを表します。
/// </summary>
global::OpenTaiko.CDTXVersion DTXManiaVersion { get; }
/// <summary>
/// <para>DirectSound の管理クラス。</para>
/// <para>WAV, XA, OGG, MP3 のサウンドファイルから CSound オブジェクトを生成できます。</para>
/// </summary>
FDK.SoundManager Sound管理 { get; }
/// <summary>
/// 描画エリアのサイズを返します(ピクセル単位)。
/// </summary>
System.Drawing.Size ClientSize { get; }
/// <summary>
/// 現在のステージのIDを表します。
/// </summary>
global::OpenTaiko.CStage.EStage e現在のステージ { get; }
/// <summary>
/// 現在のステージにおけるフェーズのIDを表します。
/// </summary>
global::OpenTaiko.CStage.EPhase e現在のフェーズ { get; }
/// <summary>
/// <para>自分以外は入力データを扱ってはならないことを宣言します。</para>
/// <para>DTXMania 本体は入力データのポーリングのみを行い、他のプラグインに対しては、On進行描画() の2つの入力に null を渡します。</para>
/// </summary>
/// <param name="act">宣言するプラグイン(すなわち this を指定する)</param>
/// <returns>占有に成功すれば true を返し、既に誰かが占有中である場合には false を返します。</returns>
bool t入力を占有する(IPluginActivity act);
/// <summary>
/// <para>自分以外が入力データを扱って良いことを宣言します。</para>
/// <para>DTXMania 本体はポーリング以外の入力処理を開始し、他のプラグインに対しては、On進行描画() の2つの引数に有効な値を渡します。</para>
/// </summary>
/// <param name="act">宣言するプラグイン(すなわち this を指定する)</param>
/// <returns>占有解除に成功すれば true、失敗すれば flase を返します。</returns>
bool t入力の占有を解除する(IPluginActivity act);
/// <summary>
/// 指定されたシステムサウンドBGMを再生します。
/// </summary>
/// <param name="sound">再生するシステムサウンドの識別子。</param>
void tシステムサウンドを再生する(Eシステムサウンド sound);
}
}

View File

@ -142,8 +142,7 @@ namespace OpenTaiko {
#region [ ]
if (base.ePhaseID == CStage.EPhase.Common_NORMAL // 通常状態、かつ
&& OpenTaiko.act現在入力を占有中のプラグイン == null) // プラグインの入力占有がない
if (base.ePhaseID == CStage.EPhase.Common_NORMAL) // プラグインの入力占有がない
{
if (OpenTaiko.InputManager.Keyboard.KeyPressed((int)SlimDXKeys.Key.Escape) || OpenTaiko.Pad.bPressed(EInstrumentPad.Drums, EPad.Cancel)) {
if (bモード選択) {

View File

@ -5,15 +5,15 @@ using FDK;
using SkiaSharp;
namespace OpenTaiko {
internal class CStageコンフィグ : CStage {
// Properties
internal class CStageコンフィグ : CStage {
// Properties
public CActDFPFont actFont { get; private set; }
public CActCalibrationMode actCalibrationMode;
// Constructor
public CActCalibrationMode actCalibrationMode;
// Constructor
public CStageコンフィグ() {
CActDFPFont font;
base.eStageID = CStage.EStage.Config;
@ -26,40 +26,40 @@ namespace OpenTaiko {
base.ChildActivities.Add(this.actオプションパネル = new CActオプションパネル());
base.ChildActivities.Add(this.actCalibrationMode = new CActCalibrationMode());
base.IsDeActivated = true;
}
// メソッド
public void tアサイン完了通知() // CONFIGにのみ存在
{ //
this.eItemPanelモード = EItemPanelモード.; //
} //
public void tパッド選択通知(EKeyConfigPart part, EKeyConfigPad pad) //
{ //
this.actKeyAssign.t開始(part, pad, this.actList.ib現在の選択項目.str項目名); //
this.eItemPanelモード = EItemPanelモード.; //
} //
public void t項目変更通知() // OPTIONと共通
{ //
this.t説明文パネルに現在選択されている項目の説明を描画する(); //
} //
// CStage 実装
}
// メソッド
public void tアサイン完了通知() // CONFIGにのみ存在
{ //
this.eItemPanelモード = EItemPanelモード.; //
} //
public void tパッド選択通知(EKeyConfigPart part, EKeyConfigPad pad) //
{ //
this.actKeyAssign.t開始(part, pad, this.actList.ib現在の選択項目.str項目名); //
this.eItemPanelモード = EItemPanelモード.; //
} //
public void t項目変更通知() // OPTIONと共通
{ //
this.t説明文パネルに現在選択されている項目の説明を描画する(); //
} //
// CStage 実装
public override void Activate() {
Trace.TraceInformation("コンフィグステージを活性化します。");
Trace.Indent();
try {
OpenTaiko.Skin.bgmコンフィグ画面.tPlay();
this.n現在のメニュー番号 = 0; //
for (int i = 0; i < 4; i++) //
{ //
this.ctキー反復用[i] = new CCounter(0, 0, 0, OpenTaiko.Timer); //
} //
this.bメニューにフォーカス中 = true; // ここまでOPTIONと共通
this.n現在のメニュー番号 = 0; //
for (int i = 0; i < 4; i++) //
{ //
this.ctキー反復用[i] = new CCounter(0, 0, 0, OpenTaiko.Timer); //
} //
this.bメニューにフォーカス中 = true; // ここまでOPTIONと共通
this.eItemPanelモード = EItemPanelモード.;
ReloadMenus();
@ -77,7 +77,7 @@ namespace OpenTaiko {
Trace.TraceInformation("コンフィグステージの活性化を完了しました。");
Trace.Unindent();
}
base.Activate(); // 2011.3.14 yyagi: On活性化()をtryの中から外に移動
base.Activate(); // 2011.3.14 yyagi: On活性化()をtryの中から外に移動
}
public override void DeActivate() {
Trace.TraceInformation("コンフィグステージを非活性化します。");
@ -85,7 +85,7 @@ namespace OpenTaiko {
try {
OpenTaiko.Skin.bgmコンフィグ画面.tStop();
OpenTaiko.ConfigIni.t書き出し(OpenTaiko.strEXEのあるフォルダ + "Config.ini"); // CONFIGだけ
OpenTaiko.ConfigIni.t書き出し(OpenTaiko.strEXEのあるフォルダ + "Config.ini"); // CONFIGだけ
for (int i = 0; i < 4; i++) {
this.ctキー反復用[i] = null;
}
@ -143,23 +143,23 @@ namespace OpenTaiko {
}
}
public override void CreateManagedResource() // OPTIONと画像以外共通
{
//if (HPrivateFastFont.FontExists(TJAPlayer3.Skin.FontName))
//{
// this.ftフォント = new CCachedFontRenderer(TJAPlayer3.Skin.FontName, (int)TJAPlayer3.Skin.Config_Font_Scale_Description, CFontRenderer.FontStyle.Bold);
//}
//else
//{
// this.ftフォント = new CCachedFontRenderer(CFontRenderer.DefaultFontName, (int)TJAPlayer3.Skin.Config_Font_Scale_Description, CFontRenderer.FontStyle.Bold);
//}
public override void CreateManagedResource() // OPTIONと画像以外共通
{
//if (HPrivateFastFont.FontExists(TJAPlayer3.Skin.FontName))
//{
// this.ftフォント = new CCachedFontRenderer(TJAPlayer3.Skin.FontName, (int)TJAPlayer3.Skin.Config_Font_Scale_Description, CFontRenderer.FontStyle.Bold);
//}
//else
//{
// this.ftフォント = new CCachedFontRenderer(CFontRenderer.DefaultFontName, (int)TJAPlayer3.Skin.Config_Font_Scale_Description, CFontRenderer.FontStyle.Bold);
//}
this.ftフォント = HPrivateFastFont.tInstantiateMainFont((int)OpenTaiko.Skin.Config_Font_Scale_Description, CFontRenderer.FontStyle.Bold);
OpenTaiko.Tx.Config_Cursor = OpenTaiko.tテクスチャの生成(CSkin.Path($"{TextureLoader.BASE}{TextureLoader.CONFIG}Cursor.png"));
//ctBackgroundAnime = new CCounter(0, TJAPlayer3.Tx.Config_Background.szテクスチャサイズ.Width, 20, TJAPlayer3.Timer);
OpenTaiko.Tx.Config_Cursor = OpenTaiko.tテクスチャの生成(CSkin.Path($"{TextureLoader.BASE}{TextureLoader.CONFIG}Cursor.png"));
//ctBackgroundAnime = new CCounter(0, TJAPlayer3.Tx.Config_Background.szテクスチャサイズ.Width, 20, TJAPlayer3.Timer);
/*
string[] strMenuItem = {
CLangManager.LangInstance.GetString(10085),
@ -183,20 +183,20 @@ namespace OpenTaiko {
}
}
}
*/
*/
base.CreateManagedResource();
}
public override void ReleaseManagedResource() // OPTIONと同じ(COnfig.iniの書き出しタイミングのみ異なるが、無視して良い)
public override void ReleaseManagedResource() // OPTIONと同じ(COnfig.iniの書き出しタイミングのみ異なるが、無視して良い)
{
if (this.ftフォント != null) {
this.ftフォント.Dispose();
this.ftフォント = null;
}
//CDTXMania.tテクスチャの解放( ref this.tx背景 );
//CDTXMania.tテクスチャの解放( ref this.tx上部パネル );
//CDTXMania.tテクスチャの解放( ref this.tx下部パネル );
//CDTXMania.tテクスチャの解放( ref this.txMenuカーソル );
}
//CDTXMania.tテクスチャの解放( ref this.tx背景 );
//CDTXMania.tテクスチャの解放( ref this.tx上部パネル );
//CDTXMania.tテクスチャの解放( ref this.tx下部パネル );
//CDTXMania.tテクスチャの解放( ref this.txMenuカーソル );
OpenTaiko.tテクスチャの解放(ref this.tx説明文パネル);
base.ReleaseManagedResource();
}
@ -208,31 +208,31 @@ namespace OpenTaiko {
base.ePhaseID = CStage.EPhase.Common_FADEIN;
this.actFIFO.tフェードイン開始();
base.IsFirstDraw = false;
}
//ctBackgroundAnime.t進行Loop();
// 描画
}
//ctBackgroundAnime.t進行Loop();
// 描画
#region [ Background ]
//---------------------
//---------------------
/*
for(int i = 0; i < 2; i++)
if (TJAPlayer3.Tx.Config_Background != null )
TJAPlayer3.Tx.Config_Background.t2D描画( 0 + -(TJAPlayer3.Tx.Config_Background.szテクスチャサイズ.Width * i) + ctBackgroundAnime.n現在の値, 0 );
if(TJAPlayer3.Tx.Config_Header != null )
TJAPlayer3.Tx.Config_Header.t2D描画( 0, 0 );
*/
*/
Background.Update();
Background.Draw();
//---------------------
Background.Draw();
//---------------------
#endregion
#region [ Menu Cursor ]
//---------------------
if (OpenTaiko.Tx.Config_Cursor != null) {
//---------------------
if (OpenTaiko.Tx.Config_Cursor != null) {
#region Old
/*
Rectangle rectangle;
@ -253,63 +253,63 @@ namespace OpenTaiko {
TJAPlayer3.Tx.TJAPlayer3.Tx.Config_Cursor.t2D描画( x, y, rectangle );
x += rectangle.Width;
}
*/
*/
#endregion
int x = OpenTaiko.Skin.Config_Item_X[this.n現在のメニュー番号];
int y = OpenTaiko.Skin.Config_Item_Y[this.n現在のメニュー番号];
int width = OpenTaiko.Tx.Config_Cursor.sz画像サイズ.Width / 3;
int height = OpenTaiko.Tx.Config_Cursor.sz画像サイズ.Height;
int move = OpenTaiko.Skin.Config_Item_Width;
//Left
int move = OpenTaiko.Skin.Config_Item_Width;
//Left
OpenTaiko.Tx.Config_Cursor.t2D中心基準描画(x - (width / 2) - move, y,
new Rectangle(0, 0, width, height));
//Right
new Rectangle(0, 0, width, height));
//Right
OpenTaiko.Tx.Config_Cursor.t2D中心基準描画(x + (width / 2) + move, y,
new Rectangle(width * 2, 0, width, height));
//Center
new Rectangle(width * 2, 0, width, height));
//Center
OpenTaiko.Tx.Config_Cursor.vcScaleRatio.X = (move / (float)width) * 2.0f;
OpenTaiko.Tx.Config_Cursor.t2D拡大率考慮中央基準描画(x, y,
new Rectangle(width, 0, width, height));
OpenTaiko.Tx.Config_Cursor.vcScaleRatio.X = 1.0f;
}
//---------------------
}
//---------------------
#endregion
#region [ Menu ]
//---------------------
//int menuY = 162 - 22 + 13;
//int stepY = 39;
for (int i = 0; i < txMenuItemLeft.GetLength(0); i++) {
//Bitmap bmpStr = (this.n現在のメニュー番号 == i) ?
// prvFont.DrawPrivateFont( strMenuItem[ i ], Color.White, Color.Black, Color.Yellow, Color.OrangeRed ) :
// prvFont.DrawPrivateFont( strMenuItem[ i ], Color.White, Color.Black );
//txMenuItemLeft = CDTXMania.tテクスチャの生成( bmpStr, false );
//---------------------
//int menuY = 162 - 22 + 13;
//int stepY = 39;
for (int i = 0; i < txMenuItemLeft.GetLength(0); i++) {
//Bitmap bmpStr = (this.n現在のメニュー番号 == i) ?
// prvFont.DrawPrivateFont( strMenuItem[ i ], Color.White, Color.Black, Color.Yellow, Color.OrangeRed ) :
// prvFont.DrawPrivateFont( strMenuItem[ i ], Color.White, Color.Black );
//txMenuItemLeft = CDTXMania.tテクスチャの生成( bmpStr, false );
int flag = (this.n現在のメニュー番号 == i) ? 1 : 0;
txMenuItemLeft[i, flag].t2D中心基準描画(OpenTaiko.Skin.Config_Item_X[i] + OpenTaiko.Skin.Config_Item_Font_Offset[0], OpenTaiko.Skin.Config_Item_Y[i] + OpenTaiko.Skin.Config_Item_Font_Offset[1]); //55
//txMenuItem.Dispose();
//menuY += stepY;
}
//---------------------
txMenuItemLeft[i, flag].t2D中心基準描画(OpenTaiko.Skin.Config_Item_X[i] + OpenTaiko.Skin.Config_Item_Font_Offset[0], OpenTaiko.Skin.Config_Item_Y[i] + OpenTaiko.Skin.Config_Item_Font_Offset[1]); //55
//txMenuItem.Dispose();
//menuY += stepY;
}
//---------------------
#endregion
#region [ Explanation Panel ]
//---------------------
//---------------------
if (this.tx説明文パネル != null)
this.tx説明文パネル.t2D描画(OpenTaiko.Skin.Config_ExplanationPanel[0], OpenTaiko.Skin.Config_ExplanationPanel[1]);
//---------------------
this.tx説明文パネル.t2D描画(OpenTaiko.Skin.Config_ExplanationPanel[0], OpenTaiko.Skin.Config_ExplanationPanel[1]);
//---------------------
#endregion
#region [ Item ]
//---------------------
//---------------------
switch (this.eItemPanelモード) {
case EItemPanelモード.:
this.actList.t進行描画(!this.bメニューにフォーカス中);
@ -318,31 +318,31 @@ namespace OpenTaiko {
case EItemPanelモード.:
this.actKeyAssign.Draw();
break;
}
//---------------------
}
//---------------------
#endregion
//#region [ 上部パネル ]
////---------------------
//if( this.tx上部パネル != null )
// this.tx上部パネル.t2D描画( CDTXMania.app.Device, 0, 0 );
////---------------------
//#endregion
//#region [ 下部パネル ]
////---------------------
//if( this.tx下部パネル != null )
// this.tx下部パネル.t2D描画( CDTXMania.app.Device, 0, 720 - this.tx下部パネル.szテクスチャサイズ.Height );
////---------------------
//#endregion
//#region [ 上部パネル ]
////---------------------
//if( this.tx上部パネル != null )
// this.tx上部パネル.t2D描画( CDTXMania.app.Device, 0, 0 );
////---------------------
//#endregion
//#region [ 下部パネル ]
////---------------------
//if( this.tx下部パネル != null )
// this.tx下部パネル.t2D描画( CDTXMania.app.Device, 0, 720 - this.tx下部パネル.szテクスチャサイズ.Height );
////---------------------
//#endregion
#region [ Option Panel ]
//---------------------
//this.actオプションパネル.On進行描画();
//---------------------
//---------------------
//this.actオプションパネル.On進行描画();
//---------------------
#endregion
#region [ FadeOut ]
//---------------------
//---------------------
switch (base.ePhaseID) {
case CStage.EPhase.Common_FADEIN:
if (this.actFIFO.Draw() != 0) {
@ -355,19 +355,18 @@ namespace OpenTaiko {
break;
}
return 1;
}
//---------------------
}
//---------------------
#endregion
#region [ Enumerating Songs ]
// CActEnumSongs側で表示する
// CActEnumSongs側で表示する
#endregion
// キー入力
// キー入力
if ((base.ePhaseID != CStage.EPhase.Common_NORMAL)
|| this.actKeyAssign.bキー入力待ちの最中である
|| OpenTaiko.act現在入力を占有中のプラグイン != null)
|| this.actKeyAssign.bキー入力待ちの最中である)
return 0;
if (actCalibrationMode.IsStarted) {
@ -397,8 +396,8 @@ namespace OpenTaiko {
status_text.t2D_DisplayImage_AnchorCenter(SampleFramework.GameWindowSize.Width / 2, SampleFramework.GameWindowSize.Height / 2);
}
}
}
// 曲データの一覧取得中は、キー入力を無効化する
}
// 曲データの一覧取得中は、キー入力を無効化する
else if (!OpenTaiko.EnumSongs.IsEnumerating || OpenTaiko.actEnumSongs.bコマンドでの曲データ取得 != true) {
if (!OpenTaiko.Skin.bgmコンフィグ画面.bIsPlaying)
OpenTaiko.Skin.bgmコンフィグ画面.tPlay();
@ -410,19 +409,19 @@ namespace OpenTaiko {
OpenTaiko.stageコンフィグ.tアサイン完了通知();
return 0;
}
if (!this.actList.bIsKeyAssignSelected && !this.actList.bIsFocusingParameter) // #24525 2011.3.15 yyagi, #32059 2013.9.17 yyagi
if (!this.actList.bIsKeyAssignSelected && !this.actList.bIsFocusingParameter) // #24525 2011.3.15 yyagi, #32059 2013.9.17 yyagi
{
this.bメニューにフォーカス中 = true;
}
this.t説明文パネルに現在選択されているメニューの説明を描画する();
this.actList.tEsc押下(); // #24525 2011.3.15 yyagi ESC押下時の右メニュー描画用
this.actList.tEsc押下(); // #24525 2011.3.15 yyagi ESC押下時の右メニュー描画用
} else {
this.actFIFO.tフェードアウト開始();
base.ePhaseID = CStage.EPhase.Common_FADEOUT;
}
} else if ((OpenTaiko.Pad.bPressedDGB(EPad.CY) || OpenTaiko.Pad.bPressed(EInstrumentPad.Drums, EPad.RD)) || (OpenTaiko.Pad.bPressed(EInstrumentPad.Drums, EPad.LC) || (OpenTaiko.ConfigIni.bEnterIsNotUsedInKeyAssignments && OpenTaiko.InputManager.Keyboard.KeyPressed((int)SlimDXKeys.Key.Return)))) {
if (this.n現在のメニュー番号 == 2) {
// Exit
if (this.n現在のメニュー番号 == 2) {
// Exit
OpenTaiko.Skin.soundDecideSFX.tPlay();
this.actFIFO.tフェードアウト開始();
base.ePhaseID = CStage.EPhase.Common_FADEOUT;
@ -433,14 +432,14 @@ namespace OpenTaiko {
} else {
switch (this.eItemPanelモード) {
case EItemPanelモード.:
bool bIsKeyAssignSelectedBeforeHitEnter = this.actList.bIsKeyAssignSelected; // #24525 2011.3.15 yyagi
bool bIsKeyAssignSelectedBeforeHitEnter = this.actList.bIsKeyAssignSelected; // #24525 2011.3.15 yyagi
this.actList.tEnter押下();
this.t説明文パネルに現在選択されている項目の説明を描画する();
if (this.actList.b現在選択されている項目はReturnToMenuである) {
this.t説明文パネルに現在選択されているメニューの説明を描画する();
if (bIsKeyAssignSelectedBeforeHitEnter == false) // #24525 2011.3.15 yyagi
if (bIsKeyAssignSelectedBeforeHitEnter == false) // #24525 2011.3.15 yyagi
{
this.bメニューにフォーカス中 = true;
}
@ -465,13 +464,13 @@ namespace OpenTaiko {
}
}
return 0;
}
// その他
}
// その他
#region [ private ]
//-----------------
//-----------------
private enum EItemPanelモード {
,
@ -521,9 +520,9 @@ namespace OpenTaiko {
throw new IndexOutOfRangeException();
}
}
}
//private CCounter ctBackgroundAnime;
}
//private CCounter ctBackgroundAnime;
private CActFIFOWhite actFIFO;
private CActConfigKeyAssign actKeyAssign;
public CActConfigList actList;
@ -534,12 +533,12 @@ namespace OpenTaiko {
private const int DESC_W = 220;
private EItemPanelモード eItemPanelモード;
internal CCachedFontRenderer ftフォント;
private int n現在のメニュー番号;
//private CTexture txMenuカーソル;
//private CTexture tx下部パネル;
//private CTexture tx上部パネル;
private CTexture tx説明文パネル;
//private CTexture tx背景;
private int n現在のメニュー番号;
//private CTexture txMenuカーソル;
//private CTexture tx下部パネル;
//private CTexture tx上部パネル;
private CTexture tx説明文パネル;
//private CTexture tx背景;
private CTexture[,] txMenuItemLeft;
private ScriptBG Background;
@ -632,8 +631,8 @@ namespace OpenTaiko {
}
private void t説明文パネルに現在選択されている項目の説明を描画する() {
try {
var image = new SKBitmap(440, 288); // 説明文領域サイズの縦横 2 倍。(描画時に 0.5 倍で表示する___のは中止。処理速度向上のため。
var image = new SKBitmap(440, 288); // 説明文領域サイズの縦横 2 倍。(描画時に 0.5 倍で表示する___のは中止。処理速度向上のため。
CItemBase item = this.actList.ib現在の選択項目;
if ((item.str説明文 != null) && (item.str説明文.Length > 0)) {
image.Dispose();
@ -649,8 +648,8 @@ namespace OpenTaiko {
Trace.TraceError("説明文パネルテクスチャの作成に失敗しました。");
this.tx説明文パネル = null;
}
}
//-----------------
}
//-----------------
#endregion
}
}

View File

@ -224,12 +224,6 @@ namespace OpenTaiko {
if (c曲リストード != null && cスコア != null && c曲リストード.eード種別 == CSongListNode.ENodeType.SCORE) {
string str選択曲ファイル名 = cスコア..;
int n曲番号inブロック = OpenTaiko.stageSongSelect.actSongList.n現在のアンカ難易度レベルに最も近い難易度レベルを返す(c曲リストード);
foreach (OpenTaiko.STPlugin stPlugin in OpenTaiko.app.PluginList) {
Directory.SetCurrentDirectory(stPlugin.pluginDirectory);
stPlugin.plugin.On選択曲変更(str選択曲ファイル名, n曲番号inブロック);
Directory.SetCurrentDirectory(OpenTaiko.strEXEのあるフォルダ);
}
}
}
//---------------------
@ -707,8 +701,7 @@ namespace OpenTaiko {
#region [ Inputs ]
// キー入力
if (base.ePhaseID == CStage.EPhase.Common_NORMAL
&& OpenTaiko.act現在入力を占有中のプラグイン == null) {
if (base.ePhaseID == CStage.EPhase.Common_NORMAL) {
#region [ CONFIGでMoreShift+F1: CONFIG呼び出し ]
if (actQuickConfig.bGotoDetailConfig) { // 詳細CONFIG呼び出し
actQuickConfig.tDeativatePopupMenu();

View File

@ -613,8 +613,7 @@ namespace OpenTaiko {
// キー入力
if (OpenTaiko.act現在入力を占有中のプラグイン == null)
this.tキー入力();
this.tキー入力();
}

View File

@ -3,7 +3,6 @@ using System.Drawing;
using System.Text;
using DiscordRPC;
using FDK;
using static OpenTaiko.CActSelect曲リスト;
namespace OpenTaiko {
internal class CStage結果 : CStage {
@ -1395,110 +1394,108 @@ namespace OpenTaiko {
// キー入力
if (OpenTaiko.act現在入力を占有中のプラグイン == null) {
if (base.ePhaseID == CStage.EPhase.Common_NORMAL) {
if (OpenTaiko.InputManager.Keyboard.KeyPressed((int)SlimDXKeys.Key.Escape)) {
#region [ Return to song select screen (Faster method) ]
if (base.ePhaseID == CStage.EPhase.Common_NORMAL) {
if (OpenTaiko.InputManager.Keyboard.KeyPressed((int)SlimDXKeys.Key.Escape)) {
#region [ Return to song select screen (Faster method) ]
bgmResultLoop.tStop();
OpenTaiko.Skin.bgmDanResult.tStop();
OpenTaiko.Skin.bgmTowerResult.tStop();
bgmResultLoop.tStop();
OpenTaiko.Skin.bgmDanResult.tStop();
OpenTaiko.Skin.bgmTowerResult.tStop();
OpenTaiko.Skin.soundDecideSFX.tPlay();
actFI.tフェードアウト開始();
if (OpenTaiko.latestSongSelect == OpenTaiko.stageSongSelect)// TJAPlayer3.stage選曲.n確定された曲の難易度[0] != (int)Difficulty.Dan)
if (OpenTaiko.stageSongSelect.rNowSelectedSong.rParentNode != null)
OpenTaiko.stageSongSelect.actSongList.tCloseBOX();
tPostprocessing();
base.ePhaseID = CStage.EPhase.Common_FADEOUT;
this.eフェードアウト完了時の戻り値 = E戻り値.;
#endregion
}
if (((OpenTaiko.Pad.bPressedDGB(EPad.CY)
|| OpenTaiko.Pad.bPressed(EInstrumentPad.Drums, EPad.RD))
|| (OpenTaiko.Pad.bPressed(EInstrumentPad.Drums, EPad.LC)
|| (OpenTaiko.Pad.bPressedDGB(EPad.Decide)
|| OpenTaiko.InputManager.Keyboard.KeyPressed((int)SlimDXKeys.Key.Return))))) {
#region [ Skip animations ]
if (OpenTaiko.stageSongSelect.nChoosenSongDifficulty[0] < (int)Difficulty.Tower
&& this.actParameterPanel.ctMainCounter.CurrentValue < this.actParameterPanel.MountainAppearValue) {
OpenTaiko.Skin.soundDecideSFX.tPlay();
actFI.tフェードアウト開始();
if (OpenTaiko.latestSongSelect == OpenTaiko.stageSongSelect)// TJAPlayer3.stage選曲.n確定された曲の難易度[0] != (int)Difficulty.Dan)
if (OpenTaiko.stageSongSelect.rNowSelectedSong.rParentNode != null)
OpenTaiko.stageSongSelect.actSongList.tCloseBOX();
tPostprocessing();
base.ePhaseID = CStage.EPhase.Common_FADEOUT;
this.eフェードアウト完了時の戻り値 = E戻り値.;
#endregion
this.actParameterPanel.tSkipResultAnimations();
} else if (OpenTaiko.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Dan
&& (ctPhase1 != null && ctPhase1.IsUnEnded)) {
OpenTaiko.Skin.soundDecideSFX.tPlay();
ctPhase1.CurrentValue = (int)ctPhase1.EndValue;
}
if (((OpenTaiko.Pad.bPressedDGB(EPad.CY)
|| OpenTaiko.Pad.bPressed(EInstrumentPad.Drums, EPad.RD))
|| (OpenTaiko.Pad.bPressed(EInstrumentPad.Drums, EPad.LC)
|| (OpenTaiko.Pad.bPressedDGB(EPad.Decide)
|| OpenTaiko.InputManager.Keyboard.KeyPressed((int)SlimDXKeys.Key.Return))))) {
#endregion
#region [ Skip animations ]
if (OpenTaiko.stageSongSelect.nChoosenSongDifficulty[0] < (int)Difficulty.Tower
&& this.actParameterPanel.ctMainCounter.CurrentValue < this.actParameterPanel.MountainAppearValue) {
else {
if ((lcModal?.AnimationFinished() ?? true)) {
OpenTaiko.Skin.soundDecideSFX.tPlay();
this.actParameterPanel.tSkipResultAnimations();
} else if (OpenTaiko.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Dan
&& (ctPhase1 != null && ctPhase1.IsUnEnded)) {
OpenTaiko.Skin.soundDecideSFX.tPlay();
ctPhase1.CurrentValue = (int)ctPhase1.EndValue;
}
#endregion
else {
if ((lcModal?.AnimationFinished() ?? true)) {
OpenTaiko.Skin.soundDecideSFX.tPlay();
if (!mqModals.tAreBothQueuesEmpty()
&& (OpenTaiko.Pad.bPressedDGB(EPad.Decide)
|| OpenTaiko.InputManager.Keyboard.KeyPressed((int)SlimDXKeys.Key.Return))) {
displayedModals = mqModals.tPopModalInOrder();
if (!mqModals.tAreBothQueuesEmpty()
&& (OpenTaiko.Pad.bPressedDGB(EPad.Decide)
|| OpenTaiko.InputManager.Keyboard.KeyPressed((int)SlimDXKeys.Key.Return))) {
displayedModals = mqModals.tPopModalInOrder();
} else if (OpenTaiko.ConfigIni.nPlayerCount == 1 || mqModals.tAreBothQueuesEmpty()) {
} else if (OpenTaiko.ConfigIni.nPlayerCount == 1 || mqModals.tAreBothQueuesEmpty()) {
if (!mqModals.tAreBothQueuesEmpty())
LogNotification.PopError("Unexpected Error: Exited results screen with remaining modals, this is likely due to a Lua script issue.");
if (!mqModals.tAreBothQueuesEmpty())
LogNotification.PopError("Unexpected Error: Exited results screen with remaining modals, this is likely due to a Lua script issue.");
#region [ Return to song select screen ]
#region [ Return to song select screen ]
actFI.tフェードアウト開始();
actFI.tフェードアウト開始();
if (OpenTaiko.latestSongSelect == OpenTaiko.stageSongSelect)
if (OpenTaiko.stageSongSelect.rNowSelectedSong.rParentNode != null)
OpenTaiko.stageSongSelect.actSongList.tCloseBOX();
if (OpenTaiko.latestSongSelect == OpenTaiko.stageSongSelect)
if (OpenTaiko.stageSongSelect.rNowSelectedSong.rParentNode != null)
OpenTaiko.stageSongSelect.actSongList.tCloseBOX();
tPostprocessing();
tPostprocessing();
{
base.ePhaseID = CStage.EPhase.Common_FADEOUT;
this.eフェードアウト完了時の戻り値 = E戻り値.;
bgmResultLoop.tStop();
OpenTaiko.Skin.bgmDanResult.tStop();
OpenTaiko.Skin.bgmTowerResult.tStop();
}
#endregion
{
base.ePhaseID = CStage.EPhase.Common_FADEOUT;
this.eフェードアウト完了時の戻り値 = E戻り値.;
bgmResultLoop.tStop();
OpenTaiko.Skin.bgmDanResult.tStop();
OpenTaiko.Skin.bgmTowerResult.tStop();
}
}
#endregion
}
}
}
}
if (OpenTaiko.InputManager.Keyboard.KeyPressing((int)SlimDXKeys.Key.LeftArrow) ||
OpenTaiko.Pad.bPressed(EInstrumentPad.Drums, EPad.LeftChange) ||
OpenTaiko.InputManager.Keyboard.KeyPressing((int)SlimDXKeys.Key.RightArrow) ||
OpenTaiko.Pad.bPressed(EInstrumentPad.Drums, EPad.RightChange)) {
if (OpenTaiko.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Dan) {
#region [ Phase 2 (Swap freely between Exams and Songs) ]
if (OpenTaiko.InputManager.Keyboard.KeyPressing((int)SlimDXKeys.Key.LeftArrow) ||
OpenTaiko.Pad.bPressed(EInstrumentPad.Drums, EPad.LeftChange) ||
OpenTaiko.InputManager.Keyboard.KeyPressing((int)SlimDXKeys.Key.RightArrow) ||
OpenTaiko.Pad.bPressed(EInstrumentPad.Drums, EPad.RightChange)) {
if (OpenTaiko.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Dan) {
#region [ Phase 2 (Swap freely between Exams and Songs) ]
if (ctPhase1 != null && ctPhase1.IsEnded && (ctPhase2 == null || ctPhase2.IsEnded)) {
ctPhase2 = new CCounter(0, 1280, 0.5f, OpenTaiko.Timer);
ctPhase2.CurrentValue = 0;
if (ctPhase1 != null && ctPhase1.IsEnded && (ctPhase2 == null || ctPhase2.IsEnded)) {
ctPhase2 = new CCounter(0, 1280, 0.5f, OpenTaiko.Timer);
ctPhase2.CurrentValue = 0;
if (examsShift == 0)
examsShift = 1;
else
examsShift = -examsShift;
if (examsShift == 0)
examsShift = 1;
else
examsShift = -examsShift;
OpenTaiko.Skin.soundChangeSFX.tPlay();
}
#endregion
OpenTaiko.Skin.soundChangeSFX.tPlay();
}
#endregion
}
}
}