public TextInputDialog(string prompt, int maxInputChars = 12) { bgTexture = ((EOGame)Game).GFXManager.TextureFromResource(GFXTypes.PostLoginUI, 54); _setSize(bgTexture.Width, bgTexture.Height); XNALabel lblPrompt = new XNALabel(new Rectangle(16, 20, 235, 49), Constants.FontSize10) { AutoSize = false, ForeColor = Constants.LightGrayDialogMessage, TextWidth = 230, RowSpacing = 3, Text = prompt }; lblPrompt.SetParent(this); //set this back once the dialog is closed. previousSubscriber = ((EOGame)Game).Dispatcher.Subscriber; DialogClosing += (o, e) => ((EOGame)Game).Dispatcher.Subscriber = previousSubscriber; m_inputBox = new XNATextBox(new Rectangle(37, 74, 192, 19), EOGame.Instance.Content.Load<Texture2D>("cursor"), Constants.FontSize08) { MaxChars = maxInputChars, LeftPadding = 4, TextColor = Constants.LightBeigeText }; m_inputBox.SetParent(this); EOGame.Instance.Dispatcher.Subscriber = m_inputBox; XNAButton ok = new XNAButton(smallButtonSheet, new Vector2(41, 103), _getSmallButtonOut(SmallButton.Ok), _getSmallButtonOver(SmallButton.Ok)), cancel = new XNAButton(smallButtonSheet, new Vector2(134, 103), _getSmallButtonOut(SmallButton.Cancel), _getSmallButtonOver(SmallButton.Cancel)); ok.OnClick += (o, e) => Close(ok, XNADialogResult.OK); cancel.OnClick += (o, e) => Close(cancel, XNADialogResult.Cancel); ok.SetParent(this); cancel.SetParent(this); Center(Game.GraphicsDevice); DrawLocation = new Vector2(DrawLocation.X, 107); endConstructor(false); }
/// <summary> /// Create a new item transfer dialog /// </summary> /// <param name="itemName">Name of the item to be displayed</param> /// <param name="transferType">Which transfer is being done (controls title)</param> /// <param name="totalAmount">Maximum amount that can be transferred</param> /// <param name="message">Resource ID of message to control displayed text</param> public ItemTransferDialog(string itemName, TransferType transferType, int totalAmount, DATCONST2 message = DATCONST2.DIALOG_TRANSFER_DROP) { _validateMessage(message); Texture2D weirdSpriteSheet = ((EOGame)Game).GFXManager.TextureFromResource(GFXTypes.PostLoginUI, 27); Rectangle sourceArea = new Rectangle(38, 0, 265, 170); //get bgTexture Color[] textureData = new Color[sourceArea.Width * sourceArea.Height]; bgTexture = new Texture2D(Game.GraphicsDevice, sourceArea.Width, sourceArea.Height); weirdSpriteSheet.GetData(0, sourceArea, textureData, 0, textureData.Length); bgTexture.SetData(textureData); //get the title bar - for when it isn't drop items if (transferType != TransferType.DropItems) { Rectangle titleBarArea = new Rectangle(40, 172 + ((int)transferType - 1) * 24, 241, 22); Color[] titleBarData = new Color[titleBarArea.Width * titleBarArea.Height]; m_titleBarGfx = new Texture2D(Game.GraphicsDevice, titleBarArea.Width, titleBarArea.Height); weirdSpriteSheet.GetData(0, titleBarArea, titleBarData, 0, titleBarData.Length); m_titleBarGfx.SetData(titleBarData); } //set the buttons here //ok/cancel buttons XNAButton ok = new XNAButton(smallButtonSheet, new Vector2(60, 125), _getSmallButtonOut(SmallButton.Ok), _getSmallButtonOver(SmallButton.Ok)) { Visible = true }; ok.OnClick += (s, e) => Close(ok, XNADialogResult.OK); ok.SetParent(this); dlgButtons.Add(ok); XNAButton cancel = new XNAButton(smallButtonSheet, new Vector2(153, 125), _getSmallButtonOut(SmallButton.Cancel), _getSmallButtonOver(SmallButton.Cancel)) { Visible = true }; cancel.OnClick += (s, e) => Close(cancel, XNADialogResult.Cancel); cancel.SetParent(this); dlgButtons.Add(cancel); XNALabel descLabel = new XNALabel(new Rectangle(20, 42, 231, 33), Constants.FontSize10) { ForeColor = Constants.LightGrayDialogMessage, TextWidth = 200, Text = string.Format("{0} {1} {2}", World.GetString(DATCONST2.DIALOG_TRANSFER_HOW_MUCH), itemName, World.GetString(message)) }; descLabel.SetParent(this); //set the text box here //starting coords are 163, 97 m_amount = new XNATextBox(new Rectangle(163, 95, 77, 19), Game.Content.Load<Texture2D>("cursor"), Constants.FontSize08) { Visible = true, Enabled = true, MaxChars = 8, //max drop/junk at a time will be 99,999,999 TextColor = Constants.LightBeigeText, Text = "1" }; m_amount.SetParent(this); m_prevSubscriber = EOGame.Instance.Dispatcher.Subscriber; EOGame.Instance.Dispatcher.Subscriber = m_amount; DialogClosing += (o, e) => EOGame.Instance.Dispatcher.Subscriber = m_prevSubscriber; m_totalAmount = totalAmount; //slider control Texture2D src = ((EOGame)Game).GFXManager.TextureFromResource(GFXTypes.PostLoginUI, 29); //5th index when 'out', 6th index when 'over' Rectangle outText = new Rectangle(0, 15 * 5, 16, 15); Rectangle ovrText = new Rectangle(0, 15 * 6, 16, 15); Color[] outData = new Color[16 * 15]; Color[] ovrData = new Color[16 * 15]; Texture2D[] sliderTextures = new Texture2D[2]; src.GetData(0, outText, outData, 0, outData.Length); src.GetData(0, ovrText, ovrData, 0, ovrData.Length); (sliderTextures[0] = new Texture2D(Game.GraphicsDevice, 16, 15)).SetData(outData); (sliderTextures[1] = new Texture2D(Game.GraphicsDevice, 16, 15)).SetData(ovrData); //starting coords are 25, 96; range rectangle is 122, 15 XNAButton slider = new XNAButton(sliderTextures, new Vector2(25, 96)); slider.OnClickDrag += (o, e) => { s_sliderDragging = true; //ignores updates to slider location during text change MouseState st = Mouse.GetState(); Rectangle sliderArea = new Rectangle(25, 96, 122 - slider.DrawArea.Width, 15); int newX = (st.X - PreviousMouseState.X) + (int)slider.DrawLocation.X; if (newX < sliderArea.X) newX = sliderArea.X; else if (newX > sliderArea.Width + sliderArea.X) newX = sliderArea.Width + sliderArea.X; slider.DrawLocation = new Vector2(newX, slider.DrawLocation.Y); //unchanged y coordinate, slides along x-axis float ratio = (newX - sliderArea.X) / (float)sliderArea.Width; m_amount.Text = ((int)Math.Round(ratio * m_totalAmount) + 1).ToString(); s_sliderDragging = false; }; slider.SetParent(this); m_amount.OnTextChanged += (sender, args) => { int amt = 0; if (m_amount.Text != "" && (!int.TryParse(m_amount.Text, out amt) || amt > m_totalAmount)) { amt = m_totalAmount; m_amount.Text = string.Format("{0}", m_totalAmount); } else if (m_amount.Text != "" && amt < 0) { amt = 1; m_amount.Text = string.Format("{0}", amt); } if (s_sliderDragging) return; //slider is being dragged - don't move its position //adjust the slider (created after m_amount) when the text changes if (amt <= 1) //NOT WORKING { slider.DrawLocation = new Vector2(25, 96); } else { int xCoord = (int)Math.Round((amt / (double)m_totalAmount) * (122 - slider.DrawArea.Width)); slider.DrawLocation = new Vector2(25 + xCoord, 96); } }; _setSize(bgTexture.Width, bgTexture.Height); DrawLocation = new Vector2(Game.GraphicsDevice.PresentationParameters.BackBufferWidth / 2 - bgTexture.Width / 2, 40); //only centered horizontally endConstructor(false); }
public ChangePasswordDialog(Texture2D cursorTexture, KeyboardDispatcher dispatcher) { dispatch = dispatcher; bgTexture = ((EOGame)Game).GFXManager.TextureFromResource(GFXTypes.PreLoginUI, 21); _setSize(bgTexture.Width, bgTexture.Height); for (int i = 0; i < inputBoxes.Length; ++i) { XNATextBox tb = new XNATextBox(new Rectangle(198, 60 + i * 30, 137, 19), cursorTexture, Constants.FontSize08) { LeftPadding = 5, DefaultText = " ", MaxChars = i == 0 ? 16 : 12, PasswordBox = i > 1, Selected = i == 0, TextColor = Constants.LightBeigeText, Visible = true }; tb.OnTabPressed += (s, e) => { List<XNATextBox> list = inputBoxes.ToList(); int tbIndex = list.FindIndex(txt => txt == s); int next = tbIndex + 1 > 3 ? 0 : tbIndex + 1; inputBoxes[tbIndex].Selected = false; inputBoxes[next].Selected = true; dispatch.Subscriber = inputBoxes[next]; }; tb.OnClicked += (s, e) => { dispatch.Subscriber.Selected = false; dispatch.Subscriber = (s as XNATextBox); dispatcher.Subscriber.Selected = true; }; tb.SetParent(this); inputBoxes[i] = tb; } dispatch.Subscriber = inputBoxes[0]; XNAButton ok = new XNAButton(smallButtonSheet, new Vector2(157, 195), _getSmallButtonOut(SmallButton.Ok), _getSmallButtonOver(SmallButton.Ok)) { Visible = true }; ok.OnClick += (s, e) => { //does some input validation before trying to call Close //check that all fields are filled in, otherwise: return if (inputBoxes.Any(tb => string.IsNullOrWhiteSpace(tb.Text))) return; if (Username != World.Instance.MainPlayer.AccountName) { EOMessageBox.Show(DATCONST1.CHANGE_PASSWORD_MISMATCH); return; } //check that passwords match, otherwise: return if (inputBoxes[2].Text.Length != inputBoxes[3].Text.Length || inputBoxes[2].Text != inputBoxes[3].Text) { EOMessageBox.Show(DATCONST1.ACCOUNT_CREATE_PASSWORD_MISMATCH); return; } //check that password is > 6 chars, otherwise: return if (inputBoxes[2].Text.Length < 6) { EOMessageBox.Show(DATCONST1.ACCOUNT_CREATE_PASSWORD_TOO_SHORT); return; } Close(ok, XNADialogResult.OK); }; ok.SetParent(this); dlgButtons.Add(ok); XNAButton cancel = new XNAButton(smallButtonSheet, new Vector2(250, 195), _getSmallButtonOut(SmallButton.Cancel), _getSmallButtonOver(SmallButton.Cancel)) { Visible = true }; cancel.OnClick += (s, e) => Close(cancel, XNADialogResult.Cancel); cancel.SetParent(this); dlgButtons.Add(cancel); endConstructor(); }
public EOCreateCharacterDialog(Texture2D cursorTexture, KeyboardDispatcher dispatcher) { bgTexture = ((EOGame)Game).GFXManager.TextureFromResource(GFXTypes.PreLoginUI, 20); _setSize(bgTexture.Width, bgTexture.Height); charCreateSheet = ((EOGame)Game).GFXManager.TextureFromResource(GFXTypes.PreLoginUI, 22); inputBox = new XNATextBox(new Rectangle(80, 57, 138, 19), cursorTexture, Constants.FontSize08) { LeftPadding = 5, DefaultText = " ", MaxChars = 12, Selected = true, TextColor = Constants.LightBeigeText, Visible = true }; inputBox.SetParent(this); dispatcher.Subscriber = inputBox; //four arrow buttons for (int i = 0; i < arrowButtons.Length; ++i) { XNAButton btn = new XNAButton(charCreateSheet, new Vector2(196, 85 + i * 26), new Rectangle(185, 38, 19, 19), new Rectangle(206, 38, 19, 19)) { Visible = true }; btn.OnClick += ArrowButtonClick; btn.SetParent(this); arrowButtons[i] = btn; } charRender = new CharacterRenderer(new Vector2(269, 83), new CharRenderData { gender = 0, hairstyle = 1, haircolor = 0, race = 0 }); charRender.SetParent(this); srcRects[0] = new Rectangle(0, 38, 23, 19); srcRects[1] = new Rectangle(0, 19, 23, 19); srcRects[2] = new Rectangle(0, 0, 23, 19); srcRects[3] = new Rectangle(46, 38, 23, 19); //ok/cancel buttons XNAButton ok = new XNAButton(smallButtonSheet, new Vector2(157, 195), _getSmallButtonOut(SmallButton.Ok), _getSmallButtonOver(SmallButton.Ok)) { Visible = true }; ok.OnClick += (s, e) => { if (inputBox.Text.Length < 4) { EOMessageBox.Show(DATCONST1.CHARACTER_CREATE_NAME_TOO_SHORT); return; } Close(ok, XNADialogResult.OK); }; ok.SetParent(this); dlgButtons.Add(ok); XNAButton cancel = new XNAButton(smallButtonSheet, new Vector2(250, 195), _getSmallButtonOut(SmallButton.Cancel), _getSmallButtonOver(SmallButton.Cancel)) { Visible = true }; cancel.OnClick += (s, e) => Close(cancel, XNADialogResult.Cancel); cancel.SetParent(this); dlgButtons.Add(cancel); endConstructor(); }