diff --git a/OpenTaiko/src/Stages/07.Game/CAct演奏Combo共通.cs b/OpenTaiko/src/Stages/07.Game/CAct演奏Combo共通.cs index 67786c5c..968fe305 100644 --- a/OpenTaiko/src/Stages/07.Game/CAct演奏Combo共通.cs +++ b/OpenTaiko/src/Stages/07.Game/CAct演奏Combo共通.cs @@ -318,9 +318,6 @@ namespace TJAPlayer3 // メソッド - protected virtual void tコンボ表示_ドラム(int nCombo値, int nジャンプインデックス) - { - } private void showComboEffect(int cat, int i, int rightX, int y, int nPlayer) { @@ -601,25 +598,6 @@ namespace TJAPlayer3 #endregion } - protected virtual void tコンボ表示_ギター(int nCombo値, int nジャンプインデックス) - { - } - protected virtual void tコンボ表示_ベース(int nCombo値, int nジャンプインデックス) - { - } - protected void tコンボ表示_ギター(int nCombo値, int n表示中央X, int n表示中央Y, int nジャンプインデックス) - { - - } - protected void tコンボ表示_ベース(int nCombo値, int n表示中央X, int n表示中央Y, int nジャンプインデックス) - { - - } - protected void tコンボ表示_ギターベース(int nCombo値, int n表示中央X, int n表示中央Y, int nジャンプインデックス) - { - } - - // CActivity 実装 public override void Activate() diff --git a/OpenTaiko/src/Stages/07.Game/CAct演奏Danger共通.cs b/OpenTaiko/src/Stages/07.Game/CAct演奏Danger共通.cs deleted file mode 100644 index 971c1147..00000000 --- a/OpenTaiko/src/Stages/07.Game/CAct演奏Danger共通.cs +++ /dev/null @@ -1,63 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Drawing; -using FDK; - -namespace TJAPlayer3 -{ - internal abstract class CAct演奏Danger共通 : CActivity - { - // コンストラクタ - - public CAct演奏Danger共通() - { - base.IsDeActivated = true; - } - - - // CActivity 実装 - - public override void Activate() - { - for ( int i = 0; i < 3; i++ ) - { - this.bDanger中[i] = false; - } -// this.ct移動用 = new CCounter(); -// this.ct透明度用 = new CCounter(); - this.ct移動用 = null; - this.ct透明度用 = null; - - base.Activate(); - } - public override void DeActivate() - { - this.ct移動用 = null; - this.ct透明度用 = null; - base.DeActivate(); - } - - /// - /// DANGER描画 - /// - /// DrumsがDangerならtrue - /// GuitarがDangerならtrue - /// BassがDangerならtrue - /// - public abstract int t進行描画( bool bIsDangerDrums, bool bIsDamgerGuitar, bool bIsDangerBass ); - - - - // その他 - - #region [ private ] - //----------------- - protected bool[] bDanger中 = { false, false, false}; - protected CCounter ct移動用; - protected CCounter ct透明度用; - //----------------- - #endregion - - } -} diff --git a/OpenTaiko/src/Stages/07.Game/CAct演奏ステータスパネル共通.cs b/OpenTaiko/src/Stages/07.Game/CAct演奏ステータスパネル共通.cs deleted file mode 100644 index 78b40a80..00000000 --- a/OpenTaiko/src/Stages/07.Game/CAct演奏ステータスパネル共通.cs +++ /dev/null @@ -1,134 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Runtime.InteropServices; -using System.Drawing; -using System.Diagnostics; -using FDK; - -namespace TJAPlayer3 -{ - internal class CAct演奏ステータスパネル共通 : CActivity - { - // コンストラクタ - public CAct演奏ステータスパネル共通() - { - this.stパネルマップ = new STATUSPANEL[ 12 ]; // yyagi: 以下、手抜きの初期化でスマン - // { "DTXMANIA", 0 }, { "EXTREME", 1 }, ... みたいに書きたいが___ - string[] labels = new string[ 12 ] { - "DTXMANIA", "EXTREME", "ADVANCED", "ADVANCE", "BASIC", "RAW", - "REAL", "EASY", "EX-REAL", "ExREAL", "ExpertReal", "NORMAL" - }; - int[] status = new int[ 12 ] { - 0, 1, 2, 2, 3, 4, 5, 6, 7, 7, 7, 8 - }; - - for ( int i = 0; i < 12; i++ ) - { - this.stパネルマップ[ i ] = new STATUSPANEL(); - this.stパネルマップ[ i ].status = status[ i ]; - this.stパネルマップ[ i ].label = labels[ i ]; - } - - #region [ 旧初期化処理(注釈化) ] - //STATUSPANEL[] statuspanelArray = new STATUSPANEL[ 12 ]; - //STATUSPANEL statuspanel = new STATUSPANEL(); - //statuspanel.status = 0; - //statuspanel.label = "DTXMANIA"; - //statuspanelArray[ 0 ] = statuspanel; - //STATUSPANEL statuspanel2 = new STATUSPANEL(); - //statuspanel2.status = 1; - //statuspanel2.label = "EXTREME"; - //statuspanelArray[ 1 ] = statuspanel2; - //STATUSPANEL statuspanel3 = new STATUSPANEL(); - //statuspanel3.status = 2; - //statuspanel3.label = "ADVANCED"; - //statuspanelArray[ 2 ] = statuspanel3; - //STATUSPANEL statuspanel4 = new STATUSPANEL(); - //statuspanel4.status = 2; - //statuspanel4.label = "ADVANCE"; - //statuspanelArray[ 3 ] = statuspanel4; - //STATUSPANEL statuspanel5 = new STATUSPANEL(); - //statuspanel5.status = 3; - //statuspanel5.label = "BASIC"; - //statuspanelArray[ 4 ] = statuspanel5; - //STATUSPANEL statuspanel6 = new STATUSPANEL(); - //statuspanel6.status = 4; - //statuspanel6.label = "RAW"; - //statuspanelArray[ 5 ] = statuspanel6; - //STATUSPANEL statuspanel7 = new STATUSPANEL(); - //statuspanel7.status = 5; - //statuspanel7.label = "REAL"; - //statuspanelArray[ 6 ] = statuspanel7; - //STATUSPANEL statuspanel8 = new STATUSPANEL(); - //statuspanel8.status = 6; - //statuspanel8.label = "EASY"; - //statuspanelArray[ 7 ] = statuspanel8; - //STATUSPANEL statuspanel9 = new STATUSPANEL(); - //statuspanel9.status = 7; - //statuspanel9.label = "EX-REAL"; - //statuspanelArray[ 8 ] = statuspanel9; - //STATUSPANEL statuspanel10 = new STATUSPANEL(); - //statuspanel10.status = 7; - //statuspanel10.label = "ExREAL"; - //statuspanelArray[ 9 ] = statuspanel10; - //STATUSPANEL statuspanel11 = new STATUSPANEL(); - //statuspanel11.status = 7; - //statuspanel11.label = "ExpertReal"; - //statuspanelArray[ 10 ] = statuspanel11; - //STATUSPANEL statuspanel12 = new STATUSPANEL(); - //statuspanel12.status = 8; - //statuspanel12.label = "NORMAL"; - //statuspanelArray[ 11 ] = statuspanel12; - //this.stパネルマップ = statuspanelArray; - #endregion - base.IsDeActivated = true; - } - - - // メソッド - - public void tラベル名からステータスパネルを決定する( string strラベル名 ) - { - if ( string.IsNullOrEmpty( strラベル名 ) ) - { - this.nStatus = 0; - } - else - { - foreach ( STATUSPANEL statuspanel in this.stパネルマップ ) - { - if ( strラベル名.Equals( statuspanel.label, StringComparison.CurrentCultureIgnoreCase ) ) // #24482 2011.2.17 yyagi ignore case - { - this.nStatus = statuspanel.status; - return; - } - } - this.nStatus = 0; - } - } - - // CActivity 実装 - - public override void Activate() - { - this.nStatus = 0; - base.Activate(); - } - - - #region [ protected ] - //----------------- - [StructLayout( LayoutKind.Sequential )] - protected struct STATUSPANEL - { - public string label; - public int status; - } - - protected int nStatus; - protected STATUSPANEL[] stパネルマップ = null; - //----------------- - #endregion - } -} diff --git a/OpenTaiko/src/Stages/07.Game/CStage演奏画面共通.cs b/OpenTaiko/src/Stages/07.Game/CStage演奏画面共通.cs index 4dc01d67..624782f9 100644 --- a/OpenTaiko/src/Stages/07.Game/CStage演奏画面共通.cs +++ b/OpenTaiko/src/Stages/07.Game/CStage演奏画面共通.cs @@ -356,7 +356,6 @@ namespace TJAPlayer3 cInvisibleChip.Reset(); base.Activate(); - this.tステータスパネルの選択(); this.tパネル文字列の設定(); //this.演奏判定ライン座標(); this.bIsGOGOTIME = new bool[] { false, false, false, false, false }; @@ -774,36 +773,34 @@ namespace TJAPlayer3 public CAct演奏AVI actAVI; public Rainbow Rainbow; public CAct演奏Combo共通 actCombo; - protected CAct演奏Danger共通 actDANGER; //protected CActFIFOBlack actFI; public CActFIFOStart actFI; protected CActFIFOBlack actFO; protected CActFIFOResult actFOClear; public CAct演奏ゲージ共通 actGauge; - public CAct演奏DrumsDancer actDancer; - protected CAct演奏Drums判定文字列 actJudgeString; + public CActImplDancer actDancer; + protected CActImplJudgeText actJudgeString; public TaikoLaneFlash actTaikoLaneFlash; public CAct演奏パネル文字列 actPanel; public CAct演奏演奏情報 actPlayInfo; public CAct演奏スコア共通 actScore; public CAct演奏ステージ失敗 actStageFailed; - protected CAct演奏ステータスパネル共通 actStatusPanels; protected CAct演奏スクロール速度 act譜面スクロール速度; - protected CAct演奏Drums連打 actRoll; - protected CAct演奏Drums風船 actBalloon; - public CAct演奏Drumsキャラクター actChara; - protected CAct演奏Drums連打キャラ actRollChara; - protected CAct演奏Drumsコンボ吹き出し actComboBalloon; + protected CActImplRoll actRoll; + protected CActImplBalloon actBalloon; + public CActImplCharacter actChara; + protected CActImplRollEffect actRollChara; + protected CActImplComboBalloon actComboBalloon; protected CAct演奏Combo音声 actComboVoice; protected CAct演奏PauseMenu actPauseMenu; - public CAct演奏Drumsチップエフェクト actChipEffects; - public CAct演奏DrumsFooter actFooter; - public CAct演奏DrumsRunner actRunner; - public CAct演奏DrumsMob actMob; + public CActImplChipEffects actChipEffects; + public CActImplFooter actFooter; + public CActImplRunner actRunner; + public CActImplMob actMob; public Dan_Cert actDan; public AIBattle actAIBattle; - public CAct演奏DrumsTrainingMode actTokkun; + public CActImplTrainingMode actTokkun; public bool bPAUSE; public bool[] bIsAlreadyCleared; public bool[] bIsAlreadyMaxed; @@ -1328,18 +1325,6 @@ namespace TJAPlayer3 this.nHand[ nPlayer ] = 0; } - protected void tステータスパネルの選択() - { - if ( TJAPlayer3.bコンパクトモード ) - { - this.actStatusPanels.tラベル名からステータスパネルを決定する( null ); - } - else if ( TJAPlayer3.stageSongSelect.rChoosenSong != null ) - { - this.actStatusPanels.tラベル名からステータスパネルを決定する( TJAPlayer3.stageSongSelect.rChoosenSong.ar難易度ラベル[ TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0]] ); - } - } - protected bool tRollProcess( CDTX.CChip pChip, double dbProcess_time, int num, int sort, int Input, int nPlayer ) { if (dbProcess_time >= pChip.n発声時刻ms && dbProcess_time < pChip.nノーツ終了時刻ms) @@ -1513,7 +1498,7 @@ namespace TJAPlayer3 { if (nCurrentKusudamaCount > 0) { - actChara.ChangeAnime(player, CAct演奏Drumsキャラクター.Anime.Kusudama_Breaking, true); + actChara.ChangeAnime(player, CActImplCharacter.Anime.Kusudama_Breaking, true); for(int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) { this.b連打中[i] = true; @@ -1534,7 +1519,7 @@ namespace TJAPlayer3 else { this.b連打中[player] = true; - actChara.ChangeAnime(player, CAct演奏Drumsキャラクター.Anime.Balloon_Breaking, true); + actChara.ChangeAnime(player, CActImplCharacter.Anime.Balloon_Breaking, true); if (this.actBalloon.ct風船アニメ[player].IsUnEnded) @@ -1629,7 +1614,7 @@ namespace TJAPlayer3 actBalloon.KusuBroke(); for(int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) { - actChara.ChangeAnime(i, CAct演奏Drumsキャラクター.Anime.Kusudama_Broke, true); + actChara.ChangeAnime(i, CActImplCharacter.Anime.Kusudama_Broke, true); if (actChara.CharaAction_Balloon_Delay[i] != null) actChara.CharaAction_Balloon_Delay[i] = new CCounter(0, TJAPlayer3.Skin.Characters_Balloon_Delay[actChara.iCurrentCharacter[i]] - 1, 1, TJAPlayer3.Timer); } } @@ -1648,7 +1633,7 @@ namespace TJAPlayer3 //this.actChara.b風船連打中 = false; pChip.b可視 = false; { - actChara.ChangeAnime(player, CAct演奏Drumsキャラクター.Anime.Balloon_Broke, true); + actChara.ChangeAnime(player, CActImplCharacter.Anime.Balloon_Broke, true); if (actChara.CharaAction_Balloon_Delay[player] != null) actChara.CharaAction_Balloon_Delay[player] = new CCounter(0, TJAPlayer3.Skin.Characters_Balloon_Delay[actChara.iCurrentCharacter[player]] - 1, 1, TJAPlayer3.Timer); } } @@ -1977,7 +1962,7 @@ namespace TJAPlayer3 { if(TJAPlayer3.Skin.Characters_Become_Maxed_Ptn[Character] != 0 && actChara.CharaAction_Balloon_Delay[nPlayer].IsEnded) { - this.actChara.ChangeAnime(nPlayer, CAct演奏Drumsキャラクター.Anime.Become_Maxed, true); + this.actChara.ChangeAnime(nPlayer, CActImplCharacter.Anime.Become_Maxed, true); } this.bIsAlreadyMaxed[nPlayer] = true; } @@ -1985,7 +1970,7 @@ namespace TJAPlayer3 { if(TJAPlayer3.Skin.Characters_Become_Cleared_Ptn[Character] != 0 && actChara.CharaAction_Balloon_Delay[nPlayer].IsEnded) { - this.actChara.ChangeAnime(nPlayer, CAct演奏Drumsキャラクター.Anime.Become_Cleared, true); + this.actChara.ChangeAnime(nPlayer, CActImplCharacter.Anime.Become_Cleared, true); } this.bIsAlreadyCleared[nPlayer] = true; TJAPlayer3.stage演奏ドラム画面.actBackground.ClearIn(nPlayer); @@ -2003,7 +1988,7 @@ namespace TJAPlayer3 this.bIsAlreadyMaxed[nPlayer] = false; if(TJAPlayer3.Skin.Characters_SoulOut_Ptn[Character] != 0 && actChara.CharaAction_Balloon_Delay[nPlayer].IsEnded) { - this.actChara.ChangeAnime(nPlayer, CAct演奏Drumsキャラクター.Anime.SoulOut, true); + this.actChara.ChangeAnime(nPlayer, CActImplCharacter.Anime.SoulOut, true); } } else if (!bIsGOGOTIME[nPlayer]) @@ -2012,14 +1997,14 @@ namespace TJAPlayer3 { if(TJAPlayer3.Skin.Characters_MissIn_Ptn[Character] != 0 && actChara.CharaAction_Balloon_Delay[nPlayer].IsEnded) { - this.actChara.ChangeAnime(nPlayer, CAct演奏Drumsキャラクター.Anime.MissIn, true); + this.actChara.ChangeAnime(nPlayer, CActImplCharacter.Anime.MissIn, true); } } else if (Chara_MissCount[nPlayer] == 6 - 1) { if(TJAPlayer3.Skin.Characters_MissDownIn_Ptn[Character] != 0 && actChara.CharaAction_Balloon_Delay[nPlayer].IsEnded) { - this.actChara.ChangeAnime(nPlayer, CAct演奏Drumsキャラクター.Anime.MissDownIn, true); + this.actChara.ChangeAnime(nPlayer, CActImplCharacter.Anime.MissDownIn, true); } } } @@ -2028,7 +2013,7 @@ namespace TJAPlayer3 this.bIsAlreadyCleared[nPlayer] = false; if (TJAPlayer3.Skin.Characters_ClearOut_Ptn[Character] != 0 && actChara.CharaAction_Balloon_Delay[nPlayer].IsEnded) { - this.actChara.ChangeAnime(nPlayer, CAct演奏Drumsキャラクター.Anime.ClearOut, true); + this.actChara.ChangeAnime(nPlayer, CActImplCharacter.Anime.ClearOut, true); } TJAPlayer3.stage演奏ドラム画面.actBackground.ClearOut(nPlayer); @@ -2072,7 +2057,7 @@ namespace TJAPlayer3 { // 魂ゲージMAXではない // ジャンプ_ノーマル - this.actChara.ChangeAnime(nPlayer, CAct演奏Drumsキャラクター.Anime.Return, true); + this.actChara.ChangeAnime(nPlayer, CActImplCharacter.Anime.Return, true); //this.actChara.キャラクター_アクション_10コンボ(); } } @@ -2375,22 +2360,22 @@ namespace TJAPlayer3 // Edit character values here if (!pChip.bGOGOTIME) //2018.03.11 kairera0467 チップに埋め込んだフラグから読み取る { - if (TJAPlayer3.Skin.Characters_10Combo_Ptn[Character] != 0 && this.actChara.eNowAnime[nPlayer] != CAct演奏Drumsキャラクター.Anime.Combo10 && actChara.CharaAction_Balloon_Delay[nPlayer].IsEnded) + if (TJAPlayer3.Skin.Characters_10Combo_Ptn[Character] != 0 && this.actChara.eNowAnime[nPlayer] != CActImplCharacter.Anime.Combo10 && actChara.CharaAction_Balloon_Delay[nPlayer].IsEnded) { if (!HGaugeMethods.UNSAFE_IsRainbow(nPlayer)) { // 魂ゲージMAXではない // ジャンプ_ノーマル - this.actChara.ChangeAnime(nPlayer, CAct演奏Drumsキャラクター.Anime.Combo10, true); + this.actChara.ChangeAnime(nPlayer, CActImplCharacter.Anime.Combo10, true); } } - if (TJAPlayer3.Skin.Characters_10Combo_Maxed_Ptn[Character] != 0 && this.actChara.eNowAnime[nPlayer] != CAct演奏Drumsキャラクター.Anime.Combo10_Max && actChara.CharaAction_Balloon_Delay[nPlayer].IsEnded) + if (TJAPlayer3.Skin.Characters_10Combo_Maxed_Ptn[Character] != 0 && this.actChara.eNowAnime[nPlayer] != CActImplCharacter.Anime.Combo10_Max && actChara.CharaAction_Balloon_Delay[nPlayer].IsEnded) { if (HGaugeMethods.UNSAFE_IsRainbow(nPlayer)) { // 魂ゲージMAX // ジャンプ_MAX - this.actChara.ChangeAnime(nPlayer, CAct演奏Drumsキャラクター.Anime.Combo10_Max, true); + this.actChara.ChangeAnime(nPlayer, CActImplCharacter.Anime.Combo10_Max, true); } } } @@ -3342,8 +3327,6 @@ namespace TJAPlayer3 this.actAVI.t進行描画( x, y ); } } - protected abstract void t進行描画_DANGER(); - protected void t進行描画_STAGEFAILED() { // Transition for failed games @@ -3684,7 +3667,7 @@ namespace TJAPlayer3 for (int p = 0; p < TJAPlayer3.ConfigIni.nPlayerCount; p++) { { - this.actChara.ChangeAnime(p, CAct演奏Drumsキャラクター.Anime.Kusudama_Miss, true); + this.actChara.ChangeAnime(p, CActImplCharacter.Anime.Kusudama_Miss, true); if (actChara.CharaAction_Balloon_Delay[p] != null) actChara.CharaAction_Balloon_Delay[p] = new CCounter(0, TJAPlayer3.Skin.Characters_Balloon_Delay[actChara.iCurrentCharacter[p]] - 1, @@ -3704,7 +3687,7 @@ namespace TJAPlayer3 && chip現在処理中の連打チップ[nPlayer].nRollCount > 0) { { - this.actChara.ChangeAnime(nPlayer, CAct演奏Drumsキャラクター.Anime.Balloon_Miss, true); + this.actChara.ChangeAnime(nPlayer, CActImplCharacter.Anime.Balloon_Miss, true); if (actChara.CharaAction_Balloon_Delay[nPlayer] != null) actChara.CharaAction_Balloon_Delay[nPlayer] = new CCounter(0, TJAPlayer3.Skin.Characters_Balloon_Delay[actChara.iCurrentCharacter[nPlayer]] - 1, @@ -4047,7 +4030,7 @@ namespace TJAPlayer3 { // 魂ゲージMAXではない // ゴーゴースタート_ノーマル - this.actChara.ChangeAnime(nPlayer, CAct演奏Drumsキャラクター.Anime.GoGoStart, true); + this.actChara.ChangeAnime(nPlayer, CActImplCharacter.Anime.GoGoStart, true); //this.actChara.キャラクター_アクション_10コンボ(); } } @@ -4055,7 +4038,7 @@ namespace TJAPlayer3 { if (!HGaugeMethods.UNSAFE_IsRainbow(nPlayer) && HGaugeMethods.UNSAFE_FastNormaCheck(nPlayer)) { - this.actChara.ChangeAnime(nPlayer, CAct演奏Drumsキャラクター.Anime.GoGoStart_Clear, true); + this.actChara.ChangeAnime(nPlayer, CActImplCharacter.Anime.GoGoStart_Clear, true); } } if (TJAPlayer3.Skin.Characters_GoGoStart_Maxed_Ptn[Character] != 0 && actChara.CharaAction_Balloon_Delay[nPlayer].IsEnded) @@ -4064,7 +4047,7 @@ namespace TJAPlayer3 { // 魂ゲージMAX // ゴーゴースタート_MAX - this.actChara.ChangeAnime(nPlayer, CAct演奏Drumsキャラクター.Anime.GoGoStart_Max, true); + this.actChara.ChangeAnime(nPlayer, CActImplCharacter.Anime.GoGoStart_Max, true); } } diff --git a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drums背景.cs b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplBackground.cs similarity index 97% rename from OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drums背景.cs rename to OpenTaiko/src/Stages/07.Game/Taiko/CActImplBackground.cs index e1c436df..671d6534 100644 --- a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drums背景.cs +++ b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplBackground.cs @@ -1,670 +1,670 @@ -using System; -using FDK; -using System.Drawing; -using static TJAPlayer3.CActSelect曲リスト; - -using Color = System.Drawing.Color; -using Rectangle = System.Drawing.Rectangle; -using System.Collections.Generic; - -namespace TJAPlayer3 -{ - internal class CAct演奏Drums背景 : CActivity - { - // 本家っぽい背景を表示させるメソッド。 - // - // 拡張性とかないんで。はい、ヨロシクゥ! - // - public CAct演奏Drums背景() - { - base.IsDeActivated = true; - } - - public void tFadeIn(int player) - { - //this.ct上背景クリアインタイマー[player] = new CCounter(0, 100, 2, TJAPlayer3.Timer); - this.eFadeMode = EFIFOモード.フェードイン; - } - - //public void tFadeOut(int player) - //{ - // this.ct上背景フェードタイマー[player] = new CCounter( 0, 100, 6, CDTXMania.Timer ); - // this.eFadeMode = EFIFOモード.フェードアウト; - //} - - public void ClearIn(int player) - { - /*this.ct上背景クリアインタイマー[player] = new CCounter(0, 100, 2, TJAPlayer3.Timer); - this.ct上背景クリアインタイマー[player].n現在の値 = 0; - this.ct上背景FIFOタイマー = new CCounter(0, 100, 2, TJAPlayer3.Timer); - this.ct上背景FIFOタイマー.n現在の値 = 0;*/ - UpScript?.ClearIn(player); - DownScript?.ClearIn(player); - } - - public void ClearOut(int player) - { - UpScript?.ClearOut(player); - DownScript?.ClearOut(player); - } - - public override void Activate() - { - if (!this.IsDeActivated) - return; - - var bgOrigindir = CSkin.Path($"{TextureLoader.BASE}{TextureLoader.GAME}{TextureLoader.BACKGROUND}"); - var preset = HScenePreset.GetBGPreset(); - if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Tower) - { - bgOrigindir += "Tower"; - } - else if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Dan) - { - bgOrigindir += "Dan"; - } - else if (TJAPlayer3.ConfigIni.bAIBattleMode) - { - bgOrigindir += "AI"; - } - else - { - bgOrigindir += "Normal"; - } - - Random random = new Random(); - - if (System.IO.Directory.Exists($@"{bgOrigindir}{Path.DirectorySeparatorChar}Up")) - { - var upDirs = System.IO.Directory.GetDirectories($@"{bgOrigindir}{Path.DirectorySeparatorChar}Up"); - - // If there is a preset upper background and this preset exists on the skin use it, else random upper background - var _presetPath = (preset != null && preset.UpperBackground != null) ? $@"{bgOrigindir}{Path.DirectorySeparatorChar}Up{Path.DirectorySeparatorChar}" + preset.UpperBackground[random.Next(0, preset.UpperBackground.Length)] : ""; - var upPath = (preset != null && System.IO.Directory.Exists(_presetPath)) - ? _presetPath - : upDirs[random.Next(0, upDirs.Length)]; - - UpScript = new ScriptBG($@"{upPath}{Path.DirectorySeparatorChar}Script.lua"); - UpScript.Init(); - - IsUpNotFound = false; - } - else - { - IsUpNotFound = true; - } - - if (System.IO.Directory.Exists($@"{bgOrigindir}{Path.DirectorySeparatorChar}Down")) - { - var downDirs = System.IO.Directory.GetDirectories($@"{bgOrigindir}{Path.DirectorySeparatorChar}Down"); - - // If there is a preset lower background and this preset exists on the skin use it, else random upper background - var _presetPath = (preset != null && preset.LowerBackground != null) ? $@"{bgOrigindir}{Path.DirectorySeparatorChar}Down{Path.DirectorySeparatorChar}" + preset.LowerBackground[random.Next(0, preset.LowerBackground.Length)] : ""; - var downPath = (preset != null && System.IO.Directory.Exists(_presetPath)) - ? _presetPath - : downDirs[random.Next(0, downDirs.Length)]; - - DownScript = new ScriptBG($@"{downPath}{Path.DirectorySeparatorChar}Script.lua"); - DownScript?.Init(); - - if (DownScript.Exists()) IsDownNotFound = false; - } - else - { - IsDownNotFound = true; - } - - this.pfTowerText = HPrivateFastFont.tInstantiateMainFont(TJAPlayer3.Skin.Game_Tower_Font_TowerText); - - /* - if (!string.IsNullOrEmpty(TJAPlayer3.ConfigIni.FontName)) - { - this.pfTowerText = new CPrivateFastFont(new FontFamily(TJAPlayer3.ConfigIni.FontName), TJAPlayer3.Skin.Game_Tower_Font_TowerText); - } - else - { - this.pfTowerText = new CPrivateFastFont(new FontFamily("MS UI Gothic"), TJAPlayer3.Skin.Game_Tower_Font_TowerText); - } - */ - - this.ttkTouTatsuKaiSuu = new TitleTextureKey(CLangManager.LangInstance.GetString(1000), pfTowerText, Color.White, Color.Black, 700); - this.ttkKai = new TitleTextureKey(CLangManager.LangInstance.GetString(1001), pfTowerText, Color.White, Color.Black, 700); - - this.ct炎 = new CCounter(0, 6, 50, TJAPlayer3.Timer); - - this.currentCharacter = Math.Max(0, Math.Min(TJAPlayer3.SaveFileInstances[0].data.Character, TJAPlayer3.Skin.Characters_Ptn - 1)); - - float resolutionScaleX = TJAPlayer3.Skin.Resolution[0] / (float)TJAPlayer3.Skin.Characters_Resolution[currentCharacter][0]; - float resolutionScaleY = TJAPlayer3.Skin.Resolution[1] / (float)TJAPlayer3.Skin.Characters_Resolution[currentCharacter][1]; - - // Scale tower chara - foreach (CTexture texture in TJAPlayer3.Tx.Characters_Tower_Standing[currentCharacter]) - { - texture.vcScaleRatio.X = resolutionScaleX; - texture.vcScaleRatio.Y = resolutionScaleY; - } - foreach (CTexture texture in TJAPlayer3.Tx.Characters_Tower_Climbing[currentCharacter]) - { - texture.vcScaleRatio.X = resolutionScaleX; - texture.vcScaleRatio.Y = resolutionScaleY; - } - foreach (CTexture texture in TJAPlayer3.Tx.Characters_Tower_Running[currentCharacter]) - { - texture.vcScaleRatio.X = resolutionScaleX; - texture.vcScaleRatio.Y = resolutionScaleY; - } - foreach (CTexture texture in TJAPlayer3.Tx.Characters_Tower_Clear[currentCharacter]) - { - texture.vcScaleRatio.X = resolutionScaleX; - texture.vcScaleRatio.Y = resolutionScaleY; - } - foreach (CTexture texture in TJAPlayer3.Tx.Characters_Tower_Fail[currentCharacter]) - { - texture.vcScaleRatio.X = resolutionScaleX; - texture.vcScaleRatio.Y = resolutionScaleY; - } - foreach (CTexture texture in TJAPlayer3.Tx.Characters_Tower_Standing_Tired[currentCharacter]) - { - texture.vcScaleRatio.X = resolutionScaleX; - texture.vcScaleRatio.Y = resolutionScaleY; - } - foreach (CTexture texture in TJAPlayer3.Tx.Characters_Tower_Climbing_Tired[currentCharacter]) - { - texture.vcScaleRatio.X = resolutionScaleX; - texture.vcScaleRatio.Y = resolutionScaleY; - } - foreach (CTexture texture in TJAPlayer3.Tx.Characters_Tower_Running_Tired[currentCharacter]) - { - texture.vcScaleRatio.X = resolutionScaleX; - texture.vcScaleRatio.Y = resolutionScaleY; - } - foreach (CTexture texture in TJAPlayer3.Tx.Characters_Tower_Clear_Tired[currentCharacter]) - { - texture.vcScaleRatio.X = resolutionScaleX; - texture.vcScaleRatio.Y = resolutionScaleY; - } - - this.ctSlideAnimation = new CCounter(); - this.ctClimbDuration = new CCounter(); - this.ctStandingAnimation = new CCounter(0, 1000, (60000f / (float)(TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM[0] * TJAPlayer3.ConfigIni.SongPlaybackSpeed)) * TJAPlayer3.Skin.Characters_Beat_Tower_Standing[currentCharacter] / TJAPlayer3.Skin.Characters_Tower_Standing_Ptn[currentCharacter], TJAPlayer3.Timer); - this.ctClimbingAnimation = new CCounter(); - this.ctRunningAnimation = new CCounter(); - this.ctClearAnimation = new CCounter(); - this.ctFailAnimation = new CCounter(); - this.ctStandTiredAnimation = new CCounter(); - this.ctClimbTiredAnimation = new CCounter(); - this.ctRunTiredAnimation = new CCounter(); - this.ctClearTiredAnimation = new CCounter(); - - TowerFinished = false; - - base.Activate(); - } - - public override void DeActivate() - { - if (this.IsDeActivated) - return; - - TJAPlayer3.tDisposeSafely(ref UpScript); - TJAPlayer3.tDisposeSafely(ref DownScript); - - TJAPlayer3.tDisposeSafely(ref pfTowerText); - - base.DeActivate(); - } - - public override void CreateManagedResource() - { - base.CreateManagedResource(); - } - - public override void ReleaseManagedResource() - { - base.ReleaseManagedResource(); - } - - public override int Draw() - { - if (base.IsDeActivated) - return 0; - - - //this.ct上背景FIFOタイマー?.t進行(); - - - #region [Tower specific variables declaration] - - float currentFloorPositionMax140 = 0; - - #endregion - - // fNow_Measure_s (/ m) - - #region [Upper background] - - if (!IsUpNotFound) - { - if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) UpScript?.Update(); - UpScript?.Draw(); - if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Tower) - { - #region [Tower animations variables] - - this.bFloorChanged = CFloorManagement.LastRegisteredFloor > 0 && (CFloorManagement.LastRegisteredFloor < TJAPlayer3.stage演奏ドラム画面.actPlayInfo.NowMeasure[0] + 1); - - int maxFloor = TJAPlayer3.stageSongSelect.rChoosenSong.arスコア[5].譜面情報.nTotalFloor; - int nightTime = Math.Max(140, maxFloor / 2); - - currentFloorPositionMax140 = Math.Min(TJAPlayer3.stage演奏ドラム画面.actPlayInfo.NowMeasure[0] / (float)nightTime, 1f); - - #endregion - - #region [Tower background informations] - - if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Tower) - { - TJAPlayer3.stageSongSelect.actSongList.ResolveTitleTexture(ttkTouTatsuKaiSuu).t2D描画(TJAPlayer3.Skin.Game_Tower_Font_TouTatsuKaiSuu[0], TJAPlayer3.Skin.Game_Tower_Font_TouTatsuKaiSuu[1]); - TJAPlayer3.stageSongSelect.actSongList.ResolveTitleTexture(ttkKai).t2D描画(TJAPlayer3.Skin.Game_Tower_Font_Kai[0], TJAPlayer3.Skin.Game_Tower_Font_Kai[1]); - - this.ct炎.TickLoop(); - CFloorManagement.loopFrames(); - - #region [Floor number] - - if (CFloorManagement.CurrentNumberOfLives > 0) - CFloorManagement.LastRegisteredFloor = TJAPlayer3.stage演奏ドラム画面.actPlayInfo.NowMeasure[0] + 1; - - string floorStr = CFloorManagement.LastRegisteredFloor.ToString(); - - int len = floorStr.Length; - - int digitLength = TJAPlayer3.Tx.Taiko_Combo[0].szTextureSize.Width / 10; - - TJAPlayer3.Tx.Taiko_Combo[0].color4 = new Color4(1f, 0.6f, 0.2f, 1f); - TJAPlayer3.Tx.Taiko_Combo[0].vcScaleRatio.X = 1.4f; - TJAPlayer3.Tx.Taiko_Combo[0].vcScaleRatio.Y = 1.4f; - - for (int idx = len - 1; idx >= 0; idx--) - { - int currentNum = int.Parse(floorStr[idx].ToString()); - - TJAPlayer3.Tx.Taiko_Combo[0].t2D描画(TJAPlayer3.Skin.Game_Tower_Floor_Number[0] - ((digitLength - 8) * (len - idx) * 1.4f), - TJAPlayer3.Skin.Game_Tower_Floor_Number[1], - new Rectangle(digitLength * currentNum, 0, - digitLength, TJAPlayer3.Tx.Taiko_Combo[0].szTextureSize.Height)); - } - - #endregion - - #region [Life Tamashii icon] - - int soulfire_width = TJAPlayer3.Tx.Gauge_Soul_Fire.szTextureSize.Width / 8; - int soulfire_height = TJAPlayer3.Tx.Gauge_Soul_Fire.szTextureSize.Height; - - int soul_height = TJAPlayer3.Tx.Gauge_Soul.szTextureSize.Height / 2; - - TJAPlayer3.Tx.Gauge_Soul_Fire?.t2D描画(TJAPlayer3.Skin.Gauge_Soul_Fire_X_Tower, TJAPlayer3.Skin.Gauge_Soul_Fire_Y_Tower, new Rectangle(soulfire_width * (this.ct炎.CurrentValue), 0, soulfire_width, soulfire_height)); - TJAPlayer3.Tx.Gauge_Soul?.t2D描画(TJAPlayer3.Skin.Gauge_Soul_X_Tower, TJAPlayer3.Skin.Gauge_Soul_Y_Tower, new Rectangle(0, soul_height, TJAPlayer3.Tx.Gauge_Soul.szTextureSize.Width, soul_height)); - - #endregion - - #region [Life number] - - if (CFloorManagement.MaxNumberOfLives <= 0) - { - CFloorManagement.MaxNumberOfLives = 5; - CFloorManagement.CurrentNumberOfLives = 5; - } - - string lifeStr = CFloorManagement.CurrentNumberOfLives.ToString(); - - len = lifeStr.Length; - - bool lifeSpecialCase = CFloorManagement.CurrentNumberOfLives == 1 && CFloorManagement.MaxNumberOfLives != 1; - float lifeRatio = CFloorManagement.CurrentNumberOfLives / (float)CFloorManagement.MaxNumberOfLives; - - Color4 lifeColor = (lifeRatio > 0.5f && !lifeSpecialCase) ? new Color4(0.2f, 1f, 0.2f, 1f) - : ((lifeRatio >= 0.2f && !lifeSpecialCase) ? new Color4(1f, 1f, 0.2f, 1f) - : new Color4(1f, 0.2f, 0.2f, 1f)); - - TJAPlayer3.Tx.Taiko_Combo[0].color4 = lifeColor; - TJAPlayer3.Tx.Taiko_Combo[0].vcScaleRatio.X = 1.1f; - TJAPlayer3.Tx.Taiko_Combo[0].vcScaleRatio.Y = 1.1f; - - for (int idx = 0; idx < len; idx++) - { - int currentNum = int.Parse(lifeStr[len - idx - 1].ToString()); - - TJAPlayer3.Tx.Taiko_Combo[0].t2D描画(TJAPlayer3.Skin.Game_Tower_Life_Number[0] + ((digitLength - 8) * (len - idx) * 1.1f), - TJAPlayer3.Skin.Game_Tower_Life_Number[1], - new Rectangle(digitLength * currentNum, 0, - digitLength, TJAPlayer3.Tx.Taiko_Combo[0].szTextureSize.Height)); - } - - TJAPlayer3.Tx.Taiko_Combo[0].color4 = new Color4(1f, 1f, 1f, 1f); - - #endregion - - } - - #endregion - } - } - - #endregion - - #region [Lower background] - - - if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Tower) - { - int maxFloor = TJAPlayer3.stageSongSelect.rChoosenSong.arスコア[5].譜面情報.nTotalFloor; - - TJAPlayer3.actTextConsole.tPrint(0, 0, CTextConsole.EFontType.White, maxFloor.ToString()); - - int nightTime = Math.Max(140, maxFloor / 2); - - int currentTowerType = Array.IndexOf(TJAPlayer3.Skin.Game_Tower_Names, TJAPlayer3.stageSongSelect.rChoosenSong.arスコア[5].譜面情報.nTowerType); - - if (currentTowerType < 0 || currentTowerType >= TJAPlayer3.Skin.Game_Tower_Ptn) - currentTowerType = 0; - - #region [Tower lower background] - - float nextPositionMax140 = Math.Min((TJAPlayer3.stage演奏ドラム画面.actPlayInfo.NowMeasure[0] + 1) / (float)nightTime, 1f); - - if (bFloorChanged == true) - ctSlideAnimation.Start(0, 1000, 120f / ((float)TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM[0] * TJAPlayer3.ConfigIni.SongPlaybackSpeed), TJAPlayer3.Timer); - - float progressFactor = (nextPositionMax140 - currentFloorPositionMax140) * (ctSlideAnimation.CurrentValue / 1000f); - - - - #region [Skybox] - - //int skyboxYPosition = (int)((TJAPlayer3.Tx.Tower_Sky_Gradient.szテクスチャサイズ.Height - TJAPlayer3.Skin.Game_Tower_Sky_Gradient_Size[1]) * (1f - (currentFloorPositionMax140 + progressFactor))); - - //TJAPlayer3.Tx.Tower_Sky_Gradient?.t2D描画(TJAPlayer3.Skin.Game_Tower_Sky_Gradient[0], TJAPlayer3.Skin.Game_Tower_Sky_Gradient[1], - //new Rectangle(0, skyboxYPosition, TJAPlayer3.Skin.Game_Tower_Sky_Gradient_Size[0], TJAPlayer3.Skin.Game_Tower_Sky_Gradient_Size[1])); - - if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) DownScript.Update(); - DownScript.Draw(); - - #endregion - - - #region [Tower body] - - progressFactor = ctSlideAnimation.CurrentValue / 1000f; - - int currentTower = currentTowerType; - - // Will implement the roof later, need the beforehand total floor count calculation before - int nextTowerBase = ((TJAPlayer3.stage演奏ドラム画面.actPlayInfo.NowMeasure[0] + 1) / 10) % TJAPlayer3.Skin.Game_Tower_Ptn_Base[currentTower]; - int towerBase = (TJAPlayer3.stage演奏ドラム画面.actPlayInfo.NowMeasure[0] / 10) % TJAPlayer3.Skin.Game_Tower_Ptn_Base[currentTower]; - - int currentDeco = TJAPlayer3.stage演奏ドラム画面.actPlayInfo.NowMeasure[0] % TJAPlayer3.Skin.Game_Tower_Ptn_Deco[currentTower]; - int nextDeco = (TJAPlayer3.stage演奏ドラム画面.actPlayInfo.NowMeasure[0] + 1) % TJAPlayer3.Skin.Game_Tower_Ptn_Deco[currentTower]; - - // Microfix for the first floor suddenly changing texture - if (TJAPlayer3.stage演奏ドラム画面.actPlayInfo.NowMeasure[0] == 0 && TJAPlayer3.Skin.Game_Tower_Ptn_Deco[currentTower] > 1) - currentDeco++; - if (TJAPlayer3.stage演奏ドラム画面.actPlayInfo.NowMeasure[0] == 0 && TJAPlayer3.Skin.Game_Tower_Ptn_Base[currentTower] > 1) - towerBase++; - - int widthChange = (int)(progressFactor * TJAPlayer3.Skin.Game_Tower_Floors_Move[0]); - int heightChange = (int)(progressFactor * TJAPlayer3.Skin.Game_Tower_Floors_Move[1]); - - // Current trunk - if (TJAPlayer3.stage演奏ドラム画面.actPlayInfo.NowMeasure[0] < maxFloor) - TJAPlayer3.Tx.Tower_Base[currentTower][towerBase]?.t2D下中央基準描画( - TJAPlayer3.Skin.Game_Tower_Floors_Body[0] + widthChange, - TJAPlayer3.Skin.Game_Tower_Floors_Body[1] + heightChange); // 316 + 360 - else - TJAPlayer3.Tx.Tower_Top[currentTower]?.t2D下中央基準描画( - TJAPlayer3.Skin.Game_Tower_Floors_Body[0] + widthChange, - TJAPlayer3.Skin.Game_Tower_Floors_Body[1] + heightChange); - - // Current deco - TJAPlayer3.Tx.Tower_Deco[currentTower][currentDeco]?.t2D下中央基準描画( - TJAPlayer3.Skin.Game_Tower_Floors_Deco[0] + widthChange, - TJAPlayer3.Skin.Game_Tower_Floors_Deco[1] + heightChange); - - int originY = TJAPlayer3.Skin.Game_Tower_Floors_Move[1] - heightChange; - - // Next trunk - if (TJAPlayer3.stage演奏ドラム画面.actPlayInfo.NowMeasure[0] + 1 < maxFloor) - TJAPlayer3.Tx.Tower_Base[currentTower][nextTowerBase]?.t2D下中央基準描画( - TJAPlayer3.Skin.Game_Tower_Floors_Body[0] - TJAPlayer3.Skin.Game_Tower_Floors_Move[0] + widthChange, - TJAPlayer3.Skin.Game_Tower_Floors_Body[1] - TJAPlayer3.Skin.Game_Tower_Floors_Move[1] + heightChange, - new Rectangle(0, originY, TJAPlayer3.Tx.Tower_Base[currentTower][nextTowerBase].szTextureSize.Width, TJAPlayer3.Tx.Tower_Base[currentTower][nextTowerBase].szTextureSize.Height - originY)); - else if (TJAPlayer3.stage演奏ドラム画面.actPlayInfo.NowMeasure[0] + 1 == maxFloor) - { - TJAPlayer3.Tx.Tower_Top[currentTower]?.t2D下中央基準描画( - TJAPlayer3.Skin.Game_Tower_Floors_Body[0] - TJAPlayer3.Skin.Game_Tower_Floors_Move[0] + widthChange, - TJAPlayer3.Skin.Game_Tower_Floors_Body[1] - TJAPlayer3.Skin.Game_Tower_Floors_Move[1] + heightChange, - new Rectangle(0, originY, TJAPlayer3.Tx.Tower_Top[currentTower].szTextureSize.Width, TJAPlayer3.Tx.Tower_Top[currentTower].szTextureSize.Height - originY)); - } - - // Next deco - if (TJAPlayer3.stage演奏ドラム画面.actPlayInfo.NowMeasure[0] + 1 <= maxFloor) - TJAPlayer3.Tx.Tower_Deco[currentTower][nextDeco]?.t2D下中央基準描画( - TJAPlayer3.Skin.Game_Tower_Floors_Deco[0] - TJAPlayer3.Skin.Game_Tower_Floors_Move[0] + widthChange, - TJAPlayer3.Skin.Game_Tower_Floors_Deco[1] - TJAPlayer3.Skin.Game_Tower_Floors_Move[1] + heightChange); - - - #endregion - - #region [Climbing don] - - bool ctIsTired = !((CFloorManagement.CurrentNumberOfLives / (float)CFloorManagement.MaxNumberOfLives) >= 0.2f && !(CFloorManagement.CurrentNumberOfLives == 1 && CFloorManagement.MaxNumberOfLives != 1)); - - bool stageEnded = TJAPlayer3.stage演奏ドラム画面.ePhaseID == CStage.EPhase.Game_EndStage || TJAPlayer3.stage演奏ドラム画面.ePhaseID == CStage.EPhase.Game_STAGE_CLEAR_FadeOut || CFloorManagement.CurrentNumberOfLives == 0; - - if (bFloorChanged == true) - { - float floorBPM = (float)(TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM[0] * TJAPlayer3.ConfigIni.SongPlaybackSpeed); - ctClimbDuration.Start(0, 1500, 120f / floorBPM, TJAPlayer3.Timer); - ctStandingAnimation.Start(0, 1000, (60000f / floorBPM) * TJAPlayer3.Skin.Characters_Beat_Tower_Standing[currentCharacter] / TJAPlayer3.Skin.Characters_Tower_Standing_Ptn[currentCharacter], TJAPlayer3.Timer); - ctClimbingAnimation.Start(0, 1000, (120000f / floorBPM) / TJAPlayer3.Skin.Characters_Tower_Climbing_Ptn[currentCharacter], TJAPlayer3.Timer); - ctRunningAnimation.Start(0, 1000, (60000f / floorBPM) / TJAPlayer3.Skin.Characters_Tower_Running_Ptn[currentCharacter], TJAPlayer3.Timer); - ctStandTiredAnimation.Start(0, 1000, (60000f / floorBPM) * TJAPlayer3.Skin.Characters_Beat_Tower_Standing_Tired[currentCharacter] / TJAPlayer3.Skin.Characters_Tower_Standing_Tired_Ptn[currentCharacter], TJAPlayer3.Timer); - ctClimbTiredAnimation.Start(0, 1000, (120000f / floorBPM) / TJAPlayer3.Skin.Characters_Tower_Climbing_Tired_Ptn[currentCharacter], TJAPlayer3.Timer); - ctRunTiredAnimation.Start(0, 1000, (60000f / floorBPM) / TJAPlayer3.Skin.Characters_Tower_Running_Tired_Ptn[currentCharacter], TJAPlayer3.Timer); - } - - bool isClimbing = ctClimbDuration.CurrentValue > 0 && ctClimbDuration.CurrentValue < 1500; - - if (stageEnded && !TowerFinished && !isClimbing) - { - float floorBPM = (float)(TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM[0] * TJAPlayer3.ConfigIni.SongPlaybackSpeed); - ctClearAnimation.Start(0, 20000, (60000f / floorBPM) * TJAPlayer3.Skin.Characters_Beat_Tower_Clear[currentCharacter] / TJAPlayer3.Skin.Characters_Tower_Clear_Ptn[currentCharacter], TJAPlayer3.Timer); - ctClearTiredAnimation.Start(0, 20000, (60000f / floorBPM) * TJAPlayer3.Skin.Characters_Beat_Tower_Clear_Tired[currentCharacter] / TJAPlayer3.Skin.Characters_Tower_Clear_Tired_Ptn[currentCharacter], TJAPlayer3.Timer); - ctFailAnimation.Start(0, 20000, (60000f / floorBPM) * TJAPlayer3.Skin.Characters_Beat_Tower_Fail[currentCharacter] / TJAPlayer3.Skin.Characters_Tower_Fail_Ptn[currentCharacter], TJAPlayer3.Timer); - TowerFinished = true; - } - - if (isClimbing) - { - // Tired Climb - if (ctIsTired && (ctClimbDuration.CurrentValue <= 1000) && TJAPlayer3.Skin.Characters_Tower_Climbing_Tired_Ptn[currentCharacter] > 0) - { - int animChar = ctClimbTiredAnimation.CurrentValue % TJAPlayer3.Skin.Characters_Tower_Climbing_Ptn[currentCharacter]; - int distDonX = (int)(ctClimbDuration.CurrentValue * (TJAPlayer3.Skin.Game_Tower_Don_Move[0] / 1000f)); - int distDonY = (int)(ctClimbDuration.CurrentValue * (TJAPlayer3.Skin.Game_Tower_Don_Move[1] / 1000f)); - TJAPlayer3.Tx.Characters_Tower_Climbing_Tired[currentCharacter][animChar]?.t2D拡大率考慮下中心基準描画(TJAPlayer3.Skin.Game_Tower_Don[0] + distDonX, TJAPlayer3.Skin.Game_Tower_Don[1] + distDonY); - } - // Tired Run - else if (ctIsTired && (ctClimbDuration.CurrentValue > 1000 && ctClimbDuration.CurrentValue < 1500) && TJAPlayer3.Skin.Characters_Tower_Running_Tired_Ptn[currentCharacter] > 0) - { - int animChar = ctRunTiredAnimation.CurrentValue % TJAPlayer3.Skin.Characters_Tower_Running_Ptn[currentCharacter]; - int distDonX = (int)((1500 - ctClimbDuration.CurrentValue) * (TJAPlayer3.Skin.Game_Tower_Don_Move[0] / 500f)); - int distDonY = (int)((1500 - ctClimbDuration.CurrentValue) * (TJAPlayer3.Skin.Game_Tower_Don_Move[1] / 500f)); - TJAPlayer3.Tx.Characters_Tower_Running_Tired[currentCharacter][animChar]?.t2D拡大率考慮下中心基準描画(TJAPlayer3.Skin.Game_Tower_Don[0] + distDonX, TJAPlayer3.Skin.Game_Tower_Don[1] + distDonY); - } - // Climb - else if ((ctClimbDuration.CurrentValue <= 1000) && TJAPlayer3.Skin.Characters_Tower_Climbing_Ptn[currentCharacter] > 0) - { - int animChar = ctClimbingAnimation.CurrentValue % TJAPlayer3.Skin.Characters_Tower_Climbing_Ptn[currentCharacter]; - int distDonX = (int)(ctClimbDuration.CurrentValue * (TJAPlayer3.Skin.Game_Tower_Don_Move[0] / 1000f)); - int distDonY = (int)(ctClimbDuration.CurrentValue * (TJAPlayer3.Skin.Game_Tower_Don_Move[1] / 1000f)); - TJAPlayer3.Tx.Characters_Tower_Climbing[currentCharacter][animChar]?.t2D拡大率考慮下中心基準描画(TJAPlayer3.Skin.Game_Tower_Don[0] + distDonX, TJAPlayer3.Skin.Game_Tower_Don[1] + distDonY); - } - // Run - else if ((ctClimbDuration.CurrentValue > 1000 && ctClimbDuration.CurrentValue < 1500) && TJAPlayer3.Skin.Characters_Tower_Running_Ptn[currentCharacter] > 0) - { - int animChar = ctRunningAnimation.CurrentValue % TJAPlayer3.Skin.Characters_Tower_Running_Ptn[currentCharacter]; - int distDonX = (int)((1500 - ctClimbDuration.CurrentValue) * (TJAPlayer3.Skin.Game_Tower_Don_Move[0] / 500f)); - int distDonY = (int)((1500 - ctClimbDuration.CurrentValue) * (TJAPlayer3.Skin.Game_Tower_Don_Move[1] / 500f)); - TJAPlayer3.Tx.Characters_Tower_Running[currentCharacter][animChar]?.t2D拡大率考慮下中心基準描画(TJAPlayer3.Skin.Game_Tower_Don[0] + distDonX, TJAPlayer3.Skin.Game_Tower_Don[1] + distDonY); - } - } - else - { - // Fail - if (TJAPlayer3.Skin.Characters_Tower_Fail_Ptn[currentCharacter] > 0 && CFloorManagement.CurrentNumberOfLives == 0) - { - int animChar = TJAPlayer3.Skin.Characters_Tower_Fail_IsLooping[currentCharacter] ? - ctFailAnimation.CurrentValue % TJAPlayer3.Skin.Characters_Tower_Fail_Ptn[currentCharacter] : - Math.Min(ctFailAnimation.CurrentValue, TJAPlayer3.Skin.Characters_Tower_Fail_Ptn[currentCharacter] - 1); - TJAPlayer3.Tx.Characters_Tower_Fail[currentCharacter][animChar]?.t2D拡大率考慮下中心基準描画(TJAPlayer3.Skin.Game_Tower_Don[0], TJAPlayer3.Skin.Game_Tower_Don[1]); - } - // Tired Clear - else if (ctIsTired && stageEnded && TJAPlayer3.Skin.Characters_Tower_Clear_Tired_Ptn[currentCharacter] > 0 && CFloorManagement.CurrentNumberOfLives > 0) - { - int animChar = TJAPlayer3.Skin.Characters_Tower_Clear_Tired_IsLooping[currentCharacter] ? - ctClearTiredAnimation.CurrentValue % TJAPlayer3.Skin.Characters_Tower_Clear_Tired_Ptn[currentCharacter] : - Math.Min(ctClearTiredAnimation.CurrentValue, TJAPlayer3.Skin.Characters_Tower_Clear_Tired_Ptn[currentCharacter] - 1); - TJAPlayer3.Tx.Characters_Tower_Clear_Tired[currentCharacter][animChar]?.t2D拡大率考慮下中心基準描画(TJAPlayer3.Skin.Game_Tower_Don[0], TJAPlayer3.Skin.Game_Tower_Don[1]); - } - // Clear - else if (stageEnded && TJAPlayer3.Skin.Characters_Tower_Clear_Ptn[currentCharacter] > 0 && CFloorManagement.CurrentNumberOfLives > 0) - { - int animChar = TJAPlayer3.Skin.Characters_Tower_Clear_IsLooping[currentCharacter] ? - ctClearAnimation.CurrentValue % TJAPlayer3.Skin.Characters_Tower_Clear_Ptn[currentCharacter] : - Math.Min(ctClearAnimation.CurrentValue, TJAPlayer3.Skin.Characters_Tower_Clear_Ptn[currentCharacter] - 1); - TJAPlayer3.Tx.Characters_Tower_Clear[currentCharacter][animChar]?.t2D拡大率考慮下中心基準描画(TJAPlayer3.Skin.Game_Tower_Don[0], TJAPlayer3.Skin.Game_Tower_Don[1]); - } - - // Tired Stand - else if (ctIsTired && TJAPlayer3.Skin.Characters_Tower_Standing_Tired_Ptn[currentCharacter] > 0) - { - int animChar = ctStandTiredAnimation.CurrentValue % TJAPlayer3.Skin.Characters_Tower_Standing_Tired_Ptn[currentCharacter]; - TJAPlayer3.Tx.Characters_Tower_Standing_Tired[currentCharacter][animChar]?.t2D拡大率考慮下中心基準描画(TJAPlayer3.Skin.Game_Tower_Don[0], TJAPlayer3.Skin.Game_Tower_Don[1]); // Center X - 50 - } - // Stand - else if (TJAPlayer3.Skin.Characters_Tower_Standing_Ptn[currentCharacter] > 0) - { - int animChar = ctStandingAnimation.CurrentValue % TJAPlayer3.Skin.Characters_Tower_Standing_Ptn[currentCharacter]; - TJAPlayer3.Tx.Characters_Tower_Standing[currentCharacter][animChar]?.t2D拡大率考慮下中心基準描画(TJAPlayer3.Skin.Game_Tower_Don[0], TJAPlayer3.Skin.Game_Tower_Don[1]); // Center X - 50 - } - } - - #endregion - - #region [Miss icon] - - if (CFloorManagement.InvincibilityFrames != null && CFloorManagement.InvincibilityFrames.CurrentValue < CFloorManagement.InvincibilityDurationSpeedDependent) - { - if (TJAPlayer3.Tx.Tower_Miss != null) - TJAPlayer3.Tx.Tower_Miss.Opacity = Math.Min(255, 1000 - CFloorManagement.InvincibilityFrames.CurrentValue); - TJAPlayer3.Tx.Tower_Miss?.t2D下中央基準描画(TJAPlayer3.Skin.Game_Tower_Miss[0], TJAPlayer3.Skin.Game_Tower_Miss[1]); - } - - #endregion - - ctSlideAnimation?.Tick(); - ctClimbDuration?.Tick(); - ctStandingAnimation?.TickLoop(); - ctClimbingAnimation?.TickLoop(); - ctRunningAnimation?.TickLoop(); - ctStandTiredAnimation?.TickLoop(); - ctClimbTiredAnimation?.TickLoop(); - ctRunTiredAnimation?.TickLoop(); - ctClearAnimation?.Tick(); - ctClearTiredAnimation?.Tick(); - ctFailAnimation?.Tick(); - - #endregion - } - else if (!TJAPlayer3.stage演奏ドラム画面.bDoublePlay && TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] != (int)Difficulty.Dan) - { - if (!IsDownNotFound) - { - if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) DownScript?.Update(); - DownScript?.Draw(); - } - } - - - #endregion - - return base.Draw(); - } - - #region[ private ] - //----------------- - - #region 背景 - /*private CTexture Background, - Background_Down, - Background_Down_Clear, - Background_Down_Scroll; - private CTexture[] Background_Up_1st, - Background_Up_2nd, - Background_Up_3rd, - Background_Up_Dan = new CTexture[6], - Background_Up_Tower = new CTexture[8];*/ - #endregion - - /*private CCounter[] ct上背景スクロール用タイマー1st; //上背景のX方向スクロール用 - private CCounter[] ct上背景スクロール用タイマー2nd; //上背景のY方向スクロール用 - private CCounter[] ct上背景スクロール用タイマー3rd; //上背景のY方向スクロール用 - private CCounter ct下背景スクロール用タイマー1; //下背景パーツ1のX方向スクロール用 - private CCounter ct上背景FIFOタイマー; - private CCounter[] ct上背景クリアインタイマー; - private CCounter[] ct上背景スクロール用タイマー1stDan; //上背景のX方向スクロール用 - private CCounter ct上背景スクロール用タイマー2stDan; //上背景のY方向スクロール用 - - private CCounter[] ct上背景スクロール用タイマー1stTower; //上背景のX方向スクロール用 - private CCounter ct上背景スクロール用タイマー2stTower; //上背景のX方向スクロール用 - */ - //private CTexture tx上背景メイン; - //private CTexture tx上背景クリアメイン; - //private CTexture tx下背景メイン; - //private CTexture tx下背景クリアメイン; - //private CTexture tx下背景クリアサブ1; - - private ScriptBG UpScript; - private ScriptBG DownScript; - - private TitleTextureKey ttkTouTatsuKaiSuu; - private TitleTextureKey ttkKai; - private CCachedFontRenderer pfTowerText; - - private bool bFloorChanged = false; - private int currentCharacter; - private CCounter ctSlideAnimation; - private CCounter ctStandingAnimation; - private CCounter ctClimbingAnimation; - private CCounter ctRunningAnimation; - private CCounter ctClearAnimation; - private CCounter ctFailAnimation; - private CCounter ctStandTiredAnimation; - private CCounter ctClimbTiredAnimation; - private CCounter ctRunTiredAnimation; - private CCounter ctClearTiredAnimation; - private CCounter ctClimbDuration; - private bool TowerFinished; - - private CCounter ct炎; - - private bool IsUpNotFound; - private bool IsDownNotFound; - - private EFIFOモード eFadeMode; - //----------------- - #endregion - } -} +using System; +using FDK; +using System.Drawing; +using static TJAPlayer3.CActSelect曲リスト; + +using Color = System.Drawing.Color; +using Rectangle = System.Drawing.Rectangle; +using System.Collections.Generic; + +namespace TJAPlayer3 +{ + internal class CActImplBackground : CActivity + { + // 本家っぽい背景を表示させるメソッド。 + // + // 拡張性とかないんで。はい、ヨロシクゥ! + // + public CActImplBackground() + { + base.IsDeActivated = true; + } + + public void tFadeIn(int player) + { + //this.ct上背景クリアインタイマー[player] = new CCounter(0, 100, 2, TJAPlayer3.Timer); + this.eFadeMode = EFIFOモード.フェードイン; + } + + //public void tFadeOut(int player) + //{ + // this.ct上背景フェードタイマー[player] = new CCounter( 0, 100, 6, CDTXMania.Timer ); + // this.eFadeMode = EFIFOモード.フェードアウト; + //} + + public void ClearIn(int player) + { + /*this.ct上背景クリアインタイマー[player] = new CCounter(0, 100, 2, TJAPlayer3.Timer); + this.ct上背景クリアインタイマー[player].n現在の値 = 0; + this.ct上背景FIFOタイマー = new CCounter(0, 100, 2, TJAPlayer3.Timer); + this.ct上背景FIFOタイマー.n現在の値 = 0;*/ + UpScript?.ClearIn(player); + DownScript?.ClearIn(player); + } + + public void ClearOut(int player) + { + UpScript?.ClearOut(player); + DownScript?.ClearOut(player); + } + + public override void Activate() + { + if (!this.IsDeActivated) + return; + + var bgOrigindir = CSkin.Path($"{TextureLoader.BASE}{TextureLoader.GAME}{TextureLoader.BACKGROUND}"); + var preset = HScenePreset.GetBGPreset(); + if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Tower) + { + bgOrigindir += "Tower"; + } + else if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Dan) + { + bgOrigindir += "Dan"; + } + else if (TJAPlayer3.ConfigIni.bAIBattleMode) + { + bgOrigindir += "AI"; + } + else + { + bgOrigindir += "Normal"; + } + + Random random = new Random(); + + if (System.IO.Directory.Exists($@"{bgOrigindir}{Path.DirectorySeparatorChar}Up")) + { + var upDirs = System.IO.Directory.GetDirectories($@"{bgOrigindir}{Path.DirectorySeparatorChar}Up"); + + // If there is a preset upper background and this preset exists on the skin use it, else random upper background + var _presetPath = (preset != null && preset.UpperBackground != null) ? $@"{bgOrigindir}{Path.DirectorySeparatorChar}Up{Path.DirectorySeparatorChar}" + preset.UpperBackground[random.Next(0, preset.UpperBackground.Length)] : ""; + var upPath = (preset != null && System.IO.Directory.Exists(_presetPath)) + ? _presetPath + : upDirs[random.Next(0, upDirs.Length)]; + + UpScript = new ScriptBG($@"{upPath}{Path.DirectorySeparatorChar}Script.lua"); + UpScript.Init(); + + IsUpNotFound = false; + } + else + { + IsUpNotFound = true; + } + + if (System.IO.Directory.Exists($@"{bgOrigindir}{Path.DirectorySeparatorChar}Down")) + { + var downDirs = System.IO.Directory.GetDirectories($@"{bgOrigindir}{Path.DirectorySeparatorChar}Down"); + + // If there is a preset lower background and this preset exists on the skin use it, else random upper background + var _presetPath = (preset != null && preset.LowerBackground != null) ? $@"{bgOrigindir}{Path.DirectorySeparatorChar}Down{Path.DirectorySeparatorChar}" + preset.LowerBackground[random.Next(0, preset.LowerBackground.Length)] : ""; + var downPath = (preset != null && System.IO.Directory.Exists(_presetPath)) + ? _presetPath + : downDirs[random.Next(0, downDirs.Length)]; + + DownScript = new ScriptBG($@"{downPath}{Path.DirectorySeparatorChar}Script.lua"); + DownScript?.Init(); + + if (DownScript.Exists()) IsDownNotFound = false; + } + else + { + IsDownNotFound = true; + } + + this.pfTowerText = HPrivateFastFont.tInstantiateMainFont(TJAPlayer3.Skin.Game_Tower_Font_TowerText); + + /* + if (!string.IsNullOrEmpty(TJAPlayer3.ConfigIni.FontName)) + { + this.pfTowerText = new CPrivateFastFont(new FontFamily(TJAPlayer3.ConfigIni.FontName), TJAPlayer3.Skin.Game_Tower_Font_TowerText); + } + else + { + this.pfTowerText = new CPrivateFastFont(new FontFamily("MS UI Gothic"), TJAPlayer3.Skin.Game_Tower_Font_TowerText); + } + */ + + this.ttkTouTatsuKaiSuu = new TitleTextureKey(CLangManager.LangInstance.GetString(1000), pfTowerText, Color.White, Color.Black, 700); + this.ttkKai = new TitleTextureKey(CLangManager.LangInstance.GetString(1001), pfTowerText, Color.White, Color.Black, 700); + + this.ct炎 = new CCounter(0, 6, 50, TJAPlayer3.Timer); + + this.currentCharacter = Math.Max(0, Math.Min(TJAPlayer3.SaveFileInstances[0].data.Character, TJAPlayer3.Skin.Characters_Ptn - 1)); + + float resolutionScaleX = TJAPlayer3.Skin.Resolution[0] / (float)TJAPlayer3.Skin.Characters_Resolution[currentCharacter][0]; + float resolutionScaleY = TJAPlayer3.Skin.Resolution[1] / (float)TJAPlayer3.Skin.Characters_Resolution[currentCharacter][1]; + + // Scale tower chara + foreach (CTexture texture in TJAPlayer3.Tx.Characters_Tower_Standing[currentCharacter]) + { + texture.vcScaleRatio.X = resolutionScaleX; + texture.vcScaleRatio.Y = resolutionScaleY; + } + foreach (CTexture texture in TJAPlayer3.Tx.Characters_Tower_Climbing[currentCharacter]) + { + texture.vcScaleRatio.X = resolutionScaleX; + texture.vcScaleRatio.Y = resolutionScaleY; + } + foreach (CTexture texture in TJAPlayer3.Tx.Characters_Tower_Running[currentCharacter]) + { + texture.vcScaleRatio.X = resolutionScaleX; + texture.vcScaleRatio.Y = resolutionScaleY; + } + foreach (CTexture texture in TJAPlayer3.Tx.Characters_Tower_Clear[currentCharacter]) + { + texture.vcScaleRatio.X = resolutionScaleX; + texture.vcScaleRatio.Y = resolutionScaleY; + } + foreach (CTexture texture in TJAPlayer3.Tx.Characters_Tower_Fail[currentCharacter]) + { + texture.vcScaleRatio.X = resolutionScaleX; + texture.vcScaleRatio.Y = resolutionScaleY; + } + foreach (CTexture texture in TJAPlayer3.Tx.Characters_Tower_Standing_Tired[currentCharacter]) + { + texture.vcScaleRatio.X = resolutionScaleX; + texture.vcScaleRatio.Y = resolutionScaleY; + } + foreach (CTexture texture in TJAPlayer3.Tx.Characters_Tower_Climbing_Tired[currentCharacter]) + { + texture.vcScaleRatio.X = resolutionScaleX; + texture.vcScaleRatio.Y = resolutionScaleY; + } + foreach (CTexture texture in TJAPlayer3.Tx.Characters_Tower_Running_Tired[currentCharacter]) + { + texture.vcScaleRatio.X = resolutionScaleX; + texture.vcScaleRatio.Y = resolutionScaleY; + } + foreach (CTexture texture in TJAPlayer3.Tx.Characters_Tower_Clear_Tired[currentCharacter]) + { + texture.vcScaleRatio.X = resolutionScaleX; + texture.vcScaleRatio.Y = resolutionScaleY; + } + + this.ctSlideAnimation = new CCounter(); + this.ctClimbDuration = new CCounter(); + this.ctStandingAnimation = new CCounter(0, 1000, (60000f / (float)(TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM[0] * TJAPlayer3.ConfigIni.SongPlaybackSpeed)) * TJAPlayer3.Skin.Characters_Beat_Tower_Standing[currentCharacter] / TJAPlayer3.Skin.Characters_Tower_Standing_Ptn[currentCharacter], TJAPlayer3.Timer); + this.ctClimbingAnimation = new CCounter(); + this.ctRunningAnimation = new CCounter(); + this.ctClearAnimation = new CCounter(); + this.ctFailAnimation = new CCounter(); + this.ctStandTiredAnimation = new CCounter(); + this.ctClimbTiredAnimation = new CCounter(); + this.ctRunTiredAnimation = new CCounter(); + this.ctClearTiredAnimation = new CCounter(); + + TowerFinished = false; + + base.Activate(); + } + + public override void DeActivate() + { + if (this.IsDeActivated) + return; + + TJAPlayer3.tDisposeSafely(ref UpScript); + TJAPlayer3.tDisposeSafely(ref DownScript); + + TJAPlayer3.tDisposeSafely(ref pfTowerText); + + base.DeActivate(); + } + + public override void CreateManagedResource() + { + base.CreateManagedResource(); + } + + public override void ReleaseManagedResource() + { + base.ReleaseManagedResource(); + } + + public override int Draw() + { + if (base.IsDeActivated) + return 0; + + + //this.ct上背景FIFOタイマー?.t進行(); + + + #region [Tower specific variables declaration] + + float currentFloorPositionMax140 = 0; + + #endregion + + // fNow_Measure_s (/ m) + + #region [Upper background] + + if (!IsUpNotFound) + { + if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) UpScript?.Update(); + UpScript?.Draw(); + if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Tower) + { + #region [Tower animations variables] + + this.bFloorChanged = CFloorManagement.LastRegisteredFloor > 0 && (CFloorManagement.LastRegisteredFloor < TJAPlayer3.stage演奏ドラム画面.actPlayInfo.NowMeasure[0] + 1); + + int maxFloor = TJAPlayer3.stageSongSelect.rChoosenSong.arスコア[5].譜面情報.nTotalFloor; + int nightTime = Math.Max(140, maxFloor / 2); + + currentFloorPositionMax140 = Math.Min(TJAPlayer3.stage演奏ドラム画面.actPlayInfo.NowMeasure[0] / (float)nightTime, 1f); + + #endregion + + #region [Tower background informations] + + if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Tower) + { + TJAPlayer3.stageSongSelect.actSongList.ResolveTitleTexture(ttkTouTatsuKaiSuu).t2D描画(TJAPlayer3.Skin.Game_Tower_Font_TouTatsuKaiSuu[0], TJAPlayer3.Skin.Game_Tower_Font_TouTatsuKaiSuu[1]); + TJAPlayer3.stageSongSelect.actSongList.ResolveTitleTexture(ttkKai).t2D描画(TJAPlayer3.Skin.Game_Tower_Font_Kai[0], TJAPlayer3.Skin.Game_Tower_Font_Kai[1]); + + this.ct炎.TickLoop(); + CFloorManagement.loopFrames(); + + #region [Floor number] + + if (CFloorManagement.CurrentNumberOfLives > 0) + CFloorManagement.LastRegisteredFloor = TJAPlayer3.stage演奏ドラム画面.actPlayInfo.NowMeasure[0] + 1; + + string floorStr = CFloorManagement.LastRegisteredFloor.ToString(); + + int len = floorStr.Length; + + int digitLength = TJAPlayer3.Tx.Taiko_Combo[0].szTextureSize.Width / 10; + + TJAPlayer3.Tx.Taiko_Combo[0].color4 = new Color4(1f, 0.6f, 0.2f, 1f); + TJAPlayer3.Tx.Taiko_Combo[0].vcScaleRatio.X = 1.4f; + TJAPlayer3.Tx.Taiko_Combo[0].vcScaleRatio.Y = 1.4f; + + for (int idx = len - 1; idx >= 0; idx--) + { + int currentNum = int.Parse(floorStr[idx].ToString()); + + TJAPlayer3.Tx.Taiko_Combo[0].t2D描画(TJAPlayer3.Skin.Game_Tower_Floor_Number[0] - ((digitLength - 8) * (len - idx) * 1.4f), + TJAPlayer3.Skin.Game_Tower_Floor_Number[1], + new Rectangle(digitLength * currentNum, 0, + digitLength, TJAPlayer3.Tx.Taiko_Combo[0].szTextureSize.Height)); + } + + #endregion + + #region [Life Tamashii icon] + + int soulfire_width = TJAPlayer3.Tx.Gauge_Soul_Fire.szTextureSize.Width / 8; + int soulfire_height = TJAPlayer3.Tx.Gauge_Soul_Fire.szTextureSize.Height; + + int soul_height = TJAPlayer3.Tx.Gauge_Soul.szTextureSize.Height / 2; + + TJAPlayer3.Tx.Gauge_Soul_Fire?.t2D描画(TJAPlayer3.Skin.Gauge_Soul_Fire_X_Tower, TJAPlayer3.Skin.Gauge_Soul_Fire_Y_Tower, new Rectangle(soulfire_width * (this.ct炎.CurrentValue), 0, soulfire_width, soulfire_height)); + TJAPlayer3.Tx.Gauge_Soul?.t2D描画(TJAPlayer3.Skin.Gauge_Soul_X_Tower, TJAPlayer3.Skin.Gauge_Soul_Y_Tower, new Rectangle(0, soul_height, TJAPlayer3.Tx.Gauge_Soul.szTextureSize.Width, soul_height)); + + #endregion + + #region [Life number] + + if (CFloorManagement.MaxNumberOfLives <= 0) + { + CFloorManagement.MaxNumberOfLives = 5; + CFloorManagement.CurrentNumberOfLives = 5; + } + + string lifeStr = CFloorManagement.CurrentNumberOfLives.ToString(); + + len = lifeStr.Length; + + bool lifeSpecialCase = CFloorManagement.CurrentNumberOfLives == 1 && CFloorManagement.MaxNumberOfLives != 1; + float lifeRatio = CFloorManagement.CurrentNumberOfLives / (float)CFloorManagement.MaxNumberOfLives; + + Color4 lifeColor = (lifeRatio > 0.5f && !lifeSpecialCase) ? new Color4(0.2f, 1f, 0.2f, 1f) + : ((lifeRatio >= 0.2f && !lifeSpecialCase) ? new Color4(1f, 1f, 0.2f, 1f) + : new Color4(1f, 0.2f, 0.2f, 1f)); + + TJAPlayer3.Tx.Taiko_Combo[0].color4 = lifeColor; + TJAPlayer3.Tx.Taiko_Combo[0].vcScaleRatio.X = 1.1f; + TJAPlayer3.Tx.Taiko_Combo[0].vcScaleRatio.Y = 1.1f; + + for (int idx = 0; idx < len; idx++) + { + int currentNum = int.Parse(lifeStr[len - idx - 1].ToString()); + + TJAPlayer3.Tx.Taiko_Combo[0].t2D描画(TJAPlayer3.Skin.Game_Tower_Life_Number[0] + ((digitLength - 8) * (len - idx) * 1.1f), + TJAPlayer3.Skin.Game_Tower_Life_Number[1], + new Rectangle(digitLength * currentNum, 0, + digitLength, TJAPlayer3.Tx.Taiko_Combo[0].szTextureSize.Height)); + } + + TJAPlayer3.Tx.Taiko_Combo[0].color4 = new Color4(1f, 1f, 1f, 1f); + + #endregion + + } + + #endregion + } + } + + #endregion + + #region [Lower background] + + + if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Tower) + { + int maxFloor = TJAPlayer3.stageSongSelect.rChoosenSong.arスコア[5].譜面情報.nTotalFloor; + + TJAPlayer3.actTextConsole.tPrint(0, 0, CTextConsole.EFontType.White, maxFloor.ToString()); + + int nightTime = Math.Max(140, maxFloor / 2); + + int currentTowerType = Array.IndexOf(TJAPlayer3.Skin.Game_Tower_Names, TJAPlayer3.stageSongSelect.rChoosenSong.arスコア[5].譜面情報.nTowerType); + + if (currentTowerType < 0 || currentTowerType >= TJAPlayer3.Skin.Game_Tower_Ptn) + currentTowerType = 0; + + #region [Tower lower background] + + float nextPositionMax140 = Math.Min((TJAPlayer3.stage演奏ドラム画面.actPlayInfo.NowMeasure[0] + 1) / (float)nightTime, 1f); + + if (bFloorChanged == true) + ctSlideAnimation.Start(0, 1000, 120f / ((float)TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM[0] * TJAPlayer3.ConfigIni.SongPlaybackSpeed), TJAPlayer3.Timer); + + float progressFactor = (nextPositionMax140 - currentFloorPositionMax140) * (ctSlideAnimation.CurrentValue / 1000f); + + + + #region [Skybox] + + //int skyboxYPosition = (int)((TJAPlayer3.Tx.Tower_Sky_Gradient.szテクスチャサイズ.Height - TJAPlayer3.Skin.Game_Tower_Sky_Gradient_Size[1]) * (1f - (currentFloorPositionMax140 + progressFactor))); + + //TJAPlayer3.Tx.Tower_Sky_Gradient?.t2D描画(TJAPlayer3.Skin.Game_Tower_Sky_Gradient[0], TJAPlayer3.Skin.Game_Tower_Sky_Gradient[1], + //new Rectangle(0, skyboxYPosition, TJAPlayer3.Skin.Game_Tower_Sky_Gradient_Size[0], TJAPlayer3.Skin.Game_Tower_Sky_Gradient_Size[1])); + + if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) DownScript.Update(); + DownScript.Draw(); + + #endregion + + + #region [Tower body] + + progressFactor = ctSlideAnimation.CurrentValue / 1000f; + + int currentTower = currentTowerType; + + // Will implement the roof later, need the beforehand total floor count calculation before + int nextTowerBase = ((TJAPlayer3.stage演奏ドラム画面.actPlayInfo.NowMeasure[0] + 1) / 10) % TJAPlayer3.Skin.Game_Tower_Ptn_Base[currentTower]; + int towerBase = (TJAPlayer3.stage演奏ドラム画面.actPlayInfo.NowMeasure[0] / 10) % TJAPlayer3.Skin.Game_Tower_Ptn_Base[currentTower]; + + int currentDeco = TJAPlayer3.stage演奏ドラム画面.actPlayInfo.NowMeasure[0] % TJAPlayer3.Skin.Game_Tower_Ptn_Deco[currentTower]; + int nextDeco = (TJAPlayer3.stage演奏ドラム画面.actPlayInfo.NowMeasure[0] + 1) % TJAPlayer3.Skin.Game_Tower_Ptn_Deco[currentTower]; + + // Microfix for the first floor suddenly changing texture + if (TJAPlayer3.stage演奏ドラム画面.actPlayInfo.NowMeasure[0] == 0 && TJAPlayer3.Skin.Game_Tower_Ptn_Deco[currentTower] > 1) + currentDeco++; + if (TJAPlayer3.stage演奏ドラム画面.actPlayInfo.NowMeasure[0] == 0 && TJAPlayer3.Skin.Game_Tower_Ptn_Base[currentTower] > 1) + towerBase++; + + int widthChange = (int)(progressFactor * TJAPlayer3.Skin.Game_Tower_Floors_Move[0]); + int heightChange = (int)(progressFactor * TJAPlayer3.Skin.Game_Tower_Floors_Move[1]); + + // Current trunk + if (TJAPlayer3.stage演奏ドラム画面.actPlayInfo.NowMeasure[0] < maxFloor) + TJAPlayer3.Tx.Tower_Base[currentTower][towerBase]?.t2D下中央基準描画( + TJAPlayer3.Skin.Game_Tower_Floors_Body[0] + widthChange, + TJAPlayer3.Skin.Game_Tower_Floors_Body[1] + heightChange); // 316 + 360 + else + TJAPlayer3.Tx.Tower_Top[currentTower]?.t2D下中央基準描画( + TJAPlayer3.Skin.Game_Tower_Floors_Body[0] + widthChange, + TJAPlayer3.Skin.Game_Tower_Floors_Body[1] + heightChange); + + // Current deco + TJAPlayer3.Tx.Tower_Deco[currentTower][currentDeco]?.t2D下中央基準描画( + TJAPlayer3.Skin.Game_Tower_Floors_Deco[0] + widthChange, + TJAPlayer3.Skin.Game_Tower_Floors_Deco[1] + heightChange); + + int originY = TJAPlayer3.Skin.Game_Tower_Floors_Move[1] - heightChange; + + // Next trunk + if (TJAPlayer3.stage演奏ドラム画面.actPlayInfo.NowMeasure[0] + 1 < maxFloor) + TJAPlayer3.Tx.Tower_Base[currentTower][nextTowerBase]?.t2D下中央基準描画( + TJAPlayer3.Skin.Game_Tower_Floors_Body[0] - TJAPlayer3.Skin.Game_Tower_Floors_Move[0] + widthChange, + TJAPlayer3.Skin.Game_Tower_Floors_Body[1] - TJAPlayer3.Skin.Game_Tower_Floors_Move[1] + heightChange, + new Rectangle(0, originY, TJAPlayer3.Tx.Tower_Base[currentTower][nextTowerBase].szTextureSize.Width, TJAPlayer3.Tx.Tower_Base[currentTower][nextTowerBase].szTextureSize.Height - originY)); + else if (TJAPlayer3.stage演奏ドラム画面.actPlayInfo.NowMeasure[0] + 1 == maxFloor) + { + TJAPlayer3.Tx.Tower_Top[currentTower]?.t2D下中央基準描画( + TJAPlayer3.Skin.Game_Tower_Floors_Body[0] - TJAPlayer3.Skin.Game_Tower_Floors_Move[0] + widthChange, + TJAPlayer3.Skin.Game_Tower_Floors_Body[1] - TJAPlayer3.Skin.Game_Tower_Floors_Move[1] + heightChange, + new Rectangle(0, originY, TJAPlayer3.Tx.Tower_Top[currentTower].szTextureSize.Width, TJAPlayer3.Tx.Tower_Top[currentTower].szTextureSize.Height - originY)); + } + + // Next deco + if (TJAPlayer3.stage演奏ドラム画面.actPlayInfo.NowMeasure[0] + 1 <= maxFloor) + TJAPlayer3.Tx.Tower_Deco[currentTower][nextDeco]?.t2D下中央基準描画( + TJAPlayer3.Skin.Game_Tower_Floors_Deco[0] - TJAPlayer3.Skin.Game_Tower_Floors_Move[0] + widthChange, + TJAPlayer3.Skin.Game_Tower_Floors_Deco[1] - TJAPlayer3.Skin.Game_Tower_Floors_Move[1] + heightChange); + + + #endregion + + #region [Climbing don] + + bool ctIsTired = !((CFloorManagement.CurrentNumberOfLives / (float)CFloorManagement.MaxNumberOfLives) >= 0.2f && !(CFloorManagement.CurrentNumberOfLives == 1 && CFloorManagement.MaxNumberOfLives != 1)); + + bool stageEnded = TJAPlayer3.stage演奏ドラム画面.ePhaseID == CStage.EPhase.Game_EndStage || TJAPlayer3.stage演奏ドラム画面.ePhaseID == CStage.EPhase.Game_STAGE_CLEAR_FadeOut || CFloorManagement.CurrentNumberOfLives == 0; + + if (bFloorChanged == true) + { + float floorBPM = (float)(TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM[0] * TJAPlayer3.ConfigIni.SongPlaybackSpeed); + ctClimbDuration.Start(0, 1500, 120f / floorBPM, TJAPlayer3.Timer); + ctStandingAnimation.Start(0, 1000, (60000f / floorBPM) * TJAPlayer3.Skin.Characters_Beat_Tower_Standing[currentCharacter] / TJAPlayer3.Skin.Characters_Tower_Standing_Ptn[currentCharacter], TJAPlayer3.Timer); + ctClimbingAnimation.Start(0, 1000, (120000f / floorBPM) / TJAPlayer3.Skin.Characters_Tower_Climbing_Ptn[currentCharacter], TJAPlayer3.Timer); + ctRunningAnimation.Start(0, 1000, (60000f / floorBPM) / TJAPlayer3.Skin.Characters_Tower_Running_Ptn[currentCharacter], TJAPlayer3.Timer); + ctStandTiredAnimation.Start(0, 1000, (60000f / floorBPM) * TJAPlayer3.Skin.Characters_Beat_Tower_Standing_Tired[currentCharacter] / TJAPlayer3.Skin.Characters_Tower_Standing_Tired_Ptn[currentCharacter], TJAPlayer3.Timer); + ctClimbTiredAnimation.Start(0, 1000, (120000f / floorBPM) / TJAPlayer3.Skin.Characters_Tower_Climbing_Tired_Ptn[currentCharacter], TJAPlayer3.Timer); + ctRunTiredAnimation.Start(0, 1000, (60000f / floorBPM) / TJAPlayer3.Skin.Characters_Tower_Running_Tired_Ptn[currentCharacter], TJAPlayer3.Timer); + } + + bool isClimbing = ctClimbDuration.CurrentValue > 0 && ctClimbDuration.CurrentValue < 1500; + + if (stageEnded && !TowerFinished && !isClimbing) + { + float floorBPM = (float)(TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM[0] * TJAPlayer3.ConfigIni.SongPlaybackSpeed); + ctClearAnimation.Start(0, 20000, (60000f / floorBPM) * TJAPlayer3.Skin.Characters_Beat_Tower_Clear[currentCharacter] / TJAPlayer3.Skin.Characters_Tower_Clear_Ptn[currentCharacter], TJAPlayer3.Timer); + ctClearTiredAnimation.Start(0, 20000, (60000f / floorBPM) * TJAPlayer3.Skin.Characters_Beat_Tower_Clear_Tired[currentCharacter] / TJAPlayer3.Skin.Characters_Tower_Clear_Tired_Ptn[currentCharacter], TJAPlayer3.Timer); + ctFailAnimation.Start(0, 20000, (60000f / floorBPM) * TJAPlayer3.Skin.Characters_Beat_Tower_Fail[currentCharacter] / TJAPlayer3.Skin.Characters_Tower_Fail_Ptn[currentCharacter], TJAPlayer3.Timer); + TowerFinished = true; + } + + if (isClimbing) + { + // Tired Climb + if (ctIsTired && (ctClimbDuration.CurrentValue <= 1000) && TJAPlayer3.Skin.Characters_Tower_Climbing_Tired_Ptn[currentCharacter] > 0) + { + int animChar = ctClimbTiredAnimation.CurrentValue % TJAPlayer3.Skin.Characters_Tower_Climbing_Ptn[currentCharacter]; + int distDonX = (int)(ctClimbDuration.CurrentValue * (TJAPlayer3.Skin.Game_Tower_Don_Move[0] / 1000f)); + int distDonY = (int)(ctClimbDuration.CurrentValue * (TJAPlayer3.Skin.Game_Tower_Don_Move[1] / 1000f)); + TJAPlayer3.Tx.Characters_Tower_Climbing_Tired[currentCharacter][animChar]?.t2D拡大率考慮下中心基準描画(TJAPlayer3.Skin.Game_Tower_Don[0] + distDonX, TJAPlayer3.Skin.Game_Tower_Don[1] + distDonY); + } + // Tired Run + else if (ctIsTired && (ctClimbDuration.CurrentValue > 1000 && ctClimbDuration.CurrentValue < 1500) && TJAPlayer3.Skin.Characters_Tower_Running_Tired_Ptn[currentCharacter] > 0) + { + int animChar = ctRunTiredAnimation.CurrentValue % TJAPlayer3.Skin.Characters_Tower_Running_Ptn[currentCharacter]; + int distDonX = (int)((1500 - ctClimbDuration.CurrentValue) * (TJAPlayer3.Skin.Game_Tower_Don_Move[0] / 500f)); + int distDonY = (int)((1500 - ctClimbDuration.CurrentValue) * (TJAPlayer3.Skin.Game_Tower_Don_Move[1] / 500f)); + TJAPlayer3.Tx.Characters_Tower_Running_Tired[currentCharacter][animChar]?.t2D拡大率考慮下中心基準描画(TJAPlayer3.Skin.Game_Tower_Don[0] + distDonX, TJAPlayer3.Skin.Game_Tower_Don[1] + distDonY); + } + // Climb + else if ((ctClimbDuration.CurrentValue <= 1000) && TJAPlayer3.Skin.Characters_Tower_Climbing_Ptn[currentCharacter] > 0) + { + int animChar = ctClimbingAnimation.CurrentValue % TJAPlayer3.Skin.Characters_Tower_Climbing_Ptn[currentCharacter]; + int distDonX = (int)(ctClimbDuration.CurrentValue * (TJAPlayer3.Skin.Game_Tower_Don_Move[0] / 1000f)); + int distDonY = (int)(ctClimbDuration.CurrentValue * (TJAPlayer3.Skin.Game_Tower_Don_Move[1] / 1000f)); + TJAPlayer3.Tx.Characters_Tower_Climbing[currentCharacter][animChar]?.t2D拡大率考慮下中心基準描画(TJAPlayer3.Skin.Game_Tower_Don[0] + distDonX, TJAPlayer3.Skin.Game_Tower_Don[1] + distDonY); + } + // Run + else if ((ctClimbDuration.CurrentValue > 1000 && ctClimbDuration.CurrentValue < 1500) && TJAPlayer3.Skin.Characters_Tower_Running_Ptn[currentCharacter] > 0) + { + int animChar = ctRunningAnimation.CurrentValue % TJAPlayer3.Skin.Characters_Tower_Running_Ptn[currentCharacter]; + int distDonX = (int)((1500 - ctClimbDuration.CurrentValue) * (TJAPlayer3.Skin.Game_Tower_Don_Move[0] / 500f)); + int distDonY = (int)((1500 - ctClimbDuration.CurrentValue) * (TJAPlayer3.Skin.Game_Tower_Don_Move[1] / 500f)); + TJAPlayer3.Tx.Characters_Tower_Running[currentCharacter][animChar]?.t2D拡大率考慮下中心基準描画(TJAPlayer3.Skin.Game_Tower_Don[0] + distDonX, TJAPlayer3.Skin.Game_Tower_Don[1] + distDonY); + } + } + else + { + // Fail + if (TJAPlayer3.Skin.Characters_Tower_Fail_Ptn[currentCharacter] > 0 && CFloorManagement.CurrentNumberOfLives == 0) + { + int animChar = TJAPlayer3.Skin.Characters_Tower_Fail_IsLooping[currentCharacter] ? + ctFailAnimation.CurrentValue % TJAPlayer3.Skin.Characters_Tower_Fail_Ptn[currentCharacter] : + Math.Min(ctFailAnimation.CurrentValue, TJAPlayer3.Skin.Characters_Tower_Fail_Ptn[currentCharacter] - 1); + TJAPlayer3.Tx.Characters_Tower_Fail[currentCharacter][animChar]?.t2D拡大率考慮下中心基準描画(TJAPlayer3.Skin.Game_Tower_Don[0], TJAPlayer3.Skin.Game_Tower_Don[1]); + } + // Tired Clear + else if (ctIsTired && stageEnded && TJAPlayer3.Skin.Characters_Tower_Clear_Tired_Ptn[currentCharacter] > 0 && CFloorManagement.CurrentNumberOfLives > 0) + { + int animChar = TJAPlayer3.Skin.Characters_Tower_Clear_Tired_IsLooping[currentCharacter] ? + ctClearTiredAnimation.CurrentValue % TJAPlayer3.Skin.Characters_Tower_Clear_Tired_Ptn[currentCharacter] : + Math.Min(ctClearTiredAnimation.CurrentValue, TJAPlayer3.Skin.Characters_Tower_Clear_Tired_Ptn[currentCharacter] - 1); + TJAPlayer3.Tx.Characters_Tower_Clear_Tired[currentCharacter][animChar]?.t2D拡大率考慮下中心基準描画(TJAPlayer3.Skin.Game_Tower_Don[0], TJAPlayer3.Skin.Game_Tower_Don[1]); + } + // Clear + else if (stageEnded && TJAPlayer3.Skin.Characters_Tower_Clear_Ptn[currentCharacter] > 0 && CFloorManagement.CurrentNumberOfLives > 0) + { + int animChar = TJAPlayer3.Skin.Characters_Tower_Clear_IsLooping[currentCharacter] ? + ctClearAnimation.CurrentValue % TJAPlayer3.Skin.Characters_Tower_Clear_Ptn[currentCharacter] : + Math.Min(ctClearAnimation.CurrentValue, TJAPlayer3.Skin.Characters_Tower_Clear_Ptn[currentCharacter] - 1); + TJAPlayer3.Tx.Characters_Tower_Clear[currentCharacter][animChar]?.t2D拡大率考慮下中心基準描画(TJAPlayer3.Skin.Game_Tower_Don[0], TJAPlayer3.Skin.Game_Tower_Don[1]); + } + + // Tired Stand + else if (ctIsTired && TJAPlayer3.Skin.Characters_Tower_Standing_Tired_Ptn[currentCharacter] > 0) + { + int animChar = ctStandTiredAnimation.CurrentValue % TJAPlayer3.Skin.Characters_Tower_Standing_Tired_Ptn[currentCharacter]; + TJAPlayer3.Tx.Characters_Tower_Standing_Tired[currentCharacter][animChar]?.t2D拡大率考慮下中心基準描画(TJAPlayer3.Skin.Game_Tower_Don[0], TJAPlayer3.Skin.Game_Tower_Don[1]); // Center X - 50 + } + // Stand + else if (TJAPlayer3.Skin.Characters_Tower_Standing_Ptn[currentCharacter] > 0) + { + int animChar = ctStandingAnimation.CurrentValue % TJAPlayer3.Skin.Characters_Tower_Standing_Ptn[currentCharacter]; + TJAPlayer3.Tx.Characters_Tower_Standing[currentCharacter][animChar]?.t2D拡大率考慮下中心基準描画(TJAPlayer3.Skin.Game_Tower_Don[0], TJAPlayer3.Skin.Game_Tower_Don[1]); // Center X - 50 + } + } + + #endregion + + #region [Miss icon] + + if (CFloorManagement.InvincibilityFrames != null && CFloorManagement.InvincibilityFrames.CurrentValue < CFloorManagement.InvincibilityDurationSpeedDependent) + { + if (TJAPlayer3.Tx.Tower_Miss != null) + TJAPlayer3.Tx.Tower_Miss.Opacity = Math.Min(255, 1000 - CFloorManagement.InvincibilityFrames.CurrentValue); + TJAPlayer3.Tx.Tower_Miss?.t2D下中央基準描画(TJAPlayer3.Skin.Game_Tower_Miss[0], TJAPlayer3.Skin.Game_Tower_Miss[1]); + } + + #endregion + + ctSlideAnimation?.Tick(); + ctClimbDuration?.Tick(); + ctStandingAnimation?.TickLoop(); + ctClimbingAnimation?.TickLoop(); + ctRunningAnimation?.TickLoop(); + ctStandTiredAnimation?.TickLoop(); + ctClimbTiredAnimation?.TickLoop(); + ctRunTiredAnimation?.TickLoop(); + ctClearAnimation?.Tick(); + ctClearTiredAnimation?.Tick(); + ctFailAnimation?.Tick(); + + #endregion + } + else if (!TJAPlayer3.stage演奏ドラム画面.bDoublePlay && TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] != (int)Difficulty.Dan) + { + if (!IsDownNotFound) + { + if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) DownScript?.Update(); + DownScript?.Draw(); + } + } + + + #endregion + + return base.Draw(); + } + + #region[ private ] + //----------------- + + #region 背景 + /*private CTexture Background, + Background_Down, + Background_Down_Clear, + Background_Down_Scroll; + private CTexture[] Background_Up_1st, + Background_Up_2nd, + Background_Up_3rd, + Background_Up_Dan = new CTexture[6], + Background_Up_Tower = new CTexture[8];*/ + #endregion + + /*private CCounter[] ct上背景スクロール用タイマー1st; //上背景のX方向スクロール用 + private CCounter[] ct上背景スクロール用タイマー2nd; //上背景のY方向スクロール用 + private CCounter[] ct上背景スクロール用タイマー3rd; //上背景のY方向スクロール用 + private CCounter ct下背景スクロール用タイマー1; //下背景パーツ1のX方向スクロール用 + private CCounter ct上背景FIFOタイマー; + private CCounter[] ct上背景クリアインタイマー; + private CCounter[] ct上背景スクロール用タイマー1stDan; //上背景のX方向スクロール用 + private CCounter ct上背景スクロール用タイマー2stDan; //上背景のY方向スクロール用 + + private CCounter[] ct上背景スクロール用タイマー1stTower; //上背景のX方向スクロール用 + private CCounter ct上背景スクロール用タイマー2stTower; //上背景のX方向スクロール用 + */ + //private CTexture tx上背景メイン; + //private CTexture tx上背景クリアメイン; + //private CTexture tx下背景メイン; + //private CTexture tx下背景クリアメイン; + //private CTexture tx下背景クリアサブ1; + + private ScriptBG UpScript; + private ScriptBG DownScript; + + private TitleTextureKey ttkTouTatsuKaiSuu; + private TitleTextureKey ttkKai; + private CCachedFontRenderer pfTowerText; + + private bool bFloorChanged = false; + private int currentCharacter; + private CCounter ctSlideAnimation; + private CCounter ctStandingAnimation; + private CCounter ctClimbingAnimation; + private CCounter ctRunningAnimation; + private CCounter ctClearAnimation; + private CCounter ctFailAnimation; + private CCounter ctStandTiredAnimation; + private CCounter ctClimbTiredAnimation; + private CCounter ctRunTiredAnimation; + private CCounter ctClearTiredAnimation; + private CCounter ctClimbDuration; + private bool TowerFinished; + + private CCounter ct炎; + + private bool IsUpNotFound; + private bool IsDownNotFound; + + private EFIFOモード eFadeMode; + //----------------- + #endregion + } +} diff --git a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drums風船.cs b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplBalloon.cs similarity index 79% rename from OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drums風船.cs rename to OpenTaiko/src/Stages/07.Game/Taiko/CActImplBalloon.cs index f471539a..84b8b8a5 100644 --- a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drums風船.cs +++ b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplBalloon.cs @@ -1,350 +1,297 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Drawing; -using System.Diagnostics; -using System.Runtime.InteropServices; -using FDK; - -namespace TJAPlayer3 -{ - internal class CAct演奏Drums風船 : CActivity - { - - - public CAct演奏Drums風船() - { - ST文字位置[] st文字位置Array = new ST文字位置[11]; - - ST文字位置 st文字位置 = new ST文字位置(); - st文字位置.ch = '0'; - st文字位置.pt = new Point(0, 0); - st文字位置Array[0] = st文字位置; - ST文字位置 st文字位置2 = new ST文字位置(); - st文字位置2.ch = '1'; - st文字位置2.pt = new Point(62, 0); - st文字位置Array[1] = st文字位置2; - ST文字位置 st文字位置3 = new ST文字位置(); - st文字位置3.ch = '2'; - st文字位置3.pt = new Point(124, 0); - st文字位置Array[2] = st文字位置3; - ST文字位置 st文字位置4 = new ST文字位置(); - st文字位置4.ch = '3'; - st文字位置4.pt = new Point(186, 0); - st文字位置Array[3] = st文字位置4; - ST文字位置 st文字位置5 = new ST文字位置(); - st文字位置5.ch = '4'; - st文字位置5.pt = new Point(248, 0); - st文字位置Array[4] = st文字位置5; - ST文字位置 st文字位置6 = new ST文字位置(); - st文字位置6.ch = '5'; - st文字位置6.pt = new Point(310, 0); - st文字位置Array[5] = st文字位置6; - ST文字位置 st文字位置7 = new ST文字位置(); - st文字位置7.ch = '6'; - st文字位置7.pt = new Point(372, 0); - st文字位置Array[6] = st文字位置7; - ST文字位置 st文字位置8 = new ST文字位置(); - st文字位置8.ch = '7'; - st文字位置8.pt = new Point(434, 0); - st文字位置Array[7] = st文字位置8; - ST文字位置 st文字位置9 = new ST文字位置(); - st文字位置9.ch = '8'; - st文字位置9.pt = new Point(496, 0); - st文字位置Array[8] = st文字位置9; - ST文字位置 st文字位置10 = new ST文字位置(); - st文字位置10.ch = '9'; - st文字位置10.pt = new Point(558, 0); - st文字位置Array[9] = st文字位置10; - - this.st文字位置 = st文字位置Array; - - base.IsDeActivated = true; - - } - - public override void Activate() - { - this.ct風船終了 = new CCounter(); - this.ct風船ふきだしアニメ = new CCounter(); - this.ct風船アニメ = new CCounter[5]; - for (int i = 0; i < 5; i++) - { - this.ct風船アニメ[i] = new CCounter(); - } - - this.ct風船ふきだしアニメ = new CCounter(0, 1, 100, TJAPlayer3.Timer); - - KusudamaScript = new (CSkin.Path($"{TextureLoader.BASE}{TextureLoader.GAME}{TextureLoader.BALLOON}{TextureLoader.KUSUDAMA}Script.lua")); - KusudamaScript.Init(); - - base.Activate(); - } - - public override void DeActivate() - { - KusudamaScript.Dispose(); - - this.ct風船終了 = null; - this.ct風船ふきだしアニメ = null; - - base.DeActivate(); - } - - public override void CreateManagedResource() - { - base.CreateManagedResource(); - } - - public override void ReleaseManagedResource() - { - base.ReleaseManagedResource(); - } - - public override int Draw() - { - return base.Draw(); - } - - public void KusuIn() => KusudamaScript.KusuIn(); - public void KusuBroke() => KusudamaScript.KusuBroke(); - public void KusuMiss() => KusudamaScript.KusuMiss(); - - public enum EBalloonType - { - BALLOON, - KUSUDAMA, - FUSEROLL - } - - public void tDrawKusudama() - { - if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) - { - KusudamaScript.Update(); - } - KusudamaScript.Draw(); - } - - public int On進行描画(int n連打ノルマ, int n連打数, int player, EBalloonType btype) - { - this.ct風船ふきだしアニメ.TickLoop(); - this.ct風船アニメ[player].Tick(); - - //CDTXMania.act文字コンソール.tPrint( 0, 16, C文字コンソール.Eフォント種別.赤, this.ct風船終了.n現在の値.ToString() ); - int[] n残り打数 = new int[] { 0, 0, 0, 0, 0 }; - #region[ ] - if (n連打ノルマ > 0) - { - if (n連打ノルマ < 5) - { - n残り打数 = new int[] { 4, 3, 2, 1, 0 }; - } - else - { - n残り打数[0] = (n連打ノルマ / 5) * 4; - n残り打数[1] = (n連打ノルマ / 5) * 3; - n残り打数[2] = (n連打ノルマ / 5) * 2; - n残り打数[3] = (n連打ノルマ / 5) * 1; - } - } - #endregion - - if (n連打数 != 0) - { - int x; - int y; - int frame_x; - int frame_y; - int num_x; - int num_y; - if (TJAPlayer3.ConfigIni.nPlayerCount == 5) - { - x = TJAPlayer3.Skin.Game_Balloon_Balloon_5P[0] + (TJAPlayer3.Skin.Game_UIMove_5P[0] * player); - y = TJAPlayer3.Skin.Game_Balloon_Balloon_5P[1] + (TJAPlayer3.Skin.Game_UIMove_5P[1] * player); - frame_x = TJAPlayer3.Skin.Game_Balloon_Balloon_Frame_5P[0] + (TJAPlayer3.Skin.Game_UIMove_5P[0] * player); - frame_y = TJAPlayer3.Skin.Game_Balloon_Balloon_Frame_5P[1] + (TJAPlayer3.Skin.Game_UIMove_5P[1] * player); - num_x = TJAPlayer3.Skin.Game_Balloon_Balloon_Number_5P[0] + (TJAPlayer3.Skin.Game_UIMove_5P[0] * player); - num_y = TJAPlayer3.Skin.Game_Balloon_Balloon_Number_5P[1] + (TJAPlayer3.Skin.Game_UIMove_5P[1] * player); - } - else if (TJAPlayer3.ConfigIni.nPlayerCount == 4 || TJAPlayer3.ConfigIni.nPlayerCount == 3) - { - x = TJAPlayer3.Skin.Game_Balloon_Balloon_4P[0] + (TJAPlayer3.Skin.Game_UIMove_4P[0] * player); - y = TJAPlayer3.Skin.Game_Balloon_Balloon_4P[1] + (TJAPlayer3.Skin.Game_UIMove_4P[1] * player); - frame_x = TJAPlayer3.Skin.Game_Balloon_Balloon_Frame_4P[0] + (TJAPlayer3.Skin.Game_UIMove_4P[0] * player); - frame_y = TJAPlayer3.Skin.Game_Balloon_Balloon_Frame_4P[1] + (TJAPlayer3.Skin.Game_UIMove_4P[1] * player); - num_x = TJAPlayer3.Skin.Game_Balloon_Balloon_Number_4P[0] + (TJAPlayer3.Skin.Game_UIMove_4P[0] * player); - num_y = TJAPlayer3.Skin.Game_Balloon_Balloon_Number_4P[1] + (TJAPlayer3.Skin.Game_UIMove_4P[1] * player); - } - else - { - x = TJAPlayer3.Skin.Game_Balloon_Balloon_X[player]; - y = TJAPlayer3.Skin.Game_Balloon_Balloon_Y[player]; - frame_x = TJAPlayer3.Skin.Game_Balloon_Balloon_Frame_X[player]; - frame_y = TJAPlayer3.Skin.Game_Balloon_Balloon_Frame_Y[player]; - num_x = TJAPlayer3.Skin.Game_Balloon_Balloon_Number_X[player]; - num_y = TJAPlayer3.Skin.Game_Balloon_Balloon_Number_Y[player]; - } - //1P:0 2P:245 - //if (CDTXMania.Tx.Chara_Balloon_Breaking != null && CDTXMania.ConfigIni.ShowChara) - // CDTXMania.Tx.Chara_Balloon_Breaking.t2D描画(CDTXMania.app.Device, CDTXMania.Skin.Game_Chara_Balloon_X[player], CDTXMania.Skin.Game_Chara_Balloon_Y[player]); - for (int j = 0; j < 5; j++) - { - - if (n残り打数[j] < n連打数 && btype == EBalloonType.BALLOON) - { - if (TJAPlayer3.Tx.Balloon_Breaking[j] != null) - TJAPlayer3.Tx.Balloon_Breaking[j].t2D描画(x + (this.ct風船ふきだしアニメ.CurrentValue == 1 ? 3 : 0), y); - break; - } - } - //1P:31 2P:329 - - if (btype == EBalloonType.BALLOON) - { - if (TJAPlayer3.Tx.Balloon_Balloon != null) - TJAPlayer3.Tx.Balloon_Balloon.t2D描画(frame_x, frame_y); - this.t文字表示(num_x, num_y, n連打数, player); - } - else if (btype == EBalloonType.FUSEROLL) - { - if (TJAPlayer3.Tx.Fuse_Balloon != null) - TJAPlayer3.Tx.Fuse_Balloon.t2D描画(frame_x, frame_y); - this.tFuseNumber(num_x, num_y, n連打数, player); - } - else if (btype == EBalloonType.KUSUDAMA && player == 0) - { - /* - if (TJAPlayer3.Tx.Kusudama_Back != null) - TJAPlayer3.Tx.Kusudama_Back.t2D描画(0, 0); - if (TJAPlayer3.Tx.Kusudama != null) - TJAPlayer3.Tx.Kusudama.t2D描画(0, 0); - */ - this.tKusudamaNumber(n連打数); - } - - //CDTXMania.act文字コンソール.tPrint( 0, 0, C文字コンソール.Eフォント種別.白, n連打数.ToString() ); - } - if (btype == EBalloonType.KUSUDAMA) - { - /* - for(int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) - { - TJAPlayer3.stage演奏ドラム画面.actChara.b風船連打中[i] = false; - TJAPlayer3.stage演奏ドラム画面.b連打中[i] = false; - } - */ - } - else - { - if (n連打数 == 0 && TJAPlayer3.stage演奏ドラム画面.actChara.b風船連打中[player]) - { - TJAPlayer3.stage演奏ドラム画面.actChara.b風船連打中[player] = false; - TJAPlayer3.stage演奏ドラム画面.b連打中[player] = false; - } - } - - - - - - return base.Draw(); - } - - private KusudamaScript KusudamaScript; - - //private CTexture tx連打枠; - //private CTexture tx連打数字; - private readonly ST文字位置[] st文字位置; - - //private CTexture txキャラクター; - //private CTexture txキャラクター_風船終了; - - //private CTexture[] tx風船枠 = new CTexture[6]; - - private CCounter ct風船終了; - private CCounter ct風船ふきだしアニメ; - - public CCounter[] ct風船アニメ; - private float[] RollScale = new float[] - { - 0.000f, - 0.123f, // リピート - 0.164f, - 0.164f, - 0.164f, - 0.137f, - 0.110f, - 0.082f, - 0.055f, - 0.000f - }; - - [StructLayout(LayoutKind.Sequential)] - private struct ST文字位置 - { - public char ch; - public Point pt; - } - - private void _nbDisplay(CTexture tx, int num, int x, int y) - { - int[] nums = CConversion.SeparateDigits(num); - for (int j = 0; j < nums.Length; j++) - { - float offset = j - (nums.Length / 2.0f); - float _x = x - (TJAPlayer3.Skin.Game_Balloon_Number_Interval[0] * offset); - float _y = y - (TJAPlayer3.Skin.Game_Balloon_Number_Interval[1] * offset); - - float width = tx.sz画像サイズ.Width / 10.0f; - float height = tx.sz画像サイズ.Height; - - tx.t2D拡大率考慮下基準描画(_x, _y, new RectangleF(width * nums[j], 0, width, height)); - } - } - - private void tKusudamaNumber(int num) - { - if (TJAPlayer3.Tx.Kusudama_Number == null) return; - TJAPlayer3.Tx.Kusudama_Number.vcScaleRatio.X = TJAPlayer3.Skin.Game_Balloon_Balloon_Number_Scale; - TJAPlayer3.Tx.Kusudama_Number.vcScaleRatio.Y = TJAPlayer3.Skin.Game_Balloon_Balloon_Number_Scale; - int x = TJAPlayer3.Skin.Game_Kusudama_Number_X; - int y = TJAPlayer3.Skin.Game_Kusudama_Number_Y; - - int[] nums = CConversion.SeparateDigits(num); - for (int j = 0; j < nums.Length; j++) - { - float offset = j - ((nums.Length - 2) / 2.0f); - float width = TJAPlayer3.Tx.Kusudama_Number.sz画像サイズ.Width / 10.0f; - float height = TJAPlayer3.Tx.Kusudama_Number.sz画像サイズ.Height; - float _x = x - (width * offset); - float _y = y; - - TJAPlayer3.Tx.Kusudama_Number.t2D拡大率考慮下基準描画(_x, _y, new RectangleF(width * nums[j], 0, width, height)); - } - } - - private void tFuseNumber(int x, int y, int num, int nPlayer) - { - if (TJAPlayer3.Tx.Fuse_Number == null) return; - TJAPlayer3.Tx.Fuse_Number.vcScaleRatio.X = TJAPlayer3.Skin.Game_Balloon_Balloon_Number_Scale; - TJAPlayer3.Tx.Fuse_Number.vcScaleRatio.Y = TJAPlayer3.Skin.Game_Balloon_Balloon_Number_Scale + RollScale[this.ct風船アニメ[nPlayer].CurrentValue]; - - _nbDisplay(TJAPlayer3.Tx.Fuse_Number, num, x, y); - } - - private void t文字表示(int x, int y, int num, int nPlayer) - { - if (TJAPlayer3.Tx.Balloon_Number_Roll == null) return; - TJAPlayer3.Tx.Balloon_Number_Roll.vcScaleRatio.X = TJAPlayer3.Skin.Game_Balloon_Balloon_Number_Scale; - TJAPlayer3.Tx.Balloon_Number_Roll.vcScaleRatio.Y = TJAPlayer3.Skin.Game_Balloon_Balloon_Number_Scale + RollScale[this.ct風船アニメ[nPlayer].CurrentValue]; - - _nbDisplay(TJAPlayer3.Tx.Balloon_Number_Roll, num, x, y); - } - - public void tEnd() - { - this.ct風船終了 = new CCounter(0, 80, 10, SoundManager.PlayTimer); - } - } -} +using System; +using System.Collections.Generic; +using System.Text; +using System.Drawing; +using System.Diagnostics; +using System.Runtime.InteropServices; +using FDK; + +namespace TJAPlayer3 +{ + internal class CActImplBalloon : CActivity + { + + + public CActImplBalloon() + { + base.IsDeActivated = true; + + } + + public override void Activate() + { + this.ct風船終了 = new CCounter(); + this.ct風船ふきだしアニメ = new CCounter(); + this.ct風船アニメ = new CCounter[5]; + for (int i = 0; i < 5; i++) + { + this.ct風船アニメ[i] = new CCounter(); + } + + this.ct風船ふきだしアニメ = new CCounter(0, 1, 100, TJAPlayer3.Timer); + + KusudamaScript = new (CSkin.Path($"{TextureLoader.BASE}{TextureLoader.GAME}{TextureLoader.BALLOON}{TextureLoader.KUSUDAMA}Script.lua")); + KusudamaScript.Init(); + + base.Activate(); + } + + public override void DeActivate() + { + KusudamaScript.Dispose(); + + this.ct風船終了 = null; + this.ct風船ふきだしアニメ = null; + + base.DeActivate(); + } + + public override void CreateManagedResource() + { + base.CreateManagedResource(); + } + + public override void ReleaseManagedResource() + { + base.ReleaseManagedResource(); + } + + public override int Draw() + { + return base.Draw(); + } + + public void KusuIn() => KusudamaScript.KusuIn(); + public void KusuBroke() => KusudamaScript.KusuBroke(); + public void KusuMiss() => KusudamaScript.KusuMiss(); + + public enum EBalloonType + { + BALLOON, + KUSUDAMA, + FUSEROLL + } + + public void tDrawKusudama() + { + if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) + { + KusudamaScript.Update(); + } + KusudamaScript.Draw(); + } + + public int On進行描画(int n連打ノルマ, int n連打数, int player, EBalloonType btype) + { + this.ct風船ふきだしアニメ.TickLoop(); + this.ct風船アニメ[player].Tick(); + + //CDTXMania.act文字コンソール.tPrint( 0, 16, C文字コンソール.Eフォント種別.赤, this.ct風船終了.n現在の値.ToString() ); + int[] n残り打数 = new int[] { 0, 0, 0, 0, 0 }; + #region[ ] + if (n連打ノルマ > 0) + { + if (n連打ノルマ < 5) + { + n残り打数 = new int[] { 4, 3, 2, 1, 0 }; + } + else + { + n残り打数[0] = (n連打ノルマ / 5) * 4; + n残り打数[1] = (n連打ノルマ / 5) * 3; + n残り打数[2] = (n連打ノルマ / 5) * 2; + n残り打数[3] = (n連打ノルマ / 5) * 1; + } + } + #endregion + + if (n連打数 != 0) + { + int x; + int y; + int frame_x; + int frame_y; + int num_x; + int num_y; + if (TJAPlayer3.ConfigIni.nPlayerCount == 5) + { + x = TJAPlayer3.Skin.Game_Balloon_Balloon_5P[0] + (TJAPlayer3.Skin.Game_UIMove_5P[0] * player); + y = TJAPlayer3.Skin.Game_Balloon_Balloon_5P[1] + (TJAPlayer3.Skin.Game_UIMove_5P[1] * player); + frame_x = TJAPlayer3.Skin.Game_Balloon_Balloon_Frame_5P[0] + (TJAPlayer3.Skin.Game_UIMove_5P[0] * player); + frame_y = TJAPlayer3.Skin.Game_Balloon_Balloon_Frame_5P[1] + (TJAPlayer3.Skin.Game_UIMove_5P[1] * player); + num_x = TJAPlayer3.Skin.Game_Balloon_Balloon_Number_5P[0] + (TJAPlayer3.Skin.Game_UIMove_5P[0] * player); + num_y = TJAPlayer3.Skin.Game_Balloon_Balloon_Number_5P[1] + (TJAPlayer3.Skin.Game_UIMove_5P[1] * player); + } + else if (TJAPlayer3.ConfigIni.nPlayerCount == 4 || TJAPlayer3.ConfigIni.nPlayerCount == 3) + { + x = TJAPlayer3.Skin.Game_Balloon_Balloon_4P[0] + (TJAPlayer3.Skin.Game_UIMove_4P[0] * player); + y = TJAPlayer3.Skin.Game_Balloon_Balloon_4P[1] + (TJAPlayer3.Skin.Game_UIMove_4P[1] * player); + frame_x = TJAPlayer3.Skin.Game_Balloon_Balloon_Frame_4P[0] + (TJAPlayer3.Skin.Game_UIMove_4P[0] * player); + frame_y = TJAPlayer3.Skin.Game_Balloon_Balloon_Frame_4P[1] + (TJAPlayer3.Skin.Game_UIMove_4P[1] * player); + num_x = TJAPlayer3.Skin.Game_Balloon_Balloon_Number_4P[0] + (TJAPlayer3.Skin.Game_UIMove_4P[0] * player); + num_y = TJAPlayer3.Skin.Game_Balloon_Balloon_Number_4P[1] + (TJAPlayer3.Skin.Game_UIMove_4P[1] * player); + } + else + { + x = TJAPlayer3.Skin.Game_Balloon_Balloon_X[player]; + y = TJAPlayer3.Skin.Game_Balloon_Balloon_Y[player]; + frame_x = TJAPlayer3.Skin.Game_Balloon_Balloon_Frame_X[player]; + frame_y = TJAPlayer3.Skin.Game_Balloon_Balloon_Frame_Y[player]; + num_x = TJAPlayer3.Skin.Game_Balloon_Balloon_Number_X[player]; + num_y = TJAPlayer3.Skin.Game_Balloon_Balloon_Number_Y[player]; + } + //1P:0 2P:245 + //if (CDTXMania.Tx.Chara_Balloon_Breaking != null && CDTXMania.ConfigIni.ShowChara) + // CDTXMania.Tx.Chara_Balloon_Breaking.t2D描画(CDTXMania.app.Device, CDTXMania.Skin.Game_Chara_Balloon_X[player], CDTXMania.Skin.Game_Chara_Balloon_Y[player]); + for (int j = 0; j < 5; j++) + { + + if (n残り打数[j] < n連打数 && btype == EBalloonType.BALLOON) + { + if (TJAPlayer3.Tx.Balloon_Breaking[j] != null) + TJAPlayer3.Tx.Balloon_Breaking[j].t2D描画(x + (this.ct風船ふきだしアニメ.CurrentValue == 1 ? 3 : 0), y); + break; + } + } + //1P:31 2P:329 + + if (btype == EBalloonType.BALLOON) + { + if (TJAPlayer3.Tx.Balloon_Balloon != null) + TJAPlayer3.Tx.Balloon_Balloon.t2D描画(frame_x, frame_y); + this.t文字表示(num_x, num_y, n連打数, player); + } + else if (btype == EBalloonType.FUSEROLL) + { + if (TJAPlayer3.Tx.Fuse_Balloon != null) + TJAPlayer3.Tx.Fuse_Balloon.t2D描画(frame_x, frame_y); + this.tFuseNumber(num_x, num_y, n連打数, player); + } + else if (btype == EBalloonType.KUSUDAMA && player == 0) + { + /* + if (TJAPlayer3.Tx.Kusudama_Back != null) + TJAPlayer3.Tx.Kusudama_Back.t2D描画(0, 0); + if (TJAPlayer3.Tx.Kusudama != null) + TJAPlayer3.Tx.Kusudama.t2D描画(0, 0); + */ + this.tKusudamaNumber(n連打数); + } + + //CDTXMania.act文字コンソール.tPrint( 0, 0, C文字コンソール.Eフォント種別.白, n連打数.ToString() ); + } + if (btype == EBalloonType.KUSUDAMA) + { + /* + for(int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) + { + TJAPlayer3.stage演奏ドラム画面.actChara.b風船連打中[i] = false; + TJAPlayer3.stage演奏ドラム画面.b連打中[i] = false; + } + */ + } + else + { + if (n連打数 == 0 && TJAPlayer3.stage演奏ドラム画面.actChara.b風船連打中[player]) + { + TJAPlayer3.stage演奏ドラム画面.actChara.b風船連打中[player] = false; + TJAPlayer3.stage演奏ドラム画面.b連打中[player] = false; + } + } + + + + + + return base.Draw(); + } + + private KusudamaScript KusudamaScript; + + + private CCounter ct風船終了; + private CCounter ct風船ふきだしアニメ; + + public CCounter[] ct風船アニメ; + private float[] RollScale = new float[] + { + 0.000f, + 0.123f, // リピート + 0.164f, + 0.164f, + 0.164f, + 0.137f, + 0.110f, + 0.082f, + 0.055f, + 0.000f + }; + + [StructLayout(LayoutKind.Sequential)] + private struct ST文字位置 + { + public char ch; + public Point pt; + } + + private void _nbDisplay(CTexture tx, int num, int x, int y) + { + int[] nums = CConversion.SeparateDigits(num); + for (int j = 0; j < nums.Length; j++) + { + float offset = j - (nums.Length / 2.0f); + float _x = x - (TJAPlayer3.Skin.Game_Balloon_Number_Interval[0] * offset); + float _y = y - (TJAPlayer3.Skin.Game_Balloon_Number_Interval[1] * offset); + + float width = tx.sz画像サイズ.Width / 10.0f; + float height = tx.sz画像サイズ.Height; + + tx.t2D拡大率考慮下基準描画(_x, _y, new RectangleF(width * nums[j], 0, width, height)); + } + } + + private void tKusudamaNumber(int num) + { + if (TJAPlayer3.Tx.Kusudama_Number == null) return; + TJAPlayer3.Tx.Kusudama_Number.vcScaleRatio.X = TJAPlayer3.Skin.Game_Balloon_Balloon_Number_Scale; + TJAPlayer3.Tx.Kusudama_Number.vcScaleRatio.Y = TJAPlayer3.Skin.Game_Balloon_Balloon_Number_Scale; + int x = TJAPlayer3.Skin.Game_Kusudama_Number_X; + int y = TJAPlayer3.Skin.Game_Kusudama_Number_Y; + + int[] nums = CConversion.SeparateDigits(num); + for (int j = 0; j < nums.Length; j++) + { + float offset = j - ((nums.Length - 2) / 2.0f); + float width = TJAPlayer3.Tx.Kusudama_Number.sz画像サイズ.Width / 10.0f; + float height = TJAPlayer3.Tx.Kusudama_Number.sz画像サイズ.Height; + float _x = x - (width * offset); + float _y = y; + + TJAPlayer3.Tx.Kusudama_Number.t2D拡大率考慮下基準描画(_x, _y, new RectangleF(width * nums[j], 0, width, height)); + } + } + + private void tFuseNumber(int x, int y, int num, int nPlayer) + { + if (TJAPlayer3.Tx.Fuse_Number == null) return; + TJAPlayer3.Tx.Fuse_Number.vcScaleRatio.X = TJAPlayer3.Skin.Game_Balloon_Balloon_Number_Scale; + TJAPlayer3.Tx.Fuse_Number.vcScaleRatio.Y = TJAPlayer3.Skin.Game_Balloon_Balloon_Number_Scale + RollScale[this.ct風船アニメ[nPlayer].CurrentValue]; + + _nbDisplay(TJAPlayer3.Tx.Fuse_Number, num, x, y); + } + + private void t文字表示(int x, int y, int num, int nPlayer) + { + if (TJAPlayer3.Tx.Balloon_Number_Roll == null) return; + TJAPlayer3.Tx.Balloon_Number_Roll.vcScaleRatio.X = TJAPlayer3.Skin.Game_Balloon_Balloon_Number_Scale; + TJAPlayer3.Tx.Balloon_Number_Roll.vcScaleRatio.Y = TJAPlayer3.Skin.Game_Balloon_Balloon_Number_Scale + RollScale[this.ct風船アニメ[nPlayer].CurrentValue]; + + _nbDisplay(TJAPlayer3.Tx.Balloon_Number_Roll, num, x, y); + } + + public void tEnd() + { + this.ct風船終了 = new CCounter(0, 80, 10, SoundManager.PlayTimer); + } + } +} diff --git a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drumsキャラクター.cs b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplCharacter.cs similarity index 98% rename from OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drumsキャラクター.cs rename to OpenTaiko/src/Stages/07.Game/Taiko/CActImplCharacter.cs index 4e5d6f05..83b6147c 100644 --- a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drumsキャラクター.cs +++ b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplCharacter.cs @@ -1,1077 +1,1077 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Globalization; -using System.Runtime.InteropServices; -using System.Drawing; -using System.Diagnostics; -using FDK; - - -namespace TJAPlayer3 -{ - //クラスの設置位置は必ず演奏画面共通に置くこと。 - //そうしなければBPM変化に対応できません。 - - //完成している部分は以下のとおり。(画像完成+動作確認完了で完成とする) - //_通常モーション - //_ゴーゴータイムモーション - //_クリア時モーション - // - internal class CAct演奏Drumsキャラクター : CActivity - { - public CAct演奏Drumsキャラクター() - { - - } - - public override void Activate() - { - for(int i = 0; i < 5; i++) - { - - /* - ctChara_Normal[i] = new CCounter(); - ctChara_Miss[i] = new CCounter(); - ctChara_MissDown[i] = new CCounter(); - ctChara_GoGo[i] = new CCounter(); - ctChara_Clear[i] = new CCounter(); - - this.ctキャラクターアクション_10コンボ[i] = new CCounter(); - this.ctキャラクターアクション_10コンボMAX[i] = new CCounter(); - this.ctキャラクターアクション_ゴーゴースタート[i] = new CCounter(); - this.ctキャラクターアクション_ゴーゴースタートMAX[i] = new CCounter(); - this.ctキャラクターアクション_ノルマ[i] = new CCounter(); - this.ctキャラクターアクション_魂MAX[i] = new CCounter(); - this.ctキャラクターアクション_Return[i] = new CCounter(); - */ - - //CharaAction_Balloon_Breaking[i] = new CCounter(); - //CharaAction_Balloon_Broke[i] = new CCounter(); - //CharaAction_Balloon_Miss[i] = new CCounter(); - CharaAction_Balloon_Delay[i] = new CCounter(); - ctKusuIn[i] = new(); - - // Currently used character - int p = TJAPlayer3.GetActualPlayer(i); - - this.iCurrentCharacter[i] = Math.Max(0, Math.Min(TJAPlayer3.SaveFileInstances[p].data.Character, TJAPlayer3.Skin.Characters_Ptn - 1)); - - if (TJAPlayer3.Skin.Characters_Normal_Ptn[this.iCurrentCharacter[i]] != 0) ChangeAnime(i, Anime.Normal, true); - else ChangeAnime(i, Anime.None, true); - - this.b風船連打中[i] = false; - this.b演奏中[i] = false; - - // CharaAction_Balloon_FadeOut[i] = new Animations.FadeOut(TJAPlayer3.Skin.Game_Chara_Balloon_FadeOut); - CharaAction_Balloon_FadeOut[i] = new Animations.FadeOut(TJAPlayer3.Skin.Characters_Balloon_FadeOut[this.iCurrentCharacter[i]]); - - var tick = TJAPlayer3.Skin.Characters_Balloon_Timer[this.iCurrentCharacter[i]]; - - var balloonBrokePtn = TJAPlayer3.Skin.Characters_Balloon_Broke_Ptn[this.iCurrentCharacter[i]]; - var balloonMissPtn = TJAPlayer3.Skin.Characters_Balloon_Miss_Ptn[this.iCurrentCharacter[i]]; - - CharaAction_Balloon_FadeOut_StartMs[i] = new int[2]; - - CharaAction_Balloon_FadeOut_StartMs[i][0] = (balloonBrokePtn * tick) - TJAPlayer3.Skin.Characters_Balloon_FadeOut[this.iCurrentCharacter[i]]; - CharaAction_Balloon_FadeOut_StartMs[i][1] = (balloonMissPtn * tick) - TJAPlayer3.Skin.Characters_Balloon_FadeOut[this.iCurrentCharacter[i]]; - - if (balloonBrokePtn > 1) CharaAction_Balloon_FadeOut_StartMs[i][0] /= balloonBrokePtn - 1; - if (balloonMissPtn > 1) CharaAction_Balloon_FadeOut_StartMs[i][1] /= balloonMissPtn - 1; // - 1はタイマー用 - - if (CharaAction_Balloon_Delay[i] != null) CharaAction_Balloon_Delay[i].CurrentValue = (int)CharaAction_Balloon_Delay[i].EndValue; - } - - base.Activate(); - } - - public override void DeActivate() - { - for (int i = 0; i < 5; i++) - { - /* - ctChara_Normal[i] = null; - ctChara_Miss[i] = null; - ctChara_MissDown[i] = null; - ctChara_GoGo[i] = null; - ctChara_Clear[i] = null; - this.ctキャラクターアクション_10コンボ[i] = null; - this.ctキャラクターアクション_10コンボMAX[i] = null; - this.ctキャラクターアクション_ゴーゴースタート[i] = null; - this.ctキャラクターアクション_ゴーゴースタートMAX[i] = null; - this.ctキャラクターアクション_ノルマ[i] = null; - this.ctキャラクターアクション_魂MAX[i] = null; - this.ctキャラクターアクション_Return[i] = null; - */ - - //CharaAction_Balloon_Breaking[i] = null; - //CharaAction_Balloon_Broke[i] = null; - //CharaAction_Balloon_Miss[i] = null; - CharaAction_Balloon_Delay[i] = null; - - CharaAction_Balloon_FadeOut[i] = null; - } - - base.DeActivate(); - } - - public override void CreateManagedResource() - { - for (int i = 0; i < 5; i++) - { - //this.arモーション番号[i] = C変換.ar配列形式のstringをint配列に変換して返す(TJAPlayer3.Skin.Characters_Motion_Normal[this.iCurrentCharacter[i]]); - //this.arMissモーション番号[i] = C変換.ar配列形式のstringをint配列に変換して返す(TJAPlayer3.Skin.Characters_Motion_Miss[this.iCurrentCharacter[i]]); - //this.arMissDownモーション番号[i] = C変換.ar配列形式のstringをint配列に変換して返す(TJAPlayer3.Skin.Characters_Motion_MissDown[this.iCurrentCharacter[i]]); - //this.arゴーゴーモーション番号[i] = C変換.ar配列形式のstringをint配列に変換して返す(TJAPlayer3.Skin.Characters_Motion_GoGo[this.iCurrentCharacter[i]]); - //this.arクリアモーション番号[i] = C変換.ar配列形式のstringをint配列に変換して返す(TJAPlayer3.Skin.Characters_Motion_Clear[this.iCurrentCharacter[i]]); - - //if (arモーション番号[i] == null) this.arモーション番号[i] = C変換.ar配列形式のstringをint配列に変換して返す("0,0"); - //if (arMissモーション番号[i] == null) this.arMissモーション番号[i] = C変換.ar配列形式のstringをint配列に変換して返す("0,0"); - //if (arMissDownモーション番号[i] == null) this.arMissDownモーション番号[i] = C変換.ar配列形式のstringをint配列に変換して返す("0,0"); - //if (arゴーゴーモーション番号[i] == null) this.arゴーゴーモーション番号[i] = C変換.ar配列形式のstringをint配列に変換して返す("0,0"); - //if (arクリアモーション番号[i] == null) this.arクリアモーション番号[i] = C変換.ar配列形式のstringをint配列に変換して返す("0,0"); - } - base.CreateManagedResource(); - } - - public override void ReleaseManagedResource() - { - base.ReleaseManagedResource(); - } - - public override int Draw() - { - for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) - { - int Character = this.iCurrentCharacter[i]; - - if (TJAPlayer3.Skin.Characters_Ptn == 0) - break; - - // Blinking animation during invincibility frames - if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Tower) - { - if (CFloorManagement.isBlinking() == true) - break; - } - - CTexture nowChara = null; - - void updateNormal() - { - if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) - { - nNowCharaCounter[i] += ((Math.Abs((float)TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM[i]) / 60.0f) * (float)TJAPlayer3.FPS.DeltaTime) / nCharaBeat[i]; - } - } - void updateBalloon() - { - if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) - { - nNowCharaCounter[i] += (float)TJAPlayer3.FPS.DeltaTime / nCharaBeat[i]; - } - } - - ctKusuIn[i].Tick(); - - bool endAnime = nNowCharaCounter[i] >= 1; - nNowCharaFrame[i] = (int)(nNowCharaCounter[i] * (nCharaFrameCount[i] + 1)); - nNowCharaFrame[i] = Math.Min(nNowCharaFrame[i], nCharaFrameCount[i]); - - if (eNowAnime[i] != Anime.None) - { - switch (eNowAnime[i]) - { - case Anime.None: - { - ReturnDefaultAnime(i, false); - } - break; - case Anime.Normal: - { - updateNormal(); - ReturnDefaultAnime(i, false); - nowChara = TJAPlayer3.Tx.Characters_Normal[Character][TJAPlayer3.Skin.Characters_Motion_Normal[Character][nNowCharaFrame[i]]]; - if (endAnime) - { - nNowCharaCounter[i] = 0; - nNowCharaFrame[i] = 0; - } - } - break; - case Anime.Miss: - { - updateNormal(); - ReturnDefaultAnime(i, false); - nowChara = TJAPlayer3.Tx.Characters_Normal_Missed[Character][TJAPlayer3.Skin.Characters_Motion_Miss[Character][nNowCharaFrame[i]]]; - if (endAnime) - { - nNowCharaCounter[i] = 0; - nNowCharaFrame[i] = 0; - } - } - break; - case Anime.MissDown: - { - updateNormal(); - ReturnDefaultAnime(i, false); - nowChara = TJAPlayer3.Tx.Characters_Normal_MissedDown[Character][TJAPlayer3.Skin.Characters_Motion_MissDown[Character][nNowCharaFrame[i]]]; - if (endAnime) - { - nNowCharaCounter[i] = 0; - nNowCharaFrame[i] = 0; - } - } - break; - case Anime.Cleared: - { - updateNormal(); - ReturnDefaultAnime(i, false); - nowChara = TJAPlayer3.Tx.Characters_Normal_Cleared[Character][TJAPlayer3.Skin.Characters_Motion_Clear[Character][nNowCharaFrame[i]]]; - if (endAnime) - { - nNowCharaCounter[i] = 0; - nNowCharaFrame[i] = 0; - } - } - break; - case Anime.Maxed: - { - updateNormal(); - ReturnDefaultAnime(i, false); - nowChara = TJAPlayer3.Tx.Characters_Normal_Maxed[Character][TJAPlayer3.Skin.Characters_Motion_ClearMax[Character][nNowCharaFrame[i]]]; - if (endAnime) - { - nNowCharaCounter[i] = 0; - nNowCharaFrame[i] = 0; - } - } - break; - case Anime.MissIn: - { - updateNormal(); - if (TJAPlayer3.Tx.Characters_MissIn[Character] != null && TJAPlayer3.Skin.Characters_MissIn_Ptn[Character] != 0) - { - nowChara = TJAPlayer3.Tx.Characters_MissIn[Character][TJAPlayer3.Skin.Characters_Motion_MissIn[Character][nNowCharaFrame[i]]]; - } - if (endAnime) - { - ReturnDefaultAnime(i, true); - } - } - break; - case Anime.MissDownIn: - { - updateNormal(); - if (TJAPlayer3.Tx.Characters_MissDownIn[Character] != null && TJAPlayer3.Skin.Characters_MissDownIn_Ptn[Character] != 0) - { - nowChara = TJAPlayer3.Tx.Characters_MissDownIn[Character][TJAPlayer3.Skin.Characters_Motion_MissDownIn[Character][nNowCharaFrame[i]]]; - } - if (endAnime) - { - ReturnDefaultAnime(i, true); - } - } - break; - case Anime.GoGoTime: - { - updateNormal(); - ReturnDefaultAnime(i, false); - nowChara = TJAPlayer3.Tx.Characters_GoGoTime[Character][TJAPlayer3.Skin.Characters_Motion_GoGo[Character][nNowCharaFrame[i]]]; - if (endAnime) - { - nNowCharaCounter[i] = 0; - nNowCharaFrame[i] = 0; - } - } - break; - case Anime.GoGoTime_Maxed: - { - updateNormal(); - ReturnDefaultAnime(i, false); - nowChara = TJAPlayer3.Tx.Characters_GoGoTime_Maxed[Character][TJAPlayer3.Skin.Characters_Motion_GoGoMax[Character][nNowCharaFrame[i]]]; - if (endAnime) - { - nNowCharaCounter[i] = 0; - nNowCharaFrame[i] = 0; - } - } - break; - case Anime.Combo10: - { - updateNormal(); - if (TJAPlayer3.Tx.Characters_10Combo[Character] != null && TJAPlayer3.Skin.Characters_10Combo_Ptn[Character] != 0) - { - nowChara = TJAPlayer3.Tx.Characters_10Combo[Character][TJAPlayer3.Skin.Characters_Motion_10Combo[Character][nNowCharaFrame[i]]]; - } - if (endAnime) - { - ReturnDefaultAnime(i, true); - } - } - break; - case Anime.Combo10_Clear: - { - updateNormal(); - if (TJAPlayer3.Tx.Characters_10Combo_Clear[Character] != null && TJAPlayer3.Skin.Characters_10Combo_Clear_Ptn[Character] != 0) - { - nowChara = TJAPlayer3.Tx.Characters_10Combo_Clear[Character][TJAPlayer3.Skin.Characters_Motion_10Combo_Clear[Character][nNowCharaFrame[i]]]; - } - if (endAnime) - { - ReturnDefaultAnime(i, true); - } - } - break; - case Anime.Combo10_Max: - { - updateNormal(); - if (TJAPlayer3.Tx.Characters_10Combo_Maxed[Character] != null && TJAPlayer3.Skin.Characters_10Combo_Maxed_Ptn[Character] != 0) - { - nowChara = TJAPlayer3.Tx.Characters_10Combo_Maxed[Character][TJAPlayer3.Skin.Characters_Motion_10ComboMax[Character][nNowCharaFrame[i]]]; - } - if (endAnime) - { - ReturnDefaultAnime(i, true); - } - } - break; - case Anime.GoGoStart: - { - updateNormal(); - if (TJAPlayer3.Tx.Characters_GoGoStart[Character] != null && TJAPlayer3.Skin.Characters_GoGoStart_Ptn[Character] != 0) - { - nowChara = TJAPlayer3.Tx.Characters_GoGoStart[Character][TJAPlayer3.Skin.Characters_Motion_GoGoStart[Character][nNowCharaFrame[i]]]; - } - if (endAnime) - { - ReturnDefaultAnime(i, true); - } - } - break; - case Anime.GoGoStart_Clear: - { - updateNormal(); - if (TJAPlayer3.Tx.Characters_GoGoStart_Clear[Character] != null && TJAPlayer3.Skin.Characters_GoGoStart_Clear_Ptn[Character] != 0) - { - nowChara = TJAPlayer3.Tx.Characters_GoGoStart_Clear[Character][TJAPlayer3.Skin.Characters_Motion_GoGoStart_Clear[Character][nNowCharaFrame[i]]]; - } - if (endAnime) - { - ReturnDefaultAnime(i, true); - } - } - break; - case Anime.GoGoStart_Max: - { - updateNormal(); - if (TJAPlayer3.Tx.Characters_GoGoStart_Maxed[Character] != null && TJAPlayer3.Skin.Characters_GoGoStart_Maxed_Ptn[Character] != 0) - { - nowChara = TJAPlayer3.Tx.Characters_GoGoStart_Maxed[Character][TJAPlayer3.Skin.Characters_Motion_GoGoStartMax[Character][nNowCharaFrame[i]]]; - } - if (endAnime) - { - ReturnDefaultAnime(i, true); - } - } - break; - case Anime.Become_Cleared: - { - updateNormal(); - if (TJAPlayer3.Tx.Characters_Become_Cleared[Character] != null && TJAPlayer3.Skin.Characters_Become_Cleared_Ptn[Character] != 0) - { - nowChara = TJAPlayer3.Tx.Characters_Become_Cleared[Character][TJAPlayer3.Skin.Characters_Motion_ClearIn[Character][nNowCharaFrame[i]]]; - } - if (endAnime) - { - ReturnDefaultAnime(i, true); - } - } - break; - case Anime.Become_Maxed: - { - updateNormal(); - if (TJAPlayer3.Tx.Characters_Become_Maxed[Character] != null && TJAPlayer3.Skin.Characters_Become_Maxed_Ptn[Character] != 0) - { - nowChara = TJAPlayer3.Tx.Characters_Become_Maxed[Character][TJAPlayer3.Skin.Characters_Motion_SoulIn[Character][nNowCharaFrame[i]]]; - } - if (endAnime) - { - ReturnDefaultAnime(i, true); - } - } - break; - case Anime.SoulOut: - { - updateNormal(); - if (TJAPlayer3.Tx.Characters_SoulOut[Character] != null && TJAPlayer3.Skin.Characters_SoulOut_Ptn[Character] != 0) - { - nowChara = TJAPlayer3.Tx.Characters_SoulOut[Character][TJAPlayer3.Skin.Characters_Motion_SoulOut[Character][nNowCharaFrame[i]]]; - } - if (endAnime) - { - ReturnDefaultAnime(i, true); - } - } - break; - case Anime.ClearOut: - { - updateNormal(); - if (TJAPlayer3.Tx.Characters_ClearOut[Character] != null && TJAPlayer3.Skin.Characters_ClearOut_Ptn[Character] != 0) - { - nowChara = TJAPlayer3.Tx.Characters_ClearOut[Character][TJAPlayer3.Skin.Characters_Motion_ClearOut[Character][nNowCharaFrame[i]]]; - } - if (endAnime) - { - ReturnDefaultAnime(i, true); - } - } - break; - case Anime.Return: - { - updateNormal(); - if (TJAPlayer3.Tx.Characters_Return[Character] != null && TJAPlayer3.Skin.Characters_Return_Ptn[Character] != 0) - { - nowChara = TJAPlayer3.Tx.Characters_Return[Character][TJAPlayer3.Skin.Characters_Motion_Return[Character][nNowCharaFrame[i]]]; - } - if (endAnime) - { - ReturnDefaultAnime(i, true); - } - } - break; - case Anime.Balloon_Breaking: - case Anime.Balloon_Broke: - case Anime.Balloon_Miss: - case Anime.Kusudama_Idle: - case Anime.Kusudama_Breaking: - case Anime.Kusudama_Broke: - { - updateBalloon(); - } - break; - case Anime.Kusudama_Miss: - { - nNowCharaFrame[i] = (int)(nNowCharaCounter[i] * 2 * (nCharaFrameCount[i] + 1)); - nNowCharaFrame[i] = Math.Min(nNowCharaFrame[i], nCharaFrameCount[i]); - updateBalloon(); - } - break; - } - } - - float chara_x; - float chara_y; - - float charaScale = 1.0f; - - if (nowChara != null) - { - bool flipX = TJAPlayer3.ConfigIni.bAIBattleMode ? (i == 1) : false; - - float resolutionScaleX = TJAPlayer3.Skin.Resolution[0] / (float)TJAPlayer3.Skin.Characters_Resolution[Character][0]; - float resolutionScaleY = TJAPlayer3.Skin.Resolution[1] / (float)TJAPlayer3.Skin.Characters_Resolution[Character][1]; - - if (TJAPlayer3.ConfigIni.bAIBattleMode) - { - chara_x = (TJAPlayer3.Skin.Characters_X_AI[Character][i] * resolutionScaleX); - chara_y = (TJAPlayer3.Skin.Characters_Y_AI[Character][i] * resolutionScaleY); - - if (nowChara != null) - { - charaScale = 0.58f; - } - } - else if (TJAPlayer3.ConfigIni.nPlayerCount <= 2) - { - chara_x = (TJAPlayer3.Skin.Characters_X[Character][i] * resolutionScaleX); - chara_y = (TJAPlayer3.Skin.Characters_Y[Character][i] * resolutionScaleY); - - if (nowChara != null) - { - charaScale = 1.0f; - } - } - else if (TJAPlayer3.ConfigIni.nPlayerCount == 5) - { - chara_x = (TJAPlayer3.Skin.Characters_5P[Character][0] * resolutionScaleX) + (TJAPlayer3.Skin.Game_UIMove_5P[0] * i); - chara_y = (TJAPlayer3.Skin.Characters_5P[Character][1] * resolutionScaleY) + (TJAPlayer3.Skin.Game_UIMove_5P[1] * i); - - if (nowChara != null) - { - charaScale = 0.58f; - } - } - else - { - chara_x = (TJAPlayer3.Skin.Characters_4P[Character][0] * resolutionScaleX) + (TJAPlayer3.Skin.Game_UIMove_4P[0] * i); - chara_y = (TJAPlayer3.Skin.Characters_4P[Character][1] * resolutionScaleY) + (TJAPlayer3.Skin.Game_UIMove_4P[1] * i); - - if (nowChara != null) - { - charaScale = 0.58f; - } - } - - charaScale *= resolutionScaleY; - //chara_x *= resolutionScaleX; - //chara_y *= resolutionScaleY; - - if (TJAPlayer3.ConfigIni.bAIBattleMode) - { - chara_x += TJAPlayer3.Skin.Game_AIBattle_CharaMove * TJAPlayer3.stage演奏ドラム画面.AIBattleState; - chara_y -= nowChara.szTextureSize.Height * charaScale; // Center down - } - - nowChara.vcScaleRatio.X = charaScale; - nowChara.vcScaleRatio.Y = charaScale; - - if (flipX) - { - nowChara.t2D左右反転描画(chara_x, chara_y); - } - else - { - nowChara.t2D描画(chara_x, chara_y); - } - - nowChara.vcScaleRatio.X = 1.0f; - nowChara.vcScaleRatio.Y = 1.0f; - } - - if ((this.b風船連打中[i] != true && CharaAction_Balloon_Delay[i].IsEnded) || TJAPlayer3.ConfigIni.nPlayerCount > 2) - { - if (TJAPlayer3.ConfigIni.nPlayerCount <= 2) - { - TJAPlayer3.stage演奏ドラム画面.PuchiChara.On進行描画(TJAPlayer3.Skin.Game_PuchiChara_X[i], TJAPlayer3.Skin.Game_PuchiChara_Y[i], TJAPlayer3.stage演奏ドラム画面.bIsAlreadyMaxed[i], player: i); - } - else if (TJAPlayer3.ConfigIni.nPlayerCount == 5) - { - TJAPlayer3.stage演奏ドラム画面.PuchiChara.On進行描画(TJAPlayer3.Skin.Game_PuchiChara_5P[0] + (TJAPlayer3.Skin.Game_UIMove_5P[0] * i), TJAPlayer3.Skin.Game_PuchiChara_5P[1] + (TJAPlayer3.Skin.Game_UIMove_5P[1] * i), TJAPlayer3.stage演奏ドラム画面.bIsAlreadyMaxed[i], player: i, scale: 0.5f); - } - else - { - TJAPlayer3.stage演奏ドラム画面.PuchiChara.On進行描画(TJAPlayer3.Skin.Game_PuchiChara_4P[0] + (TJAPlayer3.Skin.Game_UIMove_4P[0] * i), TJAPlayer3.Skin.Game_PuchiChara_4P[1] + (TJAPlayer3.Skin.Game_UIMove_4P[1] * i), TJAPlayer3.stage演奏ドラム画面.bIsAlreadyMaxed[i], player: i, scale: 0.5f); - } - } - } - return base.Draw(); - } - - public void OnDraw_Balloon() - { - for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) - { - //if (TJAPlayer3.Skin.Characters_Balloon_Breaking_Ptn[iCurrentCharacter[i]] != 0) CharaAction_Balloon_Breaking[i]?.t進行(); - //if (TJAPlayer3.Skin.Characters_Balloon_Broke_Ptn[iCurrentCharacter[i]] != 0) CharaAction_Balloon_Broke[i]?.t進行(); - CharaAction_Balloon_Delay[i]?.Tick(); - //if (TJAPlayer3.Skin.Characters_Balloon_Miss_Ptn[iCurrentCharacter[i]] != 0) CharaAction_Balloon_Miss[i]?.t進行(); - //CharaAction_Balloon_FadeOut[i].Tick(); - - { - bool endAnime = nNowCharaCounter[i] >= 1; - var nowOpacity = 255; - - float resolutionScaleX = TJAPlayer3.Skin.Resolution[0] / (float)TJAPlayer3.Skin.Characters_Resolution[this.iCurrentCharacter[i]][0]; - float resolutionScaleY = TJAPlayer3.Skin.Resolution[1] / (float)TJAPlayer3.Skin.Characters_Resolution[this.iCurrentCharacter[i]][1]; - - float chara_x = 0; - float chara_y = 0; - float kusu_chara_x = TJAPlayer3.Skin.Characters_Kusudama_X[this.iCurrentCharacter[i]][i] * resolutionScaleX; - float kusu_chara_y = TJAPlayer3.Skin.Characters_Kusudama_Y[this.iCurrentCharacter[i]][i] * resolutionScaleY; - - if (TJAPlayer3.ConfigIni.nPlayerCount <= 2) - { - chara_x = TJAPlayer3.Skin.Characters_Balloon_X[this.iCurrentCharacter[i]][i]; - chara_y = TJAPlayer3.Skin.Characters_Balloon_Y[this.iCurrentCharacter[i]][i]; - } - else - { - if (TJAPlayer3.ConfigIni.nPlayerCount == 5) - { - chara_x = TJAPlayer3.Skin.Characters_Balloon_5P[this.iCurrentCharacter[i]][0] + (TJAPlayer3.Skin.Game_UIMove_5P[0] * i); - chara_y = TJAPlayer3.Skin.Characters_Balloon_5P[this.iCurrentCharacter[i]][1] + (TJAPlayer3.Skin.Game_UIMove_5P[1] * i); - } - else - { - chara_x = TJAPlayer3.Skin.Characters_Balloon_4P[this.iCurrentCharacter[i]][0] + (TJAPlayer3.Skin.Game_UIMove_4P[0] * i); - chara_y = TJAPlayer3.Skin.Characters_Balloon_4P[this.iCurrentCharacter[i]][1] + (TJAPlayer3.Skin.Game_UIMove_4P[1] * i); - } - } - - chara_x *= resolutionScaleX; - chara_y *= resolutionScaleY; - - float charaScale = resolutionScaleY; - - - if (eNowAnime[i] == Anime.Balloon_Broke) - { - if (CharaAction_Balloon_FadeOut[i].Counter.IsStoped && nNowCharaFrame[i] > CharaAction_Balloon_FadeOut_StartMs[i][0]) - { - CharaAction_Balloon_FadeOut[i].Start(); - } - - if (TJAPlayer3.Skin.Characters_Balloon_Broke_Ptn[this.iCurrentCharacter[i]] != 0 && TJAPlayer3.Tx.Characters_Balloon_Broke[this.iCurrentCharacter[i]][nNowCharaFrame[i]] != null) - { - TJAPlayer3.Tx.Characters_Balloon_Broke[this.iCurrentCharacter[i]][nNowCharaFrame[i]].Opacity = nowOpacity; - TJAPlayer3.Tx.Characters_Balloon_Broke[this.iCurrentCharacter[i]][nNowCharaFrame[i]].vcScaleRatio.X = charaScale; - TJAPlayer3.Tx.Characters_Balloon_Broke[this.iCurrentCharacter[i]][nNowCharaFrame[i]].vcScaleRatio.Y = charaScale; - TJAPlayer3.Tx.Characters_Balloon_Broke[this.iCurrentCharacter[i]][nNowCharaFrame[i]].t2D描画( - TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLX(i) + chara_x, - TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLY(i) + chara_y); - } - - if (TJAPlayer3.ConfigIni.nPlayerCount <= 2) - TJAPlayer3.stage演奏ドラム画面.PuchiChara.On進行描画( - TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLX(i) + TJAPlayer3.Skin.Game_PuchiChara_BalloonX[i], - TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLY(i) + TJAPlayer3.Skin.Game_PuchiChara_BalloonY[i], false, nowOpacity, true, player : i); - - if (endAnime) - { - ReturnDefaultAnime(i, true); - } - } - else if (eNowAnime[i] == Anime.Balloon_Miss) - { - if (CharaAction_Balloon_FadeOut[i].Counter.IsStoped && nNowCharaFrame[i] > CharaAction_Balloon_FadeOut_StartMs[i][1]) - { - CharaAction_Balloon_FadeOut[i].Start(); - } - - if (TJAPlayer3.Skin.Characters_Balloon_Miss_Ptn[this.iCurrentCharacter[i]] != 0 && TJAPlayer3.Tx.Characters_Balloon_Miss[this.iCurrentCharacter[i]][nNowCharaFrame[i]] != null) - { - TJAPlayer3.Tx.Characters_Balloon_Miss[this.iCurrentCharacter[i]][nNowCharaFrame[i]].Opacity = nowOpacity; - TJAPlayer3.Tx.Characters_Balloon_Miss[this.iCurrentCharacter[i]][nNowCharaFrame[i]].vcScaleRatio.X = charaScale; - TJAPlayer3.Tx.Characters_Balloon_Miss[this.iCurrentCharacter[i]][nNowCharaFrame[i]].vcScaleRatio.Y = charaScale; - TJAPlayer3.Tx.Characters_Balloon_Miss[this.iCurrentCharacter[i]][nNowCharaFrame[i]].t2D描画( - TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLX(i) + chara_x, - TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLY(i) + chara_y); - } - - if (TJAPlayer3.ConfigIni.nPlayerCount <= 2) - TJAPlayer3.stage演奏ドラム画面.PuchiChara.On進行描画( - TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLX(i) + TJAPlayer3.Skin.Game_PuchiChara_BalloonX[i], - TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLY(i) + TJAPlayer3.Skin.Game_PuchiChara_BalloonY[i], false, nowOpacity, true, player : i); - - if (endAnime) - { - ReturnDefaultAnime(i, true); - } - } - else if (eNowAnime[i] == Anime.Balloon_Breaking) - { - if (TJAPlayer3.Skin.Characters_Balloon_Breaking_Ptn[this.iCurrentCharacter[i]] != 0 && TJAPlayer3.Tx.Characters_Balloon_Breaking[this.iCurrentCharacter[i]][nNowCharaFrame[i]] != null) - { - TJAPlayer3.Tx.Characters_Balloon_Breaking[this.iCurrentCharacter[i]][nNowCharaFrame[i]].vcScaleRatio.X = charaScale; - TJAPlayer3.Tx.Characters_Balloon_Breaking[this.iCurrentCharacter[i]][nNowCharaFrame[i]].vcScaleRatio.Y = charaScale; - TJAPlayer3.Tx.Characters_Balloon_Breaking[this.iCurrentCharacter[i]][nNowCharaFrame[i]].t2D描画( - TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLX(i) + chara_x, - TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLY(i) + chara_y); - } - - if (TJAPlayer3.ConfigIni.nPlayerCount <= 2) - TJAPlayer3.stage演奏ドラム画面.PuchiChara.On進行描画( - TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLX(i) + TJAPlayer3.Skin.Game_PuchiChara_BalloonX[i], - TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLY(i) + TJAPlayer3.Skin.Game_PuchiChara_BalloonY[i], false, 255, true, player : i); - } - else if (eNowAnime[i] == Anime.Kusudama_Broke) - { - if (CharaAction_Balloon_FadeOut[i].Counter.IsStoped && nNowCharaFrame[i] > CharaAction_Balloon_FadeOut_StartMs[i][0]) - { - CharaAction_Balloon_FadeOut[i].Start(); - } - float kusuOutX = ((1.0f - MathF.Cos(nNowCharaCounter[i] * MathF.PI)) * TJAPlayer3.Skin.Resolution[0] / 2.0f) * resolutionScaleX; - float kusuOutY = (MathF.Sin(nNowCharaCounter[i] * MathF.PI / 2) * TJAPlayer3.Skin.Resolution[1] / 2.0f) * resolutionScaleY; - - if (TJAPlayer3.Skin.Characters_Kusudama_Broke_Ptn[this.iCurrentCharacter[i]] != 0 && TJAPlayer3.Tx.Characters_Kusudama_Broke[this.iCurrentCharacter[i]][nNowCharaFrame[i]] != null) - { - TJAPlayer3.Tx.Characters_Kusudama_Broke[this.iCurrentCharacter[i]][nNowCharaFrame[i]].Opacity = nowOpacity; - TJAPlayer3.Tx.Characters_Kusudama_Broke[this.iCurrentCharacter[i]][nNowCharaFrame[i]].vcScaleRatio.X = charaScale; - TJAPlayer3.Tx.Characters_Kusudama_Broke[this.iCurrentCharacter[i]][nNowCharaFrame[i]].vcScaleRatio.Y = charaScale; - if (i % 2 == 0) - { - TJAPlayer3.Tx.Characters_Kusudama_Broke[this.iCurrentCharacter[i]][nNowCharaFrame[i]].t2D描画(kusu_chara_x - kusuOutX, kusu_chara_y - kusuOutY); - } - else - { - TJAPlayer3.Tx.Characters_Kusudama_Broke[this.iCurrentCharacter[i]][nNowCharaFrame[i]].t2D左右反転描画(kusu_chara_x + kusuOutX, kusu_chara_y - kusuOutY); - } - } - if (i % 2 == 0) - { - TJAPlayer3.stage演奏ドラム画面.PuchiChara.On進行描画( - TJAPlayer3.Skin.Game_PuchiChara_KusudamaX[i] - (int)kusuOutX, - TJAPlayer3.Skin.Game_PuchiChara_KusudamaY[i] - (int)kusuOutY, false, nowOpacity, true, player : i); - } - else - { - TJAPlayer3.stage演奏ドラム画面.PuchiChara.On進行描画( - TJAPlayer3.Skin.Game_PuchiChara_KusudamaX[i] + (int)kusuOutX, - TJAPlayer3.Skin.Game_PuchiChara_KusudamaY[i] - (int)kusuOutY, false, nowOpacity, true, player : i); - } - - if (endAnime) - { - ReturnDefaultAnime(i, true); - } - } - else if (eNowAnime[i] == Anime.Kusudama_Miss) - { - if (CharaAction_Balloon_FadeOut[i].Counter.IsStoped && nNowCharaFrame[i] > CharaAction_Balloon_FadeOut_StartMs[i][1]) - { - CharaAction_Balloon_FadeOut[i].Start(); - } - - float kusuOutY = (Math.Max(nNowCharaCounter[i] - 0.5f, 0) * TJAPlayer3.Skin.Resolution[1] * 2) * resolutionScaleY; - - if (TJAPlayer3.Skin.Characters_Kusudama_Miss_Ptn[this.iCurrentCharacter[i]] != 0 && TJAPlayer3.Tx.Characters_Kusudama_Miss[this.iCurrentCharacter[i]][nNowCharaFrame[i]] != null) - { - TJAPlayer3.Tx.Characters_Kusudama_Miss[this.iCurrentCharacter[i]][nNowCharaFrame[i]].Opacity = nowOpacity; - TJAPlayer3.Tx.Characters_Kusudama_Miss[this.iCurrentCharacter[i]][nNowCharaFrame[i]].vcScaleRatio.X = charaScale; - TJAPlayer3.Tx.Characters_Kusudama_Miss[this.iCurrentCharacter[i]][nNowCharaFrame[i]].vcScaleRatio.Y = charaScale; - - - if (i % 2 == 0) - { - TJAPlayer3.Tx.Characters_Kusudama_Miss[this.iCurrentCharacter[i]][nNowCharaFrame[i]].t2D描画(kusu_chara_x, kusu_chara_y + kusuOutY); - } - else - { - TJAPlayer3.Tx.Characters_Kusudama_Miss[this.iCurrentCharacter[i]][nNowCharaFrame[i]].t2D左右反転描画(kusu_chara_x, kusu_chara_y + kusuOutY); - } - } - - TJAPlayer3.stage演奏ドラム画面.PuchiChara.On進行描画( - TJAPlayer3.Skin.Game_PuchiChara_KusudamaX[i], - TJAPlayer3.Skin.Game_PuchiChara_KusudamaY[i] + (int)kusuOutY, false, nowOpacity, true, player : i); - - if (endAnime) - { - ReturnDefaultAnime(i, true); - } - } - else if (eNowAnime[i] == Anime.Kusudama_Breaking) - { - float kusuInX = ((1.0f - MathF.Sin(ctKusuIn[i].CurrentValue / 2000.0f * MathF.PI)) * TJAPlayer3.Skin.Resolution[0] / 2.0f) * resolutionScaleX; - float kusuInY = -((MathF.Cos(ctKusuIn[i].CurrentValue / 1000.0f * MathF.PI / 2)) * TJAPlayer3.Skin.Resolution[1] / 2.0f) * resolutionScaleY; - - - if (TJAPlayer3.Skin.Characters_Kusudama_Breaking_Ptn[this.iCurrentCharacter[i]] != 0 && TJAPlayer3.Tx.Characters_Kusudama_Breaking[this.iCurrentCharacter[i]][nNowCharaFrame[i]] != null) - { - TJAPlayer3.Tx.Characters_Kusudama_Breaking[this.iCurrentCharacter[i]][nNowCharaFrame[i]].vcScaleRatio.X = charaScale; - TJAPlayer3.Tx.Characters_Kusudama_Breaking[this.iCurrentCharacter[i]][nNowCharaFrame[i]].vcScaleRatio.Y = charaScale; - if (i % 2 == 0) - { - TJAPlayer3.Tx.Characters_Kusudama_Breaking[this.iCurrentCharacter[i]][nNowCharaFrame[i]].t2D描画(kusu_chara_x - kusuInX, kusu_chara_y + kusuInY); - } - else - { - TJAPlayer3.Tx.Characters_Kusudama_Breaking[this.iCurrentCharacter[i]][nNowCharaFrame[i]].t2D左右反転描画(kusu_chara_x + kusuInX, kusu_chara_y + kusuInY); - } - } - - if (i % 2 == 0) - { - TJAPlayer3.stage演奏ドラム画面.PuchiChara.On進行描画( - TJAPlayer3.Skin.Game_PuchiChara_KusudamaX[i] - (int)kusuInX, - TJAPlayer3.Skin.Game_PuchiChara_KusudamaY[i] + (int)kusuInY, false, 255, true, player : i); - } - else - { - TJAPlayer3.stage演奏ドラム画面.PuchiChara.On進行描画( - TJAPlayer3.Skin.Game_PuchiChara_KusudamaX[i] + (int)kusuInX, - TJAPlayer3.Skin.Game_PuchiChara_KusudamaY[i] + (int)kusuInY, false, 255, true, player : i); - } - - if (endAnime) - { - ChangeAnime(i, Anime.Kusudama_Idle, true); - } - } - else if (eNowAnime[i] == Anime.Kusudama_Idle) - { - float kusuInX = ((1.0f - MathF.Sin(ctKusuIn[i].CurrentValue / 2000.0f * MathF.PI)) * TJAPlayer3.Skin.Resolution[0] / 2.0f) * resolutionScaleX; - float kusuInY = -((MathF.Cos(ctKusuIn[i].CurrentValue / 1000.0f * MathF.PI / 2)) * TJAPlayer3.Skin.Resolution[1] / 2.0f) * resolutionScaleY; - - if (TJAPlayer3.Skin.Characters_Kusudama_Idle_Ptn[this.iCurrentCharacter[i]] != 0 && TJAPlayer3.Tx.Characters_Kusudama_Idle[this.iCurrentCharacter[i]][nNowCharaFrame[i]] != null) - { - TJAPlayer3.Tx.Characters_Kusudama_Idle[this.iCurrentCharacter[i]][nNowCharaFrame[i]].vcScaleRatio.X = charaScale; - TJAPlayer3.Tx.Characters_Kusudama_Idle[this.iCurrentCharacter[i]][nNowCharaFrame[i]].vcScaleRatio.Y = charaScale; - if (i % 2 == 0) - { - TJAPlayer3.Tx.Characters_Kusudama_Idle[this.iCurrentCharacter[i]][nNowCharaFrame[i]].t2D描画(kusu_chara_x - kusuInX, kusu_chara_y + kusuInY); - } - else - { - TJAPlayer3.Tx.Characters_Kusudama_Idle[this.iCurrentCharacter[i]][nNowCharaFrame[i]].t2D左右反転描画(kusu_chara_x + kusuInX, kusu_chara_y + kusuInY); - } - } - - if (i % 2 == 0) - { - TJAPlayer3.stage演奏ドラム画面.PuchiChara.On進行描画( - TJAPlayer3.Skin.Game_PuchiChara_KusudamaX[i] - (int)kusuInX, - TJAPlayer3.Skin.Game_PuchiChara_KusudamaY[i] + (int)kusuInY, false, 255, true, player : i); - } - else - { - TJAPlayer3.stage演奏ドラム画面.PuchiChara.On進行描画( - TJAPlayer3.Skin.Game_PuchiChara_KusudamaX[i] + (int)kusuInX, - TJAPlayer3.Skin.Game_PuchiChara_KusudamaY[i] + (int)kusuInY, false, 255, true, player : i); - } - - if (endAnime) - { - ChangeAnime(i, Anime.Kusudama_Idle, true); - } - } - } - } - } - - - public void ReturnDefaultAnime(int player, bool resetCounter) - { - if (TJAPlayer3.stage演奏ドラム画面.bIsGOGOTIME[player] && TJAPlayer3.Skin.Characters_GoGoTime_Ptn[this.iCurrentCharacter[player]] != 0) - { - if (TJAPlayer3.stage演奏ドラム画面.bIsAlreadyMaxed[player] && TJAPlayer3.Skin.Characters_GoGoTime_Maxed_Ptn[this.iCurrentCharacter[player]] != 0) - { - ChangeAnime(player, Anime.GoGoTime_Maxed, resetCounter); - } - else - { - ChangeAnime(player, Anime.GoGoTime, resetCounter); - } - } - else - { - if (TJAPlayer3.stage演奏ドラム画面.bIsMiss[player] && TJAPlayer3.Skin.Characters_Normal_Missed_Ptn[this.iCurrentCharacter[player]] != 0) - { - if (TJAPlayer3.stage演奏ドラム画面.Chara_MissCount[player] >= 6 && TJAPlayer3.Skin.Characters_Normal_MissedDown_Ptn[this.iCurrentCharacter[player]] != 0) - { - ChangeAnime(player, Anime.MissDown, resetCounter); - } - else - { - ChangeAnime(player, Anime.Miss, resetCounter); - } - } - else - { - if (TJAPlayer3.stage演奏ドラム画面.bIsAlreadyMaxed[player] && TJAPlayer3.Skin.Characters_Normal_Maxed_Ptn[this.iCurrentCharacter[player]] != 0) - { - ChangeAnime(player, Anime.Maxed, resetCounter); - } - else if (TJAPlayer3.stage演奏ドラム画面.bIsAlreadyCleared[player] && TJAPlayer3.Skin.Characters_Normal_Cleared_Ptn[this.iCurrentCharacter[player]] != 0) - { - ChangeAnime(player, Anime.Cleared, resetCounter); - } - else if (TJAPlayer3.Skin.Characters_Normal_Ptn[this.iCurrentCharacter[player]] != 0) - { - ChangeAnime(player, Anime.Normal, resetCounter); - } - else - { - ChangeAnime(player, Anime.None, resetCounter); - } - } - } - } - - public int[][] arモーション番号 = new int[5][]; - public int[][] arMissモーション番号 = new int[5][]; - public int[][] arMissDownモーション番号 = new int[5][]; - public int[][] arゴーゴーモーション番号 = new int[5][]; - public int[][] arクリアモーション番号 = new int[5][]; - - private float[] nNowCharaCounter = new float[5]; - private int[] nNowCharaFrame = new int[5]; - private int[] nCharaFrameCount = new int[5]; - private float[] nCharaBeat = new float[5]; - - public enum Anime - { - None, - Normal, - Miss, - MissDown, - Cleared, - Maxed, - MissIn, - MissDownIn, - GoGoTime, - GoGoTime_Maxed, - Combo10, - Combo10_Clear, - Combo10_Max, - GoGoStart, - GoGoStart_Clear, - GoGoStart_Max, - Become_Cleared, - Become_Maxed, - SoulOut, - ClearOut, - Return, - Balloon_Breaking, - Balloon_Broke, - Balloon_Miss, - Kusudama_Idle, - Kusudama_Breaking, - Kusudama_Broke, - Kusudama_Miss - } - - - public Anime[] eNowAnime = new Anime[5]; - - public CCounter[] ctKusuIn = new CCounter[5]; - - public void KusuIn() - { - for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) - { - ChangeAnime(i, Anime.Kusudama_Idle, true); - ctKusuIn[i] = new CCounter(0, 1000, 0.4f, TJAPlayer3.Timer); - } - } - - public void ChangeAnime(int player, Anime anime, bool resetCounter) - { - eNowAnime[player] = anime; - - if (resetCounter) - { - nNowCharaCounter[player] = 0; - nNowCharaFrame[player] = 0; - } - - switch (anime) - { - case Anime.None: - break; - case Anime.Normal: - nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_Normal[iCurrentCharacter[player]].Length - 1; - nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_Normal[iCurrentCharacter[player]]; - break; - case Anime.Miss: - nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_Miss[iCurrentCharacter[player]].Length - 1; - nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_Miss[iCurrentCharacter[player]]; - break; - case Anime.MissDown: - nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_MissDown[iCurrentCharacter[player]].Length - 1; - nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_MissDown[iCurrentCharacter[player]]; - break; - case Anime.Cleared: - nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_Clear[iCurrentCharacter[player]].Length - 1; - nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_Clear[iCurrentCharacter[player]]; - break; - case Anime.Maxed: - nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_ClearMax[iCurrentCharacter[player]].Length - 1; - nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_ClearMax[iCurrentCharacter[player]]; - break; - case Anime.MissIn: - nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_MissIn[iCurrentCharacter[player]].Length - 1; - nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_MissIn[iCurrentCharacter[player]]; - break; - case Anime.MissDownIn: - nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_MissDownIn[iCurrentCharacter[player]].Length - 1; - nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_MissDownIn[iCurrentCharacter[player]]; - break; - case Anime.GoGoTime: - nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_GoGo[iCurrentCharacter[player]].Length - 1; - nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_GoGo[iCurrentCharacter[player]]; - break; - case Anime.GoGoTime_Maxed: - nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_GoGoMax[iCurrentCharacter[player]].Length - 1; - nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_GoGoMax[iCurrentCharacter[player]]; - break; - case Anime.Combo10: - nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_10Combo[iCurrentCharacter[player]].Length - 1; - nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_10Combo[iCurrentCharacter[player]]; - break; - case Anime.Combo10_Clear: - nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_10Combo_Clear[iCurrentCharacter[player]].Length - 1; - nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_10Combo_Clear[iCurrentCharacter[player]]; - break; - case Anime.Combo10_Max: - nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_10ComboMax[iCurrentCharacter[player]].Length - 1; - nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_10ComboMax[iCurrentCharacter[player]]; - break; - case Anime.GoGoStart: - nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_GoGoStart[iCurrentCharacter[player]].Length - 1; - nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_GoGoStart[iCurrentCharacter[player]]; - break; - case Anime.GoGoStart_Clear: - nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_GoGoStart_Clear[iCurrentCharacter[player]].Length - 1; - nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_GoGoStart_Clear[iCurrentCharacter[player]]; - break; - case Anime.GoGoStart_Max: - nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_GoGoStartMax[iCurrentCharacter[player]].Length - 1; - nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_GoGoStartMax[iCurrentCharacter[player]]; - break; - case Anime.Become_Cleared: - nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_ClearIn[iCurrentCharacter[player]].Length - 1; - nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_ClearIn[iCurrentCharacter[player]]; - break; - case Anime.Become_Maxed: - nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_SoulIn[iCurrentCharacter[player]].Length - 1; - nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_SoulIn[iCurrentCharacter[player]]; - break; - case Anime.SoulOut: - nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_SoulOut[iCurrentCharacter[player]].Length - 1; - nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_SoulOut[iCurrentCharacter[player]]; - break; - case Anime.ClearOut: - nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_ClearOut[iCurrentCharacter[player]].Length - 1; - nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_ClearOut[iCurrentCharacter[player]]; - break; - case Anime.Return: - nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_Return[iCurrentCharacter[player]].Length - 1; - nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_Return[iCurrentCharacter[player]]; - break; - case Anime.Balloon_Breaking: - nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Balloon_Breaking_Ptn[iCurrentCharacter[player]] - 1; - nCharaBeat[player] = 0.2f; - break; - case Anime.Balloon_Broke: - nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Balloon_Broke_Ptn[iCurrentCharacter[player]] - 1; - nCharaBeat[player] = 0.2f; - break; - case Anime.Balloon_Miss: - nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Balloon_Miss_Ptn[iCurrentCharacter[player]] - 1; - nCharaBeat[player] = 0.2f; - break; - case Anime.Kusudama_Idle: - nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Kusudama_Idle_Ptn[iCurrentCharacter[player]] - 1; - nCharaBeat[player] = 0.4f; - break; - case Anime.Kusudama_Breaking: - nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Kusudama_Breaking_Ptn[iCurrentCharacter[player]] - 1; - nCharaBeat[player] = 0.2f; - break; - case Anime.Kusudama_Broke: - nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Kusudama_Broke_Ptn[iCurrentCharacter[player]] - 1; - nCharaBeat[player] = 1f; - break; - case Anime.Kusudama_Miss: - nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Kusudama_Miss_Ptn[iCurrentCharacter[player]] - 1; - nCharaBeat[player] = 0.5f; - break; - } - } - - public CCounter[] CharaAction_Balloon_Delay = new CCounter[5]; - - public Animations.FadeOut[] CharaAction_Balloon_FadeOut = new Animations.FadeOut[5]; - //private readonly int[] CharaAction_Balloon_FadeOut_StartMs = new int[5]; - private readonly int[][] CharaAction_Balloon_FadeOut_StartMs = new int[5][]; - - //public bool[] bキャラクターアクション中 = new bool[5]; - - public bool[] b風船連打中 = new bool[5]; - public bool[] b演奏中 = new bool[5]; - - public int[] iCurrentCharacter = new int[5] { 0, 0, 0, 0, 0 }; - } -} +using System; +using System.Collections.Generic; +using System.Text; +using System.Globalization; +using System.Runtime.InteropServices; +using System.Drawing; +using System.Diagnostics; +using FDK; + + +namespace TJAPlayer3 +{ + //クラスの設置位置は必ず演奏画面共通に置くこと。 + //そうしなければBPM変化に対応できません。 + + //完成している部分は以下のとおり。(画像完成+動作確認完了で完成とする) + //_通常モーション + //_ゴーゴータイムモーション + //_クリア時モーション + // + internal class CActImplCharacter : CActivity + { + public CActImplCharacter() + { + + } + + public override void Activate() + { + for(int i = 0; i < 5; i++) + { + + /* + ctChara_Normal[i] = new CCounter(); + ctChara_Miss[i] = new CCounter(); + ctChara_MissDown[i] = new CCounter(); + ctChara_GoGo[i] = new CCounter(); + ctChara_Clear[i] = new CCounter(); + + this.ctキャラクターアクション_10コンボ[i] = new CCounter(); + this.ctキャラクターアクション_10コンボMAX[i] = new CCounter(); + this.ctキャラクターアクション_ゴーゴースタート[i] = new CCounter(); + this.ctキャラクターアクション_ゴーゴースタートMAX[i] = new CCounter(); + this.ctキャラクターアクション_ノルマ[i] = new CCounter(); + this.ctキャラクターアクション_魂MAX[i] = new CCounter(); + this.ctキャラクターアクション_Return[i] = new CCounter(); + */ + + //CharaAction_Balloon_Breaking[i] = new CCounter(); + //CharaAction_Balloon_Broke[i] = new CCounter(); + //CharaAction_Balloon_Miss[i] = new CCounter(); + CharaAction_Balloon_Delay[i] = new CCounter(); + ctKusuIn[i] = new(); + + // Currently used character + int p = TJAPlayer3.GetActualPlayer(i); + + this.iCurrentCharacter[i] = Math.Max(0, Math.Min(TJAPlayer3.SaveFileInstances[p].data.Character, TJAPlayer3.Skin.Characters_Ptn - 1)); + + if (TJAPlayer3.Skin.Characters_Normal_Ptn[this.iCurrentCharacter[i]] != 0) ChangeAnime(i, Anime.Normal, true); + else ChangeAnime(i, Anime.None, true); + + this.b風船連打中[i] = false; + this.b演奏中[i] = false; + + // CharaAction_Balloon_FadeOut[i] = new Animations.FadeOut(TJAPlayer3.Skin.Game_Chara_Balloon_FadeOut); + CharaAction_Balloon_FadeOut[i] = new Animations.FadeOut(TJAPlayer3.Skin.Characters_Balloon_FadeOut[this.iCurrentCharacter[i]]); + + var tick = TJAPlayer3.Skin.Characters_Balloon_Timer[this.iCurrentCharacter[i]]; + + var balloonBrokePtn = TJAPlayer3.Skin.Characters_Balloon_Broke_Ptn[this.iCurrentCharacter[i]]; + var balloonMissPtn = TJAPlayer3.Skin.Characters_Balloon_Miss_Ptn[this.iCurrentCharacter[i]]; + + CharaAction_Balloon_FadeOut_StartMs[i] = new int[2]; + + CharaAction_Balloon_FadeOut_StartMs[i][0] = (balloonBrokePtn * tick) - TJAPlayer3.Skin.Characters_Balloon_FadeOut[this.iCurrentCharacter[i]]; + CharaAction_Balloon_FadeOut_StartMs[i][1] = (balloonMissPtn * tick) - TJAPlayer3.Skin.Characters_Balloon_FadeOut[this.iCurrentCharacter[i]]; + + if (balloonBrokePtn > 1) CharaAction_Balloon_FadeOut_StartMs[i][0] /= balloonBrokePtn - 1; + if (balloonMissPtn > 1) CharaAction_Balloon_FadeOut_StartMs[i][1] /= balloonMissPtn - 1; // - 1はタイマー用 + + if (CharaAction_Balloon_Delay[i] != null) CharaAction_Balloon_Delay[i].CurrentValue = (int)CharaAction_Balloon_Delay[i].EndValue; + } + + base.Activate(); + } + + public override void DeActivate() + { + for (int i = 0; i < 5; i++) + { + /* + ctChara_Normal[i] = null; + ctChara_Miss[i] = null; + ctChara_MissDown[i] = null; + ctChara_GoGo[i] = null; + ctChara_Clear[i] = null; + this.ctキャラクターアクション_10コンボ[i] = null; + this.ctキャラクターアクション_10コンボMAX[i] = null; + this.ctキャラクターアクション_ゴーゴースタート[i] = null; + this.ctキャラクターアクション_ゴーゴースタートMAX[i] = null; + this.ctキャラクターアクション_ノルマ[i] = null; + this.ctキャラクターアクション_魂MAX[i] = null; + this.ctキャラクターアクション_Return[i] = null; + */ + + //CharaAction_Balloon_Breaking[i] = null; + //CharaAction_Balloon_Broke[i] = null; + //CharaAction_Balloon_Miss[i] = null; + CharaAction_Balloon_Delay[i] = null; + + CharaAction_Balloon_FadeOut[i] = null; + } + + base.DeActivate(); + } + + public override void CreateManagedResource() + { + for (int i = 0; i < 5; i++) + { + //this.arモーション番号[i] = C変換.ar配列形式のstringをint配列に変換して返す(TJAPlayer3.Skin.Characters_Motion_Normal[this.iCurrentCharacter[i]]); + //this.arMissモーション番号[i] = C変換.ar配列形式のstringをint配列に変換して返す(TJAPlayer3.Skin.Characters_Motion_Miss[this.iCurrentCharacter[i]]); + //this.arMissDownモーション番号[i] = C変換.ar配列形式のstringをint配列に変換して返す(TJAPlayer3.Skin.Characters_Motion_MissDown[this.iCurrentCharacter[i]]); + //this.arゴーゴーモーション番号[i] = C変換.ar配列形式のstringをint配列に変換して返す(TJAPlayer3.Skin.Characters_Motion_GoGo[this.iCurrentCharacter[i]]); + //this.arクリアモーション番号[i] = C変換.ar配列形式のstringをint配列に変換して返す(TJAPlayer3.Skin.Characters_Motion_Clear[this.iCurrentCharacter[i]]); + + //if (arモーション番号[i] == null) this.arモーション番号[i] = C変換.ar配列形式のstringをint配列に変換して返す("0,0"); + //if (arMissモーション番号[i] == null) this.arMissモーション番号[i] = C変換.ar配列形式のstringをint配列に変換して返す("0,0"); + //if (arMissDownモーション番号[i] == null) this.arMissDownモーション番号[i] = C変換.ar配列形式のstringをint配列に変換して返す("0,0"); + //if (arゴーゴーモーション番号[i] == null) this.arゴーゴーモーション番号[i] = C変換.ar配列形式のstringをint配列に変換して返す("0,0"); + //if (arクリアモーション番号[i] == null) this.arクリアモーション番号[i] = C変換.ar配列形式のstringをint配列に変換して返す("0,0"); + } + base.CreateManagedResource(); + } + + public override void ReleaseManagedResource() + { + base.ReleaseManagedResource(); + } + + public override int Draw() + { + for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) + { + int Character = this.iCurrentCharacter[i]; + + if (TJAPlayer3.Skin.Characters_Ptn == 0) + break; + + // Blinking animation during invincibility frames + if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Tower) + { + if (CFloorManagement.isBlinking() == true) + break; + } + + CTexture nowChara = null; + + void updateNormal() + { + if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) + { + nNowCharaCounter[i] += ((Math.Abs((float)TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM[i]) / 60.0f) * (float)TJAPlayer3.FPS.DeltaTime) / nCharaBeat[i]; + } + } + void updateBalloon() + { + if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) + { + nNowCharaCounter[i] += (float)TJAPlayer3.FPS.DeltaTime / nCharaBeat[i]; + } + } + + ctKusuIn[i].Tick(); + + bool endAnime = nNowCharaCounter[i] >= 1; + nNowCharaFrame[i] = (int)(nNowCharaCounter[i] * (nCharaFrameCount[i] + 1)); + nNowCharaFrame[i] = Math.Min(nNowCharaFrame[i], nCharaFrameCount[i]); + + if (eNowAnime[i] != Anime.None) + { + switch (eNowAnime[i]) + { + case Anime.None: + { + ReturnDefaultAnime(i, false); + } + break; + case Anime.Normal: + { + updateNormal(); + ReturnDefaultAnime(i, false); + nowChara = TJAPlayer3.Tx.Characters_Normal[Character][TJAPlayer3.Skin.Characters_Motion_Normal[Character][nNowCharaFrame[i]]]; + if (endAnime) + { + nNowCharaCounter[i] = 0; + nNowCharaFrame[i] = 0; + } + } + break; + case Anime.Miss: + { + updateNormal(); + ReturnDefaultAnime(i, false); + nowChara = TJAPlayer3.Tx.Characters_Normal_Missed[Character][TJAPlayer3.Skin.Characters_Motion_Miss[Character][nNowCharaFrame[i]]]; + if (endAnime) + { + nNowCharaCounter[i] = 0; + nNowCharaFrame[i] = 0; + } + } + break; + case Anime.MissDown: + { + updateNormal(); + ReturnDefaultAnime(i, false); + nowChara = TJAPlayer3.Tx.Characters_Normal_MissedDown[Character][TJAPlayer3.Skin.Characters_Motion_MissDown[Character][nNowCharaFrame[i]]]; + if (endAnime) + { + nNowCharaCounter[i] = 0; + nNowCharaFrame[i] = 0; + } + } + break; + case Anime.Cleared: + { + updateNormal(); + ReturnDefaultAnime(i, false); + nowChara = TJAPlayer3.Tx.Characters_Normal_Cleared[Character][TJAPlayer3.Skin.Characters_Motion_Clear[Character][nNowCharaFrame[i]]]; + if (endAnime) + { + nNowCharaCounter[i] = 0; + nNowCharaFrame[i] = 0; + } + } + break; + case Anime.Maxed: + { + updateNormal(); + ReturnDefaultAnime(i, false); + nowChara = TJAPlayer3.Tx.Characters_Normal_Maxed[Character][TJAPlayer3.Skin.Characters_Motion_ClearMax[Character][nNowCharaFrame[i]]]; + if (endAnime) + { + nNowCharaCounter[i] = 0; + nNowCharaFrame[i] = 0; + } + } + break; + case Anime.MissIn: + { + updateNormal(); + if (TJAPlayer3.Tx.Characters_MissIn[Character] != null && TJAPlayer3.Skin.Characters_MissIn_Ptn[Character] != 0) + { + nowChara = TJAPlayer3.Tx.Characters_MissIn[Character][TJAPlayer3.Skin.Characters_Motion_MissIn[Character][nNowCharaFrame[i]]]; + } + if (endAnime) + { + ReturnDefaultAnime(i, true); + } + } + break; + case Anime.MissDownIn: + { + updateNormal(); + if (TJAPlayer3.Tx.Characters_MissDownIn[Character] != null && TJAPlayer3.Skin.Characters_MissDownIn_Ptn[Character] != 0) + { + nowChara = TJAPlayer3.Tx.Characters_MissDownIn[Character][TJAPlayer3.Skin.Characters_Motion_MissDownIn[Character][nNowCharaFrame[i]]]; + } + if (endAnime) + { + ReturnDefaultAnime(i, true); + } + } + break; + case Anime.GoGoTime: + { + updateNormal(); + ReturnDefaultAnime(i, false); + nowChara = TJAPlayer3.Tx.Characters_GoGoTime[Character][TJAPlayer3.Skin.Characters_Motion_GoGo[Character][nNowCharaFrame[i]]]; + if (endAnime) + { + nNowCharaCounter[i] = 0; + nNowCharaFrame[i] = 0; + } + } + break; + case Anime.GoGoTime_Maxed: + { + updateNormal(); + ReturnDefaultAnime(i, false); + nowChara = TJAPlayer3.Tx.Characters_GoGoTime_Maxed[Character][TJAPlayer3.Skin.Characters_Motion_GoGoMax[Character][nNowCharaFrame[i]]]; + if (endAnime) + { + nNowCharaCounter[i] = 0; + nNowCharaFrame[i] = 0; + } + } + break; + case Anime.Combo10: + { + updateNormal(); + if (TJAPlayer3.Tx.Characters_10Combo[Character] != null && TJAPlayer3.Skin.Characters_10Combo_Ptn[Character] != 0) + { + nowChara = TJAPlayer3.Tx.Characters_10Combo[Character][TJAPlayer3.Skin.Characters_Motion_10Combo[Character][nNowCharaFrame[i]]]; + } + if (endAnime) + { + ReturnDefaultAnime(i, true); + } + } + break; + case Anime.Combo10_Clear: + { + updateNormal(); + if (TJAPlayer3.Tx.Characters_10Combo_Clear[Character] != null && TJAPlayer3.Skin.Characters_10Combo_Clear_Ptn[Character] != 0) + { + nowChara = TJAPlayer3.Tx.Characters_10Combo_Clear[Character][TJAPlayer3.Skin.Characters_Motion_10Combo_Clear[Character][nNowCharaFrame[i]]]; + } + if (endAnime) + { + ReturnDefaultAnime(i, true); + } + } + break; + case Anime.Combo10_Max: + { + updateNormal(); + if (TJAPlayer3.Tx.Characters_10Combo_Maxed[Character] != null && TJAPlayer3.Skin.Characters_10Combo_Maxed_Ptn[Character] != 0) + { + nowChara = TJAPlayer3.Tx.Characters_10Combo_Maxed[Character][TJAPlayer3.Skin.Characters_Motion_10ComboMax[Character][nNowCharaFrame[i]]]; + } + if (endAnime) + { + ReturnDefaultAnime(i, true); + } + } + break; + case Anime.GoGoStart: + { + updateNormal(); + if (TJAPlayer3.Tx.Characters_GoGoStart[Character] != null && TJAPlayer3.Skin.Characters_GoGoStart_Ptn[Character] != 0) + { + nowChara = TJAPlayer3.Tx.Characters_GoGoStart[Character][TJAPlayer3.Skin.Characters_Motion_GoGoStart[Character][nNowCharaFrame[i]]]; + } + if (endAnime) + { + ReturnDefaultAnime(i, true); + } + } + break; + case Anime.GoGoStart_Clear: + { + updateNormal(); + if (TJAPlayer3.Tx.Characters_GoGoStart_Clear[Character] != null && TJAPlayer3.Skin.Characters_GoGoStart_Clear_Ptn[Character] != 0) + { + nowChara = TJAPlayer3.Tx.Characters_GoGoStart_Clear[Character][TJAPlayer3.Skin.Characters_Motion_GoGoStart_Clear[Character][nNowCharaFrame[i]]]; + } + if (endAnime) + { + ReturnDefaultAnime(i, true); + } + } + break; + case Anime.GoGoStart_Max: + { + updateNormal(); + if (TJAPlayer3.Tx.Characters_GoGoStart_Maxed[Character] != null && TJAPlayer3.Skin.Characters_GoGoStart_Maxed_Ptn[Character] != 0) + { + nowChara = TJAPlayer3.Tx.Characters_GoGoStart_Maxed[Character][TJAPlayer3.Skin.Characters_Motion_GoGoStartMax[Character][nNowCharaFrame[i]]]; + } + if (endAnime) + { + ReturnDefaultAnime(i, true); + } + } + break; + case Anime.Become_Cleared: + { + updateNormal(); + if (TJAPlayer3.Tx.Characters_Become_Cleared[Character] != null && TJAPlayer3.Skin.Characters_Become_Cleared_Ptn[Character] != 0) + { + nowChara = TJAPlayer3.Tx.Characters_Become_Cleared[Character][TJAPlayer3.Skin.Characters_Motion_ClearIn[Character][nNowCharaFrame[i]]]; + } + if (endAnime) + { + ReturnDefaultAnime(i, true); + } + } + break; + case Anime.Become_Maxed: + { + updateNormal(); + if (TJAPlayer3.Tx.Characters_Become_Maxed[Character] != null && TJAPlayer3.Skin.Characters_Become_Maxed_Ptn[Character] != 0) + { + nowChara = TJAPlayer3.Tx.Characters_Become_Maxed[Character][TJAPlayer3.Skin.Characters_Motion_SoulIn[Character][nNowCharaFrame[i]]]; + } + if (endAnime) + { + ReturnDefaultAnime(i, true); + } + } + break; + case Anime.SoulOut: + { + updateNormal(); + if (TJAPlayer3.Tx.Characters_SoulOut[Character] != null && TJAPlayer3.Skin.Characters_SoulOut_Ptn[Character] != 0) + { + nowChara = TJAPlayer3.Tx.Characters_SoulOut[Character][TJAPlayer3.Skin.Characters_Motion_SoulOut[Character][nNowCharaFrame[i]]]; + } + if (endAnime) + { + ReturnDefaultAnime(i, true); + } + } + break; + case Anime.ClearOut: + { + updateNormal(); + if (TJAPlayer3.Tx.Characters_ClearOut[Character] != null && TJAPlayer3.Skin.Characters_ClearOut_Ptn[Character] != 0) + { + nowChara = TJAPlayer3.Tx.Characters_ClearOut[Character][TJAPlayer3.Skin.Characters_Motion_ClearOut[Character][nNowCharaFrame[i]]]; + } + if (endAnime) + { + ReturnDefaultAnime(i, true); + } + } + break; + case Anime.Return: + { + updateNormal(); + if (TJAPlayer3.Tx.Characters_Return[Character] != null && TJAPlayer3.Skin.Characters_Return_Ptn[Character] != 0) + { + nowChara = TJAPlayer3.Tx.Characters_Return[Character][TJAPlayer3.Skin.Characters_Motion_Return[Character][nNowCharaFrame[i]]]; + } + if (endAnime) + { + ReturnDefaultAnime(i, true); + } + } + break; + case Anime.Balloon_Breaking: + case Anime.Balloon_Broke: + case Anime.Balloon_Miss: + case Anime.Kusudama_Idle: + case Anime.Kusudama_Breaking: + case Anime.Kusudama_Broke: + { + updateBalloon(); + } + break; + case Anime.Kusudama_Miss: + { + nNowCharaFrame[i] = (int)(nNowCharaCounter[i] * 2 * (nCharaFrameCount[i] + 1)); + nNowCharaFrame[i] = Math.Min(nNowCharaFrame[i], nCharaFrameCount[i]); + updateBalloon(); + } + break; + } + } + + float chara_x; + float chara_y; + + float charaScale = 1.0f; + + if (nowChara != null) + { + bool flipX = TJAPlayer3.ConfigIni.bAIBattleMode ? (i == 1) : false; + + float resolutionScaleX = TJAPlayer3.Skin.Resolution[0] / (float)TJAPlayer3.Skin.Characters_Resolution[Character][0]; + float resolutionScaleY = TJAPlayer3.Skin.Resolution[1] / (float)TJAPlayer3.Skin.Characters_Resolution[Character][1]; + + if (TJAPlayer3.ConfigIni.bAIBattleMode) + { + chara_x = (TJAPlayer3.Skin.Characters_X_AI[Character][i] * resolutionScaleX); + chara_y = (TJAPlayer3.Skin.Characters_Y_AI[Character][i] * resolutionScaleY); + + if (nowChara != null) + { + charaScale = 0.58f; + } + } + else if (TJAPlayer3.ConfigIni.nPlayerCount <= 2) + { + chara_x = (TJAPlayer3.Skin.Characters_X[Character][i] * resolutionScaleX); + chara_y = (TJAPlayer3.Skin.Characters_Y[Character][i] * resolutionScaleY); + + if (nowChara != null) + { + charaScale = 1.0f; + } + } + else if (TJAPlayer3.ConfigIni.nPlayerCount == 5) + { + chara_x = (TJAPlayer3.Skin.Characters_5P[Character][0] * resolutionScaleX) + (TJAPlayer3.Skin.Game_UIMove_5P[0] * i); + chara_y = (TJAPlayer3.Skin.Characters_5P[Character][1] * resolutionScaleY) + (TJAPlayer3.Skin.Game_UIMove_5P[1] * i); + + if (nowChara != null) + { + charaScale = 0.58f; + } + } + else + { + chara_x = (TJAPlayer3.Skin.Characters_4P[Character][0] * resolutionScaleX) + (TJAPlayer3.Skin.Game_UIMove_4P[0] * i); + chara_y = (TJAPlayer3.Skin.Characters_4P[Character][1] * resolutionScaleY) + (TJAPlayer3.Skin.Game_UIMove_4P[1] * i); + + if (nowChara != null) + { + charaScale = 0.58f; + } + } + + charaScale *= resolutionScaleY; + //chara_x *= resolutionScaleX; + //chara_y *= resolutionScaleY; + + if (TJAPlayer3.ConfigIni.bAIBattleMode) + { + chara_x += TJAPlayer3.Skin.Game_AIBattle_CharaMove * TJAPlayer3.stage演奏ドラム画面.AIBattleState; + chara_y -= nowChara.szTextureSize.Height * charaScale; // Center down + } + + nowChara.vcScaleRatio.X = charaScale; + nowChara.vcScaleRatio.Y = charaScale; + + if (flipX) + { + nowChara.t2D左右反転描画(chara_x, chara_y); + } + else + { + nowChara.t2D描画(chara_x, chara_y); + } + + nowChara.vcScaleRatio.X = 1.0f; + nowChara.vcScaleRatio.Y = 1.0f; + } + + if ((this.b風船連打中[i] != true && CharaAction_Balloon_Delay[i].IsEnded) || TJAPlayer3.ConfigIni.nPlayerCount > 2) + { + if (TJAPlayer3.ConfigIni.nPlayerCount <= 2) + { + TJAPlayer3.stage演奏ドラム画面.PuchiChara.On進行描画(TJAPlayer3.Skin.Game_PuchiChara_X[i], TJAPlayer3.Skin.Game_PuchiChara_Y[i], TJAPlayer3.stage演奏ドラム画面.bIsAlreadyMaxed[i], player: i); + } + else if (TJAPlayer3.ConfigIni.nPlayerCount == 5) + { + TJAPlayer3.stage演奏ドラム画面.PuchiChara.On進行描画(TJAPlayer3.Skin.Game_PuchiChara_5P[0] + (TJAPlayer3.Skin.Game_UIMove_5P[0] * i), TJAPlayer3.Skin.Game_PuchiChara_5P[1] + (TJAPlayer3.Skin.Game_UIMove_5P[1] * i), TJAPlayer3.stage演奏ドラム画面.bIsAlreadyMaxed[i], player: i, scale: 0.5f); + } + else + { + TJAPlayer3.stage演奏ドラム画面.PuchiChara.On進行描画(TJAPlayer3.Skin.Game_PuchiChara_4P[0] + (TJAPlayer3.Skin.Game_UIMove_4P[0] * i), TJAPlayer3.Skin.Game_PuchiChara_4P[1] + (TJAPlayer3.Skin.Game_UIMove_4P[1] * i), TJAPlayer3.stage演奏ドラム画面.bIsAlreadyMaxed[i], player: i, scale: 0.5f); + } + } + } + return base.Draw(); + } + + public void OnDraw_Balloon() + { + for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) + { + //if (TJAPlayer3.Skin.Characters_Balloon_Breaking_Ptn[iCurrentCharacter[i]] != 0) CharaAction_Balloon_Breaking[i]?.t進行(); + //if (TJAPlayer3.Skin.Characters_Balloon_Broke_Ptn[iCurrentCharacter[i]] != 0) CharaAction_Balloon_Broke[i]?.t進行(); + CharaAction_Balloon_Delay[i]?.Tick(); + //if (TJAPlayer3.Skin.Characters_Balloon_Miss_Ptn[iCurrentCharacter[i]] != 0) CharaAction_Balloon_Miss[i]?.t進行(); + //CharaAction_Balloon_FadeOut[i].Tick(); + + { + bool endAnime = nNowCharaCounter[i] >= 1; + var nowOpacity = 255; + + float resolutionScaleX = TJAPlayer3.Skin.Resolution[0] / (float)TJAPlayer3.Skin.Characters_Resolution[this.iCurrentCharacter[i]][0]; + float resolutionScaleY = TJAPlayer3.Skin.Resolution[1] / (float)TJAPlayer3.Skin.Characters_Resolution[this.iCurrentCharacter[i]][1]; + + float chara_x = 0; + float chara_y = 0; + float kusu_chara_x = TJAPlayer3.Skin.Characters_Kusudama_X[this.iCurrentCharacter[i]][i] * resolutionScaleX; + float kusu_chara_y = TJAPlayer3.Skin.Characters_Kusudama_Y[this.iCurrentCharacter[i]][i] * resolutionScaleY; + + if (TJAPlayer3.ConfigIni.nPlayerCount <= 2) + { + chara_x = TJAPlayer3.Skin.Characters_Balloon_X[this.iCurrentCharacter[i]][i]; + chara_y = TJAPlayer3.Skin.Characters_Balloon_Y[this.iCurrentCharacter[i]][i]; + } + else + { + if (TJAPlayer3.ConfigIni.nPlayerCount == 5) + { + chara_x = TJAPlayer3.Skin.Characters_Balloon_5P[this.iCurrentCharacter[i]][0] + (TJAPlayer3.Skin.Game_UIMove_5P[0] * i); + chara_y = TJAPlayer3.Skin.Characters_Balloon_5P[this.iCurrentCharacter[i]][1] + (TJAPlayer3.Skin.Game_UIMove_5P[1] * i); + } + else + { + chara_x = TJAPlayer3.Skin.Characters_Balloon_4P[this.iCurrentCharacter[i]][0] + (TJAPlayer3.Skin.Game_UIMove_4P[0] * i); + chara_y = TJAPlayer3.Skin.Characters_Balloon_4P[this.iCurrentCharacter[i]][1] + (TJAPlayer3.Skin.Game_UIMove_4P[1] * i); + } + } + + chara_x *= resolutionScaleX; + chara_y *= resolutionScaleY; + + float charaScale = resolutionScaleY; + + + if (eNowAnime[i] == Anime.Balloon_Broke) + { + if (CharaAction_Balloon_FadeOut[i].Counter.IsStoped && nNowCharaFrame[i] > CharaAction_Balloon_FadeOut_StartMs[i][0]) + { + CharaAction_Balloon_FadeOut[i].Start(); + } + + if (TJAPlayer3.Skin.Characters_Balloon_Broke_Ptn[this.iCurrentCharacter[i]] != 0 && TJAPlayer3.Tx.Characters_Balloon_Broke[this.iCurrentCharacter[i]][nNowCharaFrame[i]] != null) + { + TJAPlayer3.Tx.Characters_Balloon_Broke[this.iCurrentCharacter[i]][nNowCharaFrame[i]].Opacity = nowOpacity; + TJAPlayer3.Tx.Characters_Balloon_Broke[this.iCurrentCharacter[i]][nNowCharaFrame[i]].vcScaleRatio.X = charaScale; + TJAPlayer3.Tx.Characters_Balloon_Broke[this.iCurrentCharacter[i]][nNowCharaFrame[i]].vcScaleRatio.Y = charaScale; + TJAPlayer3.Tx.Characters_Balloon_Broke[this.iCurrentCharacter[i]][nNowCharaFrame[i]].t2D描画( + TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLX(i) + chara_x, + TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLY(i) + chara_y); + } + + if (TJAPlayer3.ConfigIni.nPlayerCount <= 2) + TJAPlayer3.stage演奏ドラム画面.PuchiChara.On進行描画( + TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLX(i) + TJAPlayer3.Skin.Game_PuchiChara_BalloonX[i], + TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLY(i) + TJAPlayer3.Skin.Game_PuchiChara_BalloonY[i], false, nowOpacity, true, player : i); + + if (endAnime) + { + ReturnDefaultAnime(i, true); + } + } + else if (eNowAnime[i] == Anime.Balloon_Miss) + { + if (CharaAction_Balloon_FadeOut[i].Counter.IsStoped && nNowCharaFrame[i] > CharaAction_Balloon_FadeOut_StartMs[i][1]) + { + CharaAction_Balloon_FadeOut[i].Start(); + } + + if (TJAPlayer3.Skin.Characters_Balloon_Miss_Ptn[this.iCurrentCharacter[i]] != 0 && TJAPlayer3.Tx.Characters_Balloon_Miss[this.iCurrentCharacter[i]][nNowCharaFrame[i]] != null) + { + TJAPlayer3.Tx.Characters_Balloon_Miss[this.iCurrentCharacter[i]][nNowCharaFrame[i]].Opacity = nowOpacity; + TJAPlayer3.Tx.Characters_Balloon_Miss[this.iCurrentCharacter[i]][nNowCharaFrame[i]].vcScaleRatio.X = charaScale; + TJAPlayer3.Tx.Characters_Balloon_Miss[this.iCurrentCharacter[i]][nNowCharaFrame[i]].vcScaleRatio.Y = charaScale; + TJAPlayer3.Tx.Characters_Balloon_Miss[this.iCurrentCharacter[i]][nNowCharaFrame[i]].t2D描画( + TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLX(i) + chara_x, + TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLY(i) + chara_y); + } + + if (TJAPlayer3.ConfigIni.nPlayerCount <= 2) + TJAPlayer3.stage演奏ドラム画面.PuchiChara.On進行描画( + TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLX(i) + TJAPlayer3.Skin.Game_PuchiChara_BalloonX[i], + TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLY(i) + TJAPlayer3.Skin.Game_PuchiChara_BalloonY[i], false, nowOpacity, true, player : i); + + if (endAnime) + { + ReturnDefaultAnime(i, true); + } + } + else if (eNowAnime[i] == Anime.Balloon_Breaking) + { + if (TJAPlayer3.Skin.Characters_Balloon_Breaking_Ptn[this.iCurrentCharacter[i]] != 0 && TJAPlayer3.Tx.Characters_Balloon_Breaking[this.iCurrentCharacter[i]][nNowCharaFrame[i]] != null) + { + TJAPlayer3.Tx.Characters_Balloon_Breaking[this.iCurrentCharacter[i]][nNowCharaFrame[i]].vcScaleRatio.X = charaScale; + TJAPlayer3.Tx.Characters_Balloon_Breaking[this.iCurrentCharacter[i]][nNowCharaFrame[i]].vcScaleRatio.Y = charaScale; + TJAPlayer3.Tx.Characters_Balloon_Breaking[this.iCurrentCharacter[i]][nNowCharaFrame[i]].t2D描画( + TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLX(i) + chara_x, + TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLY(i) + chara_y); + } + + if (TJAPlayer3.ConfigIni.nPlayerCount <= 2) + TJAPlayer3.stage演奏ドラム画面.PuchiChara.On進行描画( + TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLX(i) + TJAPlayer3.Skin.Game_PuchiChara_BalloonX[i], + TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLY(i) + TJAPlayer3.Skin.Game_PuchiChara_BalloonY[i], false, 255, true, player : i); + } + else if (eNowAnime[i] == Anime.Kusudama_Broke) + { + if (CharaAction_Balloon_FadeOut[i].Counter.IsStoped && nNowCharaFrame[i] > CharaAction_Balloon_FadeOut_StartMs[i][0]) + { + CharaAction_Balloon_FadeOut[i].Start(); + } + float kusuOutX = ((1.0f - MathF.Cos(nNowCharaCounter[i] * MathF.PI)) * TJAPlayer3.Skin.Resolution[0] / 2.0f) * resolutionScaleX; + float kusuOutY = (MathF.Sin(nNowCharaCounter[i] * MathF.PI / 2) * TJAPlayer3.Skin.Resolution[1] / 2.0f) * resolutionScaleY; + + if (TJAPlayer3.Skin.Characters_Kusudama_Broke_Ptn[this.iCurrentCharacter[i]] != 0 && TJAPlayer3.Tx.Characters_Kusudama_Broke[this.iCurrentCharacter[i]][nNowCharaFrame[i]] != null) + { + TJAPlayer3.Tx.Characters_Kusudama_Broke[this.iCurrentCharacter[i]][nNowCharaFrame[i]].Opacity = nowOpacity; + TJAPlayer3.Tx.Characters_Kusudama_Broke[this.iCurrentCharacter[i]][nNowCharaFrame[i]].vcScaleRatio.X = charaScale; + TJAPlayer3.Tx.Characters_Kusudama_Broke[this.iCurrentCharacter[i]][nNowCharaFrame[i]].vcScaleRatio.Y = charaScale; + if (i % 2 == 0) + { + TJAPlayer3.Tx.Characters_Kusudama_Broke[this.iCurrentCharacter[i]][nNowCharaFrame[i]].t2D描画(kusu_chara_x - kusuOutX, kusu_chara_y - kusuOutY); + } + else + { + TJAPlayer3.Tx.Characters_Kusudama_Broke[this.iCurrentCharacter[i]][nNowCharaFrame[i]].t2D左右反転描画(kusu_chara_x + kusuOutX, kusu_chara_y - kusuOutY); + } + } + if (i % 2 == 0) + { + TJAPlayer3.stage演奏ドラム画面.PuchiChara.On進行描画( + TJAPlayer3.Skin.Game_PuchiChara_KusudamaX[i] - (int)kusuOutX, + TJAPlayer3.Skin.Game_PuchiChara_KusudamaY[i] - (int)kusuOutY, false, nowOpacity, true, player : i); + } + else + { + TJAPlayer3.stage演奏ドラム画面.PuchiChara.On進行描画( + TJAPlayer3.Skin.Game_PuchiChara_KusudamaX[i] + (int)kusuOutX, + TJAPlayer3.Skin.Game_PuchiChara_KusudamaY[i] - (int)kusuOutY, false, nowOpacity, true, player : i); + } + + if (endAnime) + { + ReturnDefaultAnime(i, true); + } + } + else if (eNowAnime[i] == Anime.Kusudama_Miss) + { + if (CharaAction_Balloon_FadeOut[i].Counter.IsStoped && nNowCharaFrame[i] > CharaAction_Balloon_FadeOut_StartMs[i][1]) + { + CharaAction_Balloon_FadeOut[i].Start(); + } + + float kusuOutY = (Math.Max(nNowCharaCounter[i] - 0.5f, 0) * TJAPlayer3.Skin.Resolution[1] * 2) * resolutionScaleY; + + if (TJAPlayer3.Skin.Characters_Kusudama_Miss_Ptn[this.iCurrentCharacter[i]] != 0 && TJAPlayer3.Tx.Characters_Kusudama_Miss[this.iCurrentCharacter[i]][nNowCharaFrame[i]] != null) + { + TJAPlayer3.Tx.Characters_Kusudama_Miss[this.iCurrentCharacter[i]][nNowCharaFrame[i]].Opacity = nowOpacity; + TJAPlayer3.Tx.Characters_Kusudama_Miss[this.iCurrentCharacter[i]][nNowCharaFrame[i]].vcScaleRatio.X = charaScale; + TJAPlayer3.Tx.Characters_Kusudama_Miss[this.iCurrentCharacter[i]][nNowCharaFrame[i]].vcScaleRatio.Y = charaScale; + + + if (i % 2 == 0) + { + TJAPlayer3.Tx.Characters_Kusudama_Miss[this.iCurrentCharacter[i]][nNowCharaFrame[i]].t2D描画(kusu_chara_x, kusu_chara_y + kusuOutY); + } + else + { + TJAPlayer3.Tx.Characters_Kusudama_Miss[this.iCurrentCharacter[i]][nNowCharaFrame[i]].t2D左右反転描画(kusu_chara_x, kusu_chara_y + kusuOutY); + } + } + + TJAPlayer3.stage演奏ドラム画面.PuchiChara.On進行描画( + TJAPlayer3.Skin.Game_PuchiChara_KusudamaX[i], + TJAPlayer3.Skin.Game_PuchiChara_KusudamaY[i] + (int)kusuOutY, false, nowOpacity, true, player : i); + + if (endAnime) + { + ReturnDefaultAnime(i, true); + } + } + else if (eNowAnime[i] == Anime.Kusudama_Breaking) + { + float kusuInX = ((1.0f - MathF.Sin(ctKusuIn[i].CurrentValue / 2000.0f * MathF.PI)) * TJAPlayer3.Skin.Resolution[0] / 2.0f) * resolutionScaleX; + float kusuInY = -((MathF.Cos(ctKusuIn[i].CurrentValue / 1000.0f * MathF.PI / 2)) * TJAPlayer3.Skin.Resolution[1] / 2.0f) * resolutionScaleY; + + + if (TJAPlayer3.Skin.Characters_Kusudama_Breaking_Ptn[this.iCurrentCharacter[i]] != 0 && TJAPlayer3.Tx.Characters_Kusudama_Breaking[this.iCurrentCharacter[i]][nNowCharaFrame[i]] != null) + { + TJAPlayer3.Tx.Characters_Kusudama_Breaking[this.iCurrentCharacter[i]][nNowCharaFrame[i]].vcScaleRatio.X = charaScale; + TJAPlayer3.Tx.Characters_Kusudama_Breaking[this.iCurrentCharacter[i]][nNowCharaFrame[i]].vcScaleRatio.Y = charaScale; + if (i % 2 == 0) + { + TJAPlayer3.Tx.Characters_Kusudama_Breaking[this.iCurrentCharacter[i]][nNowCharaFrame[i]].t2D描画(kusu_chara_x - kusuInX, kusu_chara_y + kusuInY); + } + else + { + TJAPlayer3.Tx.Characters_Kusudama_Breaking[this.iCurrentCharacter[i]][nNowCharaFrame[i]].t2D左右反転描画(kusu_chara_x + kusuInX, kusu_chara_y + kusuInY); + } + } + + if (i % 2 == 0) + { + TJAPlayer3.stage演奏ドラム画面.PuchiChara.On進行描画( + TJAPlayer3.Skin.Game_PuchiChara_KusudamaX[i] - (int)kusuInX, + TJAPlayer3.Skin.Game_PuchiChara_KusudamaY[i] + (int)kusuInY, false, 255, true, player : i); + } + else + { + TJAPlayer3.stage演奏ドラム画面.PuchiChara.On進行描画( + TJAPlayer3.Skin.Game_PuchiChara_KusudamaX[i] + (int)kusuInX, + TJAPlayer3.Skin.Game_PuchiChara_KusudamaY[i] + (int)kusuInY, false, 255, true, player : i); + } + + if (endAnime) + { + ChangeAnime(i, Anime.Kusudama_Idle, true); + } + } + else if (eNowAnime[i] == Anime.Kusudama_Idle) + { + float kusuInX = ((1.0f - MathF.Sin(ctKusuIn[i].CurrentValue / 2000.0f * MathF.PI)) * TJAPlayer3.Skin.Resolution[0] / 2.0f) * resolutionScaleX; + float kusuInY = -((MathF.Cos(ctKusuIn[i].CurrentValue / 1000.0f * MathF.PI / 2)) * TJAPlayer3.Skin.Resolution[1] / 2.0f) * resolutionScaleY; + + if (TJAPlayer3.Skin.Characters_Kusudama_Idle_Ptn[this.iCurrentCharacter[i]] != 0 && TJAPlayer3.Tx.Characters_Kusudama_Idle[this.iCurrentCharacter[i]][nNowCharaFrame[i]] != null) + { + TJAPlayer3.Tx.Characters_Kusudama_Idle[this.iCurrentCharacter[i]][nNowCharaFrame[i]].vcScaleRatio.X = charaScale; + TJAPlayer3.Tx.Characters_Kusudama_Idle[this.iCurrentCharacter[i]][nNowCharaFrame[i]].vcScaleRatio.Y = charaScale; + if (i % 2 == 0) + { + TJAPlayer3.Tx.Characters_Kusudama_Idle[this.iCurrentCharacter[i]][nNowCharaFrame[i]].t2D描画(kusu_chara_x - kusuInX, kusu_chara_y + kusuInY); + } + else + { + TJAPlayer3.Tx.Characters_Kusudama_Idle[this.iCurrentCharacter[i]][nNowCharaFrame[i]].t2D左右反転描画(kusu_chara_x + kusuInX, kusu_chara_y + kusuInY); + } + } + + if (i % 2 == 0) + { + TJAPlayer3.stage演奏ドラム画面.PuchiChara.On進行描画( + TJAPlayer3.Skin.Game_PuchiChara_KusudamaX[i] - (int)kusuInX, + TJAPlayer3.Skin.Game_PuchiChara_KusudamaY[i] + (int)kusuInY, false, 255, true, player : i); + } + else + { + TJAPlayer3.stage演奏ドラム画面.PuchiChara.On進行描画( + TJAPlayer3.Skin.Game_PuchiChara_KusudamaX[i] + (int)kusuInX, + TJAPlayer3.Skin.Game_PuchiChara_KusudamaY[i] + (int)kusuInY, false, 255, true, player : i); + } + + if (endAnime) + { + ChangeAnime(i, Anime.Kusudama_Idle, true); + } + } + } + } + } + + + public void ReturnDefaultAnime(int player, bool resetCounter) + { + if (TJAPlayer3.stage演奏ドラム画面.bIsGOGOTIME[player] && TJAPlayer3.Skin.Characters_GoGoTime_Ptn[this.iCurrentCharacter[player]] != 0) + { + if (TJAPlayer3.stage演奏ドラム画面.bIsAlreadyMaxed[player] && TJAPlayer3.Skin.Characters_GoGoTime_Maxed_Ptn[this.iCurrentCharacter[player]] != 0) + { + ChangeAnime(player, Anime.GoGoTime_Maxed, resetCounter); + } + else + { + ChangeAnime(player, Anime.GoGoTime, resetCounter); + } + } + else + { + if (TJAPlayer3.stage演奏ドラム画面.bIsMiss[player] && TJAPlayer3.Skin.Characters_Normal_Missed_Ptn[this.iCurrentCharacter[player]] != 0) + { + if (TJAPlayer3.stage演奏ドラム画面.Chara_MissCount[player] >= 6 && TJAPlayer3.Skin.Characters_Normal_MissedDown_Ptn[this.iCurrentCharacter[player]] != 0) + { + ChangeAnime(player, Anime.MissDown, resetCounter); + } + else + { + ChangeAnime(player, Anime.Miss, resetCounter); + } + } + else + { + if (TJAPlayer3.stage演奏ドラム画面.bIsAlreadyMaxed[player] && TJAPlayer3.Skin.Characters_Normal_Maxed_Ptn[this.iCurrentCharacter[player]] != 0) + { + ChangeAnime(player, Anime.Maxed, resetCounter); + } + else if (TJAPlayer3.stage演奏ドラム画面.bIsAlreadyCleared[player] && TJAPlayer3.Skin.Characters_Normal_Cleared_Ptn[this.iCurrentCharacter[player]] != 0) + { + ChangeAnime(player, Anime.Cleared, resetCounter); + } + else if (TJAPlayer3.Skin.Characters_Normal_Ptn[this.iCurrentCharacter[player]] != 0) + { + ChangeAnime(player, Anime.Normal, resetCounter); + } + else + { + ChangeAnime(player, Anime.None, resetCounter); + } + } + } + } + + public int[][] arモーション番号 = new int[5][]; + public int[][] arMissモーション番号 = new int[5][]; + public int[][] arMissDownモーション番号 = new int[5][]; + public int[][] arゴーゴーモーション番号 = new int[5][]; + public int[][] arクリアモーション番号 = new int[5][]; + + private float[] nNowCharaCounter = new float[5]; + private int[] nNowCharaFrame = new int[5]; + private int[] nCharaFrameCount = new int[5]; + private float[] nCharaBeat = new float[5]; + + public enum Anime + { + None, + Normal, + Miss, + MissDown, + Cleared, + Maxed, + MissIn, + MissDownIn, + GoGoTime, + GoGoTime_Maxed, + Combo10, + Combo10_Clear, + Combo10_Max, + GoGoStart, + GoGoStart_Clear, + GoGoStart_Max, + Become_Cleared, + Become_Maxed, + SoulOut, + ClearOut, + Return, + Balloon_Breaking, + Balloon_Broke, + Balloon_Miss, + Kusudama_Idle, + Kusudama_Breaking, + Kusudama_Broke, + Kusudama_Miss + } + + + public Anime[] eNowAnime = new Anime[5]; + + public CCounter[] ctKusuIn = new CCounter[5]; + + public void KusuIn() + { + for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) + { + ChangeAnime(i, Anime.Kusudama_Idle, true); + ctKusuIn[i] = new CCounter(0, 1000, 0.4f, TJAPlayer3.Timer); + } + } + + public void ChangeAnime(int player, Anime anime, bool resetCounter) + { + eNowAnime[player] = anime; + + if (resetCounter) + { + nNowCharaCounter[player] = 0; + nNowCharaFrame[player] = 0; + } + + switch (anime) + { + case Anime.None: + break; + case Anime.Normal: + nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_Normal[iCurrentCharacter[player]].Length - 1; + nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_Normal[iCurrentCharacter[player]]; + break; + case Anime.Miss: + nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_Miss[iCurrentCharacter[player]].Length - 1; + nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_Miss[iCurrentCharacter[player]]; + break; + case Anime.MissDown: + nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_MissDown[iCurrentCharacter[player]].Length - 1; + nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_MissDown[iCurrentCharacter[player]]; + break; + case Anime.Cleared: + nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_Clear[iCurrentCharacter[player]].Length - 1; + nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_Clear[iCurrentCharacter[player]]; + break; + case Anime.Maxed: + nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_ClearMax[iCurrentCharacter[player]].Length - 1; + nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_ClearMax[iCurrentCharacter[player]]; + break; + case Anime.MissIn: + nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_MissIn[iCurrentCharacter[player]].Length - 1; + nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_MissIn[iCurrentCharacter[player]]; + break; + case Anime.MissDownIn: + nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_MissDownIn[iCurrentCharacter[player]].Length - 1; + nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_MissDownIn[iCurrentCharacter[player]]; + break; + case Anime.GoGoTime: + nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_GoGo[iCurrentCharacter[player]].Length - 1; + nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_GoGo[iCurrentCharacter[player]]; + break; + case Anime.GoGoTime_Maxed: + nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_GoGoMax[iCurrentCharacter[player]].Length - 1; + nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_GoGoMax[iCurrentCharacter[player]]; + break; + case Anime.Combo10: + nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_10Combo[iCurrentCharacter[player]].Length - 1; + nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_10Combo[iCurrentCharacter[player]]; + break; + case Anime.Combo10_Clear: + nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_10Combo_Clear[iCurrentCharacter[player]].Length - 1; + nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_10Combo_Clear[iCurrentCharacter[player]]; + break; + case Anime.Combo10_Max: + nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_10ComboMax[iCurrentCharacter[player]].Length - 1; + nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_10ComboMax[iCurrentCharacter[player]]; + break; + case Anime.GoGoStart: + nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_GoGoStart[iCurrentCharacter[player]].Length - 1; + nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_GoGoStart[iCurrentCharacter[player]]; + break; + case Anime.GoGoStart_Clear: + nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_GoGoStart_Clear[iCurrentCharacter[player]].Length - 1; + nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_GoGoStart_Clear[iCurrentCharacter[player]]; + break; + case Anime.GoGoStart_Max: + nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_GoGoStartMax[iCurrentCharacter[player]].Length - 1; + nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_GoGoStartMax[iCurrentCharacter[player]]; + break; + case Anime.Become_Cleared: + nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_ClearIn[iCurrentCharacter[player]].Length - 1; + nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_ClearIn[iCurrentCharacter[player]]; + break; + case Anime.Become_Maxed: + nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_SoulIn[iCurrentCharacter[player]].Length - 1; + nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_SoulIn[iCurrentCharacter[player]]; + break; + case Anime.SoulOut: + nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_SoulOut[iCurrentCharacter[player]].Length - 1; + nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_SoulOut[iCurrentCharacter[player]]; + break; + case Anime.ClearOut: + nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_ClearOut[iCurrentCharacter[player]].Length - 1; + nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_ClearOut[iCurrentCharacter[player]]; + break; + case Anime.Return: + nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Motion_Return[iCurrentCharacter[player]].Length - 1; + nCharaBeat[player] = TJAPlayer3.Skin.Characters_Beat_Return[iCurrentCharacter[player]]; + break; + case Anime.Balloon_Breaking: + nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Balloon_Breaking_Ptn[iCurrentCharacter[player]] - 1; + nCharaBeat[player] = 0.2f; + break; + case Anime.Balloon_Broke: + nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Balloon_Broke_Ptn[iCurrentCharacter[player]] - 1; + nCharaBeat[player] = 0.2f; + break; + case Anime.Balloon_Miss: + nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Balloon_Miss_Ptn[iCurrentCharacter[player]] - 1; + nCharaBeat[player] = 0.2f; + break; + case Anime.Kusudama_Idle: + nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Kusudama_Idle_Ptn[iCurrentCharacter[player]] - 1; + nCharaBeat[player] = 0.4f; + break; + case Anime.Kusudama_Breaking: + nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Kusudama_Breaking_Ptn[iCurrentCharacter[player]] - 1; + nCharaBeat[player] = 0.2f; + break; + case Anime.Kusudama_Broke: + nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Kusudama_Broke_Ptn[iCurrentCharacter[player]] - 1; + nCharaBeat[player] = 1f; + break; + case Anime.Kusudama_Miss: + nCharaFrameCount[player] = TJAPlayer3.Skin.Characters_Kusudama_Miss_Ptn[iCurrentCharacter[player]] - 1; + nCharaBeat[player] = 0.5f; + break; + } + } + + public CCounter[] CharaAction_Balloon_Delay = new CCounter[5]; + + public Animations.FadeOut[] CharaAction_Balloon_FadeOut = new Animations.FadeOut[5]; + //private readonly int[] CharaAction_Balloon_FadeOut_StartMs = new int[5]; + private readonly int[][] CharaAction_Balloon_FadeOut_StartMs = new int[5][]; + + //public bool[] bキャラクターアクション中 = new bool[5]; + + public bool[] b風船連打中 = new bool[5]; + public bool[] b演奏中 = new bool[5]; + + public int[] iCurrentCharacter = new int[5] { 0, 0, 0, 0, 0 }; + } +} diff --git a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drumsチップエフェクト.cs b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplChipEffects.cs similarity index 98% rename from OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drumsチップエフェクト.cs rename to OpenTaiko/src/Stages/07.Game/Taiko/CActImplChipEffects.cs index 53bd2881..a8691282 100644 --- a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drumsチップエフェクト.cs +++ b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplChipEffects.cs @@ -9,11 +9,11 @@ using Rectangle = System.Drawing.Rectangle; namespace TJAPlayer3 { - internal class CAct演奏Drumsチップエフェクト : CActivity + internal class CActImplChipEffects : CActivity { // コンストラクタ - public CAct演奏Drumsチップエフェクト() + public CActImplChipEffects() { //base.b活性化してない = true; } diff --git a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drums演奏終了演出.cs b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplClearAnimation.cs similarity index 97% rename from OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drums演奏終了演出.cs rename to OpenTaiko/src/Stages/07.Game/Taiko/CActImplClearAnimation.cs index c82ce52b..f6711f2e 100644 --- a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drums演奏終了演出.cs +++ b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplClearAnimation.cs @@ -1,912 +1,912 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Runtime.InteropServices; -using System.Drawing; -using FDK; - -using Rectangle = System.Drawing.Rectangle; -using Point = System.Drawing.Point; -using Color = System.Drawing.Color; - -namespace TJAPlayer3 -{ - internal class CAct演奏Drums演奏終了演出 : CActivity - { - /// - /// 課題 - /// _クリア失敗 →素材不足(確保はできる。切り出しと加工をしてないだけ。) - /// _ - /// - public CAct演奏Drums演奏終了演出() - { - base.IsDeActivated = true; - } - - public void Start() - { - // this.ct進行メイン = new CCounter(0, 500, 1000 / 60, TJAPlayer3.Timer); - - bSongsPlayed = false; - - this.ct進行メイン = new CCounter(0, 300, 22, TJAPlayer3.Timer); - - /* - this.ctEnd_ClearFailed = new CCounter(0, 69, 30, TJAPlayer3.Timer); - this.ctEnd_FullCombo = new CCounter(0, 66, 33, TJAPlayer3.Timer); - this.ctEnd_FullComboLoop = new CCounter(0, 2, 30, TJAPlayer3.Timer); - this.ctEnd_DondaFullCombo = new CCounter(0, 61, 33, TJAPlayer3.Timer); - this.ctEnd_DondaFullComboLoop = new CCounter(0, 2, 30, TJAPlayer3.Timer); - */ - - // モードの決定。クリア失敗・フルコンボも事前に作っとく。 - if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Tower) - { - if (CFloorManagement.CurrentNumberOfLives > 0) - { - if (TJAPlayer3.stage演奏ドラム画面.CChartScore[0].nMiss == 0 && TJAPlayer3.stage演奏ドラム画面.CChartScore[0].nMine == 0) - { - if (TJAPlayer3.stage演奏ドラム画面.CChartScore[0].nGood == 0) - this.Mode[0] = EndMode.Tower_TopReached_Perfect; - else - this.Mode[0] = EndMode.Tower_TopReached_FullCombo; - } - else - this.Mode[0] = EndMode.Tower_TopReached_Pass; - } - else - this.Mode[0] = EndMode.Tower_Dropout; - } - else if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Dan) - { - // 段位認定モード。 - if (!TJAPlayer3.stage演奏ドラム画面.actDan.GetFailedAllChallenges()) - { - // 段位認定モード、クリア成功 - // this.Mode[0] = EndMode.StageCleared; - - bool bgold = TJAPlayer3.stage演奏ドラム画面.actDan.GetExamStatus(TJAPlayer3.stage結果.st演奏記録.Drums.Dan_C) == Exam.Status.Better_Success; - - if (TJAPlayer3.stage演奏ドラム画面.CChartScore[0].nMiss == 0 && TJAPlayer3.stage演奏ドラム画面.CChartScore[0].nMine == 0) - { - if (TJAPlayer3.stage演奏ドラム画面.CChartScore[0].nGood == 0) - this.Mode[0] = bgold ? EndMode.Dan_Gold_Perfect : EndMode.Dan_Red_Perfect; - else - this.Mode[0] = bgold ? EndMode.Dan_Gold_FullCombo : EndMode.Dan_Red_FullCombo; - } - else - this.Mode[0] = bgold ? EndMode.Dan_Gold_Pass : EndMode.Dan_Red_Pass; - - - } - else - { - // 段位認定モード、クリア失敗 - this.Mode[0] = EndMode.Dan_Fail; - } - } - else if (TJAPlayer3.ConfigIni.bAIBattleMode) - { - if (TJAPlayer3.stage演奏ドラム画面.bIsAIBattleWin) - { - if (TJAPlayer3.stage演奏ドラム画面.CChartScore[0].nMiss == 0 && TJAPlayer3.stage演奏ドラム画面.CChartScore[0].nMine == 0) - { - if (TJAPlayer3.stage演奏ドラム画面.CChartScore[0].nGood == 0) - this.Mode[0] = EndMode.AI_Win_Perfect; - else - this.Mode[0] = EndMode.AI_Win_FullCombo; - } - else - this.Mode[0] = EndMode.AI_Win; - } - else - { - this.Mode[0] = EndMode.AI_Lose; - } - } - else - { - // 通常のモード。 - // ここでフルコンボフラグをチェックするが現時点ではない。 - // 今の段階では魂ゲージ80%以上でチェック。 - for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) - { - if (HGaugeMethods.UNSAFE_FastNormaCheck(i)) - { - if (TJAPlayer3.stage演奏ドラム画面.CChartScore[i].nMiss == 0 && TJAPlayer3.stage演奏ドラム画面.CChartScore[i].nMine == 0) - //if (TJAPlayer3.stage演奏ドラム画面.nヒット数_Auto含まない.Drums.Miss == 0) - { - if (TJAPlayer3.stage演奏ドラム画面.CChartScore[i].nGood == 0) - //if (TJAPlayer3.stage演奏ドラム画面.nヒット数_Auto含まない.Drums.Great == 0) - { - this.Mode[i] = EndMode.StageDondaFullCombo; - } - else - { - this.Mode[i] = EndMode.StageFullCombo; - } - } - else - { - this.Mode[i] = EndMode.StageCleared; - } - } - else - { - this.Mode[i] = EndMode.StageFailed; - } - } - } - } - - public override void Activate() - { - this.bリザルトボイス再生済み = false; - this.Mode = new EndMode[5]; - - var origindir = CSkin.Path($"{TextureLoader.BASE}{TextureLoader.GAME}{TextureLoader.END}"); - - - if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Tower) - { - Tower_DropoutScript = new EndAnimeScript($@"{origindir}Tower_Dropout{Path.DirectorySeparatorChar}Script.lua"); - Tower_DropoutScript.Init(); - - Tower_TopReached_PassScript = new EndAnimeScript($@"{origindir}Tower_TopReached_Pass{Path.DirectorySeparatorChar}Script.lua"); - Tower_TopReached_PassScript.Init(); - - Tower_TopReached_FullComboScript = new EndAnimeScript($@"{origindir}Tower_TopReached_FullCombo{Path.DirectorySeparatorChar}Script.lua"); - Tower_TopReached_FullComboScript.Init(); - - Tower_TopReached_PerfectScript = new EndAnimeScript($@"{origindir}Tower_TopReached_Perfect{Path.DirectorySeparatorChar}Script.lua"); - Tower_TopReached_PerfectScript.Init(); - - this.soundTowerDropout = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Tower{Path.DirectorySeparatorChar}Tower_Dropout.ogg"), ESoundGroup.SoundEffect); - this.soundTowerTopPass = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Tower{Path.DirectorySeparatorChar}Tower_TopReached_Pass.ogg"), ESoundGroup.SoundEffect); - this.soundTowerTopFC = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Tower{Path.DirectorySeparatorChar}Tower_TopReached_FullCombo.ogg"), ESoundGroup.SoundEffect); - this.soundTowerTopPerfect = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Tower{Path.DirectorySeparatorChar}Tower_TopReached_Perfect.ogg"), ESoundGroup.SoundEffect); - } - else if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Dan) - { - Dan_FailScript = new EndAnimeScript($@"{origindir}Dan_Fail{Path.DirectorySeparatorChar}Script.lua"); - Dan_FailScript.Init(); - - Dan_Red_PassScript = new EndAnimeScript($@"{origindir}Dan_Red_Pass{Path.DirectorySeparatorChar}Script.lua"); - Dan_Red_PassScript.Init(); - - Dan_Red_FullComboScript = new EndAnimeScript($@"{origindir}Dan_Red_FullCombo{Path.DirectorySeparatorChar}Script.lua"); - Dan_Red_FullComboScript.Init(); - - Dan_Red_PerfectScript = new EndAnimeScript($@"{origindir}Dan_Red_Perfect{Path.DirectorySeparatorChar}Script.lua"); - Dan_Red_PerfectScript.Init(); - - Dan_Gold_PassScript = new EndAnimeScript($@"{origindir}Dan_Gold_Pass{Path.DirectorySeparatorChar}Script.lua"); - Dan_Gold_PassScript.Init(); - - Dan_Gold_FullComboScript = new EndAnimeScript($@"{origindir}Dan_Gold_FullCombo{Path.DirectorySeparatorChar}Script.lua"); - Dan_Gold_FullComboScript.Init(); - - Dan_Gold_PerfectScript = new EndAnimeScript($@"{origindir}Dan_Gold_Perfect{Path.DirectorySeparatorChar}Script.lua"); - Dan_Gold_PerfectScript.Init(); - - this.soundDanFailed = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Dan{Path.DirectorySeparatorChar}Dan_Fail.ogg"), ESoundGroup.SoundEffect); - this.soundDanRedClear = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Dan{Path.DirectorySeparatorChar}Dan_Red_Pass.ogg"), ESoundGroup.SoundEffect); - this.soundDanRedFC = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Dan{Path.DirectorySeparatorChar}Dan_Red_FullCombo.ogg"), ESoundGroup.SoundEffect); - this.soundDanRedPerfect = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Dan{Path.DirectorySeparatorChar}Dan_Red_Perfect.ogg"), ESoundGroup.SoundEffect); - this.soundDanGoldClear = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Dan{Path.DirectorySeparatorChar}Dan_Gold_Pass.ogg"), ESoundGroup.SoundEffect); - this.soundDanGoldFC = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Dan{Path.DirectorySeparatorChar}Dan_Gold_FullCombo.ogg"), ESoundGroup.SoundEffect); - this.soundDanGoldPerfect = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Dan{Path.DirectorySeparatorChar}Dan_Gold_Perfect.ogg"), ESoundGroup.SoundEffect); - - } - else if (TJAPlayer3.ConfigIni.bAIBattleMode) - { - AILoseScript = new EndAnimeScript($@"{origindir}AI_Lose{Path.DirectorySeparatorChar}Script.lua"); - AILoseScript.Init(); - - AIWinScript = new EndAnimeScript($@"{origindir}AI_Win{Path.DirectorySeparatorChar}Script.lua"); - AIWinScript.Init(); - - AIWin_FullComboScript = new EndAnimeScript($@"{origindir}AI_Win_FullCombo{Path.DirectorySeparatorChar}Script.lua"); - AIWin_FullComboScript.Init(); - - AIWin_PerfectScript = new EndAnimeScript($@"{origindir}AI_Win_Perfect{Path.DirectorySeparatorChar}Script.lua"); - AIWin_PerfectScript.Init(); - - this.soundAILose = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}AIBattle_Lose.ogg"), ESoundGroup.SoundEffect); - this.soundAIWin = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}AIBattle_Win.ogg"), ESoundGroup.SoundEffect); - this.soundAIWinFullCombo = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}AIBattle_Win_FullCombo.ogg"), ESoundGroup.SoundEffect); - this.soundAIWinDondaFullCombo = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}AIBattle_Win_AllPerfect.ogg"), ESoundGroup.SoundEffect); - } - else - { - FailedScript = new EndAnimeScript($@"{origindir}ClearFailed{Path.DirectorySeparatorChar}Script.lua");//ClearFailed - FailedScript.Init(); - - ClearScript = new EndAnimeScript($@"{origindir}Clear{Path.DirectorySeparatorChar}Script.lua"); - ClearScript.Init(); - - FullComboScript = new EndAnimeScript($@"{origindir}FullCombo{Path.DirectorySeparatorChar}Script.lua"); - FullComboScript.Init(); - - DondaFullComboScript = new EndAnimeScript($@"{origindir}DondaFullCombo{Path.DirectorySeparatorChar}Script.lua"); - DondaFullComboScript.Init(); - } - - - base.Activate(); - } - - public override void DeActivate() - { - this.ct進行メイン = null; - - if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Tower) - { - Tower_DropoutScript.Dispose(); - Tower_TopReached_PassScript.Dispose(); - Tower_TopReached_FullComboScript.Dispose(); - Tower_TopReached_PerfectScript.Dispose(); - } - else if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Dan) - { - Dan_FailScript.Dispose(); - Dan_Red_PassScript.Dispose(); - Dan_Red_FullComboScript.Dispose(); - Dan_Red_PerfectScript.Dispose(); - Dan_Gold_PassScript.Dispose(); - Dan_Gold_FullComboScript.Dispose(); - Dan_Gold_PerfectScript.Dispose(); - } - else if (TJAPlayer3.ConfigIni.bAIBattleMode) - { - AILoseScript.Dispose(); - AIWinScript.Dispose(); - AIWin_FullComboScript.Dispose(); - AIWin_PerfectScript.Dispose(); - } - else - { - FailedScript.Dispose(); - ClearScript.Dispose(); - FullComboScript.Dispose(); - DondaFullComboScript.Dispose(); - } - - base.DeActivate(); - } - - public override void CreateManagedResource() - { - this.b再生済み = false; - - this.soundTowerDropout = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Tower{Path.DirectorySeparatorChar}Tower_Dropout.ogg"), ESoundGroup.SoundEffect); - this.soundTowerTopPass = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Tower{Path.DirectorySeparatorChar}Tower_TopReached_Pass.ogg"), ESoundGroup.SoundEffect); - this.soundTowerTopFC = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Tower{Path.DirectorySeparatorChar}Tower_TopReached_FullCombo.ogg"), ESoundGroup.SoundEffect); - this.soundTowerTopPerfect = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Tower{Path.DirectorySeparatorChar}Tower_TopReached_Perfect.ogg"), ESoundGroup.SoundEffect); - - this.soundDanFailed = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Dan{Path.DirectorySeparatorChar}Dan_Fail.ogg"), ESoundGroup.SoundEffect); - this.soundDanRedClear = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Dan{Path.DirectorySeparatorChar}Dan_Red_Pass.ogg"), ESoundGroup.SoundEffect); - this.soundDanRedFC = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Dan{Path.DirectorySeparatorChar}Dan_Red_FullCombo.ogg"), ESoundGroup.SoundEffect); - this.soundDanRedPerfect = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Dan{Path.DirectorySeparatorChar}Dan_Red_Perfect.ogg"), ESoundGroup.SoundEffect); - this.soundDanGoldClear = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Dan{Path.DirectorySeparatorChar}Dan_Gold_Pass.ogg"), ESoundGroup.SoundEffect); - this.soundDanGoldFC = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Dan{Path.DirectorySeparatorChar}Dan_Gold_FullCombo.ogg"), ESoundGroup.SoundEffect); - this.soundDanGoldPerfect = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Dan{Path.DirectorySeparatorChar}Dan_Gold_Perfect.ogg"), ESoundGroup.SoundEffect); - - this.soundAILose = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}AIBattle_Lose.ogg"), ESoundGroup.SoundEffect); - this.soundAIWin = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}AIBattle_Win.ogg"), ESoundGroup.SoundEffect); - this.soundAIWinFullCombo = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}AIBattle_Win_FullCombo.ogg"), ESoundGroup.SoundEffect); - this.soundAIWinDondaFullCombo = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}AIBattle_Win_AllPerfect.ogg"), ESoundGroup.SoundEffect); - for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) - { - this.soundClear[i] = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Clear.ogg"), ESoundGroup.SoundEffect); - this.soundFailed[i] = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Failed.ogg"), ESoundGroup.SoundEffect); - this.soundFullCombo[i] = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}FullCombo.ogg"), ESoundGroup.SoundEffect); - this.soundDondaFullCombo[i] = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}AllPerfect.ogg"), ESoundGroup.SoundEffect); - } - - base.CreateManagedResource(); - } - - public override void ReleaseManagedResource() - { - this.soundTowerDropout?.tDispose(); - this.soundTowerTopPass?.tDispose(); - this.soundTowerTopFC?.tDispose(); - this.soundTowerTopPerfect?.tDispose(); - - this.soundDanFailed?.tDispose(); - this.soundDanRedClear?.tDispose(); - this.soundDanRedFC?.tDispose(); - this.soundDanRedPerfect?.tDispose(); - this.soundDanGoldClear?.tDispose(); - this.soundDanGoldFC?.tDispose(); - this.soundDanGoldPerfect?.tDispose(); - - this.soundAILose?.tDispose(); - this.soundAIWin?.tDispose(); - this.soundAIWinFullCombo?.tDispose(); - this.soundAIWinDondaFullCombo?.tDispose(); - - for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) - { - this.soundClear[i]?.tDispose(); - this.soundFailed[i]?.tDispose(); - this.soundFullCombo[i]?.tDispose(); - this.soundDondaFullCombo[i]?.tDispose(); - } - - base.ReleaseManagedResource(); - } - - #region [effects] - // ------------------------------------ - private void showEndEffect_Failed(int i) - { - if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) FailedScript.Update(i); - FailedScript.Draw(i); - - int[] y = new int[] { 0, 176 }; - - /* - - this.ctEnd_ClearFailed.t進行(); - if (this.ctEnd_ClearFailed.n現在の値 <= 20 || TJAPlayer3.Tx.ClearFailed == null) - { - TJAPlayer3.Tx.End_ClearFailed[Math.Min(this.ctEnd_ClearFailed.n現在の値, TJAPlayer3.Tx.End_ClearFailed.Length - 1)]?.t2D描画(505, y[i] + 145); - } - else if (this.ctEnd_ClearFailed.n現在の値 >= 20 && this.ctEnd_ClearFailed.n現在の値 <= 67) - { - TJAPlayer3.Tx.ClearFailed?.t2D描画(502, y[i] + 192); - } - else if (this.ctEnd_ClearFailed.n現在の値 == 68) - { - TJAPlayer3.Tx.ClearFailed1?.t2D描画(502, y[i] + 192); - } - else if (this.ctEnd_ClearFailed.n現在の値 >= 69) - { - TJAPlayer3.Tx.ClearFailed2?.t2D描画(502, y[i] + 192); - } - */ - } - private void showEndEffect_Clear(int i) - { - if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) ClearScript.Update(i); - ClearScript.Draw(i); - - /* - int[] y = new int[] { 210, 386 }; - #region[ 文字 ] - //登場アニメは20フレーム。うち最初の5フレームは半透過状態。 - float[] f文字拡大率 = new float[] { 1.04f, 1.11f, 1.15f, 1.19f, 1.23f, 1.26f, 1.30f, 1.31f, 1.32f, 1.32f, 1.32f, 1.30f, 1.30f, 1.26f, 1.25f, 1.19f, 1.15f, 1.11f, 1.05f, 1.0f }; - int[] n透明度 = new int[] { 43, 85, 128, 170, 213, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }; - - if (TJAPlayer3.Tx.End_Clear_Text_ != null) - { - if (this.ct進行メイン.n現在の値 >= 17) - { - if (this.ct進行メイン.n現在の値 <= 36) - { - TJAPlayer3.Tx.End_Clear_Text_.vc拡大縮小倍率.Y = f文字拡大率[this.ct進行メイン.n現在の値 - 17]; - TJAPlayer3.Tx.End_Clear_Text_.Opacity = n透明度[this.ct進行メイン.n現在の値 - 17]; - TJAPlayer3.Tx.End_Clear_Text_.t2D描画(634, (int)(y[i] - ((90 * f文字拡大率[this.ct進行メイン.n現在の値 - 17]) - 90)), new Rectangle(0, 0, 90, 90)); - } - else - { - TJAPlayer3.Tx.End_Clear_Text_.vc拡大縮小倍率.Y = 1.0f; - TJAPlayer3.Tx.End_Clear_Text_.t2D描画(634, y[i], new Rectangle(0, 0, 90, 90)); - } - } - if (this.ct進行メイン.n現在の値 >= 19) - { - if (this.ct進行メイン.n現在の値 <= 38) - { - TJAPlayer3.Tx.End_Clear_Text_.vc拡大縮小倍率.Y = f文字拡大率[this.ct進行メイン.n現在の値 - 19]; - TJAPlayer3.Tx.End_Clear_Text_.Opacity = n透明度[this.ct進行メイン.n現在の値 - 19]; - TJAPlayer3.Tx.End_Clear_Text_.t2D描画(692, (int)(y[i] - ((90 * f文字拡大率[this.ct進行メイン.n現在の値 - 19]) - 90)), new Rectangle(90, 0, 90, 90)); - } - else - { - TJAPlayer3.Tx.End_Clear_Text_.vc拡大縮小倍率.Y = 1.0f; - TJAPlayer3.Tx.End_Clear_Text_.t2D描画(692, y[i], new Rectangle(90, 0, 90, 90)); - } - } - TJAPlayer3.Tx.End_Clear_Text_.vc拡大縮小倍率.Y = 1.0f; - if (this.ct進行メイン.n現在の値 >= 21) - { - if (this.ct進行メイン.n現在の値 <= 40) - { - TJAPlayer3.Tx.End_Clear_Text_.vc拡大縮小倍率.Y = f文字拡大率[this.ct進行メイン.n現在の値 - 21]; - TJAPlayer3.Tx.End_Clear_Text_.Opacity = n透明度[this.ct進行メイン.n現在の値 - 21]; - TJAPlayer3.Tx.End_Clear_Text_.t2D描画(750, y[i] - (int)((90 * f文字拡大率[this.ct進行メイン.n現在の値 - 21]) - 90), new Rectangle(180, 0, 90, 90)); - } - else - { - TJAPlayer3.Tx.End_Clear_Text_.vc拡大縮小倍率.Y = 1.0f; - TJAPlayer3.Tx.End_Clear_Text_.t2D描画(750, y[i], new Rectangle(180, 0, 90, 90)); - } - } - if (this.ct進行メイン.n現在の値 >= 23) - { - if (this.ct進行メイン.n現在の値 <= 42) - { - TJAPlayer3.Tx.End_Clear_Text_.vc拡大縮小倍率.Y = f文字拡大率[this.ct進行メイン.n現在の値 - 23]; - TJAPlayer3.Tx.End_Clear_Text_.Opacity = n透明度[this.ct進行メイン.n現在の値 - 23]; - TJAPlayer3.Tx.End_Clear_Text_.t2D描画(819, y[i] - (int)((90 * f文字拡大率[this.ct進行メイン.n現在の値 - 23]) - 90), new Rectangle(270, 0, 90, 90)); - } - else - { - TJAPlayer3.Tx.End_Clear_Text_.vc拡大縮小倍率.Y = 1.0f; - TJAPlayer3.Tx.End_Clear_Text_.t2D描画(819, y[i], new Rectangle(270, 0, 90, 90)); - } - } - if (this.ct進行メイン.n現在の値 >= 25) - { - if (this.ct進行メイン.n現在の値 <= 44) - { - TJAPlayer3.Tx.End_Clear_Text_.vc拡大縮小倍率.Y = f文字拡大率[this.ct進行メイン.n現在の値 - 25]; - TJAPlayer3.Tx.End_Clear_Text_.Opacity = n透明度[this.ct進行メイン.n現在の値 - 25]; - TJAPlayer3.Tx.End_Clear_Text_.t2D描画(890, (y[i] + 2) - (int)((90 * f文字拡大率[this.ct進行メイン.n現在の値 - 25]) - 90), new Rectangle(360, 0, 90, 90)); - } - else - { - TJAPlayer3.Tx.End_Clear_Text_.vc拡大縮小倍率.Y = 1.0f; - TJAPlayer3.Tx.End_Clear_Text_.t2D描画(890, y[i] + 2, new Rectangle(360, 0, 90, 90)); - } - } - if (this.ct進行メイン.n現在の値 >= 50 && this.ct進行メイン.n現在の値 < 90) - { - if (TJAPlayer3.Tx.End_Clear_Text_Effect != null) - { - if (this.ct進行メイン.n現在の値 < 70) - { - TJAPlayer3.Tx.End_Clear_Text_Effect.Opacity = (this.ct進行メイン.n現在の値 - 50) * (255 / 20); - TJAPlayer3.Tx.End_Clear_Text_Effect.t2D描画(634, y[i] - 2); - } - else - { - TJAPlayer3.Tx.End_Clear_Text_Effect.Opacity = 255 - ((this.ct進行メイン.n現在の値 - 70) * (255 / 20)); - TJAPlayer3.Tx.End_Clear_Text_Effect.t2D描画(634, y[i] - 2); - } - } - - } - } - - - - #endregion - - #region[ バチお ] - - if (this.ct進行メイン.n現在の値 <= 11) - { - if (TJAPlayer3.Tx.End_Clear_L[1] != null) - { - TJAPlayer3.Tx.End_Clear_L[1].t2D描画(697, y[i] - 30); - TJAPlayer3.Tx.End_Clear_L[1].Opacity = (int)(11.0 / this.ct進行メイン.n現在の値) * 255; - } - if (TJAPlayer3.Tx.End_Clear_R[1] != null) - { - TJAPlayer3.Tx.End_Clear_R[1].t2D描画(738, y[i] - 30); - TJAPlayer3.Tx.End_Clear_R[1].Opacity = (int)(11.0 / this.ct進行メイン.n現在の値) * 255; - } - } - else if (this.ct進行メイン.n現在の値 <= 35) - { - if (TJAPlayer3.Tx.End_Clear_L[0] != null) - TJAPlayer3.Tx.End_Clear_L[0].t2D描画(697 - (int)((this.ct進行メイン.n現在の値 - 12) * 10), y[i] - 30); - if (TJAPlayer3.Tx.End_Clear_R[0] != null) - TJAPlayer3.Tx.End_Clear_R[0].t2D描画(738 + (int)((this.ct進行メイン.n現在の値 - 12) * 10), y[i] - 30); - } - else if (this.ct進行メイン.n現在の値 <= 46) - { - if (TJAPlayer3.Tx.End_Clear_L[0] != null) - { - //2016.07.16 kairera0467 またも原始的... - float[] fRet = new float[] { 1.0f, 0.99f, 0.98f, 0.97f, 0.96f, 0.95f, 0.96f, 0.97f, 0.98f, 0.99f, 1.0f }; - TJAPlayer3.Tx.End_Clear_L[0].t2D描画(466, y[i] - 30); - TJAPlayer3.Tx.End_Clear_L[0].vc拡大縮小倍率 = new Vector3(fRet[this.ct進行メイン.n現在の値 - 36], 1.0f, 1.0f); - //CDTXMania.Tx.End_Clear_R[ 0 ].t2D描画( CDTXMania.app.Device, 956 + (( this.ct進行メイン.n現在の値 - 36 ) / 2), 180 ); - TJAPlayer3.Tx.End_Clear_R[0].t2D描画(1136 - 180 * fRet[this.ct進行メイン.n現在の値 - 36], y[i] - 30); - TJAPlayer3.Tx.End_Clear_R[0].vc拡大縮小倍率 = new Vector3(fRet[this.ct進行メイン.n現在の値 - 36], 1.0f, 1.0f); - } - } - else if (this.ct進行メイン.n現在の値 <= 49) - { - if (TJAPlayer3.Tx.End_Clear_L[1] != null) - TJAPlayer3.Tx.End_Clear_L[1].t2D描画(466, y[i] - 30); - if (TJAPlayer3.Tx.End_Clear_R[1] != null) - TJAPlayer3.Tx.End_Clear_R[1].t2D描画(956, y[i] - 30); - } - else if (this.ct進行メイン.n現在の値 <= 54) - { - if (TJAPlayer3.Tx.End_Clear_L[2] != null) - TJAPlayer3.Tx.End_Clear_L[2].t2D描画(466, y[i] - 30); - if (TJAPlayer3.Tx.End_Clear_R[2] != null) - TJAPlayer3.Tx.End_Clear_R[2].t2D描画(956, y[i] - 30); - } - else if (this.ct進行メイン.n現在の値 <= 58) - { - if (TJAPlayer3.Tx.End_Clear_L[3] != null) - TJAPlayer3.Tx.End_Clear_L[3].t2D描画(466, y[i] - 30); - if (TJAPlayer3.Tx.End_Clear_R[3] != null) - TJAPlayer3.Tx.End_Clear_R[3].t2D描画(956, y[i] - 30); - } - else - { - if (TJAPlayer3.Tx.End_Clear_L[4] != null) - TJAPlayer3.Tx.End_Clear_L[4].t2D描画(466, y[i] - 30); - if (TJAPlayer3.Tx.End_Clear_R[4] != null) - TJAPlayer3.Tx.End_Clear_R[4].t2D描画(956, y[i] - 30); - } - - #endregion - - */ - } - - private void showEndEffect_FullCombo(int i) - { - if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) FullComboScript.Update(i); - FullComboScript.Draw(i); - - /* - int[] y = new int[] { 0, 176 }; - - this.ctEnd_FullCombo.t進行(); - TJAPlayer3.Tx.End_FullCombo[this.ctEnd_FullCombo.n現在の値]?.t2D描画(330, y[i] + 50); - - if (this.ctEnd_FullCombo.b終了値に達した && TJAPlayer3.Tx.End_FullComboLoop[0] != null) - { - this.ctEnd_FullComboLoop.t進行Loop(); - TJAPlayer3.Tx.End_FullComboLoop[this.ctEnd_FullComboLoop.n現在の値]?.t2D描画(330, y[i] + 196); - } - */ - } - - private void showEndEffect_DondaFullCombo(int i) - { - if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) DondaFullComboScript.Update(i); - DondaFullComboScript.Draw(i); - - /* - int[] y = new int[] { 0, 176 }; - - this.ctEnd_DondaFullCombo.t進行(); - if (this.ctEnd_DondaFullCombo.n現在の値 >= 34) TJAPlayer3.Tx.End_DondaFullComboBg?.t2D描画(332, y[i] + 192); - TJAPlayer3.Tx.End_DondaFullCombo[this.ctEnd_DondaFullCombo.n現在の値]?.t2D描画(330, y[i] + 50); - - /* - if (this.ctEnd_DondaFullCombo.b終了値に達した) - { - this.ctEnd_DondaFullComboLoop.t進行Loop(); - TJAPlayer3.Tx.End_DondaFullComboLoop[this.ctEnd_DondaFullComboLoop.n現在の値].t2D描画(330, 196); - } - */ - } - // ------------------------------------ - #endregion - - public override int Draw() - { - if (base.IsFirstDraw) - { - base.IsFirstDraw = false; - } - if (this.ct進行メイン != null && (TJAPlayer3.stage演奏ドラム画面.ePhaseID == CStage.EPhase.Game_EndStage || TJAPlayer3.stage演奏ドラム画面.ePhaseID == CStage.EPhase.Game_STAGE_FAILED || TJAPlayer3.stage演奏ドラム画面.ePhaseID == CStage.EPhase.Game_STAGE_CLEAR_FadeOut)) - { - this.ct進行メイン.Tick(); - - //CDTXMania.act文字コンソール.tPrint( 0, 0, C文字コンソール.Eフォント種別.灰, this.ct進行メイン.n現在の値.ToString() ); - //仮置き - - if (!bSongsPlayed) - { - for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) - { - if (i == 1 && TJAPlayer3.ConfigIni.bAIBattleMode) break; - - switch (this.Mode[i]) - { - case EndMode.StageFailed: - FailedScript.PlayEndAnime(i); - this.soundFailed[i]?.PlayStart(); - TJAPlayer3.Skin.voiceClearFailed[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); - break; - case EndMode.StageCleared: - ClearScript.PlayEndAnime(i); - this.soundClear[i]?.PlayStart(); - TJAPlayer3.Skin.voiceClearClear[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); - break; - case EndMode.StageFullCombo: - FullComboScript.PlayEndAnime(i); - this.soundFullCombo[i]?.PlayStart(); - TJAPlayer3.Skin.voiceClearFullCombo[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); - break; - case EndMode.StageDondaFullCombo: - DondaFullComboScript.PlayEndAnime(i); - this.soundDondaFullCombo[i]?.PlayStart(); - TJAPlayer3.Skin.voiceClearAllPerfect[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); - break; - - case EndMode.AI_Lose: - AILoseScript.PlayEndAnime(i); - this.soundAILose?.PlayStart(); - TJAPlayer3.Skin.voiceAILose[TJAPlayer3.GetActualPlayer(1)]?.tPlay(); - break; - case EndMode.AI_Win: - AIWinScript.PlayEndAnime(i); - this.soundAIWin?.PlayStart(); - TJAPlayer3.Skin.voiceAIWin[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); - break; - case EndMode.AI_Win_FullCombo: - AIWin_FullComboScript.PlayEndAnime(i); - this.soundAIWinFullCombo?.PlayStart(); - TJAPlayer3.Skin.voiceAIWin[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); - break; - case EndMode.AI_Win_Perfect: - AIWin_PerfectScript.PlayEndAnime(i); - this.soundAIWinDondaFullCombo?.PlayStart(); - TJAPlayer3.Skin.voiceAIWin[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); - break; - - case EndMode.Tower_Dropout: - Tower_DropoutScript.PlayEndAnime(i); - this.soundTowerDropout?.PlayStart(); - TJAPlayer3.Skin.voiceClearFailed[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); - break; - case EndMode.Tower_TopReached_Pass: - Tower_TopReached_PassScript.PlayEndAnime(i); - this.soundTowerTopPass?.PlayStart(); - TJAPlayer3.Skin.voiceClearClear[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); - break; - case EndMode.Tower_TopReached_FullCombo: - Tower_TopReached_FullComboScript.PlayEndAnime(i); - this.soundTowerTopFC?.PlayStart(); - TJAPlayer3.Skin.voiceClearFullCombo[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); - break; - case EndMode.Tower_TopReached_Perfect: - Tower_TopReached_PerfectScript.PlayEndAnime(i); - this.soundTowerTopPerfect?.PlayStart(); - TJAPlayer3.Skin.voiceClearAllPerfect[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); - break; - - case EndMode.Dan_Fail: - Dan_FailScript.PlayEndAnime(i); - this.soundDanFailed?.PlayStart(); - TJAPlayer3.Skin.voiceClearFailed[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); - break; - case EndMode.Dan_Red_Pass: - Dan_Red_PassScript.PlayEndAnime(i); - this.soundDanRedClear?.PlayStart(); - TJAPlayer3.Skin.voiceClearClear[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); - break; - case EndMode.Dan_Red_FullCombo: - Dan_Red_FullComboScript.PlayEndAnime(i); - this.soundDanRedFC?.PlayStart(); - TJAPlayer3.Skin.voiceClearFullCombo[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); - break; - case EndMode.Dan_Red_Perfect: - Dan_Red_PerfectScript.PlayEndAnime(i); - this.soundDanRedPerfect?.PlayStart(); - TJAPlayer3.Skin.voiceClearAllPerfect[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); - break; - case EndMode.Dan_Gold_Pass: - Dan_Gold_PassScript.PlayEndAnime(i); - this.soundDanGoldClear?.PlayStart(); - TJAPlayer3.Skin.voiceClearClear[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); - break; - case EndMode.Dan_Gold_FullCombo: - Dan_Gold_FullComboScript.PlayEndAnime(i); - this.soundDanGoldFC?.PlayStart(); - TJAPlayer3.Skin.voiceClearFullCombo[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); - break; - case EndMode.Dan_Gold_Perfect: - Dan_Gold_PerfectScript.PlayEndAnime(i); - this.soundDanGoldPerfect?.PlayStart(); - TJAPlayer3.Skin.voiceClearAllPerfect[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); - break; - - default: - break; - } - } - - bSongsPlayed = true; - } - - - for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) - { - if (i == 1 && TJAPlayer3.ConfigIni.bAIBattleMode) break; - - switch (this.Mode[i]) - { - case EndMode.StageFailed: - this.showEndEffect_Failed(i); - break; - case EndMode.StageCleared: - this.showEndEffect_Clear(i); - break; - case EndMode.StageFullCombo: - this.showEndEffect_FullCombo(i); - break; - case EndMode.StageDondaFullCombo: - this.showEndEffect_DondaFullCombo(i); - break; - - case EndMode.AI_Win: - if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) AIWinScript.Update(i); - AIWinScript.Draw(i); - break; - case EndMode.AI_Lose: - if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) AILoseScript.Update(i); - AILoseScript.Draw(i); - break; - case EndMode.AI_Win_FullCombo: - if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) AIWin_FullComboScript.Update(i); - AIWin_FullComboScript.Draw(i); - break; - case EndMode.AI_Win_Perfect: - if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) AIWin_PerfectScript.Update(i); - AIWin_PerfectScript.Draw(i); - break; - - case EndMode.Tower_Dropout: - if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) Tower_DropoutScript.Update(i); - Tower_DropoutScript.Draw(i); - break; - case EndMode.Tower_TopReached_Pass: - if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) Tower_TopReached_PassScript.Update(i); - Tower_TopReached_PassScript.Draw(i); - break; - case EndMode.Tower_TopReached_FullCombo: - if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) Tower_TopReached_FullComboScript.Update(i); - Tower_TopReached_FullComboScript.Draw(i); - break; - case EndMode.Tower_TopReached_Perfect: - if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) Tower_TopReached_PerfectScript.Update(i); - Tower_TopReached_PerfectScript.Draw(i); - break; - - case EndMode.Dan_Fail: - if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) Dan_FailScript.Update(i); - Dan_FailScript.Draw(i); - break; - case EndMode.Dan_Red_Pass: - if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) Dan_Red_PassScript.Update(i); - Dan_Red_PassScript.Draw(i); - break; - case EndMode.Dan_Red_FullCombo: - if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) Dan_Red_FullComboScript.Update(i); - Dan_Red_FullComboScript.Draw(i); - break; - case EndMode.Dan_Red_Perfect: - if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) Dan_Red_PerfectScript.Update(i); - Dan_Red_PerfectScript.Draw(i); - break; - case EndMode.Dan_Gold_Pass: - if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) Dan_Gold_PassScript.Update(i); - Dan_Gold_PassScript.Draw(i); - break; - case EndMode.Dan_Gold_FullCombo: - if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) Dan_Gold_FullComboScript.Update(i); - Dan_Gold_FullComboScript.Draw(i); - break; - case EndMode.Dan_Gold_Perfect: - if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) Dan_Gold_PerfectScript.Update(i); - Dan_Gold_PerfectScript.Draw(i); - break; - default: - break; - } - - } - - - - if (this.ct進行メイン.IsEnded) - { - return 1; - } - } - - return 0; - } - - #region[ private ] - //----------------- - - private EndAnimeScript FailedScript; - private EndAnimeScript ClearScript; - private EndAnimeScript FullComboScript; - private EndAnimeScript DondaFullComboScript; - - private EndAnimeScript AILoseScript; - private EndAnimeScript AIWinScript; - private EndAnimeScript AIWin_FullComboScript; - private EndAnimeScript AIWin_PerfectScript; - - private EndAnimeScript Tower_DropoutScript; - private EndAnimeScript Tower_TopReached_PassScript; - private EndAnimeScript Tower_TopReached_FullComboScript; - private EndAnimeScript Tower_TopReached_PerfectScript; - - private EndAnimeScript Dan_FailScript; - private EndAnimeScript Dan_Red_PassScript; - private EndAnimeScript Dan_Red_FullComboScript; - private EndAnimeScript Dan_Red_PerfectScript; - - private EndAnimeScript Dan_Gold_PassScript; - private EndAnimeScript Dan_Gold_FullComboScript; - private EndAnimeScript Dan_Gold_PerfectScript; - - - - bool b再生済み; - bool bリザルトボイス再生済み; - bool bSongsPlayed = false; - CCounter ct進行メイン; - - /* - CCounter ctEnd_ClearFailed; - CCounter ctEnd_FullCombo; - CCounter ctEnd_FullComboLoop; - CCounter ctEnd_DondaFullCombo; - CCounter ctEnd_DondaFullComboLoop; - */ - - CCounter ct進行Loop; - CSound[] soundClear = new CSound[5]; - CSound[] soundFailed = new CSound[5]; - CSound[] soundFullCombo = new CSound[5]; - CSound[] soundDondaFullCombo = new CSound[5]; - - CSound soundDanFailed; - CSound soundDanRedClear; - CSound soundDanRedFC; - CSound soundDanRedPerfect; - CSound soundDanGoldClear; - CSound soundDanGoldFC; - CSound soundDanGoldPerfect; - CSound soundTowerDropout; - CSound soundTowerTopPass; - CSound soundTowerTopFC; - CSound soundTowerTopPerfect; - - CSound soundAILose; - CSound soundAIWin; - CSound soundAIWinFullCombo; - CSound soundAIWinDondaFullCombo; - - EndMode[] Mode; - enum EndMode - { - StageFailed, - StageCleared, - StageFullCombo, - StageDondaFullCombo, - - AI_Lose, - AI_Win, - AI_Win_FullCombo, - AI_Win_Perfect, - - Tower_Dropout, - Tower_TopReached_Pass, - Tower_TopReached_FullCombo, - Tower_TopReached_Perfect, - - Dan_Fail, - Dan_Red_Pass, - Dan_Red_FullCombo, - Dan_Red_Perfect, - Dan_Gold_Pass, - Dan_Gold_FullCombo, - Dan_Gold_Perfect - } - - //----------------- - #endregion - } -} +using System; +using System.Collections.Generic; +using System.Text; +using System.Runtime.InteropServices; +using System.Drawing; +using FDK; + +using Rectangle = System.Drawing.Rectangle; +using Point = System.Drawing.Point; +using Color = System.Drawing.Color; + +namespace TJAPlayer3 +{ + internal class CActImplClearAnimation : CActivity + { + /// + /// 課題 + /// _クリア失敗 →素材不足(確保はできる。切り出しと加工をしてないだけ。) + /// _ + /// + public CActImplClearAnimation() + { + base.IsDeActivated = true; + } + + public void Start() + { + // this.ct進行メイン = new CCounter(0, 500, 1000 / 60, TJAPlayer3.Timer); + + bSongsPlayed = false; + + this.ct進行メイン = new CCounter(0, 300, 22, TJAPlayer3.Timer); + + /* + this.ctEnd_ClearFailed = new CCounter(0, 69, 30, TJAPlayer3.Timer); + this.ctEnd_FullCombo = new CCounter(0, 66, 33, TJAPlayer3.Timer); + this.ctEnd_FullComboLoop = new CCounter(0, 2, 30, TJAPlayer3.Timer); + this.ctEnd_DondaFullCombo = new CCounter(0, 61, 33, TJAPlayer3.Timer); + this.ctEnd_DondaFullComboLoop = new CCounter(0, 2, 30, TJAPlayer3.Timer); + */ + + // モードの決定。クリア失敗・フルコンボも事前に作っとく。 + if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Tower) + { + if (CFloorManagement.CurrentNumberOfLives > 0) + { + if (TJAPlayer3.stage演奏ドラム画面.CChartScore[0].nMiss == 0 && TJAPlayer3.stage演奏ドラム画面.CChartScore[0].nMine == 0) + { + if (TJAPlayer3.stage演奏ドラム画面.CChartScore[0].nGood == 0) + this.Mode[0] = EndMode.Tower_TopReached_Perfect; + else + this.Mode[0] = EndMode.Tower_TopReached_FullCombo; + } + else + this.Mode[0] = EndMode.Tower_TopReached_Pass; + } + else + this.Mode[0] = EndMode.Tower_Dropout; + } + else if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Dan) + { + // 段位認定モード。 + if (!TJAPlayer3.stage演奏ドラム画面.actDan.GetFailedAllChallenges()) + { + // 段位認定モード、クリア成功 + // this.Mode[0] = EndMode.StageCleared; + + bool bgold = TJAPlayer3.stage演奏ドラム画面.actDan.GetExamStatus(TJAPlayer3.stage結果.st演奏記録.Drums.Dan_C) == Exam.Status.Better_Success; + + if (TJAPlayer3.stage演奏ドラム画面.CChartScore[0].nMiss == 0 && TJAPlayer3.stage演奏ドラム画面.CChartScore[0].nMine == 0) + { + if (TJAPlayer3.stage演奏ドラム画面.CChartScore[0].nGood == 0) + this.Mode[0] = bgold ? EndMode.Dan_Gold_Perfect : EndMode.Dan_Red_Perfect; + else + this.Mode[0] = bgold ? EndMode.Dan_Gold_FullCombo : EndMode.Dan_Red_FullCombo; + } + else + this.Mode[0] = bgold ? EndMode.Dan_Gold_Pass : EndMode.Dan_Red_Pass; + + + } + else + { + // 段位認定モード、クリア失敗 + this.Mode[0] = EndMode.Dan_Fail; + } + } + else if (TJAPlayer3.ConfigIni.bAIBattleMode) + { + if (TJAPlayer3.stage演奏ドラム画面.bIsAIBattleWin) + { + if (TJAPlayer3.stage演奏ドラム画面.CChartScore[0].nMiss == 0 && TJAPlayer3.stage演奏ドラム画面.CChartScore[0].nMine == 0) + { + if (TJAPlayer3.stage演奏ドラム画面.CChartScore[0].nGood == 0) + this.Mode[0] = EndMode.AI_Win_Perfect; + else + this.Mode[0] = EndMode.AI_Win_FullCombo; + } + else + this.Mode[0] = EndMode.AI_Win; + } + else + { + this.Mode[0] = EndMode.AI_Lose; + } + } + else + { + // 通常のモード。 + // ここでフルコンボフラグをチェックするが現時点ではない。 + // 今の段階では魂ゲージ80%以上でチェック。 + for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) + { + if (HGaugeMethods.UNSAFE_FastNormaCheck(i)) + { + if (TJAPlayer3.stage演奏ドラム画面.CChartScore[i].nMiss == 0 && TJAPlayer3.stage演奏ドラム画面.CChartScore[i].nMine == 0) + //if (TJAPlayer3.stage演奏ドラム画面.nヒット数_Auto含まない.Drums.Miss == 0) + { + if (TJAPlayer3.stage演奏ドラム画面.CChartScore[i].nGood == 0) + //if (TJAPlayer3.stage演奏ドラム画面.nヒット数_Auto含まない.Drums.Great == 0) + { + this.Mode[i] = EndMode.StageDondaFullCombo; + } + else + { + this.Mode[i] = EndMode.StageFullCombo; + } + } + else + { + this.Mode[i] = EndMode.StageCleared; + } + } + else + { + this.Mode[i] = EndMode.StageFailed; + } + } + } + } + + public override void Activate() + { + this.bリザルトボイス再生済み = false; + this.Mode = new EndMode[5]; + + var origindir = CSkin.Path($"{TextureLoader.BASE}{TextureLoader.GAME}{TextureLoader.END}"); + + + if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Tower) + { + Tower_DropoutScript = new EndAnimeScript($@"{origindir}Tower_Dropout{Path.DirectorySeparatorChar}Script.lua"); + Tower_DropoutScript.Init(); + + Tower_TopReached_PassScript = new EndAnimeScript($@"{origindir}Tower_TopReached_Pass{Path.DirectorySeparatorChar}Script.lua"); + Tower_TopReached_PassScript.Init(); + + Tower_TopReached_FullComboScript = new EndAnimeScript($@"{origindir}Tower_TopReached_FullCombo{Path.DirectorySeparatorChar}Script.lua"); + Tower_TopReached_FullComboScript.Init(); + + Tower_TopReached_PerfectScript = new EndAnimeScript($@"{origindir}Tower_TopReached_Perfect{Path.DirectorySeparatorChar}Script.lua"); + Tower_TopReached_PerfectScript.Init(); + + this.soundTowerDropout = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Tower{Path.DirectorySeparatorChar}Tower_Dropout.ogg"), ESoundGroup.SoundEffect); + this.soundTowerTopPass = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Tower{Path.DirectorySeparatorChar}Tower_TopReached_Pass.ogg"), ESoundGroup.SoundEffect); + this.soundTowerTopFC = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Tower{Path.DirectorySeparatorChar}Tower_TopReached_FullCombo.ogg"), ESoundGroup.SoundEffect); + this.soundTowerTopPerfect = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Tower{Path.DirectorySeparatorChar}Tower_TopReached_Perfect.ogg"), ESoundGroup.SoundEffect); + } + else if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Dan) + { + Dan_FailScript = new EndAnimeScript($@"{origindir}Dan_Fail{Path.DirectorySeparatorChar}Script.lua"); + Dan_FailScript.Init(); + + Dan_Red_PassScript = new EndAnimeScript($@"{origindir}Dan_Red_Pass{Path.DirectorySeparatorChar}Script.lua"); + Dan_Red_PassScript.Init(); + + Dan_Red_FullComboScript = new EndAnimeScript($@"{origindir}Dan_Red_FullCombo{Path.DirectorySeparatorChar}Script.lua"); + Dan_Red_FullComboScript.Init(); + + Dan_Red_PerfectScript = new EndAnimeScript($@"{origindir}Dan_Red_Perfect{Path.DirectorySeparatorChar}Script.lua"); + Dan_Red_PerfectScript.Init(); + + Dan_Gold_PassScript = new EndAnimeScript($@"{origindir}Dan_Gold_Pass{Path.DirectorySeparatorChar}Script.lua"); + Dan_Gold_PassScript.Init(); + + Dan_Gold_FullComboScript = new EndAnimeScript($@"{origindir}Dan_Gold_FullCombo{Path.DirectorySeparatorChar}Script.lua"); + Dan_Gold_FullComboScript.Init(); + + Dan_Gold_PerfectScript = new EndAnimeScript($@"{origindir}Dan_Gold_Perfect{Path.DirectorySeparatorChar}Script.lua"); + Dan_Gold_PerfectScript.Init(); + + this.soundDanFailed = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Dan{Path.DirectorySeparatorChar}Dan_Fail.ogg"), ESoundGroup.SoundEffect); + this.soundDanRedClear = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Dan{Path.DirectorySeparatorChar}Dan_Red_Pass.ogg"), ESoundGroup.SoundEffect); + this.soundDanRedFC = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Dan{Path.DirectorySeparatorChar}Dan_Red_FullCombo.ogg"), ESoundGroup.SoundEffect); + this.soundDanRedPerfect = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Dan{Path.DirectorySeparatorChar}Dan_Red_Perfect.ogg"), ESoundGroup.SoundEffect); + this.soundDanGoldClear = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Dan{Path.DirectorySeparatorChar}Dan_Gold_Pass.ogg"), ESoundGroup.SoundEffect); + this.soundDanGoldFC = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Dan{Path.DirectorySeparatorChar}Dan_Gold_FullCombo.ogg"), ESoundGroup.SoundEffect); + this.soundDanGoldPerfect = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Dan{Path.DirectorySeparatorChar}Dan_Gold_Perfect.ogg"), ESoundGroup.SoundEffect); + + } + else if (TJAPlayer3.ConfigIni.bAIBattleMode) + { + AILoseScript = new EndAnimeScript($@"{origindir}AI_Lose{Path.DirectorySeparatorChar}Script.lua"); + AILoseScript.Init(); + + AIWinScript = new EndAnimeScript($@"{origindir}AI_Win{Path.DirectorySeparatorChar}Script.lua"); + AIWinScript.Init(); + + AIWin_FullComboScript = new EndAnimeScript($@"{origindir}AI_Win_FullCombo{Path.DirectorySeparatorChar}Script.lua"); + AIWin_FullComboScript.Init(); + + AIWin_PerfectScript = new EndAnimeScript($@"{origindir}AI_Win_Perfect{Path.DirectorySeparatorChar}Script.lua"); + AIWin_PerfectScript.Init(); + + this.soundAILose = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}AIBattle_Lose.ogg"), ESoundGroup.SoundEffect); + this.soundAIWin = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}AIBattle_Win.ogg"), ESoundGroup.SoundEffect); + this.soundAIWinFullCombo = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}AIBattle_Win_FullCombo.ogg"), ESoundGroup.SoundEffect); + this.soundAIWinDondaFullCombo = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}AIBattle_Win_AllPerfect.ogg"), ESoundGroup.SoundEffect); + } + else + { + FailedScript = new EndAnimeScript($@"{origindir}ClearFailed{Path.DirectorySeparatorChar}Script.lua");//ClearFailed + FailedScript.Init(); + + ClearScript = new EndAnimeScript($@"{origindir}Clear{Path.DirectorySeparatorChar}Script.lua"); + ClearScript.Init(); + + FullComboScript = new EndAnimeScript($@"{origindir}FullCombo{Path.DirectorySeparatorChar}Script.lua"); + FullComboScript.Init(); + + DondaFullComboScript = new EndAnimeScript($@"{origindir}DondaFullCombo{Path.DirectorySeparatorChar}Script.lua"); + DondaFullComboScript.Init(); + } + + + base.Activate(); + } + + public override void DeActivate() + { + this.ct進行メイン = null; + + if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Tower) + { + Tower_DropoutScript.Dispose(); + Tower_TopReached_PassScript.Dispose(); + Tower_TopReached_FullComboScript.Dispose(); + Tower_TopReached_PerfectScript.Dispose(); + } + else if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Dan) + { + Dan_FailScript.Dispose(); + Dan_Red_PassScript.Dispose(); + Dan_Red_FullComboScript.Dispose(); + Dan_Red_PerfectScript.Dispose(); + Dan_Gold_PassScript.Dispose(); + Dan_Gold_FullComboScript.Dispose(); + Dan_Gold_PerfectScript.Dispose(); + } + else if (TJAPlayer3.ConfigIni.bAIBattleMode) + { + AILoseScript.Dispose(); + AIWinScript.Dispose(); + AIWin_FullComboScript.Dispose(); + AIWin_PerfectScript.Dispose(); + } + else + { + FailedScript.Dispose(); + ClearScript.Dispose(); + FullComboScript.Dispose(); + DondaFullComboScript.Dispose(); + } + + base.DeActivate(); + } + + public override void CreateManagedResource() + { + this.b再生済み = false; + + this.soundTowerDropout = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Tower{Path.DirectorySeparatorChar}Tower_Dropout.ogg"), ESoundGroup.SoundEffect); + this.soundTowerTopPass = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Tower{Path.DirectorySeparatorChar}Tower_TopReached_Pass.ogg"), ESoundGroup.SoundEffect); + this.soundTowerTopFC = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Tower{Path.DirectorySeparatorChar}Tower_TopReached_FullCombo.ogg"), ESoundGroup.SoundEffect); + this.soundTowerTopPerfect = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Tower{Path.DirectorySeparatorChar}Tower_TopReached_Perfect.ogg"), ESoundGroup.SoundEffect); + + this.soundDanFailed = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Dan{Path.DirectorySeparatorChar}Dan_Fail.ogg"), ESoundGroup.SoundEffect); + this.soundDanRedClear = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Dan{Path.DirectorySeparatorChar}Dan_Red_Pass.ogg"), ESoundGroup.SoundEffect); + this.soundDanRedFC = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Dan{Path.DirectorySeparatorChar}Dan_Red_FullCombo.ogg"), ESoundGroup.SoundEffect); + this.soundDanRedPerfect = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Dan{Path.DirectorySeparatorChar}Dan_Red_Perfect.ogg"), ESoundGroup.SoundEffect); + this.soundDanGoldClear = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Dan{Path.DirectorySeparatorChar}Dan_Gold_Pass.ogg"), ESoundGroup.SoundEffect); + this.soundDanGoldFC = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Dan{Path.DirectorySeparatorChar}Dan_Gold_FullCombo.ogg"), ESoundGroup.SoundEffect); + this.soundDanGoldPerfect = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Dan{Path.DirectorySeparatorChar}Dan_Gold_Perfect.ogg"), ESoundGroup.SoundEffect); + + this.soundAILose = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}AIBattle_Lose.ogg"), ESoundGroup.SoundEffect); + this.soundAIWin = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}AIBattle_Win.ogg"), ESoundGroup.SoundEffect); + this.soundAIWinFullCombo = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}AIBattle_Win_FullCombo.ogg"), ESoundGroup.SoundEffect); + this.soundAIWinDondaFullCombo = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}AIBattle_Win_AllPerfect.ogg"), ESoundGroup.SoundEffect); + for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) + { + this.soundClear[i] = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Clear.ogg"), ESoundGroup.SoundEffect); + this.soundFailed[i] = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}Failed.ogg"), ESoundGroup.SoundEffect); + this.soundFullCombo[i] = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}FullCombo.ogg"), ESoundGroup.SoundEffect); + this.soundDondaFullCombo[i] = TJAPlayer3.SoundManager.tCreateSound(CSkin.Path(@$"Sounds{Path.DirectorySeparatorChar}AllPerfect.ogg"), ESoundGroup.SoundEffect); + } + + base.CreateManagedResource(); + } + + public override void ReleaseManagedResource() + { + this.soundTowerDropout?.tDispose(); + this.soundTowerTopPass?.tDispose(); + this.soundTowerTopFC?.tDispose(); + this.soundTowerTopPerfect?.tDispose(); + + this.soundDanFailed?.tDispose(); + this.soundDanRedClear?.tDispose(); + this.soundDanRedFC?.tDispose(); + this.soundDanRedPerfect?.tDispose(); + this.soundDanGoldClear?.tDispose(); + this.soundDanGoldFC?.tDispose(); + this.soundDanGoldPerfect?.tDispose(); + + this.soundAILose?.tDispose(); + this.soundAIWin?.tDispose(); + this.soundAIWinFullCombo?.tDispose(); + this.soundAIWinDondaFullCombo?.tDispose(); + + for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) + { + this.soundClear[i]?.tDispose(); + this.soundFailed[i]?.tDispose(); + this.soundFullCombo[i]?.tDispose(); + this.soundDondaFullCombo[i]?.tDispose(); + } + + base.ReleaseManagedResource(); + } + + #region [effects] + // ------------------------------------ + private void showEndEffect_Failed(int i) + { + if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) FailedScript.Update(i); + FailedScript.Draw(i); + + int[] y = new int[] { 0, 176 }; + + /* + + this.ctEnd_ClearFailed.t進行(); + if (this.ctEnd_ClearFailed.n現在の値 <= 20 || TJAPlayer3.Tx.ClearFailed == null) + { + TJAPlayer3.Tx.End_ClearFailed[Math.Min(this.ctEnd_ClearFailed.n現在の値, TJAPlayer3.Tx.End_ClearFailed.Length - 1)]?.t2D描画(505, y[i] + 145); + } + else if (this.ctEnd_ClearFailed.n現在の値 >= 20 && this.ctEnd_ClearFailed.n現在の値 <= 67) + { + TJAPlayer3.Tx.ClearFailed?.t2D描画(502, y[i] + 192); + } + else if (this.ctEnd_ClearFailed.n現在の値 == 68) + { + TJAPlayer3.Tx.ClearFailed1?.t2D描画(502, y[i] + 192); + } + else if (this.ctEnd_ClearFailed.n現在の値 >= 69) + { + TJAPlayer3.Tx.ClearFailed2?.t2D描画(502, y[i] + 192); + } + */ + } + private void showEndEffect_Clear(int i) + { + if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) ClearScript.Update(i); + ClearScript.Draw(i); + + /* + int[] y = new int[] { 210, 386 }; + #region[ 文字 ] + //登場アニメは20フレーム。うち最初の5フレームは半透過状態。 + float[] f文字拡大率 = new float[] { 1.04f, 1.11f, 1.15f, 1.19f, 1.23f, 1.26f, 1.30f, 1.31f, 1.32f, 1.32f, 1.32f, 1.30f, 1.30f, 1.26f, 1.25f, 1.19f, 1.15f, 1.11f, 1.05f, 1.0f }; + int[] n透明度 = new int[] { 43, 85, 128, 170, 213, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }; + + if (TJAPlayer3.Tx.End_Clear_Text_ != null) + { + if (this.ct進行メイン.n現在の値 >= 17) + { + if (this.ct進行メイン.n現在の値 <= 36) + { + TJAPlayer3.Tx.End_Clear_Text_.vc拡大縮小倍率.Y = f文字拡大率[this.ct進行メイン.n現在の値 - 17]; + TJAPlayer3.Tx.End_Clear_Text_.Opacity = n透明度[this.ct進行メイン.n現在の値 - 17]; + TJAPlayer3.Tx.End_Clear_Text_.t2D描画(634, (int)(y[i] - ((90 * f文字拡大率[this.ct進行メイン.n現在の値 - 17]) - 90)), new Rectangle(0, 0, 90, 90)); + } + else + { + TJAPlayer3.Tx.End_Clear_Text_.vc拡大縮小倍率.Y = 1.0f; + TJAPlayer3.Tx.End_Clear_Text_.t2D描画(634, y[i], new Rectangle(0, 0, 90, 90)); + } + } + if (this.ct進行メイン.n現在の値 >= 19) + { + if (this.ct進行メイン.n現在の値 <= 38) + { + TJAPlayer3.Tx.End_Clear_Text_.vc拡大縮小倍率.Y = f文字拡大率[this.ct進行メイン.n現在の値 - 19]; + TJAPlayer3.Tx.End_Clear_Text_.Opacity = n透明度[this.ct進行メイン.n現在の値 - 19]; + TJAPlayer3.Tx.End_Clear_Text_.t2D描画(692, (int)(y[i] - ((90 * f文字拡大率[this.ct進行メイン.n現在の値 - 19]) - 90)), new Rectangle(90, 0, 90, 90)); + } + else + { + TJAPlayer3.Tx.End_Clear_Text_.vc拡大縮小倍率.Y = 1.0f; + TJAPlayer3.Tx.End_Clear_Text_.t2D描画(692, y[i], new Rectangle(90, 0, 90, 90)); + } + } + TJAPlayer3.Tx.End_Clear_Text_.vc拡大縮小倍率.Y = 1.0f; + if (this.ct進行メイン.n現在の値 >= 21) + { + if (this.ct進行メイン.n現在の値 <= 40) + { + TJAPlayer3.Tx.End_Clear_Text_.vc拡大縮小倍率.Y = f文字拡大率[this.ct進行メイン.n現在の値 - 21]; + TJAPlayer3.Tx.End_Clear_Text_.Opacity = n透明度[this.ct進行メイン.n現在の値 - 21]; + TJAPlayer3.Tx.End_Clear_Text_.t2D描画(750, y[i] - (int)((90 * f文字拡大率[this.ct進行メイン.n現在の値 - 21]) - 90), new Rectangle(180, 0, 90, 90)); + } + else + { + TJAPlayer3.Tx.End_Clear_Text_.vc拡大縮小倍率.Y = 1.0f; + TJAPlayer3.Tx.End_Clear_Text_.t2D描画(750, y[i], new Rectangle(180, 0, 90, 90)); + } + } + if (this.ct進行メイン.n現在の値 >= 23) + { + if (this.ct進行メイン.n現在の値 <= 42) + { + TJAPlayer3.Tx.End_Clear_Text_.vc拡大縮小倍率.Y = f文字拡大率[this.ct進行メイン.n現在の値 - 23]; + TJAPlayer3.Tx.End_Clear_Text_.Opacity = n透明度[this.ct進行メイン.n現在の値 - 23]; + TJAPlayer3.Tx.End_Clear_Text_.t2D描画(819, y[i] - (int)((90 * f文字拡大率[this.ct進行メイン.n現在の値 - 23]) - 90), new Rectangle(270, 0, 90, 90)); + } + else + { + TJAPlayer3.Tx.End_Clear_Text_.vc拡大縮小倍率.Y = 1.0f; + TJAPlayer3.Tx.End_Clear_Text_.t2D描画(819, y[i], new Rectangle(270, 0, 90, 90)); + } + } + if (this.ct進行メイン.n現在の値 >= 25) + { + if (this.ct進行メイン.n現在の値 <= 44) + { + TJAPlayer3.Tx.End_Clear_Text_.vc拡大縮小倍率.Y = f文字拡大率[this.ct進行メイン.n現在の値 - 25]; + TJAPlayer3.Tx.End_Clear_Text_.Opacity = n透明度[this.ct進行メイン.n現在の値 - 25]; + TJAPlayer3.Tx.End_Clear_Text_.t2D描画(890, (y[i] + 2) - (int)((90 * f文字拡大率[this.ct進行メイン.n現在の値 - 25]) - 90), new Rectangle(360, 0, 90, 90)); + } + else + { + TJAPlayer3.Tx.End_Clear_Text_.vc拡大縮小倍率.Y = 1.0f; + TJAPlayer3.Tx.End_Clear_Text_.t2D描画(890, y[i] + 2, new Rectangle(360, 0, 90, 90)); + } + } + if (this.ct進行メイン.n現在の値 >= 50 && this.ct進行メイン.n現在の値 < 90) + { + if (TJAPlayer3.Tx.End_Clear_Text_Effect != null) + { + if (this.ct進行メイン.n現在の値 < 70) + { + TJAPlayer3.Tx.End_Clear_Text_Effect.Opacity = (this.ct進行メイン.n現在の値 - 50) * (255 / 20); + TJAPlayer3.Tx.End_Clear_Text_Effect.t2D描画(634, y[i] - 2); + } + else + { + TJAPlayer3.Tx.End_Clear_Text_Effect.Opacity = 255 - ((this.ct進行メイン.n現在の値 - 70) * (255 / 20)); + TJAPlayer3.Tx.End_Clear_Text_Effect.t2D描画(634, y[i] - 2); + } + } + + } + } + + + + #endregion + + #region[ バチお ] + + if (this.ct進行メイン.n現在の値 <= 11) + { + if (TJAPlayer3.Tx.End_Clear_L[1] != null) + { + TJAPlayer3.Tx.End_Clear_L[1].t2D描画(697, y[i] - 30); + TJAPlayer3.Tx.End_Clear_L[1].Opacity = (int)(11.0 / this.ct進行メイン.n現在の値) * 255; + } + if (TJAPlayer3.Tx.End_Clear_R[1] != null) + { + TJAPlayer3.Tx.End_Clear_R[1].t2D描画(738, y[i] - 30); + TJAPlayer3.Tx.End_Clear_R[1].Opacity = (int)(11.0 / this.ct進行メイン.n現在の値) * 255; + } + } + else if (this.ct進行メイン.n現在の値 <= 35) + { + if (TJAPlayer3.Tx.End_Clear_L[0] != null) + TJAPlayer3.Tx.End_Clear_L[0].t2D描画(697 - (int)((this.ct進行メイン.n現在の値 - 12) * 10), y[i] - 30); + if (TJAPlayer3.Tx.End_Clear_R[0] != null) + TJAPlayer3.Tx.End_Clear_R[0].t2D描画(738 + (int)((this.ct進行メイン.n現在の値 - 12) * 10), y[i] - 30); + } + else if (this.ct進行メイン.n現在の値 <= 46) + { + if (TJAPlayer3.Tx.End_Clear_L[0] != null) + { + //2016.07.16 kairera0467 またも原始的... + float[] fRet = new float[] { 1.0f, 0.99f, 0.98f, 0.97f, 0.96f, 0.95f, 0.96f, 0.97f, 0.98f, 0.99f, 1.0f }; + TJAPlayer3.Tx.End_Clear_L[0].t2D描画(466, y[i] - 30); + TJAPlayer3.Tx.End_Clear_L[0].vc拡大縮小倍率 = new Vector3(fRet[this.ct進行メイン.n現在の値 - 36], 1.0f, 1.0f); + //CDTXMania.Tx.End_Clear_R[ 0 ].t2D描画( CDTXMania.app.Device, 956 + (( this.ct進行メイン.n現在の値 - 36 ) / 2), 180 ); + TJAPlayer3.Tx.End_Clear_R[0].t2D描画(1136 - 180 * fRet[this.ct進行メイン.n現在の値 - 36], y[i] - 30); + TJAPlayer3.Tx.End_Clear_R[0].vc拡大縮小倍率 = new Vector3(fRet[this.ct進行メイン.n現在の値 - 36], 1.0f, 1.0f); + } + } + else if (this.ct進行メイン.n現在の値 <= 49) + { + if (TJAPlayer3.Tx.End_Clear_L[1] != null) + TJAPlayer3.Tx.End_Clear_L[1].t2D描画(466, y[i] - 30); + if (TJAPlayer3.Tx.End_Clear_R[1] != null) + TJAPlayer3.Tx.End_Clear_R[1].t2D描画(956, y[i] - 30); + } + else if (this.ct進行メイン.n現在の値 <= 54) + { + if (TJAPlayer3.Tx.End_Clear_L[2] != null) + TJAPlayer3.Tx.End_Clear_L[2].t2D描画(466, y[i] - 30); + if (TJAPlayer3.Tx.End_Clear_R[2] != null) + TJAPlayer3.Tx.End_Clear_R[2].t2D描画(956, y[i] - 30); + } + else if (this.ct進行メイン.n現在の値 <= 58) + { + if (TJAPlayer3.Tx.End_Clear_L[3] != null) + TJAPlayer3.Tx.End_Clear_L[3].t2D描画(466, y[i] - 30); + if (TJAPlayer3.Tx.End_Clear_R[3] != null) + TJAPlayer3.Tx.End_Clear_R[3].t2D描画(956, y[i] - 30); + } + else + { + if (TJAPlayer3.Tx.End_Clear_L[4] != null) + TJAPlayer3.Tx.End_Clear_L[4].t2D描画(466, y[i] - 30); + if (TJAPlayer3.Tx.End_Clear_R[4] != null) + TJAPlayer3.Tx.End_Clear_R[4].t2D描画(956, y[i] - 30); + } + + #endregion + + */ + } + + private void showEndEffect_FullCombo(int i) + { + if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) FullComboScript.Update(i); + FullComboScript.Draw(i); + + /* + int[] y = new int[] { 0, 176 }; + + this.ctEnd_FullCombo.t進行(); + TJAPlayer3.Tx.End_FullCombo[this.ctEnd_FullCombo.n現在の値]?.t2D描画(330, y[i] + 50); + + if (this.ctEnd_FullCombo.b終了値に達した && TJAPlayer3.Tx.End_FullComboLoop[0] != null) + { + this.ctEnd_FullComboLoop.t進行Loop(); + TJAPlayer3.Tx.End_FullComboLoop[this.ctEnd_FullComboLoop.n現在の値]?.t2D描画(330, y[i] + 196); + } + */ + } + + private void showEndEffect_DondaFullCombo(int i) + { + if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) DondaFullComboScript.Update(i); + DondaFullComboScript.Draw(i); + + /* + int[] y = new int[] { 0, 176 }; + + this.ctEnd_DondaFullCombo.t進行(); + if (this.ctEnd_DondaFullCombo.n現在の値 >= 34) TJAPlayer3.Tx.End_DondaFullComboBg?.t2D描画(332, y[i] + 192); + TJAPlayer3.Tx.End_DondaFullCombo[this.ctEnd_DondaFullCombo.n現在の値]?.t2D描画(330, y[i] + 50); + + /* + if (this.ctEnd_DondaFullCombo.b終了値に達した) + { + this.ctEnd_DondaFullComboLoop.t進行Loop(); + TJAPlayer3.Tx.End_DondaFullComboLoop[this.ctEnd_DondaFullComboLoop.n現在の値].t2D描画(330, 196); + } + */ + } + // ------------------------------------ + #endregion + + public override int Draw() + { + if (base.IsFirstDraw) + { + base.IsFirstDraw = false; + } + if (this.ct進行メイン != null && (TJAPlayer3.stage演奏ドラム画面.ePhaseID == CStage.EPhase.Game_EndStage || TJAPlayer3.stage演奏ドラム画面.ePhaseID == CStage.EPhase.Game_STAGE_FAILED || TJAPlayer3.stage演奏ドラム画面.ePhaseID == CStage.EPhase.Game_STAGE_CLEAR_FadeOut)) + { + this.ct進行メイン.Tick(); + + //CDTXMania.act文字コンソール.tPrint( 0, 0, C文字コンソール.Eフォント種別.灰, this.ct進行メイン.n現在の値.ToString() ); + //仮置き + + if (!bSongsPlayed) + { + for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) + { + if (i == 1 && TJAPlayer3.ConfigIni.bAIBattleMode) break; + + switch (this.Mode[i]) + { + case EndMode.StageFailed: + FailedScript.PlayEndAnime(i); + this.soundFailed[i]?.PlayStart(); + TJAPlayer3.Skin.voiceClearFailed[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); + break; + case EndMode.StageCleared: + ClearScript.PlayEndAnime(i); + this.soundClear[i]?.PlayStart(); + TJAPlayer3.Skin.voiceClearClear[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); + break; + case EndMode.StageFullCombo: + FullComboScript.PlayEndAnime(i); + this.soundFullCombo[i]?.PlayStart(); + TJAPlayer3.Skin.voiceClearFullCombo[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); + break; + case EndMode.StageDondaFullCombo: + DondaFullComboScript.PlayEndAnime(i); + this.soundDondaFullCombo[i]?.PlayStart(); + TJAPlayer3.Skin.voiceClearAllPerfect[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); + break; + + case EndMode.AI_Lose: + AILoseScript.PlayEndAnime(i); + this.soundAILose?.PlayStart(); + TJAPlayer3.Skin.voiceAILose[TJAPlayer3.GetActualPlayer(1)]?.tPlay(); + break; + case EndMode.AI_Win: + AIWinScript.PlayEndAnime(i); + this.soundAIWin?.PlayStart(); + TJAPlayer3.Skin.voiceAIWin[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); + break; + case EndMode.AI_Win_FullCombo: + AIWin_FullComboScript.PlayEndAnime(i); + this.soundAIWinFullCombo?.PlayStart(); + TJAPlayer3.Skin.voiceAIWin[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); + break; + case EndMode.AI_Win_Perfect: + AIWin_PerfectScript.PlayEndAnime(i); + this.soundAIWinDondaFullCombo?.PlayStart(); + TJAPlayer3.Skin.voiceAIWin[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); + break; + + case EndMode.Tower_Dropout: + Tower_DropoutScript.PlayEndAnime(i); + this.soundTowerDropout?.PlayStart(); + TJAPlayer3.Skin.voiceClearFailed[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); + break; + case EndMode.Tower_TopReached_Pass: + Tower_TopReached_PassScript.PlayEndAnime(i); + this.soundTowerTopPass?.PlayStart(); + TJAPlayer3.Skin.voiceClearClear[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); + break; + case EndMode.Tower_TopReached_FullCombo: + Tower_TopReached_FullComboScript.PlayEndAnime(i); + this.soundTowerTopFC?.PlayStart(); + TJAPlayer3.Skin.voiceClearFullCombo[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); + break; + case EndMode.Tower_TopReached_Perfect: + Tower_TopReached_PerfectScript.PlayEndAnime(i); + this.soundTowerTopPerfect?.PlayStart(); + TJAPlayer3.Skin.voiceClearAllPerfect[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); + break; + + case EndMode.Dan_Fail: + Dan_FailScript.PlayEndAnime(i); + this.soundDanFailed?.PlayStart(); + TJAPlayer3.Skin.voiceClearFailed[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); + break; + case EndMode.Dan_Red_Pass: + Dan_Red_PassScript.PlayEndAnime(i); + this.soundDanRedClear?.PlayStart(); + TJAPlayer3.Skin.voiceClearClear[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); + break; + case EndMode.Dan_Red_FullCombo: + Dan_Red_FullComboScript.PlayEndAnime(i); + this.soundDanRedFC?.PlayStart(); + TJAPlayer3.Skin.voiceClearFullCombo[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); + break; + case EndMode.Dan_Red_Perfect: + Dan_Red_PerfectScript.PlayEndAnime(i); + this.soundDanRedPerfect?.PlayStart(); + TJAPlayer3.Skin.voiceClearAllPerfect[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); + break; + case EndMode.Dan_Gold_Pass: + Dan_Gold_PassScript.PlayEndAnime(i); + this.soundDanGoldClear?.PlayStart(); + TJAPlayer3.Skin.voiceClearClear[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); + break; + case EndMode.Dan_Gold_FullCombo: + Dan_Gold_FullComboScript.PlayEndAnime(i); + this.soundDanGoldFC?.PlayStart(); + TJAPlayer3.Skin.voiceClearFullCombo[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); + break; + case EndMode.Dan_Gold_Perfect: + Dan_Gold_PerfectScript.PlayEndAnime(i); + this.soundDanGoldPerfect?.PlayStart(); + TJAPlayer3.Skin.voiceClearAllPerfect[TJAPlayer3.GetActualPlayer(i)]?.tPlay(); + break; + + default: + break; + } + } + + bSongsPlayed = true; + } + + + for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) + { + if (i == 1 && TJAPlayer3.ConfigIni.bAIBattleMode) break; + + switch (this.Mode[i]) + { + case EndMode.StageFailed: + this.showEndEffect_Failed(i); + break; + case EndMode.StageCleared: + this.showEndEffect_Clear(i); + break; + case EndMode.StageFullCombo: + this.showEndEffect_FullCombo(i); + break; + case EndMode.StageDondaFullCombo: + this.showEndEffect_DondaFullCombo(i); + break; + + case EndMode.AI_Win: + if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) AIWinScript.Update(i); + AIWinScript.Draw(i); + break; + case EndMode.AI_Lose: + if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) AILoseScript.Update(i); + AILoseScript.Draw(i); + break; + case EndMode.AI_Win_FullCombo: + if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) AIWin_FullComboScript.Update(i); + AIWin_FullComboScript.Draw(i); + break; + case EndMode.AI_Win_Perfect: + if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) AIWin_PerfectScript.Update(i); + AIWin_PerfectScript.Draw(i); + break; + + case EndMode.Tower_Dropout: + if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) Tower_DropoutScript.Update(i); + Tower_DropoutScript.Draw(i); + break; + case EndMode.Tower_TopReached_Pass: + if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) Tower_TopReached_PassScript.Update(i); + Tower_TopReached_PassScript.Draw(i); + break; + case EndMode.Tower_TopReached_FullCombo: + if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) Tower_TopReached_FullComboScript.Update(i); + Tower_TopReached_FullComboScript.Draw(i); + break; + case EndMode.Tower_TopReached_Perfect: + if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) Tower_TopReached_PerfectScript.Update(i); + Tower_TopReached_PerfectScript.Draw(i); + break; + + case EndMode.Dan_Fail: + if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) Dan_FailScript.Update(i); + Dan_FailScript.Draw(i); + break; + case EndMode.Dan_Red_Pass: + if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) Dan_Red_PassScript.Update(i); + Dan_Red_PassScript.Draw(i); + break; + case EndMode.Dan_Red_FullCombo: + if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) Dan_Red_FullComboScript.Update(i); + Dan_Red_FullComboScript.Draw(i); + break; + case EndMode.Dan_Red_Perfect: + if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) Dan_Red_PerfectScript.Update(i); + Dan_Red_PerfectScript.Draw(i); + break; + case EndMode.Dan_Gold_Pass: + if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) Dan_Gold_PassScript.Update(i); + Dan_Gold_PassScript.Draw(i); + break; + case EndMode.Dan_Gold_FullCombo: + if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) Dan_Gold_FullComboScript.Update(i); + Dan_Gold_FullComboScript.Draw(i); + break; + case EndMode.Dan_Gold_Perfect: + if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) Dan_Gold_PerfectScript.Update(i); + Dan_Gold_PerfectScript.Draw(i); + break; + default: + break; + } + + } + + + + if (this.ct進行メイン.IsEnded) + { + return 1; + } + } + + return 0; + } + + #region[ private ] + //----------------- + + private EndAnimeScript FailedScript; + private EndAnimeScript ClearScript; + private EndAnimeScript FullComboScript; + private EndAnimeScript DondaFullComboScript; + + private EndAnimeScript AILoseScript; + private EndAnimeScript AIWinScript; + private EndAnimeScript AIWin_FullComboScript; + private EndAnimeScript AIWin_PerfectScript; + + private EndAnimeScript Tower_DropoutScript; + private EndAnimeScript Tower_TopReached_PassScript; + private EndAnimeScript Tower_TopReached_FullComboScript; + private EndAnimeScript Tower_TopReached_PerfectScript; + + private EndAnimeScript Dan_FailScript; + private EndAnimeScript Dan_Red_PassScript; + private EndAnimeScript Dan_Red_FullComboScript; + private EndAnimeScript Dan_Red_PerfectScript; + + private EndAnimeScript Dan_Gold_PassScript; + private EndAnimeScript Dan_Gold_FullComboScript; + private EndAnimeScript Dan_Gold_PerfectScript; + + + + bool b再生済み; + bool bリザルトボイス再生済み; + bool bSongsPlayed = false; + CCounter ct進行メイン; + + /* + CCounter ctEnd_ClearFailed; + CCounter ctEnd_FullCombo; + CCounter ctEnd_FullComboLoop; + CCounter ctEnd_DondaFullCombo; + CCounter ctEnd_DondaFullComboLoop; + */ + + CCounter ct進行Loop; + CSound[] soundClear = new CSound[5]; + CSound[] soundFailed = new CSound[5]; + CSound[] soundFullCombo = new CSound[5]; + CSound[] soundDondaFullCombo = new CSound[5]; + + CSound soundDanFailed; + CSound soundDanRedClear; + CSound soundDanRedFC; + CSound soundDanRedPerfect; + CSound soundDanGoldClear; + CSound soundDanGoldFC; + CSound soundDanGoldPerfect; + CSound soundTowerDropout; + CSound soundTowerTopPass; + CSound soundTowerTopFC; + CSound soundTowerTopPerfect; + + CSound soundAILose; + CSound soundAIWin; + CSound soundAIWinFullCombo; + CSound soundAIWinDondaFullCombo; + + EndMode[] Mode; + enum EndMode + { + StageFailed, + StageCleared, + StageFullCombo, + StageDondaFullCombo, + + AI_Lose, + AI_Win, + AI_Win_FullCombo, + AI_Win_Perfect, + + Tower_Dropout, + Tower_TopReached_Pass, + Tower_TopReached_FullCombo, + Tower_TopReached_Perfect, + + Dan_Fail, + Dan_Red_Pass, + Dan_Red_FullCombo, + Dan_Red_Perfect, + Dan_Gold_Pass, + Dan_Gold_FullCombo, + Dan_Gold_Perfect + } + + //----------------- + #endregion + } +} diff --git a/OpenTaiko/src/Stages/07.Game/Taiko/CActImplCombo.cs b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplCombo.cs new file mode 100644 index 00000000..1596b141 --- /dev/null +++ b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplCombo.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace TJAPlayer3 +{ + internal class CActImplCombo : CAct演奏Combo共通 + { + // CAct演奏Combo共通 実装 + + protected override void tコンボ表示_太鼓(int nCombo値, int nジャンプインデックス, int nPlayer) + { + base.tコンボ表示_太鼓( nCombo値, nジャンプインデックス, nPlayer ); + } + } +} diff --git a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drumsコンボ吹き出し.cs b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplComboBalloon.cs similarity index 98% rename from OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drumsコンボ吹き出し.cs rename to OpenTaiko/src/Stages/07.Game/Taiko/CActImplComboBalloon.cs index b68d593f..c965a786 100644 --- a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drumsコンボ吹き出し.cs +++ b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplComboBalloon.cs @@ -7,7 +7,7 @@ using FDK; namespace TJAPlayer3 { - internal class CAct演奏Drumsコンボ吹き出し : CActivity + internal class CActImplComboBalloon : CActivity { // コンストラクタ @@ -15,7 +15,7 @@ namespace TJAPlayer3 /// 100コンボごとに出る吹き出し。 /// 本当は「10000点」のところも動かしたいけど、技術不足だし保留。 /// - public CAct演奏Drumsコンボ吹き出し() + public CActImplComboBalloon() { for (int i = 0; i < 10; i++) { diff --git a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏DrumsDancer.cs b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplDancer.cs similarity index 97% rename from OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏DrumsDancer.cs rename to OpenTaiko/src/Stages/07.Game/Taiko/CActImplDancer.cs index 2a36ddb5..94b2aab5 100644 --- a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏DrumsDancer.cs +++ b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplDancer.cs @@ -1,373 +1,373 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Drawing; -using System.Runtime.InteropServices; -using FDK; -using System.Diagnostics; - -namespace TJAPlayer3 -{ - internal class CAct演奏DrumsDancer : CActivity - { - /// - /// 踊り子 - /// - public CAct演奏DrumsDancer() - { - base.IsDeActivated = true; - } - - public override void Activate() - { - //this.ct踊り子モーション = new CCounter(); - - if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Tower || TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Dan) - return; - - var preset = HScenePreset.GetBGPreset(); - - Random random = new Random(); - - Dancer_In = new CTexture[5][]; - Dancer_Out = new CTexture[5][]; - Dancer = new CTexture[5][]; - DancerStates = new int[5]; - nNowDancerInCounter = new float[5]; - nNowDancerOutCounter = new float[5]; - - - - var dancerOrigindir = CSkin.Path($"{TextureLoader.BASE}{TextureLoader.GAME}{TextureLoader.DANCER}"); - if (System.IO.Directory.Exists($@"{dancerOrigindir}")) - { - var dirs = System.IO.Directory.GetDirectories($@"{dancerOrigindir}"); - if (dirs.Length > 0) - { - var _presetPath = (preset != null && preset.DancerSet != null) ? $@"{dancerOrigindir}" + preset.DancerSet[random.Next(0, preset.DancerSet.Length)] : ""; - var path = (preset != null && System.IO.Directory.Exists(_presetPath)) - ? _presetPath - : dirs[random.Next(0, dirs.Length)]; - - LoadDancerConifg(path); - - Dancer_In = new CTexture[nDancerCount][]; - Dancer_Out = new CTexture[nDancerCount][]; - Dancer = new CTexture[nDancerCount][]; - DancerStates = new int[nDancerCount]; - nNowDancerInCounter = new float[nDancerCount]; - nNowDancerOutCounter = new float[nDancerCount]; - - nDancerInPtn = TJAPlayer3.t連番画像の枚数を数える($@"{path}{Path.DirectorySeparatorChar}1_In{Path.DirectorySeparatorChar}"); - if (nDancerInPtn != 0) - { - for (int i = 0; i < nDancerCount; i++) - { - Dancer_In[i] = new CTexture[nDancerInPtn]; - for (int p = 0; p < nDancerInPtn; p++) - { - Dancer_In[i][p] = TJAPlayer3.tテクスチャの生成($@"{path}{Path.DirectorySeparatorChar}{(i + 1)}_In{Path.DirectorySeparatorChar}{p}.png"); - } - } - } - - nDancerOutPtn = TJAPlayer3.t連番画像の枚数を数える($@"{path}{Path.DirectorySeparatorChar}1_Out{Path.DirectorySeparatorChar}"); - if (nDancerOutPtn != 0) - { - for (int i = 0; i < nDancerCount; i++) - { - Dancer_Out[i] = new CTexture[nDancerOutPtn]; - for (int p = 0; p < nDancerOutPtn; p++) - { - Dancer_Out[i][p] = TJAPlayer3.tテクスチャの生成($@"{path}{Path.DirectorySeparatorChar}{(i + 1)}_Out{Path.DirectorySeparatorChar}{p}.png"); - } - } - } - - nDancerPtn = TJAPlayer3.t連番画像の枚数を数える($@"{path}{Path.DirectorySeparatorChar}1{Path.DirectorySeparatorChar}"); - if (nDancerPtn != 0) - { - for (int i = 0; i < nDancerCount; i++) - { - Dancer[i] = new CTexture[nDancerPtn]; - for (int p = 0; p < nDancerPtn; p++) - { - Dancer[i][p] = TJAPlayer3.tテクスチャの生成($@"{path}{Path.DirectorySeparatorChar}{(i + 1)}{Path.DirectorySeparatorChar}{p}.png"); - } - } - } - } - } - - arMotionArray_In = CConversion.StringToIntArray(Game_Dancer_In_Motion); - if(this.arMotionArray_In == null) arMotionArray_In = CConversion.StringToIntArray("0,0"); - - arMotionArray_Out = CConversion.StringToIntArray(Game_Dancer_Out_Motion); - if(this.arMotionArray_Out == null) arMotionArray_Out = CConversion.StringToIntArray("0,0"); - - this.ar踊り子モーション番号 = CConversion.StringToIntArray(TJAPlayer3.Skin.Game_Dancer_Motion); - if(this.ar踊り子モーション番号 == null) ar踊り子モーション番号 = CConversion.StringToIntArray("0,0"); - - nNowDancerCounter = 0; - nNowDancerFrame = 0; - - base.Activate(); - } - - public override void DeActivate() - { - if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Tower || TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Dan) - return; - - //this.ct踊り子モーション = null; - - for (int i = 0; i < nDancerCount; i++) - { - TJAPlayer3.t安全にDisposeする(ref Dancer_In[i]); - TJAPlayer3.t安全にDisposeする(ref Dancer_Out[i]); - TJAPlayer3.t安全にDisposeする(ref Dancer[i]); - } - - base.DeActivate(); - } - - public override void CreateManagedResource() - { - base.CreateManagedResource(); - } - - public override void ReleaseManagedResource() - { - base.ReleaseManagedResource(); - } - - public override int Draw() - { - if( this.IsFirstDraw ) - { - this.IsFirstDraw = true; - } - - if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] != (int)Difficulty.Tower && TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] != (int)Difficulty.Dan) - { - if (TJAPlayer3.ConfigIni.ShowDancer && (this.ar踊り子モーション番号.Length - 1) != 0) - { - if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) nNowDancerCounter += Math.Abs((float)TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM[0] / 60.0f) * (float)TJAPlayer3.FPS.DeltaTime / nDancerBeat; - if (nNowDancerCounter >= 1) - { - nNowDancerCounter = 0; - } - nNowDancerFrame = (int)(nNowDancerCounter * (this.ar踊り子モーション番号.Length - 1)); - - for (int i = 0; i < nDancerCount; i++) - { - if ((int)TJAPlayer3.stage演奏ドラム画面.actGauge.db現在のゲージ値[0] >= TJAPlayer3.Skin.Game_Dancer_Gauge[i]) - { - if (DancerStates[i] == 0) - { - DancerStates[i] = 1; - nNowDancerInCounter[i] = 0; - } - } - else - { - if (DancerStates[i] == 3) - { - DancerStates[i] = 2; - nNowDancerOutCounter[i] = 0; - } - } - - switch(DancerStates[i]) - { - case 0: - break; - case 1: - { - if (nDancerInInterval == 0) - { - DancerStates[i] = 3; - } - else - { - if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) nNowDancerInCounter[i] += Math.Abs((float)TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM[0] / nDancerInInterval) * (float)TJAPlayer3.FPS.DeltaTime; - - if (nNowDancerInCounter[i] >= 1) - { - nNowDancerInCounter[i] = 1; - DancerStates[i] = 3; - } - - int frame = (int)(nNowDancerInCounter[i] * (this.arMotionArray_In.Length - 1)); - if (this.Dancer_In[i] != null && this.Dancer_In[i].Length > 0 && this.Dancer_In[i][this.arMotionArray_In[frame]] != null) - { - this.Dancer_In[i][this.arMotionArray_In[frame]].t2D中心基準描画(TJAPlayer3.Skin.Game_Dancer_X[i], TJAPlayer3.Skin.Game_Dancer_Y[i]); - } - } - - } - break; - case 2: - { - if (nDancerOutInterval == 0) - { - DancerStates[i] = 0; - } - else - { - if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) nNowDancerOutCounter[i] += Math.Abs((float)TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM[0] / nDancerOutInterval) * (float)TJAPlayer3.FPS.DeltaTime; - - if (nNowDancerOutCounter[i] >= 1) - { - nNowDancerOutCounter[i] = 1; - DancerStates[i] = 0; - } - - int frame = (int)(nNowDancerOutCounter[i] * (this.arMotionArray_Out.Length - 1)); - if (this.Dancer_Out[i] != null && this.Dancer_Out[i].Length > 0 && this.Dancer_Out[i][this.arMotionArray_Out[frame]] != null) - { - this.Dancer_Out[i][this.arMotionArray_Out[frame]].t2D中心基準描画(TJAPlayer3.Skin.Game_Dancer_X[i], TJAPlayer3.Skin.Game_Dancer_Y[i]); - } - } - } - break; - case 3: - if (this.Dancer[i] != null && this.Dancer[i].Length > 0 && this.Dancer[i][this.ar踊り子モーション番号[nNowDancerFrame]] != null) - { - this.Dancer[i][this.ar踊り子モーション番号[nNowDancerFrame]].t2D中心基準描画(TJAPlayer3.Skin.Game_Dancer_X[i], TJAPlayer3.Skin.Game_Dancer_Y[i]); - } - break; - } - } - } - } - - return base.Draw(); - } - - #region[ private ] - //----------------- - private int nDancerCount; - private float[] nNowDancerInCounter; - private float[] nNowDancerOutCounter; - private float nNowDancerCounter; - private int nNowDancerFrame; - private int nDancerInPtn; - private int nDancerOutPtn; - private int nDancerPtn; - private float nDancerBeat; - private float nDancerInInterval; - private float nDancerOutInterval; - private int[] arMotionArray_In; - private int[] arMotionArray_Out; - private int[] ar踊り子モーション番号; - //public CCounter ct踊り子モーション; - private CTexture[][] Dancer_In; - private CTexture[][] Dancer_Out; - private CTexture[][] Dancer; - private int[] DancerStates; - private string Game_Dancer_In_Motion; - private string Game_Dancer_Out_Motion; - - private void LoadDancerConifg(string dancerPath) - { - var _str = ""; - TJAPlayer3.Skin.LoadSkinConfigFromFile(dancerPath + @$"{Path.DirectorySeparatorChar}DancerConfig.txt", ref _str); - - string[] delimiter = { "\n" }; - string[] strSingleLine = _str.Split(delimiter, StringSplitOptions.RemoveEmptyEntries); - - TJAPlayer3.Skin.Game_Dancer_X = new int[] { 640, 430, 856, 215, 1070 }; - TJAPlayer3.Skin.Game_Dancer_Y = new int[] { 500, 500, 500, 500, 500 }; - nDancerCount = 5; - nDancerInInterval = 0; - nDancerOutInterval = 0; - - foreach (string s in strSingleLine) - { - string str = s.Replace('\t', ' ').TrimStart(new char[] { '\t', ' ' }); - if ((str.Length != 0) && (str[0] != ';')) - { - try - { - string strCommand; - string strParam; - string[] strArray = str.Split(new char[] { '=' }); - - if (strArray.Length == 2) - { - strCommand = strArray[0].Trim(); - strParam = strArray[1].Trim(); - - if (strCommand == "Game_Dancer_Count") - { - nDancerCount = int.Parse(strParam); - TJAPlayer3.Skin.Game_Dancer_X = new int[nDancerCount]; - TJAPlayer3.Skin.Game_Dancer_Y = new int[nDancerCount]; - } - else if (strCommand == "Game_Dancer_X") - { - string[] strSplit = strParam.Split(','); - for (int i = 0; i < nDancerCount; i++) - { - TJAPlayer3.Skin.Game_Dancer_X[i] = int.Parse(strSplit[i]); - } - } - else if (strCommand == "Game_Dancer_Y") - { - string[] strSplit = strParam.Split(','); - for (int i = 0; i < nDancerCount; i++) - { - TJAPlayer3.Skin.Game_Dancer_Y[i] = int.Parse(strSplit[i]); - } - } - else if (strCommand == "Game_Dancer_Motion") - { - TJAPlayer3.Skin.Game_Dancer_Motion = strParam; - } - else if (strCommand == "Game_Dancer_In_Motion") - { - Game_Dancer_In_Motion = strParam; - } - else if (strCommand == "Game_Dancer_Out_Motion") - { - Game_Dancer_Out_Motion = strParam; - } - else if (strCommand == "Game_Dancer_Beat") - { - nDancerBeat = int.Parse(strParam); - } - else if (strCommand == "Game_Dancer_In_Interval") - { - nDancerInInterval = int.Parse(strParam); - } - else if (strCommand == "Game_Dancer_Out_Interval") - { - nDancerOutInterval = int.Parse(strParam); - } - else if (strCommand == "Game_Dancer_Gauge") - { - string[] strSplit = strParam.Split(','); - for (int i = 0; i < nDancerCount; i++) - { - TJAPlayer3.Skin.Game_Dancer_Gauge[i] = int.Parse(strSplit[i]); - } - } - - } - continue; - } - catch (Exception exception) - { - Trace.TraceError(exception.ToString()); - Trace.TraceError("例外が発生しましたが処理を継続します。 (6a32cc37-1527-412e-968a-512c1f0135cd)"); - continue; - } - } - } - - } - //----------------- - #endregion - } -} +using System; +using System.Collections.Generic; +using System.Text; +using System.Drawing; +using System.Runtime.InteropServices; +using FDK; +using System.Diagnostics; + +namespace TJAPlayer3 +{ + internal class CActImplDancer : CActivity + { + /// + /// 踊り子 + /// + public CActImplDancer() + { + base.IsDeActivated = true; + } + + public override void Activate() + { + //this.ct踊り子モーション = new CCounter(); + + if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Tower || TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Dan) + return; + + var preset = HScenePreset.GetBGPreset(); + + Random random = new Random(); + + Dancer_In = new CTexture[5][]; + Dancer_Out = new CTexture[5][]; + Dancer = new CTexture[5][]; + DancerStates = new int[5]; + nNowDancerInCounter = new float[5]; + nNowDancerOutCounter = new float[5]; + + + + var dancerOrigindir = CSkin.Path($"{TextureLoader.BASE}{TextureLoader.GAME}{TextureLoader.DANCER}"); + if (System.IO.Directory.Exists($@"{dancerOrigindir}")) + { + var dirs = System.IO.Directory.GetDirectories($@"{dancerOrigindir}"); + if (dirs.Length > 0) + { + var _presetPath = (preset != null && preset.DancerSet != null) ? $@"{dancerOrigindir}" + preset.DancerSet[random.Next(0, preset.DancerSet.Length)] : ""; + var path = (preset != null && System.IO.Directory.Exists(_presetPath)) + ? _presetPath + : dirs[random.Next(0, dirs.Length)]; + + LoadDancerConifg(path); + + Dancer_In = new CTexture[nDancerCount][]; + Dancer_Out = new CTexture[nDancerCount][]; + Dancer = new CTexture[nDancerCount][]; + DancerStates = new int[nDancerCount]; + nNowDancerInCounter = new float[nDancerCount]; + nNowDancerOutCounter = new float[nDancerCount]; + + nDancerInPtn = TJAPlayer3.t連番画像の枚数を数える($@"{path}{Path.DirectorySeparatorChar}1_In{Path.DirectorySeparatorChar}"); + if (nDancerInPtn != 0) + { + for (int i = 0; i < nDancerCount; i++) + { + Dancer_In[i] = new CTexture[nDancerInPtn]; + for (int p = 0; p < nDancerInPtn; p++) + { + Dancer_In[i][p] = TJAPlayer3.tテクスチャの生成($@"{path}{Path.DirectorySeparatorChar}{(i + 1)}_In{Path.DirectorySeparatorChar}{p}.png"); + } + } + } + + nDancerOutPtn = TJAPlayer3.t連番画像の枚数を数える($@"{path}{Path.DirectorySeparatorChar}1_Out{Path.DirectorySeparatorChar}"); + if (nDancerOutPtn != 0) + { + for (int i = 0; i < nDancerCount; i++) + { + Dancer_Out[i] = new CTexture[nDancerOutPtn]; + for (int p = 0; p < nDancerOutPtn; p++) + { + Dancer_Out[i][p] = TJAPlayer3.tテクスチャの生成($@"{path}{Path.DirectorySeparatorChar}{(i + 1)}_Out{Path.DirectorySeparatorChar}{p}.png"); + } + } + } + + nDancerPtn = TJAPlayer3.t連番画像の枚数を数える($@"{path}{Path.DirectorySeparatorChar}1{Path.DirectorySeparatorChar}"); + if (nDancerPtn != 0) + { + for (int i = 0; i < nDancerCount; i++) + { + Dancer[i] = new CTexture[nDancerPtn]; + for (int p = 0; p < nDancerPtn; p++) + { + Dancer[i][p] = TJAPlayer3.tテクスチャの生成($@"{path}{Path.DirectorySeparatorChar}{(i + 1)}{Path.DirectorySeparatorChar}{p}.png"); + } + } + } + } + } + + arMotionArray_In = CConversion.StringToIntArray(Game_Dancer_In_Motion); + if(this.arMotionArray_In == null) arMotionArray_In = CConversion.StringToIntArray("0,0"); + + arMotionArray_Out = CConversion.StringToIntArray(Game_Dancer_Out_Motion); + if(this.arMotionArray_Out == null) arMotionArray_Out = CConversion.StringToIntArray("0,0"); + + this.ar踊り子モーション番号 = CConversion.StringToIntArray(TJAPlayer3.Skin.Game_Dancer_Motion); + if(this.ar踊り子モーション番号 == null) ar踊り子モーション番号 = CConversion.StringToIntArray("0,0"); + + nNowDancerCounter = 0; + nNowDancerFrame = 0; + + base.Activate(); + } + + public override void DeActivate() + { + if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Tower || TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Dan) + return; + + //this.ct踊り子モーション = null; + + for (int i = 0; i < nDancerCount; i++) + { + TJAPlayer3.t安全にDisposeする(ref Dancer_In[i]); + TJAPlayer3.t安全にDisposeする(ref Dancer_Out[i]); + TJAPlayer3.t安全にDisposeする(ref Dancer[i]); + } + + base.DeActivate(); + } + + public override void CreateManagedResource() + { + base.CreateManagedResource(); + } + + public override void ReleaseManagedResource() + { + base.ReleaseManagedResource(); + } + + public override int Draw() + { + if( this.IsFirstDraw ) + { + this.IsFirstDraw = true; + } + + if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] != (int)Difficulty.Tower && TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] != (int)Difficulty.Dan) + { + if (TJAPlayer3.ConfigIni.ShowDancer && (this.ar踊り子モーション番号.Length - 1) != 0) + { + if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) nNowDancerCounter += Math.Abs((float)TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM[0] / 60.0f) * (float)TJAPlayer3.FPS.DeltaTime / nDancerBeat; + if (nNowDancerCounter >= 1) + { + nNowDancerCounter = 0; + } + nNowDancerFrame = (int)(nNowDancerCounter * (this.ar踊り子モーション番号.Length - 1)); + + for (int i = 0; i < nDancerCount; i++) + { + if ((int)TJAPlayer3.stage演奏ドラム画面.actGauge.db現在のゲージ値[0] >= TJAPlayer3.Skin.Game_Dancer_Gauge[i]) + { + if (DancerStates[i] == 0) + { + DancerStates[i] = 1; + nNowDancerInCounter[i] = 0; + } + } + else + { + if (DancerStates[i] == 3) + { + DancerStates[i] = 2; + nNowDancerOutCounter[i] = 0; + } + } + + switch(DancerStates[i]) + { + case 0: + break; + case 1: + { + if (nDancerInInterval == 0) + { + DancerStates[i] = 3; + } + else + { + if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) nNowDancerInCounter[i] += Math.Abs((float)TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM[0] / nDancerInInterval) * (float)TJAPlayer3.FPS.DeltaTime; + + if (nNowDancerInCounter[i] >= 1) + { + nNowDancerInCounter[i] = 1; + DancerStates[i] = 3; + } + + int frame = (int)(nNowDancerInCounter[i] * (this.arMotionArray_In.Length - 1)); + if (this.Dancer_In[i] != null && this.Dancer_In[i].Length > 0 && this.Dancer_In[i][this.arMotionArray_In[frame]] != null) + { + this.Dancer_In[i][this.arMotionArray_In[frame]].t2D中心基準描画(TJAPlayer3.Skin.Game_Dancer_X[i], TJAPlayer3.Skin.Game_Dancer_Y[i]); + } + } + + } + break; + case 2: + { + if (nDancerOutInterval == 0) + { + DancerStates[i] = 0; + } + else + { + if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) nNowDancerOutCounter[i] += Math.Abs((float)TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM[0] / nDancerOutInterval) * (float)TJAPlayer3.FPS.DeltaTime; + + if (nNowDancerOutCounter[i] >= 1) + { + nNowDancerOutCounter[i] = 1; + DancerStates[i] = 0; + } + + int frame = (int)(nNowDancerOutCounter[i] * (this.arMotionArray_Out.Length - 1)); + if (this.Dancer_Out[i] != null && this.Dancer_Out[i].Length > 0 && this.Dancer_Out[i][this.arMotionArray_Out[frame]] != null) + { + this.Dancer_Out[i][this.arMotionArray_Out[frame]].t2D中心基準描画(TJAPlayer3.Skin.Game_Dancer_X[i], TJAPlayer3.Skin.Game_Dancer_Y[i]); + } + } + } + break; + case 3: + if (this.Dancer[i] != null && this.Dancer[i].Length > 0 && this.Dancer[i][this.ar踊り子モーション番号[nNowDancerFrame]] != null) + { + this.Dancer[i][this.ar踊り子モーション番号[nNowDancerFrame]].t2D中心基準描画(TJAPlayer3.Skin.Game_Dancer_X[i], TJAPlayer3.Skin.Game_Dancer_Y[i]); + } + break; + } + } + } + } + + return base.Draw(); + } + + #region[ private ] + //----------------- + private int nDancerCount; + private float[] nNowDancerInCounter; + private float[] nNowDancerOutCounter; + private float nNowDancerCounter; + private int nNowDancerFrame; + private int nDancerInPtn; + private int nDancerOutPtn; + private int nDancerPtn; + private float nDancerBeat; + private float nDancerInInterval; + private float nDancerOutInterval; + private int[] arMotionArray_In; + private int[] arMotionArray_Out; + private int[] ar踊り子モーション番号; + //public CCounter ct踊り子モーション; + private CTexture[][] Dancer_In; + private CTexture[][] Dancer_Out; + private CTexture[][] Dancer; + private int[] DancerStates; + private string Game_Dancer_In_Motion; + private string Game_Dancer_Out_Motion; + + private void LoadDancerConifg(string dancerPath) + { + var _str = ""; + TJAPlayer3.Skin.LoadSkinConfigFromFile(dancerPath + @$"{Path.DirectorySeparatorChar}DancerConfig.txt", ref _str); + + string[] delimiter = { "\n" }; + string[] strSingleLine = _str.Split(delimiter, StringSplitOptions.RemoveEmptyEntries); + + TJAPlayer3.Skin.Game_Dancer_X = new int[] { 640, 430, 856, 215, 1070 }; + TJAPlayer3.Skin.Game_Dancer_Y = new int[] { 500, 500, 500, 500, 500 }; + nDancerCount = 5; + nDancerInInterval = 0; + nDancerOutInterval = 0; + + foreach (string s in strSingleLine) + { + string str = s.Replace('\t', ' ').TrimStart(new char[] { '\t', ' ' }); + if ((str.Length != 0) && (str[0] != ';')) + { + try + { + string strCommand; + string strParam; + string[] strArray = str.Split(new char[] { '=' }); + + if (strArray.Length == 2) + { + strCommand = strArray[0].Trim(); + strParam = strArray[1].Trim(); + + if (strCommand == "Game_Dancer_Count") + { + nDancerCount = int.Parse(strParam); + TJAPlayer3.Skin.Game_Dancer_X = new int[nDancerCount]; + TJAPlayer3.Skin.Game_Dancer_Y = new int[nDancerCount]; + } + else if (strCommand == "Game_Dancer_X") + { + string[] strSplit = strParam.Split(','); + for (int i = 0; i < nDancerCount; i++) + { + TJAPlayer3.Skin.Game_Dancer_X[i] = int.Parse(strSplit[i]); + } + } + else if (strCommand == "Game_Dancer_Y") + { + string[] strSplit = strParam.Split(','); + for (int i = 0; i < nDancerCount; i++) + { + TJAPlayer3.Skin.Game_Dancer_Y[i] = int.Parse(strSplit[i]); + } + } + else if (strCommand == "Game_Dancer_Motion") + { + TJAPlayer3.Skin.Game_Dancer_Motion = strParam; + } + else if (strCommand == "Game_Dancer_In_Motion") + { + Game_Dancer_In_Motion = strParam; + } + else if (strCommand == "Game_Dancer_Out_Motion") + { + Game_Dancer_Out_Motion = strParam; + } + else if (strCommand == "Game_Dancer_Beat") + { + nDancerBeat = int.Parse(strParam); + } + else if (strCommand == "Game_Dancer_In_Interval") + { + nDancerInInterval = int.Parse(strParam); + } + else if (strCommand == "Game_Dancer_Out_Interval") + { + nDancerOutInterval = int.Parse(strParam); + } + else if (strCommand == "Game_Dancer_Gauge") + { + string[] strSplit = strParam.Split(','); + for (int i = 0; i < nDancerCount; i++) + { + TJAPlayer3.Skin.Game_Dancer_Gauge[i] = int.Parse(strSplit[i]); + } + } + + } + continue; + } + catch (Exception exception) + { + Trace.TraceError(exception.ToString()); + Trace.TraceError("例外が発生しましたが処理を継続します。 (6a32cc37-1527-412e-968a-512c1f0135cd)"); + continue; + } + } + } + + } + //----------------- + #endregion + } +} diff --git a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏DrumsチップファイアD.cs b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplFireworks.cs similarity index 83% rename from OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏DrumsチップファイアD.cs rename to OpenTaiko/src/Stages/07.Game/Taiko/CActImplFireworks.cs index 8467fb21..4c0cbb8c 100644 --- a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏DrumsチップファイアD.cs +++ b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplFireworks.cs @@ -1,551 +1,492 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Drawing; -using System.Runtime.InteropServices; -using FDK; - -using Rectangle = System.Drawing.Rectangle; -using Point = System.Drawing.Point; -using Color = System.Drawing.Color; - -namespace TJAPlayer3 -{ - internal class CAct演奏DrumsチップファイアD : CActivity - { - // コンストラクタ - - public CAct演奏DrumsチップファイアD() - { - base.IsDeActivated = true; - } - - - // メソッド - - /// - /// 大音符の花火エフェクト - /// - /// - public virtual void Start( int nLane, int nPlayer ) - { - nY座標P2 = new int[] { 548, 612, 670, 712, 730, 780, 725, 690, 640 }; - if( TJAPlayer3.Tx.Effects_Hit_FireWorks != null && TJAPlayer3.Tx.Effects_Hit_FireWorks != null ) - { - for (int i = 0; i < 9; i++) - { - for (int j = 0; j < 45; j++) - { - if (!this.st大音符花火[j].b使用中) - { - this.st大音符花火[j].b使用中 = true; - this.st大音符花火[j].ct進行 = new CCounter(0, 40, 18, TJAPlayer3.Timer); // カウンタ - this.st大音符花火[j].fX = this.nX座標[ i ]; //X座標 - this.st大音符花火[j].fY = nPlayer == 0 ? this.nY座標[ i ] : this.nY座標P2[ i ]; - - switch(nLane) - { - case 0: - this.st大音符花火[j].nColor = 0; - break; - case 1: - this.st大音符花火[j].nColor = 1; - break; - } - - switch( i ) - { - case 0: - this.st大音符花火[ j ].n開始フレーム = 0; - this.st大音符花火[ j ].n終了フレーム = 16; - break; - case 1: - this.st大音符花火[ j ].n開始フレーム = 3; - this.st大音符花火[ j ].n終了フレーム = 19; - break; - case 2: - this.st大音符花火[ j ].n開始フレーム = 6; - this.st大音符花火[ j ].n終了フレーム = 22; - break; - case 3: - this.st大音符花火[ j ].n開始フレーム = 9; - this.st大音符花火[ j ].n終了フレーム = 25; - break; - case 4: - this.st大音符花火[ j ].n開始フレーム = 12; - this.st大音符花火[ j ].n終了フレーム = 28; - break; - case 5: - this.st大音符花火[ j ].n開始フレーム = 15; - this.st大音符花火[ j ].n終了フレーム = 31; - break; - case 6: - this.st大音符花火[ j ].n開始フレーム = 18; - this.st大音符花火[ j ].n終了フレーム = 34; - break; - case 7: - this.st大音符花火[ j ].n開始フレーム = 21; - this.st大音符花火[ j ].n終了フレーム = 37; - break; - case 8: - this.st大音符花火[ j ].n開始フレーム = 24; - this.st大音符花火[ j ].n終了フレーム = 40; - break; - } - - - - break; - } - } - } - } - } - - public virtual void Start( int nLane, ENoteJudge judge, int player ) - { - for (int j = 0; j < 3 * 4; j++) - { - if( !this.st状態[ j ].b使用中 ) - //for( int n = 0; n < 1; n++ ) - { - this.st状態[ j ].b使用中 = true; - //this.st状態[ n ].ct進行 = new CCounter( 0, 9, 20, CDTXMania.Timer ); - this.st状態[ j ].ct進行 = new CCounter( 0, 6, 25, TJAPlayer3.Timer ); - this.st状態[ j ].judge = judge; - this.st状態[ j ].nPlayer = player; - this.st状態_大[ j ].nPlayer = player; - - switch( nLane ) - { - case 0x11: - case 0x12: - this.st状態[ j ].nIsBig = 0; - break; - case 0x13: - case 0x14: - case 0x1A: - case 0x1B: - this.st状態_大[ j ].ct進行 = new CCounter( 0, 9, 20, TJAPlayer3.Timer ); - this.st状態_大[ j ].judge = judge; - this.st状態_大[ j ].nIsBig = 1; - break; - } - break; - } - } - } - public void Start紙吹雪() - { - return; - /* - if (this.tx紙吹雪 != null) - { - for (int i = 0; i < 256; i++) - { - for (int j = 0; j < 16; j++) - { - if (!this.st紙吹雪[j].b使用中) - { - this.st紙吹雪[j].b使用中 = true; - int n回転初期値 = CDTXMania.Random.Next(360); - int nX拡散方向 = CDTXMania.Random.Next(10); - int n拡散の大きさ = CDTXMania.Random.Next( 50, 1400 ); - int n重力加速 = CDTXMania.Random.Next( 6, 100 ); - double num7 = ( n拡散の大きさ / 1000.0 ) + (1 / 100.0); // 拡散の大きさ - //double num7 = 0.9 + ( ( (double) CDTXMania.Random.Next( 40 ) ) / 100.0 ); - this.st紙吹雪[ j ].nGraphic = CDTXMania.Random.Next(3); - this.st紙吹雪[ j ].nColor = CDTXMania.Random.Next(3); - this.st紙吹雪[j].ct進行 = new CCounter(0, 500, 5, CDTXMania.Timer); // カウンタ - this.st紙吹雪[j].fX = 1000; //X座標(仮) - - this.st紙吹雪[j].fY = ((( 470 + (((float)Math.Sin((double)this.st紙吹雪[j].f半径)) * this.st紙吹雪[j].f半径)) )); //Y座標 - //this.st紙吹雪[j].f加速度X = (float)(num7 * Math.Cos((Math.PI * 2 * n回転初期値) / 360.0)); - //this.st紙吹雪[ j ].f加速度X = (float)( ( num7 * Math.Cos((Math.PI * 2 * n回転初期値) / 360.0)) > 0.005 ? Math.Abs( num7 * Math.Cos((Math.PI * 2 * n回転初期値) / 360.0)) : num7 * Math.Cos((Math.PI * 2 * n回転初期値) / 360.0) ); - this.st紙吹雪[ j ].f加速度X = (float)Math.Abs(num7 * Math.Cos((Math.PI * 2 * n回転初期値) / 360.0)) - ( nX拡散方向 / 20.0f ); - this.st紙吹雪[j].f加速度Y = (float)-Math.Abs( num7 * (Math.Sin((Math.PI * 2 * n回転初期値) / 360.0))) - 0.05f; - //this.st紙吹雪[j].f加速度Y = (float)( num7 * (Math.Sin((Math.PI * 2 * n回転初期値) / 360.0))) - 0.05f; - this.st紙吹雪[j].f加速度の加速度X = 1.009f + (float)(num7 / 1000); - this.st紙吹雪[j].f加速度の加速度Y = 0.989f + (float)(num7 / 1000); - //this.st紙吹雪[j].f重力加速度 = 0.0100f; - this.st紙吹雪[j].f重力加速度 = n重力加速 / 10000.0f; - this.st紙吹雪[j].f半径 = (float)(0.5 + (((double)CDTXMania.Random.Next(40)) / 100.0)); - - - break; - } - } - } - } */ - } - - // CActivity 実装 - - public override void Activate() - { - for( int i = 0; i < 3 * 4; i++ ) - { - this.st状態[ i ].ct進行 = new CCounter(); - this.st状態[ i ].b使用中 = false; - this.st状態_大[ i ].ct進行 = new CCounter(); - } - for( int i = 0; i < 256; i++ ) - { - this.st紙吹雪[ i ] = new ST紙吹雪(); - this.st紙吹雪[ i ].b使用中 = false; - this.st紙吹雪[ i ].ct進行 = new CCounter(); - } - base.Activate(); - } - public override void DeActivate() - { - for( int i = 0; i < 3 * 4; i++ ) - { - this.st状態[ i ].ct進行 = null; - this.st状態_大[ i ].ct進行 = null; - } - for( int i = 0; i < 256; i++ ) - { - this.st紙吹雪[ i ].ct進行 = null; - } - base.DeActivate(); - } - public override void CreateManagedResource() - { - // this.txアタックエフェクトUpper = CDTXMania.tテクスチャの生成Af( CSkin.Path( @"Graphics\7_explosion_upper.png" ) ); - // this.txアタックエフェクトUpper_big = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\7_explosion_upper_big.png" ) ); - //if( this.txアタックエフェクトUpper != null ) - //{ - // this.txアタックエフェクトUpper.b加算合成 = true; - //} - // this.tx大音符花火[0] = CDTXMania.tテクスチャの生成Af( CSkin.Path( @"Graphics\7_explosion_bignotes_red.png" ) ); - // this.tx大音符花火[0].b加算合成 = true; - // this.tx大音符花火[1] = CDTXMania.tテクスチャの生成Af( CSkin.Path( @"Graphics\7_explosion_bignotes_blue.png" ) ); - // this.tx大音符花火[1].b加算合成 = true; - //this.tx紙吹雪 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\7_particle paper.png" ) ); - base.CreateManagedResource(); - } - public override void ReleaseManagedResource() - { - //CDTXMania.tテクスチャの解放( ref this.txアタックエフェクトUpper ); - //CDTXMania.tテクスチャの解放( ref this.txアタックエフェクトUpper_big ); - // CDTXMania.tテクスチャの解放( ref this.tx大音符花火[ 0 ] ); - // CDTXMania.tテクスチャの解放( ref this.tx大音符花火[ 1 ] ); - //CDTXMania.tテクスチャの解放( ref this.tx紙吹雪 ); - base.ReleaseManagedResource(); - } - public override int Draw() - { - if( !base.IsDeActivated ) - { - int nWidth = (TJAPlayer3.Tx.Effects_Hit_Explosion.szTextureSize.Width / 7); - int nHeight = (TJAPlayer3.Tx.Effects_Hit_Explosion.szTextureSize.Height / 4); - int nBombWidth = (TJAPlayer3.Tx.Effects_Hit_Bomb.szTextureSize.Width / 7); - int nBombHeight = (TJAPlayer3.Tx.Effects_Hit_Bomb.szTextureSize.Height / 4); - for ( int i = 0; i < 3 * 4; i++ ) - { - if( this.st状態[ i ].b使用中 ) - { - if( !this.st状態[ i ].ct進行.IsStoped ) - { - this.st状態[ i ].ct進行.Tick(); - if( this.st状態[ i ].ct進行.IsEnded ) - { - this.st状態[ i ].ct進行.Stop(); - this.st状態[ i ].b使用中 = false; - } - - // (When performing calibration, reduce visual distraction - // and current judgment feedback near the judgment position.) - if( TJAPlayer3.Tx.Effects_Hit_Explosion != null && !TJAPlayer3.IsPerformingCalibration ) - { - int n = this.st状態[ i ].nIsBig == 1 ? (nHeight * 2) : 0; - - int nX = 0; - int nY = 0; - - if (TJAPlayer3.ConfigIni.nPlayerCount == 5) - { - nX = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_5P[0] + (TJAPlayer3.Skin.Game_UIMove_5P[0] * this.st状態[i].nPlayer); - nY = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_5P[1] + (TJAPlayer3.Skin.Game_UIMove_5P[1] * this.st状態[i].nPlayer); - } - else if (TJAPlayer3.ConfigIni.nPlayerCount == 4 || TJAPlayer3.ConfigIni.nPlayerCount == 3) - { - nX = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_4P[0] + (TJAPlayer3.Skin.Game_UIMove_4P[0] * this.st状態[i].nPlayer); - nY = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_4P[1] + (TJAPlayer3.Skin.Game_UIMove_4P[1] * this.st状態[i].nPlayer); - } - else - { - nX = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_X[this.st状態[i].nPlayer]; - nY = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_Y[this.st状態[i].nPlayer]; - } - nX += TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLX(this.st状態[i].nPlayer); - nY += TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLY(this.st状態[i].nPlayer); - - switch ( st状態[ i ].judge ) - { - case ENoteJudge.Perfect: - case ENoteJudge.Great: - case ENoteJudge.Auto: - if (!TJAPlayer3.ConfigIni.SimpleMode) TJAPlayer3.Tx.Effects_Hit_Explosion.t2D描画(nX, nY, new Rectangle(this.st状態[i].ct進行.CurrentValue * nWidth, n, nWidth, nHeight)); - break; - case ENoteJudge.Good: - TJAPlayer3.Tx.Effects_Hit_Explosion.t2D描画(nX, nY, new Rectangle(this.st状態[i].ct進行.CurrentValue * nWidth, n + nHeight, nWidth, nHeight)); - break; - case ENoteJudge.Mine: - TJAPlayer3.Tx.Effects_Hit_Bomb?.t2D描画(nX, nY, new Rectangle(this.st状態[i].ct進行.CurrentValue * nBombWidth, 0, nBombWidth, nBombHeight)); - break; - case ENoteJudge.Miss: - case ENoteJudge.Bad: - break; - } - } - } - } - } - - for( int i = 0; i < 3 * 4; i++ ) - { - if( !this.st状態_大[ i ].ct進行.IsStoped ) - { - this.st状態_大[ i ].ct進行.Tick(); - if( this.st状態_大[ i ].ct進行.IsEnded ) - { - this.st状態_大[ i ].ct進行.Stop(); - } - if(TJAPlayer3.Tx.Effects_Hit_Explosion_Big != null && this.st状態_大[ i ].nIsBig == 1 ) - { - - switch( st状態_大[ i ].judge ) - { - case ENoteJudge.Perfect: - case ENoteJudge.Great: - case ENoteJudge.Auto: - if( this.st状態_大[ i ].nIsBig == 1 && !TJAPlayer3.ConfigIni.SimpleMode) - { - //float fX = 415 - ((TJAPlayer3.Tx.Effects_Hit_Explosion_Big.sz画像サイズ.Width * TJAPlayer3.Tx.Effects_Hit_Explosion_Big.vc拡大縮小倍率.X ) / 2.0f); - //float fY = TJAPlayer3.Skin.nJudgePointY[ this.st状態_大[ i ].nPlayer ] - ((TJAPlayer3.Tx.Effects_Hit_Explosion_Big.sz画像サイズ.Height * TJAPlayer3.Tx.Effects_Hit_Explosion_Big.vc拡大縮小倍率.Y ) / 2.0f); - //float fY = 257 - ((this.txアタックエフェクトUpper_big.sz画像サイズ.Height * this.txアタックエフェクトUpper_big.vc拡大縮小倍率.Y ) / 2.0f); - - ////7 - float f倍率 = 0.5f + ( (this.st状態_大[ i ].ct進行.CurrentValue * 0.5f) / 10.0f); - //this.txアタックエフェクトUpper_big.vc拡大縮小倍率.X = f倍率; - //this.txアタックエフェクトUpper_big.vc拡大縮小倍率.Y = f倍率; - //this.txアタックエフェクトUpper_big.n透明度 = (int)(255 * f倍率); - //this.txアタックエフェクトUpper_big.t2D描画( CDTXMania.app.Device, fX, fY ); - - /* - Matrix mat = Matrix.Identity; - mat *= Matrix.Scaling( f倍率, f倍率, f倍率 ); - mat *= Matrix.Translation( TJAPlayer3.Skin.nScrollFieldX[0] - SampleFramework.GameWindowSize.Width / 2.0f, -(TJAPlayer3.Skin.nJudgePointY[ this.st状態[ i ].nPlayer ] - SampleFramework.GameWindowSize.Height / 2.0f), 0f ); - //mat *= Matrix.Billboard( new Vector3( 15, 15, 15 ), new Vector3(0, 0, 0), new Vector3( 0, 0, 0 ), new Vector3( 0, 0, 0 ) ); - //mat *= Matrix.Translation( 0f, 0f, 0f ); - - - TJAPlayer3.Tx.Effects_Hit_Explosion_Big.Opacity = 255; - TJAPlayer3.Tx.Effects_Hit_Explosion_Big.t3D描画( mat ); - */ - - float x = 0; - float y = 0; - - if (TJAPlayer3.ConfigIni.nPlayerCount == 5) - { - x = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_5P[0] + (TJAPlayer3.Skin.Game_UIMove_5P[0] * this.st状態[i].nPlayer); - y = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_5P[1] + (TJAPlayer3.Skin.Game_UIMove_5P[1] * this.st状態[i].nPlayer); - } - else if (TJAPlayer3.ConfigIni.nPlayerCount == 4 || TJAPlayer3.ConfigIni.nPlayerCount == 3) - { - x = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_4P[0] + (TJAPlayer3.Skin.Game_UIMove_4P[0] * this.st状態[i].nPlayer); - y = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_4P[1] + (TJAPlayer3.Skin.Game_UIMove_4P[1] * this.st状態[i].nPlayer); - } - else - { - x = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_X[this.st状態[i].nPlayer]; - y = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_Y[this.st状態[i].nPlayer]; - } - x += TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLX(this.st状態[i].nPlayer); - y += TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLY(this.st状態[i].nPlayer); - - x -= (TJAPlayer3.Tx.Effects_Hit_Explosion_Big.szTextureSize.Width * (f倍率 - 1.0f) / 2.0f); - y -= (TJAPlayer3.Tx.Effects_Hit_Explosion_Big.szTextureSize.Height * (f倍率 - 1.0f) / 2.0f); - - TJAPlayer3.Tx.Effects_Hit_Explosion_Big.vcScaleRatio.X = f倍率; - TJAPlayer3.Tx.Effects_Hit_Explosion_Big.vcScaleRatio.Y = f倍率; - TJAPlayer3.Tx.Effects_Hit_Explosion_Big.t2D描画(x, y); - } - break; - - case ENoteJudge.Good: - break; - - case ENoteJudge.Miss: - case ENoteJudge.Bad: - break; - } - } - } - } - - for (int i = 0; i < 45; i++) - { - if( TJAPlayer3.Skin.nScrollFieldX[0] != 414 ) - break; - - if (this.st大音符花火[i].b使用中) - { - this.st大音符花火[i].n前回のValue = this.st大音符花火[i].ct進行.CurrentValue; - this.st大音符花火[i].ct進行.Tick(); - if (this.st大音符花火[i].ct進行.IsEnded) - { - this.st大音符花火[i].ct進行.Stop(); - this.st大音符花火[i].b使用中 = false; - } - /* - Matrix mat = Matrix.Identity; - - mat *= Matrix.Translation(this.st大音符花火[i].fX - SampleFramework.GameWindowSize.Width / 2, -(this.st大音符花火[i].fY - SampleFramework.GameWindowSize.Height / 2), 0f); - */ - float fX = this.st大音符花火[i].fX - ( 192 / 2 ); - float fY = this.st大音符花火[i].fY - ( 192 / 2 ); - - //if(CDTXMania.Tx.Effects_Hit_FireWorks[ 0 ] != null && this.st大音符花火[ i ].nColor == 0 ) - //{ - // if( this.st大音符花火[ i ].n開始フレーム <= this.st大音符花火[ i ].ct進行.n現在の値 && this.st大音符花火[ i ].n終了フレーム > this.st大音符花火[ i ].ct進行.n現在の値 ) - // { - // //this.tx大音符花火[ 0 ].t3D描画(CDTXMania.app.Device, mat, new Rectangle( ( this.st大音符花火[i].ct進行.n現在の値 - this.st大音符花火[ i ].n開始フレーム ) * 192, 0, 192, 192 )); - // //this.tx大音符花火[ 0 ].t3D描画( CDTXMania.app.Device, mat, fX, fY, new Rectangle( ( this.st大音符花火[i].ct進行.n現在の値 - this.st大音符花火[ i ].n開始フレーム ) * 192, 0, 192, 192 ) ); - // CDTXMania.Tx.Effects_Hit_FireWorks[ 0 ].t2D描画( CDTXMania.app.Device, (int)fX, (int)fY, new Rectangle( ( this.st大音符花火[i].ct進行.n現在の値 - this.st大音符花火[ i ].n開始フレーム ) * 192, 0, 192, 192 ) ); - // } - //} - ////if(CDTXMania.Tx.Effects_Hit_FireWorks[ 1 ] != null && this.st大音符花火[ i ].nColor == 1 ) - //{ - // if( this.st大音符花火[ i ].n開始フレーム <= this.st大音符花火[ i ].ct進行.n現在の値 && this.st大音符花火[ i ].n終了フレーム > this.st大音符花火[ i ].ct進行.n現在の値 ) - // { - // //this.tx大音符花火[ 1 ].t3D描画( CDTXMania.app.Device, mat, fX, fY, ); - // //CDTXMania.Tx.Effects_Hit_FireWorks[ 1 ].t2D描画( CDTXMania.app.Device, (int)fX, (int)fY, new Rectangle( ( this.st大音符花火[i].ct進行.n現在の値 - this.st大音符花火[ i ].n開始フレーム ) * 192, 0, 192, 192 ) ); - // } - //} - } - - } - - for (int i = 0; i < 256; i++) - { - if (this.st紙吹雪[i].b使用中) - { - this.st紙吹雪[i].n前回のValue = this.st紙吹雪[i].ct進行.CurrentValue; - this.st紙吹雪[i].ct進行.Tick(); - if (this.st紙吹雪[i].ct進行.IsEnded) - { - this.st紙吹雪[i].ct進行.Stop(); - this.st紙吹雪[i].b使用中 = false; - } - else if( this.st紙吹雪[ i ].fX > 1300 || this.st紙吹雪[ i ].fX < -20 ) - { - this.st紙吹雪[i].ct進行.Stop(); - this.st紙吹雪[i].b使用中 = false; - } - for (int n = this.st紙吹雪[i].n前回のValue; n < this.st紙吹雪[i].ct進行.CurrentValue; n++) - { - this.st紙吹雪[i].fX -= this.st紙吹雪[i].f加速度X; - this.st紙吹雪[i].fY -= this.st紙吹雪[i].f加速度Y; - this.st紙吹雪[i].f加速度X *= this.st紙吹雪[i].f加速度の加速度X; - this.st紙吹雪[i].f加速度Y *= this.st紙吹雪[i].f加速度の加速度Y; - this.st紙吹雪[i].f加速度Y -= this.st紙吹雪[i].f重力加速度; - } - /* - Matrix mat = Matrix.Identity; - - float x = (float)(this.st紙吹雪[i].f半径 * Math.Cos((Math.PI / 2 * this.st紙吹雪[i].ct進行.n現在の値) / 100.0)) * 2.3f; - mat *= Matrix.Scaling(x, x, 1f); - mat *= Matrix.Translation(this.st紙吹雪[i].fX - SampleFramework.GameWindowSize.Width / 2, -(this.st紙吹雪[i].fY - SampleFramework.GameWindowSize.Height / 2), 0f); - */ - - /*if (this.tx紙吹雪 != null) - { - this.tx紙吹雪.t3D描画(CDTXMania.app.Device, mat, new Rectangle( 32 * this.st紙吹雪[ i ].nGraphic, 32 * this.st紙吹雪[ i ].nColor, 32, 32 )); - - } */ - } - - } - } - return 0; - } - - - // その他 - - #region [ private ] - //----------------- - //private CTextureAf txアタックエフェクトUpper; - //private CTexture txアタックエフェクトUpper_big; - //private CTextureAf[] tx大音符花火 = new CTextureAf[2]; - //private CTexture tx紙吹雪; - - protected STSTATUS[] st状態 = new STSTATUS[ 3 * 4 ]; - protected STSTATUS_B[] st状態_大 = new STSTATUS_B[ 3 * 4 ]; - private ST大音符花火[] st大音符花火 = new ST大音符花火[45]; - - protected int[] nX座標 = new int[] { 450, 521, 596, 686, 778, 863, 970, 1070, 1150 }; - protected int[] nY座標 = new int[] { 172, 108, 50, 8, -10, -60, -5, 30, 90 }; - protected int[] nY座標P2 = new int[] { 172, 108, 50, 8, -10, -60, -5, 30, 90 }; - - [StructLayout(LayoutKind.Sequential)] - protected struct STSTATUS - { - public bool b使用中; - public CCounter ct進行; - public ENoteJudge judge; - public int nIsBig; - public int n透明度; - public int nPlayer; - } - [StructLayout(LayoutKind.Sequential)] - protected struct STSTATUS_B - { - public CCounter ct進行; - public ENoteJudge judge; - public int nIsBig; - public int n透明度; - public int nPlayer; - } - - [StructLayout(LayoutKind.Sequential)] - private struct ST大音符花火 - { - public int nColor; - public bool b使用中; - public CCounter ct進行; - public int n前回のValue; - public float fX; - public float fY; - public int n開始フレーム; - public int n終了フレーム; - } - - private ST紙吹雪[] st紙吹雪 = new ST紙吹雪[ 256 ]; - [StructLayout( LayoutKind.Sequential )] - private struct ST紙吹雪 - { - public int nGraphic; - public int nColor; - public bool b使用中; - public CCounter ct進行; - public int n前回のValue; - public float fX; - public float fY; - public float f加速度X; - public float f加速度Y; - public float f加速度の加速度X; - public float f加速度の加速度Y; - public float f重力加速度; - public float f半径; - public float f角度; - } - //----------------- - #endregion - } -} -  +using System; +using System.Collections.Generic; +using System.Text; +using System.Drawing; +using System.Runtime.InteropServices; +using FDK; + +using Rectangle = System.Drawing.Rectangle; +using Point = System.Drawing.Point; +using Color = System.Drawing.Color; + +namespace TJAPlayer3 +{ + internal class CActImplFireworks : CActivity + { + // コンストラクタ + + public CActImplFireworks() + { + base.IsDeActivated = true; + } + + + // メソッド + + /// + /// 大音符の花火エフェクト + /// + /// + public virtual void Start( int nLane, int nPlayer ) + { + nY座標P2 = new int[] { 548, 612, 670, 712, 730, 780, 725, 690, 640 }; + if( TJAPlayer3.Tx.Effects_Hit_FireWorks != null && TJAPlayer3.Tx.Effects_Hit_FireWorks != null ) + { + for (int i = 0; i < 9; i++) + { + for (int j = 0; j < 45; j++) + { + if (!this.st大音符花火[j].b使用中) + { + this.st大音符花火[j].b使用中 = true; + this.st大音符花火[j].ct進行 = new CCounter(0, 40, 18, TJAPlayer3.Timer); // カウンタ + this.st大音符花火[j].fX = this.nX座標[ i ]; //X座標 + this.st大音符花火[j].fY = nPlayer == 0 ? this.nY座標[ i ] : this.nY座標P2[ i ]; + + switch(nLane) + { + case 0: + this.st大音符花火[j].nColor = 0; + break; + case 1: + this.st大音符花火[j].nColor = 1; + break; + } + + switch( i ) + { + case 0: + this.st大音符花火[ j ].n開始フレーム = 0; + this.st大音符花火[ j ].n終了フレーム = 16; + break; + case 1: + this.st大音符花火[ j ].n開始フレーム = 3; + this.st大音符花火[ j ].n終了フレーム = 19; + break; + case 2: + this.st大音符花火[ j ].n開始フレーム = 6; + this.st大音符花火[ j ].n終了フレーム = 22; + break; + case 3: + this.st大音符花火[ j ].n開始フレーム = 9; + this.st大音符花火[ j ].n終了フレーム = 25; + break; + case 4: + this.st大音符花火[ j ].n開始フレーム = 12; + this.st大音符花火[ j ].n終了フレーム = 28; + break; + case 5: + this.st大音符花火[ j ].n開始フレーム = 15; + this.st大音符花火[ j ].n終了フレーム = 31; + break; + case 6: + this.st大音符花火[ j ].n開始フレーム = 18; + this.st大音符花火[ j ].n終了フレーム = 34; + break; + case 7: + this.st大音符花火[ j ].n開始フレーム = 21; + this.st大音符花火[ j ].n終了フレーム = 37; + break; + case 8: + this.st大音符花火[ j ].n開始フレーム = 24; + this.st大音符花火[ j ].n終了フレーム = 40; + break; + } + + + + break; + } + } + } + } + } + + public virtual void Start( int nLane, ENoteJudge judge, int player ) + { + for (int j = 0; j < 3 * 4; j++) + { + if( !this.st状態[ j ].b使用中 ) + //for( int n = 0; n < 1; n++ ) + { + this.st状態[ j ].b使用中 = true; + //this.st状態[ n ].ct進行 = new CCounter( 0, 9, 20, CDTXMania.Timer ); + this.st状態[ j ].ct進行 = new CCounter( 0, 6, 25, TJAPlayer3.Timer ); + this.st状態[ j ].judge = judge; + this.st状態[ j ].nPlayer = player; + this.st状態_大[ j ].nPlayer = player; + + switch( nLane ) + { + case 0x11: + case 0x12: + this.st状態[ j ].nIsBig = 0; + break; + case 0x13: + case 0x14: + case 0x1A: + case 0x1B: + this.st状態_大[ j ].ct進行 = new CCounter( 0, 9, 20, TJAPlayer3.Timer ); + this.st状態_大[ j ].judge = judge; + this.st状態_大[ j ].nIsBig = 1; + break; + } + break; + } + } + } + + // CActivity 実装 + + public override void Activate() + { + for( int i = 0; i < 3 * 4; i++ ) + { + this.st状態[ i ].ct進行 = new CCounter(); + this.st状態[ i ].b使用中 = false; + this.st状態_大[ i ].ct進行 = new CCounter(); + } + for( int i = 0; i < 256; i++ ) + { + this.st紙吹雪[ i ] = new ST紙吹雪(); + this.st紙吹雪[ i ].b使用中 = false; + this.st紙吹雪[ i ].ct進行 = new CCounter(); + } + base.Activate(); + } + public override void DeActivate() + { + for( int i = 0; i < 3 * 4; i++ ) + { + this.st状態[ i ].ct進行 = null; + this.st状態_大[ i ].ct進行 = null; + } + for( int i = 0; i < 256; i++ ) + { + this.st紙吹雪[ i ].ct進行 = null; + } + base.DeActivate(); + } + public override void CreateManagedResource() + { + base.CreateManagedResource(); + } + public override void ReleaseManagedResource() + { + base.ReleaseManagedResource(); + } + public override int Draw() + { + if( !base.IsDeActivated ) + { + int nWidth = (TJAPlayer3.Tx.Effects_Hit_Explosion.szTextureSize.Width / 7); + int nHeight = (TJAPlayer3.Tx.Effects_Hit_Explosion.szTextureSize.Height / 4); + int nBombWidth = (TJAPlayer3.Tx.Effects_Hit_Bomb.szTextureSize.Width / 7); + int nBombHeight = (TJAPlayer3.Tx.Effects_Hit_Bomb.szTextureSize.Height / 4); + for ( int i = 0; i < 3 * 4; i++ ) + { + if( this.st状態[ i ].b使用中 ) + { + if( !this.st状態[ i ].ct進行.IsStoped ) + { + this.st状態[ i ].ct進行.Tick(); + if( this.st状態[ i ].ct進行.IsEnded ) + { + this.st状態[ i ].ct進行.Stop(); + this.st状態[ i ].b使用中 = false; + } + + // (When performing calibration, reduce visual distraction + // and current judgment feedback near the judgment position.) + if( TJAPlayer3.Tx.Effects_Hit_Explosion != null && !TJAPlayer3.IsPerformingCalibration ) + { + int n = this.st状態[ i ].nIsBig == 1 ? (nHeight * 2) : 0; + + int nX = 0; + int nY = 0; + + if (TJAPlayer3.ConfigIni.nPlayerCount == 5) + { + nX = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_5P[0] + (TJAPlayer3.Skin.Game_UIMove_5P[0] * this.st状態[i].nPlayer); + nY = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_5P[1] + (TJAPlayer3.Skin.Game_UIMove_5P[1] * this.st状態[i].nPlayer); + } + else if (TJAPlayer3.ConfigIni.nPlayerCount == 4 || TJAPlayer3.ConfigIni.nPlayerCount == 3) + { + nX = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_4P[0] + (TJAPlayer3.Skin.Game_UIMove_4P[0] * this.st状態[i].nPlayer); + nY = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_4P[1] + (TJAPlayer3.Skin.Game_UIMove_4P[1] * this.st状態[i].nPlayer); + } + else + { + nX = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_X[this.st状態[i].nPlayer]; + nY = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_Y[this.st状態[i].nPlayer]; + } + nX += TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLX(this.st状態[i].nPlayer); + nY += TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLY(this.st状態[i].nPlayer); + + switch ( st状態[ i ].judge ) + { + case ENoteJudge.Perfect: + case ENoteJudge.Great: + case ENoteJudge.Auto: + if (!TJAPlayer3.ConfigIni.SimpleMode) TJAPlayer3.Tx.Effects_Hit_Explosion.t2D描画(nX, nY, new Rectangle(this.st状態[i].ct進行.CurrentValue * nWidth, n, nWidth, nHeight)); + break; + case ENoteJudge.Good: + TJAPlayer3.Tx.Effects_Hit_Explosion.t2D描画(nX, nY, new Rectangle(this.st状態[i].ct進行.CurrentValue * nWidth, n + nHeight, nWidth, nHeight)); + break; + case ENoteJudge.Mine: + TJAPlayer3.Tx.Effects_Hit_Bomb?.t2D描画(nX, nY, new Rectangle(this.st状態[i].ct進行.CurrentValue * nBombWidth, 0, nBombWidth, nBombHeight)); + break; + case ENoteJudge.Miss: + case ENoteJudge.Bad: + break; + } + } + } + } + } + + for( int i = 0; i < 3 * 4; i++ ) + { + if( !this.st状態_大[ i ].ct進行.IsStoped ) + { + this.st状態_大[ i ].ct進行.Tick(); + if( this.st状態_大[ i ].ct進行.IsEnded ) + { + this.st状態_大[ i ].ct進行.Stop(); + } + if(TJAPlayer3.Tx.Effects_Hit_Explosion_Big != null && this.st状態_大[ i ].nIsBig == 1 ) + { + + switch( st状態_大[ i ].judge ) + { + case ENoteJudge.Perfect: + case ENoteJudge.Great: + case ENoteJudge.Auto: + if( this.st状態_大[ i ].nIsBig == 1 && !TJAPlayer3.ConfigIni.SimpleMode) + { + //float fX = 415 - ((TJAPlayer3.Tx.Effects_Hit_Explosion_Big.sz画像サイズ.Width * TJAPlayer3.Tx.Effects_Hit_Explosion_Big.vc拡大縮小倍率.X ) / 2.0f); + //float fY = TJAPlayer3.Skin.nJudgePointY[ this.st状態_大[ i ].nPlayer ] - ((TJAPlayer3.Tx.Effects_Hit_Explosion_Big.sz画像サイズ.Height * TJAPlayer3.Tx.Effects_Hit_Explosion_Big.vc拡大縮小倍率.Y ) / 2.0f); + //float fY = 257 - ((this.txアタックエフェクトUpper_big.sz画像サイズ.Height * this.txアタックエフェクトUpper_big.vc拡大縮小倍率.Y ) / 2.0f); + + ////7 + float f倍率 = 0.5f + ( (this.st状態_大[ i ].ct進行.CurrentValue * 0.5f) / 10.0f); + //this.txアタックエフェクトUpper_big.vc拡大縮小倍率.X = f倍率; + //this.txアタックエフェクトUpper_big.vc拡大縮小倍率.Y = f倍率; + //this.txアタックエフェクトUpper_big.n透明度 = (int)(255 * f倍率); + //this.txアタックエフェクトUpper_big.t2D描画( CDTXMania.app.Device, fX, fY ); + + /* + Matrix mat = Matrix.Identity; + mat *= Matrix.Scaling( f倍率, f倍率, f倍率 ); + mat *= Matrix.Translation( TJAPlayer3.Skin.nScrollFieldX[0] - SampleFramework.GameWindowSize.Width / 2.0f, -(TJAPlayer3.Skin.nJudgePointY[ this.st状態[ i ].nPlayer ] - SampleFramework.GameWindowSize.Height / 2.0f), 0f ); + //mat *= Matrix.Billboard( new Vector3( 15, 15, 15 ), new Vector3(0, 0, 0), new Vector3( 0, 0, 0 ), new Vector3( 0, 0, 0 ) ); + //mat *= Matrix.Translation( 0f, 0f, 0f ); + + + TJAPlayer3.Tx.Effects_Hit_Explosion_Big.Opacity = 255; + TJAPlayer3.Tx.Effects_Hit_Explosion_Big.t3D描画( mat ); + */ + + float x = 0; + float y = 0; + + if (TJAPlayer3.ConfigIni.nPlayerCount == 5) + { + x = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_5P[0] + (TJAPlayer3.Skin.Game_UIMove_5P[0] * this.st状態[i].nPlayer); + y = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_5P[1] + (TJAPlayer3.Skin.Game_UIMove_5P[1] * this.st状態[i].nPlayer); + } + else if (TJAPlayer3.ConfigIni.nPlayerCount == 4 || TJAPlayer3.ConfigIni.nPlayerCount == 3) + { + x = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_4P[0] + (TJAPlayer3.Skin.Game_UIMove_4P[0] * this.st状態[i].nPlayer); + y = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_4P[1] + (TJAPlayer3.Skin.Game_UIMove_4P[1] * this.st状態[i].nPlayer); + } + else + { + x = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_X[this.st状態[i].nPlayer]; + y = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_Y[this.st状態[i].nPlayer]; + } + x += TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLX(this.st状態[i].nPlayer); + y += TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLY(this.st状態[i].nPlayer); + + x -= (TJAPlayer3.Tx.Effects_Hit_Explosion_Big.szTextureSize.Width * (f倍率 - 1.0f) / 2.0f); + y -= (TJAPlayer3.Tx.Effects_Hit_Explosion_Big.szTextureSize.Height * (f倍率 - 1.0f) / 2.0f); + + TJAPlayer3.Tx.Effects_Hit_Explosion_Big.vcScaleRatio.X = f倍率; + TJAPlayer3.Tx.Effects_Hit_Explosion_Big.vcScaleRatio.Y = f倍率; + TJAPlayer3.Tx.Effects_Hit_Explosion_Big.t2D描画(x, y); + } + break; + + case ENoteJudge.Good: + break; + + case ENoteJudge.Miss: + case ENoteJudge.Bad: + break; + } + } + } + } + + for (int i = 0; i < 45; i++) + { + if( TJAPlayer3.Skin.nScrollFieldX[0] != 414 ) + break; + + if (this.st大音符花火[i].b使用中) + { + this.st大音符花火[i].n前回のValue = this.st大音符花火[i].ct進行.CurrentValue; + this.st大音符花火[i].ct進行.Tick(); + if (this.st大音符花火[i].ct進行.IsEnded) + { + this.st大音符花火[i].ct進行.Stop(); + this.st大音符花火[i].b使用中 = false; + } + /* + Matrix mat = Matrix.Identity; + + mat *= Matrix.Translation(this.st大音符花火[i].fX - SampleFramework.GameWindowSize.Width / 2, -(this.st大音符花火[i].fY - SampleFramework.GameWindowSize.Height / 2), 0f); + */ + float fX = this.st大音符花火[i].fX - ( 192 / 2 ); + float fY = this.st大音符花火[i].fY - ( 192 / 2 ); + + //if(CDTXMania.Tx.Effects_Hit_FireWorks[ 0 ] != null && this.st大音符花火[ i ].nColor == 0 ) + //{ + // if( this.st大音符花火[ i ].n開始フレーム <= this.st大音符花火[ i ].ct進行.n現在の値 && this.st大音符花火[ i ].n終了フレーム > this.st大音符花火[ i ].ct進行.n現在の値 ) + // { + // //this.tx大音符花火[ 0 ].t3D描画(CDTXMania.app.Device, mat, new Rectangle( ( this.st大音符花火[i].ct進行.n現在の値 - this.st大音符花火[ i ].n開始フレーム ) * 192, 0, 192, 192 )); + // //this.tx大音符花火[ 0 ].t3D描画( CDTXMania.app.Device, mat, fX, fY, new Rectangle( ( this.st大音符花火[i].ct進行.n現在の値 - this.st大音符花火[ i ].n開始フレーム ) * 192, 0, 192, 192 ) ); + // CDTXMania.Tx.Effects_Hit_FireWorks[ 0 ].t2D描画( CDTXMania.app.Device, (int)fX, (int)fY, new Rectangle( ( this.st大音符花火[i].ct進行.n現在の値 - this.st大音符花火[ i ].n開始フレーム ) * 192, 0, 192, 192 ) ); + // } + //} + ////if(CDTXMania.Tx.Effects_Hit_FireWorks[ 1 ] != null && this.st大音符花火[ i ].nColor == 1 ) + //{ + // if( this.st大音符花火[ i ].n開始フレーム <= this.st大音符花火[ i ].ct進行.n現在の値 && this.st大音符花火[ i ].n終了フレーム > this.st大音符花火[ i ].ct進行.n現在の値 ) + // { + // //this.tx大音符花火[ 1 ].t3D描画( CDTXMania.app.Device, mat, fX, fY, ); + // //CDTXMania.Tx.Effects_Hit_FireWorks[ 1 ].t2D描画( CDTXMania.app.Device, (int)fX, (int)fY, new Rectangle( ( this.st大音符花火[i].ct進行.n現在の値 - this.st大音符花火[ i ].n開始フレーム ) * 192, 0, 192, 192 ) ); + // } + //} + } + + } + + for (int i = 0; i < 256; i++) + { + if (this.st紙吹雪[i].b使用中) + { + this.st紙吹雪[i].n前回のValue = this.st紙吹雪[i].ct進行.CurrentValue; + this.st紙吹雪[i].ct進行.Tick(); + if (this.st紙吹雪[i].ct進行.IsEnded) + { + this.st紙吹雪[i].ct進行.Stop(); + this.st紙吹雪[i].b使用中 = false; + } + else if( this.st紙吹雪[ i ].fX > 1300 || this.st紙吹雪[ i ].fX < -20 ) + { + this.st紙吹雪[i].ct進行.Stop(); + this.st紙吹雪[i].b使用中 = false; + } + for (int n = this.st紙吹雪[i].n前回のValue; n < this.st紙吹雪[i].ct進行.CurrentValue; n++) + { + this.st紙吹雪[i].fX -= this.st紙吹雪[i].f加速度X; + this.st紙吹雪[i].fY -= this.st紙吹雪[i].f加速度Y; + this.st紙吹雪[i].f加速度X *= this.st紙吹雪[i].f加速度の加速度X; + this.st紙吹雪[i].f加速度Y *= this.st紙吹雪[i].f加速度の加速度Y; + this.st紙吹雪[i].f加速度Y -= this.st紙吹雪[i].f重力加速度; + } + /* + Matrix mat = Matrix.Identity; + + float x = (float)(this.st紙吹雪[i].f半径 * Math.Cos((Math.PI / 2 * this.st紙吹雪[i].ct進行.n現在の値) / 100.0)) * 2.3f; + mat *= Matrix.Scaling(x, x, 1f); + mat *= Matrix.Translation(this.st紙吹雪[i].fX - SampleFramework.GameWindowSize.Width / 2, -(this.st紙吹雪[i].fY - SampleFramework.GameWindowSize.Height / 2), 0f); + */ + + /*if (this.tx紙吹雪 != null) + { + this.tx紙吹雪.t3D描画(CDTXMania.app.Device, mat, new Rectangle( 32 * this.st紙吹雪[ i ].nGraphic, 32 * this.st紙吹雪[ i ].nColor, 32, 32 )); + + } */ + } + + } + } + return 0; + } + + + // その他 + + #region [ private ] + //----------------- + //private CTextureAf txアタックエフェクトUpper; + //private CTexture txアタックエフェクトUpper_big; + //private CTextureAf[] tx大音符花火 = new CTextureAf[2]; + //private CTexture tx紙吹雪; + + protected STSTATUS[] st状態 = new STSTATUS[ 3 * 4 ]; + protected STSTATUS_B[] st状態_大 = new STSTATUS_B[ 3 * 4 ]; + private ST大音符花火[] st大音符花火 = new ST大音符花火[45]; + + protected int[] nX座標 = new int[] { 450, 521, 596, 686, 778, 863, 970, 1070, 1150 }; + protected int[] nY座標 = new int[] { 172, 108, 50, 8, -10, -60, -5, 30, 90 }; + protected int[] nY座標P2 = new int[] { 172, 108, 50, 8, -10, -60, -5, 30, 90 }; + + [StructLayout(LayoutKind.Sequential)] + protected struct STSTATUS + { + public bool b使用中; + public CCounter ct進行; + public ENoteJudge judge; + public int nIsBig; + public int n透明度; + public int nPlayer; + } + [StructLayout(LayoutKind.Sequential)] + protected struct STSTATUS_B + { + public CCounter ct進行; + public ENoteJudge judge; + public int nIsBig; + public int n透明度; + public int nPlayer; + } + + [StructLayout(LayoutKind.Sequential)] + private struct ST大音符花火 + { + public int nColor; + public bool b使用中; + public CCounter ct進行; + public int n前回のValue; + public float fX; + public float fY; + public int n開始フレーム; + public int n終了フレーム; + } + + private ST紙吹雪[] st紙吹雪 = new ST紙吹雪[ 256 ]; + [StructLayout( LayoutKind.Sequential )] + private struct ST紙吹雪 + { + public int nGraphic; + public int nColor; + public bool b使用中; + public CCounter ct進行; + public int n前回のValue; + public float fX; + public float fY; + public float f加速度X; + public float f加速度Y; + public float f加速度の加速度X; + public float f加速度の加速度Y; + public float f重力加速度; + public float f半径; + public float f角度; + } + //----------------- + #endregion + } +} +  diff --git a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏DrumsFooter.cs b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplFooter.cs similarity index 92% rename from OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏DrumsFooter.cs rename to OpenTaiko/src/Stages/07.Game/Taiko/CActImplFooter.cs index 39cb2798..4f8b4c76 100644 --- a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏DrumsFooter.cs +++ b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplFooter.cs @@ -1,76 +1,76 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Drawing; -using System.Runtime.InteropServices; -using FDK; - -namespace TJAPlayer3 -{ - internal class CAct演奏DrumsFooter : CActivity - { - /// - /// フッター - /// - public CAct演奏DrumsFooter() - { - base.IsDeActivated = true; - } - - public override void Activate() - { - var footerDir = CSkin.Path($"{TextureLoader.BASE}{TextureLoader.GAME}{TextureLoader.FOOTER}"); - var preset = HScenePreset.GetBGPreset(); - - if (System.IO.Directory.Exists(footerDir)) - { - Random random = new Random(); - - var upDirs = System.IO.Directory.GetFiles(footerDir); - if (upDirs.Length > 0) - { - var _presetPath = (preset != null && preset.FooterSet != null) ? $@"{footerDir}" + preset.FooterSet[random.Next(0, preset.FooterSet.Length)] + ".png" : ""; - var path = (preset != null && System.IO.File.Exists(_presetPath)) - ? _presetPath - : upDirs[random.Next(0, upDirs.Length)]; - - Mob_Footer = TJAPlayer3.tテクスチャの生成(path); - } - } - - base.Activate(); - } - - public override void DeActivate() - { - TJAPlayer3.tDisposeSafely(ref Mob_Footer); - - base.DeActivate(); - } - - public override void CreateManagedResource() - { - base.CreateManagedResource(); - } - - public override void ReleaseManagedResource() - { - base.ReleaseManagedResource(); - } - - public override int Draw() - { - if (this.Mob_Footer != null) - { - this.Mob_Footer.t2D描画(0, TJAPlayer3.Skin.Resolution[1] - this.Mob_Footer.szTextureSize.Height); - } - return base.Draw(); - } - - #region[ private ] - //----------------- - public CTexture Mob_Footer; - //----------------- - #endregion - } -} +using System; +using System.Collections.Generic; +using System.Text; +using System.Drawing; +using System.Runtime.InteropServices; +using FDK; + +namespace TJAPlayer3 +{ + internal class CActImplFooter : CActivity + { + /// + /// フッター + /// + public CActImplFooter() + { + base.IsDeActivated = true; + } + + public override void Activate() + { + var footerDir = CSkin.Path($"{TextureLoader.BASE}{TextureLoader.GAME}{TextureLoader.FOOTER}"); + var preset = HScenePreset.GetBGPreset(); + + if (System.IO.Directory.Exists(footerDir)) + { + Random random = new Random(); + + var upDirs = System.IO.Directory.GetFiles(footerDir); + if (upDirs.Length > 0) + { + var _presetPath = (preset != null && preset.FooterSet != null) ? $@"{footerDir}" + preset.FooterSet[random.Next(0, preset.FooterSet.Length)] + ".png" : ""; + var path = (preset != null && System.IO.File.Exists(_presetPath)) + ? _presetPath + : upDirs[random.Next(0, upDirs.Length)]; + + Mob_Footer = TJAPlayer3.tテクスチャの生成(path); + } + } + + base.Activate(); + } + + public override void DeActivate() + { + TJAPlayer3.tDisposeSafely(ref Mob_Footer); + + base.DeActivate(); + } + + public override void CreateManagedResource() + { + base.CreateManagedResource(); + } + + public override void ReleaseManagedResource() + { + base.ReleaseManagedResource(); + } + + public override int Draw() + { + if (this.Mob_Footer != null) + { + this.Mob_Footer.t2D描画(0, TJAPlayer3.Skin.Resolution[1] - this.Mob_Footer.szTextureSize.Height); + } + return base.Draw(); + } + + #region[ private ] + //----------------- + public CTexture Mob_Footer; + //----------------- + #endregion + } +} diff --git a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drumsゲージ.cs b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplGauge.cs similarity index 99% rename from OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drumsゲージ.cs rename to OpenTaiko/src/Stages/07.Game/Taiko/CActImplGauge.cs index 949fe3eb..3963420f 100644 --- a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drumsゲージ.cs +++ b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplGauge.cs @@ -8,7 +8,7 @@ using FDK; namespace TJAPlayer3 { - internal class CAct演奏Drumsゲージ : CAct演奏ゲージ共通 + internal class CActImplGauge : CAct演奏ゲージ共通 { // プロパティ @@ -38,7 +38,7 @@ namespace TJAPlayer3 /// _Danger時にゲージの色が変わる演出の実装。 /// _Danger、MAX時のアニメーション実装。 /// - public CAct演奏Drumsゲージ() + public CActImplGauge() { base.IsDeActivated = true; } diff --git a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drums判定文字列.cs b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplJudgeText.cs similarity index 97% rename from OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drums判定文字列.cs rename to OpenTaiko/src/Stages/07.Game/Taiko/CActImplJudgeText.cs index fdd83bd4..a7b3558e 100644 --- a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drums判定文字列.cs +++ b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplJudgeText.cs @@ -8,11 +8,11 @@ using System.Drawing; namespace TJAPlayer3 { - internal class CAct演奏Drums判定文字列 : CActivity + internal class CActImplJudgeText : CActivity { // コンストラクタ - public CAct演奏Drums判定文字列() + public CActImplJudgeText() { base.IsDeActivated = true; } @@ -102,13 +102,13 @@ namespace TJAPlayer3 if (JudgesDict.ContainsKey(judge)) { njudge = JudgesDict[judge]; - } - - if (njudge == 0 && TJAPlayer3.ConfigIni.SimpleMode) - { - return; - } - + } + + if (njudge == 0 && TJAPlayer3.ConfigIni.SimpleMode) + { + return; + } + int height = TJAPlayer3.Tx.Judge.szTextureSize.Height / 5; judgeAnime.rc = new Rectangle(0, (int)njudge * height, TJAPlayer3.Tx.Judge.szTextureSize.Width, height); diff --git a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drumsレーン.cs b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplLane.cs similarity index 99% rename from OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drumsレーン.cs rename to OpenTaiko/src/Stages/07.Game/Taiko/CActImplLane.cs index 887311fd..5433d2a0 100644 --- a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drumsレーン.cs +++ b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplLane.cs @@ -6,9 +6,9 @@ using FDK; namespace TJAPlayer3 { - internal class CAct演奏Drumsレーン : CActivity + internal class CActImplLane : CActivity { - public CAct演奏Drumsレーン() + public CActImplLane() { base.IsDeActivated = true; } @@ -103,13 +103,13 @@ namespace TJAPlayer3 _laneNull = true; break; } - } - + } + #endregion - - if (TJAPlayer3.ConfigIni.SimpleMode) - { - TJAPlayer3.Tx.Lane_Base[(int)nAfter[i]].t2D描画(x[i], y[i]); + + if (TJAPlayer3.ConfigIni.SimpleMode) + { + TJAPlayer3.Tx.Lane_Base[(int)nAfter[i]].t2D描画(x[i], y[i]); } else if( this.ct分岐アニメ進行[ i ].IsTicked && !_laneNull) { diff --git a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drumsレーン太鼓.cs b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplLaneTaiko.cs similarity index 98% rename from OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drumsレーン太鼓.cs rename to OpenTaiko/src/Stages/07.Game/Taiko/CActImplLaneTaiko.cs index e6aa3409..d570fc96 100644 --- a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drumsレーン太鼓.cs +++ b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplLaneTaiko.cs @@ -1,1068 +1,1068 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Drawing; -using System.Runtime.InteropServices; -using System.Diagnostics; -using FDK; - -using Rectangle = System.Drawing.Rectangle; -using Point = System.Drawing.Point; -using Color = System.Drawing.Color; - -namespace TJAPlayer3 -{ - internal class CAct演奏Drumsレーン太鼓 : CActivity - { - /// - /// レーンを描画するクラス。 - /// - /// - /// - public CAct演奏Drumsレーン太鼓() - { - base.IsDeActivated = true; - } - - public override void Activate() - { - for (int i = 0; i < 5; i++) - { - this.st状態[i].ct進行 = new CCounter(); - this.stBranch[i].ct分岐アニメ進行 = new CCounter(); - this.stBranch[i].nフラッシュ制御タイマ = -1; - this.stBranch[i].nBranchレイヤー透明度 = 0; - this.stBranch[i].nBranch文字透明度 = 0; - this.stBranch[i].nY座標 = 0; - - this.n総移動時間[i] = -1; - } - this.ctゴーゴー = new CCounter(); - - - this.ctゴーゴー炎 = new CCounter(0, 6, 50, TJAPlayer3.Timer); - base.Activate(); - } - - public override void DeActivate() - { - for (int i = 0; i < 5; i++) - { - this.st状態[i].ct進行 = null; - this.stBranch[i].ct分岐アニメ進行 = null; - } - this.ctゴーゴー = null; - - base.DeActivate(); - } - - public override void CreateManagedResource() - { - base.CreateManagedResource(); - } - - public override void ReleaseManagedResource() - { - base.ReleaseManagedResource(); - } - - public override int Draw() - { - if (base.IsFirstDraw) - { - for (int i = 0; i < 5; i++) - this.stBranch[i].nフラッシュ制御タイマ = (long)(SoundManager.PlayTimer.NowTime * TJAPlayer3.ConfigIni.SongPlaybackSpeed); - base.IsFirstDraw = false; - } - - //それぞれが独立したレイヤーでないといけないのでforループはパーツごとに分離すること。 - - if (TJAPlayer3.ConfigIni.nPlayerCount <= 2 && !TJAPlayer3.ConfigIni.bAIBattleMode) TJAPlayer3.stage演奏ドラム画面.actMtaiko.DrawBackSymbol(); - - #region[ レーン本体 ] - - - int[] x = new int[5]; - int[] y = new int[5]; - - for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) - { - if (TJAPlayer3.ConfigIni.nPlayerCount == 5) - { - x[i] = TJAPlayer3.Skin.Game_Lane_5P[0] + (TJAPlayer3.Skin.Game_UIMove_5P[0] * i); - y[i] = TJAPlayer3.Skin.Game_Lane_5P[1] + (TJAPlayer3.Skin.Game_UIMove_5P[1] * i); - } - else if (TJAPlayer3.ConfigIni.nPlayerCount == 4 || TJAPlayer3.ConfigIni.nPlayerCount == 3) - { - x[i] = TJAPlayer3.Skin.Game_Lane_4P[0] + (TJAPlayer3.Skin.Game_UIMove_4P[0] * i); - y[i] = TJAPlayer3.Skin.Game_Lane_4P[1] + (TJAPlayer3.Skin.Game_UIMove_4P[1] * i); - } - else - { - x[i] = TJAPlayer3.Skin.Game_Lane_X[i]; - y[i] = TJAPlayer3.Skin.Game_Lane_Y[i]; - } - } - - for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) - { - if (i == 1 && TJAPlayer3.ConfigIni.bAIBattleMode && TJAPlayer3.Tx.Lane_Background_AI != null) - TJAPlayer3.Tx.Lane_Background_AI?.t2D描画(x[i], y[i]); - else - TJAPlayer3.Tx.Lane_Background_Main?.t2D描画(x[i], y[i]); - } - - #endregion - - if (TJAPlayer3.ConfigIni.nPlayerCount > 2 && !TJAPlayer3.ConfigIni.bAIBattleMode) TJAPlayer3.stage演奏ドラム画面.actMtaiko.DrawBackSymbol(); - - for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) - { - #region[ 分岐アニメ制御タイマー ] - long num = FDK.SoundManager.PlayTimer.NowTime; - if (num < this.stBranch[i].nフラッシュ制御タイマ) - { - this.stBranch[i].nフラッシュ制御タイマ = num; - } - while ((num - this.stBranch[i].nフラッシュ制御タイマ) >= 30) - { - if (this.stBranch[i].nBranchレイヤー透明度 <= 255) - { - this.stBranch[i].nBranchレイヤー透明度 += 10; - } - - if (this.stBranch[i].nBranch文字透明度 >= 0) - { - this.stBranch[i].nBranch文字透明度 -= 10; - } - - if (this.stBranch[i].nY座標 != 0 && this.stBranch[i].nY座標 <= 20) - { - this.stBranch[i].nY座標++; - } - - this.stBranch[i].nフラッシュ制御タイマ += 8; - } - - if (!this.stBranch[i].ct分岐アニメ進行.IsStoped) - { - this.stBranch[i].ct分岐アニメ進行.Tick(); - if (this.stBranch[i].ct分岐アニメ進行.IsEnded) - { - this.stBranch[i].ct分岐アニメ進行.Stop(); - } - } - #endregion - } - #region[ 分岐レイヤー ] - for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) - { - if (TJAPlayer3.stage演奏ドラム画面.bUseBranch[i] == true) - { - #region[ 動いていない ] - switch (TJAPlayer3.stage演奏ドラム画面.nレーン用表示コース[i]) - { - case CDTX.ECourse.eNormal: - if (TJAPlayer3.Tx.Lane_Base[0] != null) - { - TJAPlayer3.Tx.Lane_Base[0].Opacity = 255; - TJAPlayer3.Tx.Lane_Base[0].t2D描画(x[i], y[i]); - } - break; - case CDTX.ECourse.eExpert: - if (TJAPlayer3.Tx.Lane_Base[1] != null) - { - TJAPlayer3.Tx.Lane_Base[1].Opacity = 255; - TJAPlayer3.Tx.Lane_Base[1].t2D描画(x[i], y[i]); - } - break; - case CDTX.ECourse.eMaster: - if (TJAPlayer3.Tx.Lane_Base[2] != null) - { - TJAPlayer3.Tx.Lane_Base[2].Opacity = 255; - TJAPlayer3.Tx.Lane_Base[2].t2D描画(x[i], y[i]); - } - break; - } - #endregion - - if (TJAPlayer3.ConfigIni.nBranchAnime == 1) - { - #region[ AC7~14風の背後レイヤー ] - if (this.stBranch[i].ct分岐アニメ進行.IsTicked) - { - int n透明度 = ((100 - this.stBranch[i].ct分岐アニメ進行.CurrentValue) * 0xff) / 100; - - if (this.stBranch[i].ct分岐アニメ進行.IsEnded) - { - n透明度 = 255; - this.stBranch[i].ct分岐アニメ進行.Stop(); - } - - #region[ 普通譜面_レベルアップ ] - //普通→玄人 - if (this.stBranch[i].nBefore == CDTX.ECourse.eNormal && this.stBranch[i].nAfter == CDTX.ECourse.eExpert) - { - if (TJAPlayer3.Tx.Lane_Base[0] != null && TJAPlayer3.Tx.Lane_Base[1] != null) - { - TJAPlayer3.Tx.Lane_Base[0].t2D描画(x[i], y[i]); - TJAPlayer3.Tx.Lane_Base[1].Opacity = this.stBranch[i].nBranchレイヤー透明度; - TJAPlayer3.Tx.Lane_Base[1].t2D描画(x[i], y[i]); - } - } - //普通→達人 - if (this.stBranch[i].nBefore == CDTX.ECourse.eNormal && this.stBranch[i].nAfter == CDTX.ECourse.eMaster) - { - if (this.stBranch[i].ct分岐アニメ進行.CurrentValue < 100) - { - n透明度 = ((100 - this.stBranch[i].ct分岐アニメ進行.CurrentValue) * 0xff) / 100; - } - if (TJAPlayer3.Tx.Lane_Base[0] != null && TJAPlayer3.Tx.Lane_Base[2] != null) - { - TJAPlayer3.Tx.Lane_Base[0].t2D描画(x[i], y[i]); - TJAPlayer3.Tx.Lane_Base[2].t2D描画(x[i], y[i]); - TJAPlayer3.Tx.Lane_Base[2].Opacity = this.stBranch[i].nBranchレイヤー透明度; - } - } - #endregion - #region[ 玄人譜面_レベルアップ ] - if (this.stBranch[i].nBefore == CDTX.ECourse.eExpert && this.stBranch[i].nAfter == CDTX.ECourse.eMaster) - { - if (TJAPlayer3.Tx.Lane_Base[1] != null && TJAPlayer3.Tx.Lane_Base[2] != null) - { - TJAPlayer3.Tx.Lane_Base[1].t2D描画(x[i], y[i]); - TJAPlayer3.Tx.Lane_Base[2].t2D描画(x[i], y[i]); - TJAPlayer3.Tx.Lane_Base[2].Opacity = this.stBranch[i].nBranchレイヤー透明度; - } - } - #endregion - #region[ 玄人譜面_レベルダウン ] - if (this.stBranch[i].nBefore == CDTX.ECourse.eExpert && this.stBranch[i].nAfter == CDTX.ECourse.eNormal) - { - if (TJAPlayer3.Tx.Lane_Base[1] != null && TJAPlayer3.Tx.Lane_Base[0] != null) - { - TJAPlayer3.Tx.Lane_Base[1].t2D描画(x[i], y[i]); - TJAPlayer3.Tx.Lane_Base[0].t2D描画(x[i], y[i]); - TJAPlayer3.Tx.Lane_Base[0].Opacity = this.stBranch[i].nBranchレイヤー透明度; - } - } - #endregion - #region[ 達人譜面_レベルダウン ] - if (this.stBranch[i].nBefore == CDTX.ECourse.eMaster && this.stBranch[i].nAfter == CDTX.ECourse.eNormal) - { - if (TJAPlayer3.Tx.Lane_Base[2] != null && TJAPlayer3.Tx.Lane_Base[0] != null) - { - TJAPlayer3.Tx.Lane_Base[2].t2D描画(x[i], y[i]); - TJAPlayer3.Tx.Lane_Base[0].t2D描画(x[i], y[i]); - TJAPlayer3.Tx.Lane_Base[0].Opacity = this.stBranch[i].nBranchレイヤー透明度; - } - } - #endregion - } - #endregion - } - else if (TJAPlayer3.ConfigIni.nBranchAnime == 0) - { - TJAPlayer3.stage演奏ドラム画面.actLane.Draw(); - } - } - } - #endregion - - for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) - { - #region[ ゴーゴータイムレーン背景レイヤー ] - if (TJAPlayer3.Tx.Lane_Background_GoGo != null && TJAPlayer3.stage演奏ドラム画面.bIsGOGOTIME[i]) - { - if (!this.ctゴーゴー.IsStoped) - { - this.ctゴーゴー.Tick(); - } - - if (this.ctゴーゴー.CurrentValue <= 4) - { - TJAPlayer3.Tx.Lane_Background_GoGo.vcScaleRatio.Y = 0.2f; - TJAPlayer3.Tx.Lane_Background_GoGo.t2D描画(x[i], y[i] + 54); - } - else if (this.ctゴーゴー.CurrentValue <= 5) - { - TJAPlayer3.Tx.Lane_Background_GoGo.vcScaleRatio.Y = 0.4f; - TJAPlayer3.Tx.Lane_Background_GoGo.t2D描画(x[i], y[i] + 40); - } - else if (this.ctゴーゴー.CurrentValue <= 6) - { - TJAPlayer3.Tx.Lane_Background_GoGo.vcScaleRatio.Y = 0.6f; - TJAPlayer3.Tx.Lane_Background_GoGo.t2D描画(x[i], y[i] + 26); - } - else if (this.ctゴーゴー.CurrentValue <= 8) - { - TJAPlayer3.Tx.Lane_Background_GoGo.vcScaleRatio.Y = 0.8f; - TJAPlayer3.Tx.Lane_Background_GoGo.t2D描画(x[i], y[i] + 13); - } - else if (this.ctゴーゴー.CurrentValue >= 9) - { - TJAPlayer3.Tx.Lane_Background_GoGo.vcScaleRatio.Y = 1.0f; - TJAPlayer3.Tx.Lane_Background_GoGo.t2D描画(x[i], y[i]); - } - } - #endregion - } - - for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) - { - if (TJAPlayer3.stage演奏ドラム画面.bUseBranch[i] == true) - { - #region NullCheck - - bool _laneNull = false; - - for (int j = 0; j < TJAPlayer3.Tx.Lane_Text.Length; j++) - { - if (TJAPlayer3.Tx.Lane_Text[j] == null) - { - _laneNull = true; - break; - } - } - - #endregion - - if (TJAPlayer3.ConfigIni.SimpleMode) - { - switch (TJAPlayer3.stage演奏ドラム画面.nレーン用表示コース[i]) - { - case CDTX.ECourse.eNormal: - TJAPlayer3.Tx.Lane_Text[0].Opacity = 255; - TJAPlayer3.Tx.Lane_Text[0].t2D描画(x[i], y[i]); - break; - case CDTX.ECourse.eExpert: - TJAPlayer3.Tx.Lane_Text[1].Opacity = 255; - TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], y[i]); - break; - case CDTX.ECourse.eMaster: - TJAPlayer3.Tx.Lane_Text[2].Opacity = 255; - TJAPlayer3.Tx.Lane_Text[2].t2D描画(x[i], y[i]); - break; - } - } - else if (TJAPlayer3.ConfigIni.nBranchAnime == 0 && !_laneNull) - { - if (!this.stBranch[i].ct分岐アニメ進行.IsTicked) - { - switch (TJAPlayer3.stage演奏ドラム画面.nレーン用表示コース[i]) - { - case CDTX.ECourse.eNormal: - TJAPlayer3.Tx.Lane_Text[0].Opacity = 255; - TJAPlayer3.Tx.Lane_Text[0].t2D描画(x[i], y[i]); - break; - case CDTX.ECourse.eExpert: - TJAPlayer3.Tx.Lane_Text[1].Opacity = 255; - TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], y[i]); - break; - case CDTX.ECourse.eMaster: - TJAPlayer3.Tx.Lane_Text[2].Opacity = 255; - TJAPlayer3.Tx.Lane_Text[2].t2D描画(x[i], y[i]); - break; - } - } - if (this.stBranch[i].ct分岐アニメ進行.IsTicked) - { - #region[ 普通譜面_レベルアップ ] - //普通→玄人 - if (this.stBranch[i].nBefore == 0 && this.stBranch[i].nAfter == CDTX.ECourse.eExpert) - { - TJAPlayer3.Tx.Lane_Text[0].Opacity = 255; - TJAPlayer3.Tx.Lane_Text[1].Opacity = 255; - TJAPlayer3.Tx.Lane_Text[2].Opacity = 255; - - TJAPlayer3.Tx.Lane_Text[0].Opacity = this.stBranch[i].ct分岐アニメ進行.CurrentValue > 100 ? 0 : (255 - ((this.stBranch[i].ct分岐アニメ進行.CurrentValue * 0xff) / 60)); - //CDTXMania.Tx.Lane_Text[1].n透明度 = this.ct分岐アニメ進行.n現在の値 > 100 ? 255 : ( ( ( this.ct分岐アニメ進行.n現在の値 * 0xff ) / 60 ) ); - if (this.stBranch[i].ct分岐アニメ進行.CurrentValue < 60) - { - this.stBranch[i].nY = this.stBranch[i].ct分岐アニメ進行.CurrentValue / 2; - TJAPlayer3.Tx.Lane_Text[0].t2D描画(x[i], y[i] + this.stBranch[i].nY); - TJAPlayer3.Tx.Lane_Text[1].Opacity = 255; - TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], (y[i] - 30) + this.stBranch[i].nY); - } - else - { - TJAPlayer3.Tx.Lane_Text[1].Opacity = 255; - TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], y[i]); - } - - } - - //普通→達人 - if (this.stBranch[i].nBefore == 0 && this.stBranch[i].nAfter == CDTX.ECourse.eMaster) - { - TJAPlayer3.Tx.Lane_Text[0].Opacity = 255; - TJAPlayer3.Tx.Lane_Text[1].Opacity = 255; - TJAPlayer3.Tx.Lane_Text[2].Opacity = 255; - if (this.stBranch[i].ct分岐アニメ進行.CurrentValue < 60) - { - this.stBranch[i].nY = this.stBranch[i].ct分岐アニメ進行.CurrentValue / 2; - TJAPlayer3.Tx.Lane_Text[0].t2D描画(x[i], (y[i] - 12) + this.stBranch[i].nY); - TJAPlayer3.Tx.Lane_Text[0].Opacity = this.stBranch[i].ct分岐アニメ進行.CurrentValue > 100 ? 0 : (255 - ((this.stBranch[i].ct分岐アニメ進行.CurrentValue * 0xff) / 100)); - TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], (y[i] - 20) + this.stBranch[i].nY); - } - //if( this.stBranch[ i ].ct分岐アニメ進行.n現在の値 >= 5 && this.stBranch[ i ].ct分岐アニメ進行.n現在の値 < 60 ) - //{ - // this.stBranch[ i ].nY = this.stBranch[ i ].ct分岐アニメ進行.n現在の値 / 2; - // this.tx普通譜面[ 1 ].t2D描画(CDTXMania.app.Device, 333, CDTXMania.Skin.nScrollFieldY[ i ] + this.stBranch[ i ].nY); - // this.tx普通譜面[ 1 ].n透明度 = this.stBranch[ i ].ct分岐アニメ進行.n現在の値 > 100 ? 0 : ( 255 - ( ( this.stBranch[ i ].ct分岐アニメ進行.n現在の値 * 0xff) / 100)); - // this.tx玄人譜面[ 1 ].t2D描画(CDTXMania.app.Device, 333, ( CDTXMania.Skin.nScrollFieldY[ i ] - 10 ) + this.stBranch[ i ].nY); - //} - else if (this.stBranch[i].ct分岐アニメ進行.CurrentValue >= 60 && this.stBranch[i].ct分岐アニメ進行.CurrentValue < 150) - { - this.stBranch[i].nY = 21; - TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], y[i]); - TJAPlayer3.Tx.Lane_Text[1].Opacity = 255; - TJAPlayer3.Tx.Lane_Text[2].Opacity = 255; - } - else if (this.stBranch[i].ct分岐アニメ進行.CurrentValue >= 150 && this.stBranch[i].ct分岐アニメ進行.CurrentValue < 210) - { - this.stBranch[i].nY = ((this.stBranch[i].ct分岐アニメ進行.CurrentValue - 150) / 2); - TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], y[i] + this.stBranch[i].nY); - TJAPlayer3.Tx.Lane_Text[1].Opacity = this.stBranch[i].ct分岐アニメ進行.CurrentValue > 100 ? 0 : (255 - ((this.stBranch[i].ct分岐アニメ進行.CurrentValue * 0xff) / 100)); - TJAPlayer3.Tx.Lane_Text[2].t2D描画(x[i], (y[i] - 20) + this.stBranch[i].nY); - } - else - { - TJAPlayer3.Tx.Lane_Text[2].Opacity = 255; - TJAPlayer3.Tx.Lane_Text[2].t2D描画(x[i], y[i]); - } - } - #endregion - #region[ 玄人譜面_レベルアップ ] - //玄人→達人 - if (this.stBranch[i].nBefore == CDTX.ECourse.eExpert && this.stBranch[i].nAfter == CDTX.ECourse.eMaster) - { - TJAPlayer3.Tx.Lane_Text[0].Opacity = 255; - TJAPlayer3.Tx.Lane_Text[1].Opacity = 255; - TJAPlayer3.Tx.Lane_Text[2].Opacity = 255; - - TJAPlayer3.Tx.Lane_Text[1].Opacity = this.stBranch[i].ct分岐アニメ進行.CurrentValue > 100 ? 0 : (255 - ((this.stBranch[i].ct分岐アニメ進行.CurrentValue * 0xff) / 60)); - if (this.stBranch[i].ct分岐アニメ進行.CurrentValue < 60) - { - this.stBranch[i].nY = this.stBranch[i].ct分岐アニメ進行.CurrentValue / 2; - TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], y[i] + this.stBranch[i].nY); - TJAPlayer3.Tx.Lane_Text[2].t2D描画(x[i], (y[i] - 20) + this.stBranch[i].nY); - } - else - { - TJAPlayer3.Tx.Lane_Text[2].t2D描画(x[i], y[i]); - } - } - #endregion - #region[ 玄人譜面_レベルダウン ] - if (this.stBranch[i].nBefore == CDTX.ECourse.eExpert && this.stBranch[i].nAfter == CDTX.ECourse.eNormal) - { - TJAPlayer3.Tx.Lane_Text[0].Opacity = 255; - TJAPlayer3.Tx.Lane_Text[1].Opacity = 255; - TJAPlayer3.Tx.Lane_Text[2].Opacity = 255; - - TJAPlayer3.Tx.Lane_Text[1].Opacity = this.stBranch[i].ct分岐アニメ進行.CurrentValue > 100 ? 0 : (255 - ((this.stBranch[i].ct分岐アニメ進行.CurrentValue * 0xff) / 60)); - if (this.stBranch[i].ct分岐アニメ進行.CurrentValue < 60) - { - this.stBranch[i].nY = this.stBranch[i].ct分岐アニメ進行.CurrentValue / 2; - TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], y[i] - this.stBranch[i].nY); - TJAPlayer3.Tx.Lane_Text[0].t2D描画(x[i], (y[i] + 30) - this.stBranch[i].nY); - } - else - { - TJAPlayer3.Tx.Lane_Text[0].t2D描画(x[i], y[i]); - } - } - #endregion - #region[ 達人譜面_レベルダウン ] - if (this.stBranch[i].nBefore == CDTX.ECourse.eMaster && this.stBranch[i].nAfter == CDTX.ECourse.eNormal) - { - TJAPlayer3.Tx.Lane_Text[0].Opacity = 255; - TJAPlayer3.Tx.Lane_Text[1].Opacity = 255; - TJAPlayer3.Tx.Lane_Text[2].Opacity = 255; - - if (this.stBranch[i].ct分岐アニメ進行.CurrentValue < 60) - { - this.stBranch[i].nY = this.stBranch[i].ct分岐アニメ進行.CurrentValue / 2; - TJAPlayer3.Tx.Lane_Text[2].Opacity = this.stBranch[i].ct分岐アニメ進行.CurrentValue > 100 ? 0 : (255 - ((this.stBranch[i].ct分岐アニメ進行.CurrentValue * 0xff) / 60)); - TJAPlayer3.Tx.Lane_Text[2].t2D描画(x[i], y[i] - this.stBranch[i].nY); - TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], (y[i] + 30) - this.stBranch[i].nY); - } - else if (this.stBranch[i].ct分岐アニメ進行.CurrentValue >= 60 && this.stBranch[i].ct分岐アニメ進行.CurrentValue < 150) - { - this.stBranch[i].nY = 21; - TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], y[i]); - TJAPlayer3.Tx.Lane_Text[1].Opacity = 255; - TJAPlayer3.Tx.Lane_Text[2].Opacity = 255; - } - else if (this.stBranch[i].ct分岐アニメ進行.CurrentValue >= 150 && this.stBranch[i].ct分岐アニメ進行.CurrentValue < 210) - { - this.stBranch[i].nY = ((this.stBranch[i].ct分岐アニメ進行.CurrentValue - 150) / 2); - TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], y[i] - this.stBranch[i].nY); - TJAPlayer3.Tx.Lane_Text[1].Opacity = this.stBranch[i].ct分岐アニメ進行.CurrentValue > 100 ? 0 : (255 - ((this.stBranch[i].ct分岐アニメ進行.CurrentValue * 0xff) / 100)); - TJAPlayer3.Tx.Lane_Text[0].t2D描画(x[i], (y[i] + 30) - this.stBranch[i].nY); - } - else if (this.stBranch[i].ct分岐アニメ進行.CurrentValue >= 210) - { - TJAPlayer3.Tx.Lane_Text[0].Opacity = 255; - TJAPlayer3.Tx.Lane_Text[0].t2D描画(x[i], y[i]); - } - } - if (this.stBranch[i].nBefore == CDTX.ECourse.eMaster && this.stBranch[i].nAfter == CDTX.ECourse.eExpert) - { - TJAPlayer3.Tx.Lane_Text[0].Opacity = 255; - TJAPlayer3.Tx.Lane_Text[1].Opacity = 255; - TJAPlayer3.Tx.Lane_Text[2].Opacity = 255; - - TJAPlayer3.Tx.Lane_Text[2].Opacity = this.stBranch[i].ct分岐アニメ進行.CurrentValue > 100 ? 0 : (255 - ((this.stBranch[i].ct分岐アニメ進行.CurrentValue * 0xff) / 60)); - if (this.stBranch[i].ct分岐アニメ進行.CurrentValue < 60) - { - this.stBranch[i].nY = this.stBranch[i].ct分岐アニメ進行.CurrentValue / 2; - TJAPlayer3.Tx.Lane_Text[2].t2D描画(x[i], y[i] - this.stBranch[i].nY); - TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], (y[i] + 30) - this.stBranch[i].nY); - } - else - { - TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], y[i]); - } - - } - #endregion - } - } - else if (!_laneNull) - { - if (this.stBranch[i].nY座標 == 21) - { - this.stBranch[i].nY座標 = 0; - } - - if (this.stBranch[i].nY座標 == 0) - { - switch (TJAPlayer3.stage演奏ドラム画面.nレーン用表示コース[i]) - { - case CDTX.ECourse.eNormal: - TJAPlayer3.Tx.Lane_Text[0].Opacity = 255; - TJAPlayer3.Tx.Lane_Text[0].t2D描画(x[i], y[i]); - break; - case CDTX.ECourse.eExpert: - TJAPlayer3.Tx.Lane_Text[1].Opacity = 255; - TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], y[i]); - break; - case CDTX.ECourse.eMaster: - TJAPlayer3.Tx.Lane_Text[2].Opacity = 255; - TJAPlayer3.Tx.Lane_Text[2].t2D描画(x[i], y[i]); - break; - } - } - - if (this.stBranch[i].nY座標 != 0) - { - #region[ 普通譜面_レベルアップ ] - //普通→玄人 - if (this.stBranch[i].nBefore == CDTX.ECourse.eNormal && this.stBranch[i].nAfter == CDTX.ECourse.eExpert) - { - TJAPlayer3.Tx.Lane_Text[0].t2D描画(x[i], y[i] - this.stBranch[i].nY座標); - TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], (y[i] + 20) - this.stBranch[i].nY座標); - TJAPlayer3.Tx.Lane_Text[0].Opacity = this.stBranch[i].nBranchレイヤー透明度; - } - //普通→達人 - if (this.stBranch[i].nBefore == CDTX.ECourse.eNormal && this.stBranch[i].nAfter == CDTX.ECourse.eMaster) - { - TJAPlayer3.Tx.Lane_Text[0].t2D描画(x[i], y[i] - this.stBranch[i].nY座標); - TJAPlayer3.Tx.Lane_Text[2].t2D描画(x[i], (y[i] + 20) - this.stBranch[i].nY座標); - TJAPlayer3.Tx.Lane_Text[0].Opacity = this.stBranch[i].nBranchレイヤー透明度; - } - #endregion - #region[ 玄人譜面_レベルアップ ] - //玄人→達人 - if (this.stBranch[i].nBefore == CDTX.ECourse.eExpert && this.stBranch[i].nAfter == CDTX.ECourse.eMaster) - { - TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], y[i] - this.stBranch[i].nY座標); - TJAPlayer3.Tx.Lane_Text[2].t2D描画(x[i], (y[i] + 20) - this.stBranch[i].nY座標); - TJAPlayer3.Tx.Lane_Text[1].Opacity = this.stBranch[i].nBranchレイヤー透明度; - } - #endregion - #region[ 玄人譜面_レベルダウン ] - if (this.stBranch[i].nBefore == CDTX.ECourse.eExpert && this.stBranch[i].nAfter == CDTX.ECourse.eNormal) - { - TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], y[i] + this.stBranch[i].nY座標); - TJAPlayer3.Tx.Lane_Text[0].t2D描画(x[i], (y[i] - 24) + this.stBranch[i].nY座標); - TJAPlayer3.Tx.Lane_Text[1].Opacity = this.stBranch[i].nBranchレイヤー透明度; - } - #endregion - #region[ 達人譜面_レベルダウン ] - if (this.stBranch[i].nBefore == CDTX.ECourse.eMaster && this.stBranch[i].nAfter == CDTX.ECourse.eNormal) - { - TJAPlayer3.Tx.Lane_Text[2].t2D描画(x[i], y[i] + this.stBranch[i].nY座標); - TJAPlayer3.Tx.Lane_Text[0].t2D描画(x[i], (y[i] - 24) + this.stBranch[i].nY座標); - TJAPlayer3.Tx.Lane_Text[2].Opacity = this.stBranch[i].nBranchレイヤー透明度; - } - if (this.stBranch[i].nBefore == CDTX.ECourse.eMaster && this.stBranch[i].nAfter == CDTX.ECourse.eExpert) - { - TJAPlayer3.Tx.Lane_Text[2].t2D描画(x[i], y[i] + this.stBranch[i].nY座標); - TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], (y[i] - 24) + this.stBranch[i].nY座標); - TJAPlayer3.Tx.Lane_Text[2].Opacity = this.stBranch[i].nBranchレイヤー透明度; - } - #endregion - } - } - - } - } - - - if (TJAPlayer3.ConfigIni.nPlayerCount <= 2) - { - if (TJAPlayer3.Tx.Lane_Background_Sub != null) - { - TJAPlayer3.Tx.Lane_Background_Sub.t2D描画(TJAPlayer3.Skin.Game_Lane_Sub_X[0], TJAPlayer3.Skin.Game_Lane_Sub_Y[0]); - if (TJAPlayer3.stage演奏ドラム画面.bDoublePlay) - { - TJAPlayer3.Tx.Lane_Background_Sub.t2D描画(TJAPlayer3.Skin.Game_Lane_Sub_X[1], TJAPlayer3.Skin.Game_Lane_Sub_Y[1]); - } - } - } - - - TJAPlayer3.stage演奏ドラム画面.actTaikoLaneFlash.Draw(); - - - - if (TJAPlayer3.Tx.Taiko_Frame[0] != null) - { - // Tower frame (without tamashii jauge) if playing a tower chart - for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) - { - int frame_x; - int frame_y; - if (TJAPlayer3.ConfigIni.nPlayerCount == 5) - { - frame_x = TJAPlayer3.Skin.Game_Taiko_Frame_5P[0] + (TJAPlayer3.Skin.Game_UIMove_5P[0] * i); - frame_y = TJAPlayer3.Skin.Game_Taiko_Frame_5P[1] + (TJAPlayer3.Skin.Game_UIMove_5P[1] * i); - } - else if (TJAPlayer3.ConfigIni.nPlayerCount == 4 || TJAPlayer3.ConfigIni.nPlayerCount == 3) - { - frame_x = TJAPlayer3.Skin.Game_Taiko_Frame_4P[0] + (TJAPlayer3.Skin.Game_UIMove_4P[0] * i); - frame_y = TJAPlayer3.Skin.Game_Taiko_Frame_4P[1] + (TJAPlayer3.Skin.Game_UIMove_4P[1] * i); - } - else - { - frame_x = TJAPlayer3.Skin.Game_Taiko_Frame_X[i]; - frame_y = TJAPlayer3.Skin.Game_Taiko_Frame_Y[i]; - } - - CTexture tex = null; - - switch (i) - { - case 0: - { - if (TJAPlayer3.ConfigIni.bTokkunMode) - { - tex = TJAPlayer3.Tx.Taiko_Frame[3]; - } - else if (TJAPlayer3.ConfigIni.bAIBattleMode) - { - tex = TJAPlayer3.Tx.Taiko_Frame[5]; - } - else if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Tower) - { - tex = TJAPlayer3.Tx.Taiko_Frame[2]; - } - else if (TJAPlayer3.ConfigIni.nPlayerCount > 2) - { - tex = TJAPlayer3.Tx.Taiko_Frame[6]; - } - else - { - tex = TJAPlayer3.Tx.Taiko_Frame[0]; - } - } - break; - case 1: - { - if (TJAPlayer3.ConfigIni.bAIBattleMode) - { - tex = TJAPlayer3.Tx.Taiko_Frame[4]; - } - else if (TJAPlayer3.ConfigIni.nPlayerCount > 2) - { - tex = TJAPlayer3.Tx.Taiko_Frame[6]; - } - else - { - tex = TJAPlayer3.Tx.Taiko_Frame[1]; - } - } - break; - case 2: - tex = TJAPlayer3.Tx.Taiko_Frame[6]; - break; - case 3: - tex = TJAPlayer3.Tx.Taiko_Frame[6]; - break; - case 4: - tex = TJAPlayer3.Tx.Taiko_Frame[6]; - break; - } - - tex?.t2D描画(frame_x, frame_y); - } - - /* - if (TJAPlayer3.ConfigIni.bTokkunMode == true && TJAPlayer3.Tx.Taiko_Frame[3] != null) - TJAPlayer3.Tx.Taiko_Frame[3]?.t2D描画(TJAPlayer3.Skin.Game_Taiko_Frame_X[0], TJAPlayer3.Skin.Game_Taiko_Frame_Y[0]); - else if (TJAPlayer3.stage選曲.n確定された曲の難易度[0] == (int)Difficulty.Tower && TJAPlayer3.Tx.Taiko_Frame[2] != null) - TJAPlayer3.Tx.Taiko_Frame[2]?.t2D描画(TJAPlayer3.Skin.Game_Taiko_Frame_X[0], TJAPlayer3.Skin.Game_Taiko_Frame_Y[0]); - else if (TJAPlayer3.ConfigIni.bAIBattleMode && TJAPlayer3.Tx.Taiko_Frame[5] != null) - TJAPlayer3.Tx.Taiko_Frame[5]?.t2D描画(TJAPlayer3.Skin.Game_Taiko_Frame_X[0], TJAPlayer3.Skin.Game_Taiko_Frame_Y[0]); - else - TJAPlayer3.Tx.Taiko_Frame[0]?.t2D描画(TJAPlayer3.Skin.Game_Taiko_Frame_X[0], TJAPlayer3.Skin.Game_Taiko_Frame_Y[0]); - - if (TJAPlayer3.stage演奏ドラム画面.bDoublePlay) - { - if (TJAPlayer3.ConfigIni.bAIBattleMode) - TJAPlayer3.Tx.Taiko_Frame[4]?.t2D描画(TJAPlayer3.Skin.Game_Taiko_Frame_X[1], TJAPlayer3.Skin.Game_Taiko_Frame_Y[1]); - else - TJAPlayer3.Tx.Taiko_Frame[1]?.t2D描画(TJAPlayer3.Skin.Game_Taiko_Frame_X[1], TJAPlayer3.Skin.Game_Taiko_Frame_Y[1]); - } - */ - } - var nTime = (long)(SoundManager.PlayTimer.NowTime * TJAPlayer3.ConfigIni.SongPlaybackSpeed); - - for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) - { - if (this.n総移動時間[i] != -1) - { - if (n移動方向[i] == 1) - { - TJAPlayer3.stage演奏ドラム画面.JPOSCROLLX[i] = this.n移動開始X[i] + (int)((((int)nTime - this.n移動開始時刻[i]) / (double)(this.n総移動時間[i])) * this.n移動距離px[i]); - TJAPlayer3.stage演奏ドラム画面.JPOSCROLLY[i] = this.n移動開始Y[i] + (int)((((int)nTime - this.n移動開始時刻[i]) / (double)(this.n総移動時間[i])) * this.nVerticalJSPos[i]); - //TJAPlayer3.stage演奏ドラム画面.FlyingNotes.StartPointX[i] = this.n移動開始X[i] + (int)((((int)nTime - this.n移動開始時刻[i]) / (double)(this.n総移動時間[i])) * this.n移動距離px[i]); - } - else - { - TJAPlayer3.stage演奏ドラム画面.JPOSCROLLX[i] = this.n移動開始X[i] - (int)((((int)nTime - this.n移動開始時刻[i]) / (double)(this.n総移動時間[i])) * this.n移動距離px[i]); - TJAPlayer3.stage演奏ドラム画面.JPOSCROLLY[i] = this.n移動開始Y[i] - (int)((((int)nTime - this.n移動開始時刻[i]) / (double)(this.n総移動時間[i])) * this.nVerticalJSPos[i]); - //TJAPlayer3.stage演奏ドラム画面.FlyingNotes.StartPointX[i] = this.n移動開始X[i] - (int)((((int)nTime - this.n移動開始時刻[i]) / (double)(this.n総移動時間[i])) * this.n移動距離px[i]); - } - - if (((int)nTime) > this.n移動開始時刻[i] + this.n総移動時間[i]) - { - this.n総移動時間[i] = -1; - TJAPlayer3.stage演奏ドラム画面.JPOSCROLLX[i] = this.n移動目的場所X[i]; - TJAPlayer3.stage演奏ドラム画面.JPOSCROLLY[i] = this.n移動目的場所Y[i]; - //TJAPlayer3.stage演奏ドラム画面.FlyingNotes.StartPointX[i] = this.n移動目的場所X[i]; - } - } - } - - - - - if (TJAPlayer3.ConfigIni.bEnableAVI && TJAPlayer3.DTX.listVD.Count > 0 && TJAPlayer3.stage演奏ドラム画面.ShowVideo) - { - if (TJAPlayer3.Tx.Lane_Background_Main != null) TJAPlayer3.Tx.Lane_Background_Main.Opacity = TJAPlayer3.ConfigIni.nBGAlpha; - if (TJAPlayer3.Tx.Lane_Background_AI != null) TJAPlayer3.Tx.Lane_Background_AI.Opacity = TJAPlayer3.ConfigIni.nBGAlpha; - if (TJAPlayer3.Tx.Lane_Background_Sub != null) TJAPlayer3.Tx.Lane_Background_Sub.Opacity = TJAPlayer3.ConfigIni.nBGAlpha; - if (TJAPlayer3.Tx.Lane_Background_GoGo != null) TJAPlayer3.Tx.Lane_Background_GoGo.Opacity = TJAPlayer3.ConfigIni.nBGAlpha; - } - else - { - if (TJAPlayer3.Tx.Lane_Background_Main != null) TJAPlayer3.Tx.Lane_Background_Main.Opacity = 255; - if (TJAPlayer3.Tx.Lane_Background_AI != null) TJAPlayer3.Tx.Lane_Background_AI.Opacity = 255; - if (TJAPlayer3.Tx.Lane_Background_Sub != null) TJAPlayer3.Tx.Lane_Background_Sub.Opacity = 255; - if (TJAPlayer3.Tx.Lane_Background_GoGo != null) TJAPlayer3.Tx.Lane_Background_GoGo.Opacity = 255; - } - - return base.Draw(); - } - - public void ゴーゴー炎() - { - //判定枠 - if (TJAPlayer3.Tx.Judge_Frame != null) - { - TJAPlayer3.Tx.Judge_Frame.b加算合成 = TJAPlayer3.Skin.Game_JudgeFrame_AddBlend; - for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) - { - TJAPlayer3.Tx.Judge_Frame.t2D描画( - TJAPlayer3.stage演奏ドラム画面.NoteOriginX[i], - TJAPlayer3.stage演奏ドラム画面.NoteOriginY[i], new Rectangle(0, 0, TJAPlayer3.Skin.Game_Notes_Size[0], TJAPlayer3.Skin.Game_Notes_Size[1])); - } - } - - - #region[ ゴーゴー炎 ] - for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) - { - if (TJAPlayer3.stage演奏ドラム画面.bIsGOGOTIME[i] && !TJAPlayer3.ConfigIni.SimpleMode) - { - this.ctゴーゴー炎.TickLoop(); - - if (TJAPlayer3.Tx.Effects_Fire != null) - { - float f倍率 = 1.0f; - - float[] ar倍率 = new float[] { 0.8f, 1.2f, 1.7f, 2.5f, 2.3f, 2.2f, 2.0f, 1.8f, 1.7f, 1.6f, 1.6f, 1.5f, 1.5f, 1.4f, 1.3f, 1.2f, 1.1f, 1.0f }; - - f倍率 = ar倍率[this.ctゴーゴー.CurrentValue]; - - /* - Matrix mat = Matrix.Identity; - mat *= Matrix.Scaling(f倍率, f倍率, 1.0f); - mat *= Matrix.Translation(TJAPlayer3.Skin.nScrollFieldX[i] - SampleFramework.GameWindowSize.Width / 2.0f, -(TJAPlayer3.Skin.nJudgePointY[i] - SampleFramework.GameWindowSize.Height / 2.0f), 0f); - */ - //this.txゴーゴー炎.b加算合成 = true; - - //this.ctゴーゴー.n現在の値 = 6; - - int width = TJAPlayer3.Tx.Effects_Fire.szTextureSize.Width / 7; - int height = TJAPlayer3.Tx.Effects_Fire.szTextureSize.Height; - - float x = -(width * (f倍率 - 1.0f) / 2.0f); - float y = -(height * (f倍率 - 1.0f) / 2.0f); - - if (TJAPlayer3.ConfigIni.nPlayerCount == 5) - { - x += TJAPlayer3.Skin.Game_Effect_Fire_5P[0] + (TJAPlayer3.Skin.Game_UIMove_5P[0] * i); - y += TJAPlayer3.Skin.Game_Effect_Fire_5P[1] + (TJAPlayer3.Skin.Game_UIMove_5P[1] * i); - } - else if (TJAPlayer3.ConfigIni.nPlayerCount == 4 || TJAPlayer3.ConfigIni.nPlayerCount == 3) - { - x += TJAPlayer3.Skin.Game_Effect_Fire_4P[0] + (TJAPlayer3.Skin.Game_UIMove_4P[0] * i); - y += TJAPlayer3.Skin.Game_Effect_Fire_4P[1] + (TJAPlayer3.Skin.Game_UIMove_4P[1] * i); - } - else - { - x += TJAPlayer3.Skin.Game_Effect_Fire_X[i]; - y += TJAPlayer3.Skin.Game_Effect_Fire_Y[i]; - } - - TJAPlayer3.Tx.Effects_Fire.vcScaleRatio.X = f倍率; - TJAPlayer3.Tx.Effects_Fire.vcScaleRatio.Y = f倍率; - - TJAPlayer3.Tx.Effects_Fire.t2D描画(x, y, - new Rectangle(width * (this.ctゴーゴー炎.CurrentValue), 0, width, height)); - } - } - } - #endregion - for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) - { - if (!this.st状態[i].ct進行.IsStoped) - { - this.st状態[i].ct進行.Tick(); - if (this.st状態[i].ct進行.IsEnded) - { - this.st状態[i].ct進行.Stop(); - } - //if( this.txアタックエフェクトLower != null ) - { - //this.txアタックエフェクトLower.b加算合成 = true; - int n = this.st状態[i].nIsBig == 1 ? 520 : 0; - - float x = 0; - float y = 0; - - if (TJAPlayer3.ConfigIni.nPlayerCount == 5) - { - x = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_5P[0] + (TJAPlayer3.Skin.Game_UIMove_5P[0] * i); - y = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_5P[1] + (TJAPlayer3.Skin.Game_UIMove_5P[1] * i); - } - else if (TJAPlayer3.ConfigIni.nPlayerCount == 4 || TJAPlayer3.ConfigIni.nPlayerCount == 3) - { - x = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_4P[0] + (TJAPlayer3.Skin.Game_UIMove_4P[0] * i); - y = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_4P[1] + (TJAPlayer3.Skin.Game_UIMove_4P[1] * i); - } - else - { - x = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_X[i]; - y = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_Y[i]; - } - x += TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLX(i); - y += TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLY(i); - - switch (st状態[i].judge) - { - case ENoteJudge.Perfect: - case ENoteJudge.Great: - case ENoteJudge.Auto: - if (!TJAPlayer3.ConfigIni.SimpleMode) - { - //this.txアタックエフェクトLower.t2D描画( CDTXMania.app.Device, 285, 127, new Rectangle( this.st状態[ i ].ct進行.n現在の値 * 260, n, 260, 260 ) ); - if (this.st状態[i].nIsBig == 1 && TJAPlayer3.Tx.Effects_Hit_Great_Big[this.st状態[i].ct進行.CurrentValue] != null) - TJAPlayer3.Tx.Effects_Hit_Great_Big[this.st状態[i].ct進行.CurrentValue].t2D描画(x, y); - else if (TJAPlayer3.Tx.Effects_Hit_Great[this.st状態[i].ct進行.CurrentValue] != null) - TJAPlayer3.Tx.Effects_Hit_Great[this.st状態[i].ct進行.CurrentValue].t2D描画(x, y); - } - break; - - case ENoteJudge.Good: - //this.txアタックエフェクトLower.t2D描画( CDTXMania.app.Device, 285, 127, new Rectangle( this.st状態[ i ].ct進行.n現在の値 * 260, n + 260, 260, 260 ) ); - if (this.st状態[i].nIsBig == 1 && TJAPlayer3.Tx.Effects_Hit_Good_Big[this.st状態[i].ct進行.CurrentValue] != null) - TJAPlayer3.Tx.Effects_Hit_Good_Big[this.st状態[i].ct進行.CurrentValue].t2D描画(x, y); - else if (TJAPlayer3.Tx.Effects_Hit_Good[this.st状態[i].ct進行.CurrentValue] != null) - TJAPlayer3.Tx.Effects_Hit_Good[this.st状態[i].ct進行.CurrentValue].t2D描画(x, y); - break; - - case ENoteJudge.Miss: - case ENoteJudge.Bad: - break; - } - } - } - } - - - } - - public virtual void Start(int nLane, ENoteJudge judge, bool b両手入力, int nPlayer) - { - //2017.08.15 kairera0467 排他なので番地をそのまま各レーンの状態として扱う - - //for( int n = 0; n < 1; n++ ) - { - this.st状態[nPlayer].ct進行 = new CCounter(0, 14, 20, TJAPlayer3.Timer); - this.st状態[nPlayer].judge = judge; - this.st状態[nPlayer].nPlayer = nPlayer; - - switch (nLane) - { - case 0x11: - case 0x12: - this.st状態[nPlayer].nIsBig = 0; - break; - case 0x13: - case 0x14: - case 0x1A: - case 0x1B: - { - if (b両手入力) - this.st状態[nPlayer].nIsBig = 1; - else - this.st状態[nPlayer].nIsBig = 0; - } - break; - } - } - } - - - public void GOGOSTART() - { - this.ctゴーゴー = new CCounter(0, 17, 18, TJAPlayer3.Timer); - if(TJAPlayer3.ConfigIni.nPlayerCount == 1 && TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] != (int)Difficulty.Dan) TJAPlayer3.stage演奏ドラム画面.GoGoSplash.StartSplash(); - } - - - public void t分岐レイヤー_コース変化(CDTX.ECourse n現在, CDTX.ECourse n次回, int nPlayer) - { - if (n現在 == n次回) - { - return; - } - this.stBranch[nPlayer].ct分岐アニメ進行 = new CCounter(0, 300, 2, TJAPlayer3.Timer); - - this.stBranch[nPlayer].nBranchレイヤー透明度 = 6; - this.stBranch[nPlayer].nY座標 = 1; - - this.stBranch[nPlayer].nBefore = n現在; - this.stBranch[nPlayer].nAfter = n次回; - - TJAPlayer3.stage演奏ドラム画面.actLane.t分岐レイヤー_コース変化(n現在, n次回, nPlayer); - } - - public void t判定枠移動(double db移動時間, int n移動px, int n移動方向, int nPlayer, int vJs) - { - this.n移動開始時刻[nPlayer] = (int)(SoundManager.PlayTimer.NowTime * TJAPlayer3.ConfigIni.SongPlaybackSpeed); - this.n移動開始X[nPlayer] = TJAPlayer3.stage演奏ドラム画面.JPOSCROLLX[nPlayer]; - this.n移動開始Y[nPlayer] = TJAPlayer3.stage演奏ドラム画面.JPOSCROLLY[nPlayer]; - this.n総移動時間[nPlayer] = (int)(db移動時間 * 1000); - this.n移動方向[nPlayer] = n移動方向; - this.n移動距離px[nPlayer] = n移動px; - this.nVerticalJSPos[nPlayer] = vJs; - if (n移動方向 == 0) - { - this.n移動目的場所X[nPlayer] = TJAPlayer3.stage演奏ドラム画面.JPOSCROLLX[nPlayer] - n移動px; - this.n移動目的場所Y[nPlayer] = TJAPlayer3.stage演奏ドラム画面.JPOSCROLLY[nPlayer] - vJs; - } - else - { - this.n移動目的場所X[nPlayer] = TJAPlayer3.stage演奏ドラム画面.JPOSCROLLX[nPlayer] + n移動px; - this.n移動目的場所Y[nPlayer] = TJAPlayer3.stage演奏ドラム画面.JPOSCROLLY[nPlayer] + vJs; - } - } - - #region[ private ] - //----------------- - //private CTexture txLane; - //private CTexture txLaneB; - //private CTexture tx枠線; - //private CTexture tx判定枠; - //private CTexture txゴーゴー; - //private CTexture txゴーゴー炎; - //private CTexture[] txArゴーゴー炎; - //private CTexture[] txArアタックエフェクトLower_A; - //private CTexture[] txArアタックエフェクトLower_B; - //private CTexture[] txArアタックエフェクトLower_C; - //private CTexture[] txArアタックエフェクトLower_D; - - //private CTexture[] txLaneFlush = new CTexture[3]; - - //private CTexture[] tx普通譜面 = new CTexture[2]; - //private CTexture[] tx玄人譜面 = new CTexture[2]; - //private CTexture[] tx達人譜面 = new CTexture[2]; - - //private CTextureAf txアタックエフェクトLower; - - protected STSTATUS[] st状態 = new STSTATUS[5]; - - //private CTexture[] txゴーゴースプラッシュ; - - [StructLayout(LayoutKind.Sequential)] - protected struct STSTATUS - { - public bool b使用中; - public CCounter ct進行; - public ENoteJudge judge; - public int nIsBig; - public int n透明度; - public int nPlayer; - } - private CCounter ctゴーゴー; - private CCounter ctゴーゴー炎; - - - - public STBRANCH[] stBranch = new STBRANCH[5]; - [StructLayout(LayoutKind.Sequential)] - public struct STBRANCH - { - public CCounter ct分岐アニメ進行; - public CDTX.ECourse nBefore; - public CDTX.ECourse nAfter; - - public long nフラッシュ制御タイマ; - public int nBranchレイヤー透明度; - public int nBranch文字透明度; - public int nY座標; - public int nY; - } - - - private int[] n総移動時間 = new int[5]; - private int[] n移動開始X = new int[5]; - private int[] n移動開始Y = new int[5]; - private int[] n移動開始時刻 = new int[5]; - private int[] n移動距離px = new int[5]; - private int[] nVerticalJSPos = new int[5]; - private int[] n移動目的場所X = new int[5]; - private int[] n移動目的場所Y = new int[5]; - private int[] n移動方向 = new int[5]; - - //----------------- - #endregion - } -} +using System; +using System.Collections.Generic; +using System.Text; +using System.Drawing; +using System.Runtime.InteropServices; +using System.Diagnostics; +using FDK; + +using Rectangle = System.Drawing.Rectangle; +using Point = System.Drawing.Point; +using Color = System.Drawing.Color; + +namespace TJAPlayer3 +{ + internal class CActImplLaneTaiko : CActivity + { + /// + /// レーンを描画するクラス。 + /// + /// + /// + public CActImplLaneTaiko() + { + base.IsDeActivated = true; + } + + public override void Activate() + { + for (int i = 0; i < 5; i++) + { + this.st状態[i].ct進行 = new CCounter(); + this.stBranch[i].ct分岐アニメ進行 = new CCounter(); + this.stBranch[i].nフラッシュ制御タイマ = -1; + this.stBranch[i].nBranchレイヤー透明度 = 0; + this.stBranch[i].nBranch文字透明度 = 0; + this.stBranch[i].nY座標 = 0; + + this.n総移動時間[i] = -1; + } + this.ctゴーゴー = new CCounter(); + + + this.ctゴーゴー炎 = new CCounter(0, 6, 50, TJAPlayer3.Timer); + base.Activate(); + } + + public override void DeActivate() + { + for (int i = 0; i < 5; i++) + { + this.st状態[i].ct進行 = null; + this.stBranch[i].ct分岐アニメ進行 = null; + } + this.ctゴーゴー = null; + + base.DeActivate(); + } + + public override void CreateManagedResource() + { + base.CreateManagedResource(); + } + + public override void ReleaseManagedResource() + { + base.ReleaseManagedResource(); + } + + public override int Draw() + { + if (base.IsFirstDraw) + { + for (int i = 0; i < 5; i++) + this.stBranch[i].nフラッシュ制御タイマ = (long)(SoundManager.PlayTimer.NowTime * TJAPlayer3.ConfigIni.SongPlaybackSpeed); + base.IsFirstDraw = false; + } + + //それぞれが独立したレイヤーでないといけないのでforループはパーツごとに分離すること。 + + if (TJAPlayer3.ConfigIni.nPlayerCount <= 2 && !TJAPlayer3.ConfigIni.bAIBattleMode) TJAPlayer3.stage演奏ドラム画面.actMtaiko.DrawBackSymbol(); + + #region[ レーン本体 ] + + + int[] x = new int[5]; + int[] y = new int[5]; + + for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) + { + if (TJAPlayer3.ConfigIni.nPlayerCount == 5) + { + x[i] = TJAPlayer3.Skin.Game_Lane_5P[0] + (TJAPlayer3.Skin.Game_UIMove_5P[0] * i); + y[i] = TJAPlayer3.Skin.Game_Lane_5P[1] + (TJAPlayer3.Skin.Game_UIMove_5P[1] * i); + } + else if (TJAPlayer3.ConfigIni.nPlayerCount == 4 || TJAPlayer3.ConfigIni.nPlayerCount == 3) + { + x[i] = TJAPlayer3.Skin.Game_Lane_4P[0] + (TJAPlayer3.Skin.Game_UIMove_4P[0] * i); + y[i] = TJAPlayer3.Skin.Game_Lane_4P[1] + (TJAPlayer3.Skin.Game_UIMove_4P[1] * i); + } + else + { + x[i] = TJAPlayer3.Skin.Game_Lane_X[i]; + y[i] = TJAPlayer3.Skin.Game_Lane_Y[i]; + } + } + + for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) + { + if (i == 1 && TJAPlayer3.ConfigIni.bAIBattleMode && TJAPlayer3.Tx.Lane_Background_AI != null) + TJAPlayer3.Tx.Lane_Background_AI?.t2D描画(x[i], y[i]); + else + TJAPlayer3.Tx.Lane_Background_Main?.t2D描画(x[i], y[i]); + } + + #endregion + + if (TJAPlayer3.ConfigIni.nPlayerCount > 2 && !TJAPlayer3.ConfigIni.bAIBattleMode) TJAPlayer3.stage演奏ドラム画面.actMtaiko.DrawBackSymbol(); + + for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) + { + #region[ 分岐アニメ制御タイマー ] + long num = FDK.SoundManager.PlayTimer.NowTime; + if (num < this.stBranch[i].nフラッシュ制御タイマ) + { + this.stBranch[i].nフラッシュ制御タイマ = num; + } + while ((num - this.stBranch[i].nフラッシュ制御タイマ) >= 30) + { + if (this.stBranch[i].nBranchレイヤー透明度 <= 255) + { + this.stBranch[i].nBranchレイヤー透明度 += 10; + } + + if (this.stBranch[i].nBranch文字透明度 >= 0) + { + this.stBranch[i].nBranch文字透明度 -= 10; + } + + if (this.stBranch[i].nY座標 != 0 && this.stBranch[i].nY座標 <= 20) + { + this.stBranch[i].nY座標++; + } + + this.stBranch[i].nフラッシュ制御タイマ += 8; + } + + if (!this.stBranch[i].ct分岐アニメ進行.IsStoped) + { + this.stBranch[i].ct分岐アニメ進行.Tick(); + if (this.stBranch[i].ct分岐アニメ進行.IsEnded) + { + this.stBranch[i].ct分岐アニメ進行.Stop(); + } + } + #endregion + } + #region[ 分岐レイヤー ] + for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) + { + if (TJAPlayer3.stage演奏ドラム画面.bUseBranch[i] == true) + { + #region[ 動いていない ] + switch (TJAPlayer3.stage演奏ドラム画面.nレーン用表示コース[i]) + { + case CDTX.ECourse.eNormal: + if (TJAPlayer3.Tx.Lane_Base[0] != null) + { + TJAPlayer3.Tx.Lane_Base[0].Opacity = 255; + TJAPlayer3.Tx.Lane_Base[0].t2D描画(x[i], y[i]); + } + break; + case CDTX.ECourse.eExpert: + if (TJAPlayer3.Tx.Lane_Base[1] != null) + { + TJAPlayer3.Tx.Lane_Base[1].Opacity = 255; + TJAPlayer3.Tx.Lane_Base[1].t2D描画(x[i], y[i]); + } + break; + case CDTX.ECourse.eMaster: + if (TJAPlayer3.Tx.Lane_Base[2] != null) + { + TJAPlayer3.Tx.Lane_Base[2].Opacity = 255; + TJAPlayer3.Tx.Lane_Base[2].t2D描画(x[i], y[i]); + } + break; + } + #endregion + + if (TJAPlayer3.ConfigIni.nBranchAnime == 1) + { + #region[ AC7~14風の背後レイヤー ] + if (this.stBranch[i].ct分岐アニメ進行.IsTicked) + { + int n透明度 = ((100 - this.stBranch[i].ct分岐アニメ進行.CurrentValue) * 0xff) / 100; + + if (this.stBranch[i].ct分岐アニメ進行.IsEnded) + { + n透明度 = 255; + this.stBranch[i].ct分岐アニメ進行.Stop(); + } + + #region[ 普通譜面_レベルアップ ] + //普通→玄人 + if (this.stBranch[i].nBefore == CDTX.ECourse.eNormal && this.stBranch[i].nAfter == CDTX.ECourse.eExpert) + { + if (TJAPlayer3.Tx.Lane_Base[0] != null && TJAPlayer3.Tx.Lane_Base[1] != null) + { + TJAPlayer3.Tx.Lane_Base[0].t2D描画(x[i], y[i]); + TJAPlayer3.Tx.Lane_Base[1].Opacity = this.stBranch[i].nBranchレイヤー透明度; + TJAPlayer3.Tx.Lane_Base[1].t2D描画(x[i], y[i]); + } + } + //普通→達人 + if (this.stBranch[i].nBefore == CDTX.ECourse.eNormal && this.stBranch[i].nAfter == CDTX.ECourse.eMaster) + { + if (this.stBranch[i].ct分岐アニメ進行.CurrentValue < 100) + { + n透明度 = ((100 - this.stBranch[i].ct分岐アニメ進行.CurrentValue) * 0xff) / 100; + } + if (TJAPlayer3.Tx.Lane_Base[0] != null && TJAPlayer3.Tx.Lane_Base[2] != null) + { + TJAPlayer3.Tx.Lane_Base[0].t2D描画(x[i], y[i]); + TJAPlayer3.Tx.Lane_Base[2].t2D描画(x[i], y[i]); + TJAPlayer3.Tx.Lane_Base[2].Opacity = this.stBranch[i].nBranchレイヤー透明度; + } + } + #endregion + #region[ 玄人譜面_レベルアップ ] + if (this.stBranch[i].nBefore == CDTX.ECourse.eExpert && this.stBranch[i].nAfter == CDTX.ECourse.eMaster) + { + if (TJAPlayer3.Tx.Lane_Base[1] != null && TJAPlayer3.Tx.Lane_Base[2] != null) + { + TJAPlayer3.Tx.Lane_Base[1].t2D描画(x[i], y[i]); + TJAPlayer3.Tx.Lane_Base[2].t2D描画(x[i], y[i]); + TJAPlayer3.Tx.Lane_Base[2].Opacity = this.stBranch[i].nBranchレイヤー透明度; + } + } + #endregion + #region[ 玄人譜面_レベルダウン ] + if (this.stBranch[i].nBefore == CDTX.ECourse.eExpert && this.stBranch[i].nAfter == CDTX.ECourse.eNormal) + { + if (TJAPlayer3.Tx.Lane_Base[1] != null && TJAPlayer3.Tx.Lane_Base[0] != null) + { + TJAPlayer3.Tx.Lane_Base[1].t2D描画(x[i], y[i]); + TJAPlayer3.Tx.Lane_Base[0].t2D描画(x[i], y[i]); + TJAPlayer3.Tx.Lane_Base[0].Opacity = this.stBranch[i].nBranchレイヤー透明度; + } + } + #endregion + #region[ 達人譜面_レベルダウン ] + if (this.stBranch[i].nBefore == CDTX.ECourse.eMaster && this.stBranch[i].nAfter == CDTX.ECourse.eNormal) + { + if (TJAPlayer3.Tx.Lane_Base[2] != null && TJAPlayer3.Tx.Lane_Base[0] != null) + { + TJAPlayer3.Tx.Lane_Base[2].t2D描画(x[i], y[i]); + TJAPlayer3.Tx.Lane_Base[0].t2D描画(x[i], y[i]); + TJAPlayer3.Tx.Lane_Base[0].Opacity = this.stBranch[i].nBranchレイヤー透明度; + } + } + #endregion + } + #endregion + } + else if (TJAPlayer3.ConfigIni.nBranchAnime == 0) + { + TJAPlayer3.stage演奏ドラム画面.actLane.Draw(); + } + } + } + #endregion + + for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) + { + #region[ ゴーゴータイムレーン背景レイヤー ] + if (TJAPlayer3.Tx.Lane_Background_GoGo != null && TJAPlayer3.stage演奏ドラム画面.bIsGOGOTIME[i]) + { + if (!this.ctゴーゴー.IsStoped) + { + this.ctゴーゴー.Tick(); + } + + if (this.ctゴーゴー.CurrentValue <= 4) + { + TJAPlayer3.Tx.Lane_Background_GoGo.vcScaleRatio.Y = 0.2f; + TJAPlayer3.Tx.Lane_Background_GoGo.t2D描画(x[i], y[i] + 54); + } + else if (this.ctゴーゴー.CurrentValue <= 5) + { + TJAPlayer3.Tx.Lane_Background_GoGo.vcScaleRatio.Y = 0.4f; + TJAPlayer3.Tx.Lane_Background_GoGo.t2D描画(x[i], y[i] + 40); + } + else if (this.ctゴーゴー.CurrentValue <= 6) + { + TJAPlayer3.Tx.Lane_Background_GoGo.vcScaleRatio.Y = 0.6f; + TJAPlayer3.Tx.Lane_Background_GoGo.t2D描画(x[i], y[i] + 26); + } + else if (this.ctゴーゴー.CurrentValue <= 8) + { + TJAPlayer3.Tx.Lane_Background_GoGo.vcScaleRatio.Y = 0.8f; + TJAPlayer3.Tx.Lane_Background_GoGo.t2D描画(x[i], y[i] + 13); + } + else if (this.ctゴーゴー.CurrentValue >= 9) + { + TJAPlayer3.Tx.Lane_Background_GoGo.vcScaleRatio.Y = 1.0f; + TJAPlayer3.Tx.Lane_Background_GoGo.t2D描画(x[i], y[i]); + } + } + #endregion + } + + for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) + { + if (TJAPlayer3.stage演奏ドラム画面.bUseBranch[i] == true) + { + #region NullCheck + + bool _laneNull = false; + + for (int j = 0; j < TJAPlayer3.Tx.Lane_Text.Length; j++) + { + if (TJAPlayer3.Tx.Lane_Text[j] == null) + { + _laneNull = true; + break; + } + } + + #endregion + + if (TJAPlayer3.ConfigIni.SimpleMode) + { + switch (TJAPlayer3.stage演奏ドラム画面.nレーン用表示コース[i]) + { + case CDTX.ECourse.eNormal: + TJAPlayer3.Tx.Lane_Text[0].Opacity = 255; + TJAPlayer3.Tx.Lane_Text[0].t2D描画(x[i], y[i]); + break; + case CDTX.ECourse.eExpert: + TJAPlayer3.Tx.Lane_Text[1].Opacity = 255; + TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], y[i]); + break; + case CDTX.ECourse.eMaster: + TJAPlayer3.Tx.Lane_Text[2].Opacity = 255; + TJAPlayer3.Tx.Lane_Text[2].t2D描画(x[i], y[i]); + break; + } + } + else if (TJAPlayer3.ConfigIni.nBranchAnime == 0 && !_laneNull) + { + if (!this.stBranch[i].ct分岐アニメ進行.IsTicked) + { + switch (TJAPlayer3.stage演奏ドラム画面.nレーン用表示コース[i]) + { + case CDTX.ECourse.eNormal: + TJAPlayer3.Tx.Lane_Text[0].Opacity = 255; + TJAPlayer3.Tx.Lane_Text[0].t2D描画(x[i], y[i]); + break; + case CDTX.ECourse.eExpert: + TJAPlayer3.Tx.Lane_Text[1].Opacity = 255; + TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], y[i]); + break; + case CDTX.ECourse.eMaster: + TJAPlayer3.Tx.Lane_Text[2].Opacity = 255; + TJAPlayer3.Tx.Lane_Text[2].t2D描画(x[i], y[i]); + break; + } + } + if (this.stBranch[i].ct分岐アニメ進行.IsTicked) + { + #region[ 普通譜面_レベルアップ ] + //普通→玄人 + if (this.stBranch[i].nBefore == 0 && this.stBranch[i].nAfter == CDTX.ECourse.eExpert) + { + TJAPlayer3.Tx.Lane_Text[0].Opacity = 255; + TJAPlayer3.Tx.Lane_Text[1].Opacity = 255; + TJAPlayer3.Tx.Lane_Text[2].Opacity = 255; + + TJAPlayer3.Tx.Lane_Text[0].Opacity = this.stBranch[i].ct分岐アニメ進行.CurrentValue > 100 ? 0 : (255 - ((this.stBranch[i].ct分岐アニメ進行.CurrentValue * 0xff) / 60)); + //CDTXMania.Tx.Lane_Text[1].n透明度 = this.ct分岐アニメ進行.n現在の値 > 100 ? 255 : ( ( ( this.ct分岐アニメ進行.n現在の値 * 0xff ) / 60 ) ); + if (this.stBranch[i].ct分岐アニメ進行.CurrentValue < 60) + { + this.stBranch[i].nY = this.stBranch[i].ct分岐アニメ進行.CurrentValue / 2; + TJAPlayer3.Tx.Lane_Text[0].t2D描画(x[i], y[i] + this.stBranch[i].nY); + TJAPlayer3.Tx.Lane_Text[1].Opacity = 255; + TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], (y[i] - 30) + this.stBranch[i].nY); + } + else + { + TJAPlayer3.Tx.Lane_Text[1].Opacity = 255; + TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], y[i]); + } + + } + + //普通→達人 + if (this.stBranch[i].nBefore == 0 && this.stBranch[i].nAfter == CDTX.ECourse.eMaster) + { + TJAPlayer3.Tx.Lane_Text[0].Opacity = 255; + TJAPlayer3.Tx.Lane_Text[1].Opacity = 255; + TJAPlayer3.Tx.Lane_Text[2].Opacity = 255; + if (this.stBranch[i].ct分岐アニメ進行.CurrentValue < 60) + { + this.stBranch[i].nY = this.stBranch[i].ct分岐アニメ進行.CurrentValue / 2; + TJAPlayer3.Tx.Lane_Text[0].t2D描画(x[i], (y[i] - 12) + this.stBranch[i].nY); + TJAPlayer3.Tx.Lane_Text[0].Opacity = this.stBranch[i].ct分岐アニメ進行.CurrentValue > 100 ? 0 : (255 - ((this.stBranch[i].ct分岐アニメ進行.CurrentValue * 0xff) / 100)); + TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], (y[i] - 20) + this.stBranch[i].nY); + } + //if( this.stBranch[ i ].ct分岐アニメ進行.n現在の値 >= 5 && this.stBranch[ i ].ct分岐アニメ進行.n現在の値 < 60 ) + //{ + // this.stBranch[ i ].nY = this.stBranch[ i ].ct分岐アニメ進行.n現在の値 / 2; + // this.tx普通譜面[ 1 ].t2D描画(CDTXMania.app.Device, 333, CDTXMania.Skin.nScrollFieldY[ i ] + this.stBranch[ i ].nY); + // this.tx普通譜面[ 1 ].n透明度 = this.stBranch[ i ].ct分岐アニメ進行.n現在の値 > 100 ? 0 : ( 255 - ( ( this.stBranch[ i ].ct分岐アニメ進行.n現在の値 * 0xff) / 100)); + // this.tx玄人譜面[ 1 ].t2D描画(CDTXMania.app.Device, 333, ( CDTXMania.Skin.nScrollFieldY[ i ] - 10 ) + this.stBranch[ i ].nY); + //} + else if (this.stBranch[i].ct分岐アニメ進行.CurrentValue >= 60 && this.stBranch[i].ct分岐アニメ進行.CurrentValue < 150) + { + this.stBranch[i].nY = 21; + TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], y[i]); + TJAPlayer3.Tx.Lane_Text[1].Opacity = 255; + TJAPlayer3.Tx.Lane_Text[2].Opacity = 255; + } + else if (this.stBranch[i].ct分岐アニメ進行.CurrentValue >= 150 && this.stBranch[i].ct分岐アニメ進行.CurrentValue < 210) + { + this.stBranch[i].nY = ((this.stBranch[i].ct分岐アニメ進行.CurrentValue - 150) / 2); + TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], y[i] + this.stBranch[i].nY); + TJAPlayer3.Tx.Lane_Text[1].Opacity = this.stBranch[i].ct分岐アニメ進行.CurrentValue > 100 ? 0 : (255 - ((this.stBranch[i].ct分岐アニメ進行.CurrentValue * 0xff) / 100)); + TJAPlayer3.Tx.Lane_Text[2].t2D描画(x[i], (y[i] - 20) + this.stBranch[i].nY); + } + else + { + TJAPlayer3.Tx.Lane_Text[2].Opacity = 255; + TJAPlayer3.Tx.Lane_Text[2].t2D描画(x[i], y[i]); + } + } + #endregion + #region[ 玄人譜面_レベルアップ ] + //玄人→達人 + if (this.stBranch[i].nBefore == CDTX.ECourse.eExpert && this.stBranch[i].nAfter == CDTX.ECourse.eMaster) + { + TJAPlayer3.Tx.Lane_Text[0].Opacity = 255; + TJAPlayer3.Tx.Lane_Text[1].Opacity = 255; + TJAPlayer3.Tx.Lane_Text[2].Opacity = 255; + + TJAPlayer3.Tx.Lane_Text[1].Opacity = this.stBranch[i].ct分岐アニメ進行.CurrentValue > 100 ? 0 : (255 - ((this.stBranch[i].ct分岐アニメ進行.CurrentValue * 0xff) / 60)); + if (this.stBranch[i].ct分岐アニメ進行.CurrentValue < 60) + { + this.stBranch[i].nY = this.stBranch[i].ct分岐アニメ進行.CurrentValue / 2; + TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], y[i] + this.stBranch[i].nY); + TJAPlayer3.Tx.Lane_Text[2].t2D描画(x[i], (y[i] - 20) + this.stBranch[i].nY); + } + else + { + TJAPlayer3.Tx.Lane_Text[2].t2D描画(x[i], y[i]); + } + } + #endregion + #region[ 玄人譜面_レベルダウン ] + if (this.stBranch[i].nBefore == CDTX.ECourse.eExpert && this.stBranch[i].nAfter == CDTX.ECourse.eNormal) + { + TJAPlayer3.Tx.Lane_Text[0].Opacity = 255; + TJAPlayer3.Tx.Lane_Text[1].Opacity = 255; + TJAPlayer3.Tx.Lane_Text[2].Opacity = 255; + + TJAPlayer3.Tx.Lane_Text[1].Opacity = this.stBranch[i].ct分岐アニメ進行.CurrentValue > 100 ? 0 : (255 - ((this.stBranch[i].ct分岐アニメ進行.CurrentValue * 0xff) / 60)); + if (this.stBranch[i].ct分岐アニメ進行.CurrentValue < 60) + { + this.stBranch[i].nY = this.stBranch[i].ct分岐アニメ進行.CurrentValue / 2; + TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], y[i] - this.stBranch[i].nY); + TJAPlayer3.Tx.Lane_Text[0].t2D描画(x[i], (y[i] + 30) - this.stBranch[i].nY); + } + else + { + TJAPlayer3.Tx.Lane_Text[0].t2D描画(x[i], y[i]); + } + } + #endregion + #region[ 達人譜面_レベルダウン ] + if (this.stBranch[i].nBefore == CDTX.ECourse.eMaster && this.stBranch[i].nAfter == CDTX.ECourse.eNormal) + { + TJAPlayer3.Tx.Lane_Text[0].Opacity = 255; + TJAPlayer3.Tx.Lane_Text[1].Opacity = 255; + TJAPlayer3.Tx.Lane_Text[2].Opacity = 255; + + if (this.stBranch[i].ct分岐アニメ進行.CurrentValue < 60) + { + this.stBranch[i].nY = this.stBranch[i].ct分岐アニメ進行.CurrentValue / 2; + TJAPlayer3.Tx.Lane_Text[2].Opacity = this.stBranch[i].ct分岐アニメ進行.CurrentValue > 100 ? 0 : (255 - ((this.stBranch[i].ct分岐アニメ進行.CurrentValue * 0xff) / 60)); + TJAPlayer3.Tx.Lane_Text[2].t2D描画(x[i], y[i] - this.stBranch[i].nY); + TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], (y[i] + 30) - this.stBranch[i].nY); + } + else if (this.stBranch[i].ct分岐アニメ進行.CurrentValue >= 60 && this.stBranch[i].ct分岐アニメ進行.CurrentValue < 150) + { + this.stBranch[i].nY = 21; + TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], y[i]); + TJAPlayer3.Tx.Lane_Text[1].Opacity = 255; + TJAPlayer3.Tx.Lane_Text[2].Opacity = 255; + } + else if (this.stBranch[i].ct分岐アニメ進行.CurrentValue >= 150 && this.stBranch[i].ct分岐アニメ進行.CurrentValue < 210) + { + this.stBranch[i].nY = ((this.stBranch[i].ct分岐アニメ進行.CurrentValue - 150) / 2); + TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], y[i] - this.stBranch[i].nY); + TJAPlayer3.Tx.Lane_Text[1].Opacity = this.stBranch[i].ct分岐アニメ進行.CurrentValue > 100 ? 0 : (255 - ((this.stBranch[i].ct分岐アニメ進行.CurrentValue * 0xff) / 100)); + TJAPlayer3.Tx.Lane_Text[0].t2D描画(x[i], (y[i] + 30) - this.stBranch[i].nY); + } + else if (this.stBranch[i].ct分岐アニメ進行.CurrentValue >= 210) + { + TJAPlayer3.Tx.Lane_Text[0].Opacity = 255; + TJAPlayer3.Tx.Lane_Text[0].t2D描画(x[i], y[i]); + } + } + if (this.stBranch[i].nBefore == CDTX.ECourse.eMaster && this.stBranch[i].nAfter == CDTX.ECourse.eExpert) + { + TJAPlayer3.Tx.Lane_Text[0].Opacity = 255; + TJAPlayer3.Tx.Lane_Text[1].Opacity = 255; + TJAPlayer3.Tx.Lane_Text[2].Opacity = 255; + + TJAPlayer3.Tx.Lane_Text[2].Opacity = this.stBranch[i].ct分岐アニメ進行.CurrentValue > 100 ? 0 : (255 - ((this.stBranch[i].ct分岐アニメ進行.CurrentValue * 0xff) / 60)); + if (this.stBranch[i].ct分岐アニメ進行.CurrentValue < 60) + { + this.stBranch[i].nY = this.stBranch[i].ct分岐アニメ進行.CurrentValue / 2; + TJAPlayer3.Tx.Lane_Text[2].t2D描画(x[i], y[i] - this.stBranch[i].nY); + TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], (y[i] + 30) - this.stBranch[i].nY); + } + else + { + TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], y[i]); + } + + } + #endregion + } + } + else if (!_laneNull) + { + if (this.stBranch[i].nY座標 == 21) + { + this.stBranch[i].nY座標 = 0; + } + + if (this.stBranch[i].nY座標 == 0) + { + switch (TJAPlayer3.stage演奏ドラム画面.nレーン用表示コース[i]) + { + case CDTX.ECourse.eNormal: + TJAPlayer3.Tx.Lane_Text[0].Opacity = 255; + TJAPlayer3.Tx.Lane_Text[0].t2D描画(x[i], y[i]); + break; + case CDTX.ECourse.eExpert: + TJAPlayer3.Tx.Lane_Text[1].Opacity = 255; + TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], y[i]); + break; + case CDTX.ECourse.eMaster: + TJAPlayer3.Tx.Lane_Text[2].Opacity = 255; + TJAPlayer3.Tx.Lane_Text[2].t2D描画(x[i], y[i]); + break; + } + } + + if (this.stBranch[i].nY座標 != 0) + { + #region[ 普通譜面_レベルアップ ] + //普通→玄人 + if (this.stBranch[i].nBefore == CDTX.ECourse.eNormal && this.stBranch[i].nAfter == CDTX.ECourse.eExpert) + { + TJAPlayer3.Tx.Lane_Text[0].t2D描画(x[i], y[i] - this.stBranch[i].nY座標); + TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], (y[i] + 20) - this.stBranch[i].nY座標); + TJAPlayer3.Tx.Lane_Text[0].Opacity = this.stBranch[i].nBranchレイヤー透明度; + } + //普通→達人 + if (this.stBranch[i].nBefore == CDTX.ECourse.eNormal && this.stBranch[i].nAfter == CDTX.ECourse.eMaster) + { + TJAPlayer3.Tx.Lane_Text[0].t2D描画(x[i], y[i] - this.stBranch[i].nY座標); + TJAPlayer3.Tx.Lane_Text[2].t2D描画(x[i], (y[i] + 20) - this.stBranch[i].nY座標); + TJAPlayer3.Tx.Lane_Text[0].Opacity = this.stBranch[i].nBranchレイヤー透明度; + } + #endregion + #region[ 玄人譜面_レベルアップ ] + //玄人→達人 + if (this.stBranch[i].nBefore == CDTX.ECourse.eExpert && this.stBranch[i].nAfter == CDTX.ECourse.eMaster) + { + TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], y[i] - this.stBranch[i].nY座標); + TJAPlayer3.Tx.Lane_Text[2].t2D描画(x[i], (y[i] + 20) - this.stBranch[i].nY座標); + TJAPlayer3.Tx.Lane_Text[1].Opacity = this.stBranch[i].nBranchレイヤー透明度; + } + #endregion + #region[ 玄人譜面_レベルダウン ] + if (this.stBranch[i].nBefore == CDTX.ECourse.eExpert && this.stBranch[i].nAfter == CDTX.ECourse.eNormal) + { + TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], y[i] + this.stBranch[i].nY座標); + TJAPlayer3.Tx.Lane_Text[0].t2D描画(x[i], (y[i] - 24) + this.stBranch[i].nY座標); + TJAPlayer3.Tx.Lane_Text[1].Opacity = this.stBranch[i].nBranchレイヤー透明度; + } + #endregion + #region[ 達人譜面_レベルダウン ] + if (this.stBranch[i].nBefore == CDTX.ECourse.eMaster && this.stBranch[i].nAfter == CDTX.ECourse.eNormal) + { + TJAPlayer3.Tx.Lane_Text[2].t2D描画(x[i], y[i] + this.stBranch[i].nY座標); + TJAPlayer3.Tx.Lane_Text[0].t2D描画(x[i], (y[i] - 24) + this.stBranch[i].nY座標); + TJAPlayer3.Tx.Lane_Text[2].Opacity = this.stBranch[i].nBranchレイヤー透明度; + } + if (this.stBranch[i].nBefore == CDTX.ECourse.eMaster && this.stBranch[i].nAfter == CDTX.ECourse.eExpert) + { + TJAPlayer3.Tx.Lane_Text[2].t2D描画(x[i], y[i] + this.stBranch[i].nY座標); + TJAPlayer3.Tx.Lane_Text[1].t2D描画(x[i], (y[i] - 24) + this.stBranch[i].nY座標); + TJAPlayer3.Tx.Lane_Text[2].Opacity = this.stBranch[i].nBranchレイヤー透明度; + } + #endregion + } + } + + } + } + + + if (TJAPlayer3.ConfigIni.nPlayerCount <= 2) + { + if (TJAPlayer3.Tx.Lane_Background_Sub != null) + { + TJAPlayer3.Tx.Lane_Background_Sub.t2D描画(TJAPlayer3.Skin.Game_Lane_Sub_X[0], TJAPlayer3.Skin.Game_Lane_Sub_Y[0]); + if (TJAPlayer3.stage演奏ドラム画面.bDoublePlay) + { + TJAPlayer3.Tx.Lane_Background_Sub.t2D描画(TJAPlayer3.Skin.Game_Lane_Sub_X[1], TJAPlayer3.Skin.Game_Lane_Sub_Y[1]); + } + } + } + + + TJAPlayer3.stage演奏ドラム画面.actTaikoLaneFlash.Draw(); + + + + if (TJAPlayer3.Tx.Taiko_Frame[0] != null) + { + // Tower frame (without tamashii jauge) if playing a tower chart + for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) + { + int frame_x; + int frame_y; + if (TJAPlayer3.ConfigIni.nPlayerCount == 5) + { + frame_x = TJAPlayer3.Skin.Game_Taiko_Frame_5P[0] + (TJAPlayer3.Skin.Game_UIMove_5P[0] * i); + frame_y = TJAPlayer3.Skin.Game_Taiko_Frame_5P[1] + (TJAPlayer3.Skin.Game_UIMove_5P[1] * i); + } + else if (TJAPlayer3.ConfigIni.nPlayerCount == 4 || TJAPlayer3.ConfigIni.nPlayerCount == 3) + { + frame_x = TJAPlayer3.Skin.Game_Taiko_Frame_4P[0] + (TJAPlayer3.Skin.Game_UIMove_4P[0] * i); + frame_y = TJAPlayer3.Skin.Game_Taiko_Frame_4P[1] + (TJAPlayer3.Skin.Game_UIMove_4P[1] * i); + } + else + { + frame_x = TJAPlayer3.Skin.Game_Taiko_Frame_X[i]; + frame_y = TJAPlayer3.Skin.Game_Taiko_Frame_Y[i]; + } + + CTexture tex = null; + + switch (i) + { + case 0: + { + if (TJAPlayer3.ConfigIni.bTokkunMode) + { + tex = TJAPlayer3.Tx.Taiko_Frame[3]; + } + else if (TJAPlayer3.ConfigIni.bAIBattleMode) + { + tex = TJAPlayer3.Tx.Taiko_Frame[5]; + } + else if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Tower) + { + tex = TJAPlayer3.Tx.Taiko_Frame[2]; + } + else if (TJAPlayer3.ConfigIni.nPlayerCount > 2) + { + tex = TJAPlayer3.Tx.Taiko_Frame[6]; + } + else + { + tex = TJAPlayer3.Tx.Taiko_Frame[0]; + } + } + break; + case 1: + { + if (TJAPlayer3.ConfigIni.bAIBattleMode) + { + tex = TJAPlayer3.Tx.Taiko_Frame[4]; + } + else if (TJAPlayer3.ConfigIni.nPlayerCount > 2) + { + tex = TJAPlayer3.Tx.Taiko_Frame[6]; + } + else + { + tex = TJAPlayer3.Tx.Taiko_Frame[1]; + } + } + break; + case 2: + tex = TJAPlayer3.Tx.Taiko_Frame[6]; + break; + case 3: + tex = TJAPlayer3.Tx.Taiko_Frame[6]; + break; + case 4: + tex = TJAPlayer3.Tx.Taiko_Frame[6]; + break; + } + + tex?.t2D描画(frame_x, frame_y); + } + + /* + if (TJAPlayer3.ConfigIni.bTokkunMode == true && TJAPlayer3.Tx.Taiko_Frame[3] != null) + TJAPlayer3.Tx.Taiko_Frame[3]?.t2D描画(TJAPlayer3.Skin.Game_Taiko_Frame_X[0], TJAPlayer3.Skin.Game_Taiko_Frame_Y[0]); + else if (TJAPlayer3.stage選曲.n確定された曲の難易度[0] == (int)Difficulty.Tower && TJAPlayer3.Tx.Taiko_Frame[2] != null) + TJAPlayer3.Tx.Taiko_Frame[2]?.t2D描画(TJAPlayer3.Skin.Game_Taiko_Frame_X[0], TJAPlayer3.Skin.Game_Taiko_Frame_Y[0]); + else if (TJAPlayer3.ConfigIni.bAIBattleMode && TJAPlayer3.Tx.Taiko_Frame[5] != null) + TJAPlayer3.Tx.Taiko_Frame[5]?.t2D描画(TJAPlayer3.Skin.Game_Taiko_Frame_X[0], TJAPlayer3.Skin.Game_Taiko_Frame_Y[0]); + else + TJAPlayer3.Tx.Taiko_Frame[0]?.t2D描画(TJAPlayer3.Skin.Game_Taiko_Frame_X[0], TJAPlayer3.Skin.Game_Taiko_Frame_Y[0]); + + if (TJAPlayer3.stage演奏ドラム画面.bDoublePlay) + { + if (TJAPlayer3.ConfigIni.bAIBattleMode) + TJAPlayer3.Tx.Taiko_Frame[4]?.t2D描画(TJAPlayer3.Skin.Game_Taiko_Frame_X[1], TJAPlayer3.Skin.Game_Taiko_Frame_Y[1]); + else + TJAPlayer3.Tx.Taiko_Frame[1]?.t2D描画(TJAPlayer3.Skin.Game_Taiko_Frame_X[1], TJAPlayer3.Skin.Game_Taiko_Frame_Y[1]); + } + */ + } + var nTime = (long)(SoundManager.PlayTimer.NowTime * TJAPlayer3.ConfigIni.SongPlaybackSpeed); + + for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) + { + if (this.n総移動時間[i] != -1) + { + if (n移動方向[i] == 1) + { + TJAPlayer3.stage演奏ドラム画面.JPOSCROLLX[i] = this.n移動開始X[i] + (int)((((int)nTime - this.n移動開始時刻[i]) / (double)(this.n総移動時間[i])) * this.n移動距離px[i]); + TJAPlayer3.stage演奏ドラム画面.JPOSCROLLY[i] = this.n移動開始Y[i] + (int)((((int)nTime - this.n移動開始時刻[i]) / (double)(this.n総移動時間[i])) * this.nVerticalJSPos[i]); + //TJAPlayer3.stage演奏ドラム画面.FlyingNotes.StartPointX[i] = this.n移動開始X[i] + (int)((((int)nTime - this.n移動開始時刻[i]) / (double)(this.n総移動時間[i])) * this.n移動距離px[i]); + } + else + { + TJAPlayer3.stage演奏ドラム画面.JPOSCROLLX[i] = this.n移動開始X[i] - (int)((((int)nTime - this.n移動開始時刻[i]) / (double)(this.n総移動時間[i])) * this.n移動距離px[i]); + TJAPlayer3.stage演奏ドラム画面.JPOSCROLLY[i] = this.n移動開始Y[i] - (int)((((int)nTime - this.n移動開始時刻[i]) / (double)(this.n総移動時間[i])) * this.nVerticalJSPos[i]); + //TJAPlayer3.stage演奏ドラム画面.FlyingNotes.StartPointX[i] = this.n移動開始X[i] - (int)((((int)nTime - this.n移動開始時刻[i]) / (double)(this.n総移動時間[i])) * this.n移動距離px[i]); + } + + if (((int)nTime) > this.n移動開始時刻[i] + this.n総移動時間[i]) + { + this.n総移動時間[i] = -1; + TJAPlayer3.stage演奏ドラム画面.JPOSCROLLX[i] = this.n移動目的場所X[i]; + TJAPlayer3.stage演奏ドラム画面.JPOSCROLLY[i] = this.n移動目的場所Y[i]; + //TJAPlayer3.stage演奏ドラム画面.FlyingNotes.StartPointX[i] = this.n移動目的場所X[i]; + } + } + } + + + + + if (TJAPlayer3.ConfigIni.bEnableAVI && TJAPlayer3.DTX.listVD.Count > 0 && TJAPlayer3.stage演奏ドラム画面.ShowVideo) + { + if (TJAPlayer3.Tx.Lane_Background_Main != null) TJAPlayer3.Tx.Lane_Background_Main.Opacity = TJAPlayer3.ConfigIni.nBGAlpha; + if (TJAPlayer3.Tx.Lane_Background_AI != null) TJAPlayer3.Tx.Lane_Background_AI.Opacity = TJAPlayer3.ConfigIni.nBGAlpha; + if (TJAPlayer3.Tx.Lane_Background_Sub != null) TJAPlayer3.Tx.Lane_Background_Sub.Opacity = TJAPlayer3.ConfigIni.nBGAlpha; + if (TJAPlayer3.Tx.Lane_Background_GoGo != null) TJAPlayer3.Tx.Lane_Background_GoGo.Opacity = TJAPlayer3.ConfigIni.nBGAlpha; + } + else + { + if (TJAPlayer3.Tx.Lane_Background_Main != null) TJAPlayer3.Tx.Lane_Background_Main.Opacity = 255; + if (TJAPlayer3.Tx.Lane_Background_AI != null) TJAPlayer3.Tx.Lane_Background_AI.Opacity = 255; + if (TJAPlayer3.Tx.Lane_Background_Sub != null) TJAPlayer3.Tx.Lane_Background_Sub.Opacity = 255; + if (TJAPlayer3.Tx.Lane_Background_GoGo != null) TJAPlayer3.Tx.Lane_Background_GoGo.Opacity = 255; + } + + return base.Draw(); + } + + public void ゴーゴー炎() + { + //判定枠 + if (TJAPlayer3.Tx.Judge_Frame != null) + { + TJAPlayer3.Tx.Judge_Frame.b加算合成 = TJAPlayer3.Skin.Game_JudgeFrame_AddBlend; + for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) + { + TJAPlayer3.Tx.Judge_Frame.t2D描画( + TJAPlayer3.stage演奏ドラム画面.NoteOriginX[i], + TJAPlayer3.stage演奏ドラム画面.NoteOriginY[i], new Rectangle(0, 0, TJAPlayer3.Skin.Game_Notes_Size[0], TJAPlayer3.Skin.Game_Notes_Size[1])); + } + } + + + #region[ ゴーゴー炎 ] + for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) + { + if (TJAPlayer3.stage演奏ドラム画面.bIsGOGOTIME[i] && !TJAPlayer3.ConfigIni.SimpleMode) + { + this.ctゴーゴー炎.TickLoop(); + + if (TJAPlayer3.Tx.Effects_Fire != null) + { + float f倍率 = 1.0f; + + float[] ar倍率 = new float[] { 0.8f, 1.2f, 1.7f, 2.5f, 2.3f, 2.2f, 2.0f, 1.8f, 1.7f, 1.6f, 1.6f, 1.5f, 1.5f, 1.4f, 1.3f, 1.2f, 1.1f, 1.0f }; + + f倍率 = ar倍率[this.ctゴーゴー.CurrentValue]; + + /* + Matrix mat = Matrix.Identity; + mat *= Matrix.Scaling(f倍率, f倍率, 1.0f); + mat *= Matrix.Translation(TJAPlayer3.Skin.nScrollFieldX[i] - SampleFramework.GameWindowSize.Width / 2.0f, -(TJAPlayer3.Skin.nJudgePointY[i] - SampleFramework.GameWindowSize.Height / 2.0f), 0f); + */ + //this.txゴーゴー炎.b加算合成 = true; + + //this.ctゴーゴー.n現在の値 = 6; + + int width = TJAPlayer3.Tx.Effects_Fire.szTextureSize.Width / 7; + int height = TJAPlayer3.Tx.Effects_Fire.szTextureSize.Height; + + float x = -(width * (f倍率 - 1.0f) / 2.0f); + float y = -(height * (f倍率 - 1.0f) / 2.0f); + + if (TJAPlayer3.ConfigIni.nPlayerCount == 5) + { + x += TJAPlayer3.Skin.Game_Effect_Fire_5P[0] + (TJAPlayer3.Skin.Game_UIMove_5P[0] * i); + y += TJAPlayer3.Skin.Game_Effect_Fire_5P[1] + (TJAPlayer3.Skin.Game_UIMove_5P[1] * i); + } + else if (TJAPlayer3.ConfigIni.nPlayerCount == 4 || TJAPlayer3.ConfigIni.nPlayerCount == 3) + { + x += TJAPlayer3.Skin.Game_Effect_Fire_4P[0] + (TJAPlayer3.Skin.Game_UIMove_4P[0] * i); + y += TJAPlayer3.Skin.Game_Effect_Fire_4P[1] + (TJAPlayer3.Skin.Game_UIMove_4P[1] * i); + } + else + { + x += TJAPlayer3.Skin.Game_Effect_Fire_X[i]; + y += TJAPlayer3.Skin.Game_Effect_Fire_Y[i]; + } + + TJAPlayer3.Tx.Effects_Fire.vcScaleRatio.X = f倍率; + TJAPlayer3.Tx.Effects_Fire.vcScaleRatio.Y = f倍率; + + TJAPlayer3.Tx.Effects_Fire.t2D描画(x, y, + new Rectangle(width * (this.ctゴーゴー炎.CurrentValue), 0, width, height)); + } + } + } + #endregion + for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) + { + if (!this.st状態[i].ct進行.IsStoped) + { + this.st状態[i].ct進行.Tick(); + if (this.st状態[i].ct進行.IsEnded) + { + this.st状態[i].ct進行.Stop(); + } + //if( this.txアタックエフェクトLower != null ) + { + //this.txアタックエフェクトLower.b加算合成 = true; + int n = this.st状態[i].nIsBig == 1 ? 520 : 0; + + float x = 0; + float y = 0; + + if (TJAPlayer3.ConfigIni.nPlayerCount == 5) + { + x = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_5P[0] + (TJAPlayer3.Skin.Game_UIMove_5P[0] * i); + y = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_5P[1] + (TJAPlayer3.Skin.Game_UIMove_5P[1] * i); + } + else if (TJAPlayer3.ConfigIni.nPlayerCount == 4 || TJAPlayer3.ConfigIni.nPlayerCount == 3) + { + x = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_4P[0] + (TJAPlayer3.Skin.Game_UIMove_4P[0] * i); + y = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_4P[1] + (TJAPlayer3.Skin.Game_UIMove_4P[1] * i); + } + else + { + x = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_X[i]; + y = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_Y[i]; + } + x += TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLX(i); + y += TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLY(i); + + switch (st状態[i].judge) + { + case ENoteJudge.Perfect: + case ENoteJudge.Great: + case ENoteJudge.Auto: + if (!TJAPlayer3.ConfigIni.SimpleMode) + { + //this.txアタックエフェクトLower.t2D描画( CDTXMania.app.Device, 285, 127, new Rectangle( this.st状態[ i ].ct進行.n現在の値 * 260, n, 260, 260 ) ); + if (this.st状態[i].nIsBig == 1 && TJAPlayer3.Tx.Effects_Hit_Great_Big[this.st状態[i].ct進行.CurrentValue] != null) + TJAPlayer3.Tx.Effects_Hit_Great_Big[this.st状態[i].ct進行.CurrentValue].t2D描画(x, y); + else if (TJAPlayer3.Tx.Effects_Hit_Great[this.st状態[i].ct進行.CurrentValue] != null) + TJAPlayer3.Tx.Effects_Hit_Great[this.st状態[i].ct進行.CurrentValue].t2D描画(x, y); + } + break; + + case ENoteJudge.Good: + //this.txアタックエフェクトLower.t2D描画( CDTXMania.app.Device, 285, 127, new Rectangle( this.st状態[ i ].ct進行.n現在の値 * 260, n + 260, 260, 260 ) ); + if (this.st状態[i].nIsBig == 1 && TJAPlayer3.Tx.Effects_Hit_Good_Big[this.st状態[i].ct進行.CurrentValue] != null) + TJAPlayer3.Tx.Effects_Hit_Good_Big[this.st状態[i].ct進行.CurrentValue].t2D描画(x, y); + else if (TJAPlayer3.Tx.Effects_Hit_Good[this.st状態[i].ct進行.CurrentValue] != null) + TJAPlayer3.Tx.Effects_Hit_Good[this.st状態[i].ct進行.CurrentValue].t2D描画(x, y); + break; + + case ENoteJudge.Miss: + case ENoteJudge.Bad: + break; + } + } + } + } + + + } + + public virtual void Start(int nLane, ENoteJudge judge, bool b両手入力, int nPlayer) + { + //2017.08.15 kairera0467 排他なので番地をそのまま各レーンの状態として扱う + + //for( int n = 0; n < 1; n++ ) + { + this.st状態[nPlayer].ct進行 = new CCounter(0, 14, 20, TJAPlayer3.Timer); + this.st状態[nPlayer].judge = judge; + this.st状態[nPlayer].nPlayer = nPlayer; + + switch (nLane) + { + case 0x11: + case 0x12: + this.st状態[nPlayer].nIsBig = 0; + break; + case 0x13: + case 0x14: + case 0x1A: + case 0x1B: + { + if (b両手入力) + this.st状態[nPlayer].nIsBig = 1; + else + this.st状態[nPlayer].nIsBig = 0; + } + break; + } + } + } + + + public void GOGOSTART() + { + this.ctゴーゴー = new CCounter(0, 17, 18, TJAPlayer3.Timer); + if(TJAPlayer3.ConfigIni.nPlayerCount == 1 && TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] != (int)Difficulty.Dan) TJAPlayer3.stage演奏ドラム画面.GoGoSplash.StartSplash(); + } + + + public void t分岐レイヤー_コース変化(CDTX.ECourse n現在, CDTX.ECourse n次回, int nPlayer) + { + if (n現在 == n次回) + { + return; + } + this.stBranch[nPlayer].ct分岐アニメ進行 = new CCounter(0, 300, 2, TJAPlayer3.Timer); + + this.stBranch[nPlayer].nBranchレイヤー透明度 = 6; + this.stBranch[nPlayer].nY座標 = 1; + + this.stBranch[nPlayer].nBefore = n現在; + this.stBranch[nPlayer].nAfter = n次回; + + TJAPlayer3.stage演奏ドラム画面.actLane.t分岐レイヤー_コース変化(n現在, n次回, nPlayer); + } + + public void t判定枠移動(double db移動時間, int n移動px, int n移動方向, int nPlayer, int vJs) + { + this.n移動開始時刻[nPlayer] = (int)(SoundManager.PlayTimer.NowTime * TJAPlayer3.ConfigIni.SongPlaybackSpeed); + this.n移動開始X[nPlayer] = TJAPlayer3.stage演奏ドラム画面.JPOSCROLLX[nPlayer]; + this.n移動開始Y[nPlayer] = TJAPlayer3.stage演奏ドラム画面.JPOSCROLLY[nPlayer]; + this.n総移動時間[nPlayer] = (int)(db移動時間 * 1000); + this.n移動方向[nPlayer] = n移動方向; + this.n移動距離px[nPlayer] = n移動px; + this.nVerticalJSPos[nPlayer] = vJs; + if (n移動方向 == 0) + { + this.n移動目的場所X[nPlayer] = TJAPlayer3.stage演奏ドラム画面.JPOSCROLLX[nPlayer] - n移動px; + this.n移動目的場所Y[nPlayer] = TJAPlayer3.stage演奏ドラム画面.JPOSCROLLY[nPlayer] - vJs; + } + else + { + this.n移動目的場所X[nPlayer] = TJAPlayer3.stage演奏ドラム画面.JPOSCROLLX[nPlayer] + n移動px; + this.n移動目的場所Y[nPlayer] = TJAPlayer3.stage演奏ドラム画面.JPOSCROLLY[nPlayer] + vJs; + } + } + + #region[ private ] + //----------------- + //private CTexture txLane; + //private CTexture txLaneB; + //private CTexture tx枠線; + //private CTexture tx判定枠; + //private CTexture txゴーゴー; + //private CTexture txゴーゴー炎; + //private CTexture[] txArゴーゴー炎; + //private CTexture[] txArアタックエフェクトLower_A; + //private CTexture[] txArアタックエフェクトLower_B; + //private CTexture[] txArアタックエフェクトLower_C; + //private CTexture[] txArアタックエフェクトLower_D; + + //private CTexture[] txLaneFlush = new CTexture[3]; + + //private CTexture[] tx普通譜面 = new CTexture[2]; + //private CTexture[] tx玄人譜面 = new CTexture[2]; + //private CTexture[] tx達人譜面 = new CTexture[2]; + + //private CTextureAf txアタックエフェクトLower; + + protected STSTATUS[] st状態 = new STSTATUS[5]; + + //private CTexture[] txゴーゴースプラッシュ; + + [StructLayout(LayoutKind.Sequential)] + protected struct STSTATUS + { + public bool b使用中; + public CCounter ct進行; + public ENoteJudge judge; + public int nIsBig; + public int n透明度; + public int nPlayer; + } + private CCounter ctゴーゴー; + private CCounter ctゴーゴー炎; + + + + public STBRANCH[] stBranch = new STBRANCH[5]; + [StructLayout(LayoutKind.Sequential)] + public struct STBRANCH + { + public CCounter ct分岐アニメ進行; + public CDTX.ECourse nBefore; + public CDTX.ECourse nAfter; + + public long nフラッシュ制御タイマ; + public int nBranchレイヤー透明度; + public int nBranch文字透明度; + public int nY座標; + public int nY; + } + + + private int[] n総移動時間 = new int[5]; + private int[] n移動開始X = new int[5]; + private int[] n移動開始Y = new int[5]; + private int[] n移動開始時刻 = new int[5]; + private int[] n移動距離px = new int[5]; + private int[] nVerticalJSPos = new int[5]; + private int[] n移動目的場所X = new int[5]; + private int[] n移動目的場所Y = new int[5]; + private int[] n移動方向 = new int[5]; + + //----------------- + #endregion + } +} diff --git a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏DrumsMob.cs b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplMob.cs similarity index 97% rename from OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏DrumsMob.cs rename to OpenTaiko/src/Stages/07.Game/Taiko/CActImplMob.cs index 289a7740..a51eb3a7 100644 --- a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏DrumsMob.cs +++ b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplMob.cs @@ -7,12 +7,12 @@ using FDK; namespace TJAPlayer3 { - internal class CAct演奏DrumsMob : CActivity + internal class CActImplMob : CActivity { /// /// 踊り子 /// - public CAct演奏DrumsMob() + public CActImplMob() { base.IsDeActivated = true; } diff --git a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏DrumsMtaiko.cs b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplMtaiko.cs similarity index 99% rename from OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏DrumsMtaiko.cs rename to OpenTaiko/src/Stages/07.Game/Taiko/CActImplMtaiko.cs index ddfd46e3..2ce2a301 100644 --- a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏DrumsMtaiko.cs +++ b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplMtaiko.cs @@ -9,13 +9,13 @@ using Rectangle = System.Drawing.Rectangle; namespace TJAPlayer3 { - internal class CAct演奏DrumsMtaiko : CActivity + internal class CActImplMtaiko : CActivity { /// /// mtaiko部分を描画するクラス。左側だけ。 /// /// - public CAct演奏DrumsMtaiko() + public CActImplMtaiko() { base.IsDeActivated = true; } @@ -210,16 +210,16 @@ namespace TJAPlayer3 } */ - int getMTaikoOpacity(int brightness) - { - if (TJAPlayer3.ConfigIni.SimpleMode) - { - return brightness <= 0 ? 0 : 255; - } - else - { - return brightness * 73; - } + int getMTaikoOpacity(int brightness) + { + if (TJAPlayer3.ConfigIni.SimpleMode) + { + return brightness <= 0 ? 0 : 255; + } + else + { + return brightness * 73; + } } for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) diff --git a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drumsパッド.cs b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplPad.cs similarity index 52% rename from OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drumsパッド.cs rename to OpenTaiko/src/Stages/07.Game/Taiko/CActImplPad.cs index 27755574..ac6662c9 100644 --- a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drumsパッド.cs +++ b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplPad.cs @@ -7,85 +7,12 @@ using FDK; namespace TJAPlayer3 { - internal class CAct演奏Drumsパッド : CActivity + internal class CActImplPad : CActivity { // コンストラクタ - public CAct演奏Drumsパッド() + public CActImplPad() { - ST基本位置[] st基本位置Array = new ST基本位置[ 10 ]; - - //LC - ST基本位置 st基本位置 = new ST基本位置(); - st基本位置.x = 263; - st基本位置.y = 10; - st基本位置.rc = new Rectangle( 0, 0, 0x60, 0x60 ); - st基本位置Array[ 0 ] = st基本位置; - - //HH - ST基本位置 st基本位置2 = new ST基本位置(); - st基本位置2.x = 336; - st基本位置2.y = 10; - st基本位置2.rc = new Rectangle( 0x60, 0, 0x60, 0x60 ); - st基本位置Array[ 1 ] = st基本位置2; - - //SD - ST基本位置 st基本位置3 = new ST基本位置(); - st基本位置3.x = 446; - st基本位置3.y = 10; - st基本位置3.rc = new Rectangle( 0, 0x60, 0x60, 0x60 ); - st基本位置Array[ 2 ] = st基本位置3; - - //BD - ST基本位置 st基本位置4 = new ST基本位置(); - st基本位置4.x = 565; - st基本位置4.y = 10; - st基本位置4.rc = new Rectangle( 0, 0xc0, 0x60, 0x60); - st基本位置Array[ 3 ] = st基本位置4; - - //HT - ST基本位置 st基本位置5 = new ST基本位置(); - st基本位置5.x = 510; - st基本位置5.y = 10; - st基本位置5.rc = new Rectangle( 0x60, 0x60, 0x60, 0x60 ); - st基本位置Array[ 4 ] = st基本位置5; - - //LT - ST基本位置 st基本位置6 = new ST基本位置(); - st基本位置6.x = 622; - st基本位置6.y = 10; - st基本位置6.rc = new Rectangle( 0xc0, 0x60, 0x60, 0x60 ); - st基本位置Array[ 5 ] = st基本位置6; - - //FT - ST基本位置 st基本位置7 = new ST基本位置(); - st基本位置7.x = 672; - st基本位置7.y = 10; - st基本位置7.rc = new Rectangle( 288, 0x60, 0x60, 0x60 ); - st基本位置Array[ 6 ] = st基本位置7; - - //CY - ST基本位置 st基本位置8 = new ST基本位置(); - st基本位置8.x = 0x2df; - st基本位置8.y = 10; - st基本位置8.rc = new Rectangle( 0xc0, 0, 0x60, 0x60 ); - st基本位置Array[ 7 ] = st基本位置8; - - //RD - ST基本位置 st基本位置9 = new ST基本位置(); - st基本位置9.x = 0x317; - st基本位置9.y = 10; - st基本位置9.rc = new Rectangle( 288, 0, 0x60, 0x60 ); - st基本位置Array[ 8 ] = st基本位置9; - - //LP - ST基本位置 st基本位置10 = new ST基本位置(); - st基本位置10.x = 0x18c; - st基本位置10.y = 10; - st基本位置10.rc = new Rectangle( 0x60, 0xc0, 0x60, 0x60); - st基本位置Array[ 9 ] = st基本位置10; - - this.st基本位置 = st基本位置Array; base.IsDeActivated = true; } @@ -191,20 +118,10 @@ namespace TJAPlayer3 public int nY座標オフセットdot; public int nY座標加速度dot; } - [StructLayout( LayoutKind.Sequential )] - private struct ST基本位置 - { - public int x; - public int y; - public Rectangle rc; - } private long nY座標制御タイマ; private long nフラッシュ制御タイマ; - private readonly int[] n描画順 = new int[] { 9, 3, 2, 6, 5, 4, 8, 7, 1, 0 }; - // LP BD SD FT HT LT RD CY HH LC private STパッド状態[] stパッド状態 = new STパッド状態[ 10 ]; - private readonly ST基本位置[] st基本位置; //----------------- #endregion } diff --git a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drums連打.cs b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplRoll.cs similarity index 74% rename from OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drums連打.cs rename to OpenTaiko/src/Stages/07.Game/Taiko/CActImplRoll.cs index 5f15d00a..5443b0a1 100644 --- a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drums連打.cs +++ b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplRoll.cs @@ -1,229 +1,181 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Drawing; -using System.Diagnostics; -using System.Runtime.InteropServices; -using FDK; - -namespace TJAPlayer3 -{ - internal class CAct演奏Drums連打 : CActivity - { - - - public CAct演奏Drums連打() - { - ST文字位置[] st文字位置Array = new ST文字位置[ 11 ]; - - ST文字位置 st文字位置 = new ST文字位置(); - st文字位置.ch = '0'; - st文字位置.pt = new Point( 0, 0 ); - st文字位置Array[ 0 ] = st文字位置; - ST文字位置 st文字位置2 = new ST文字位置(); - st文字位置2.ch = '1'; - st文字位置2.pt = new Point( 62, 0 ); - st文字位置Array[ 1 ] = st文字位置2; - ST文字位置 st文字位置3 = new ST文字位置(); - st文字位置3.ch = '2'; - st文字位置3.pt = new Point( 124, 0 ); - st文字位置Array[ 2 ] = st文字位置3; - ST文字位置 st文字位置4 = new ST文字位置(); - st文字位置4.ch = '3'; - st文字位置4.pt = new Point( 186, 0 ); - st文字位置Array[ 3 ] = st文字位置4; - ST文字位置 st文字位置5 = new ST文字位置(); - st文字位置5.ch = '4'; - st文字位置5.pt = new Point( 248, 0 ); - st文字位置Array[ 4 ] = st文字位置5; - ST文字位置 st文字位置6 = new ST文字位置(); - st文字位置6.ch = '5'; - st文字位置6.pt = new Point( 310, 0 ); - st文字位置Array[ 5 ] = st文字位置6; - ST文字位置 st文字位置7 = new ST文字位置(); - st文字位置7.ch = '6'; - st文字位置7.pt = new Point( 372, 0 ); - st文字位置Array[ 6 ] = st文字位置7; - ST文字位置 st文字位置8 = new ST文字位置(); - st文字位置8.ch = '7'; - st文字位置8.pt = new Point( 434, 0 ); - st文字位置Array[ 7 ] = st文字位置8; - ST文字位置 st文字位置9 = new ST文字位置(); - st文字位置9.ch = '8'; - st文字位置9.pt = new Point( 496, 0 ); - st文字位置Array[ 8 ] = st文字位置9; - ST文字位置 st文字位置10 = new ST文字位置(); - st文字位置10.ch = '9'; - st文字位置10.pt = new Point( 558, 0 ); - st文字位置Array[ 9 ] = st文字位置10; - - this.st文字位置 = st文字位置Array; - - base.IsDeActivated = true; - - } - - public override void Activate() - { - this.ct連打枠カウンター = new CCounter[ 5 ]; - this.ct連打アニメ = new CCounter[5]; - FadeOut = new Animations.FadeOut[5]; - for ( int i = 0; i < 5; i++ ) - { - this.ct連打枠カウンター[ i ] = new CCounter(); - this.ct連打アニメ[i] = new CCounter(); - // 後から変えれるようにする。大体10フレーム分。 - FadeOut[i] = new Animations.FadeOut(167); - } - this.b表示 = new bool[]{ false, false, false, false, false }; - this.n連打数 = new int[ 5 ]; - - base.Activate(); - } - - public override void DeActivate() - { - for (int i = 0; i < 5; i++) - { - ct連打枠カウンター[i] = null; - ct連打アニメ[i] = null; - FadeOut[i] = null; - } - base.DeActivate(); - } - - public override void CreateManagedResource() - { - base.CreateManagedResource(); - } - - public override void ReleaseManagedResource() - { - base.ReleaseManagedResource(); - } - - public override int Draw( ) - { - return base.Draw(); - } - - public int On進行描画( int n連打数, int player ) - { - if (TJAPlayer3.ConfigIni.nPlayerCount > 2) return base.Draw(); - - this.ct連打枠カウンター[ player ].Tick(); - this.ct連打アニメ[player].Tick(); - FadeOut[player].Tick(); - //1PY:-3 2PY:514 - //仮置き - int[] nRollBalloon = new int[] { -3, 514, 0, 0 }; - int[] nRollNumber = new int[] { 48, 559, 0, 0 }; - for( int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++ ) - { - //CDTXMania.act文字コンソール.tPrint(0, 0, C文字コンソール.Eフォント種別.白, this.ct連打枠カウンター[player].n現在の値.ToString()); - if ( this.ct連打枠カウンター[ player ].IsUnEnded) - { - if (ct連打枠カウンター[player].CurrentValue > 66 && !FadeOut[player].Counter.IsTicked) - { - FadeOut[player].Start(); - } - var opacity = (int)FadeOut[player].GetAnimation(); - - if(ct連打枠カウンター[player].CurrentValue == 0 || ct連打枠カウンター[player].CurrentValue == 60) - { - bNowRollAnime = 0; - TJAPlayer3.Tx.Balloon_Number_Roll.Opacity = 64; - } - else if (ct連打枠カウンター[player].CurrentValue == 1 || ct連打枠カウンター[player].CurrentValue == 59) - { - bNowRollAnime = 1; - TJAPlayer3.Tx.Balloon_Number_Roll.Opacity = 128; - } - else if (ct連打枠カウンター[player].CurrentValue == 2 || ct連打枠カウンター[player].CurrentValue == 58) - { - bNowRollAnime = 2; - TJAPlayer3.Tx.Balloon_Number_Roll.Opacity = 192; - } - else if (ct連打枠カウンター[player].CurrentValue == 3 || ct連打枠カウンター[player].CurrentValue == 57) - { - bNowRollAnime = 3; - TJAPlayer3.Tx.Balloon_Number_Roll.Opacity = 255; - } - else if (ct連打枠カウンター[player].CurrentValue >= 4 || ct連打枠カウンター[player].CurrentValue <= 56) - { - bNowRollAnime = 4; - TJAPlayer3.Tx.Balloon_Number_Roll.Opacity = 255; - } - - float width = TJAPlayer3.Tx.Balloon_Roll.szTextureSize.Width / 5.0f; - float height = TJAPlayer3.Tx.Balloon_Roll.szTextureSize.Height; - - TJAPlayer3.Tx.Balloon_Roll?.t2D描画(TJAPlayer3.Skin.Game_Balloon_Roll_Frame_X[player], TJAPlayer3.Skin.Game_Balloon_Roll_Frame_Y[player], new RectangleF(0 + bNowRollAnime * width, 0, width, height)); - this.t文字表示(TJAPlayer3.Skin.Game_Balloon_Roll_Number_X[player], TJAPlayer3.Skin.Game_Balloon_Roll_Number_Y[player], n連打数, player); - } - } - - return base.Draw(); - } - - public void t枠表示時間延長(int player, bool first) - { - if ((this.ct連打枠カウンター[player].CurrentValue >= 6 && !first) || first) - this.ct連打枠カウンター[player] = new CCounter(0, 60, 40, TJAPlayer3.Timer); - - if(!first) - this.ct連打枠カウンター[player].CurrentValue = 5; - else - this.ct連打枠カウンター[player].CurrentValue = 0; - } - - public int bNowRollAnime; - public bool[] b表示; - public int[] n連打数; - public CCounter[] ct連打枠カウンター; - //private CTexture tx連打枠; - //private CTexture tx連打数字; - private readonly ST文字位置[] st文字位置; - public CCounter[] ct連打アニメ; - private float[] RollScale = new float[] - { - 0.000f, - 0.123f, // リピート - 0.164f, - 0.164f, - 0.164f, - 0.137f, - 0.110f, - 0.082f, - 0.055f, - 0.000f - }; - private Animations.FadeOut[] FadeOut; - - [StructLayout(LayoutKind.Sequential)] - private struct ST文字位置 - { - public char ch; - public Point pt; - } - - private void t文字表示( int x, int y, int num, int nPlayer) - { - TJAPlayer3.Tx.Balloon_Number_Roll.vcScaleRatio.X = TJAPlayer3.Skin.Game_Balloon_Roll_Number_Scale; - TJAPlayer3.Tx.Balloon_Number_Roll.vcScaleRatio.Y = TJAPlayer3.Skin.Game_Balloon_Roll_Number_Scale + RollScale[this.ct連打アニメ[nPlayer].CurrentValue]; - - int[] nums = CConversion.SeparateDigits(num); - for (int j = 0; j < nums.Length; j++) - { - float offset = j - (nums.Length / 2.0f); - float _x = x - (TJAPlayer3.Skin.Game_Balloon_Number_Interval[0] * offset); - float _y = y - (TJAPlayer3.Skin.Game_Balloon_Number_Interval[1] * offset); - - float width = TJAPlayer3.Tx.Balloon_Number_Roll.sz画像サイズ.Width / 10.0f; - float height = TJAPlayer3.Tx.Balloon_Number_Roll.sz画像サイズ.Height; - - TJAPlayer3.Tx.Balloon_Number_Roll.t2D拡大率考慮下基準描画(_x, _y, new RectangleF(width * nums[j], 0, width, height)); - } - } - } -} +using System; +using System.Collections.Generic; +using System.Text; +using System.Drawing; +using System.Diagnostics; +using System.Runtime.InteropServices; +using FDK; + +namespace TJAPlayer3 +{ + internal class CActImplRoll : CActivity + { + + + public CActImplRoll() + { + base.IsDeActivated = true; + } + + public override void Activate() + { + this.ct連打枠カウンター = new CCounter[ 5 ]; + this.ct連打アニメ = new CCounter[5]; + FadeOut = new Animations.FadeOut[5]; + for ( int i = 0; i < 5; i++ ) + { + this.ct連打枠カウンター[ i ] = new CCounter(); + this.ct連打アニメ[i] = new CCounter(); + // 後から変えれるようにする。大体10フレーム分。 + FadeOut[i] = new Animations.FadeOut(167); + } + this.b表示 = new bool[]{ false, false, false, false, false }; + this.n連打数 = new int[ 5 ]; + + base.Activate(); + } + + public override void DeActivate() + { + for (int i = 0; i < 5; i++) + { + ct連打枠カウンター[i] = null; + ct連打アニメ[i] = null; + FadeOut[i] = null; + } + base.DeActivate(); + } + + public override void CreateManagedResource() + { + base.CreateManagedResource(); + } + + public override void ReleaseManagedResource() + { + base.ReleaseManagedResource(); + } + + public override int Draw( ) + { + return base.Draw(); + } + + public int On進行描画( int n連打数, int player ) + { + if (TJAPlayer3.ConfigIni.nPlayerCount > 2) return base.Draw(); + + this.ct連打枠カウンター[ player ].Tick(); + this.ct連打アニメ[player].Tick(); + FadeOut[player].Tick(); + //1PY:-3 2PY:514 + //仮置き + int[] nRollBalloon = new int[] { -3, 514, 0, 0 }; + int[] nRollNumber = new int[] { 48, 559, 0, 0 }; + for( int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++ ) + { + //CDTXMania.act文字コンソール.tPrint(0, 0, C文字コンソール.Eフォント種別.白, this.ct連打枠カウンター[player].n現在の値.ToString()); + if ( this.ct連打枠カウンター[ player ].IsUnEnded) + { + if (ct連打枠カウンター[player].CurrentValue > 66 && !FadeOut[player].Counter.IsTicked) + { + FadeOut[player].Start(); + } + var opacity = (int)FadeOut[player].GetAnimation(); + + if(ct連打枠カウンター[player].CurrentValue == 0 || ct連打枠カウンター[player].CurrentValue == 60) + { + bNowRollAnime = 0; + TJAPlayer3.Tx.Balloon_Number_Roll.Opacity = 64; + } + else if (ct連打枠カウンター[player].CurrentValue == 1 || ct連打枠カウンター[player].CurrentValue == 59) + { + bNowRollAnime = 1; + TJAPlayer3.Tx.Balloon_Number_Roll.Opacity = 128; + } + else if (ct連打枠カウンター[player].CurrentValue == 2 || ct連打枠カウンター[player].CurrentValue == 58) + { + bNowRollAnime = 2; + TJAPlayer3.Tx.Balloon_Number_Roll.Opacity = 192; + } + else if (ct連打枠カウンター[player].CurrentValue == 3 || ct連打枠カウンター[player].CurrentValue == 57) + { + bNowRollAnime = 3; + TJAPlayer3.Tx.Balloon_Number_Roll.Opacity = 255; + } + else if (ct連打枠カウンター[player].CurrentValue >= 4 || ct連打枠カウンター[player].CurrentValue <= 56) + { + bNowRollAnime = 4; + TJAPlayer3.Tx.Balloon_Number_Roll.Opacity = 255; + } + + float width = TJAPlayer3.Tx.Balloon_Roll.szTextureSize.Width / 5.0f; + float height = TJAPlayer3.Tx.Balloon_Roll.szTextureSize.Height; + + TJAPlayer3.Tx.Balloon_Roll?.t2D描画(TJAPlayer3.Skin.Game_Balloon_Roll_Frame_X[player], TJAPlayer3.Skin.Game_Balloon_Roll_Frame_Y[player], new RectangleF(0 + bNowRollAnime * width, 0, width, height)); + this.t文字表示(TJAPlayer3.Skin.Game_Balloon_Roll_Number_X[player], TJAPlayer3.Skin.Game_Balloon_Roll_Number_Y[player], n連打数, player); + } + } + + return base.Draw(); + } + + public void t枠表示時間延長(int player, bool first) + { + if ((this.ct連打枠カウンター[player].CurrentValue >= 6 && !first) || first) + this.ct連打枠カウンター[player] = new CCounter(0, 60, 40, TJAPlayer3.Timer); + + if(!first) + this.ct連打枠カウンター[player].CurrentValue = 5; + else + this.ct連打枠カウンター[player].CurrentValue = 0; + } + + public int bNowRollAnime; + public bool[] b表示; + public int[] n連打数; + public CCounter[] ct連打枠カウンター; + + public CCounter[] ct連打アニメ; + private float[] RollScale = new float[] + { + 0.000f, + 0.123f, // リピート + 0.164f, + 0.164f, + 0.164f, + 0.137f, + 0.110f, + 0.082f, + 0.055f, + 0.000f + }; + private Animations.FadeOut[] FadeOut; + + [StructLayout(LayoutKind.Sequential)] + private struct ST文字位置 + { + public char ch; + public Point pt; + } + + private void t文字表示( int x, int y, int num, int nPlayer) + { + TJAPlayer3.Tx.Balloon_Number_Roll.vcScaleRatio.X = TJAPlayer3.Skin.Game_Balloon_Roll_Number_Scale; + TJAPlayer3.Tx.Balloon_Number_Roll.vcScaleRatio.Y = TJAPlayer3.Skin.Game_Balloon_Roll_Number_Scale + RollScale[this.ct連打アニメ[nPlayer].CurrentValue]; + + int[] nums = CConversion.SeparateDigits(num); + for (int j = 0; j < nums.Length; j++) + { + float offset = j - (nums.Length / 2.0f); + float _x = x - (TJAPlayer3.Skin.Game_Balloon_Number_Interval[0] * offset); + float _y = y - (TJAPlayer3.Skin.Game_Balloon_Number_Interval[1] * offset); + + float width = TJAPlayer3.Tx.Balloon_Number_Roll.sz画像サイズ.Width / 10.0f; + float height = TJAPlayer3.Tx.Balloon_Number_Roll.sz画像サイズ.Height; + + TJAPlayer3.Tx.Balloon_Number_Roll.t2D拡大率考慮下基準描画(_x, _y, new RectangleF(width * nums[j], 0, width, height)); + } + } + } +} diff --git a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drums連打キャラ.cs b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplRollEffect.cs similarity index 66% rename from OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drums連打キャラ.cs rename to OpenTaiko/src/Stages/07.Game/Taiko/CActImplRollEffect.cs index 8750c0db..b0eff380 100644 --- a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drums連打キャラ.cs +++ b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplRollEffect.cs @@ -7,11 +7,11 @@ using FDK; namespace TJAPlayer3 { - internal class CAct演奏Drums連打キャラ : CActivity + internal class CActImplRollEffect : CActivity { // コンストラクタ - public CAct演奏Drums連打キャラ() + public CActImplRollEffect() { base.IsDeActivated = true; } @@ -22,32 +22,6 @@ namespace TJAPlayer3 { if (TJAPlayer3.ConfigIni.SimpleMode) return; - //if( CDTXMania.Tx.Effects_Roll[0] != null ) - //{ - // int[] arXseed = new int[] { 56, -10, 200, 345, 100, 451, 600, 260, -30, 534, 156, 363 }; - // for (int i = 0; i < 1; i++) - // { - // for (int j = 0; j < 64; j++) - // { - // if (!this.st連打キャラ[j].b使用中) - // { - // this.st連打キャラ[j].b使用中 = true; - // if(this.nTex枚数 <= 1) this.st連打キャラ[j].nColor = 0; - // else this.st連打キャラ[j].nColor = CDTXMania.Random.Next( 0, this.nTex枚数 - 1); - // this.st連打キャラ[j].ct進行 = new CCounter( 0, 1000, 4, CDTXMania.Timer); // カウンタ - - // //位置生成(β版) - // int nXseed = CDTXMania.Random.Next(12); - // this.st連打キャラ[ j ].fX開始点 = arXseed[ nXseed ]; - // this.st連打キャラ[j].fX = arXseed[ nXseed ]; - // this.st連打キャラ[j].fY = 720; - // this.st連打キャラ[j].fX加速度 = 5/2; - // this.st連打キャラ[j].fY加速度 = 5/2; - // break; - // } - // } - // } - //} for (int i = 0; i < 128; i++) { if(!RollCharas[i].IsUsing) @@ -93,12 +67,7 @@ namespace TJAPlayer3 public override void Activate() { - //for (int i = 0; i < 64; i++) - //{ - // this.st連打キャラ[i] = new ST連打キャラ(); - // this.st連打キャラ[i].b使用中 = false; - // this.st連打キャラ[i].ct進行 = new CCounter(); - //} + for (int i = 0; i < 128; i++) { RollCharas[i] = new RollChara(); @@ -111,10 +80,7 @@ namespace TJAPlayer3 } public override void DeActivate() { - //for (int i = 0; i < 64; i++) - //{ - // this.st連打キャラ[i].ct進行 = null; - //} + for (int i = 0; i < 128; i++) { RollCharas[i].Counter = null; @@ -123,51 +89,18 @@ namespace TJAPlayer3 } public override void CreateManagedResource() { - //this.nTex枚数 = 4; - //this.txChara = new CTexture[ this.nTex枚数 ]; - //for (int i = 0; i < this.nTex枚数; i++) - //{ - // this.txChara[ i ] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\RollEffect\00\" + i.ToString() + ".png" ) ); - //} base.CreateManagedResource(); } public override void ReleaseManagedResource() { - // for (int i = 0; i < this.nTex枚数; i++) - // { - //CDTXMania.tテクスチャの解放( ref this.txChara[ i ] ); - // } + base.ReleaseManagedResource(); } - public override int Draw() + public override int Draw() { if ( !base.IsDeActivated && !TJAPlayer3.ConfigIni.SimpleMode) { - //for( int i = 0; i < 64; i++ ) - //{ - // if( this.st連打キャラ[i].b使用中 ) - // { - // this.st連打キャラ[i].n前回のValue = this.st連打キャラ[i].ct進行.n現在の値; - // this.st連打キャラ[i].ct進行.t進行(); - // if (this.st連打キャラ[i].ct進行.b終了値に達した) - // { - // this.st連打キャラ[i].ct進行.t停止(); - // this.st連打キャラ[i].b使用中 = false; - // } - // for (int n = this.st連打キャラ[i].n前回のValue; n < this.st連打キャラ[i].ct進行.n現在の値; n++) - // { - // this.st連打キャラ[i].fX += this.st連打キャラ[i].fX加速度; - // this.st連打キャラ[i].fY -= this.st連打キャラ[i].fY加速度; - // } - - // if(CDTXMania.Tx.Effects_Roll[ this.st連打キャラ[ i ].nColor ] != null ) - // { - // CDTXMania.Tx.Effects_Roll[ this.st連打キャラ[ i ].nColor ].t2D描画( CDTXMania.app.Device, (int)this.st連打キャラ[i].fX, (int)this.st連打キャラ[i].fY, new Rectangle( this.st連打キャラ[i].nColor * 0, 0, 128, 128 ) ); - // } - // } - - //} if (TJAPlayer3.ConfigIni.nPlayerCount > 2) return 0; diff --git a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏DrumsRunner.cs b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplRunner.cs similarity index 96% rename from OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏DrumsRunner.cs rename to OpenTaiko/src/Stages/07.Game/Taiko/CActImplRunner.cs index fff9bd4e..f85315bc 100644 --- a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏DrumsRunner.cs +++ b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplRunner.cs @@ -1,281 +1,281 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Drawing; -using System.Runtime.InteropServices; -using FDK; -using System.Diagnostics; - -namespace TJAPlayer3 -{ - internal class CAct演奏DrumsRunner : CActivity - { - /// - /// ランナー - /// - public CAct演奏DrumsRunner() - { - base.IsDeActivated = true; - } - - public void Start(int Player, bool IsMiss, CDTX.CChip pChip) - { - if (Runner != null && !TJAPlayer3.ConfigIni.SimpleMode) - { - while (stRunners[Index].b使用中) - { - Index += 1; - if (Index >= 128) - { - Index = 0; - break; // 2018.6.15 IMARER 無限ループが発生するので修正 - } - } - if (pChip.nチャンネル番号 < 0x15 || (pChip.nチャンネル番号 >= 0x1A)) - { - if (!stRunners[Index].b使用中) - { - stRunners[Index].b使用中 = true; - stRunners[Index].nPlayer = Player; - if (IsMiss == true) - { - stRunners[Index].nType = 0; - } - else - { - stRunners[Index].nType = random.Next(1, Type + 1); - } - stRunners[Index].ct進行 = new CCounter(0, TJAPlayer3.Skin.Resolution[0], Timer, TJAPlayer3.Timer); - stRunners[Index].nOldValue = 0; - stRunners[Index].nNowPtn = 0; - stRunners[Index].fX = 0; - } - - } - } - } - - public override void Activate() - { - if (TJAPlayer3.ConfigIni.SimpleMode) - { - base.Activate(); - return; - } - - for (int i = 0; i < 128; i++) - { - stRunners[i] = new STRunner(); - stRunners[i].b使用中 = false; - stRunners[i].ct進行 = new CCounter(); - } - - var preset = HScenePreset.GetBGPreset(); - - Random random = new Random(); - - var dancerOrigindir = CSkin.Path($"{TextureLoader.BASE}{TextureLoader.GAME}{TextureLoader.RUNNER}"); - if (System.IO.Directory.Exists($@"{dancerOrigindir}")) - { - var dirs = System.IO.Directory.GetDirectories($@"{dancerOrigindir}"); - if (dirs.Length > 0) - { - var _presetPath = (preset != null && preset.RunnerSet != null) ? $@"{dancerOrigindir}" + preset.RunnerSet[random.Next(0, preset.RunnerSet.Length)] : ""; - var path = (preset != null && System.IO.Directory.Exists(_presetPath)) - ? _presetPath - : dirs[random.Next(0, dirs.Length)]; - LoadRunnerConifg(path); - - Runner = TJAPlayer3.tテクスチャの生成($@"{path}{Path.DirectorySeparatorChar}Runner.png"); - } - } - - // フィールド上で代入してたためこちらへ移動。 - base.Activate(); - } - - public override void DeActivate() - { - if (TJAPlayer3.ConfigIni.SimpleMode) - { - base.DeActivate(); - return; - } - - for (int i = 0; i < 128; i++) - { - stRunners[i].ct進行 = null; - } - - TJAPlayer3.tDisposeSafely(ref Runner); - - base.DeActivate(); - } - - public override void CreateManagedResource() - { - base.CreateManagedResource(); - } - - public override void ReleaseManagedResource() - { - base.ReleaseManagedResource(); - } - - public override int Draw() - { - if (TJAPlayer3.ConfigIni.SimpleMode) - { - return base.Draw(); - } - - for (int i = 0; i < 128; i++) - { - if (stRunners[i].b使用中) - { - stRunners[i].nOldValue = stRunners[i].ct進行.CurrentValue; - stRunners[i].ct進行.Tick(); - if (stRunners[i].ct進行.IsEnded || stRunners[i].fX > TJAPlayer3.Skin.Resolution[0]) - { - stRunners[i].ct進行.Stop(); - stRunners[i].b使用中 = false; - } - for (int n = stRunners[i].nOldValue; n < stRunners[i].ct進行.CurrentValue; n++) - { - stRunners[i].fX += (float)TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM[stRunners[i].nPlayer] / 18; - int Width = TJAPlayer3.Skin.Resolution[0] / Ptn; - stRunners[i].nNowPtn = (int)stRunners[i].fX / Width; - } - if (Runner != null) - { - if (stRunners[i].nPlayer == 0) - { - Runner.t2D描画((int)(StartPoint_X[0] + stRunners[i].fX), StartPoint_Y[0], new Rectangle(stRunners[i].nNowPtn * Size[0], stRunners[i].nType * Size[1], Size[0], Size[1])); - } - else - { - Runner.t2D描画((int)(StartPoint_X[1] + stRunners[i].fX), StartPoint_Y[1], new Rectangle(stRunners[i].nNowPtn * Size[0], stRunners[i].nType * Size[1], Size[0], Size[1])); - } - } - } - } - return base.Draw(); - } - - #region[ private ] - //----------------- - [StructLayout(LayoutKind.Sequential)] - private struct STRunner - { - public bool b使用中; - public int nPlayer; - public int nType; - public int nOldValue; - public int nNowPtn; - public float fX; - public CCounter ct進行; - } - private STRunner[] stRunners = new STRunner[128]; - Random random = new Random(); - int Index = 0; - - private CTexture Runner; - - private void LoadRunnerConifg(string dancerPath) - { - var _str = ""; - TJAPlayer3.Skin.LoadSkinConfigFromFile(dancerPath + @"\RunnerConfig.txt", ref _str); - - string[] delimiter = { "\n" }; - string[] strSingleLine = _str.Split(delimiter, StringSplitOptions.RemoveEmptyEntries); - - Size = new int[2] { 60, 125 }; - Ptn = 48; - Type = 4; - StartPoint_X = new int[2] { 175, 175 }; - StartPoint_Y = new int[2] { 40, 560 }; - Timer = 16; - - foreach (string s in strSingleLine) - { - string str = s.Replace('\t', ' ').TrimStart(new char[] { '\t', ' ' }); - if ((str.Length != 0) && (str[0] != ';')) - { - try - { - string strCommand; - string strParam; - string[] strArray = str.Split(new char[] { '=' }); - - if (strArray.Length == 2) - { - strCommand = strArray[0].Trim(); - strParam = strArray[1].Trim(); - - if (strCommand == "Game_Runner_Size") - { - string[] strSplit = strParam.Split(','); - for (int i = 0; i < 2; i++) - { - Size[i] = int.Parse(strSplit[i]); - } - } - else if (strCommand == "Game_Runner_Ptn") - { - Ptn = int.Parse(strParam); - } - else if (strCommand == "Game_Runner_Type") - { - Type = int.Parse(strParam); - } - else if (strCommand == "Game_Runner_Timer") - { - Timer = int.Parse(strParam); - } - else if (strCommand == "Game_Runner_StartPoint_X") - { - string[] strSplit = strParam.Split(','); - for (int i = 0; i < 2; i++) - { - StartPoint_X[i] = int.Parse(strSplit[i]); - } - } - else if (strCommand == "Game_Runner_StartPoint_Y") - { - string[] strSplit = strParam.Split(','); - for (int i = 0; i < 2; i++) - { - StartPoint_Y[i] = int.Parse(strSplit[i]); - } - } - - } - continue; - } - catch (Exception exception) - { - Trace.TraceError(exception.ToString()); - Trace.TraceError("例外が発生しましたが処理を継続します。 (6a32cc37-1527-412e-968a-512c1f0135cd)"); - continue; - } - } - } - - } - - // ランナー画像のサイズ。 X, Y - private int[] Size; - // ランナーのコマ数 - private int Ptn; - // ランナーのキャラクターのバリエーション(ミス時を含まない)。 - private int Type; - private int Timer; - // スタート地点のX座標 1P, 2P - private int[] StartPoint_X; - // スタート地点のY座標 1P, 2P - private int[] StartPoint_Y; - - //----------------- - #endregion - } +using System; +using System.Collections.Generic; +using System.Text; +using System.Drawing; +using System.Runtime.InteropServices; +using FDK; +using System.Diagnostics; + +namespace TJAPlayer3 +{ + internal class CActImplRunner : CActivity + { + /// + /// ランナー + /// + public CActImplRunner() + { + base.IsDeActivated = true; + } + + public void Start(int Player, bool IsMiss, CDTX.CChip pChip) + { + if (Runner != null && !TJAPlayer3.ConfigIni.SimpleMode) + { + while (stRunners[Index].b使用中) + { + Index += 1; + if (Index >= 128) + { + Index = 0; + break; // 2018.6.15 IMARER 無限ループが発生するので修正 + } + } + if (pChip.nチャンネル番号 < 0x15 || (pChip.nチャンネル番号 >= 0x1A)) + { + if (!stRunners[Index].b使用中) + { + stRunners[Index].b使用中 = true; + stRunners[Index].nPlayer = Player; + if (IsMiss == true) + { + stRunners[Index].nType = 0; + } + else + { + stRunners[Index].nType = random.Next(1, Type + 1); + } + stRunners[Index].ct進行 = new CCounter(0, TJAPlayer3.Skin.Resolution[0], Timer, TJAPlayer3.Timer); + stRunners[Index].nOldValue = 0; + stRunners[Index].nNowPtn = 0; + stRunners[Index].fX = 0; + } + + } + } + } + + public override void Activate() + { + if (TJAPlayer3.ConfigIni.SimpleMode) + { + base.Activate(); + return; + } + + for (int i = 0; i < 128; i++) + { + stRunners[i] = new STRunner(); + stRunners[i].b使用中 = false; + stRunners[i].ct進行 = new CCounter(); + } + + var preset = HScenePreset.GetBGPreset(); + + Random random = new Random(); + + var dancerOrigindir = CSkin.Path($"{TextureLoader.BASE}{TextureLoader.GAME}{TextureLoader.RUNNER}"); + if (System.IO.Directory.Exists($@"{dancerOrigindir}")) + { + var dirs = System.IO.Directory.GetDirectories($@"{dancerOrigindir}"); + if (dirs.Length > 0) + { + var _presetPath = (preset != null && preset.RunnerSet != null) ? $@"{dancerOrigindir}" + preset.RunnerSet[random.Next(0, preset.RunnerSet.Length)] : ""; + var path = (preset != null && System.IO.Directory.Exists(_presetPath)) + ? _presetPath + : dirs[random.Next(0, dirs.Length)]; + LoadRunnerConifg(path); + + Runner = TJAPlayer3.tテクスチャの生成($@"{path}{Path.DirectorySeparatorChar}Runner.png"); + } + } + + // フィールド上で代入してたためこちらへ移動。 + base.Activate(); + } + + public override void DeActivate() + { + if (TJAPlayer3.ConfigIni.SimpleMode) + { + base.DeActivate(); + return; + } + + for (int i = 0; i < 128; i++) + { + stRunners[i].ct進行 = null; + } + + TJAPlayer3.tDisposeSafely(ref Runner); + + base.DeActivate(); + } + + public override void CreateManagedResource() + { + base.CreateManagedResource(); + } + + public override void ReleaseManagedResource() + { + base.ReleaseManagedResource(); + } + + public override int Draw() + { + if (TJAPlayer3.ConfigIni.SimpleMode) + { + return base.Draw(); + } + + for (int i = 0; i < 128; i++) + { + if (stRunners[i].b使用中) + { + stRunners[i].nOldValue = stRunners[i].ct進行.CurrentValue; + stRunners[i].ct進行.Tick(); + if (stRunners[i].ct進行.IsEnded || stRunners[i].fX > TJAPlayer3.Skin.Resolution[0]) + { + stRunners[i].ct進行.Stop(); + stRunners[i].b使用中 = false; + } + for (int n = stRunners[i].nOldValue; n < stRunners[i].ct進行.CurrentValue; n++) + { + stRunners[i].fX += (float)TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM[stRunners[i].nPlayer] / 18; + int Width = TJAPlayer3.Skin.Resolution[0] / Ptn; + stRunners[i].nNowPtn = (int)stRunners[i].fX / Width; + } + if (Runner != null) + { + if (stRunners[i].nPlayer == 0) + { + Runner.t2D描画((int)(StartPoint_X[0] + stRunners[i].fX), StartPoint_Y[0], new Rectangle(stRunners[i].nNowPtn * Size[0], stRunners[i].nType * Size[1], Size[0], Size[1])); + } + else + { + Runner.t2D描画((int)(StartPoint_X[1] + stRunners[i].fX), StartPoint_Y[1], new Rectangle(stRunners[i].nNowPtn * Size[0], stRunners[i].nType * Size[1], Size[0], Size[1])); + } + } + } + } + return base.Draw(); + } + + #region[ private ] + //----------------- + [StructLayout(LayoutKind.Sequential)] + private struct STRunner + { + public bool b使用中; + public int nPlayer; + public int nType; + public int nOldValue; + public int nNowPtn; + public float fX; + public CCounter ct進行; + } + private STRunner[] stRunners = new STRunner[128]; + Random random = new Random(); + int Index = 0; + + private CTexture Runner; + + private void LoadRunnerConifg(string dancerPath) + { + var _str = ""; + TJAPlayer3.Skin.LoadSkinConfigFromFile(dancerPath + @"\RunnerConfig.txt", ref _str); + + string[] delimiter = { "\n" }; + string[] strSingleLine = _str.Split(delimiter, StringSplitOptions.RemoveEmptyEntries); + + Size = new int[2] { 60, 125 }; + Ptn = 48; + Type = 4; + StartPoint_X = new int[2] { 175, 175 }; + StartPoint_Y = new int[2] { 40, 560 }; + Timer = 16; + + foreach (string s in strSingleLine) + { + string str = s.Replace('\t', ' ').TrimStart(new char[] { '\t', ' ' }); + if ((str.Length != 0) && (str[0] != ';')) + { + try + { + string strCommand; + string strParam; + string[] strArray = str.Split(new char[] { '=' }); + + if (strArray.Length == 2) + { + strCommand = strArray[0].Trim(); + strParam = strArray[1].Trim(); + + if (strCommand == "Game_Runner_Size") + { + string[] strSplit = strParam.Split(','); + for (int i = 0; i < 2; i++) + { + Size[i] = int.Parse(strSplit[i]); + } + } + else if (strCommand == "Game_Runner_Ptn") + { + Ptn = int.Parse(strParam); + } + else if (strCommand == "Game_Runner_Type") + { + Type = int.Parse(strParam); + } + else if (strCommand == "Game_Runner_Timer") + { + Timer = int.Parse(strParam); + } + else if (strCommand == "Game_Runner_StartPoint_X") + { + string[] strSplit = strParam.Split(','); + for (int i = 0; i < 2; i++) + { + StartPoint_X[i] = int.Parse(strSplit[i]); + } + } + else if (strCommand == "Game_Runner_StartPoint_Y") + { + string[] strSplit = strParam.Split(','); + for (int i = 0; i < 2; i++) + { + StartPoint_Y[i] = int.Parse(strSplit[i]); + } + } + + } + continue; + } + catch (Exception exception) + { + Trace.TraceError(exception.ToString()); + Trace.TraceError("例外が発生しましたが処理を継続します。 (6a32cc37-1527-412e-968a-512c1f0135cd)"); + continue; + } + } + } + + } + + // ランナー画像のサイズ。 X, Y + private int[] Size; + // ランナーのコマ数 + private int Ptn; + // ランナーのキャラクターのバリエーション(ミス時を含まない)。 + private int Type; + private int Timer; + // スタート地点のX座標 1P, 2P + private int[] StartPoint_X; + // スタート地点のY座標 1P, 2P + private int[] StartPoint_Y; + + //----------------- + #endregion + } } \ No newline at end of file diff --git a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drumsスコア.cs b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplScore.cs similarity index 99% rename from OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drumsスコア.cs rename to OpenTaiko/src/Stages/07.Game/Taiko/CActImplScore.cs index 276d51b3..3f83edfd 100644 --- a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drumsスコア.cs +++ b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplScore.cs @@ -7,7 +7,7 @@ using FDK; namespace TJAPlayer3 { - internal class CAct演奏Drumsスコア : CAct演奏スコア共通 + internal class CActImplScore : CAct演奏スコア共通 { // CActivity 実装(共通クラスからの差分のみ) diff --git a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drumsスコアランク.cs b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplScoreRank.cs similarity index 97% rename from OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drumsスコアランク.cs rename to OpenTaiko/src/Stages/07.Game/Taiko/CActImplScoreRank.cs index 14d9bb61..0b6df200 100644 --- a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drumsスコアランク.cs +++ b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplScoreRank.cs @@ -1,266 +1,266 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using FDK; - -namespace TJAPlayer3 -{ - class CAct演奏Drumsスコアランク : CActivity - { - public override void Activate() - { - double RollTimems = 0; - - /* - foreach (var chip in TJAPlayer3.DTX.listChip) - { - if (NotesManager.IsRoll(chip)) - { - RollTimems += (chip.nノーツ終了時刻ms - chip.n発声時刻ms) / 1000.0; - } - } - */ - - for (int player = 0; player < 5; player++) - { - this.ScoreRank[player] = new int[] { 500000, 600000, 700000, 800000, 900000, 950000, - Math.Max(1000000, (int)(TJAPlayer3.stage演奏ドラム画面.nAddScoreNiji[player] * TJAPlayer3.stage演奏ドラム画面.nNoteCount[player]) + (int)(TJAPlayer3.stage演奏ドラム画面.nBalloonCount[player] * 100) + (int)(Math.Ceiling(TJAPlayer3.stage演奏ドラム画面.nRollTimeMs[player] * 16.6 / 10) * 100 * 10)) }; - - for (int i = 0; i < 7; i++) - { - this.counter[player][i] = new CCounter(); - } - } - base.Activate(); - } - - public override void DeActivate() - { - base.DeActivate(); - } - - public override void CreateManagedResource() - { - TowerResult_ScoreRankEffect = TJAPlayer3.tテクスチャの生成(CSkin.Path($"{TextureLoader.BASE}{TextureLoader.TOWERRESULT}ScoreRankEffect.png")); - - base.CreateManagedResource(); - } - - public override void ReleaseManagedResource() - { - - TJAPlayer3.tDisposeSafely(ref TowerResult_ScoreRankEffect); - - base.ReleaseManagedResource(); - } - - private void displayScoreRank(int i, int player, float x, float y, int mode = 0) - { - CCounter cct = this.counter[player][i]; - - CTexture tex = TJAPlayer3.Tx.ScoreRank; - if (mode == 1) // tower - tex = TowerResult_ScoreRankEffect; - - if (tex == null) - return; - - if (!cct.IsTicked) - { - cct.Start(0, 3000, 1, TJAPlayer3.Timer); - } - if (cct.CurrentValue <= 255) - { - tex.Opacity = cct.CurrentValue; - x = ((cct.CurrentValue / 255.0f) - 1.0f) * (player == 0 ? -TJAPlayer3.Skin.Game_Judge_Move[0] : TJAPlayer3.Skin.Game_Judge_Move[0]); - y = ((cct.CurrentValue / 255.0f) - 1.0f) * (player == 0 ? -TJAPlayer3.Skin.Game_Judge_Move[1] : TJAPlayer3.Skin.Game_Judge_Move[1]); - } - if (cct.CurrentValue > 255 && cct.CurrentValue <= 255 + 180) - { - tex.Opacity = 255; - - float newSize = 1.0f + (float)Math.Sin((cct.CurrentValue - 255) * (Math.PI / 180)) * 0.2f; - tex.vcScaleRatio.X = newSize; - tex.vcScaleRatio.Y = newSize; - x = 0; - y = 0; - } - if (cct.CurrentValue > 255 + 180 && cct.CurrentValue <= 2745) - { - tex.Opacity = 255; - tex.vcScaleRatio.X = 1.0f; - tex.vcScaleRatio.Y = 1.0f; - x = 0; - y = 0; - } - if (cct.CurrentValue >= 2745 && cct.CurrentValue <= 3000) - { - tex.Opacity = 255 - ((cct.CurrentValue - 2745)); - x = ((cct.CurrentValue - 2745) / 255.0f) * (player == 0 || TJAPlayer3.ConfigIni.nPlayerCount >= 2 ? -TJAPlayer3.Skin.Game_Judge_Move[0] : TJAPlayer3.Skin.Game_Judge_Move[0]); - y = ((cct.CurrentValue - 2745) / 255.0f) * (player == 0 || TJAPlayer3.ConfigIni.nPlayerCount >= 2 ? -TJAPlayer3.Skin.Game_Judge_Move[1] : TJAPlayer3.Skin.Game_Judge_Move[1]); - } - - var xpos = 0; - var ypos = 0; - if (TJAPlayer3.ConfigIni.nPlayerCount == 5) - { - xpos = TJAPlayer3.Skin.Game_ScoreRank_5P[0] + (TJAPlayer3.Skin.Game_UIMove_5P[0] * player); - ypos = TJAPlayer3.Skin.Game_ScoreRank_5P[1] + (TJAPlayer3.Skin.Game_UIMove_5P[1] * player); - } - else if (TJAPlayer3.ConfigIni.nPlayerCount == 4 || TJAPlayer3.ConfigIni.nPlayerCount == 3) - { - xpos = TJAPlayer3.Skin.Game_ScoreRank_4P[0] + (TJAPlayer3.Skin.Game_UIMove_4P[0] * player); - ypos = TJAPlayer3.Skin.Game_ScoreRank_4P[1] + (TJAPlayer3.Skin.Game_UIMove_4P[1] * player); - } - else - { - xpos = TJAPlayer3.Skin.Game_ScoreRank_X[player]; - ypos = TJAPlayer3.Skin.Game_ScoreRank_Y[player]; - } - xpos += (int)x; - ypos += (int)y; - - int width; - int height; - - switch (mode) - { - case 1: - width = tex.szTextureSize.Width / 7; - height = tex.szTextureSize.Height; - break; - default: - width = tex.szTextureSize.Width; - height = tex.szTextureSize.Height / 7; - break; - } - - if (mode == 0) - tex.t2D拡大率考慮中央基準描画(xpos, ypos, new System.Drawing.Rectangle(0, height * i, width, height)); - else if (mode == 1 && player == 0) - tex.t2D拡大率考慮中央基準描画(xpos, ypos, new System.Drawing.Rectangle(width * i, 0, width, height)); - } - - public override int Draw() - { - if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] != (int)Difficulty.Dan) - { - float x = 0; - float y = 0; - - for (int i = 0; i < 7; i++) - { - if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] != (int)Difficulty.Tower) - { - - for (int player = 0; player < 5; player++) - { - #region [Ensou score ranks] - - counter[player][i].Tick(); - if (TJAPlayer3.stage演奏ドラム画面.actScore.GetScore(player) >= ScoreRank[player][i]) - { - displayScoreRank(i, player, x, y); - - #region [Legacy] - - /* - if (!this.counter[i].b進行中) - { - this.counter[i].t開始(0, 3000, 1, TJAPlayer3.Timer); - } - if (counter[i].n現在の値 <= 255) - { - TJAPlayer3.Tx.ScoreRank.Opacity = counter[i].n現在の値; - x = 51 - (counter[i].n現在の値 / 5.0f); - } - if (counter[i].n現在の値 > 255 && counter[i].n現在の値 <= 255 + 180) - { - TJAPlayer3.Tx.ScoreRank.Opacity = 255; - TJAPlayer3.Tx.ScoreRank.vc拡大縮小倍率.X = 1.0f + (float)Math.Sin((counter[i].n現在の値 - 255) * (Math.PI / 180)) * 0.2f; - TJAPlayer3.Tx.ScoreRank.vc拡大縮小倍率.Y = 1.0f + (float)Math.Sin((counter[i].n現在の値 - 255) * (Math.PI / 180)) * 0.2f; - x = 0; - } - if (counter[i].n現在の値 > 255 + 180 && counter[i].n現在の値 <= 2745) - { - TJAPlayer3.Tx.ScoreRank.Opacity = 255; - TJAPlayer3.Tx.ScoreRank.vc拡大縮小倍率.X = 1.0f; - TJAPlayer3.Tx.ScoreRank.vc拡大縮小倍率.Y = 1.0f; - x = 0; - } - if (counter[i].n現在の値 >= 2745 && counter[i].n現在の値 <= 3000) - { - TJAPlayer3.Tx.ScoreRank.Opacity = 255 - ((counter[i].n現在の値 - 2745)); - x = -((counter[i].n現在の値 - 2745) / 5.0f); - } - - TJAPlayer3.Tx.ScoreRank.t2D拡大率考慮中央基準描画(87, 98 + (int)x, new System.Drawing.Rectangle(0, i == 0 ? i * 114 : i * 120, 140, i == 0 ? 114 : 120)); - */ - - #endregion - } - - x = 0; - } - #endregion - } - else if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Tower) - { - #region [Tower score ranks] - - double progress = CFloorManagement.LastRegisteredFloor / ((double)TJAPlayer3.stageSongSelect.rChoosenSong.arスコア[5].譜面情報.nTotalFloor); - - bool[] conditions = - { - progress >= 0.1, - progress >= 0.25, - progress >= 0.5, - progress >= 0.75, - progress == 1 && CFloorManagement.CurrentNumberOfLives > 0, - TJAPlayer3.stage演奏ドラム画面.CChartScore[0].nMiss == 0 && TJAPlayer3.stage演奏ドラム画面.CChartScore[0].nMine == 0, - TJAPlayer3.stage演奏ドラム画面.CChartScore[0].nGood == 0 - }; - - counter[0][i].Tick(); - - bool satisfied = true; - for (int j = 0; j <= i; j++) - if (conditions[j] == false) - { - satisfied = false; - break; - } - - - if (satisfied == true) - { - displayScoreRank(i, 0, x, y, 1); - } - - #endregion - } - } - - - } - - //TJAPlayer3.act文字コンソール.tPrint(0, 0, C文字コンソール.Eフォント種別.白, ScoreRank[6].ToString()); - //TJAPlayer3.act文字コンソール.tPrint(0, 10, C文字コンソール.Eフォント種別.白, ScoreRank2P[6].ToString()); - - return base.Draw(); - } - - private CTexture TowerResult_ScoreRankEffect; - - public int[][] ScoreRank = new int[5][]; - private CCounter[][] counter = new CCounter[5][] { - new CCounter[7], - new CCounter[7], - new CCounter[7], - new CCounter[7], - new CCounter[7] - }; - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using FDK; + +namespace TJAPlayer3 +{ + class CActImplScoreRank : CActivity + { + public override void Activate() + { + double RollTimems = 0; + + /* + foreach (var chip in TJAPlayer3.DTX.listChip) + { + if (NotesManager.IsRoll(chip)) + { + RollTimems += (chip.nノーツ終了時刻ms - chip.n発声時刻ms) / 1000.0; + } + } + */ + + for (int player = 0; player < 5; player++) + { + this.ScoreRank[player] = new int[] { 500000, 600000, 700000, 800000, 900000, 950000, + Math.Max(1000000, (int)(TJAPlayer3.stage演奏ドラム画面.nAddScoreNiji[player] * TJAPlayer3.stage演奏ドラム画面.nNoteCount[player]) + (int)(TJAPlayer3.stage演奏ドラム画面.nBalloonCount[player] * 100) + (int)(Math.Ceiling(TJAPlayer3.stage演奏ドラム画面.nRollTimeMs[player] * 16.6 / 10) * 100 * 10)) }; + + for (int i = 0; i < 7; i++) + { + this.counter[player][i] = new CCounter(); + } + } + base.Activate(); + } + + public override void DeActivate() + { + base.DeActivate(); + } + + public override void CreateManagedResource() + { + TowerResult_ScoreRankEffect = TJAPlayer3.tテクスチャの生成(CSkin.Path($"{TextureLoader.BASE}{TextureLoader.TOWERRESULT}ScoreRankEffect.png")); + + base.CreateManagedResource(); + } + + public override void ReleaseManagedResource() + { + + TJAPlayer3.tDisposeSafely(ref TowerResult_ScoreRankEffect); + + base.ReleaseManagedResource(); + } + + private void displayScoreRank(int i, int player, float x, float y, int mode = 0) + { + CCounter cct = this.counter[player][i]; + + CTexture tex = TJAPlayer3.Tx.ScoreRank; + if (mode == 1) // tower + tex = TowerResult_ScoreRankEffect; + + if (tex == null) + return; + + if (!cct.IsTicked) + { + cct.Start(0, 3000, 1, TJAPlayer3.Timer); + } + if (cct.CurrentValue <= 255) + { + tex.Opacity = cct.CurrentValue; + x = ((cct.CurrentValue / 255.0f) - 1.0f) * (player == 0 ? -TJAPlayer3.Skin.Game_Judge_Move[0] : TJAPlayer3.Skin.Game_Judge_Move[0]); + y = ((cct.CurrentValue / 255.0f) - 1.0f) * (player == 0 ? -TJAPlayer3.Skin.Game_Judge_Move[1] : TJAPlayer3.Skin.Game_Judge_Move[1]); + } + if (cct.CurrentValue > 255 && cct.CurrentValue <= 255 + 180) + { + tex.Opacity = 255; + + float newSize = 1.0f + (float)Math.Sin((cct.CurrentValue - 255) * (Math.PI / 180)) * 0.2f; + tex.vcScaleRatio.X = newSize; + tex.vcScaleRatio.Y = newSize; + x = 0; + y = 0; + } + if (cct.CurrentValue > 255 + 180 && cct.CurrentValue <= 2745) + { + tex.Opacity = 255; + tex.vcScaleRatio.X = 1.0f; + tex.vcScaleRatio.Y = 1.0f; + x = 0; + y = 0; + } + if (cct.CurrentValue >= 2745 && cct.CurrentValue <= 3000) + { + tex.Opacity = 255 - ((cct.CurrentValue - 2745)); + x = ((cct.CurrentValue - 2745) / 255.0f) * (player == 0 || TJAPlayer3.ConfigIni.nPlayerCount >= 2 ? -TJAPlayer3.Skin.Game_Judge_Move[0] : TJAPlayer3.Skin.Game_Judge_Move[0]); + y = ((cct.CurrentValue - 2745) / 255.0f) * (player == 0 || TJAPlayer3.ConfigIni.nPlayerCount >= 2 ? -TJAPlayer3.Skin.Game_Judge_Move[1] : TJAPlayer3.Skin.Game_Judge_Move[1]); + } + + var xpos = 0; + var ypos = 0; + if (TJAPlayer3.ConfigIni.nPlayerCount == 5) + { + xpos = TJAPlayer3.Skin.Game_ScoreRank_5P[0] + (TJAPlayer3.Skin.Game_UIMove_5P[0] * player); + ypos = TJAPlayer3.Skin.Game_ScoreRank_5P[1] + (TJAPlayer3.Skin.Game_UIMove_5P[1] * player); + } + else if (TJAPlayer3.ConfigIni.nPlayerCount == 4 || TJAPlayer3.ConfigIni.nPlayerCount == 3) + { + xpos = TJAPlayer3.Skin.Game_ScoreRank_4P[0] + (TJAPlayer3.Skin.Game_UIMove_4P[0] * player); + ypos = TJAPlayer3.Skin.Game_ScoreRank_4P[1] + (TJAPlayer3.Skin.Game_UIMove_4P[1] * player); + } + else + { + xpos = TJAPlayer3.Skin.Game_ScoreRank_X[player]; + ypos = TJAPlayer3.Skin.Game_ScoreRank_Y[player]; + } + xpos += (int)x; + ypos += (int)y; + + int width; + int height; + + switch (mode) + { + case 1: + width = tex.szTextureSize.Width / 7; + height = tex.szTextureSize.Height; + break; + default: + width = tex.szTextureSize.Width; + height = tex.szTextureSize.Height / 7; + break; + } + + if (mode == 0) + tex.t2D拡大率考慮中央基準描画(xpos, ypos, new System.Drawing.Rectangle(0, height * i, width, height)); + else if (mode == 1 && player == 0) + tex.t2D拡大率考慮中央基準描画(xpos, ypos, new System.Drawing.Rectangle(width * i, 0, width, height)); + } + + public override int Draw() + { + if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] != (int)Difficulty.Dan) + { + float x = 0; + float y = 0; + + for (int i = 0; i < 7; i++) + { + if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] != (int)Difficulty.Tower) + { + + for (int player = 0; player < 5; player++) + { + #region [Ensou score ranks] + + counter[player][i].Tick(); + if (TJAPlayer3.stage演奏ドラム画面.actScore.GetScore(player) >= ScoreRank[player][i]) + { + displayScoreRank(i, player, x, y); + + #region [Legacy] + + /* + if (!this.counter[i].b進行中) + { + this.counter[i].t開始(0, 3000, 1, TJAPlayer3.Timer); + } + if (counter[i].n現在の値 <= 255) + { + TJAPlayer3.Tx.ScoreRank.Opacity = counter[i].n現在の値; + x = 51 - (counter[i].n現在の値 / 5.0f); + } + if (counter[i].n現在の値 > 255 && counter[i].n現在の値 <= 255 + 180) + { + TJAPlayer3.Tx.ScoreRank.Opacity = 255; + TJAPlayer3.Tx.ScoreRank.vc拡大縮小倍率.X = 1.0f + (float)Math.Sin((counter[i].n現在の値 - 255) * (Math.PI / 180)) * 0.2f; + TJAPlayer3.Tx.ScoreRank.vc拡大縮小倍率.Y = 1.0f + (float)Math.Sin((counter[i].n現在の値 - 255) * (Math.PI / 180)) * 0.2f; + x = 0; + } + if (counter[i].n現在の値 > 255 + 180 && counter[i].n現在の値 <= 2745) + { + TJAPlayer3.Tx.ScoreRank.Opacity = 255; + TJAPlayer3.Tx.ScoreRank.vc拡大縮小倍率.X = 1.0f; + TJAPlayer3.Tx.ScoreRank.vc拡大縮小倍率.Y = 1.0f; + x = 0; + } + if (counter[i].n現在の値 >= 2745 && counter[i].n現在の値 <= 3000) + { + TJAPlayer3.Tx.ScoreRank.Opacity = 255 - ((counter[i].n現在の値 - 2745)); + x = -((counter[i].n現在の値 - 2745) / 5.0f); + } + + TJAPlayer3.Tx.ScoreRank.t2D拡大率考慮中央基準描画(87, 98 + (int)x, new System.Drawing.Rectangle(0, i == 0 ? i * 114 : i * 120, 140, i == 0 ? 114 : 120)); + */ + + #endregion + } + + x = 0; + } + #endregion + } + else if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Tower) + { + #region [Tower score ranks] + + double progress = CFloorManagement.LastRegisteredFloor / ((double)TJAPlayer3.stageSongSelect.rChoosenSong.arスコア[5].譜面情報.nTotalFloor); + + bool[] conditions = + { + progress >= 0.1, + progress >= 0.25, + progress >= 0.5, + progress >= 0.75, + progress == 1 && CFloorManagement.CurrentNumberOfLives > 0, + TJAPlayer3.stage演奏ドラム画面.CChartScore[0].nMiss == 0 && TJAPlayer3.stage演奏ドラム画面.CChartScore[0].nMine == 0, + TJAPlayer3.stage演奏ドラム画面.CChartScore[0].nGood == 0 + }; + + counter[0][i].Tick(); + + bool satisfied = true; + for (int j = 0; j <= i; j++) + if (conditions[j] == false) + { + satisfied = false; + break; + } + + + if (satisfied == true) + { + displayScoreRank(i, 0, x, y, 1); + } + + #endregion + } + } + + + } + + //TJAPlayer3.act文字コンソール.tPrint(0, 0, C文字コンソール.Eフォント種別.白, ScoreRank[6].ToString()); + //TJAPlayer3.act文字コンソール.tPrint(0, 10, C文字コンソール.Eフォント種別.白, ScoreRank2P[6].ToString()); + + return base.Draw(); + } + + private CTexture TowerResult_ScoreRankEffect; + + public int[][] ScoreRank = new int[5][]; + private CCounter[][] counter = new CCounter[5][] { + new CCounter[7], + new CCounter[7], + new CCounter[7], + new CCounter[7], + new CCounter[7] + }; + } +} diff --git a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏DrumsTrainingMode.cs b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplTrainingMode.cs similarity index 99% rename from OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏DrumsTrainingMode.cs rename to OpenTaiko/src/Stages/07.Game/Taiko/CActImplTrainingMode.cs index 9f36a382..7eabc9eb 100644 --- a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏DrumsTrainingMode.cs +++ b/OpenTaiko/src/Stages/07.Game/Taiko/CActImplTrainingMode.cs @@ -9,9 +9,9 @@ using System.Drawing; namespace TJAPlayer3 { - class CAct演奏DrumsTrainingMode : CActivity + class CActImplTrainingMode : CActivity { - public CAct演奏DrumsTrainingMode() + public CActImplTrainingMode() { base.IsDeActivated = true; } diff --git a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏DrumsDanger.cs b/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏DrumsDanger.cs deleted file mode 100644 index 60236a43..00000000 --- a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏DrumsDanger.cs +++ /dev/null @@ -1,74 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Drawing; -using FDK; - -namespace TJAPlayer3 -{ - internal class CAct演奏DrumsDanger : CAct演奏Danger共通 - { - // コンストラクタ - - //public CAct演奏DrumsDanger() - //{ - // base.b活性化してない = true; - //} - - - // CActivity 実装 - - //public override void On活性化() - //{ - // this.bDanger中 = false; - // this.ct移動用 = new CCounter(); - // this.ct透明度用 = new CCounter(); - // base.On活性化(); - //} - //public override void On非活性化() - //{ - // this.ct移動用 = null; - // this.ct透明度用 = null; - // base.On非活性化(); - //} - public override void CreateManagedResource() - { - base.CreateManagedResource(); - } - public override void ReleaseManagedResource() - { - TJAPlayer3.tテクスチャの解放( ref this.txDANGER ); - base.ReleaseManagedResource(); - } - public override int Draw() - { - throw new InvalidOperationException( "t進行描画(bool)のほうを使用してください。" ); - } - /// - /// ドラム画面のDANGER描画 - /// - /// DrumsのゲージがDangerかどうか(Guitar/Bassと共用のゲージ) - /// Guitarのゲージ(未使用) - /// Bassのゲージ(未使用) - /// - public override int t進行描画( bool bIsDangerDrums, bool bIsDangerGuitar, bool bIsDangerBass ) - { - return 0; - } - - - // その他 - - #region [ private ] - //----------------- - //private bool bDanger中; - //private CCounter ct移動用; - //private CCounter ct透明度用; -// private const int n右位置 = 0x12a; -// private const int n左位置 = 0x26; - private readonly Rectangle[] rc領域 = new Rectangle[] { new Rectangle( 0, 0, 0x20, 0x40 ), new Rectangle( 0x20, 0, 0x20, 0x40 ) }; - private CTexture txDANGER; - //----------------- - #endregion - } -} diff --git a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drumsグラフ.cs b/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drumsグラフ.cs deleted file mode 100644 index 2f0303a4..00000000 --- a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drumsグラフ.cs +++ /dev/null @@ -1,60 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Runtime.InteropServices; -using System.Drawing; -using System.IO; -using FDK; - -namespace TJAPlayer3 -{ - internal class CAct演奏Drumsグラフ : CActivity - { - - // コンストラクタ - - public CAct演奏Drumsグラフ() - { - base.IsDeActivated = true; - } - - - // CActivity 実装 - - public override void Activate() - { - base.Activate(); - } - public override void DeActivate() - { - base.DeActivate(); - } - public override void CreateManagedResource() - { - base.CreateManagedResource(); - } - public override void ReleaseManagedResource() - { - base.ReleaseManagedResource(); - } - public override int Draw() - { - if( !base.IsDeActivated ) - { - if( base.IsFirstDraw ) - { - } - - } - return 0; - } - - - // その他 - - #region [ private ] - //---------------- - //----------------- - #endregion - } -} diff --git a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏DrumsコンボDGB.cs b/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏DrumsコンボDGB.cs deleted file mode 100644 index c7b7e1bc..00000000 --- a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏DrumsコンボDGB.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace TJAPlayer3 -{ - internal class CAct演奏DrumsコンボDGB : CAct演奏Combo共通 - { - // CAct演奏Combo共通 実装 - - protected override void tコンボ表示_ギター( int nCombo値, int nジャンプインデックス ) - { - } - protected override void tコンボ表示_ドラム( int nCombo値, int nジャンプインデックス ) - { - } - protected override void tコンボ表示_ベース( int nCombo値, int nジャンプインデックス ) - { - } - protected override void tコンボ表示_太鼓(int nCombo値, int nジャンプインデックス, int nPlayer) - { - base.tコンボ表示_太鼓( nCombo値, nジャンプインデックス, nPlayer ); - } - } -} diff --git a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drumsステータスパネル.cs b/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drumsステータスパネル.cs deleted file mode 100644 index fc6cc093..00000000 --- a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drumsステータスパネル.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Runtime.InteropServices; -using System.Drawing; - -using FDK; - -namespace TJAPlayer3 -{ - internal class CAct演奏Drumsステータスパネル : CAct演奏ステータスパネル共通 - { - // コンストラクタ - public override void Activate() - { - - base.Activate(); - } - - public override void CreateManagedResource() - { - base.CreateManagedResource(); - } - public override void ReleaseManagedResource() - { - base.ReleaseManagedResource(); - } - public override int Draw() - { - - - return 0; - } - - - // その他 - - #region [ private ] - //----------------- - - //----------------- - #endregion - } -} diff --git a/OpenTaiko/src/Stages/07.Game/Taiko/CStage演奏ドラム画面.cs b/OpenTaiko/src/Stages/07.Game/Taiko/CStage演奏ドラム画面.cs index 2c3bdd54..d13d30cf 100644 --- a/OpenTaiko/src/Stages/07.Game/Taiko/CStage演奏ドラム画面.cs +++ b/OpenTaiko/src/Stages/07.Game/Taiko/CStage演奏ドラム画面.cs @@ -25,17 +25,14 @@ namespace TJAPlayer3 base.eStageID = CStage.EStage.Game; base.ePhaseID = CStage.EPhase.Common_NORMAL; base.IsDeActivated = true; - base.ChildActivities.Add( this.actPad = new CAct演奏Drumsパッド() ); - base.ChildActivities.Add( this.actCombo = new CAct演奏DrumsコンボDGB() ); - base.ChildActivities.Add( this.actDANGER = new CAct演奏DrumsDanger() ); - base.ChildActivities.Add( this.actChipFireD = new CAct演奏DrumsチップファイアD() ); + base.ChildActivities.Add( this.actPad = new CActImplPad() ); + base.ChildActivities.Add( this.actCombo = new CActImplCombo() ); + base.ChildActivities.Add( this.actChipFireD = new CActImplFireworks() ); base.ChildActivities.Add( this.Rainbow = new Rainbow() ); - base.ChildActivities.Add( this.actGauge = new CAct演奏Drumsゲージ() ); - base.ChildActivities.Add( this.actGraph = new CAct演奏Drumsグラフ() ); // #24074 2011.01.23 add ikanick - base.ChildActivities.Add( this.actJudgeString = new CAct演奏Drums判定文字列() ); + base.ChildActivities.Add( this.actGauge = new CActImplGauge() ); + base.ChildActivities.Add( this.actJudgeString = new CActImplJudgeText() ); base.ChildActivities.Add( this.actTaikoLaneFlash = new TaikoLaneFlash() ); - base.ChildActivities.Add( this.actScore = new CAct演奏Drumsスコア() ); - base.ChildActivities.Add( this.actStatusPanels = new CAct演奏Drumsステータスパネル() ); + base.ChildActivities.Add( this.actScore = new CActImplScore() ); base.ChildActivities.Add( this.act譜面スクロール速度 = new CAct演奏スクロール速度() ); base.ChildActivities.Add( this.actAVI = new CAct演奏AVI() ); base.ChildActivities.Add( this.actPanel = new CAct演奏パネル文字列() ); @@ -45,32 +42,32 @@ namespace TJAPlayer3 base.ChildActivities.Add( this.actFI = new CActFIFOStart() ); base.ChildActivities.Add( this.actFO = new CActFIFOBlack() ); base.ChildActivities.Add( this.actFOClear = new CActFIFOResult() ); - base.ChildActivities.Add( this.actLane = new CAct演奏Drumsレーン() ); - base.ChildActivities.Add( this.actEnd = new CAct演奏Drums演奏終了演出() ); - base.ChildActivities.Add( this.actDancer = new CAct演奏DrumsDancer() ); - base.ChildActivities.Add( this.actMtaiko = new CAct演奏DrumsMtaiko() ); - base.ChildActivities.Add( this.actLaneTaiko = new CAct演奏Drumsレーン太鼓() ); - base.ChildActivities.Add( this.actRoll = new CAct演奏Drums連打() ); - base.ChildActivities.Add( this.actBalloon = new CAct演奏Drums風船() ); - base.ChildActivities.Add( this.actChara = new CAct演奏Drumsキャラクター() ); + base.ChildActivities.Add( this.actLane = new CActImplLane() ); + base.ChildActivities.Add( this.actEnd = new CActImplClearAnimation() ); + base.ChildActivities.Add( this.actDancer = new CActImplDancer() ); + base.ChildActivities.Add( this.actMtaiko = new CActImplMtaiko() ); + base.ChildActivities.Add( this.actLaneTaiko = new CActImplLaneTaiko() ); + base.ChildActivities.Add( this.actRoll = new CActImplRoll() ); + base.ChildActivities.Add( this.actBalloon = new CActImplBalloon() ); + base.ChildActivities.Add( this.actChara = new CActImplCharacter() ); base.ChildActivities.Add( this.actGame = new CAct演奏Drumsゲームモード() ); - base.ChildActivities.Add( this.actBackground = new CAct演奏Drums背景() ); - base.ChildActivities.Add( this.actRollChara = new CAct演奏Drums連打キャラ() ); - base.ChildActivities.Add( this.actComboBalloon = new CAct演奏Drumsコンボ吹き出し() ); + base.ChildActivities.Add( this.actBackground = new CActImplBackground() ); + base.ChildActivities.Add( this.actRollChara = new CActImplRollEffect() ); + base.ChildActivities.Add( this.actComboBalloon = new CActImplComboBalloon() ); base.ChildActivities.Add( this.actComboVoice = new CAct演奏Combo音声() ); base.ChildActivities.Add( this.actPauseMenu = new CAct演奏PauseMenu() ); - base.ChildActivities.Add(this.actChipEffects = new CAct演奏Drumsチップエフェクト()); - base.ChildActivities.Add(this.actFooter = new CAct演奏DrumsFooter()); - base.ChildActivities.Add(this.actRunner = new CAct演奏DrumsRunner()); - base.ChildActivities.Add(this.actMob = new CAct演奏DrumsMob()); + base.ChildActivities.Add(this.actChipEffects = new CActImplChipEffects()); + base.ChildActivities.Add(this.actFooter = new CActImplFooter()); + base.ChildActivities.Add(this.actRunner = new CActImplRunner()); + base.ChildActivities.Add(this.actMob = new CActImplMob()); base.ChildActivities.Add(this.GoGoSplash = new GoGoSplash()); base.ChildActivities.Add(this.FlyingNotes = new FlyingNotes()); base.ChildActivities.Add(this.FireWorks = new FireWorks()); base.ChildActivities.Add(this.PuchiChara = new PuchiChara()); - base.ChildActivities.Add(this.ScoreRank = new CAct演奏Drumsスコアランク()); + base.ChildActivities.Add(this.ScoreRank = new CActImplScoreRank()); base.ChildActivities.Add(this.actDan = new Dan_Cert()); - base.ChildActivities.Add(this.actTokkun = new CAct演奏DrumsTrainingMode()); + base.ChildActivities.Add(this.actTokkun = new CActImplTrainingMode()); base.ChildActivities.Add(this.actAIBattle = new AIBattle()); #region[ 文字初期化 ] ST文字位置[] st文字位置Array = new ST文字位置[ 12 ]; @@ -650,7 +647,7 @@ namespace TJAPlayer3 if (HGaugeMethods.UNSAFE_IsRainbow(i)) { double dbUnit = (((60.0 / (TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM[i])))); - this.actChara.ChangeAnime(i, CAct演奏Drumsキャラクター.Anime.Combo10_Max, true); + this.actChara.ChangeAnime(i, CActImplCharacter.Anime.Combo10_Max, true); } } } @@ -658,14 +655,14 @@ namespace TJAPlayer3 { if (TJAPlayer3.Skin.Characters_Become_Cleared_Ptn[Character] != 0) { - this.actChara.ChangeAnime(i, CAct演奏Drumsキャラクター.Anime.Cleared, true);; + this.actChara.ChangeAnime(i, CActImplCharacter.Anime.Cleared, true);; } } else { if (TJAPlayer3.Skin.Characters_ClearOut_Ptn[Character] != 0) { - this.actChara.ChangeAnime(i, CAct演奏Drumsキャラクター.Anime.ClearOut, true); + this.actChara.ChangeAnime(i, CActImplCharacter.Anime.ClearOut, true); } } } @@ -707,22 +704,21 @@ namespace TJAPlayer3 public char ch; public Point pt; } - public CAct演奏DrumsチップファイアD actChipFireD; + public CActImplFireworks actChipFireD; - private CAct演奏Drumsグラフ actGraph; // #24074 2011.01.23 add ikanick - private CAct演奏Drumsパッド actPad; - public CAct演奏Drumsレーン actLane; - public CAct演奏DrumsMtaiko actMtaiko; - public CAct演奏Drumsレーン太鼓 actLaneTaiko; - public CAct演奏Drums演奏終了演出 actEnd; + private CActImplPad actPad; + public CActImplLane actLane; + public CActImplMtaiko actMtaiko; + public CActImplLaneTaiko actLaneTaiko; + public CActImplClearAnimation actEnd; private CAct演奏Drumsゲームモード actGame; - public CAct演奏DrumsTrainingMode actTokkun; - public CAct演奏Drums背景 actBackground; + public CActImplTrainingMode actTokkun; + public CActImplBackground actBackground; public GoGoSplash GoGoSplash; public FlyingNotes FlyingNotes; public FireWorks FireWorks; public PuchiChara PuchiChara; - public CAct演奏Drumsスコアランク ScoreRank; + public CActImplScoreRank ScoreRank; private bool bフィルイン中; private readonly EPad[] eチャンネルtoパッド = new EPad[] { @@ -910,10 +906,6 @@ namespace TJAPlayer3 { base.t進行描画_AVI( 0, 0 ); } - protected override void t進行描画_DANGER() - { - this.actDANGER.t進行描画( this.actGauge.IsDanger(EInstrumentPad.DRUMS), false, false ); - } private void t進行描画_チップファイアD() { @@ -2545,10 +2537,10 @@ namespace TJAPlayer3 this.n風船残り[i], i, NotesManager.IsFuzeRoll(chkChip) - ? CAct演奏Drums風船.EBalloonType.FUSEROLL + ? CActImplBalloon.EBalloonType.FUSEROLL : NotesManager.IsKusudama(chkChip) - ? CAct演奏Drums風船.EBalloonType.KUSUDAMA - : CAct演奏Drums風船.EBalloonType.BALLOON + ? CActImplBalloon.EBalloonType.KUSUDAMA + : CActImplBalloon.EBalloonType.BALLOON ); } else