diff --git a/FDK/src/04.Graphics/CTexture.cs b/FDK/src/04.Graphics/CTexture.cs index 05863e45..bd0b6cc7 100644 --- a/FDK/src/04.Graphics/CTexture.cs +++ b/FDK/src/04.Graphics/CTexture.cs @@ -59,6 +59,11 @@ namespace FDK /// private static int ColorID; + /// + /// 拡大率のハンドル + /// + private static int ScaleID; + /// /// テクスチャの切り抜きのハンドル /// @@ -66,6 +71,8 @@ namespace FDK private static int CameraID; + private static int NoteModeID; + /// /// 描画に使用する共通のバッファを作成 /// @@ -100,12 +107,23 @@ namespace FDK uniform vec4 color; uniform sampler2D texture1; uniform vec4 textureRect; + uniform vec2 scale; + uniform bool noteMode; varying vec2 texcoord; void main() { - vec2 rect = vec2(textureRect.xy + (texcoord * textureRect.zw)); + vec2 rect; + if (noteMode) + { + rect = textureRect.xy + (texcoord * textureRect.zw * scale); + rect = rect - (floor((rect - textureRect.xy) / textureRect.zw) * textureRect.zw); + } + else + { + rect = vec2(textureRect.xy + (texcoord * textureRect.zw)); + } gl_FragColor = texture2D(texture1, rect) * color; }" ); @@ -114,8 +132,10 @@ namespace FDK //シェーダーに値を送るためのハンドルを取得------ MVPID = Game.Gl.GetUniformLocation(ShaderProgram, "mvp"); //拡大縮小、移動、回転のMatrix ColorID = Game.Gl.GetUniformLocation(ShaderProgram, "color"); //色合い + ScaleID = Game.Gl.GetUniformLocation(ShaderProgram, "scale"); //スケール TextureRectID = Game.Gl.GetUniformLocation(ShaderProgram, "textureRect"); //テクスチャの切り抜きの座標と大きさ CameraID = Game.Gl.GetUniformLocation(ShaderProgram, "camera"); //テクスチャの切り抜きの座標と大きさ + NoteModeID = Game.Gl.GetUniformLocation(ShaderProgram, "noteMode"); //テクスチャの切り抜きの座標と大きさ //------ @@ -580,9 +600,13 @@ namespace FDK { this.t2D描画(x - (rc画像内の描画領域.Width / 2), y - (rc画像内の描画領域.Height), rc画像内の描画領域); //this.t2D描画(devicek x, y, rc画像内の描画領域; + } + + public void t2D_DisplayImage_RollNote(int x, int y, RectangleF rc) + { + this.t2D描画(x - (rc.Width / 2 * this.vcScaleRatio.X), y - (rc.Height / 2 * this.vcScaleRatio.Y), 1f, rc, true); } - public void t2D拡大率考慮中央基準描画(int x, int y) { this.t2D描画(x - (this.szTextureSize.Width / 2 * this.vcScaleRatio.X), y - (szTextureSize.Height / 2 * this.vcScaleRatio.Y), 1f, this.rc全画像); @@ -699,7 +723,7 @@ namespace FDK { this.t2D描画((int)x, (int)y, 1f, rc画像内の描画領域); } - public void t2D描画(float x, float y, float depth, RectangleF rc画像内の描画領域, bool flipX = false, bool flipY = false) + public void t2D描画(float x, float y, float depth, RectangleF rc画像内の描画領域, bool flipX = false, bool flipY = false, bool rollMode = false) { this.color4.Alpha = this._opacity / 255f; @@ -729,7 +753,6 @@ namespace FDK Game.Gl.UseProgram(ShaderProgram);//Uniform4よりこれが先 - //Game.Gl.Uniform1(Texture1ID, Texture_); Game.Gl.BindTexture(TextureTarget.Texture2D, Texture_); //テクスチャをバインド //MVPを設定---- @@ -766,12 +789,14 @@ namespace FDK //------ Game.Gl.Uniform4(ColorID, new System.Numerics.Vector4(color4.Red, color4.Green, color4.Blue, color4.Alpha)); //変色用のカラーを設定 - - //テクスチャの切り抜きの座標と大きさを設定 + Game.Gl.Uniform2(ScaleID, new System.Numerics.Vector2(vcScaleRatio.X, vcScaleRatio.Y)); //変色用のカラーを設定 + + //テクスチャの切り抜きの座標と大きさを設定 Game.Gl.Uniform4(TextureRectID, new System.Numerics.Vector4( rc画像内の描画領域.X / rc全画像.Width, rc画像内の描画領域.Y / rc全画像.Height, //始まり - rc画像内の描画領域.Width / rc全画像.Width, rc画像内の描画領域.Height / rc全画像.Height)); //大きさ、終わりではない - + rc画像内の描画領域.Width / rc全画像.Width, rc画像内の描画領域.Height / rc全画像.Height)); //大きさ、終わりではない + + Game.Gl.Uniform1(NoteModeID, rollMode ? 1 : 0); //描画----- Game.Gl.BindVertexArray(VAO); @@ -921,14 +946,16 @@ namespace FDK Game.Gl.UniformMatrix4(CameraID, 1, false, (float*)&camera); } //------ - - Game.Gl.Uniform4(ColorID, new System.Numerics.Vector4(color4.Red, color4.Green, color4.Blue, color4.Alpha)); //変色用のカラーを設定 - //テクスチャの切り抜きの座標と大きさを設定 + Game.Gl.Uniform4(ColorID, new System.Numerics.Vector4(color4.Red, color4.Green, color4.Blue, color4.Alpha)); //変色用のカラーを設定 + Game.Gl.Uniform2(ScaleID, new System.Numerics.Vector2(vcScaleRatio.X, vcScaleRatio.Y)); //変色用のカラーを設定 + + //テクスチャの切り抜きの座標と大きさを設定 Game.Gl.Uniform4(TextureRectID, new System.Numerics.Vector4( rc画像内の描画領域.X / rc全画像.Width, rc画像内の描画領域.Y / rc全画像.Height, //始まり - rc画像内の描画領域.Width / rc全画像.Width, rc画像内の描画領域.Height / rc全画像.Height)); //大きさ、終わりではない - + rc画像内の描画領域.Width / rc全画像.Width, rc画像内の描画領域.Height / rc全画像.Height)); //大きさ、終わりではない + + Game.Gl.Uniform1(NoteModeID, 0); //描画----- Game.Gl.BindVertexArray(VAO); diff --git a/OpenTaiko/src/Stages/01.StartUp/TextureLoader.cs b/OpenTaiko/src/Stages/01.StartUp/TextureLoader.cs index 5c3f5784..64b3c5a3 100644 --- a/OpenTaiko/src/Stages/01.StartUp/TextureLoader.cs +++ b/OpenTaiko/src/Stages/01.StartUp/TextureLoader.cs @@ -761,63 +761,6 @@ namespace TJAPlayer3 #endregion - #region 終了演出 - - End_Clear_Chara = TxC(GAME + END + @$"Clear_Chara.png"); - End_Star = TxC(GAME + END + @$"Star.png"); - - End_Clear_Text = new CTexture[2]; - End_Clear_Text[0] = TxC(GAME + END + @$"Clear_Text.png"); - End_Clear_Text[1] = TxC(GAME + END + @$"Clear_Text_End.png"); - - End_Clear_L = new CTexture[5]; - End_Clear_R = new CTexture[5]; - for (int i = 0; i < 5; i++) - { - End_Clear_L[i] = TxC(GAME + END + @$"Clear{Path.DirectorySeparatorChar}" + @$"Clear_L_" + i.ToString() + ".png"); - End_Clear_R[i] = TxC(GAME + END + @$"Clear{Path.DirectorySeparatorChar}" + @$"Clear_R_" + i.ToString() + ".png"); - - } - End_Clear_Text_ = TxC(GAME + END + @$"Clear{Path.DirectorySeparatorChar}" + @$"Clear_Text.png"); - End_Clear_Text_Effect = TxC(GAME + END + @$"Clear{Path.DirectorySeparatorChar}" + @$"Clear_Text_Effect.png"); - if (End_Clear_Text_Effect != null) End_Clear_Text_Effect.b加算合成 = true; - - ClearFailed = TxC(GAME + END + @$"ClearFailed{Path.DirectorySeparatorChar}" + "Clear_Failed.png"); - ClearFailed1 = TxC(GAME + END + @$"ClearFailed{Path.DirectorySeparatorChar}" + "Clear_Failed1.png"); - ClearFailed2 = TxC(GAME + END + @$"ClearFailed{Path.DirectorySeparatorChar}" + "Clear_Failed2.png"); - - End_ClearFailed = new CTexture[26]; - for (int i = 0; i < 26; i++) - End_ClearFailed[i] = TxC(GAME + END + @$"ClearFailed{Path.DirectorySeparatorChar}" + i.ToString() + ".png"); - - End_FullCombo = new CTexture[67]; - for (int i = 0; i < 67; i++) - End_FullCombo[i] = TxC(GAME + END + @$"FullCombo{Path.DirectorySeparatorChar}" + i.ToString() + ".png"); - - End_FullComboLoop = new CTexture[3]; - for (int i = 0; i < 3; i++) - End_FullComboLoop[i] = TxC(GAME + END + @$"FullCombo{Path.DirectorySeparatorChar}" + "loop_" + i.ToString() + ".png"); - - End_DondaFullComboBg = TxC(GAME + END + @$"DondaFullCombo{Path.DirectorySeparatorChar}" + "bg.png"); - - End_DondaFullCombo = new CTexture[62]; - for (int i = 0; i < 62; i++) - End_DondaFullCombo[i] = TxC(GAME + END + @$"DondaFullCombo{Path.DirectorySeparatorChar}" + i.ToString() + ".png"); - - End_DondaFullComboLoop = new CTexture[3]; - for (int i = 0; i < 3; i++) - End_DondaFullComboLoop[i] = TxC(GAME + END + @$"DondaFullCombo{Path.DirectorySeparatorChar}" + "loop_" + i.ToString() + ".png"); - - - End_Goukaku = new CTexture[3]; - - for (int i = 0; i < End_Goukaku.Length; i++) - { - End_Goukaku[i] = TxC(GAME + END + @$"Dan" + i.ToString() + ".png"); - } - - #endregion - #region GameMode GameMode_Timer_Tick = TxC(GAME + GAMEMODE + @$"Timer_Tick.png"); @@ -2877,27 +2820,6 @@ namespace TJAPlayer3 Lane_Background_Sub, Lane_Background_GoGo; #endregion - #region 終了演出 - public CTexture End_Clear_Chara; - public CTexture[] End_Clear_Text; - public CTexture End_Star; - - public CTexture[] End_Clear_L, - End_Clear_R, - End_ClearFailed, - End_FullCombo, - End_FullComboLoop, - End_DondaFullCombo, - End_DondaFullComboLoop, - End_Goukaku; - public CTexture End_Clear_Text_, - End_Clear_Text_Effect, - ClearFailed, - ClearFailed1, - ClearFailed2, - End_DondaFullComboBg; - - #endregion #region ゲームモード public CTexture GameMode_Timer_Frame, GameMode_Timer_Tick; diff --git a/OpenTaiko/src/Stages/07.Game/CAct演奏ステージ失敗.cs b/OpenTaiko/src/Stages/07.Game/CAct演奏ステージ失敗.cs index 1d44abee..2c288659 100644 --- a/OpenTaiko/src/Stages/07.Game/CAct演奏ステージ失敗.cs +++ b/OpenTaiko/src/Stages/07.Game/CAct演奏ステージ失敗.cs @@ -71,7 +71,6 @@ namespace TJAPlayer3 { this.dbFailedTime = TJAPlayer3.Timer.NowTime; this.ct進行 = new CCounter( 0, 300, 22, TJAPlayer3.Timer ); - this.ctEnd_ClearFailed = new CCounter(0, 69, 30, TJAPlayer3.Timer); if ( TJAPlayer3.ConfigIni.eGameMode != EGame.OFF ) { this.ct進行 = new CCounter( 0, 4000, 2, TJAPlayer3.Timer ); @@ -125,23 +124,6 @@ namespace TJAPlayer3 { int[] y = new int[] { 0, 176 }; - this.ctEnd_ClearFailed.Tick(); - if (this.ctEnd_ClearFailed.CurrentValue <= 20 || TJAPlayer3.Tx.ClearFailed == null) - { - TJAPlayer3.Tx.End_ClearFailed[Math.Min(this.ctEnd_ClearFailed.CurrentValue, TJAPlayer3.Tx.End_ClearFailed.Length - 1)]?.t2D描画(505, y[i] + 145); - } - else if(this.ctEnd_ClearFailed.CurrentValue >= 20 && this.ctEnd_ClearFailed.CurrentValue <= 67) - { - TJAPlayer3.Tx.ClearFailed?.t2D描画(502, y[i] + 192); - } - else if (this.ctEnd_ClearFailed.CurrentValue == 68) - { - TJAPlayer3.Tx.ClearFailed1?.t2D描画(502, y[i] + 192); - } - else if (this.ctEnd_ClearFailed.CurrentValue >= 69) - { - TJAPlayer3.Tx.ClearFailed2?.t2D描画(502, y[i] + 192); - } } #endregion @@ -251,7 +233,6 @@ namespace TJAPlayer3 private bool failedSongPlayed; private CSound soundFailed; - private CCounter ctEnd_ClearFailed; //private CTexture txStageFailed; // private CTexture txGameFailed; // private CTexture txBlack; diff --git a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drums演奏終了演出.cs b/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drums演奏終了演出.cs index f8e90a7d..596e7915 100644 --- a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drums演奏終了演出.cs +++ b/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drums演奏終了演出.cs @@ -593,7 +593,7 @@ namespace TJAPlayer3 { base.IsFirstDraw = false; } - if (this.ct進行メイン != null && (TJAPlayer3.stage演奏ドラム画面.ePhaseID == CStage.EPhase.Game_EndStage || TJAPlayer3.stage演奏ドラム画面.ePhaseID == CStage.EPhase.Game_STAGE_CLEAR_FadeOut)) + 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(); @@ -898,29 +898,6 @@ namespace TJAPlayer3 Dan_Gold_Perfect } - void StarDraw(int x, int y, int count, int starttime = 0, int Endtime = 20) - { - if (count >= 0 && count <= Endtime) - { - count += starttime; - - if (count <= 11) - { - TJAPlayer3.Tx.End_Star.vcScaleRatio.X = count * 0.09f; - TJAPlayer3.Tx.End_Star.vcScaleRatio.Y = count * 0.09f; - TJAPlayer3.Tx.End_Star.Opacity = 255; - TJAPlayer3.Tx.End_Star.t2D拡大率考慮中央基準描画(x, y); - } - else if (count <= 20) - { - TJAPlayer3.Tx.End_Star.vcScaleRatio.X = 1.0f; - TJAPlayer3.Tx.End_Star.vcScaleRatio.Y = 1.0f; - TJAPlayer3.Tx.End_Star.Opacity = (int)(255 - (255.0f / 9.0f) * (count - 11)); - TJAPlayer3.Tx.End_Star.t2D拡大率考慮中央基準描画(x, y); - } - } - } - //----------------- #endregion } diff --git a/OpenTaiko/src/Stages/07.Game/Taiko/CStage演奏ドラム画面.cs b/OpenTaiko/src/Stages/07.Game/Taiko/CStage演奏ドラム画面.cs index a68cef7a..54a9802e 100644 --- a/OpenTaiko/src/Stages/07.Game/Taiko/CStage演奏ドラム画面.cs +++ b/OpenTaiko/src/Stages/07.Game/Taiko/CStage演奏ドラム画面.cs @@ -448,8 +448,9 @@ namespace TJAPlayer3 || (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Tower && CFloorManagement.CurrentNumberOfLives <= 0)) && ( base.ePhaseID == CStage.EPhase.Common_NORMAL )) { - this.actStageFailed.Start(); - TJAPlayer3.DTX.t全チップの再生停止(); + this.actStageFailed.Start(); + this.actEnd.Start(); + TJAPlayer3.DTX.t全チップの再生停止(); base.ePhaseID = CStage.EPhase.Game_STAGE_FAILED; } @@ -600,7 +601,6 @@ namespace TJAPlayer3 this.t全体制御メソッド(); - this.actPauseMenu.t進行描画(); //this.actEnd.On進行描画(); this.t進行描画_STAGEFAILED(); @@ -619,7 +619,9 @@ namespace TJAPlayer3 for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) { if (!ifp[i]) bIsFinishedPlaying = false; - } + } + + this.actPauseMenu.t進行描画(); //演奏終了→演出表示→フェードアウト if ( bIsFinishedPlaying && base.ePhaseID == CStage.EPhase.Common_NORMAL ) diff --git a/OpenTaiko/src/Stages/07.Game/Taiko/NotesManager.cs b/OpenTaiko/src/Stages/07.Game/Taiko/NotesManager.cs index 7b576ecf..6452c085 100644 --- a/OpenTaiko/src/Stages/07.Game/Taiko/NotesManager.cs +++ b/OpenTaiko/src/Stages/07.Game/Taiko/NotesManager.cs @@ -451,7 +451,7 @@ namespace TJAPlayer3 var _center_x = (x + x末端 + image_size) / 2; var _center_y = _adjust + (y + y末端) / 2; //TJAPlayer3.Tx.Notes[(int)_gt].t2D描画(_x0, _y0, new Rectangle(rollOrigin + TJAPlayer3.Skin.Game_Notes_Size[0] + _offset, 0, TJAPlayer3.Skin.Game_Notes_Size[0], TJAPlayer3.Skin.Game_Notes_Size[1])); - _texarr.t2D拡大率考慮中央基準描画((int)_center_x, (int)_center_y, new Rectangle(rollOrigin + TJAPlayer3.Skin.Game_Notes_Size[0] + _offset, 0, TJAPlayer3.Skin.Game_Notes_Size[0], TJAPlayer3.Skin.Game_Notes_Size[1])); + _texarr.t2D_DisplayImage_RollNote((int)_center_x, (int)_center_y, new Rectangle(rollOrigin + TJAPlayer3.Skin.Game_Notes_Size[0] + _offset, 0, TJAPlayer3.Skin.Game_Notes_Size[0], TJAPlayer3.Skin.Game_Notes_Size[1])); //t2D拡大率考慮中央基準描画 t2D中心基準描画 // Tail