From 82d1eb8ff390415004f63aea4d5e43b9b62e126d Mon Sep 17 00:00:00 2001 From: Florian Kuepper Date: Sun, 16 Dec 2012 11:24:55 +0100 Subject: [PATCH] Added some stuff to challenge-names. Still a lot to do (fix NameSelection-Element for party-mode!) --- .../Code/PartyScreenChallengeNames.cs | 231 ++++++++++++++++-- .../PartyScreenChallengeNames.cs | 231 ++++++++++++++++-- 2 files changed, 417 insertions(+), 45 deletions(-) diff --git a/Output/PartyModes/Challenge/Code/PartyScreenChallengeNames.cs b/Output/PartyModes/Challenge/Code/PartyScreenChallengeNames.cs index 0e4d4420..1c525512 100644 --- a/Output/PartyModes/Challenge/Code/PartyScreenChallengeNames.cs +++ b/Output/PartyModes/Challenge/Code/PartyScreenChallengeNames.cs @@ -16,10 +16,20 @@ namespace Vocaluxe.PartyModes const string ButtonBack = "ButtonBack"; const string NameSelection = "NameSelection"; + private CStatic chooseAvatarStatic; private List PlayerButtons; + private bool SelectingMouseActive = false; + private bool SelectingKeyboardActive = false; + private bool SelectingKeyboardUnendless = false; + private int OldMouseX = 0; + private int OldMouseY = 0; + private int SelectedPlayerNr = -1; + private int SelectingKeyboardPlayerNr = -1; //TODO: Get this data from party-mode! - private int NumPlayers = 10; + private int NumPlayers = 5; + private int[] ProfileIDs; + private DataFromScreen Data; @@ -31,6 +41,9 @@ namespace Vocaluxe.PartyModes { base.Init(); + chooseAvatarStatic = GetNewStatic(); + chooseAvatarStatic.Visible = false; + PlayerButtons = new List(); for (int i = 1; i <= _PartyMode.GetMaxPlayer(); i++) { @@ -63,29 +76,111 @@ namespace Vocaluxe.PartyModes { base.HandleInput(KeyEvent); - if (KeyEvent.KeyPressed) - { - - } - else + /** + //Check if selecting with keyboard is active + if (SelectingKeyboardActive) { + //Handle left/right/up/down + //TODO: Fix NameSelection for PartyMode + NameSelections[htNameSelections(NameSelection)].HandleInput(KeyEvent); switch (KeyEvent.Key) { - case Keys.Back: - case Keys.Escape: - Back(); - break; - case Keys.Enter: - if (Buttons[htButtons(ButtonBack)].Selected) - Back(); - - if (Buttons[htButtons(ButtonNext)].Selected) - Next(); - - break; - } + //Check, if a player is selected + if (NameSelections[htNameSelections(NameSelection)].Selection > -1) + { + SelectedPlayerNr = NameSelections[htNameSelections(NameSelection)].Selection; + //TODO: Update texture and name + //Buttons[htButtons(PlayerButtons[i])]. = chooseAvatarStatic.Texture; + //Buttons[htButtons(PlayerButtons[i])].Text.Text = CProfiles.Profiles[SelectedPlayerNr].PlayerName; + //Add Player-ID to list. + ProfileIDs[SelectingKeyboardPlayerNr] = SelectedPlayerNr; + UpdateNextButton(); + //Update Tiles-List + NameSelections[htNameSelections(NameSelection)].UpdateList(); + if(PlayerButtons.Count > SelectingKeyboardPlayerNr) + SetInteractionToButton(Buttons[htButtons(PlayerButtons[SelectingKeyboardPlayerNr + 1])]); + } + //Started selecting with 'P' + if (SelectingKeyboardUnendless) + { + if (SelectingKeyboardPlayerNr == NumPlayers) + { + //Reset all values + SelectingKeyboardPlayerNr = 0; + SelectingKeyboardActive = false; + NameSelections[htNameSelections(NameSelection)].KeyboardSelection(false, -1); + } + else + { + SelectingKeyboardPlayerNr++; + NameSelections[htNameSelections(NameSelection)].KeyboardSelection(true, SelectingKeyboardPlayerNr); + } + } + else + { + //Reset all values + SelectingKeyboardPlayerNr = 0; + SelectingKeyboardActive = false; + NameSelections[htNameSelections(NameSelection)].KeyboardSelection(false, -1); + } + break; } + + else + { + **/ + + if (KeyEvent.KeyPressed) + { + + } + else + { + switch (KeyEvent.Key) + { + case Keys.Back: + case Keys.Escape: + Back(); + break; + + case Keys.Enter: + if (Buttons[htButtons(ButtonBack)].Selected) + Back(); + + if (Buttons[htButtons(ButtonNext)].Selected) + Next(); + + for (int i = 0; i < PlayerButtons.Count; i++) + { + if (Buttons[htButtons(PlayerButtons[i])].Selected) + { + //KeyboardSelectPlayerNr = i; + //selectingKeyboardActive = true; + //NameSelections[htNameSelections(NameSelection)].KeyboardSelection(true, i); + } + } + break; + /** + case Keys.P: + if (!SelectingKeyboardActive) + { + SelectingKeyboardPlayerNr = 1; + SelectingKeyboardUnendless = true; + } + else + { + if (SelectingKeyboardPlayerNr + 1 <= NumPlayers) + SelectingKeyboardPlayerNr++; + else + SelectingKeyboardPlayerNr = 1; + NameSelections[htNameSelections(NameSelection)].KeyboardSelection(true, SelectingKeyboardPlayerNr); + } + break; + **/ + } + } + //} return true; } @@ -93,6 +188,78 @@ namespace Vocaluxe.PartyModes { base.HandleMouse(MouseEvent); + //Check if LeftButton is hold and Select-Mode inactive + if (MouseEvent.LBH && !SelectingMouseActive) + { + //Save mouse-coords + OldMouseX = MouseEvent.X; + OldMouseY = MouseEvent.Y; + //Check if mouse if over tile + if (NameSelections[htNameSelections(NameSelection)].isOverTile(MouseEvent)) + { + //Get player-number of tile + SelectedPlayerNr = NameSelections[htNameSelections(NameSelection)].TilePlayerNr(MouseEvent); + if (SelectedPlayerNr != -1) + { + //Activate mouse-selecting + SelectingMouseActive = true; + + //Update of Drag/Drop-Texture + CStatic SelectedPlayer = NameSelections[htNameSelections(NameSelection)].TilePlayerAvatar(MouseEvent); + chooseAvatarStatic.Visible = true; + chooseAvatarStatic.Rect = SelectedPlayer.Rect; + //TODO: Get nearest z-value! + //chooseAvatarStatic.Rect.Z = CSettings.zNear; + chooseAvatarStatic.Rect.Z = -100; + chooseAvatarStatic.Color = new SColorF(1, 1, 1, 1); + chooseAvatarStatic.Texture = SelectedPlayer.Texture; + } + } + } + + //Check if LeftButton is hold and Select-Mode active + if (MouseEvent.LBH && SelectingMouseActive) + { + //Update coords for Drag/Drop-Texture + chooseAvatarStatic.Rect.X += (MouseEvent.X - OldMouseX); + chooseAvatarStatic.Rect.Y += (MouseEvent.Y - OldMouseY); + OldMouseX = MouseEvent.X; + OldMouseY = MouseEvent.Y; + } + // LeftButton isn't hold anymore, but Selec-Mode is still active -> "Drop" of Avatar + else if (SelectingMouseActive) + { + //Check if really a player was selected + if (SelectedPlayerNr != -1) + { + //Foreach Drop-Area + for (int i = 0; i < PlayerButtons.Count; i++) + { + //Check first, if area is "active" + if (Buttons[htButtons(PlayerButtons[i])].Visible == true) + { + //Check if Mouse is in area + if (CHelper.IsInBounds(Buttons[htButtons(PlayerButtons[i])].Rect, MouseEvent)) + { + //Add Player-ID to list. + ProfileIDs[i] = SelectedPlayerNr; + UpdateNextButton(); + //TODO: Update texture and name + //Buttons[htButtons(PlayerButtons[i])]. = chooseAvatarStatic.Texture; + //Buttons[htButtons(PlayerButtons[i])].Text.Text = CProfiles.Profiles[SelectedPlayerNr].PlayerName; + Buttons[htButtons(PlayerButtons[i])].Text.Text = "Gesetzt"; + //Update Tiles-List + NameSelections[htNameSelections(NameSelection)].UpdateList(); + } + } + } + SelectedPlayerNr = -1; + } + //Reset variables + SelectingMouseActive = false; + chooseAvatarStatic.Visible = false; + } + if (MouseEvent.LB && IsMouseOver(MouseEvent)) { if (Buttons[htButtons(ButtonBack)].Selected) @@ -113,9 +280,12 @@ namespace Vocaluxe.PartyModes public override void OnShow() { base.OnShow(); - Buttons[htButtons(ButtonBack)].Text.Text = _PartyMode.GetMaxPlayer().ToString(); - /** - for (int i = 1; i <= _PartyMode.GetMaxPlayer(); i++) + + ProfileIDs = new int[NumPlayers]; + for (int i = 0; i < ProfileIDs.Length; i++ ) + ProfileIDs[i] = -1; + + for (int i = 1; i <= PlayerButtons.Count; i++) { Buttons[htButtons("ButtonPlayer" + i)].Text.Text = "Player " + i; if (i <= NumPlayers) @@ -123,8 +293,10 @@ namespace Vocaluxe.PartyModes else Buttons[htButtons("ButtonPlayer" + i)].Visible = false; } - **/ + NameSelections[htNameSelections(NameSelection)].Init(); + + UpdateNextButton(); } public override bool UpdateGame() @@ -135,6 +307,8 @@ namespace Vocaluxe.PartyModes public override bool Draw() { base.Draw(); + if (chooseAvatarStatic.Visible) + chooseAvatarStatic.Draw(); return true; } @@ -150,8 +324,19 @@ namespace Vocaluxe.PartyModes _PartyMode.DataFromScreen(_ThemeName, Data); } + private void UpdateNextButton() + { + Buttons[htButtons(ButtonNext)].Visible = true; + for (int i = 0; i < ProfileIDs.Length; i++) + if (ProfileIDs[i] == -1) + Buttons[htButtons(ButtonNext)].Visible = false; + } + private void Next() { + List list = new List(); + list.AddRange(ProfileIDs); + Data.ScreenNames.ProfileIDs = list; Data.ScreenNames.FadeToConfig = false; Data.ScreenNames.FadeToMain = true; _PartyMode.DataFromScreen(_ThemeName, Data); diff --git a/PartyModeChallenge/PartyScreenChallengeNames.cs b/PartyModeChallenge/PartyScreenChallengeNames.cs index e0d093bd..39cedd9b 100644 --- a/PartyModeChallenge/PartyScreenChallengeNames.cs +++ b/PartyModeChallenge/PartyScreenChallengeNames.cs @@ -16,10 +16,20 @@ namespace Vocaluxe.PartyModes const string ButtonBack = "ButtonBack"; const string NameSelection = "NameSelection"; + private CStatic chooseAvatarStatic; private List PlayerButtons; + private bool SelectingMouseActive = false; + private bool SelectingKeyboardActive = false; + private bool SelectingKeyboardUnendless = false; + private int OldMouseX = 0; + private int OldMouseY = 0; + private int SelectedPlayerNr = -1; + private int SelectingKeyboardPlayerNr = -1; //TODO: Get this data from party-mode! - private int NumPlayers = 10; + private int NumPlayers = 5; + private int[] ProfileIDs; + private DataFromScreen Data; @@ -31,6 +41,9 @@ namespace Vocaluxe.PartyModes { base.Init(); + chooseAvatarStatic = GetNewStatic(); + chooseAvatarStatic.Visible = false; + PlayerButtons = new List(); for (int i = 1; i <= _PartyMode.GetMaxPlayer(); i++) { @@ -63,29 +76,111 @@ namespace Vocaluxe.PartyModes { base.HandleInput(KeyEvent); - if (KeyEvent.KeyPressed) - { - - } - else + /** + //Check if selecting with keyboard is active + if (SelectingKeyboardActive) { + //Handle left/right/up/down + //TODO: Fix NameSelection for PartyMode + NameSelections[htNameSelections(NameSelection)].HandleInput(KeyEvent); switch (KeyEvent.Key) { - case Keys.Back: - case Keys.Escape: - Back(); - break; - case Keys.Enter: - if (Buttons[htButtons(ButtonBack)].Selected) - Back(); - - if (Buttons[htButtons(ButtonNext)].Selected) - Next(); - - break; - } + //Check, if a player is selected + if (NameSelections[htNameSelections(NameSelection)].Selection > -1) + { + SelectedPlayerNr = NameSelections[htNameSelections(NameSelection)].Selection; + //TODO: Update texture and name + //Buttons[htButtons(PlayerButtons[i])]. = chooseAvatarStatic.Texture; + //Buttons[htButtons(PlayerButtons[i])].Text.Text = CProfiles.Profiles[SelectedPlayerNr].PlayerName; + //Add Player-ID to list. + ProfileIDs[SelectingKeyboardPlayerNr] = SelectedPlayerNr; + UpdateNextButton(); + //Update Tiles-List + NameSelections[htNameSelections(NameSelection)].UpdateList(); + if(PlayerButtons.Count > SelectingKeyboardPlayerNr) + SetInteractionToButton(Buttons[htButtons(PlayerButtons[SelectingKeyboardPlayerNr + 1])]); + } + //Started selecting with 'P' + if (SelectingKeyboardUnendless) + { + if (SelectingKeyboardPlayerNr == NumPlayers) + { + //Reset all values + SelectingKeyboardPlayerNr = 0; + SelectingKeyboardActive = false; + NameSelections[htNameSelections(NameSelection)].KeyboardSelection(false, -1); + } + else + { + SelectingKeyboardPlayerNr++; + NameSelections[htNameSelections(NameSelection)].KeyboardSelection(true, SelectingKeyboardPlayerNr); + } + } + else + { + //Reset all values + SelectingKeyboardPlayerNr = 0; + SelectingKeyboardActive = false; + NameSelections[htNameSelections(NameSelection)].KeyboardSelection(false, -1); + } + break; } + + else + { + **/ + + if (KeyEvent.KeyPressed) + { + + } + else + { + switch (KeyEvent.Key) + { + case Keys.Back: + case Keys.Escape: + Back(); + break; + + case Keys.Enter: + if (Buttons[htButtons(ButtonBack)].Selected) + Back(); + + if (Buttons[htButtons(ButtonNext)].Selected) + Next(); + + for (int i = 0; i < PlayerButtons.Count; i++) + { + if (Buttons[htButtons(PlayerButtons[i])].Selected) + { + //KeyboardSelectPlayerNr = i; + //selectingKeyboardActive = true; + //NameSelections[htNameSelections(NameSelection)].KeyboardSelection(true, i); + } + } + break; + /** + case Keys.P: + if (!SelectingKeyboardActive) + { + SelectingKeyboardPlayerNr = 1; + SelectingKeyboardUnendless = true; + } + else + { + if (SelectingKeyboardPlayerNr + 1 <= NumPlayers) + SelectingKeyboardPlayerNr++; + else + SelectingKeyboardPlayerNr = 1; + NameSelections[htNameSelections(NameSelection)].KeyboardSelection(true, SelectingKeyboardPlayerNr); + } + break; + **/ + } + } + //} return true; } @@ -93,6 +188,79 @@ namespace Vocaluxe.PartyModes { base.HandleMouse(MouseEvent); + //Check if LeftButton is hold and Select-Mode inactive + if (MouseEvent.LBH && !SelectingMouseActive) + { + //Save mouse-coords + OldMouseX = MouseEvent.X; + OldMouseY = MouseEvent.Y; + //Check if mouse if over tile + if (NameSelections[htNameSelections(NameSelection)].isOverTile(MouseEvent)) + { + //Get player-number of tile + SelectedPlayerNr = NameSelections[htNameSelections(NameSelection)].TilePlayerNr(MouseEvent); + if (SelectedPlayerNr != -1) + { + //Activate mouse-selecting + SelectingMouseActive = true; + + //Update of Drag/Drop-Texture + CStatic SelectedPlayer = NameSelections[htNameSelections(NameSelection)].TilePlayerAvatar(MouseEvent); + chooseAvatarStatic.Visible = true; + chooseAvatarStatic.Rect = SelectedPlayer.Rect; + //TODO: Get nearest z-value! + //chooseAvatarStatic.Rect.Z = CSettings.zNear; + chooseAvatarStatic.Rect.Z = -100; + chooseAvatarStatic.Color = new SColorF(1, 1, 1, 1); + chooseAvatarStatic.Texture = SelectedPlayer.Texture; + } + } + } + + //Check if LeftButton is hold and Select-Mode active + if (MouseEvent.LBH && SelectingMouseActive) + { + //Update coords for Drag/Drop-Texture + chooseAvatarStatic.Rect.X += (MouseEvent.X - OldMouseX); + chooseAvatarStatic.Rect.Y += (MouseEvent.Y - OldMouseY); + OldMouseX = MouseEvent.X; + OldMouseY = MouseEvent.Y; + } + // LeftButton isn't hold anymore, but Selec-Mode is still active -> "Drop" of Avatar + else if (SelectingMouseActive) + { + //Check if really a player was selected + if (SelectedPlayerNr != -1) + { + //Foreach Drop-Area + for (int i = 0; i < PlayerButtons.Count; i++) + { + //Check first, if area is "active" + if (Buttons[htButtons(PlayerButtons[i])].Visible == true) + { + //Check if Mouse is in area + if (CHelper.IsInBounds(Buttons[htButtons(PlayerButtons[i])].Rect, MouseEvent)) + { + //Add Player-ID to list. + ProfileIDs[i] = SelectedPlayerNr; + UpdateNextButton(); + //TODO: Update texture and name + //Buttons[htButtons(PlayerButtons[i])]. = chooseAvatarStatic.Texture; + //Buttons[htButtons(PlayerButtons[i])].Text.Text = CProfiles.Profiles[SelectedPlayerNr].PlayerName; + //TODO: Just for testing, remove. + Buttons[htButtons(PlayerButtons[i])].Text.Text = "Gesetzt"; + //Update Tiles-List + NameSelections[htNameSelections(NameSelection)].UpdateList(); + } + } + } + SelectedPlayerNr = -1; + } + //Reset variables + SelectingMouseActive = false; + chooseAvatarStatic.Visible = false; + } + if (MouseEvent.LB && IsMouseOver(MouseEvent)) { if (Buttons[htButtons(ButtonBack)].Selected) @@ -113,8 +281,12 @@ namespace Vocaluxe.PartyModes public override void OnShow() { base.OnShow(); - /** - for (int i = 1; i <= _PartyMode.GetMaxPlayer(); i++) + + ProfileIDs = new int[NumPlayers]; + for (int i = 0; i < ProfileIDs.Length; i++ ) + ProfileIDs[i] = -1; + + for (int i = 1; i <= PlayerButtons.Count; i++) { Buttons[htButtons("ButtonPlayer" + i)].Text.Text = "Player " + i; if (i <= NumPlayers) @@ -122,8 +294,10 @@ namespace Vocaluxe.PartyModes else Buttons[htButtons("ButtonPlayer" + i)].Visible = false; } - **/ + NameSelections[htNameSelections(NameSelection)].Init(); + + UpdateNextButton(); } public override bool UpdateGame() @@ -134,6 +308,8 @@ namespace Vocaluxe.PartyModes public override bool Draw() { base.Draw(); + if (chooseAvatarStatic.Visible) + chooseAvatarStatic.Draw(); return true; } @@ -149,8 +325,19 @@ namespace Vocaluxe.PartyModes _PartyMode.DataFromScreen(_ThemeName, Data); } + private void UpdateNextButton() + { + Buttons[htButtons(ButtonNext)].Visible = true; + for (int i = 0; i < ProfileIDs.Length; i++) + if (ProfileIDs[i] == -1) + Buttons[htButtons(ButtonNext)].Visible = false; + } + private void Next() { + List list = new List(); + list.AddRange(ProfileIDs); + Data.ScreenNames.ProfileIDs = list; Data.ScreenNames.FadeToConfig = false; Data.ScreenNames.FadeToMain = true; _PartyMode.DataFromScreen(_ThemeName, Data);