OSDN Git Service

#24074 グラフで泡っぽいのと簡易エフェクトの追加。
authorikanick <ikanick@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Sat, 5 Feb 2011 14:24:45 +0000 (14:24 +0000)
committerikanick <ikanick@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Sat, 5 Feb 2011 14:24:45 +0000 (14:24 +0000)
git-svn-id: http://svn.osdn.jp/svnroot/dtxmania/trunk@103 16f42ceb-6dc6-49c8-ba94-f2d53467949d

DTXManiaプロジェクト/コード/ステージ/07.演奏/ドラム画面/CAct演奏Drumsグラフ.cs
DTXManiaプロジェクト/コード/ステージ/07.演奏/ドラム画面/CStage演奏ドラム画面.cs

index d31b7f1..30088c6 100644 (file)
@@ -17,8 +17,9 @@ namespace DTXMania
         // ・目標を超えると現在が光る\r
         // ・オート時には描画しない\r
         // 要望・実装予定\r
-        // ・グラフを波打たせるなどの視覚の向上\r
-\r
+        // ・グラフを波打たせるなどの視覚の向上→実装済\r
+        // 修正等\r
+        // ・画像がないと落ちる→修正済\r
 \r
                // プロパティ\r
 \r
@@ -87,62 +88,183 @@ namespace DTXMania
                        {\r
                                if( base.b初めての進行描画 )\r
                                {\r
+                                       for( int k = 0; k < 64; k++ )\r
+                                       {\r
+                                               this.stキラキラ[ k ].x = 0 + CDTXMania.Random.Next( 8 );\r
+                                               this.stキラキラ[ k ].fScale = 1f + ( CDTXMania.Random.Next( 9 ) * 0.2f );\r
+                                               this.stキラキラ[ k ].Trans = 0 + CDTXMania.Random.Next( 32 ) ;\r
+                        if (k < 32)\r
+                        {\r
+                            this.stキラキラ[ k ].ct進行 = new CCounter(0, 230, 10 + CDTXMania.Random.Next(20), CDTXMania.Timer);\r
+                        }\r
+                        else if (k < 64)\r
+                        {\r
+                            this.stキラキラ[ k ].ct進行 = new CCounter(0, 230, 20 + CDTXMania.Random.Next(50), CDTXMania.Timer);\r
+                        }\r
+                        this.stキラキラ[ k ].ct進行.n現在の値 = CDTXMania.Random.Next(230);\r
+                                       }\r
+                                       for( int k = 0; k < 16; k++ )\r
+                                       {\r
+                                               this.stフラッシュ[ k ].y = -1;\r
+                                               this.stフラッシュ[ k ].Trans = 0;\r
+                                       }\r
                                        base.b初めての進行描画 = false;\r
                 }\r
                 // 背景暗幕\r
+                Rectangle rectangle = new Rectangle(22, 0, 1, 1);\r
                 if (this.txグラフ != null)\r
                 {\r
-                    this.txグラフ.n透明度 = 128;\r
                     this.txグラフ.vc拡大縮小倍率 = new Vector3(38f, 230f, 1f);\r
+                    this.txグラフ.n透明度 = 128;\r
+                    this.txグラフ.t2D描画(CDTXMania.app.Device, 345, 88, rectangle);\r
                 }\r
-                Rectangle rectangle = new Rectangle(22, 0, 1, 1);\r
-                this.txグラフ.t2D描画(CDTXMania.app.Device, 345, 88, rectangle);\r
                 \r
                 // 基準線\r
+                rectangle = new Rectangle(20, 0, 1, 1);\r
+                if (this.txグラフ != null)\r
+                {\r
+                    this.txグラフ.n透明度 = 32;\r
+                    this.txグラフ.vc拡大縮小倍率 = new Vector3(38f, 1f, 1f);\r
+                    for (int i = 0; i < 20; i++)\r
+                    {\r
+                        this.txグラフ.t2D描画(CDTXMania.app.Device, 345, 88 + (int)(11.5 * i), rectangle);\r
+                    }\r
+                    this.txグラフ.vc拡大縮小倍率 = new Vector3(1f, 230f, 1f);\r
+                    for (int i = 0; i < 2; i++)\r
+                    {\r
+                        this.txグラフ.t2D描画(CDTXMania.app.Device, 349 + i * 18, 88 , rectangle);\r
+                        this.txグラフ.t2D描画(CDTXMania.app.Device, 360 + i * 18, 88 , rectangle);\r
+                    }\r
+                }\r
                 if (this.txグラフ != null)\r
                 {\r
-                    this.txグラフ.n透明度 = 192;\r
                     this.txグラフ.vc拡大縮小倍率 = new Vector3(38f, 1f, 1f);\r
                 }\r
-                for (int i = 0; i < 4; i++)\r
+                for (int i = 0; i < 5; i++)\r
                 {\r
-                    // 基準線を越えたら黄色くなる\r
+                    // 基準線を越えたら線が黄色くなる\r
                     if (this.dbグラフ値現在 >= (100 - i * 10))\r
                     {\r
-                        rectangle = new Rectangle(21, 0, 1, 1);\r
+                        rectangle = new Rectangle(21, 0, 1, 1);//黄色\r
+                        this.txグラフ.n透明度 = 224;\r
                     }\r
                     else\r
                     {\r
                         rectangle = new Rectangle(20, 0, 1, 1);\r
+                        this.txグラフ.n透明度 = 160;\r
                     }\r
-                    this.txグラフ.t2D描画(CDTXMania.app.Device, 345, 88+i*23, rectangle);\r
-                }\r
 \r
+                    if (this.txグラフ != null)\r
+                    {\r
+                        this.txグラフ.t2D描画(CDTXMania.app.Device, 345, 88 + i * 23, rectangle);\r
+                    }\r
+                }\r
                 // グラフ\r
                 // --現在値\r
+                if (this.dbグラフ値現在_表示 < this.dbグラフ値現在)\r
+                {\r
+                    this.dbグラフ値現在_表示 += (this.dbグラフ値現在 - this.dbグラフ値現在_表示) / 5 + 0.01;\r
+                }\r
+                if (this.dbグラフ値現在_表示 >= this.dbグラフ値現在)\r
+                {\r
+                    this.dbグラフ値現在_表示 = this.dbグラフ値現在;\r
+                }\r
+                rectangle = new Rectangle(0, 0, 10, (int)(230f * this.dbグラフ値現在_表示 / 100));\r
                 if (this.txグラフ != null)\r
                 {\r
-                    this.txグラフ.n透明度 = 192;\r
                     this.txグラフ.vc拡大縮小倍率 = new Vector3(1f, 1f, 1f);\r
+                    this.txグラフ.n透明度 = 192;\r
+                    this.txグラフ.t2D描画(CDTXMania.app.Device, 350, 318 - (int)(230f * this.dbグラフ値現在_表示 / 100), rectangle);\r
                 }\r
-                rectangle = new Rectangle(0, 0, 10, (int)(230f * this.dbグラフ値現在 / 100));\r
-                this.txグラフ.t2D描画(CDTXMania.app.Device, 350, 318 - (int)(230f * this.dbグラフ値現在 / 100), rectangle);\r
-                if (dbグラフ値現在 >= dbグラフ値目標)\r
+                               for( int k = 0; k < 32; k++ )\r
+                               {\r
+                    rectangle = new Rectangle(20, 0, 1, 1);\r
+                    if (this.txグラフ != null)\r
+                    {\r
+                                       this.stキラキラ[ k ].ct進行.t進行Loop();\r
+                        int num1 = (int)this.stキラキラ[ k ].x;\r
+                        int num2 = this.stキラキラ[ k ].ct進行.n現在の値;\r
+                        this.txグラフ.vc拡大縮小倍率 = new Vector3(this.stキラキラ[ k ].fScale, this.stキラキラ[ k ].fScale, this.stキラキラ[ k ].fScale);\r
+                        this.txグラフ.n透明度 = 138 - 2 * this.stキラキラ[ k ].Trans;\r
+                        if ( num2 < (2.3f * this.dbグラフ値現在_表示) )\r
+                        {\r
+                            this.txグラフ.t2D描画(CDTXMania.app.Device, 350+num1, 318-num2, rectangle);\r
+                        }\r
+                    }\r
+                               }\r
+                // --現在値_追加エフェクト\r
+                if (this.dbグラフ値直前 != this.dbグラフ値現在)\r
                 {\r
-                    this.txグラフ.vc拡大縮小倍率 = new Vector3(1.2f, 1f, 1f);\r
-                    this.txグラフ.n透明度 = 64;\r
+                    this.stフラッシュ[ nグラフフラッシュct ].y = 0;\r
+                    this.stフラッシュ[ nグラフフラッシュct ].Trans = 224;\r
+                    nグラフフラッシュct ++;\r
+                    if (nグラフフラッシュct >= 16)\r
+                    {\r
+                        nグラフフラッシュct = 0;\r
+                    }\r
+                }\r
+                this.dbグラフ値直前 = this.dbグラフ値現在;\r
+                for (int m = 0; m < 16; m++)\r
+                {\r
+                    rectangle = new Rectangle(20, 0, 1, 1);\r
+                    if ((this.stフラッシュ[ m ].y >= 0) && (this.stフラッシュ[ m ].y+3 < (int)(230f * this.dbグラフ値現在_表示 / 100)) && (this.txグラフ != null))\r
+                    {\r
+                        this.txグラフ.vc拡大縮小倍率 = new Vector3(10f, 1f, 1f);\r
+                        this.txグラフ.n透明度 = this.stフラッシュ[ m ].Trans;\r
+                        this.txグラフ.t2D描画(CDTXMania.app.Device, 350, this.stフラッシュ[ m ].y + (318 - (int)(230f * this.dbグラフ値現在_表示 / 100)), rectangle);\r
+                        this.txグラフ.n透明度 = this.stフラッシュ[ m ].Trans;\r
+                        this.txグラフ.t2D描画(CDTXMania.app.Device, 350, this.stフラッシュ[ m ].y + 2 + (318 - (int)(230f * this.dbグラフ値現在_表示 / 100)), rectangle);\r
+                    }\r
+                    this.stフラッシュ[ m ].y += 4;\r
+                    this.stフラッシュ[ m ].Trans -= 4;\r
+                }\r
+                // --現在値_目標越\r
+                rectangle = new Rectangle(0, 0, 10, (int)(230f * this.dbグラフ値現在_表示 / 100));\r
+                if ((dbグラフ値現在 >= dbグラフ値目標) && (this.txグラフ != null))\r
+                {\r
+                    this.txグラフ.vc拡大縮小倍率 = new Vector3(1.4f, 1f, 1f);\r
+                    this.txグラフ.n透明度 = 128;\r
                     this.txグラフ.b加算合成 = true;\r
-                    this.txグラフ.t2D描画(CDTXMania.app.Device, 349, 318 - (int)(230f * this.dbグラフ値現在 / 100), rectangle);\r
+                    this.txグラフ.t2D描画(CDTXMania.app.Device, 348, 318 - (int)(230f * this.dbグラフ値現在_表示 / 100), rectangle);\r
+                    this.txグラフ.b加算合成 = false;\r
                 }\r
                 // --目標値\r
+                if (this.dbグラフ値目標_表示 < this.dbグラフ値目標)\r
+                {\r
+                    this.dbグラフ値目標_表示 += (this.dbグラフ値目標 - this.dbグラフ値目標_表示) / 5 + 0.01;\r
+                }\r
+                if (this.dbグラフ値目標_表示 >= this.dbグラフ値目標)\r
+                {\r
+                    this.dbグラフ値目標_表示 = this.dbグラフ値目標;\r
+                }\r
+                rectangle = new Rectangle(10, 0, 10, (int)(230f * this.dbグラフ値目標_表示 / 100));\r
                 if (this.txグラフ != null)\r
                 {\r
-                    this.txグラフ.n透明度 = 192;\r
                     this.txグラフ.vc拡大縮小倍率 = new Vector3(1f, 1f, 1f);\r
+                    this.txグラフ.n透明度 = 192;\r
+                    this.txグラフ.t2D描画(CDTXMania.app.Device, 368, 318 - (int)(230f * this.dbグラフ値目標_表示 / 100), rectangle);\r
+                    this.txグラフ.vc拡大縮小倍率 = new Vector3(1.4f, 1f, 1f);\r
+                    this.txグラフ.n透明度 = 48;\r
+                    this.txグラフ.b加算合成 = true;\r
+                    this.txグラフ.t2D描画(CDTXMania.app.Device, 366, 318 - (int)(230f * this.dbグラフ値目標_表示 / 100), rectangle);\r
                     this.txグラフ.b加算合成 = false;\r
                 }\r
-                rectangle = new Rectangle(10, 0, 10, (int)(230f * this.dbグラフ値目標 / 100));\r
-                this.txグラフ.t2D描画(CDTXMania.app.Device, 368, 318 - (int)(230f * this.dbグラフ値目標 / 100), rectangle);\r
+                               for( int k = 32; k < 64; k++ )\r
+                               {\r
+                    rectangle = new Rectangle(20, 0, 1, 1);\r
+                    if (this.txグラフ != null)\r
+                    {\r
+                                       this.stキラキラ[ k ].ct進行.t進行Loop();\r
+                        int num1 = (int)this.stキラキラ[ k ].x;\r
+                        int num2 = this.stキラキラ[ k ].ct進行.n現在の値;\r
+                        this.txグラフ.vc拡大縮小倍率 = new Vector3(this.stキラキラ[ k ].fScale, this.stキラキラ[ k ].fScale, this.stキラキラ[ k ].fScale);\r
+                        this.txグラフ.n透明度 = 138 - 2 * this.stキラキラ[ k ].Trans;\r
+                        if ( num2 < (2.3f * this.dbグラフ値目標_表示) )\r
+                        {\r
+                            this.txグラフ.t2D描画(CDTXMania.app.Device, 368+num1, 318-num2, rectangle);\r
+                        }\r
+                    }\r
+                               }\r
                 \r
                        }\r
                        return 0;\r
@@ -153,8 +275,25 @@ namespace DTXMania
 \r
                #region [ private ]\r
                //----------------\r
+               [StructLayout( LayoutKind.Sequential )]\r
+               private struct STキラキラ\r
+               {\r
+                       public int x;\r
+                       public int y;\r
+                       public float fScale;\r
+                       public int Trans;\r
+                       public CCounter ct進行;\r
+               }\r
+        private STキラキラ[] stキラキラ = new STキラキラ[ 64 ];\r
+        private STキラキラ[] stフラッシュ = new STキラキラ[ 16 ];\r
+\r
         private double dbグラフ値目標;\r
+        private double dbグラフ値目標_表示;\r
         private double dbグラフ値現在;\r
+        private double dbグラフ値現在_表示;\r
+        private double dbグラフ値直前;\r
+        private int nグラフフラッシュct;\r
+\r
                private CTexture txグラフ;\r
                //-----------------\r
                #endregion\r
index 29a4bdd..eaabe31 100644 (file)
@@ -1677,7 +1677,6 @@ namespace DTXMania
         private void t進行描画・グラフ()        \r
         {\r
                        if ( !CDTXMania.ConfigIni.bストイックモード && !CDTXMania.ConfigIni.bドラムが全部オートプレイである && CDTXMania.ConfigIni.bGraph.Drums )\r
-//                     if ( !CDTXMania.ConfigIni.bストイックモード && CDTXMania.ConfigIni.bGraph.Drums )\r
                        {\r
                 this.actGraph.On進行描画();\r
             }\r