OSDN Git Service

Merge branch 'feature/37178_プロジェクトとソリューションファイルの英語化' into develop
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / ステージ / 07.演奏 / CAct演奏ゲージ共通.cs
diff --git a/DTXManiaプロジェクト/コード/ステージ/07.演奏/CAct演奏ゲージ共通.cs b/DTXManiaプロジェクト/コード/ステージ/07.演奏/CAct演奏ゲージ共通.cs
deleted file mode 100644 (file)
index 764eb45..0000000
+++ /dev/null
@@ -1,405 +0,0 @@
-using System;\r
-using System.Collections.Generic;\r
-using System.Text;\r
-using System.Runtime.InteropServices;\r
-using System.Drawing;\r
-using System.Diagnostics;\r
-using SharpDX;\r
-using FDK;\r
-\r
-using Color = System.Drawing.Color;\r
-using Rectangle = System.Drawing.Rectangle;\r
-\r
-namespace DTXMania\r
-{\r
-       /// <summary>\r
-       /// CAct演奏Drumsゲージ と CAct演奏Gutiarゲージ のbaseクラス。ダメージ計算やDanger/Failed判断もこのクラスで行う。\r
-       /// </summary>\r
-       internal class CAct演奏ゲージ共通 : CActivity\r
-       {\r
-               const double GAUGE_MAX = 1.0;\r
-               const double GAUGE_INITIAL = 2.0 / 3;\r
-               const double GAUGE_MIN = -0.1;\r
-               const double GAUGE_ZERO = 0.0;\r
-               const double GAUGE_DANGER = 0.3;\r
-\r
-               private float[,] fDamageGaugeDelta = {\r
-                       // #23625 2011.1.10 ickw_284: tuned damage/recover factors\r
-                       // drums,   guitar,  bass\r
-                       {  0.004f,  0.006f,  0.006f  },\r
-                       {  0.002f,  0.003f,  0.003f  },\r
-                       {  0.000f,  0.000f,  0.000f  },\r
-                       { -0.020f, -0.030f, -0.030f  },\r
-                       { -0.050f, -0.050f, -0.050f  }\r
-               };\r
-               private float[] fDamageLevelFactor = {\r
-                       0.5f, 1.0f, 1.5f\r
-               };\r
-\r
-               private double db現在のゲージ値;\r
-               private CCounter ct本体移動;\r
-               private CCounter ct本体振動;\r
-               private CTexture txゲージ;\r
-               private CTextureAf txゲージ白;\r
-               private ST白い星[] st白い星 = new ST白い星[24];\r
-\r
-               private CActDigit actDigit;\r
-\r
-               /// <summary>\r
-               /// Riskyモードか否か\r
-               /// </summary>\r
-               public bool bRisky { get; private set; }\r
-\r
-               /// <summary>\r
-               /// Risky初期値\r
-               /// </summary>\r
-               public int nRiskyTimesInitial { get; private set; }\r
-\r
-               /// <summary>\r
-               /// 残Miss回数\r
-               /// </summary>\r
-               public int nRiskyTimes { get; private set; }\r
-\r
-               /// <summary>\r
-               /// 閉店状態になったかどうか\r
-               /// </summary>\r
-               /// <returns></returns>\r
-               public bool IsFailed\r
-               {\r
-                       get\r
-                       {\r
-                               if (bRisky)\r
-                               {\r
-                                       return (nRiskyTimes <= 0);\r
-                               }\r
-                               return this.db現在のゲージ値 <= GAUGE_MIN;\r
-                       }\r
-               }\r
-\r
-               /// <summary>\r
-               /// DANGERかどうか\r
-               /// </summary>\r
-               /// <returns></returns>\r
-               public bool IsDanger\r
-               {\r
-                       get\r
-                       {\r
-                               if (bRisky)\r
-                               {\r
-                                       switch (nRiskyTimesInitial)\r
-                                       {\r
-                                               case 1:\r
-                                                       return false;\r
-                                               case 2:\r
-                                               case 3:\r
-                                                       return (nRiskyTimes <= 1);\r
-                                               default:\r
-                                                       return (nRiskyTimes <= 2);\r
-                                       }\r
-                               }\r
-                               return (this.db現在のゲージ値 <= GAUGE_DANGER);\r
-                       }\r
-               }\r
-\r
-               public CAct演奏ゲージ共通()\r
-               {\r
-                       base.list子Activities.Add(actDigit = new CActDigit(Color.Red, Color.Black, 24));\r
-               }\r
-\r
-               public override void On非活性化()\r
-               {\r
-                       if (base.b活性化してる)\r
-                       {\r
-                               this.ct本体振動 = null;\r
-                               this.ct本体移動 = null;\r
-                               for (int i = 0; i < 24; i++)\r
-                               {\r
-                                       this.st白い星[i].ct進行 = null;\r
-                               }\r
-                               base.On非活性化();\r
-                       }\r
-               }\r
-\r
-               public override void OnUnmanagedリソースの作成()\r
-               {\r
-                       if (b活性化してる)\r
-                       {\r
-                               this.txゲージ = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenPlayDrums gauge.png"));\r
-                               this.txゲージ白 = TextureFactory.tテクスチャの生成Af(CSkin.Path(@"Graphics\ScreenPlayDrums_gauge_white.png "));\r
-                               base.OnUnmanagedリソースの作成();\r
-                       }\r
-               }\r
-\r
-               public override void OnManagedリソースの解放()\r
-               {\r
-                       if (b活性化してる)\r
-                       {\r
-                               TextureFactory.tテクスチャの解放(ref this.txゲージ);\r
-                               TextureFactory.tテクスチャの解放(ref this.txゲージ白);\r
-                               base.OnUnmanagedリソースの解放();\r
-                       }\r
-               }\r
-\r
-               public override int On進行描画()\r
-               {\r
-                       if (b活性化してる && CDTXMania.Instance.ConfigIni.eDark == EDark.Off)\r
-                       {\r
-                               #region [ 初めての進行描画 ]\r
-                               if (base.b初めての進行描画)\r
-                               {\r
-                                       for (int k = 0; k < 24; k++)\r
-                                       {\r
-                                               this.st白い星[k].x = 6 + CDTXMania.Instance.Random.Next(12);\r
-                                               this.st白い星[k].fScale = 0.2f + (CDTXMania.Instance.Random.Next(2) * 0.05f);\r
-                                               this.st白い星[k].ct進行 = new CCounter(0, CDTXMania.Instance.Coordinates.GaugeMax, 8 + CDTXMania.Instance.Random.Next(4), CDTXMania.Instance.Timer);\r
-                                               this.st白い星[k].ct進行.n現在の値 = CDTXMania.Instance.Random.Next(CDTXMania.Instance.Coordinates.GaugeMax);\r
-                                       }\r
-                                       this.ct本体移動 = new CCounter(0, 0x1a, 20, CDTXMania.Instance.Timer);\r
-                                       this.ct本体振動 = new CCounter(0, 360, 4, CDTXMania.Instance.Timer);\r
-                                       base.b初めての進行描画 = false;\r
-                               }\r
-                               #endregion\r
-                               this.ct本体移動.t進行Loop();\r
-                               this.ct本体振動.t進行Loop();\r
-\r
-\r
-                               #region [ 緑orオレンジのゲージ表示 ]\r
-                               double dbゲージ最大値 = CDTXMania.Instance.Coordinates.GaugeMax;\r
-                               int n表示するゲージの高さ = (this.db現在のゲージ値 == 1.0) ?\r
-                                       ((int)(dbゲージ最大値 * this.db現在のゲージ値)) :\r
-                                       ((int)((dbゲージ最大値 * this.db現在のゲージ値) + (2.0 * Math.Sin(Math.PI * 2 * (((double)this.ct本体振動.n現在の値) / 360.0)))));\r
-\r
-                               if (n表示するゲージの高さ <= 0)\r
-                               {\r
-                                       return 0;\r
-                               }\r
-                               if (this.txゲージ != null)\r
-                               {\r
-                                       this.txゲージ.vc拡大縮小倍率 = new Vector3(1f, 1f, 1f);\r
-                                       this.txゲージ.n透明度 = 0xff;\r
-                                       this.txゲージ.b加算合成 = false;\r
-                               }\r
-                               int nCtゲージ内部上昇スクロール現在値 = (int)(this.ct本体移動.n現在の値 * Scale.Y);\r
-                               int n表示ゲージ最大値 = CDTXMania.Instance.Coordinates.Gauge.Y;\r
-                               int ybar = (n表示ゲージ最大値 - n表示するゲージの高さ) - nCtゲージ内部上昇スクロール現在値;\r
-                               int height = n表示するゲージの高さ + nCtゲージ内部上昇スクロール現在値;\r
-                               while (height > 0)\r
-                               {\r
-                                       Rectangle rect = (this.db現在のゲージ値 == 1.0) ?\r
-                                               CDTXMania.Instance.Coordinates.ImgGaugeOrange :\r
-                                               CDTXMania.Instance.Coordinates.ImgGaugeNormal;\r
-                                       #region [ clipping ]\r
-                                       if (ybar < (n表示ゲージ最大値 - n表示するゲージの高さ))\r
-                                       {\r
-                                               int d = (n表示ゲージ最大値 - n表示するゲージの高さ) - ybar;\r
-                                               rect.Y += d;\r
-                                               rect.Height -= d;\r
-                                               ybar += d;\r
-                                       }\r
-                                       if ((ybar + rect.Height) > n表示ゲージ最大値)\r
-                                       {\r
-                                               int num7 = (ybar + rect.Height) - n表示ゲージ最大値;\r
-                                               rect.Height -= num7;\r
-                                       }\r
-                                       if (rect.Top >= rect.Bottom)\r
-                                       {\r
-                                               break;\r
-                                       }\r
-                                       #endregion\r
-                                       if (this.txゲージ != null)\r
-                                       {\r
-                                               this.txゲージ.t2D描画(\r
-                                                       CDTXMania.Instance.Device,\r
-                                                       CDTXMania.Instance.Coordinates.Gauge.X,\r
-                                                       ybar,\r
-                                                       rect\r
-                                               );\r
-                                       }\r
-                                       height -= rect.Height;\r
-                                       ybar += rect.Height;\r
-                               }\r
-                               #endregion\r
-                               #region [ 光彩 ]\r
-                               if (this.txゲージ白 != null)\r
-                               {\r
-                                       this.txゲージ白.vc拡大縮小倍率 = new Vector3(1f, 1f, 1f);\r
-                                       this.txゲージ白.n透明度 = 180;\r
-                                       this.txゲージ白.b加算合成 = true;\r
-                               }\r
-                               {\r
-                                       Rectangle rect = CDTXMania.Instance.Coordinates.ImgGaugeLight;\r
-                                       int ylight = (n表示ゲージ最大値 - n表示するゲージの高さ);\r
-                                       if (ylight < n表示ゲージ最大値)\r
-                                       {\r
-                                               if ((ylight + rect.Height) > n表示ゲージ最大値)\r
-                                               {\r
-                                                       int d = (ylight + rect.Height) - n表示ゲージ最大値;\r
-                                                       rect.Height -= d;\r
-                                               }\r
-                                               if ((rect.Top < rect.Bottom) && (this.txゲージ白 != null))\r
-                                               {\r
-                                                       this.txゲージ白.t2D描画(\r
-                                                               CDTXMania.Instance.Device,\r
-                                                               CDTXMania.Instance.Coordinates.Gauge.X,\r
-                                                               ylight,\r
-                                                               rect\r
-                                                       );\r
-                                               }\r
-                                       }\r
-                               }\r
-                               #endregion\r
-                               #region [ ゲージ頂上の光源 ]\r
-                               if (this.txゲージ != null)\r
-                               {\r
-                                       this.txゲージ.n透明度 = 0xff;\r
-                                       this.txゲージ.b加算合成 = false;\r
-                               }\r
-                               {\r
-                                       Rectangle rect = CDTXMania.Instance.Coordinates.ImgGaugeTopLight;\r
-                                       int yゲージ頂上 = n表示ゲージ最大値 - n表示するゲージの高さ;\r
-                                       if (yゲージ頂上 < n表示ゲージ最大値)\r
-                                       {\r
-                                               #region [ clipping ]\r
-                                               if ((yゲージ頂上 + rect.Height) > n表示ゲージ最大値)\r
-                                               {\r
-                                                       int d = (yゲージ頂上 + rect.Height) - n表示ゲージ最大値;\r
-                                                       rect.Height -= d;\r
-                                               }\r
-                                               #endregion\r
-                                               if ((rect.Top < rect.Bottom) && (this.txゲージ != null))\r
-                                               {\r
-                                                       this.txゲージ.t2D描画(\r
-                                                               CDTXMania.Instance.Device,\r
-                                                               CDTXMania.Instance.Coordinates.Gauge.X,\r
-                                                               yゲージ頂上,\r
-                                                               rect\r
-                                                       );\r
-                                               }\r
-                                       }\r
-                               }\r
-                               #endregion\r
-                               #region [ 泡 ]\r
-                               if (this.txゲージ != null)\r
-                               {\r
-                                       this.txゲージ.b加算合成 = true;\r
-                               }\r
-                               for (int j = 0; j < 24; j++)\r
-                               {\r
-                                       this.st白い星[j].ct進行.t進行Loop();\r
-                                       int x = CDTXMania.Instance.Coordinates.Gauge.X + this.st白い星[j].x;\r
-                                       int y泡 = (n表示ゲージ最大値 - n表示するゲージの高さ) + CDTXMania.Instance.Coordinates.GaugeMax - this.st白い星[j].ct進行.n現在の値;\r
-                                       if (y泡 + CDTXMania.Instance.Coordinates.ImgGaugeStar.H / 2 < n表示ゲージ最大値)\r
-                                       {\r
-                                               int n透明度 = (this.st白い星[j].ct進行.n現在の値 < 176) ? 0 : ((int)(255.0 * (((double)(this.st白い星[j].ct進行.n現在の値 - 176)) / 176.0)));\r
-                                               if ((n透明度 != 0) && (y泡 < CDTXMania.Instance.Coordinates.Gauge.Y))\r
-                                               {\r
-                                                       Rectangle rect = CDTXMania.Instance.Coordinates.ImgGaugeStar;\r
-                                                       if (this.txゲージ != null)\r
-                                                       {\r
-                                                               this.txゲージ.vc拡大縮小倍率 = new Vector3(this.st白い星[j].fScale, this.st白い星[j].fScale, 1f);\r
-                                                               this.txゲージ.n透明度 = n透明度;\r
-                                                               this.txゲージ.t2D描画(\r
-                                                                       CDTXMania.Instance.Device,\r
-                                                                       x,\r
-                                                                       y泡,\r
-                                                                       rect\r
-                                                               );\r
-                                                       }\r
-                                               }\r
-                                       }\r
-                               }\r
-                               #endregion\r
-\r
-                               #region [ Risky残りMiss回数表示 ]\r
-                               if (this.bRisky)    // #23599 2011.7.30 yyagi Risky残りMiss回数表示\r
-                               {\r
-                                       int w = actDigit.Measure(nRiskyTimes);\r
-                                       actDigit.Draw(nRiskyTimes,\r
-                                               CDTXMania.Instance.Coordinates.Gauge.X + (CDTXMania.Instance.Coordinates.ImgGaugeNormal.W / 2 - w / 2),\r
-                                               CDTXMania.Instance.Coordinates.Gauge.Y - actDigit.MaximumHeight);\r
-                               }\r
-                               #endregion\r
-                       }\r
-                       return 0;\r
-               }\r
-\r
-\r
-               /// <summary>\r
-               /// ゲージの初期化\r
-               /// </summary>\r
-               /// <param name="nRiskyTimes_Initial_">Riskyの初期値(0でRisky未使用)</param>\r
-               public void Init(int nRiskyTimes_InitialVal)\r
-               {\r
-                       nRiskyTimesInitial = nRiskyTimes_InitialVal;\r
-                       nRiskyTimes = nRiskyTimes_InitialVal;\r
-                       bRisky = (this.nRiskyTimes > 0);\r
-\r
-                       if (!bRisky)\r
-                       {\r
-                               this.db現在のゲージ値 = GAUGE_INITIAL;\r
-                       }\r
-                       else\r
-                       {\r
-                               this.db現在のゲージ値 = GAUGE_MAX;\r
-                       }\r
-               }\r
-\r
-               public void Damage(EPart part, EJudge e今回の判定)\r
-               {\r
-                       double fDamage;\r
-\r
-                       // DAMAGELEVELTUNING\r
-                       // before applying #23625 modifications\r
-                       switch (e今回の判定)\r
-                       {\r
-                               case EJudge.Perfect:\r
-                               case EJudge.Great:\r
-                               case EJudge.Good:\r
-                                       fDamage = bRisky ? 0 : fDamageGaugeDelta[(int)e今回の判定, (int)part];\r
-                                       break;\r
-                               case EJudge.Poor:\r
-                               case EJudge.Miss:\r
-                                       if (bRisky)\r
-                                       {\r
-                                               // Risky=1のときは1Miss即閉店なのでダメージ計算しない\r
-                                               fDamage = (nRiskyTimes == 1) ? 0 : -GAUGE_MAX / (nRiskyTimesInitial - 1);\r
-\r
-                                               if (nRiskyTimes >= 0)\r
-                                               {\r
-                                                       // 念のため-1未満には減らないようにしておく\r
-                                                       nRiskyTimes--;\r
-                                               }\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               fDamage = fDamageGaugeDelta[(int)e今回の判定, (int)part];\r
-                                       }\r
-                                       if (e今回の判定 == EJudge.Miss && !bRisky)\r
-                                       {\r
-                                               fDamage *= fDamageLevelFactor[(int)CDTXMania.Instance.ConfigIni.eDamageLevel.Value];\r
-                                       }\r
-                                       break;\r
-\r
-                               default:\r
-                                       fDamage = 0.0f;\r
-                                       break;\r
-                       }\r
-\r
-                       this.db現在のゲージ値 += fDamage;\r
-\r
-                       if (this.db現在のゲージ値 > GAUGE_MAX)\r
-                       {\r
-                               // RISKY時は決してゲージが増加しないので、上限チェックはしなくて良い\r
-                               this.db現在のゲージ値 = GAUGE_MAX;\r
-                       }\r
-               }\r
-\r
-               [StructLayout(LayoutKind.Sequential)]\r
-               private struct ST白い星\r
-               {\r
-                       public int x;\r
-                       public float fScale;\r
-                       public CCounter ct進行;\r
-               }\r
-       }\r
-}\r