Merge branch 'develop' into player-guid

This commit is contained in:
Florian Küpper committed 2017-11-05 23:32:30 +01:00
commit 86dc259c17
387 files changed
+18124 -16761

No files matched your search

@@ -27,18 +27,9 @@ using VocaluxeLib.Songs;
namespace VocaluxeLib.PartyModes.TicTacToe
{
public enum ESongSource
{
// ReSharper disable InconsistentNaming
TR_ALLSONGS,
TR_CATEGORY,
TR_PLAYLIST
// ReSharper restore InconsistentNaming
}
public class CRound
{
public int SongID;
public int[] SongIDs;
public int SingerTeam1;
public int SingerTeam2;
public int PointsTeam1;
@@ -60,7 +51,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe
// ReSharper disable ClassNeverInstantiated.Global
public sealed class CPartyModeTicTacToe : CPartyMode
// ReSharper restore ClassNeverInstantiated.Global
// ReSharper restore ClassNeverInstantiated.Global
{
public override int MinMics
{
@@ -96,9 +87,12 @@ namespace VocaluxeLib.PartyModes.TicTacToe
get { return 10; }
}
private enum EStage
public readonly EGameMode[] AvailableGameModes = { EGameMode.TR_GAMEMODE_NORMAL, EGameMode.TR_GAMEMODE_SHORTSONG, EGameMode.TR_GAMEMODE_DUET };
private enum EStage
{
Config,
Songs,
Names,
Main,
Singing
@@ -116,10 +110,12 @@ namespace VocaluxeLib.PartyModes.TicTacToe
public List<int> PlayerTeam2;
public ESongSource SongSource;
public ESongSorting Sorting;
public int CategoryIndex;
public int PlaylistID;
public EGameMode GameMode;
public int NumMedleySongs;
public List<CRound> Rounds;
public List<int> Songs;
@@ -129,6 +125,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe
public int[] NumJokerRandom;
public int[] NumJokerRetry;
public EOffOn RefillJokers;
}
public SData GameData;
@@ -157,14 +154,17 @@ namespace VocaluxeLib.PartyModes.TicTacToe
PlayerTeam2 = new List<int>(),
CurrentRoundNr = 0,
FieldNr = 0,
SongSource = ESongSource.TR_ALLSONGS,
Sorting = CBase.Config.GetSongSorting(),
SongSource = ESongSource.TR_SONGSOURCE_ALLSONGS,
PlaylistID = 0,
CategoryIndex = 0,
GameMode = EGameMode.TR_GAMEMODE_NORMAL,
NumMedleySongs = 5,
Rounds = new List<CRound>(),
Songs = new List<int>(),
NumJokerRandom = new int[2],
NumJokerRetry = new int[2]
NumJokerRetry = new int[2],
RefillJokers = EOffOn.TR_CONFIG_OFF
};
}
@@ -210,6 +210,8 @@ namespace VocaluxeLib.PartyModes.TicTacToe
{
case EStage.Config:
return _Screens["CPartyScreenTicTacToeConfig"];
case EStage.Songs:
return _Screens["CPartyScreenTicTacToeSongs"];
case EStage.Names:
return _Screens["CPartyScreenTicTacToeNames"];
case EStage.Main:
@@ -232,6 +234,9 @@ namespace VocaluxeLib.PartyModes.TicTacToe
switch (_Stage)
{
case EStage.Config:
_Stage = EStage.Songs;
break;
case EStage.Songs:
_Stage = EStage.Names;
break;
case EStage.Names:
@@ -251,6 +256,8 @@ namespace VocaluxeLib.PartyModes.TicTacToe
_Stage = EStage.Main;
GameData.Team = GameData.Team == 1 ? 0 : 1;
_UpdatePlayerList();
if (GameData.RefillJokers == EOffOn.TR_CONFIG_ON)
_SetNumJokers();
break;
default:
throw new ArgumentException("Invalid stage: " + _Stage);
@@ -265,9 +272,12 @@ namespace VocaluxeLib.PartyModes.TicTacToe
case EStage.Config:
CBase.Graphics.FadeTo(EScreen.Party);
return;
case EStage.Names:
case EStage.Songs:
_Stage = EStage.Config;
break;
case EStage.Names:
_Stage = EStage.Songs;
break;
case EStage.Main:
_Stage = EStage.Names;
break;
@@ -428,7 +438,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe
switch (GameData.SongSource)
{
case ESongSource.TR_PLAYLIST:
case ESongSource.TR_SONGSOURCE_PLAYLIST:
for (int i = 0; i < CBase.Playlist.GetSongCount(GameData.PlaylistID); i++)
{
int id = CBase.Playlist.GetSong(GameData.PlaylistID, i).SongID;
@@ -437,12 +447,13 @@ namespace VocaluxeLib.PartyModes.TicTacToe
}
break;
case ESongSource.TR_ALLSONGS:
case ESongSource.TR_SONGSOURCE_ALLSONGS:
ReadOnlyCollection<CSong> avSongs = CBase.Songs.GetSongs();
GameData.Songs.AddRange(avSongs.Where(song => song.AvailableGameModes.Contains(GameData.GameMode)).Select(song => song.ID));
break;
case ESongSource.TR_CATEGORY:
case ESongSource.TR_SONGSOURCE_CATEGORY:
CBase.Songs.SortSongs(GameData.Sorting, EOffOn.TR_CONFIG_ON, CBase.Config.GetIgnoreArticles(), "", EDuetOptions.All, -1);
CBase.Songs.SetCategory(GameData.CategoryIndex);
avSongs = CBase.Songs.GetVisibleSongs();
GameData.Songs.AddRange(avSongs.Where(song => song.AvailableGameModes.Contains(GameData.GameMode)).Select(song => song.ID));
@@ -476,7 +487,6 @@ namespace VocaluxeLib.PartyModes.TicTacToe
return;
CRound round = GameData.Rounds[roundNr];
bool isDuet = CBase.Songs.GetSongByID(round.SongID).IsDuet;
for (int i = 0; i < 2; i++)
{
@@ -486,14 +496,10 @@ namespace VocaluxeLib.PartyModes.TicTacToe
//try to fill with the right data
players[0].ProfileID = GameData.ProfileIDsTeam1[round.SingerTeam1];
if (isDuet)
players[0].VoiceNr = 0;
players[1].ProfileID = GameData.ProfileIDsTeam2[round.SingerTeam2];
if (isDuet)
players[1].VoiceNr = 1;
CBase.Game.AddSong(round.SongID, GameData.GameMode);
foreach(int song in round.SongIDs)
CBase.Game.AddSong(song, GameData.GameMode);
}
private void _SetNumJokers()
@@ -15,6 +15,7 @@
// along with Vocaluxe. If not, see <http://www.gnu.org/licenses/>.
#endregion
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
@@ -30,14 +31,12 @@ namespace VocaluxeLib.PartyModes.TicTacToe
// Version number for theme files. Increment it, if you've changed something on the theme files!
protected override int _ScreenVersion
{
get { return 1; }
get { return 2; }
}
private const string _SelectSlideNumFields = "SelectSlideNumFields";
private const string _SelectSlideSongSource = "SelectSlideSongSource";
private const string _SelectSlidePlaylist = "SelectSlidePlaylist";
private const string _SelectSlideCategory = "SelectSlideCategory";
private const string _SelectSlideGameMode = "SelectSlideGameMode";
private const string _SelectSlideRefillJokers = "SelectSlideRefillJokers";
private const string _ButtonNext = "ButtonNext";
private const string _ButtonBack = "ButtonBack";
@@ -47,10 +46,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe
{
base.Init();
_ThemeSelectSlides = new string[]
{
_SelectSlideNumFields, _SelectSlideSongSource, _SelectSlidePlaylist, _SelectSlideCategory, _SelectSlideGameMode
};
_ThemeSelectSlides = new string[] { _SelectSlideNumFields };
_ThemeButtons = new string[] {_ButtonNext, _ButtonBack};
}
@@ -135,102 +131,14 @@ namespace VocaluxeLib.PartyModes.TicTacToe
_SelectSlides[_SelectSlideNumFields].SelectedTag = _PartyMode.GameData.NumFields;
_SelectSlides[_SelectSlideSongSource].Clear();
_SelectSlides[_SelectSlideSongSource].SetValues<ESongSource>((int)_PartyMode.GameData.SongSource);
List<string> playlists = CBase.Playlist.GetNames();
_SelectSlides[_SelectSlidePlaylist].Clear();
for (int i = 0; i < playlists.Count; i++)
{
string value = playlists[i] + " (" + CBase.Playlist.GetSongCount(i) + " " + CBase.Language.Translate("TR_SONGS", PartyModeID) + ")";
_SelectSlides[_SelectSlidePlaylist].AddValue(value);
}
_SelectSlides[_SelectSlidePlaylist].Selection = _PartyMode.GameData.PlaylistID;
_SelectSlides[_SelectSlidePlaylist].Visible = _PartyMode.GameData.SongSource == ESongSource.TR_PLAYLIST;
_SelectSlides[_SelectSlideCategory].Clear();
for (int i = 0; i < CBase.Songs.GetNumCategories(); i++)
{
CCategory cat = CBase.Songs.GetCategory(i);
string value = cat.Name + " (" + cat.GetNumSongsNotSung() + " " + CBase.Language.Translate("TR_SONGS", PartyModeID) + ")";
_SelectSlides[_SelectSlideCategory].AddValue(value);
}
_SelectSlides[_SelectSlideCategory].Selection = _PartyMode.GameData.CategoryIndex;
_SelectSlides[_SelectSlideCategory].Visible = _PartyMode.GameData.SongSource == ESongSource.TR_CATEGORY;
_SelectSlides[_SelectSlideGameMode].Visible = true;
_SelectSlides[_SelectSlideGameMode].Clear();
_SelectSlides[_SelectSlideGameMode].SetValues<EGameMode>((int)_PartyMode.GameData.GameMode);
_SelectSlides[_SelectSlideGameMode].RemoveValue(EGameMode.TR_GAMEMODE_MEDLEY.ToString());
_SelectSlides[_SelectSlideRefillJokers].AddValues(Enum.GetNames(typeof(EOffOn)));
_SelectSlides[_SelectSlideRefillJokers].Selection = (int)_PartyMode.GameData.RefillJokers;
}
private void _UpdateSlides()
{
_PartyMode.GameData.NumFields = _SelectSlides[_SelectSlideNumFields].SelectedTag;
_PartyMode.GameData.SongSource = (ESongSource)_SelectSlides[_SelectSlideSongSource].Selection;
_PartyMode.GameData.PlaylistID = _SelectSlides[_SelectSlidePlaylist].Selection;
_PartyMode.GameData.CategoryIndex = _SelectSlides[_SelectSlideCategory].Selection;
_PartyMode.GameData.GameMode = (EGameMode)_SelectSlides[_SelectSlideGameMode].Selection;
EGameMode gm = _PartyMode.GameData.GameMode;
if (_PartyMode.GameData.SongSource == ESongSource.TR_PLAYLIST)
{
if (CBase.Playlist.GetNumPlaylists() > 0)
{
if (CBase.Playlist.GetSongCount(_PartyMode.GameData.PlaylistID) > 0)
{
_ConfigOk = false;
for (int i = 0; i < CBase.Playlist.GetSongCount(_PartyMode.GameData.PlaylistID); i++)
{
int id = CBase.Playlist.GetSong(_PartyMode.GameData.PlaylistID, i).SongID;
_ConfigOk = CBase.Songs.GetSongByID(id).AvailableGameModes.Any(mode => mode == gm);
if (_ConfigOk)
break;
}
}
else
_ConfigOk = false;
}
else
_ConfigOk = false;
}
if (_PartyMode.GameData.SongSource == ESongSource.TR_CATEGORY)
{
if (CBase.Songs.GetNumCategories() == 0)
_ConfigOk = false;
else if (CBase.Songs.GetNumSongsNotSungInCategory(_PartyMode.GameData.CategoryIndex) <= 0)
_ConfigOk = false;
else
{
CBase.Songs.SetCategory(_PartyMode.GameData.CategoryIndex);
_ConfigOk = false;
foreach (CSong song in CBase.Songs.GetVisibleSongs())
{
_ConfigOk = song.AvailableGameModes.Any(mode => mode == gm);
if (_ConfigOk)
break;
}
CBase.Songs.SetCategory(-1);
}
}
if (_PartyMode.GameData.SongSource == ESongSource.TR_ALLSONGS)
{
if (CBase.Songs.GetNumSongs() > 0)
{
for (int i = 0; i < CBase.Songs.GetNumSongs(); i++)
{
_ConfigOk = CBase.Songs.GetSongByID(i).AvailableGameModes.Any(mode => mode == gm);
if (_ConfigOk)
break;
}
}
else
_ConfigOk = false;
}
_SelectSlides[_SelectSlideCategory].Visible = _PartyMode.GameData.SongSource == ESongSource.TR_CATEGORY;
_SelectSlides[_SelectSlidePlaylist].Visible = _PartyMode.GameData.SongSource == ESongSource.TR_PLAYLIST;
_PartyMode.GameData.RefillJokers = (EOffOn)_SelectSlides[_SelectSlideRefillJokers].Selection;
}
}
}
@@ -98,6 +98,9 @@ namespace VocaluxeLib.PartyModes.TicTacToe
_CreateFields();
_Buttons[_ButtonField].Visible = false;
_Statics[_StaticAvatarT1].Aspect = EAspect.Crop;
_Statics[_StaticAvatarT2].Aspect = EAspect.Crop;
}
public override bool HandleInput(SKeyEvent keyEvent)
@@ -394,13 +397,13 @@ namespace VocaluxeLib.PartyModes.TicTacToe
if (_PartyMode.GameData.Rounds[i].Finished)
{
_Fields[i].Selectable = false;
_Fields[i].Texture = CBase.Songs.GetSongByID(_PartyMode.GameData.Rounds[i].SongID).CoverTextureBig;
_Fields[i].Texture = CBase.Songs.GetSongByID(_PartyMode.GameData.Rounds[i].SongIDs[0]).CoverTextureBig;
_Fields[i].Color = CBase.Themes.GetPlayerColor(_PartyMode.GameData.Rounds[i].Winner);
_Fields[i].SelColor = CBase.Themes.GetPlayerColor(_PartyMode.GameData.Rounds[i].Winner);
}
if (_Status == EStatus.FieldSelected && _PartyMode.GameData.FieldNr == i)
{
_Fields[i].Texture = CBase.Songs.GetSongByID(_PartyMode.GameData.Rounds[i].SongID).CoverTextureBig;
_Fields[i].Texture = CBase.Songs.GetSongByID(_PartyMode.GameData.Rounds[i].SongIDs[0]).CoverTextureBig;
_Fields[i].Color = new SColorF(1, 1, 1, 1);
_Fields[i].SelColor = new SColorF(1, 1, 1, 1);
_Fields[i].Selectable = false;
@@ -441,12 +444,16 @@ namespace VocaluxeLib.PartyModes.TicTacToe
_UpdatePlayerInformation();
}
_PartyMode.UpdateSongList();
int songID = _PartyMode.GameData.Songs[0];
_PartyMode.GameData.Songs.RemoveAt(0);
int[] songIDs = new int[_PartyMode.GameData.GameMode == EGameMode.TR_GAMEMODE_MEDLEY ? _PartyMode.GameData.NumMedleySongs : 1];
for(int i = 0; i < songIDs.Length; i++)
{
songIDs[i] = _PartyMode.GameData.Songs[0];
_PartyMode.GameData.Songs.RemoveAt(0);
}
_StartPreview(songID);
_StartPreview(songIDs[0]);
_Status = EStatus.FieldSelected;
_PartyMode.GameData.Rounds[_PartyMode.GameData.FieldNr].SongID = songID;
_PartyMode.GameData.Rounds[_PartyMode.GameData.FieldNr].SongIDs = songIDs;
_UpdateFieldContents();
_UpdateJokerButtons();
@@ -459,10 +466,10 @@ namespace VocaluxeLib.PartyModes.TicTacToe
private void _FieldSelectedAgain()
{
int songID = _PartyMode.GameData.Rounds[_OldSelectedField].SongID;
_StartPreview(songID);
int[] songIDs = _PartyMode.GameData.Rounds[_OldSelectedField].SongIDs;
_StartPreview(songIDs[0]);
_Status = EStatus.FieldSelected;
_PartyMode.GameData.Rounds[_PartyMode.GameData.FieldNr].SongID = songID;
_PartyMode.GameData.Rounds[_PartyMode.GameData.FieldNr].SongIDs = songIDs;
_PartyMode.GameData.Rounds[_PartyMode.GameData.FieldNr].SingerTeam1 = _PartyMode.GameData.Rounds[_OldSelectedField].SingerTeam1;
_PartyMode.GameData.Rounds[_PartyMode.GameData.FieldNr].SingerTeam2 = _PartyMode.GameData.Rounds[_OldSelectedField].SingerTeam2;
_UpdateFieldContents();
@@ -0,0 +1,84 @@
#region license
// This file is part of Vocaluxe.
//
// Vocaluxe is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Vocaluxe is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Vocaluxe. If not, see <http://www.gnu.org/licenses/>.
#endregion
using System.Collections.Generic;
using VocaluxeLib.Menu;
namespace VocaluxeLib.PartyModes.TicTacToe
{
class CPartyScreenTicTacToeSongs : CMenuPartySongSelection
{
protected override int _ScreenVersion
{
get { return 1; }
}
private new CPartyModeTicTacToe _PartyMode;
public override void Init()
{
base.Init();
_PartyMode = (CPartyModeTicTacToe)base._PartyMode;
}
public override void OnShow()
{
Source = _PartyMode.GameData.SongSource;
Sorting = _PartyMode.GameData.Sorting;
Category = _PartyMode.GameData.CategoryIndex;
Playlist = _PartyMode.GameData.PlaylistID;
SongMode = _PartyMode.GameData.GameMode;
NumMedleySongs = _PartyMode.GameData.NumMedleySongs;
base.OnShow();
}
public override void Back()
{
_SaveConfig();
_PartyMode.Back();
}
public override void Next()
{
_SaveConfig();
_PartyMode.Next();
}
public override bool UpdateGame()
{
return true;
}
protected override void _SetAllowedOptions()
{
base._SetAllowedOptions();
AllowedSongModes = new EGameMode[] { EGameMode.TR_GAMEMODE_NORMAL, EGameMode.TR_GAMEMODE_SHORTSONG, EGameMode.TR_GAMEMODE_MEDLEY };
}
private void _SaveConfig()
{
_PartyMode.GameData.SongSource = Source;
_PartyMode.GameData.Sorting = Sorting;
_PartyMode.GameData.CategoryIndex = Category;
_PartyMode.GameData.PlaylistID = Playlist;
_PartyMode.GameData.GameMode = SongMode;
_PartyMode.GameData.NumMedleySongs = NumMedleySongs;
}
}
}
@@ -70,6 +70,7 @@
<CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Compile Include="CPartyScreenTicTacToeSongs.cs" />
<Compile Include="GlobalSuppressions.cs" />
<Compile Include="CPartyModeTicTacToe.cs" />
<Compile Include="CPartyScreenTicTacToeConfig.cs" />
@@ -108,4 +109,4 @@ rm -f "$(SolutionDir)Output\PartyModes\$(TargetName)\Code\GlobalSuppressions.cs"
<Target Name="AfterBuild">
</Target>
-->
</Project>
</Project>