using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using Vocaluxe.Menu; namespace Vocaluxe.PartyModes { public class PartyScreenChallengeNames : CMenuParty { // Version number for theme files. Increment it, if you've changed something on the theme files! const int ScreenVersion = 1; const string ButtonNext = "ButtonNext"; const string ButtonBack = "ButtonBack"; const string ButtonPlayerDestination = "ButtonPlayerDestination"; const string ButtonPlayerChoose = "ButtonPlayerChoose"; private List PlayerChooseButtons; private List PlayerDestinationButtons; //PlayerDestinationButtons-Option private const int PlayerDestinationButtonsNumH = 3; private const int PlayerDestinationButtonsNumW = 4; private const int PlayerDestinationButtonsFirstX = 900; private const int PlayerDestinationButtonsFirstY = 105; private const int PlayerDestinationButtonsSpaceH = 15; private const int PlayerDestinationButtonsSpaceW = 25; //PlayerChooseButtons-Option private List PlayerChooseButtonsVisibleProfiles; private const int PlayerChooseButtonsNumH = 7; private const int PlayerChooseButtonsNumW = 4; private const int PlayerChooseButtonsFirstX = 52; private const int PlayerChooseButtonsFirstY = 105; private const int PlayerChooseButtonsSpaceH = 15; private const int PlayerChooseButtonsSpaceW = 25; private int PlayerChooseButtonsOffset = 0; private CStatic chooseAvatarStatic; private bool SelectingMouseActive = false; private int OldMouseX = 0; private int OldMouseY = 0; private int SelectedPlayerNr = -1; private bool ButtonsAdded = false; private int NumPlayer = 4; private DataFromScreen Data; private class CPlayerChooseButton { public CButton Button; public int ProfileID; } public PartyScreenChallengeNames() { } protected override void Init() { base.Init(); chooseAvatarStatic = GetNewStatic(); chooseAvatarStatic.Visible = false; PlayerChooseButtonsVisibleProfiles = new List(); Data.ScreenNames.ProfileIDs = new List(); _ThemeName = "PartyScreenChallengeNames"; List buttons = new List(); _ThemeButtons = new string[] { ButtonBack, ButtonNext, ButtonPlayerDestination, ButtonPlayerChoose }; _ScreenVersion = ScreenVersion; Data = new DataFromScreen(); FromScreenNames names = new FromScreenNames(); names.FadeToConfig = false; names.FadeToMain = false; names.ProfileIDs = new List(); Data.ScreenNames = names; } public override void LoadTheme(string XmlPath) { base.LoadTheme(XmlPath); } public override void DataToScreen(object ReceivedData) { DataToScreenNames config = new DataToScreenNames(); try { config = (DataToScreenNames)ReceivedData; Data.ScreenNames.ProfileIDs = config.ProfileIDs; if (Data.ScreenNames.ProfileIDs == null) Data.ScreenNames.ProfileIDs = new List(); NumPlayer = config.NumPlayer; while (Data.ScreenNames.ProfileIDs.Count > NumPlayer) { Data.ScreenNames.ProfileIDs.RemoveAt(Data.ScreenNames.ProfileIDs.Count - 1); } } catch (Exception e) { _Base.Log.LogError("Error in party mode screen challenge names. Can't cast received data from game mode " + _ThemeName + ". " + e.Message); ; } } public override bool HandleInput(KeyEvent KeyEvent) { base.HandleInput(KeyEvent); 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(); if (!OnAdd()) OnRemove(); break; case Keys.Delete: OnRemove(); break; } } return true; } public override bool HandleMouse(MouseEvent MouseEvent) { 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 for (int i = 0; i < PlayerChooseButtons.Count; i++) { if (PlayerChooseButtons[i].Button.Selected) { SelectedPlayerNr = PlayerChooseButtons[i].ProfileID; if (SelectedPlayerNr != -1) { //Activate mouse-selecting SelectingMouseActive = true; //Update of Drag/Drop-Texture chooseAvatarStatic.Visible = true; chooseAvatarStatic.Rect = PlayerChooseButtons[i].Button.Rect; chooseAvatarStatic.Rect.Z = -100; chooseAvatarStatic.Color = new SColorF(1, 1, 1, 1); chooseAvatarStatic.Texture = _Base.Profiles.GetProfiles()[SelectedPlayerNr].Avatar.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 < PlayerDestinationButtons.Count; i++) { //Check first, if area is "active" if (PlayerDestinationButtons[i].Visible == true) { //Check if Mouse is in area if (CHelper.IsInBounds(PlayerDestinationButtons[i].Rect, MouseEvent)) { int added = -1; //Add Player-ID to list. if (Data.ScreenNames.ProfileIDs.Count < (i + 1)) { Data.ScreenNames.ProfileIDs.Add(SelectedPlayerNr); added = Data.ScreenNames.ProfileIDs.Count - 1; } else if (Data.ScreenNames.ProfileIDs.Count >= (i + 1)) { Data.ScreenNames.ProfileIDs[i] = SelectedPlayerNr; added = i; } UpdateButtonNext(); //Update texture and name PlayerDestinationButtons[added].Color = new SColorF(1, 1, 1, 0.6f); PlayerDestinationButtons[added].SColor = new SColorF(1, 1, 1, 1); PlayerDestinationButtons[added].Texture = chooseAvatarStatic.Texture; PlayerDestinationButtons[added].STexture = chooseAvatarStatic.Texture; PlayerDestinationButtons[added].Text.Text = _Base.Profiles.GetProfiles()[SelectedPlayerNr].PlayerName; //Update Tiles-List UpdateButtonPlayerChoose(); } } } SelectedPlayerNr = -1; } //Reset variables SelectingMouseActive = false; chooseAvatarStatic.Visible = false; } if (MouseEvent.LB && IsMouseOver(MouseEvent)) { if (Buttons[htButtons(ButtonBack)].Selected) Back(); if (Buttons[htButtons(ButtonNext)].Selected) Next(); if (!OnAdd()) OnRemove(); } if (MouseEvent.RB) { Back(); } return true; } public override void OnShow() { base.OnShow(); if (!ButtonsAdded) { AddButtonPlayerDestination(); AddButtonPlayerChoose(); ButtonsAdded = true; } UpdateButtonPlayerDestination(); UpdateButtonPlayerChoose(); UpdateButtonNext(); } public override bool UpdateGame() { return true; } public override bool Draw() { base.Draw(); if (chooseAvatarStatic.Visible) chooseAvatarStatic.Draw(); return true; } public override void OnClose() { base.OnClose(); } private void AddButtonPlayerDestination() { Buttons[htButtons(ButtonPlayerDestination)].Visible = false; PlayerDestinationButtons = new List(); int row = 0; int column = 0; for (int i = 1; i <= _PartyMode.GetMaxPlayer(); i++) { CButton b = GetNewButton(Buttons[htButtons(ButtonPlayerDestination)]); b.Rect.X = PlayerDestinationButtonsFirstX + column * (b.Rect.W + PlayerDestinationButtonsSpaceH); b.Rect.Y = PlayerDestinationButtonsFirstY + row * (b.Rect.H + PlayerDestinationButtonsSpaceW); PlayerDestinationButtons.Add(b); column++; if (column >= PlayerDestinationButtonsNumH) { row++; column = 0; } b.Visible = true; b.Enabled = false; AddButton(b); } } private void AddButtonPlayerChoose() { Buttons[htButtons(ButtonPlayerChoose)].Visible = false; PlayerChooseButtons = new List(); int row = 0; int column = 0; for (int i = 1; i <= PlayerChooseButtonsNumH * PlayerChooseButtonsNumW; i++) { CButton b = GetNewButton(Buttons[htButtons(ButtonPlayerChoose)]); b.Rect.X = PlayerChooseButtonsFirstX + column * (b.Rect.W + PlayerChooseButtonsSpaceH); b.Rect.Y = PlayerChooseButtonsFirstY + row * (b.Rect.H + PlayerChooseButtonsSpaceW); CPlayerChooseButton pcb = new CPlayerChooseButton(); pcb.Button = b; pcb.ProfileID = -1; PlayerChooseButtons.Add(pcb); column++; if (column >= PlayerChooseButtonsNumH) { row++; column = 0; } b.Visible = true; b.Enabled = false; AddButton(b); } } private void UpdateButtonPlayerChoose() { UpdateVisibleProfiles(); if ((PlayerChooseButtonsNumW * PlayerChooseButtonsNumH) * (PlayerChooseButtonsOffset + 1) - PlayerChooseButtonsVisibleProfiles.Count >= (PlayerChooseButtonsNumW * PlayerChooseButtonsNumH) * PlayerChooseButtonsOffset) { UpdateButtonPlayerChoose(PlayerChooseButtonsOffset - 1); } else { UpdateButtonPlayerChoose(PlayerChooseButtonsOffset); } } private void UpdateButtonPlayerChoose(int Offset) { int NumButtonPlayerChoose = PlayerChooseButtonsNumW * PlayerChooseButtonsNumH; if (Offset < 0) Offset = 0; if (NumButtonPlayerChoose * (Offset + 1) - PlayerChooseButtonsVisibleProfiles.Count <= NumButtonPlayerChoose) { for (int i = 0; i < NumButtonPlayerChoose; i++) { if ((i + Offset * NumButtonPlayerChoose) < PlayerChooseButtonsVisibleProfiles.Count) { PlayerChooseButtons[i].ProfileID = PlayerChooseButtonsVisibleProfiles[i + Offset * NumButtonPlayerChoose]; PlayerChooseButtons[i].Button.Text.Text = _Base.Profiles.GetProfiles()[PlayerChooseButtonsVisibleProfiles[i + Offset * NumButtonPlayerChoose]].PlayerName; PlayerChooseButtons[i].Button.Texture = _Base.Profiles.GetProfiles()[PlayerChooseButtonsVisibleProfiles[i + Offset * NumButtonPlayerChoose]].Avatar.Texture; PlayerChooseButtons[i].Button.STexture = _Base.Profiles.GetProfiles()[PlayerChooseButtonsVisibleProfiles[i + Offset * NumButtonPlayerChoose]].Avatar.Texture; PlayerChooseButtons[i].Button.Color = new SColorF(1, 1, 1, 0.6f); PlayerChooseButtons[i].Button.SColor = new SColorF(1, 1, 1, 1); PlayerChooseButtons[i].Button.Enabled = true; } else { PlayerChooseButtons[i].ProfileID = -1; PlayerChooseButtons[i].Button.Text.Text = String.Empty; PlayerChooseButtons[i].Button.Texture = Buttons[htButtons(ButtonPlayerChoose)].Texture; PlayerChooseButtons[i].Button.STexture = Buttons[htButtons(ButtonPlayerChoose)].STexture; PlayerChooseButtons[i].Button.Color = Buttons[htButtons(ButtonPlayerChoose)].Color; PlayerChooseButtons[i].Button.SColor = Buttons[htButtons(ButtonPlayerChoose)].SColor; PlayerChooseButtons[i].Button.Enabled = false; } } } } private void UpdateVisibleProfiles() { PlayerChooseButtonsVisibleProfiles.Clear(); for (int i = 0; i < _Base.Profiles.GetProfiles().Length; i++) { bool visible = false; //Show profile only if active if (_Base.Profiles.GetProfiles()[i].Active == EOffOn.TR_CONFIG_ON) { visible = true; for (int p = 0; p < Data.ScreenNames.ProfileIDs.Count; p++) { //Don't show profile if is selected if (Data.ScreenNames.ProfileIDs[p] == i) { visible = false; break; } } } if (visible) { PlayerChooseButtonsVisibleProfiles.Add(i); } } } private void UpdateButtonPlayerDestination() { for (int i = 0; i < PlayerDestinationButtons.Count; i++) { if (NumPlayer > i) { PlayerDestinationButtons[i].Visible = true; PlayerDestinationButtons[i].Enabled = true; } else { PlayerDestinationButtons[i].Visible = false; PlayerDestinationButtons[i].Enabled = false; } } for (int i = 0; i < NumPlayer; i++) { if (i < Data.ScreenNames.ProfileIDs.Count) { if (Data.ScreenNames.ProfileIDs[i] != -1) { PlayerDestinationButtons[i].Color = new SColorF(1, 1, 1, 0.6f); PlayerDestinationButtons[i].SColor = new SColorF(1, 1, 1, 1); PlayerDestinationButtons[i].Texture = _Base.Profiles.GetProfiles()[Data.ScreenNames.ProfileIDs[i]].Avatar.Texture; PlayerDestinationButtons[i].STexture = _Base.Profiles.GetProfiles()[Data.ScreenNames.ProfileIDs[i]].Avatar.Texture; PlayerDestinationButtons[i].Text.Text = _Base.Profiles.GetProfiles()[Data.ScreenNames.ProfileIDs[i]].PlayerName; PlayerDestinationButtons[i].Enabled = true; } } else { PlayerDestinationButtons[i].Color = Buttons[htButtons(ButtonPlayerDestination)].Color; PlayerDestinationButtons[i].SColor = Buttons[htButtons(ButtonPlayerDestination)].SColor; PlayerDestinationButtons[i].Texture = Buttons[htButtons(ButtonPlayerDestination)].Texture; PlayerDestinationButtons[i].STexture = Buttons[htButtons(ButtonPlayerDestination)].STexture; PlayerDestinationButtons[i].Text.Text = String.Empty; PlayerDestinationButtons[i].Enabled = false; } } } private void UpdateButtonNext() { if (Data.ScreenNames.ProfileIDs.Count == NumPlayer) { Buttons[htButtons(ButtonNext)].Visible = true; SetInteractionToButton(Buttons[htButtons(ButtonNext)]); } else Buttons[htButtons(ButtonNext)].Visible = false; } private bool OnAdd() { for (int i = 0; i < PlayerChooseButtons.Count; i++) { if (PlayerChooseButtons[i].Button.Selected && PlayerChooseButtons[i].ProfileID != -1) { if (Data.ScreenNames.ProfileIDs.Count < NumPlayer) { Data.ScreenNames.ProfileIDs.Add(PlayerChooseButtons[i].ProfileID); int added = Data.ScreenNames.ProfileIDs.Count - 1; UpdateButtonNext(); //Update texture and name PlayerDestinationButtons[added].Color = new SColorF(1, 1, 1, 0.6f); PlayerDestinationButtons[added].SColor = new SColorF(1, 1, 1, 1); PlayerDestinationButtons[added].Texture = _Base.Profiles.GetProfiles()[PlayerChooseButtons[i].ProfileID].Avatar.Texture; PlayerDestinationButtons[added].STexture = _Base.Profiles.GetProfiles()[PlayerChooseButtons[i].ProfileID].Avatar.Texture; PlayerDestinationButtons[added].Text.Text = _Base.Profiles.GetProfiles()[PlayerChooseButtons[i].ProfileID].PlayerName; PlayerDestinationButtons[added].Enabled = true; //Update Tiles-List UpdateButtonPlayerChoose(); CheckInteraction(); return true; } } } return false; } private bool OnRemove() { for (int i = 0; i < PlayerDestinationButtons.Count; i++) { if (PlayerDestinationButtons[i].Selected) { if ((i + 1) <= Data.ScreenNames.ProfileIDs.Count) { Data.ScreenNames.ProfileIDs.RemoveAt(i); UpdateButtonNext(); UpdateButtonPlayerDestination(); UpdateButtonPlayerChoose(); CheckInteraction(); return true; } } } return false; } private void Back() { Data.ScreenNames.FadeToConfig = true; Data.ScreenNames.FadeToMain = false; _PartyMode.DataFromScreen(_ThemeName, Data); } private void Next() { Data.ScreenNames.FadeToConfig = false; Data.ScreenNames.FadeToMain = true; _PartyMode.DataFromScreen(_ThemeName, Data); } } }