+++ /dev/null
-using System;\r
-using System.Collections.Generic;\r
-using System.Text;\r
-using System.Diagnostics;\r
-using FDK;\r
-\r
-namespace DTXMania\r
-{\r
- public class CInvisibleChip : IDisposable\r
- {\r
- /// <summary>ミス後表示する時間(ms)</summary>\r
- public int nDisplayTimeMs\r
- {\r
- get;\r
- set;\r
- }\r
- /// <summary>表示期間終了後、フェードアウトする時間</summary>\r
- public int nFadeoutTimeMs\r
- {\r
- get;\r
- set;\r
- }\r
-\r
- #region [ コンストラクタ ]\r
- public CInvisibleChip()\r
- {\r
- Initialize(3000, 2000);\r
- }\r
- /// <summary>\r
- /// コンストラクタ\r
- /// </summary>\r
- /// <param name="_dbDisplayTime">ミス時再表示する時間(秒)</param>\r
- /// <param name="_dbFadeoutTime">再表示後フェードアウトする時間(秒)</param>\r
- public CInvisibleChip(int _nDisplayTimeMs, int _nFadeoutTimeMs)\r
- {\r
- Initialize(_nDisplayTimeMs, _nFadeoutTimeMs);\r
- }\r
- private void Initialize(int _nDisplayTimeMs, int _nFadeoutTimeMs)\r
- {\r
- nDisplayTimeMs = _nDisplayTimeMs;\r
- nFadeoutTimeMs = _nFadeoutTimeMs;\r
- Reset();\r
- }\r
- #endregion\r
-\r
- /// <summary>\r
- /// 内部状態を初期化する\r
- /// </summary>\r
- public void Reset()\r
- {\r
- for (EPart i = EPart.Drums; i <= EPart.Bass; i++)\r
- {\r
- ccounter[i] = new CCounter();\r
- b演奏チップが1つでもバーを通過した[i] = false;\r
- }\r
- }\r
-\r
- /// <summary>\r
- /// まだSemi-Invisibleを開始していなければ、開始する\r
- /// </summary>\r
- /// <param name="eInst"></param>\r
- public void StartSemiInvisible(EPart eInst)\r
- {\r
- if (!b演奏チップが1つでもバーを通過した[eInst])\r
- {\r
- b演奏チップが1つでもバーを通過した[eInst] = true;\r
- if (CDTXMania.Instance.ConfigIni.eSudHidInv[eInst] == ESudHidInv.SemiInv)\r
- {\r
- ShowChipTemporally(eInst);\r
- ccounter[eInst].n現在の値 = nDisplayTimeMs;\r
- }\r
- }\r
- }\r
- /// <summary>\r
- /// 一時的にチップを表示するモードを開始する\r
- /// </summary>\r
- /// <param name="eInst">楽器パート</param>\r
- public void ShowChipTemporally(EPart eInst)\r
- {\r
- ccounter[eInst].t開始(0, nDisplayTimeMs + nFadeoutTimeMs + 1, 1, CDTXMania.Instance.Timer);\r
- }\r
-\r
- /// <summary>\r
- /// チップの表示/非表示の状態\r
- /// </summary>\r
- public enum EChipInvisibleState\r
- {\r
- SHOW, // Missなどしてチップを表示中\r
- FADEOUT, // 表示期間終了後、フェードアウト中\r
- INVISIBLE // 完全非表示\r
- }\r
-\r
- internal EChipInvisibleState SetInvisibleStatus(ref CChip cc)\r
- {\r
- if (cc.e楽器パート == EPart.Unknown)\r
- {\r
- return EChipInvisibleState.SHOW;\r
- }\r
- EChipInvisibleState retcode = EChipInvisibleState.SHOW;\r
-\r
- ccounter[cc.e楽器パート].t進行();\r
-\r
- switch (CDTXMania.Instance.ConfigIni.eSudHidInv[cc.e楽器パート].Value)\r
- {\r
- case ESudHidInv.Off:\r
- cc.b可視 = true;\r
- retcode = EChipInvisibleState.SHOW;\r
- break;\r
-\r
- case ESudHidInv.FullInv:\r
- cc.b可視 = false;\r
- retcode = EChipInvisibleState.INVISIBLE;\r
- break;\r
-\r
- case ESudHidInv.SemiInv:\r
- if (!b演奏チップが1つでもバーを通過した[cc.e楽器パート]) // まだ1つもチップがバーを通過していない時は、チップを表示する\r
- {\r
- cc.b可視 = true;\r
- cc.n透明度 = 255;\r
- return EChipInvisibleState.SHOW;\r
- }\r
-\r
- if (ccounter[cc.e楽器パート].n現在の値 <= 0 || ccounter[cc.e楽器パート].n現在の値 > nDisplayTimeMs + nFadeoutTimeMs)\r
- // まだ一度もMissっていない or フェードアウトしきった後\r
- {\r
- cc.b可視 = false;\r
- cc.n透明度 = 255;\r
- retcode = EChipInvisibleState.INVISIBLE;\r
- }\r
- else if (ccounter[cc.e楽器パート].n現在の値 < nDisplayTimeMs) // 表示期間\r
- {\r
- cc.b可視 = true;\r
- cc.n透明度 = 255;\r
- retcode = EChipInvisibleState.SHOW;\r
- }\r
- else if (ccounter[cc.e楽器パート].n現在の値 < nDisplayTimeMs + nFadeoutTimeMs) // フェードアウト期間\r
- {\r
- cc.b可視 = true;\r
- cc.n透明度 = 255 - (int)(Convert.ToDouble(ccounter[cc.e楽器パート].n現在の値 - nDisplayTimeMs) / nFadeoutTimeMs * 255.0);\r
- retcode = EChipInvisibleState.FADEOUT;\r
- }\r
- break;\r
- default:\r
- cc.b可視 = true;\r
- cc.n透明度 = 255;\r
- retcode = EChipInvisibleState.SHOW;\r
- break;\r
- }\r
- return retcode;\r
- }\r
-\r
- public void Dispose()\r
- {\r
- this.Dispose(true);\r
- GC.SuppressFinalize(this);\r
- }\r
-\r
- protected void Dispose(bool disposeManagedObjects)\r
- {\r
- if (this.bDispose完了済み)\r
- return;\r
-\r
- if (disposeManagedObjects)\r
- {\r
- // (A) Managed リソースの解放\r
- for (EPart i = EPart.Drums; i <= EPart.Bass; i++)\r
- {\r
- // ctInvisibleTimer[ i ].Dispose();\r
- ccounter[i].t停止();\r
- ccounter[i] = null;\r
- }\r
- }\r
-\r
- // (B) Unamanaged リソースの解放\r
-\r
- this.bDispose完了済み = true;\r
- }\r
- ~CInvisibleChip()\r
- {\r
- this.Dispose(false);\r
- }\r
-\r
- private STDGBSValue<CCounter> ccounter;\r
- private bool bDispose完了済み = false;\r
- private STDGBSValue<bool> b演奏チップが1つでもバーを通過した;\r
- }\r
-}\r