sing notes converted
This commit is contained in:
1 parent
ded087967d
commit
bd8665a53e
9 files changed
+135
-560
No files matched your search
@@ -269,491 +269,4 @@ namespace Vocaluxe.Base
|
|||||||
return _Draw.TextureCount();
|
return _Draw.TextureCount();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
enum EParticeType
|
|
||||||
{
|
|
||||||
Twinkle,
|
|
||||||
Star,
|
|
||||||
Snow,
|
|
||||||
Flare,
|
|
||||||
PerfNoteStar
|
|
||||||
}
|
|
||||||
|
|
||||||
class CParticle
|
|
||||||
{
|
|
||||||
#region private vars
|
|
||||||
private string _TextureName;
|
|
||||||
private STexture _Texture;
|
|
||||||
private SRectF _Rect;
|
|
||||||
private float _Size;
|
|
||||||
private SColorF _Color;
|
|
||||||
private float _Alpha;
|
|
||||||
private float _Angle; //0..360°
|
|
||||||
private float _MaxAge; //[s]
|
|
||||||
private float _Age; //[s]
|
|
||||||
private float _Vx; //movement speed in x-axis [pix/s]
|
|
||||||
private float _Vy; //movement speed in y-axis [pix/s]
|
|
||||||
private float _Vr; //rotation speed [rpm]
|
|
||||||
private float _Rotation; //start rotation 0..360°
|
|
||||||
private float _Vsize; //size changing speed: period [s]
|
|
||||||
private float _LastTime;
|
|
||||||
private EParticeType _Type;
|
|
||||||
|
|
||||||
private Stopwatch _Timer;
|
|
||||||
#endregion private vars
|
|
||||||
|
|
||||||
#region public vars
|
|
||||||
//public bool Visible;
|
|
||||||
public float Alpha2 = 1f;
|
|
||||||
|
|
||||||
public float X
|
|
||||||
{
|
|
||||||
get { return _Rect.X; }
|
|
||||||
set { _Rect.X = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public float Y
|
|
||||||
{
|
|
||||||
get { return _Rect.Y; }
|
|
||||||
set { _Rect.Y = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public float Size
|
|
||||||
{
|
|
||||||
get { return _Size; }
|
|
||||||
set
|
|
||||||
{
|
|
||||||
_Rect.W = value;
|
|
||||||
_Rect.H = value;
|
|
||||||
_Size = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public float Alpha
|
|
||||||
{
|
|
||||||
get { return _Alpha; }
|
|
||||||
set { _Alpha = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public SColorF Color
|
|
||||||
{
|
|
||||||
get { return _Color; }
|
|
||||||
set { _Color = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool IsAlive
|
|
||||||
{
|
|
||||||
get { return (_Age < _MaxAge || _MaxAge == 0f); }
|
|
||||||
}
|
|
||||||
#endregion public vars
|
|
||||||
|
|
||||||
#region Constructors
|
|
||||||
public CParticle(string textureName, SColorF color, float x, float y, float size, float maxage, float z, float vx, float vy, float vr, float vsize, EParticeType type)
|
|
||||||
{
|
|
||||||
_TextureName = textureName;
|
|
||||||
_Texture = new STexture(-1);
|
|
||||||
_Color = color;
|
|
||||||
_Rect = new SRectF(x, y, size, size, z);
|
|
||||||
_Size = size;
|
|
||||||
_Alpha = 1f;
|
|
||||||
_Angle = 0f;
|
|
||||||
_Vx = vx;
|
|
||||||
_Vy = vy;
|
|
||||||
_Vr = vr;
|
|
||||||
_Vsize = vsize;
|
|
||||||
_LastTime = 0f;
|
|
||||||
_Type = type;
|
|
||||||
|
|
||||||
_Timer = new Stopwatch();
|
|
||||||
_Age = 0f;
|
|
||||||
_MaxAge = maxage;
|
|
||||||
_Rotation = (float)(CGame.Rand.NextDouble() * 360.0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public CParticle(STexture texture, SColorF color, float x, float y, float size, float maxage, float z, float vx, float vy, float vr, float vsize, EParticeType type)
|
|
||||||
{
|
|
||||||
_TextureName = String.Empty;
|
|
||||||
_Texture = texture;
|
|
||||||
_Color = color;
|
|
||||||
_Rect = new SRectF(x, y, size, size, z);
|
|
||||||
_Size = size;
|
|
||||||
_Alpha = 1f;
|
|
||||||
_Angle = 0f;
|
|
||||||
_Vx = vx;
|
|
||||||
_Vy = vy;
|
|
||||||
_Vr = vr;
|
|
||||||
_Vsize = vsize;
|
|
||||||
_LastTime = 0f;
|
|
||||||
_Type = type;
|
|
||||||
|
|
||||||
_Timer = new Stopwatch();
|
|
||||||
_Age = 0f;
|
|
||||||
_MaxAge = maxage;
|
|
||||||
_Rotation = (float)(CGame.Rand.NextDouble() * 360.0);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Constructors
|
|
||||||
|
|
||||||
public void Update()
|
|
||||||
{
|
|
||||||
if (!IsAlive)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!_Timer.IsRunning)
|
|
||||||
_Timer.Start();
|
|
||||||
|
|
||||||
float CurrentTime = _Timer.ElapsedMilliseconds / 1000f;
|
|
||||||
float timediff = CurrentTime - _LastTime;
|
|
||||||
|
|
||||||
_Age = CurrentTime;
|
|
||||||
|
|
||||||
// update alpha
|
|
||||||
if (_MaxAge > 0f)
|
|
||||||
{
|
|
||||||
switch (_Type)
|
|
||||||
{
|
|
||||||
case EParticeType.Twinkle:
|
|
||||||
_Alpha = 1f - _Age / _MaxAge;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EParticeType.Star:
|
|
||||||
_Alpha = 1f - _Age / _MaxAge;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EParticeType.Snow:
|
|
||||||
_Alpha = (float)Math.Sqrt((Math.Sin(_Age / _MaxAge * Math.PI * 2 - 0.5 * Math.PI) + 1) / 2);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EParticeType.Flare:
|
|
||||||
_Alpha = 1f - _Age / _MaxAge;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EParticeType.PerfNoteStar:
|
|
||||||
_Alpha = 1f - _Age / _MaxAge;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// update position
|
|
||||||
switch (_Type)
|
|
||||||
{
|
|
||||||
case EParticeType.Twinkle:
|
|
||||||
X += _Vx * timediff;
|
|
||||||
Y += _Vy * timediff;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EParticeType.Star:
|
|
||||||
X += _Vx * timediff;
|
|
||||||
Y += _Vy * timediff;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EParticeType.Snow:
|
|
||||||
int maxy = (int)Math.Round(CSettings.iRenderH - _Size * 0.4f);
|
|
||||||
|
|
||||||
if (Math.Round(Y) < maxy)
|
|
||||||
{
|
|
||||||
float vdx = 0f;
|
|
||||||
if (_Vx != 0)
|
|
||||||
vdx = (float)Math.Sin(CurrentTime / _Vx * Math.PI);
|
|
||||||
|
|
||||||
X += _Vx * timediff * (0.5f + vdx);
|
|
||||||
|
|
||||||
Y += _Vy * timediff * (vdx * vdx / 2f + 0.5f);
|
|
||||||
if (Y >= maxy)
|
|
||||||
Y = maxy;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EParticeType.Flare:
|
|
||||||
X += _Vx * timediff;
|
|
||||||
Y += _Vy * timediff;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EParticeType.PerfNoteStar:
|
|
||||||
X += _Vx * timediff;
|
|
||||||
Y += _Vy * timediff;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// update size
|
|
||||||
if (_Vsize != 0f)
|
|
||||||
{
|
|
||||||
float size = _Size;
|
|
||||||
switch (_Type)
|
|
||||||
{
|
|
||||||
case EParticeType.Twinkle:
|
|
||||||
size = _Size * (1f - CurrentTime / _Vsize);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EParticeType.Star:
|
|
||||||
size = _Size * (1f - CurrentTime / _Vsize);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EParticeType.Snow:
|
|
||||||
size = _Size * (float)Math.Sqrt((Math.Sin(CurrentTime / _Vsize * Math.PI * 2 - 0.5 * Math.PI) + 1) / 2);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EParticeType.Flare:
|
|
||||||
size = _Size * (1f - CurrentTime / _Vsize);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EParticeType.PerfNoteStar:
|
|
||||||
size = _Size * (1f - CurrentTime / _Vsize);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
_Rect.X += (_Rect.W - size) / 2f;
|
|
||||||
_Rect.Y += (_Rect.H - size) / 2f;
|
|
||||||
_Rect.W = size;
|
|
||||||
_Rect.H = size;
|
|
||||||
}
|
|
||||||
|
|
||||||
// update rotation
|
|
||||||
if (_Vr != 0f)
|
|
||||||
{
|
|
||||||
float r = CurrentTime * _Vr / 60f;
|
|
||||||
_Angle = _Rotation + 360f * (r - (float)Math.Floor(r));
|
|
||||||
_Rect.Rotation = _Angle;
|
|
||||||
}
|
|
||||||
|
|
||||||
_LastTime = CurrentTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Pause()
|
|
||||||
{
|
|
||||||
_Timer.Stop();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Resume()
|
|
||||||
{
|
|
||||||
_Timer.Start();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Draw()
|
|
||||||
{
|
|
||||||
if (_TextureName != String.Empty)
|
|
||||||
CDraw.DrawTexture(CTheme.GetSkinTexture(_TextureName), _Rect, new SColorF(_Color.R, _Color.G, _Color.B, _Color.A * Alpha2 * _Alpha));
|
|
||||||
else
|
|
||||||
CDraw.DrawTexture(_Texture, _Rect, new SColorF(_Color.R, _Color.G, _Color.B, _Color.A * Alpha2 * _Alpha));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class CParticleEffect
|
|
||||||
{
|
|
||||||
private List<CParticle> _Stars;
|
|
||||||
private string _TextureName;
|
|
||||||
private STexture _Texture;
|
|
||||||
private int _MaxNumber;
|
|
||||||
private SRectF _Area;
|
|
||||||
private SColorF _Color;
|
|
||||||
private float _Size;
|
|
||||||
private EParticeType _Type;
|
|
||||||
private Stopwatch _SpawnTimer;
|
|
||||||
private float _NextSpawnTime;
|
|
||||||
|
|
||||||
public float Alpha = 1f;
|
|
||||||
|
|
||||||
public bool IsAlive
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return (_Stars.Count > 0 || !_SpawnTimer.IsRunning);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public SRectF Area
|
|
||||||
{
|
|
||||||
get { return _Area; }
|
|
||||||
set { _Area = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public CParticleEffect(int MaxNumber, SColorF Color, SRectF Area, string TextureName, float Size, EParticeType Type)
|
|
||||||
{
|
|
||||||
_Stars = new List<CParticle>();
|
|
||||||
_Area = Area;
|
|
||||||
_Color = Color;
|
|
||||||
_TextureName = TextureName;
|
|
||||||
_Texture = new STexture(-1);
|
|
||||||
_MaxNumber = MaxNumber;
|
|
||||||
_Size = Size;
|
|
||||||
_Type = Type;
|
|
||||||
_SpawnTimer = new Stopwatch();
|
|
||||||
_NextSpawnTime = 0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
public CParticleEffect(int MaxNumber, SColorF Color, SRectF Area, STexture texture, float Size, EParticeType Type)
|
|
||||||
{
|
|
||||||
_Stars = new List<CParticle>();
|
|
||||||
_Area = Area;
|
|
||||||
_Color = Color;
|
|
||||||
_TextureName = String.Empty;
|
|
||||||
_Texture = texture;
|
|
||||||
_MaxNumber = MaxNumber;
|
|
||||||
_Size = Size;
|
|
||||||
_Type = Type;
|
|
||||||
_SpawnTimer = new Stopwatch();
|
|
||||||
_NextSpawnTime = 0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Update()
|
|
||||||
{
|
|
||||||
bool DoSpawn = false;
|
|
||||||
if (!_SpawnTimer.IsRunning)
|
|
||||||
{
|
|
||||||
_SpawnTimer.Start();
|
|
||||||
_NextSpawnTime = 0f;
|
|
||||||
DoSpawn = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_SpawnTimer.ElapsedMilliseconds / 1000f > _NextSpawnTime && _NextSpawnTime >= 0f)
|
|
||||||
{
|
|
||||||
DoSpawn = true;
|
|
||||||
_SpawnTimer.Reset();
|
|
||||||
_SpawnTimer.Start();
|
|
||||||
}
|
|
||||||
|
|
||||||
while (_Stars.Count < _MaxNumber && DoSpawn)
|
|
||||||
{
|
|
||||||
float size = CGame.Rand.Next((int)_Size / 2) + _Size / 2;
|
|
||||||
float lifetime = 0f;
|
|
||||||
float vx = 0f;
|
|
||||||
float vy = 0f;
|
|
||||||
float vr = 0f;
|
|
||||||
float vsize = 0f;
|
|
||||||
_NextSpawnTime = 0f;
|
|
||||||
|
|
||||||
switch (_Type)
|
|
||||||
{
|
|
||||||
case EParticeType.Twinkle:
|
|
||||||
size = CGame.Rand.Next((int)_Size / 2) + _Size / 2;
|
|
||||||
lifetime = CGame.Rand.Next(500) / 1000f + 0.5f;
|
|
||||||
vx = -CGame.Rand.Next(10000) / 50f + 100f;
|
|
||||||
vy = -CGame.Rand.Next(10000) / 50f + 100f;
|
|
||||||
vr = -CGame.Rand.Next(500) / 100f + 2.5f;
|
|
||||||
vsize = lifetime * 2f;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EParticeType.Star:
|
|
||||||
size = CGame.Rand.Next((int)_Size / 2) + _Size / 2;
|
|
||||||
lifetime = CGame.Rand.Next(1000) / 500f + 0.2f;
|
|
||||||
vx = -CGame.Rand.Next(1000) / 50f + 10f;
|
|
||||||
vy = -CGame.Rand.Next(1000) / 50f + 10f;
|
|
||||||
vr = -CGame.Rand.Next(500) / 100f + 2.5f;
|
|
||||||
vsize = lifetime * 2f;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EParticeType.Snow:
|
|
||||||
size = CGame.Rand.Next((int)_Size / 2) + _Size / 2;
|
|
||||||
lifetime = CGame.Rand.Next(5000) / 50f + 10f;
|
|
||||||
vx = -CGame.Rand.Next(1000) / 50f + 10f;
|
|
||||||
vy = CGame.Rand.Next(1000) / 50f + Math.Abs(vx) + 10f;
|
|
||||||
vr = -CGame.Rand.Next(200) / 50f + 2f;
|
|
||||||
vsize = lifetime * 2f;
|
|
||||||
|
|
||||||
_NextSpawnTime = lifetime / _MaxNumber;
|
|
||||||
DoSpawn = false;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EParticeType.Flare:
|
|
||||||
size = CGame.Rand.Next((int)_Size / 2) + _Size / 2;
|
|
||||||
lifetime = CGame.Rand.Next(500) / 1000f + 0.1f;
|
|
||||||
vx = -CGame.Rand.Next(2000) / 50f;
|
|
||||||
vy = -CGame.Rand.Next(2000) / 50f + 20f;
|
|
||||||
vr = -CGame.Rand.Next(2000) / 50f + 20f;
|
|
||||||
vsize = lifetime * 2f;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EParticeType.PerfNoteStar:
|
|
||||||
size = CGame.Rand.Next((int)_Size / 2) + _Size / 2;
|
|
||||||
lifetime = CGame.Rand.Next(1000) / 500f + 1.2f;
|
|
||||||
vx = 0f;
|
|
||||||
vy = 0f;
|
|
||||||
vr = CGame.Rand.Next(500) / 50f + 10f;
|
|
||||||
vsize = lifetime * 2f;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
int w = (int)(_Area.W - size / 4f);
|
|
||||||
int h = (int)(_Area.H - size / 4f);
|
|
||||||
|
|
||||||
if (w < 0)
|
|
||||||
w = 0;
|
|
||||||
|
|
||||||
if (h < 0)
|
|
||||||
h = 0;
|
|
||||||
|
|
||||||
CParticle star;
|
|
||||||
if (_TextureName != String.Empty)
|
|
||||||
{
|
|
||||||
star = new CParticle(_TextureName, _Color,
|
|
||||||
CGame.Rand.Next(w) + _Area.X - size / 4f,
|
|
||||||
CGame.Rand.Next(h) + _Area.Y - size / 4f,
|
|
||||||
size, lifetime, _Area.Z, vx, vy, vr, vsize, _Type);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
star = new CParticle(_Texture, _Color,
|
|
||||||
CGame.Rand.Next(w) + _Area.X - size / 4f,
|
|
||||||
CGame.Rand.Next(h) + _Area.Y - size / 4f,
|
|
||||||
size, lifetime, _Area.Z, vx, vy, vr, vsize, _Type);
|
|
||||||
}
|
|
||||||
|
|
||||||
_Stars.Add(star);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_Type == EParticeType.Flare || _Type == EParticeType.PerfNoteStar || _Type == EParticeType.Twinkle)
|
|
||||||
_NextSpawnTime = -1f;
|
|
||||||
|
|
||||||
int i = 0;
|
|
||||||
while (i < _Stars.Count)
|
|
||||||
{
|
|
||||||
_Stars[i].Update();
|
|
||||||
if (!_Stars[i].IsAlive)
|
|
||||||
{
|
|
||||||
_Stars.RemoveAt(i);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Pause()
|
|
||||||
{
|
|
||||||
foreach (CParticle star in _Stars)
|
|
||||||
{
|
|
||||||
star.Pause();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Resume()
|
|
||||||
{
|
|
||||||
foreach (CParticle star in _Stars)
|
|
||||||
{
|
|
||||||
star.Resume();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Draw()
|
|
||||||
{
|
|
||||||
foreach (CParticle star in _Stars)
|
|
||||||
{
|
|
||||||
star.Alpha2 = Alpha;
|
|
||||||
star.Draw();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
+50
-1
@@ -21,8 +21,9 @@ namespace Vocaluxe.Base
|
|||||||
public static ILanguage Language = new BLanguage();
|
public static ILanguage Language = new BLanguage();
|
||||||
public static IGame Game = new BGame();
|
public static IGame Game = new BGame();
|
||||||
public static IProfiles Profiles = new BProfiles();
|
public static IProfiles Profiles = new BProfiles();
|
||||||
|
public static IRecording Record = new BRecord();
|
||||||
|
|
||||||
public static Menu.Base Base = new Menu.Base(Config, Settings, Theme, Helper, Log, BackgroundMusic, Draw, Graphics, Fonts, Language, Game, Profiles);
|
public static Menu.Base Base = new Menu.Base(Config, Settings, Theme, Helper, Log, BackgroundMusic, Draw, Graphics, Fonts, Language, Game, Profiles, Record);
|
||||||
}
|
}
|
||||||
|
|
||||||
class BConfig : IConfig
|
class BConfig : IConfig
|
||||||
@@ -58,6 +59,16 @@ namespace Vocaluxe.Base
|
|||||||
{
|
{
|
||||||
return CConfig.VideoBackgrounds;
|
return CConfig.VideoBackgrounds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public EOffOn GetDrawNoteLines()
|
||||||
|
{
|
||||||
|
return CConfig.DrawNoteLines;
|
||||||
|
}
|
||||||
|
|
||||||
|
public EOffOn GetDrawToneHelper()
|
||||||
|
{
|
||||||
|
return CConfig.DrawToneHelper;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class BSettings : ISettings
|
class BSettings : ISettings
|
||||||
@@ -101,6 +112,16 @@ namespace Vocaluxe.Base
|
|||||||
{
|
{
|
||||||
return CSettings.ToneMax;
|
return CSettings.ToneMax;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int GetNumNoteLines()
|
||||||
|
{
|
||||||
|
return CSettings.NumNoteLines;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int GetMaxNumPlayer()
|
||||||
|
{
|
||||||
|
return CSettings.MaxNumPlayer;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class BTheme : ITheme
|
class BTheme : ITheme
|
||||||
@@ -342,6 +363,26 @@ namespace Vocaluxe.Base
|
|||||||
{
|
{
|
||||||
return CGame.Player;
|
return CGame.Player;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public float GetMidBeatD()
|
||||||
|
{
|
||||||
|
return CGame.MidBeatD;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int GetCurrentBeatD()
|
||||||
|
{
|
||||||
|
return CGame.ActBeatD;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int GetRandom(int Max)
|
||||||
|
{
|
||||||
|
return CGame.Rand.Next(Max);
|
||||||
|
}
|
||||||
|
|
||||||
|
public double GetRandomDouble()
|
||||||
|
{
|
||||||
|
return CGame.Rand.NextDouble();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class BProfiles : IProfiles
|
class BProfiles : IProfiles
|
||||||
@@ -351,4 +392,12 @@ namespace Vocaluxe.Base
|
|||||||
return CProfiles.Profiles;
|
return CProfiles.Profiles;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class BRecord : IRecording
|
||||||
|
{
|
||||||
|
public int GetToneAbs(int PlayerNr)
|
||||||
|
{
|
||||||
|
return CSound.RecordGetToneAbs(PlayerNr);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -710,6 +710,11 @@ namespace Vocaluxe.Menu
|
|||||||
{
|
{
|
||||||
return new CPlaylist(_Base);
|
return new CPlaylist(_Base);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public CParticleEffect GetNewParticleEffect(int MaxNumber, SColorF Color, SRectF Area, STexture Texture, float Size, EParticeType Type)
|
||||||
|
{
|
||||||
|
return new CParticleEffect(_Base, MaxNumber, Color, Area, Texture, Size, Type);
|
||||||
|
}
|
||||||
#endregion Create Elements
|
#endregion Create Elements
|
||||||
|
|
||||||
#region Get Arrays
|
#region Get Arrays
|
||||||
@@ -2331,9 +2336,10 @@ namespace Vocaluxe.Menu
|
|||||||
public ILanguage Language;
|
public ILanguage Language;
|
||||||
public IGame Game;
|
public IGame Game;
|
||||||
public IProfiles Profiles;
|
public IProfiles Profiles;
|
||||||
|
public IRecording Record;
|
||||||
|
|
||||||
public Base(IConfig Config, ISettings Settings, ITheme Theme, IHelper Helper, ILog Log, IBackgroundMusic BackgroundMusic,
|
public Base(IConfig Config, ISettings Settings, ITheme Theme, IHelper Helper, ILog Log, IBackgroundMusic BackgroundMusic,
|
||||||
IDrawing Draw, IGraphics Graphics, IFonts Fonts, ILanguage Language, IGame Game, IProfiles Profiles)
|
IDrawing Draw, IGraphics Graphics, IFonts Fonts, ILanguage Language, IGame Game, IProfiles Profiles, IRecording Record)
|
||||||
{
|
{
|
||||||
this.Config = Config;
|
this.Config = Config;
|
||||||
this.Settings = Settings;
|
this.Settings = Settings;
|
||||||
@@ -2347,6 +2353,7 @@ namespace Vocaluxe.Menu
|
|||||||
this.Language = Language;
|
this.Language = Language;
|
||||||
this.Game = Game;
|
this.Game = Game;
|
||||||
this.Profiles = Profiles;
|
this.Profiles = Profiles;
|
||||||
|
this.Record = Record;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -51,6 +51,9 @@ namespace Vocaluxe.Menu
|
|||||||
EOffOn GetVideoBackgrounds();
|
EOffOn GetVideoBackgrounds();
|
||||||
|
|
||||||
ESongMenu GetSongMenuType();
|
ESongMenu GetSongMenuType();
|
||||||
|
|
||||||
|
EOffOn GetDrawNoteLines();
|
||||||
|
EOffOn GetDrawToneHelper();
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface ISettings
|
public interface ISettings
|
||||||
@@ -66,6 +69,9 @@ namespace Vocaluxe.Menu
|
|||||||
|
|
||||||
int GetToneMin();
|
int GetToneMin();
|
||||||
int GetToneMax();
|
int GetToneMax();
|
||||||
|
|
||||||
|
int GetNumNoteLines();
|
||||||
|
int GetMaxNumPlayer();
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface ITheme
|
public interface ITheme
|
||||||
@@ -154,6 +160,16 @@ namespace Vocaluxe.Menu
|
|||||||
{
|
{
|
||||||
int GetNumPlayer();
|
int GetNumPlayer();
|
||||||
SPlayer[] GetPlayer();
|
SPlayer[] GetPlayer();
|
||||||
|
float GetMidBeatD();
|
||||||
|
int GetCurrentBeatD();
|
||||||
|
|
||||||
|
int GetRandom(int Max);
|
||||||
|
double GetRandomDouble();
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface IRecording
|
||||||
|
{
|
||||||
|
int GetToneAbs(int PlayerNr);
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface IProfiles
|
public interface IProfiles
|
||||||
|
|||||||
@@ -5,10 +5,6 @@ using System.Text;
|
|||||||
using System.Xml;
|
using System.Xml;
|
||||||
using System.Xml.XPath;
|
using System.Xml.XPath;
|
||||||
|
|
||||||
using Vocaluxe.Base;
|
|
||||||
using Vocaluxe.Lib.Draw;
|
|
||||||
using Vocaluxe.Lib.Song;
|
|
||||||
|
|
||||||
namespace Vocaluxe.Menu.SingNotes
|
namespace Vocaluxe.Menu.SingNotes
|
||||||
{
|
{
|
||||||
struct SPlayerNotes
|
struct SPlayerNotes
|
||||||
@@ -99,10 +95,10 @@ namespace Vocaluxe.Menu.SingNotes
|
|||||||
_ThemeLoaded &= CHelper.GetValueFromXML(item + "/SkinToneHelper", navigator, ref _Theme.SkinToneHelperName, String.Empty);
|
_ThemeLoaded &= CHelper.GetValueFromXML(item + "/SkinToneHelper", navigator, ref _Theme.SkinToneHelperName, String.Empty);
|
||||||
_ThemeLoaded &= CHelper.GetValueFromXML(item + "/SkinPerfectNoteStar", navigator, ref _Theme.SkinPerfectNoteStarName, String.Empty);
|
_ThemeLoaded &= CHelper.GetValueFromXML(item + "/SkinPerfectNoteStar", navigator, ref _Theme.SkinPerfectNoteStarName, String.Empty);
|
||||||
|
|
||||||
_BarPos = new SRectF[CSettings.MaxNumPlayer, CSettings.MaxNumPlayer];
|
_BarPos = new SRectF[_Base.Settings.GetMaxNumPlayer(), _Base.Settings.GetMaxNumPlayer()];
|
||||||
for (int numplayer = 0; numplayer < CSettings.MaxNumPlayer; numplayer++)
|
for (int numplayer = 0; numplayer < _Base.Settings.GetMaxNumPlayer(); numplayer++)
|
||||||
{
|
{
|
||||||
for (int player = 0; player < CSettings.MaxNumPlayer; player++)
|
for (int player = 0; player < _Base.Settings.GetMaxNumPlayer(); player++)
|
||||||
{
|
{
|
||||||
if (player <= numplayer)
|
if (player <= numplayer)
|
||||||
{
|
{
|
||||||
@@ -163,9 +159,9 @@ namespace Vocaluxe.Menu.SingNotes
|
|||||||
writer.WriteComment(" <P$N$X>, <P$N$Y>, <P$N$Z>, <P$N$W>, <P$N$H>");
|
writer.WriteComment(" <P$N$X>, <P$N$Y>, <P$N$Z>, <P$N$W>, <P$N$H>");
|
||||||
writer.WriteComment(" position, width and height of note bars: first index = player number; second index = num players seen on screen");
|
writer.WriteComment(" position, width and height of note bars: first index = player number; second index = num players seen on screen");
|
||||||
writer.WriteStartElement("BarPositions");
|
writer.WriteStartElement("BarPositions");
|
||||||
for (int numplayer = 0; numplayer < CSettings.MaxNumPlayer; numplayer++)
|
for (int numplayer = 0; numplayer < _Base.Settings.GetMaxNumPlayer(); numplayer++)
|
||||||
{
|
{
|
||||||
for (int player = 0; player < CSettings.MaxNumPlayer; player++)
|
for (int player = 0; player < _Base.Settings.GetMaxNumPlayer(); player++)
|
||||||
{
|
{
|
||||||
if (player <= numplayer)
|
if (player <= numplayer)
|
||||||
{
|
{
|
||||||
@@ -299,7 +295,7 @@ namespace Vocaluxe.Menu.SingNotes
|
|||||||
|
|
||||||
CLine Line = _PlayerNotes[n].Lines[_PlayerNotes[n].LineNr];
|
CLine Line = _PlayerNotes[n].Lines[_PlayerNotes[n].LineNr];
|
||||||
|
|
||||||
if (CConfig.DrawNoteLines == EOffOn.TR_CONFIG_ON)
|
if (_Base.Config.GetDrawNoteLines() == EOffOn.TR_CONFIG_ON)
|
||||||
{
|
{
|
||||||
DrawNoteLines(_PlayerNotes[n].Rect, new SColorF(0.5f, 0.5f, 0.5f, 0.5f * _PlayerNotes[n].Alpha));
|
DrawNoteLines(_PlayerNotes[n].Rect, new SColorF(0.5f, 0.5f, 0.5f, 0.5f * _PlayerNotes[n].Alpha));
|
||||||
}
|
}
|
||||||
@@ -309,7 +305,7 @@ namespace Vocaluxe.Menu.SingNotes
|
|||||||
|
|
||||||
float w = _PlayerNotes[n].Rect.W;
|
float w = _PlayerNotes[n].Rect.W;
|
||||||
float h = _PlayerNotes[n].Rect.H;
|
float h = _PlayerNotes[n].Rect.H;
|
||||||
float dh = h / CSettings.NumNoteLines * (2f - (int)CGame.Player[_PlayerNotes[n].PlayerNr].Difficulty) / 4f;
|
float dh = h / _Base.Settings.GetNumNoteLines() * (2f - (int)_Base.Game.GetPlayer()[_PlayerNotes[n].PlayerNr].Difficulty) / 4f;
|
||||||
|
|
||||||
float beats = Line.LastNoteBeat - Line.FirstNoteBeat + 1;
|
float beats = Line.LastNoteBeat - Line.FirstNoteBeat + 1;
|
||||||
|
|
||||||
@@ -332,9 +328,9 @@ namespace Vocaluxe.Menu.SingNotes
|
|||||||
|
|
||||||
SRectF rect = new SRectF(
|
SRectF rect = new SRectF(
|
||||||
_PlayerNotes[n].Rect.X + (note.StartBeat - Line.FirstNoteBeat) / beats * w,
|
_PlayerNotes[n].Rect.X + (note.StartBeat - Line.FirstNoteBeat) / beats * w,
|
||||||
_PlayerNotes[n].Rect.Y + (CSettings.NumNoteLines - 1 - (note.Tone - BaseLine)/2) / CSettings.NumNoteLines * h - dh,
|
_PlayerNotes[n].Rect.Y + (_Base.Settings.GetNumNoteLines() - 1 - (note.Tone - BaseLine)/2) / _Base.Settings.GetNumNoteLines() * h - dh,
|
||||||
width,
|
width,
|
||||||
h / CSettings.NumNoteLines + 2 * dh,
|
h / _Base.Settings.GetNumNoteLines() + 2 * dh,
|
||||||
_PlayerNotes[n].Rect.Z
|
_PlayerNotes[n].Rect.Z
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -349,9 +345,9 @@ namespace Vocaluxe.Menu.SingNotes
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CConfig.DrawToneHelper == EOffOn.TR_CONFIG_ON)
|
if (_Base.Config.GetDrawToneHelper() == EOffOn.TR_CONFIG_ON)
|
||||||
{
|
{
|
||||||
DrawToneHelper(n, (int)BaseLine, (CGame.MidBeatD - Line.FirstNoteBeat) / beats * w);
|
DrawToneHelper(n, (int)BaseLine, (_Base.Game.GetMidBeatD() - Line.FirstNoteBeat) / beats * w);
|
||||||
}
|
}
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
@@ -371,7 +367,7 @@ namespace Vocaluxe.Menu.SingNotes
|
|||||||
perfline.Draw();
|
perfline.Draw();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SingLine == null || SingLine.Count == 0 || CGame.Player[Player].CurrentLine == -1 || SingLine.Count <= CGame.Player[Player].CurrentLine)
|
if (SingLine == null || SingLine.Count == 0 || _Base.Game.GetPlayer()[Player].CurrentLine == -1 || SingLine.Count <= _Base.Game.GetPlayer()[Player].CurrentLine)
|
||||||
{
|
{
|
||||||
foreach (CParticleEffect stars in _PlayerNotes[n].GoldenStars)
|
foreach (CParticleEffect stars in _PlayerNotes[n].GoldenStars)
|
||||||
{
|
{
|
||||||
@@ -382,20 +378,20 @@ namespace Vocaluxe.Menu.SingNotes
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (CNote note in SingLine[CGame.Player[Player].CurrentLine].Notes)
|
foreach (CNote note in SingLine[_Base.Game.GetPlayer()[Player].CurrentLine].Notes)
|
||||||
{
|
{
|
||||||
if (note.StartBeat >= Line.FirstNoteBeat && note.EndBeat <= Line.LastNoteBeat)
|
if (note.StartBeat >= Line.FirstNoteBeat && note.EndBeat <= Line.LastNoteBeat)
|
||||||
{
|
{
|
||||||
float width = note.Duration / beats * w;
|
float width = note.Duration / beats * w;
|
||||||
|
|
||||||
if (note.EndBeat == CGame.ActBeatD)
|
if (note.EndBeat == _Base.Game.GetCurrentBeatD())
|
||||||
width -= (1 - (CGame.MidBeatD - CGame.ActBeatD)) / beats * w;
|
width -= (1 - (_Base.Game.GetMidBeatD() - _Base.Game.GetCurrentBeatD())) / beats * w;
|
||||||
|
|
||||||
SRectF rect = new SRectF(
|
SRectF rect = new SRectF(
|
||||||
_PlayerNotes[n].Rect.X + (note.StartBeat - Line.FirstNoteBeat) / beats * w,
|
_PlayerNotes[n].Rect.X + (note.StartBeat - Line.FirstNoteBeat) / beats * w,
|
||||||
_PlayerNotes[n].Rect.Y + (CSettings.NumNoteLines - 1 - (note.Tone - BaseLine)/2) / CSettings.NumNoteLines * h - dh,
|
_PlayerNotes[n].Rect.Y + (_Base.Settings.GetNumNoteLines() - 1 - (note.Tone - BaseLine)/2) / _Base.Settings.GetNumNoteLines() * h - dh,
|
||||||
width,
|
width,
|
||||||
h / CSettings.NumNoteLines + 2 * dh,
|
h / _Base.Settings.GetNumNoteLines() + 2 * dh,
|
||||||
_PlayerNotes[n].Rect.Z
|
_PlayerNotes[n].Rect.Z
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -405,14 +401,14 @@ namespace Vocaluxe.Menu.SingNotes
|
|||||||
|
|
||||||
DrawNote(rect, color, f);
|
DrawNote(rect, color, f);
|
||||||
|
|
||||||
if (note.EndBeat >= CGame.ActBeatD && note.Hit && note.NoteType == ENoteType.Golden)
|
if (note.EndBeat >= _Base.Game.GetCurrentBeatD() && note.Hit && note.NoteType == ENoteType.Golden)
|
||||||
{
|
{
|
||||||
SRectF re = new SRectF(rect);
|
SRectF re = new SRectF(rect);
|
||||||
re.W = (CGame.MidBeatD - note.StartBeat) / beats * w;
|
re.W = (_Base.Game.GetMidBeatD() - note.StartBeat) / beats * w;
|
||||||
AddFlare(re, n);
|
AddFlare(re, n);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (note.Perfect && note.EndBeat < CGame.ActBeatD)
|
if (note.Perfect && note.EndBeat < _Base.Game.GetCurrentBeatD())
|
||||||
{
|
{
|
||||||
AddPerfectNote(rect, n);
|
AddPerfectNote(rect, n);
|
||||||
note.Perfect = false;
|
note.Perfect = false;
|
||||||
@@ -420,13 +416,13 @@ namespace Vocaluxe.Menu.SingNotes
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int currentLine = CGame.Player[Player].SingLine.Count - 1;
|
int currentLine = _Base.Game.GetPlayer()[Player].SingLine.Count - 1;
|
||||||
if (currentLine > 0)
|
if (currentLine > 0)
|
||||||
{
|
{
|
||||||
if (CGame.Player[Player].SingLine[currentLine - 1].PerfectLine)
|
if (_Base.Game.GetPlayer()[Player].SingLine[currentLine - 1].PerfectLine)
|
||||||
{
|
{
|
||||||
AddPerfectLine(n);
|
AddPerfectLine(n);
|
||||||
CGame.Player[Player].SingLine[currentLine - 1].PerfectLine = false;
|
_Base.Game.GetPlayer()[Player].SingLine[currentLine - 1].PerfectLine = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -530,18 +526,18 @@ namespace Vocaluxe.Menu.SingNotes
|
|||||||
Rect.Z
|
Rect.Z
|
||||||
);
|
);
|
||||||
|
|
||||||
STexture NoteBegin = CTheme.GetSkinTexture(_Theme.SkinLeftName);
|
STexture NoteBegin = _Base.Theme.GetSkinTexture(_Theme.SkinLeftName);
|
||||||
STexture NoteMiddle = CTheme.GetSkinTexture(_Theme.SkinMiddleName);
|
STexture NoteMiddle = _Base.Theme.GetSkinTexture(_Theme.SkinMiddleName);
|
||||||
STexture NoteEnd = CTheme.GetSkinTexture(_Theme.SkinRightName);
|
STexture NoteEnd = _Base.Theme.GetSkinTexture(_Theme.SkinRightName);
|
||||||
|
|
||||||
float dx = NoteBegin.width * r.H / NoteBegin.height;
|
float dx = NoteBegin.width * r.H / NoteBegin.height;
|
||||||
if (2 * dx > r.W)
|
if (2 * dx > r.W)
|
||||||
dx = r.W / 2;
|
dx = r.W / 2;
|
||||||
|
|
||||||
|
|
||||||
CDraw.DrawTexture(NoteBegin, new SRectF(r.X, r.Y, dx, r.H, r.Z), Color);
|
_Base.Drawing.DrawTexture(NoteBegin, new SRectF(r.X, r.Y, dx, r.H, r.Z), Color);
|
||||||
CDraw.DrawTexture(NoteMiddle, new SRectF(r.X + dx, r.Y, r.W - 2 * dx, r.H, r.Z), Color);
|
_Base.Drawing.DrawTexture(NoteMiddle, new SRectF(r.X + dx, r.Y, r.W - 2 * dx, r.H, r.Z), Color);
|
||||||
CDraw.DrawTexture(NoteEnd, new SRectF(r.X + r.W - dx, r.Y, dx, r.H, r.Z), Color);
|
_Base.Drawing.DrawTexture(NoteEnd, new SRectF(r.X + r.W - dx, r.Y, dx, r.H, r.Z), Color);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DrawNoteBG(SRectF Rect, SColorF Color, float factor, Stopwatch Timer)
|
private void DrawNoteBG(SRectF Rect, SColorF Color, float factor, Stopwatch Timer)
|
||||||
@@ -572,9 +568,9 @@ namespace Vocaluxe.Menu.SingNotes
|
|||||||
Rect.Z
|
Rect.Z
|
||||||
);
|
);
|
||||||
|
|
||||||
STexture NoteBackgroundBegin = CTheme.GetSkinTexture(_Theme.SkinBackgroundLeftName);
|
STexture NoteBackgroundBegin = _Base.Theme.GetSkinTexture(_Theme.SkinBackgroundLeftName);
|
||||||
STexture NoteBackgroundMiddle = CTheme.GetSkinTexture(_Theme.SkinBackgroundMiddleName);
|
STexture NoteBackgroundMiddle = _Base.Theme.GetSkinTexture(_Theme.SkinBackgroundMiddleName);
|
||||||
STexture NoteBackgroundEnd = CTheme.GetSkinTexture(_Theme.SkinBackgroundRightName);
|
STexture NoteBackgroundEnd = _Base.Theme.GetSkinTexture(_Theme.SkinBackgroundRightName);
|
||||||
|
|
||||||
float dx = NoteBackgroundBegin.width * r.H / NoteBackgroundBegin.height;
|
float dx = NoteBackgroundBegin.width * r.H / NoteBackgroundBegin.height;
|
||||||
if (2 * dx > r.W)
|
if (2 * dx > r.W)
|
||||||
@@ -582,17 +578,17 @@ namespace Vocaluxe.Menu.SingNotes
|
|||||||
|
|
||||||
SColorF col = new SColorF(Color.R, Color.G, Color.B, Color.A * alpha);
|
SColorF col = new SColorF(Color.R, Color.G, Color.B, Color.A * alpha);
|
||||||
|
|
||||||
CDraw.DrawTexture(NoteBackgroundBegin, new SRectF(r.X, r.Y, dx, r.H, r.Z), col);
|
_Base.Drawing.DrawTexture(NoteBackgroundBegin, new SRectF(r.X, r.Y, dx, r.H, r.Z), col);
|
||||||
CDraw.DrawTexture(NoteBackgroundMiddle, new SRectF(r.X + dx, r.Y, r.W - 2 * dx, r.H, r.Z), col);
|
_Base.Drawing.DrawTexture(NoteBackgroundMiddle, new SRectF(r.X + dx, r.Y, r.W - 2 * dx, r.H, r.Z), col);
|
||||||
CDraw.DrawTexture(NoteBackgroundEnd, new SRectF(r.X + r.W - dx, r.Y, dx, r.H, r.Z), col);
|
_Base.Drawing.DrawTexture(NoteBackgroundEnd, new SRectF(r.X + r.W - dx, r.Y, dx, r.H, r.Z), col);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void DrawNoteLines(SRectF Rect, SColorF Color)
|
protected void DrawNoteLines(SRectF Rect, SColorF Color)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < CSettings.NumNoteLines - 1; i++)
|
for (int i = 0; i < _Base.Settings.GetNumNoteLines() - 1; i++)
|
||||||
{
|
{
|
||||||
float y = Rect.Y + Rect.H / CSettings.NumNoteLines * (i + 1);
|
float y = Rect.Y + Rect.H / _Base.Settings.GetNumNoteLines() * (i + 1);
|
||||||
CDraw.DrawColor(Color, new SRectF(Rect.X, y, Rect.W, 1, -1.0f));
|
_Base.Drawing.DrawColor(Color, new SRectF(Rect.X, y, Rect.W, 1, -1.0f));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -622,7 +618,7 @@ namespace Vocaluxe.Menu.SingNotes
|
|||||||
);
|
);
|
||||||
|
|
||||||
int numstars = (int)(r.W * 0.25f);
|
int numstars = (int)(r.W * 0.25f);
|
||||||
CParticleEffect stars = new CParticleEffect(numstars, new SColorF(1f, 1f, 0f, 1f), r, _Theme.SkinGoldenStarName, 20, EParticeType.Star);
|
CParticleEffect stars = new CParticleEffect(_Base, numstars, new SColorF(1f, 1f, 0f, 1f), r, _Theme.SkinGoldenStarName, 20, EParticeType.Star);
|
||||||
_PlayerNotes[n].GoldenStars.Add(stars);
|
_PlayerNotes[n].GoldenStars.Add(stars);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -650,7 +646,7 @@ namespace Vocaluxe.Menu.SingNotes
|
|||||||
Rect.Z
|
Rect.Z
|
||||||
);
|
);
|
||||||
|
|
||||||
CParticleEffect flares = new CParticleEffect(15, new SColorF(1f, 1f, 1f, 1f), r, _Theme.SkinGoldenStarName, 20, EParticeType.Flare);
|
CParticleEffect flares = new CParticleEffect(_Base, 15, new SColorF(1f, 1f, 1f, 1f), r, _Theme.SkinGoldenStarName, 20, EParticeType.Flare);
|
||||||
_PlayerNotes[n].Flares.Add(flares);
|
_PlayerNotes[n].Flares.Add(flares);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -677,7 +673,7 @@ namespace Vocaluxe.Menu.SingNotes
|
|||||||
Rect.Z
|
Rect.Z
|
||||||
);
|
);
|
||||||
|
|
||||||
STexture NoteBegin = CTheme.GetSkinTexture(_Theme.SkinLeftName);
|
STexture NoteBegin = _Base.Theme.GetSkinTexture(_Theme.SkinLeftName);
|
||||||
float dx = NoteBegin.width * r.H / NoteBegin.height;
|
float dx = NoteBegin.width * r.H / NoteBegin.height;
|
||||||
if (2 * dx > r.W)
|
if (2 * dx > r.W)
|
||||||
dx = r.W / 2;
|
dx = r.W / 2;
|
||||||
@@ -690,19 +686,19 @@ namespace Vocaluxe.Menu.SingNotes
|
|||||||
Rect.Z
|
Rect.Z
|
||||||
);
|
);
|
||||||
|
|
||||||
CParticleEffect stars = new CParticleEffect(CGame.Rand.Next(2) + 1, new SColorF(1f, 1f, 1f, 1f), r, _Theme.SkinPerfectNoteStarName, 35, EParticeType.PerfNoteStar);
|
CParticleEffect stars = new CParticleEffect(_Base, _Base.Game.GetRandom(2) + 1, new SColorF(1f, 1f, 1f, 1f), r, _Theme.SkinPerfectNoteStarName, 35, EParticeType.PerfNoteStar);
|
||||||
_PlayerNotes[n].PerfectNoteEffect.Add(stars);
|
_PlayerNotes[n].PerfectNoteEffect.Add(stars);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void AddPerfectLine(int n)
|
private void AddPerfectLine(int n)
|
||||||
{
|
{
|
||||||
CParticleEffect twinkle = new CParticleEffect(200, _PlayerNotes[n].Color, _PlayerNotes[n].Rect, _Theme.SkinGoldenStarName, 25, EParticeType.Twinkle);
|
CParticleEffect twinkle = new CParticleEffect(_Base, 200, _PlayerNotes[n].Color, _PlayerNotes[n].Rect, _Theme.SkinGoldenStarName, 25, EParticeType.Twinkle);
|
||||||
_PlayerNotes[n].PerfectLineTwinkle.Add(twinkle);
|
_PlayerNotes[n].PerfectLineTwinkle.Add(twinkle);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DrawToneHelper(int n, int BaseLine, float XOffset)
|
private void DrawToneHelper(int n, int BaseLine, float XOffset)
|
||||||
{
|
{
|
||||||
int TonePlayer = CSound.RecordGetToneAbs(_PlayerNotes[n].PlayerNr);
|
int TonePlayer = _Base.Record.GetToneAbs(_PlayerNotes[n].PlayerNr);
|
||||||
|
|
||||||
SRectF Rect = _PlayerNotes[n].Rect;
|
SRectF Rect = _PlayerNotes[n].Rect;
|
||||||
|
|
||||||
@@ -718,10 +714,10 @@ namespace Vocaluxe.Menu.SingNotes
|
|||||||
if (XOffset > Rect.W)
|
if (XOffset > Rect.W)
|
||||||
XOffset = Rect.W;
|
XOffset = Rect.W;
|
||||||
|
|
||||||
float dy = Rect.H / (CSettings.NumNoteLines);
|
float dy = Rect.H / (_Base.Settings.GetNumNoteLines());
|
||||||
SRectF rect = new SRectF(
|
SRectF rect = new SRectF(
|
||||||
Rect.X - dy + XOffset,
|
Rect.X - dy + XOffset,
|
||||||
Rect.Y + dy * (CSettings.NumNoteLines - 1 - (TonePlayer - BaseLine) / 2f),
|
Rect.Y + dy * (_Base.Settings.GetNumNoteLines() - 1 - (TonePlayer - BaseLine) / 2f),
|
||||||
dy,
|
dy,
|
||||||
dy,
|
dy,
|
||||||
Rect.Z
|
Rect.Z
|
||||||
@@ -733,8 +729,8 @@ namespace Vocaluxe.Menu.SingNotes
|
|||||||
_PlayerNotes[n].Color.B,
|
_PlayerNotes[n].Color.B,
|
||||||
_PlayerNotes[n].Color.A * _PlayerNotes[n].Alpha);
|
_PlayerNotes[n].Color.A * _PlayerNotes[n].Alpha);
|
||||||
|
|
||||||
STexture ToneHelper = CTheme.GetSkinTexture(_Theme.SkinToneHelperName);
|
STexture ToneHelper = _Base.Theme.GetSkinTexture(_Theme.SkinToneHelperName);
|
||||||
CDraw.DrawTexture(ToneHelper, rect, color);
|
_Base.Drawing.DrawTexture(ToneHelper, rect, color);
|
||||||
|
|
||||||
|
|
||||||
while (TonePlayer - BaseLine < 12)
|
while (TonePlayer - BaseLine < 12)
|
||||||
@@ -745,13 +741,13 @@ namespace Vocaluxe.Menu.SingNotes
|
|||||||
|
|
||||||
rect = new SRectF(
|
rect = new SRectF(
|
||||||
Rect.X - dy + XOffset,
|
Rect.X - dy + XOffset,
|
||||||
Rect.Y + dy * (CSettings.NumNoteLines - 1 - (TonePlayer - BaseLine) / 2f),
|
Rect.Y + dy * (_Base.Settings.GetNumNoteLines() - 1 - (TonePlayer - BaseLine) / 2f),
|
||||||
dy,
|
dy,
|
||||||
dy,
|
dy,
|
||||||
Rect.Z
|
Rect.Z
|
||||||
);
|
);
|
||||||
|
|
||||||
CDraw.DrawTexture(ToneHelper, rect, color);
|
_Base.Drawing.DrawTexture(ToneHelper, rect, color);
|
||||||
}
|
}
|
||||||
|
|
||||||
#region ThemeEdit
|
#region ThemeEdit
|
||||||
|
|||||||
@@ -2,9 +2,6 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
using Vocaluxe.Lib.Draw;
|
|
||||||
using Vocaluxe.Lib.Song;
|
|
||||||
|
|
||||||
namespace Vocaluxe.Menu.SingNotes
|
namespace Vocaluxe.Menu.SingNotes
|
||||||
{
|
{
|
||||||
interface ISingNotes
|
interface ISingNotes
|
||||||
|
|||||||
@@ -4,10 +4,6 @@ using System.Drawing;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
|
||||||
using Vocaluxe.Base;
|
|
||||||
using Vocaluxe.Lib.Draw;
|
|
||||||
using Vocaluxe.Lib.Song;
|
|
||||||
|
|
||||||
namespace Vocaluxe.Menu.SongMenu
|
namespace Vocaluxe.Menu.SongMenu
|
||||||
{
|
{
|
||||||
class CSongMenuDreidel : CSongMenuFramework
|
class CSongMenuDreidel : CSongMenuFramework
|
||||||
|
|||||||
@@ -243,8 +243,8 @@ namespace Vocaluxe.Screens
|
|||||||
|
|
||||||
//Little stars for logo
|
//Little stars for logo
|
||||||
int numstars = (int)(logo.Rect.W * 0.25f / 2f);
|
int numstars = (int)(logo.Rect.W * 0.25f / 2f);
|
||||||
starsRed = new CParticleEffect(numstars, new SColorF(1, 0, 0, 1), new SRectF(logo.Rect.X, logo.Rect.Y, logo.Rect.W, logo.Rect.H, -1), _TexPerfectNoteStar, 35, EParticeType.Star);
|
starsRed = GetNewParticleEffect(numstars, new SColorF(1, 0, 0, 1), new SRectF(logo.Rect.X, logo.Rect.Y, logo.Rect.W, logo.Rect.H, -1), _TexPerfectNoteStar, 35, EParticeType.Star);
|
||||||
starsBlue = new CParticleEffect(numstars, new SColorF(0.149f, 0.415f, 0.819f, 1), new SRectF(logo.Rect.X, logo.Rect.Y, logo.Rect.W, logo.Rect.H, -1), _TexPerfectNoteStar, 35, EParticeType.Star);
|
starsBlue = GetNewParticleEffect(numstars, new SColorF(0.149f, 0.415f, 0.819f, 1), new SRectF(logo.Rect.X, logo.Rect.Y, logo.Rect.W, logo.Rect.H, -1), _TexPerfectNoteStar, 35, EParticeType.Star);
|
||||||
|
|
||||||
//Credit names
|
//Credit names
|
||||||
_CreditNames = new List<CCreditName>();
|
_CreditNames = new List<CCreditName>();
|
||||||
@@ -254,7 +254,7 @@ namespace Vocaluxe.Screens
|
|||||||
CCreditName CreditEntryBrunzel = new CCreditName();
|
CCreditName CreditEntryBrunzel = new CCreditName();
|
||||||
CreditEntryBrunzel.image = GetNewStatic(_TexNameBrunzel, new SColorF(1, 1, 1, 1), new SRectF(-450, 580, 400, 120, -4));
|
CreditEntryBrunzel.image = GetNewStatic(_TexNameBrunzel, new SColorF(1, 1, 1, 1), new SRectF(-450, 580, 400, 120, -4));
|
||||||
CreditEntryBrunzel.particleRect = new SRectF(CreditEntryBrunzel.image.Rect.X + 342, CreditEntryBrunzel.image.Rect.Y + 4, 30, 30, -5);
|
CreditEntryBrunzel.particleRect = new SRectF(CreditEntryBrunzel.image.Rect.X + 342, CreditEntryBrunzel.image.Rect.Y + 4, 30, 30, -5);
|
||||||
CreditEntryBrunzel.particle = new CParticleEffect(8, new SColorF(1, 0, 0, 1), CreditEntryBrunzel.particleRect, _TexPerfectNoteStar, 35, EParticeType.Star);
|
CreditEntryBrunzel.particle = GetNewParticleEffect(8, new SColorF(1, 0, 0, 1), CreditEntryBrunzel.particleRect, _TexPerfectNoteStar, 35, EParticeType.Star);
|
||||||
CreditEntryBrunzel.active = true;
|
CreditEntryBrunzel.active = true;
|
||||||
CreditEntryBrunzel.direction = EDirection.Left;
|
CreditEntryBrunzel.direction = EDirection.Left;
|
||||||
_CreditNames.Add(CreditEntryBrunzel);
|
_CreditNames.Add(CreditEntryBrunzel);
|
||||||
@@ -263,7 +263,7 @@ namespace Vocaluxe.Screens
|
|||||||
CCreditName CreditEntryDarkice = new CCreditName();
|
CCreditName CreditEntryDarkice = new CCreditName();
|
||||||
CreditEntryDarkice.image = GetNewStatic(_TexNameDarkice, new SColorF(1, 1, 1, 1), new SRectF(CSettings.iRenderW, 580, 400, 120, -4));
|
CreditEntryDarkice.image = GetNewStatic(_TexNameDarkice, new SColorF(1, 1, 1, 1), new SRectF(CSettings.iRenderW, 580, 400, 120, -4));
|
||||||
CreditEntryDarkice.particleRect = new SRectF(CreditEntryDarkice.image.Rect.X + 242, CreditEntryDarkice.image.Rect.Y + 23, 30, 30, -5);
|
CreditEntryDarkice.particleRect = new SRectF(CreditEntryDarkice.image.Rect.X + 242, CreditEntryDarkice.image.Rect.Y + 23, 30, 30, -5);
|
||||||
CreditEntryDarkice.particle = new CParticleEffect(8, new SColorF(0.149f, 0.415f, 0.819f, 1), CreditEntryDarkice.particleRect, _TexPerfectNoteStar, 35, EParticeType.Star);
|
CreditEntryDarkice.particle = GetNewParticleEffect(8, new SColorF(0.149f, 0.415f, 0.819f, 1), CreditEntryDarkice.particleRect, _TexPerfectNoteStar, 35, EParticeType.Star);
|
||||||
CreditEntryDarkice.active = true;
|
CreditEntryDarkice.active = true;
|
||||||
CreditEntryDarkice.direction = EDirection.Right;
|
CreditEntryDarkice.direction = EDirection.Right;
|
||||||
_CreditNames.Add(CreditEntryDarkice);
|
_CreditNames.Add(CreditEntryDarkice);
|
||||||
@@ -272,7 +272,7 @@ namespace Vocaluxe.Screens
|
|||||||
CCreditName CreditEntryFlokuep = new CCreditName();
|
CCreditName CreditEntryFlokuep = new CCreditName();
|
||||||
CreditEntryFlokuep.image = GetNewStatic(_TexNameFlokuep, new SColorF(1, 1, 1, 1), new SRectF(-450, 580, 400, 120, -4));
|
CreditEntryFlokuep.image = GetNewStatic(_TexNameFlokuep, new SColorF(1, 1, 1, 1), new SRectF(-450, 580, 400, 120, -4));
|
||||||
CreditEntryFlokuep.particleRect = new SRectF(CreditEntryFlokuep.image.Rect.X + 141, CreditEntryFlokuep.image.Rect.Y - 2, 30, 30, -5);
|
CreditEntryFlokuep.particleRect = new SRectF(CreditEntryFlokuep.image.Rect.X + 141, CreditEntryFlokuep.image.Rect.Y - 2, 30, 30, -5);
|
||||||
CreditEntryFlokuep.particle = new CParticleEffect(8, new SColorF(1, 0, 0, 1), CreditEntryFlokuep.particleRect, _TexPerfectNoteStar, 35, EParticeType.Star);
|
CreditEntryFlokuep.particle = GetNewParticleEffect(8, new SColorF(1, 0, 0, 1), CreditEntryFlokuep.particleRect, _TexPerfectNoteStar, 35, EParticeType.Star);
|
||||||
CreditEntryFlokuep.active = true;
|
CreditEntryFlokuep.active = true;
|
||||||
CreditEntryFlokuep.direction = EDirection.Left;
|
CreditEntryFlokuep.direction = EDirection.Left;
|
||||||
_CreditNames.Add(CreditEntryFlokuep);
|
_CreditNames.Add(CreditEntryFlokuep);
|
||||||
@@ -281,7 +281,7 @@ namespace Vocaluxe.Screens
|
|||||||
CCreditName CreditEntryBohning = new CCreditName();
|
CCreditName CreditEntryBohning = new CCreditName();
|
||||||
CreditEntryBohning.image = GetNewStatic(_TexNameBohning, new SColorF(1, 1, 1, 1), new SRectF(CSettings.iRenderW, 580, 350, 110, -4));
|
CreditEntryBohning.image = GetNewStatic(_TexNameBohning, new SColorF(1, 1, 1, 1), new SRectF(CSettings.iRenderW, 580, 350, 110, -4));
|
||||||
CreditEntryBohning.particleRect = new SRectF(CreditEntryBohning.image.Rect.X + 172, CreditEntryBohning.image.Rect.Y + 16, 10, 10, -5);
|
CreditEntryBohning.particleRect = new SRectF(CreditEntryBohning.image.Rect.X + 172, CreditEntryBohning.image.Rect.Y + 16, 10, 10, -5);
|
||||||
CreditEntryBohning.particle = new CParticleEffect(4, new SColorF(0.149f, 0.415f, 0.819f, 1), CreditEntryBohning.particleRect, _TexPerfectNoteStar, 25, EParticeType.Star);
|
CreditEntryBohning.particle = GetNewParticleEffect(4, new SColorF(0.149f, 0.415f, 0.819f, 1), CreditEntryBohning.particleRect, _TexPerfectNoteStar, 25, EParticeType.Star);
|
||||||
CreditEntryBohning.active = true;
|
CreditEntryBohning.active = true;
|
||||||
CreditEntryBohning.direction = EDirection.Right;
|
CreditEntryBohning.direction = EDirection.Right;
|
||||||
_CreditNames.Add(CreditEntryBohning);
|
_CreditNames.Add(CreditEntryBohning);
|
||||||
@@ -290,7 +290,7 @@ namespace Vocaluxe.Screens
|
|||||||
CCreditName CreditEntryMesand = new CCreditName();
|
CCreditName CreditEntryMesand = new CCreditName();
|
||||||
CreditEntryMesand.image = GetNewStatic(_TexNameMesand, new SColorF(1, 1, 1, 1), new SRectF(-450, 580, 350, 110, -4));
|
CreditEntryMesand.image = GetNewStatic(_TexNameMesand, new SColorF(1, 1, 1, 1), new SRectF(-450, 580, 350, 110, -4));
|
||||||
CreditEntryMesand.particleRect = new SRectF(CreditEntryMesand.image.Rect.X + 240, CreditEntryMesand.image.Rect.Y - 2, 10, 10, -5);
|
CreditEntryMesand.particleRect = new SRectF(CreditEntryMesand.image.Rect.X + 240, CreditEntryMesand.image.Rect.Y - 2, 10, 10, -5);
|
||||||
CreditEntryMesand.particle = new CParticleEffect(4, new SColorF(1, 0, 0, 1), CreditEntryMesand.particleRect, _TexPerfectNoteStar, 25, EParticeType.Star);
|
CreditEntryMesand.particle = GetNewParticleEffect(4, new SColorF(1, 0, 0, 1), CreditEntryMesand.particleRect, _TexPerfectNoteStar, 25, EParticeType.Star);
|
||||||
CreditEntryMesand.active = true;
|
CreditEntryMesand.active = true;
|
||||||
CreditEntryMesand.direction = EDirection.Left;
|
CreditEntryMesand.direction = EDirection.Left;
|
||||||
_CreditNames.Add(CreditEntryMesand);
|
_CreditNames.Add(CreditEntryMesand);
|
||||||
@@ -299,7 +299,7 @@ namespace Vocaluxe.Screens
|
|||||||
CCreditName CreditEntryBabene03 = new CCreditName();
|
CCreditName CreditEntryBabene03 = new CCreditName();
|
||||||
CreditEntryBabene03.image = GetNewStatic(_TexNameBabene03, new SColorF(1, 1, 1, 1), new SRectF(CSettings.iRenderW, 580, 350, 110, -4));
|
CreditEntryBabene03.image = GetNewStatic(_TexNameBabene03, new SColorF(1, 1, 1, 1), new SRectF(CSettings.iRenderW, 580, 350, 110, -4));
|
||||||
CreditEntryBabene03.particleRect = new SRectF(CreditEntryBabene03.image.Rect.X + 7, CreditEntryBabene03.image.Rect.Y + 4, 10, 10, -5);
|
CreditEntryBabene03.particleRect = new SRectF(CreditEntryBabene03.image.Rect.X + 7, CreditEntryBabene03.image.Rect.Y + 4, 10, 10, -5);
|
||||||
CreditEntryBabene03.particle = new CParticleEffect(4, new SColorF(0.149f, 0.415f, 0.819f, 1), CreditEntryBabene03.particleRect, _TexPerfectNoteStar, 25, EParticeType.Star);
|
CreditEntryBabene03.particle = GetNewParticleEffect(4, new SColorF(0.149f, 0.415f, 0.819f, 1), CreditEntryBabene03.particleRect, _TexPerfectNoteStar, 25, EParticeType.Star);
|
||||||
CreditEntryBabene03.active = true;
|
CreditEntryBabene03.active = true;
|
||||||
CreditEntryBabene03.direction = EDirection.Right;
|
CreditEntryBabene03.direction = EDirection.Right;
|
||||||
_CreditNames.Add(CreditEntryBabene03);
|
_CreditNames.Add(CreditEntryBabene03);
|
||||||
@@ -308,7 +308,7 @@ namespace Vocaluxe.Screens
|
|||||||
CCreditName CreditEntrypantero = new CCreditName();
|
CCreditName CreditEntrypantero = new CCreditName();
|
||||||
CreditEntrypantero.image = GetNewStatic(_TexNamePantero, new SColorF(1, 1, 1, 1), new SRectF(-450, 580, 350, 110, -4));
|
CreditEntrypantero.image = GetNewStatic(_TexNamePantero, new SColorF(1, 1, 1, 1), new SRectF(-450, 580, 350, 110, -4));
|
||||||
CreditEntrypantero.particleRect = new SRectF(CreditEntrypantero.image.Rect.X + 140, CreditEntrypantero.image.Rect.Y + 15, 10, 10, -5);
|
CreditEntrypantero.particleRect = new SRectF(CreditEntrypantero.image.Rect.X + 140, CreditEntrypantero.image.Rect.Y + 15, 10, 10, -5);
|
||||||
CreditEntrypantero.particle = new CParticleEffect(4, new SColorF(1, 0, 0, 1), CreditEntrypantero.particleRect, _TexPerfectNoteStar, 25, EParticeType.Star);
|
CreditEntrypantero.particle = GetNewParticleEffect(4, new SColorF(1, 0, 0, 1), CreditEntrypantero.particleRect, _TexPerfectNoteStar, 25, EParticeType.Star);
|
||||||
CreditEntrypantero.active = true;
|
CreditEntrypantero.active = true;
|
||||||
CreditEntrypantero.direction = EDirection.Left;
|
CreditEntrypantero.direction = EDirection.Left;
|
||||||
_CreditNames.Add(CreditEntrypantero);
|
_CreditNames.Add(CreditEntrypantero);
|
||||||
@@ -317,7 +317,7 @@ namespace Vocaluxe.Screens
|
|||||||
CCreditName CreditEntryPinky007 = new CCreditName();
|
CCreditName CreditEntryPinky007 = new CCreditName();
|
||||||
CreditEntryPinky007.image = GetNewStatic(_TexNamePinky007, new SColorF(1, 1, 1, 1), new SRectF(CSettings.iRenderW, 580, 350, 110, -4));
|
CreditEntryPinky007.image = GetNewStatic(_TexNamePinky007, new SColorF(1, 1, 1, 1), new SRectF(CSettings.iRenderW, 580, 350, 110, -4));
|
||||||
CreditEntryPinky007.particleRect = new SRectF(CreditEntryPinky007.image.Rect.X + 42, CreditEntryPinky007.image.Rect.Y + 15, 10, 10, -5);
|
CreditEntryPinky007.particleRect = new SRectF(CreditEntryPinky007.image.Rect.X + 42, CreditEntryPinky007.image.Rect.Y + 15, 10, 10, -5);
|
||||||
CreditEntryPinky007.particle = new CParticleEffect(4, new SColorF(0.149f, 0.415f, 0.819f, 1), CreditEntryPinky007.particleRect, _TexPerfectNoteStar, 25, EParticeType.Star);
|
CreditEntryPinky007.particle = GetNewParticleEffect(4, new SColorF(0.149f, 0.415f, 0.819f, 1), CreditEntryPinky007.particleRect, _TexPerfectNoteStar, 25, EParticeType.Star);
|
||||||
CreditEntryPinky007.active = true;
|
CreditEntryPinky007.active = true;
|
||||||
CreditEntryPinky007.direction = EDirection.Right;
|
CreditEntryPinky007.direction = EDirection.Right;
|
||||||
_CreditNames.Add(CreditEntryPinky007);
|
_CreditNames.Add(CreditEntryPinky007);
|
||||||
|
|||||||
@@ -208,6 +208,7 @@
|
|||||||
<Compile Include="Lib\Input\WiiMote\CWiiMote.cs" />
|
<Compile Include="Lib\Input\WiiMote\CWiiMote.cs" />
|
||||||
<Compile Include="Lib\Input\WiiMote\WiiMoteLib.cs" />
|
<Compile Include="Lib\Input\WiiMote\WiiMoteLib.cs" />
|
||||||
<Compile Include="Lib\Playlist\CPlaylistFile.cs" />
|
<Compile Include="Lib\Playlist\CPlaylistFile.cs" />
|
||||||
|
<Compile Include="Menu\CParticle.cs" />
|
||||||
<Compile Include="Menu\SingNotes\CNotes.cs" />
|
<Compile Include="Menu\SingNotes\CNotes.cs" />
|
||||||
<Compile Include="Lib\Song\CSong.cs" />
|
<Compile Include="Lib\Song\CSong.cs" />
|
||||||
<Compile Include="Lib\Sound\CDirectSoundRecord.cs" />
|
<Compile Include="Lib\Sound\CDirectSoundRecord.cs" />
|
||||||
|
|||||||
Reference in new issue
Block a user