diff --git a/Vocaluxe/Base/CUtility.cs b/Vocaluxe/Base/CUtility.cs
index 4eca0857..4f98fbc4 100644
--- a/Vocaluxe/Base/CUtility.cs
+++ b/Vocaluxe/Base/CUtility.cs
@@ -14,7 +14,7 @@ using Vocaluxe.Lib.Draw;
namespace Vocaluxe.Base
{
[Flags]
- public enum Modifier
+ public enum EModifier
{
None,
Shift,
@@ -22,8 +22,17 @@ namespace Vocaluxe.Base
Ctrl
}
+ public enum ESender
+ {
+ Mouse,
+ Keyboard,
+ WiiMote,
+ Gamepad
+ }
+
public struct KeyEvent
{
+ public ESender Sender;
public bool ModALT;
public bool ModSHIFT;
public bool ModCTRL;
@@ -31,10 +40,11 @@ namespace Vocaluxe.Base
public bool Handled;
public Keys Key;
public Char Unicode;
- public Modifier Mod;
+ public EModifier Mod;
- public KeyEvent(bool alt, bool shift, bool ctrl, bool pressed, char unicode, Keys key)
+ public KeyEvent(ESender sender, bool alt, bool shift, bool ctrl, bool pressed, char unicode, Keys key)
{
+ Sender = sender;
ModALT = alt;
ModSHIFT = shift;
ModCTRL = ctrl;
@@ -43,21 +53,21 @@ namespace Vocaluxe.Base
Key = key;
Handled = false;
- Modifier mALT = Modifier.None;
- Modifier mSHIFT = Modifier.None;
- Modifier mCTRL = Modifier.None;
+ EModifier mALT = EModifier.None;
+ EModifier mSHIFT = EModifier.None;
+ EModifier mCTRL = EModifier.None;
if (alt)
- mALT = Modifier.Alt;
+ mALT = EModifier.Alt;
if (shift)
- mSHIFT = Modifier.Shift;
+ mSHIFT = EModifier.Shift;
if (ctrl)
- mCTRL = Modifier.Ctrl;
+ mCTRL = EModifier.Ctrl;
if (!alt && !shift && !ctrl)
- Mod = Modifier.None;
+ Mod = EModifier.None;
else
Mod = mALT | mSHIFT | mCTRL;
}
@@ -65,6 +75,7 @@ namespace Vocaluxe.Base
public struct MouseEvent
{
+ public ESender Sender;
public int X;
public int Y;
public bool LB; //left button click
@@ -80,11 +91,12 @@ namespace Vocaluxe.Base
public bool ModSHIFT;
public bool ModCTRL;
- public Modifier Mod;
+ public EModifier Mod;
public int Wheel;
- public MouseEvent(bool alt, bool shift, bool ctrl, int x, int y, bool lb, bool ld, bool rb, int wheel, bool lbh, bool rbh, bool mb, bool mbh)
+ public MouseEvent(ESender sender, bool alt, bool shift, bool ctrl, int x, int y, bool lb, bool ld, bool rb, int wheel, bool lbh, bool rbh, bool mb, bool mbh)
{
+ Sender = sender;
X = x;
Y = y;
LB = lb;
@@ -100,21 +112,21 @@ namespace Vocaluxe.Base
ModSHIFT = shift;
ModCTRL = ctrl;
- Modifier mALT = Modifier.None;
- Modifier mSHIFT = Modifier.None;
- Modifier mCTRL = Modifier.None;
+ EModifier mALT = EModifier.None;
+ EModifier mSHIFT = EModifier.None;
+ EModifier mCTRL = EModifier.None;
if (alt)
- mALT = Modifier.Alt;
+ mALT = EModifier.Alt;
if (shift)
- mSHIFT = Modifier.Shift;
+ mSHIFT = EModifier.Shift;
if (ctrl)
- mCTRL = Modifier.Ctrl;
+ mCTRL = EModifier.Ctrl;
if (!alt && !shift && !ctrl)
- Mod = Modifier.None;
+ Mod = EModifier.None;
else
Mod = mALT | mSHIFT | mCTRL;
@@ -223,7 +235,7 @@ namespace Vocaluxe.Base
if (!_timer.IsRunning || (_timer.ElapsedMilliseconds > 75) || !KeyRepeat)
{
- KeyEvent pool = new KeyEvent(alt, shift, ctrl, pressed && (unicode != Char.MinValue), unicode, key);
+ KeyEvent pool = new KeyEvent(ESender.Keyboard, alt, shift, ctrl, pressed && (unicode != Char.MinValue), unicode, key);
lock (_CopyLock)
{
@@ -360,7 +372,7 @@ namespace Vocaluxe.Base
x = (int)((float)x * (float)CSettings.iRenderW / (float)CDraw.GetScreenWidth());
y = (int)((float)y * (float)CSettings.iRenderH / (float)CDraw.GetScreenHeight());
- MouseEvent pool = new MouseEvent(alt, shift, ctrl, x, y, lb, ld, rb, -wheel / 120, lbh, rbh, mb, mbh);
+ MouseEvent pool = new MouseEvent(ESender.Mouse, alt, shift, ctrl, x, y, lb, ld, rb, -wheel / 120, lbh, rbh, mb, mbh);
lock (_CopyLock)
{
diff --git a/Vocaluxe/Lib/Draw/IDraw.cs b/Vocaluxe/Lib/Draw/IDraw.cs
index 9a7bf1d6..7f39b5b0 100644
--- a/Vocaluxe/Lib/Draw/IDraw.cs
+++ b/Vocaluxe/Lib/Draw/IDraw.cs
@@ -63,6 +63,20 @@ namespace Vocaluxe.Lib.Draw
}
}
+ public struct SPoint3f
+ {
+ public float X;
+ public float Y;
+ public float Z;
+ }
+
+ public struct SPoint3
+ {
+ public int X;
+ public int Y;
+ public int Z;
+ }
+
public struct STexture
{
public int index;
diff --git a/Vocaluxe/Menu/CGraphics.cs b/Vocaluxe/Menu/CGraphics.cs
index b309938a..797a454e 100644
--- a/Vocaluxe/Menu/CGraphics.cs
+++ b/Vocaluxe/Menu/CGraphics.cs
@@ -331,6 +331,7 @@ namespace Vocaluxe.Menu
CSound.Update();
CBackgroundMusic.Update();
+ CInput.Update();
if (CConfig.CoverLoading == ECoverLoading.TR_CONFIG_COVERLOADING_DYNAMIC && _CurrentScreen != EScreens.ScreenSing)
CSongs.LoadCover(30L, 1);
@@ -450,13 +451,21 @@ namespace Vocaluxe.Menu
{
KeyEvent KeyEvent = new KeyEvent();
MouseEvent MouseEvent = new MouseEvent();
+ KeyEvent InputKeyEvent = new KeyEvent();
+ MouseEvent InputMouseEvent = new MouseEvent();
bool PopupPlayerControlAllowed = _CurrentScreen != EScreens.ScreenOptionsRecord && _CurrentScreen != EScreens.ScreenSing &&
_CurrentScreen != EScreens.ScreenSong && _CurrentScreen != EScreens.ScreenCredits;
bool Resume = true;
- while (keys.PollEvent(ref KeyEvent))
+ bool EventsAvailable = false;
+ bool InputEventsAvailable = CInput.PollKeyEvent(ref InputKeyEvent);
+
+ while ((EventsAvailable = keys.PollEvent(ref KeyEvent)) || InputEventsAvailable)
{
+ if (!EventsAvailable)
+ KeyEvent = InputKeyEvent;
+
if (KeyEvent.Key == Keys.Left || KeyEvent.Key == Keys.Right || KeyEvent.Key == Keys.Up || KeyEvent.Key == Keys.Down)
{
CSettings.MouseInactive();
@@ -495,10 +504,18 @@ namespace Vocaluxe.Menu
Resume &= _Screens[(int)_CurrentScreen].HandleInput(KeyEvent);
}
}
+
+ if (!EventsAvailable)
+ InputEventsAvailable = CInput.PollKeyEvent(ref InputKeyEvent);
}
- while (Mouse.PollEvent(ref MouseEvent))
+ InputEventsAvailable = CInput.PollMouseEvent(ref InputMouseEvent);
+
+ while ((EventsAvailable = Mouse.PollEvent(ref MouseEvent)) || InputEventsAvailable)
{
+ if (!EventsAvailable)
+ MouseEvent = InputMouseEvent;
+
if (MouseEvent.Wheel != 0)
{
CSettings.MouseActive();
@@ -522,7 +539,10 @@ namespace Vocaluxe.Menu
handled = _PopupScreens[(int)_CurrentPopupScreen].HandleMouse(MouseEvent);
if (!handled && !_Fading && (_Cursor.IsActive || MouseEvent.LB || MouseEvent.RB || MouseEvent.MB))
- Resume &= _Screens[(int)_CurrentScreen].HandleMouse(MouseEvent);
+ Resume &= _Screens[(int)_CurrentScreen].HandleMouse(MouseEvent);
+
+ if (!EventsAvailable)
+ InputEventsAvailable = CInput.PollMouseEvent(ref InputMouseEvent);
}
return Resume;
}
diff --git a/Vocaluxe/Menu/CMenu.cs b/Vocaluxe/Menu/CMenu.cs
index fd4aed88..a1e2ef51 100644
--- a/Vocaluxe/Menu/CMenu.cs
+++ b/Vocaluxe/Menu/CMenu.cs
@@ -877,7 +877,7 @@ namespace Vocaluxe.Menu
{
if (KeyEvent.Key == Keys.Left)
{
- if (_Interactions.Count > 0 && _Interactions[_Selection].Type == EType.TSelectSlide && KeyEvent.Mod != Modifier.Shift)
+ if (_Interactions.Count > 0 && _Interactions[_Selection].Type == EType.TSelectSlide && KeyEvent.Mod != EModifier.Shift)
KeyEvent.Handled = PrevElement();
else
KeyEvent.Handled = _NextInteraction(KeyEvent);
@@ -885,7 +885,7 @@ namespace Vocaluxe.Menu
if (KeyEvent.Key == Keys.Right)
{
- if (_Interactions.Count > 0 && _Interactions[_Selection].Type == EType.TSelectSlide && KeyEvent.Mod != Modifier.Shift)
+ if (_Interactions.Count > 0 && _Interactions[_Selection].Type == EType.TSelectSlide && KeyEvent.Mod != EModifier.Shift)
KeyEvent.Handled = NextElement();
else
KeyEvent.Handled = _NextInteraction(KeyEvent);
@@ -900,7 +900,7 @@ namespace Vocaluxe.Menu
{
if (KeyEvent.Key == Keys.Tab)
{
- if (KeyEvent.Mod == Modifier.Shift)
+ if (KeyEvent.Mod == EModifier.Shift)
PrevInteraction();
else
NextInteraction();
@@ -955,40 +955,40 @@ namespace Vocaluxe.Menu
break;
case Keys.Up:
- if (KeyEvent.Mod == Modifier.Ctrl)
+ if (KeyEvent.Mod == EModifier.Ctrl)
MoveElement(0, -1);
- if (KeyEvent.Mod == Modifier.Shift)
+ if (KeyEvent.Mod == EModifier.Shift)
ResizeElement(0, 1);
break;
case Keys.Down:
- if (KeyEvent.Mod == Modifier.Ctrl)
+ if (KeyEvent.Mod == EModifier.Ctrl)
MoveElement(0, 1);
- if (KeyEvent.Mod == Modifier.Shift)
+ if (KeyEvent.Mod == EModifier.Shift)
ResizeElement(0, -1);
break;
case Keys.Right:
- if (KeyEvent.Mod == Modifier.Ctrl)
+ if (KeyEvent.Mod == EModifier.Ctrl)
MoveElement(1, 0);
- if (KeyEvent.Mod == Modifier.Shift)
+ if (KeyEvent.Mod == EModifier.Shift)
ResizeElement(1, 0);
- if (KeyEvent.Mod == Modifier.None)
+ if (KeyEvent.Mod == EModifier.None)
NextInteraction();
break;
case Keys.Left:
- if (KeyEvent.Mod == Modifier.Ctrl)
+ if (KeyEvent.Mod == EModifier.Ctrl)
MoveElement(-1, 0);
- if (KeyEvent.Mod == Modifier.Shift)
+ if (KeyEvent.Mod == EModifier.Shift)
ResizeElement(-1, 0);
- if (KeyEvent.Mod == Modifier.None)
+ if (KeyEvent.Mod == EModifier.None)
PrevInteraction();
break;
}
@@ -1005,7 +1005,7 @@ namespace Vocaluxe.Menu
int stepX = 0;
int stepY = 0;
- if ((MouseEvent.Mod & Modifier.Ctrl) == Modifier.Ctrl)
+ if ((MouseEvent.Mod & EModifier.Ctrl) == EModifier.Ctrl)
{
_PrevMouseX = MouseEvent.X;
_PrevMouseY = MouseEvent.Y;
@@ -1039,16 +1039,16 @@ namespace Vocaluxe.Menu
{
//if (IsMouseOver(MouseEvent.X, _PrevMouseY))
//{
- if (MouseEvent.Mod == Modifier.None)
+ if (MouseEvent.Mod == EModifier.None)
MoveElement(stepX, stepY);
- if (MouseEvent.Mod == Modifier.Ctrl)
+ if (MouseEvent.Mod == EModifier.Ctrl)
MoveElement(_MouseDX, _MouseDY);
- if (MouseEvent.Mod == Modifier.Shift)
+ if (MouseEvent.Mod == EModifier.Shift)
ResizeElement(stepX, stepY);
- if (MouseEvent.Mod == (Modifier.Shift | Modifier.Ctrl))
+ if (MouseEvent.Mod == (EModifier.Shift | EModifier.Ctrl))
ResizeElement(_MouseDX, _MouseDY);
//}
}
diff --git a/Vocaluxe/Menu/CObjectInteractions.cs b/Vocaluxe/Menu/CObjectInteractions.cs
index f6363187..70a4a726 100644
--- a/Vocaluxe/Menu/CObjectInteractions.cs
+++ b/Vocaluxe/Menu/CObjectInteractions.cs
@@ -123,7 +123,7 @@ namespace Vocaluxe.Menu
{
if (KeyEvent.Key == Keys.Left)
{
- if (_Interactions.Count > 0 && _Interactions[_Selection].Type == EType.TSelectSlide && KeyEvent.Mod != Modifier.Shift)
+ if (_Interactions.Count > 0 && _Interactions[_Selection].Type == EType.TSelectSlide && KeyEvent.Mod != EModifier.Shift)
KeyEvent.Handled = PrevElement();
else
KeyEvent.Handled = _NextInteraction(KeyEvent);
@@ -131,7 +131,7 @@ namespace Vocaluxe.Menu
if (KeyEvent.Key == Keys.Right)
{
- if (_Interactions.Count > 0 && _Interactions[_Selection].Type == EType.TSelectSlide && KeyEvent.Mod != Modifier.Shift)
+ if (_Interactions.Count > 0 && _Interactions[_Selection].Type == EType.TSelectSlide && KeyEvent.Mod != EModifier.Shift)
KeyEvent.Handled = NextElement();
else
KeyEvent.Handled = _NextInteraction(KeyEvent);
@@ -146,7 +146,7 @@ namespace Vocaluxe.Menu
{
if (KeyEvent.Key == Keys.Tab)
{
- if (KeyEvent.Mod == Modifier.Shift)
+ if (KeyEvent.Mod == EModifier.Shift)
PrevInteraction();
else
NextInteraction();
@@ -197,40 +197,40 @@ namespace Vocaluxe.Menu
break;
case Keys.Up:
- if (KeyEvent.Mod == Modifier.Ctrl)
+ if (KeyEvent.Mod == EModifier.Ctrl)
MoveElement(0, -1);
- if (KeyEvent.Mod == Modifier.Shift)
+ if (KeyEvent.Mod == EModifier.Shift)
ResizeElement(0, 1);
break;
case Keys.Down:
- if (KeyEvent.Mod == Modifier.Ctrl)
+ if (KeyEvent.Mod == EModifier.Ctrl)
MoveElement(0, 1);
- if (KeyEvent.Mod == Modifier.Shift)
+ if (KeyEvent.Mod == EModifier.Shift)
ResizeElement(0, -1);
break;
case Keys.Right:
- if (KeyEvent.Mod == Modifier.Ctrl)
+ if (KeyEvent.Mod == EModifier.Ctrl)
MoveElement(1, 0);
- if (KeyEvent.Mod == Modifier.Shift)
+ if (KeyEvent.Mod == EModifier.Shift)
ResizeElement(1, 0);
- if (KeyEvent.Mod == Modifier.None)
+ if (KeyEvent.Mod == EModifier.None)
NextInteraction();
break;
case Keys.Left:
- if (KeyEvent.Mod == Modifier.Ctrl)
+ if (KeyEvent.Mod == EModifier.Ctrl)
MoveElement(-1, 0);
- if (KeyEvent.Mod == Modifier.Shift)
+ if (KeyEvent.Mod == EModifier.Shift)
ResizeElement(-1, 0);
- if (KeyEvent.Mod == Modifier.None)
+ if (KeyEvent.Mod == EModifier.None)
PrevInteraction();
break;
}
@@ -247,7 +247,7 @@ namespace Vocaluxe.Menu
int stepX = 0;
int stepY = 0;
- if ((MouseEvent.Mod & Modifier.Ctrl) == Modifier.Ctrl)
+ if ((MouseEvent.Mod & EModifier.Ctrl) == EModifier.Ctrl)
{
_PrevMouseX = MouseEvent.X;
_PrevMouseY = MouseEvent.Y;
@@ -281,16 +281,16 @@ namespace Vocaluxe.Menu
{
//if (IsMouseOver(MouseEvent.X, _PrevMouseY))
//{
- if (MouseEvent.Mod == Modifier.None)
+ if (MouseEvent.Mod == EModifier.None)
MoveElement(stepX, stepY);
- if (MouseEvent.Mod == Modifier.Ctrl)
+ if (MouseEvent.Mod == EModifier.Ctrl)
MoveElement(_MouseDX, _MouseDY);
- if (MouseEvent.Mod == Modifier.Shift)
+ if (MouseEvent.Mod == EModifier.Shift)
ResizeElement(stepX, stepY);
- if (MouseEvent.Mod == (Modifier.Shift | Modifier.Ctrl))
+ if (MouseEvent.Mod == (EModifier.Shift | EModifier.Ctrl))
ResizeElement(_MouseDX, _MouseDY);
//}
}
diff --git a/Vocaluxe/Menu/CPlaylist.cs b/Vocaluxe/Menu/CPlaylist.cs
index 575c267e..69dbf8c9 100644
--- a/Vocaluxe/Menu/CPlaylist.cs
+++ b/Vocaluxe/Menu/CPlaylist.cs
@@ -142,6 +142,11 @@ namespace Vocaluxe.Menu
if (!value)
{
+ if (_EditMode == EEditMode.ChangeOrder && ChangeOrderSource != -1 && PlaylistElements.Count > ChangeOrderSource)
+ {
+ CPlaylists.Playlists[ActivePlaylistID].DeleteSong(PlaylistElements[ChangeOrderSource].Content);
+ UpdatePlaylist();
+ }
ChangeOrderSource = -1;
_EditMode = EEditMode.None;
}
diff --git a/Vocaluxe/Menu/SongMenu/CSongMenuDreidel.cs b/Vocaluxe/Menu/SongMenu/CSongMenuDreidel.cs
index 6a4aae66..b417d791 100644
--- a/Vocaluxe/Menu/SongMenu/CSongMenuDreidel.cs
+++ b/Vocaluxe/Menu/SongMenu/CSongMenuDreidel.cs
@@ -12,6 +12,7 @@ namespace Vocaluxe.Menu.SongMenu
{
class CSongMenuDreidel : CSongMenuFramework
{
+ /*
private SRectF _ScrollRect;
private CStatic _CoverBig;
private CStatic _TextBG;
@@ -29,7 +30,7 @@ namespace Vocaluxe.Menu.SongMenu
{
return _actualSelection;
}
-
+ */
public override void Init()
{
base.Init();
diff --git a/Vocaluxe/Menu/SongMenu/CSongMenuTileBoard.cs b/Vocaluxe/Menu/SongMenu/CSongMenuTileBoard.cs
index 4d9336e1..47710511 100644
--- a/Vocaluxe/Menu/SongMenu/CSongMenuTileBoard.cs
+++ b/Vocaluxe/Menu/SongMenu/CSongMenuTileBoard.cs
@@ -320,6 +320,7 @@ namespace Vocaluxe.Menu.SongMenu
int i = 0;
bool sel = false;
+ int lastselection = _actualSelection;
foreach (CStatic tile in _Tiles)
{
if ((tile.Texture.index != _CoverTexture.index) && CHelper.IsInBounds(tile.Rect, MouseEvent) && !sel)
@@ -345,6 +346,9 @@ namespace Vocaluxe.Menu.SongMenu
i++;
}
+ if (MouseEvent.Sender == ESender.WiiMote && _actualSelection != lastselection && _actualSelection != -1)
+ CInput.SetRumble(0.050f);
+
if (!sel)
_actualSelection = -1;
diff --git a/Vocaluxe/Program.cs b/Vocaluxe/Program.cs
index a7ca0de1..8cd97f60 100644
--- a/Vocaluxe/Program.cs
+++ b/Vocaluxe/Program.cs
@@ -138,6 +138,11 @@ namespace Vocaluxe
Application.DoEvents();
+ // Init Input
+ CLog.StartBenchmark(0, "Init Input");
+ CInput.Init();
+ CLog.StopBenchmark(0, "Init Input");
+
// Init Game;
CLog.StartBenchmark(0, "Init Game");
CGame.Init();
@@ -173,6 +178,7 @@ namespace Vocaluxe
// Unloading
try
{
+ CInput.Close();
CSound.RecordCloseAll();
CSound.CloseAllStreams();
CVideo.VdCloseAll();
diff --git a/Vocaluxe/Screens/CScreenSong.cs b/Vocaluxe/Screens/CScreenSong.cs
index 9a0b0e71..9c591620 100644
--- a/Vocaluxe/Screens/CScreenSong.cs
+++ b/Vocaluxe/Screens/CScreenSong.cs
@@ -206,11 +206,11 @@ namespace Vocaluxe.Screens
//TODO: Delete it! ??? Shouldn't we keep this as shortcut?
case Keys.A:
- if (!_SearchActive && KeyEvent.Mod == Modifier.None)
+ if (!_SearchActive && KeyEvent.Mod == EModifier.None)
{
StartRandomAllSongs();
}
- if (KeyEvent.Mod == Modifier.Ctrl)
+ if (KeyEvent.Mod == EModifier.Ctrl)
{
StartRandomVisibleSongs();
}
@@ -218,7 +218,7 @@ namespace Vocaluxe.Screens
//TODO: Delete that from here and from wiki!
case Keys.F:
- if (KeyEvent.Mod == Modifier.Ctrl)
+ if (KeyEvent.Mod == EModifier.Ctrl)
{
if (_SearchActive)
{
@@ -235,11 +235,11 @@ namespace Vocaluxe.Screens
//TODO: We need another key for random!
case Keys.R:
- if (!_SearchActive && CSongs.Category != -1 && KeyEvent.Mod == Modifier.Ctrl)
+ if (!_SearchActive && CSongs.Category != -1 && KeyEvent.Mod == EModifier.Ctrl)
{
SongMenus[htSongMenus(SongMenu)].SetSelectedSong(CSongs.GetRandomSong());
}
- else if (CSongs.Category == -1 && KeyEvent.Mod == Modifier.Ctrl)
+ else if (CSongs.Category == -1 && KeyEvent.Mod == EModifier.Ctrl)
{
SongMenus[htSongMenus(SongMenu)].SetSelectedCategory(CSongs.GetRandomCategory());
}
diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj
index 156dd856..6110d5a7 100644
--- a/Vocaluxe/Vocaluxe.csproj
+++ b/Vocaluxe/Vocaluxe.csproj
@@ -152,7 +152,6 @@
..\Output\OpenTK.GLControl.dll
-
@@ -167,6 +166,7 @@
+
@@ -189,6 +189,10 @@
Form
+
+
+
+