Added first basic playlist-format.
This commit is contained in:
1 parent
8ef112f6b6
commit
6202c67156
7 files changed
+302
-8
No files matched your search
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<Info>
|
||||
<PlaylistName>Test</PlaylistName>
|
||||
</Info>
|
||||
<Songs>
|
||||
<Song1>
|
||||
<Artist>2raumwohnung</Artist>
|
||||
<Title>36 grad</Title>
|
||||
<GameMode>TR_GAMEMODE_NORMAL</GameMode>
|
||||
</Song1>
|
||||
<Song2>
|
||||
<Artist>Aura Dione</Artist>
|
||||
<Title>Geronimo</Title>
|
||||
<GameMode>TR_GAMEMODE_SHORTSONG</GameMode>
|
||||
</Song2>
|
||||
<Song3>
|
||||
<Artist>Die Toten Hosen</Artist>
|
||||
<Title>Tage wie diese</Title>
|
||||
<GameMode>TR_GAMEMODE_MEDLEY</GameMode>
|
||||
</Song3>
|
||||
</Songs>
|
||||
</root>
|
||||
@@ -27,6 +27,7 @@ namespace Vocaluxe.Base
|
||||
public int SongID;
|
||||
public bool Medley;
|
||||
public bool Duet;
|
||||
public bool ShortSong;
|
||||
public long DateTicks;
|
||||
public bool SongFinished;
|
||||
}
|
||||
@@ -214,6 +215,7 @@ namespace Vocaluxe.Base
|
||||
_Player[i].SongID = -1;
|
||||
_Player[i].Medley = false;
|
||||
_Player[i].Duet = false;
|
||||
_Player[i].ShortSong = false;
|
||||
_Player[i].DateTicks = DateTime.Now.Ticks;
|
||||
_Player[i].SongFinished = false;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,261 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Xml;
|
||||
using System.Xml.XPath;
|
||||
|
||||
using Vocaluxe.Lib.Song;
|
||||
|
||||
namespace Vocaluxe.Base
|
||||
{
|
||||
class CPlaylistSong
|
||||
{
|
||||
public int SongID;
|
||||
public GameModes.EGameMode gm;
|
||||
|
||||
public CPlaylistSong(int SongID, GameModes.EGameMode gm)
|
||||
{
|
||||
this.SongID = SongID;
|
||||
this.gm = gm;
|
||||
}
|
||||
|
||||
public CPlaylistSong()
|
||||
{
|
||||
gm = GameModes.EGameMode.TR_GAMEMODE_NORMAL;
|
||||
}
|
||||
}
|
||||
|
||||
struct SPlaylist
|
||||
{
|
||||
public string PlaylistName;
|
||||
public string PlaylistFile;
|
||||
public List<CPlaylistSong> Songs;
|
||||
}
|
||||
|
||||
static class CPlaylists
|
||||
{
|
||||
private static XmlWriterSettings _settings = new XmlWriterSettings();
|
||||
private static CHelper Helper = new CHelper();
|
||||
private static List<SPlaylist> _Playlists;
|
||||
|
||||
public static SPlaylist[] Playlists
|
||||
{
|
||||
get { return _Playlists.ToArray(); }
|
||||
}
|
||||
|
||||
public static int NumPlaylists
|
||||
{
|
||||
get { return _Playlists.Count; }
|
||||
}
|
||||
|
||||
public static void Init()
|
||||
{
|
||||
_settings.Indent = true;
|
||||
_settings.Encoding = System.Text.Encoding.UTF8;
|
||||
_settings.ConformanceLevel = ConformanceLevel.Document;
|
||||
|
||||
LoadPlaylists();
|
||||
}
|
||||
|
||||
public static void LoadPlaylists()
|
||||
{
|
||||
_Playlists = new List<SPlaylist>();
|
||||
List<string> files = new List<string>();
|
||||
files.AddRange(Helper.ListFiles(CSettings.sFolderPlaylists, "*.xml", true, true));
|
||||
|
||||
foreach (string file in files)
|
||||
{
|
||||
LoadPlaylist(file);
|
||||
}
|
||||
|
||||
SortPlaylistsByName();
|
||||
}
|
||||
|
||||
public static void DeletePlaylist(int PlaylistID)
|
||||
{
|
||||
if (PlaylistID < 0 || PlaylistID >= _Playlists.Count)
|
||||
return;
|
||||
if (_Playlists[PlaylistID].PlaylistFile != String.Empty)
|
||||
{
|
||||
try
|
||||
{
|
||||
File.Delete(_Playlists[PlaylistID].PlaylistFile);
|
||||
_Playlists.RemoveAt(PlaylistID);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
CLog.LogError("Can't delete Profile File " + _Playlists[PlaylistID].PlaylistFile + ".xml");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#region private methods
|
||||
|
||||
private static void SortPlaylistsByName()
|
||||
{
|
||||
_Playlists.Sort(CompareByPlaylistName);
|
||||
}
|
||||
|
||||
private static int CompareByPlaylistName(SPlaylist a, SPlaylist b)
|
||||
{
|
||||
return String.Compare(a.PlaylistName, b.PlaylistName);
|
||||
}
|
||||
|
||||
private static void SavePlaylist(int PlaylistID)
|
||||
{
|
||||
if (PlaylistID < 0 || PlaylistID >= _Playlists.Count)
|
||||
return;
|
||||
|
||||
string filename = string.Empty;
|
||||
foreach (char chr in _Playlists[PlaylistID].PlaylistName)
|
||||
{
|
||||
if (char.IsLetter(chr))
|
||||
filename += chr.ToString();
|
||||
}
|
||||
|
||||
if (filename == String.Empty)
|
||||
filename = "1";
|
||||
|
||||
int i = 0;
|
||||
while (File.Exists(Path.Combine(CSettings.sFolderPlaylists, filename + ".xml")))
|
||||
{
|
||||
i++;
|
||||
if (!File.Exists(Path.Combine(CSettings.sFolderPlaylists, filename + i + ".xml")))
|
||||
{
|
||||
filename += i;
|
||||
}
|
||||
}
|
||||
|
||||
SPlaylist playlist = _Playlists[PlaylistID];
|
||||
playlist.PlaylistFile = Path.Combine(CSettings.sFolderPlaylists, filename + ".xml");
|
||||
_Playlists[PlaylistID] = playlist;
|
||||
|
||||
XmlWriter writer;
|
||||
try
|
||||
{
|
||||
writer = XmlWriter.Create(_Playlists[PlaylistID].PlaylistFile, _settings);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
CLog.LogError("Error creating/opening Playlist File " + _Playlists[PlaylistID].PlaylistFile + ": " + e.Message);
|
||||
return;
|
||||
}
|
||||
|
||||
if (writer == null)
|
||||
{
|
||||
CLog.LogError("Error creating/opening Playlist File " + _Playlists[PlaylistID].PlaylistFile);
|
||||
return;
|
||||
}
|
||||
|
||||
writer.WriteStartDocument();
|
||||
writer.WriteStartElement("root");
|
||||
|
||||
writer.WriteStartElement("Info");
|
||||
writer.WriteElementString("PlaylistName", _Playlists[PlaylistID].PlaylistName);
|
||||
writer.WriteEndElement();
|
||||
|
||||
writer.WriteStartElement("Songs");
|
||||
for (i = 0; i < playlist.Songs.Count; i++)
|
||||
{
|
||||
CSong[] songs = CSongs.AllSongs;
|
||||
CSong song = new CSong();
|
||||
for (int s = 0; i <= songs.Length; s++)
|
||||
{
|
||||
if (songs[s].ID == playlist.Songs[i].SongID)
|
||||
{
|
||||
song = songs[s];
|
||||
break;
|
||||
}
|
||||
}
|
||||
writer.WriteStartElement("Song" + (i+1).ToString());
|
||||
writer.WriteElementString("Artist", song.Artist);
|
||||
writer.WriteElementString("Title", song.Title);
|
||||
writer.WriteElementString("GameMode", Enum.GetName(typeof(GameModes.EGameMode), playlist.Songs[i].gm));
|
||||
writer.WriteEndElement();
|
||||
}
|
||||
writer.WriteEndElement();
|
||||
|
||||
writer.WriteEndElement(); //end of root
|
||||
writer.WriteEndDocument();
|
||||
|
||||
writer.Flush();
|
||||
writer.Close();
|
||||
}
|
||||
|
||||
private static void LoadPlaylist(string FileName)
|
||||
{
|
||||
bool loaded = false;
|
||||
XPathDocument xPathDoc = null;
|
||||
XPathNavigator navigator = null;
|
||||
|
||||
SPlaylist playlist = new SPlaylist();
|
||||
playlist.PlaylistFile = Path.Combine(CSettings.sFolderPlaylists, FileName);
|
||||
|
||||
try
|
||||
{
|
||||
xPathDoc = new XPathDocument(playlist.PlaylistFile);
|
||||
navigator = xPathDoc.CreateNavigator();
|
||||
loaded = true;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
loaded = false;
|
||||
if (navigator != null)
|
||||
navigator = null;
|
||||
|
||||
if (xPathDoc != null)
|
||||
xPathDoc = null;
|
||||
|
||||
CLog.LogError("Error opening Playlist File " + FileName + ": " + e.Message);
|
||||
}
|
||||
|
||||
if (loaded)
|
||||
{
|
||||
string value = String.Empty;
|
||||
if (CHelper.GetValueFromXML("//root/Info/PlaylistName", navigator, ref value, value))
|
||||
{
|
||||
playlist.PlaylistName = value;
|
||||
|
||||
playlist.Songs = new List<CPlaylistSong>();
|
||||
|
||||
List<string> songs = CHelper.GetValuesFromXML("Songs", navigator);
|
||||
string artist = String.Empty;
|
||||
string title = String.Empty;
|
||||
GameModes.EGameMode gm = GameModes.EGameMode.TR_GAMEMODE_NORMAL;
|
||||
|
||||
for (int i = 0; i < songs.Count; i++)
|
||||
{
|
||||
CHelper.GetValueFromXML("//root/Songs/" + songs[i] + "/Artist", navigator, ref artist, String.Empty);
|
||||
CHelper.GetValueFromXML("//root/Songs/" + songs[i] + "/Title", navigator, ref title, String.Empty);
|
||||
CHelper.TryGetEnumValueFromXML<GameModes.EGameMode>("//root/Songs/" + songs[i] + "/GameMode", navigator, ref gm);
|
||||
|
||||
CPlaylistSong song = new CPlaylistSong();
|
||||
CSong[] AllSongs = CSongs.AllSongs;
|
||||
|
||||
for (int s = 0; s < AllSongs.Length; s++)
|
||||
{
|
||||
if (AllSongs[s].Artist == artist && AllSongs[s].Title == title)
|
||||
{
|
||||
song.SongID = AllSongs[s].ID;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
song.gm = gm;
|
||||
|
||||
playlist.Songs.Add(song);
|
||||
}
|
||||
|
||||
_Playlists.Add(playlist);
|
||||
}
|
||||
else
|
||||
{
|
||||
CLog.LogError("Can't find PlaylistName in Playlist File: " + FileName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -94,6 +94,7 @@ namespace Vocaluxe.Base
|
||||
public const string sFolderLanguages = "Languages";
|
||||
public const string sFolderScreenshots = "Screenshots";
|
||||
public const string sFolderBackgroundMusic = "BackgroundMusic";
|
||||
public const string sFolderPlaylists = "Playlists";
|
||||
|
||||
//public const String[] ToneStrings = new String[]{ "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B" };
|
||||
public const int ToneMin = -36;
|
||||
|
||||
@@ -39,12 +39,13 @@ namespace Vocaluxe.GameModes
|
||||
_Rounds[round, player].PointsLineBonus = 0f;
|
||||
_Rounds[round, player].Medley = false;
|
||||
_Rounds[round, player].Duet = false;
|
||||
_Rounds[round, player].ShortSong = false;
|
||||
_Rounds[round, player].SongFinished = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void SetPoints(int Round, int SongID, SPlayer[] Player, bool Medley, bool Duet)
|
||||
public void SetPoints(int Round, int SongID, SPlayer[] Player, bool Medley, bool Duet, bool ShortSong)
|
||||
{
|
||||
long DateTicks = DateTime.Now.Ticks;
|
||||
for (int player = 0; player < Player.Length; player++)
|
||||
@@ -56,6 +57,7 @@ namespace Vocaluxe.GameModes
|
||||
_Rounds[Round, player].PointsLineBonus = Player[player].PointsLineBonus;
|
||||
_Rounds[Round, player].Medley = Medley;
|
||||
_Rounds[Round, player].Duet = Duet;
|
||||
_Rounds[Round, player].ShortSong = ShortSong;
|
||||
_Rounds[Round, player].DateTicks = DateTicks;
|
||||
_Rounds[Round, player].SongFinished = Player[player].SongFinished;
|
||||
}
|
||||
@@ -91,6 +93,7 @@ namespace Vocaluxe.GameModes
|
||||
player[p].Difficulty = _Rounds[Round, p].Difficulty;
|
||||
player[p].Medley = _Rounds[Round, p].Medley;
|
||||
player[p].Duet = _Rounds[Round, p].Duet;
|
||||
player[p].ShortSong = _Rounds[Round, p].ShortSong;
|
||||
player[p].DateTicks = _Rounds[Round, p].DateTicks;
|
||||
player[p].SongFinished = _Rounds[Round, p].SongFinished;
|
||||
player[p].ProfileID = _Rounds[Round, p].ProfileID;
|
||||
@@ -223,7 +226,8 @@ namespace Vocaluxe.GameModes
|
||||
_SongQueque[_CurrentSong].SongID,
|
||||
Player,
|
||||
_SongQueque[_CurrentSong].GameMode == EGameMode.TR_GAMEMODE_MEDLEY,
|
||||
_SongQueque[_CurrentSong].GameMode == EGameMode.TR_GAMEMODE_DUET);
|
||||
_SongQueque[_CurrentSong].GameMode == EGameMode.TR_GAMEMODE_DUET,
|
||||
_SongQueque[_CurrentSong].GameMode == EGameMode.TR_GAMEMODE_SHORTSONG);
|
||||
}
|
||||
_CurrentSong++;
|
||||
}
|
||||
|
||||
@@ -223,6 +223,11 @@ namespace Vocaluxe.Screens
|
||||
CBackgroundMusic.CanSing = true;
|
||||
|
||||
CLog.StopBenchmark(3, "Load Cover");
|
||||
|
||||
//Init Playlists
|
||||
CLog.StartBenchmark(0, "Init Playlists");
|
||||
CPlaylists.Init();
|
||||
CLog.StopBenchmark(0, "Init Playlists");
|
||||
}
|
||||
|
||||
private void CheckStartIntroVideos()
|
||||
|
||||
@@ -125,6 +125,7 @@
|
||||
<Compile Include="Base\CGame.cs" />
|
||||
<Compile Include="Base\CLanguage.cs" />
|
||||
<Compile Include="Base\CLog.cs" />
|
||||
<Compile Include="Base\CPlaylists.cs" />
|
||||
<Compile Include="Base\CProfiles.cs" />
|
||||
<Compile Include="Base\CUtility.cs" />
|
||||
<Compile Include="Base\CSettings.cs" />
|
||||
@@ -132,12 +133,9 @@
|
||||
<Compile Include="Base\CTheme.cs" />
|
||||
<Compile Include="Base\CVideo.cs" />
|
||||
<Compile Include="GameModes\CGameMode.cs" />
|
||||
<Compile Include="GameModes\CGameModeDuet.cs" />
|
||||
<Compile Include="GameModes\CGameModeMedley.cs" />
|
||||
<Compile Include="GameModes\CGameModeNormal.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="GameModes\CGameModeShortSong.cs" />
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="GameModes\IGameMode.cs" />
|
||||
<Compile Include="Lib\Draw\CDirect3D.cs">
|
||||
<SubType>Form</SubType>
|
||||
@@ -247,4 +245,4 @@
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
||||
</Project>
|
||||
Reference in new issue
Block a user