private static void SpawnColorItem(Color color, UiSpacer spacer, out UiColumn colorSquare, out UiTextBlock colorText)
        {
            colorSquare = new UiColumn();
            var colorSquare1 = new UiTexture2D(graphics => Helpers.GetTexture(graphics));

            colorSquare1.SetColor(color);
            colorSquare.AddChild(UiSpacer.GetSpacer(0, 5));
            colorSquare.AddChild(colorSquare1);

            colorText = new UiTextBlock();
            colorText.SetString($"{color.R:X2}{color.G:X2}{color.B:X2}");
        }
示例#2
0
        internal void LoadContent(GraphicsDevice graphics)
        {
            _fonts.Clear();
            _backgrounds.Clear();
            _images.Clear();

            foreach (var asset in GameContext.AssetBundleManager.FindByExtension("uifont"))
            {
                using (var stream = GameContext.ContentLoader.ReadStream(asset)) {
                    stream.Seek(0L, SeekOrigin.Begin);
                    var blob = BlobAllocator.Blob(true);

                    blob.LoadJsonStream(stream);

                    if (Process.GetCurrentProcess().ProcessName.Contains("Staxel.Client"))
                    {
                        _fonts.Add(blob.GetString("code"), ContentManager.Load <SpriteFont>(blob.GetString("xnb")));
                    }
                }
            }

            foreach (var asset in GameContext.AssetBundleManager.FindByExtension("uiBackground"))
            {
                using (var stream = GameContext.ContentLoader.ReadStream(asset)) {
                    stream.Seek(0L, SeekOrigin.Begin);
                    var blob = BlobAllocator.Blob(true);

                    blob.LoadJsonStream(stream);

                    _backgrounds.Add(blob.GetString("code"), new UiBackground(graphics, blob));
                }
            }

            foreach (var asset in GameContext.AssetBundleManager.FindByExtension("uiPicture"))
            {
                using (var stream = GameContext.ContentLoader.ReadStream(asset)) {
                    stream.Seek(0L, SeekOrigin.Begin);
                    var blob = BlobAllocator.Blob(true);

                    blob.LoadJsonStream(stream);

                    var image = new UiTexture2D(context =>
                                                Texture2D.FromStream(context.Graphics.GraphicsDevice,
                                                                     GameContext.ContentLoader.ReadStream(blob.GetString("picture"))));

                    _images.Add(blob.GetString("code"), image);
                }
            }

            LoadUIContent?.Invoke(graphics);
        }
        public ColorPickerWindow(Color?_default = null)
        {
            if (_default != null)
            {
                _color = _default.Value;
            }

            _current = new UiWindow();

            _current.ListenForEscape(true);

            _current.Container.SetBackground(Constants.Backgrounds.Dark);

            var picker = new UiColorPicker();

            var currentColor  = new UiTexture2D(context => Helpers.GetTexture(context));
            var hoverColor    = new UiTexture2D(context => Helpers.GetTexture(context));
            var selectedColor = new UiTexture2D(context => Helpers.GetTexture(context));

            selectedColor.SetColor(_color);
            currentColor.SetColor(_color);

            var row = new UiRow();

            row.AddChild(picker);

            var column = new UiColumn();

            var spacer = new UiSpacer();

            spacer.SetHeight(20);
            spacer.SetWidth(20);

            row.AddChild(spacer);

            var mouseText = new UiTextBlock();

            mouseText.SetColor(Color.White);
            mouseText.SetString(ClientContext.LanguageDatabase.GetTranslationString("nimbusfox.foxcore.text.mouse"));
            column.AddChild(mouseText);
            column.AddChild(hoverColor);
            column.AddChild(spacer);

            var selectedText = new UiTextBlock();

            selectedText.SetColor(Color.White);
            selectedText.SetString(ClientContext.LanguageDatabase.GetTranslationString("nimbusfox.foxcore.text.selected"));
            column.AddChild(selectedText);
            column.AddChild(selectedColor);
            column.AddChild(spacer);

            var currentText = new UiTextBlock();

            currentText.SetColor(Color.White);
            currentText.SetString(ClientContext.LanguageDatabase.GetTranslationString("nimbusfox.foxcore.text.current"));
            column.AddChild(currentText);
            column.AddChild(currentColor);

            row.AddChild(column);

            _current.AddChild(row);

            _current.AddChild(spacer);

            var colorRow = new UiRow();

            UiTextInput colorHex = null;

            var colorR = new UiNumberInput();

            colorR.SetItteration(1.0f);
            colorR.SetMin(0);
            colorR.SetMax(255);
            colorR.SetValue(_color.R);
            colorR.SetBackgroundColors(Color.Red, Color.Pink);

            colorR.OnChange += value => {
                if (byte.TryParse(value.ToString(), out var val))
                {
                    _color.R = val;
                    colorHex?.ForceSetValue($"{_color.R:X2}{_color.G:X2}{_color.B:X2}");
                    selectedColor.SetColor(_color);
                }
            };
            var colorG = new UiNumberInput();

            colorG.SetItteration(1.0f);
            colorG.SetMin(0);
            colorG.SetMax(255);
            colorG.SetValue(_color.G);
            colorG.SetBackgroundColors(Color.Green, Color.LimeGreen);

            colorG.OnChange += value => {
                if (byte.TryParse(value.ToString(), out var val))
                {
                    _color.G = val;
                    colorHex?.ForceSetValue($"{_color.R:X2}{_color.G:X2}{_color.B:X2}");
                    selectedColor.SetColor(_color);
                }
            };

            var colorB = new UiNumberInput();

            colorB.SetItteration(1.0f);
            colorB.SetMin(0);
            colorB.SetMax(255);
            colorB.SetValue(_color.B);
            colorB.SetBackgroundColors(Color.Blue, Color.LightBlue);
            colorB.SetTextColors(Color.White, Color.Black);

            colorB.OnChange += value => {
                if (byte.TryParse(value.ToString(), out var val))
                {
                    _color.B = val;
                    colorHex?.ForceSetValue($"{_color.R:X2}{_color.G:X2}{_color.B:X2}");
                    selectedColor.SetColor(_color);
                }
            };

            var colorHexRow = new UiRow();

            var hex = new UiTextBlock();

            hex.SetString(ClientContext.LanguageDatabase.GetTranslationString("nimbusfox.foxcore.text.hex"));

            colorHex = new UiTextInput();
            colorHex.ForceSetValue($"{_color.R:X2}{_color.G:X2}{_color.B:X2}");
            colorHex.SetBackgroundColor(new Color(237, 207, 154));
            colorHex.SetTextColor(Color.Black);
            colorHex.SetActiveTextColor(Color.Black);
            colorHex.SetBackground(Constants.Backgrounds.TextInput);
            colorHex.SetLimit(6);
            colorHex.InputCheck += key => {
                switch (key.ToString().ToUpper())
                {
                default:
                    return(false);

                case "A":
                case "B":
                case "C":
                case "D":
                case "E":
                case "F":
                case "0":
                case "1":
                case "2":
                case "3":
                case "4":
                case "5":
                case "6":
                case "7":
                case "8":
                case "9":
                    return(true);
                }
            };

            colorHex.OnChange += text => {
                if (text.IsNullOrEmpty())
                {
                    _color = Color.Black;
                }
                else
                {
                    _color = ColorMath.ParseString(text);
                }
                selectedColor.SetColor(_color);
                colorR.ForceSetValue(_color.R);
                colorG.ForceSetValue(_color.G);
                colorB.ForceSetValue(_color.B);
            };

            picker.ColorClick += color => {
                selectedColor.SetColor(color);
                _color = color;
                colorR.ForceSetValue(_color.R);
                colorG.ForceSetValue(_color.G);
                colorB.ForceSetValue(_color.B);
                colorHex.ForceSetValue($"{_color.R:X2}{_color.G:X2}{_color.B:X2}");
            };

            colorRow.AddChild(colorR);
            colorRow.AddChild(spacer);
            colorRow.AddChild(colorG);
            colorRow.AddChild(spacer);
            colorRow.AddChild(colorB);

            _current.AddChild(colorRow);
            _current.AddChild(spacer);
            colorHexRow.AddChild(hex);
            colorHexRow.AddChild(colorHex);
            _current.AddChild(colorHexRow);

            _current.AddChild(spacer);

            var confirmButton = new UiButton();

            confirmButton.SetBackground(Constants.Backgrounds.Button);

            var confirmText = new UiTextBlock();

            confirmText.SetString(ClientContext.LanguageDatabase.GetTranslationString("nimbusfox.foxcore.text.setColor"));

            confirmButton.AddChild(confirmText);

            confirmButton.OnClick += () => {
                OnColorSet?.Invoke(_color);

                if (_colorHistory.Contains(_color))
                {
                    _colorHistory.Remove(_color);
                }

                _colorHistory.Add(_color);

                _current.Dispose();
            };

            var cancelButton = new UiButton();

            cancelButton.SetBackground(Constants.Backgrounds.Button);

            var cancelText = new UiTextBlock();

            cancelText.SetString(ClientContext.LanguageDatabase.GetTranslationString("nimbusfox.foxcore.text.cancel"));

            cancelButton.AddChild(cancelText);

            cancelButton.OnClick += () => {
                _current.Dispose();
            };

            var buttonRow = new UiRow();

            buttonRow.AddChild(confirmButton);
            buttonRow.AddChild(spacer);
            buttonRow.AddChild(cancelButton);
            buttonRow.AddChild(spacer);

            var favButton = new UiButton();

            favButton.SetBackground(Constants.Backgrounds.Button);
            var favPic = FoxUIHook.Instance.GetPicture("nimbusfox.ui.images.favorites");

            favButton.AddChild(favPic);
            buttonRow.AddChild(favButton);
            buttonRow.AddChild(spacer);

            favButton.OnClick += () => {
                SpawnFavoriteFolderMenu(_current, spacer, color => {
                    colorHex.ForceSetValue($"{color.R:X2}{color.G:X2}{color.B:X2}", true);
                });
            };

            var historyButton = new UiButton();

            historyButton.SetBackground(Constants.Backgrounds.Button);
            var historyPic = FoxUIHook.Instance.GetPicture("nimbusfox.ui.images.history");

            historyButton.AddChild(historyPic);
            buttonRow.AddChild(historyButton);

            historyButton.OnClick += () => {
                SpawnHistoryWindow(_current, spacer, color => {
                    colorHex.ForceSetValue($"{color.R:X2}{color.G:X2}{color.B:X2}", true);
                });
            };

            _current.AddChild(buttonRow);

            picker.ColorHover += color => { hoverColor.SetColor(color); };

            _current.OnClose += () => {
                OnClose?.Invoke();
            };
        }