Added keyboard-support. Press 1-6 to start selecting player, enter to select and esc to abort.
This commit is contained in:
1 parent
f5050028c6
commit
6567aa413d
2 files changed
+178
-45
No files matched your search
+118
-40
@@ -4,6 +4,7 @@ using System.Drawing;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Xml;
|
using System.Xml;
|
||||||
using System.Xml.XPath;
|
using System.Xml.XPath;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
using Vocaluxe.Base;
|
using Vocaluxe.Base;
|
||||||
using Vocaluxe.Lib.Draw;
|
using Vocaluxe.Lib.Draw;
|
||||||
@@ -13,8 +14,6 @@ namespace Vocaluxe.Menu
|
|||||||
struct SThemeNameSelection
|
struct SThemeNameSelection
|
||||||
{
|
{
|
||||||
public string Name;
|
public string Name;
|
||||||
public string TextureSelectorName;
|
|
||||||
public string ColorSelectorName;
|
|
||||||
public string TextureEmptyTileName;
|
public string TextureEmptyTileName;
|
||||||
public string ColorEmptyTileName;
|
public string ColorEmptyTileName;
|
||||||
public float NameSpace;
|
public float NameSpace;
|
||||||
@@ -55,10 +54,8 @@ namespace Vocaluxe.Menu
|
|||||||
public SRectF Rect;
|
public SRectF Rect;
|
||||||
private List<CTile> _Tiles;
|
private List<CTile> _Tiles;
|
||||||
|
|
||||||
private STexture _TextureSelector;
|
|
||||||
private STexture _TextureEmptyTile;
|
private STexture _TextureEmptyTile;
|
||||||
|
|
||||||
public SColorF ColorSelector;
|
|
||||||
public SColorF ColorEmptyTile;
|
public SColorF ColorEmptyTile;
|
||||||
|
|
||||||
private int _NumW;
|
private int _NumW;
|
||||||
@@ -72,13 +69,15 @@ namespace Vocaluxe.Menu
|
|||||||
|
|
||||||
public int _Offset = 0;
|
public int _Offset = 0;
|
||||||
private int _actualSelection = -1;
|
private int _actualSelection = -1;
|
||||||
|
public int Selection = -1;
|
||||||
|
|
||||||
|
int _player = -1;
|
||||||
|
|
||||||
|
|
||||||
public CNameSelection()
|
public CNameSelection()
|
||||||
{
|
{
|
||||||
_Theme = new SThemeNameSelection();
|
_Theme = new SThemeNameSelection();
|
||||||
|
|
||||||
_TextureSelector = CTheme.GetSkinTexture(_Theme.TextureSelectorName);
|
|
||||||
_TextureEmptyTile = CTheme.GetSkinTexture(_Theme.TextureEmptyTileName);
|
_TextureEmptyTile = CTheme.GetSkinTexture(_Theme.TextureEmptyTileName);
|
||||||
|
|
||||||
_Tiles = new List<CTile>();
|
_Tiles = new List<CTile>();
|
||||||
@@ -112,21 +111,6 @@ namespace Vocaluxe.Menu
|
|||||||
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/W", navigator, ref Rect.W);
|
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/W", navigator, ref Rect.W);
|
||||||
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/H", navigator, ref Rect.H);
|
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/H", navigator, ref Rect.H);
|
||||||
|
|
||||||
_ThemeLoaded &= CHelper.GetValueFromXML(item + "/SkinSelector", navigator, ref _Theme.TextureSelectorName, String.Empty);
|
|
||||||
|
|
||||||
if (CHelper.GetValueFromXML(item + "/ColorSelector", navigator, ref _Theme.ColorSelectorName, String.Empty))
|
|
||||||
{
|
|
||||||
_ThemeLoaded &= CTheme.GetColor(_Theme.ColorSelectorName, SkinIndex, ref ColorSelector);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/R", navigator, ref ColorSelector.R);
|
|
||||||
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/G", navigator, ref ColorSelector.G);
|
|
||||||
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/B", navigator, ref ColorSelector.B);
|
|
||||||
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/A", navigator, ref ColorSelector.A);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
_ThemeLoaded &= CHelper.GetValueFromXML(item + "/SkinEmptyTile", navigator, ref _Theme.TextureEmptyTileName, String.Empty);
|
_ThemeLoaded &= CHelper.GetValueFromXML(item + "/SkinEmptyTile", navigator, ref _Theme.TextureEmptyTileName, String.Empty);
|
||||||
|
|
||||||
if (CHelper.GetValueFromXML(item + "/ColorEmptyTile", navigator, ref _Theme.ColorEmptyTileName, String.Empty))
|
if (CHelper.GetValueFromXML(item + "/ColorEmptyTile", navigator, ref _Theme.ColorEmptyTileName, String.Empty))
|
||||||
@@ -187,24 +171,6 @@ namespace Vocaluxe.Menu
|
|||||||
writer.WriteElementString("W", Rect.W.ToString("#0"));
|
writer.WriteElementString("W", Rect.W.ToString("#0"));
|
||||||
writer.WriteElementString("H", Rect.H.ToString("#0"));
|
writer.WriteElementString("H", Rect.H.ToString("#0"));
|
||||||
|
|
||||||
|
|
||||||
writer.WriteComment("<SkinSelector>: Texture name");
|
|
||||||
writer.WriteElementString("SkinSelector", _Theme.TextureSelectorName);
|
|
||||||
|
|
||||||
writer.WriteComment("<ColorSelector>: Static color from ColorScheme (high priority)");
|
|
||||||
writer.WriteComment("or <R>, <G>, <B>, <A> (lower priority)");
|
|
||||||
if (_Theme.ColorSelectorName != String.Empty)
|
|
||||||
{
|
|
||||||
writer.WriteElementString("ColorSelector", _Theme.ColorSelectorName);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
writer.WriteElementString("R", ColorSelector.R.ToString("#0.00"));
|
|
||||||
writer.WriteElementString("G", ColorSelector.G.ToString("#0.00"));
|
|
||||||
writer.WriteElementString("B", ColorSelector.B.ToString("#0.00"));
|
|
||||||
writer.WriteElementString("A", ColorSelector.A.ToString("#0.00"));
|
|
||||||
}
|
|
||||||
|
|
||||||
writer.WriteComment("<SkinEmptyTile>: Texture name");
|
writer.WriteComment("<SkinEmptyTile>: Texture name");
|
||||||
writer.WriteElementString("SkinEmptyTile", _Theme.TextureEmptyTileName);
|
writer.WriteElementString("SkinEmptyTile", _Theme.TextureEmptyTileName);
|
||||||
|
|
||||||
@@ -266,10 +232,118 @@ namespace Vocaluxe.Menu
|
|||||||
|
|
||||||
public void Draw(bool ForceDraw)
|
public void Draw(bool ForceDraw)
|
||||||
{
|
{
|
||||||
|
int i = 0;
|
||||||
foreach (CTile tile in _Tiles)
|
foreach (CTile tile in _Tiles)
|
||||||
{
|
{
|
||||||
|
if (_player > -1)
|
||||||
|
{
|
||||||
|
if (_actualSelection == i)
|
||||||
|
{
|
||||||
|
tile.Avatar.Color = CTheme.GetPlayerColor(_player);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tile.Avatar.Color = new SColorF(1, 1, 1, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tile.Avatar.Color = new SColorF(1, 1, 1, 1);
|
||||||
|
}
|
||||||
tile.Avatar.Draw();
|
tile.Avatar.Draw();
|
||||||
tile.Name.Draw();
|
tile.Name.Draw();
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void HandleInput(KeyEvent kevent)
|
||||||
|
{
|
||||||
|
switch (kevent.Key)
|
||||||
|
{
|
||||||
|
case Keys.Right:
|
||||||
|
if (_actualSelection + 1 < _Tiles.Count)
|
||||||
|
{
|
||||||
|
_actualSelection++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int offset = _Offset;
|
||||||
|
UpdateList(_Offset + 1);
|
||||||
|
if (offset != _Offset)
|
||||||
|
{
|
||||||
|
_actualSelection = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Keys.Left:
|
||||||
|
if (_actualSelection - 1 > -1)
|
||||||
|
{
|
||||||
|
_actualSelection--;
|
||||||
|
}
|
||||||
|
else if (_Offset > 0)
|
||||||
|
{
|
||||||
|
UpdateList(_Offset - 1);
|
||||||
|
_actualSelection = _Tiles.Count-1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Keys.Up:
|
||||||
|
if (_actualSelection - _NumW > -1)
|
||||||
|
{
|
||||||
|
_actualSelection -= _NumW;
|
||||||
|
}
|
||||||
|
else if (_Offset > 0)
|
||||||
|
{
|
||||||
|
UpdateList(_Offset - 1);
|
||||||
|
_actualSelection += _Tiles.Count- _NumW;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Keys.Down:
|
||||||
|
if (_actualSelection + _NumW < _Tiles.Count - 1)
|
||||||
|
{
|
||||||
|
_actualSelection += _NumW;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int offset = _Offset;
|
||||||
|
UpdateList(_Offset + 1);
|
||||||
|
if (offset != _Offset)
|
||||||
|
{
|
||||||
|
_actualSelection = _actualSelection - _Tiles.Count + _NumW;
|
||||||
|
if (_Tiles[_actualSelection].PlayerNr == -1)
|
||||||
|
{
|
||||||
|
for (int i = _Tiles.Count - 1; i >= 0; i++)
|
||||||
|
{
|
||||||
|
if (_Tiles[i].PlayerNr != -1)
|
||||||
|
{
|
||||||
|
_actualSelection = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
Selection = _Offset * _Tiles.Count + _actualSelection;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void KeyboardSelection(bool active, int player)
|
||||||
|
{
|
||||||
|
if (active)
|
||||||
|
{
|
||||||
|
Selection = 0;
|
||||||
|
_actualSelection = 0;
|
||||||
|
_player = player;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Selection = -1;
|
||||||
|
_actualSelection = -1;
|
||||||
|
_player = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -341,14 +415,18 @@ namespace Vocaluxe.Menu
|
|||||||
return new CStatic();
|
return new CStatic();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public CStatic TilePlayerAvatar(int nr)
|
||||||
|
{
|
||||||
|
nr -= _Offset * _Tiles.Count;
|
||||||
|
return _Tiles[nr].Avatar;
|
||||||
|
}
|
||||||
|
|
||||||
public void UnloadTextures()
|
public void UnloadTextures()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public void LoadTextures()
|
public void LoadTextures()
|
||||||
{
|
{
|
||||||
if (_Theme.ColorSelectorName != String.Empty)
|
|
||||||
ColorSelector = CTheme.GetColor(_Theme.ColorSelectorName);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ReloadTextures()
|
public void ReloadTextures()
|
||||||
|
|||||||
@@ -28,6 +28,8 @@ namespace Vocaluxe.Screens
|
|||||||
private readonly string[] TextPlayer = new string[] { "TextPlayer1", "TextPlayer2", "TextPlayer3", "TextPlayer4", "TextPlayer5", "TextPlayer6" };
|
private readonly string[] TextPlayer = new string[] { "TextPlayer1", "TextPlayer2", "TextPlayer3", "TextPlayer4", "TextPlayer5", "TextPlayer6" };
|
||||||
|
|
||||||
private bool selectingMouseActive = false;
|
private bool selectingMouseActive = false;
|
||||||
|
private bool selectingKeyboardActive = false;
|
||||||
|
private int selectingKeyboardPlayerNr = 0;
|
||||||
private int SelectedPlayerNr;
|
private int SelectedPlayerNr;
|
||||||
|
|
||||||
|
|
||||||
@@ -90,14 +92,38 @@ namespace Vocaluxe.Screens
|
|||||||
|
|
||||||
public override bool HandleInput(KeyEvent KeyEvent)
|
public override bool HandleInput(KeyEvent KeyEvent)
|
||||||
{
|
{
|
||||||
base.HandleInput(KeyEvent);
|
if (selectingKeyboardActive)
|
||||||
|
|
||||||
if (KeyEvent.KeyPressed && !Char.IsControl(KeyEvent.Unicode))
|
|
||||||
{
|
{
|
||||||
|
NameSelections[htNameSelections(NameSelection)].HandleInput(KeyEvent);
|
||||||
|
switch (KeyEvent.Key)
|
||||||
|
{
|
||||||
|
case Keys.Enter:
|
||||||
|
if (NameSelections[htNameSelections(NameSelection)].Selection > -1)
|
||||||
|
{
|
||||||
|
SelectedPlayerNr = NameSelections[htNameSelections(NameSelection)].Selection;
|
||||||
|
//Update Game-infos with new player
|
||||||
|
CGame.Player[selectingKeyboardPlayerNr-1].Name = CProfiles.Profiles[SelectedPlayerNr].PlayerName;
|
||||||
|
CGame.Player[selectingKeyboardPlayerNr-1].Difficulty = CProfiles.Profiles[SelectedPlayerNr].Difficulty;
|
||||||
|
CGame.Player[selectingKeyboardPlayerNr-1].ProfileID = SelectedPlayerNr;
|
||||||
|
//Update texture and name
|
||||||
|
Statics[htStatics(StaticPlayer[selectingKeyboardPlayerNr-1])].Texture = NameSelections[htNameSelections(NameSelection)].TilePlayerAvatar(SelectedPlayerNr).Texture;
|
||||||
|
Texts[htTexts(TextPlayer[selectingKeyboardPlayerNr-1])].Text = CProfiles.Profiles[SelectedPlayerNr].PlayerName;
|
||||||
|
}
|
||||||
|
selectingKeyboardPlayerNr = 0;
|
||||||
|
selectingKeyboardActive = false;
|
||||||
|
NameSelections[htNameSelections(NameSelection)].KeyboardSelection(false, -1);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Keys.Escape:
|
||||||
|
selectingKeyboardPlayerNr = 0;
|
||||||
|
selectingKeyboardActive = false;
|
||||||
|
NameSelections[htNameSelections(NameSelection)].KeyboardSelection(false, -1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
base.HandleInput(KeyEvent);
|
||||||
bool processed = false;
|
bool processed = false;
|
||||||
switch (KeyEvent.Key)
|
switch (KeyEvent.Key)
|
||||||
{
|
{
|
||||||
@@ -121,10 +147,40 @@ namespace Vocaluxe.Screens
|
|||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case Keys.D1:
|
||||||
|
selectingKeyboardPlayerNr = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Keys.D2:
|
||||||
|
selectingKeyboardPlayerNr = 2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Keys.D3:
|
||||||
|
selectingKeyboardPlayerNr = 3;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Keys.D4:
|
||||||
|
selectingKeyboardPlayerNr = 4;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Keys.D5:
|
||||||
|
selectingKeyboardPlayerNr = 5;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Keys.D6:
|
||||||
|
selectingKeyboardPlayerNr = 6;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!processed)
|
if (!processed)
|
||||||
UpdatePlayerNumber();
|
UpdatePlayerNumber();
|
||||||
|
|
||||||
|
if (selectingKeyboardPlayerNr > 0 && selectingKeyboardPlayerNr <= CConfig.NumPlayer)
|
||||||
|
{
|
||||||
|
selectingKeyboardActive = true;
|
||||||
|
NameSelections[htNameSelections(NameSelection)].KeyboardSelection(true, selectingKeyboardPlayerNr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -183,8 +239,7 @@ namespace Vocaluxe.Screens
|
|||||||
if (Statics[htStatics(StaticPlayer[i])].Visible == true)
|
if (Statics[htStatics(StaticPlayer[i])].Visible == true)
|
||||||
{
|
{
|
||||||
//Check if Mouse is in area
|
//Check if Mouse is in area
|
||||||
if (Statics[htStatics(StaticPlayer[i])].Rect.X < MouseEvent.X && (Statics[htStatics(StaticPlayer[i])].Rect.X + Statics[htStatics(StaticPlayer[i])].Rect.W) > MouseEvent.X
|
if (CHelper.IsInBounds(Statics[htStatics(StaticPlayer[i])].Rect, MouseEvent))
|
||||||
&& Statics[htStatics(StaticPlayer[i])].Rect.Y < MouseEvent.Y && (Statics[htStatics(StaticPlayer[i])].Rect.Y + Statics[htStatics(StaticPlayer[i])].Rect.H) > MouseEvent.Y)
|
|
||||||
{
|
{
|
||||||
//Update Game-infos with new player
|
//Update Game-infos with new player
|
||||||
CGame.Player[i].Name = CProfiles.Profiles[SelectedPlayerNr].PlayerName;
|
CGame.Player[i].Name = CProfiles.Profiles[SelectedPlayerNr].PlayerName;
|
||||||
|
|||||||
Reference in new issue
Block a user