Beispiel #1
0
        protected override void RenderContent(RenderComposer composer)
        {
            // File selection.
            if (ImGui.Button("Choose Texture File"))
            {
                var explorer = new FileExplorer <TextureAsset>(f =>
                {
                    _fileName = Path.GetFileNameWithoutExtension(f.Name) + "Palette.xml";

                    var description = new PaletteDescription
                    {
                        BaseAsset = _fileName
                    };

                    Reset();

                    _baseTexture = f;
                    _description = description;
                });
                Parent.AddWindow(explorer);
            }

            if (ImGui.Button("Choose Palette File"))
            {
                var explorer = new FileExplorer <PaletteAsset>(f =>
                {
                    _fileName = f.Name;

                    Reset();

                    _baseTexture = f.BaseTexture;
                    _description = f.Content;
                });
                Parent.AddWindow(explorer);
            }

            if (_description == null)
            {
                return;
            }

            // Extract the palette map and the default palette.
            if (_defaultPalette == null)
            {
                _defaultPalette = new Palette
                {
                    Name = "Default"
                };
                var         pixelData   = new byte[(int)(_baseTexture.Texture.Size.X * _baseTexture.Texture.Size.Y * 4)];
                PixelFormat pixelFormat = _baseTexture.Texture.PixelFormat;
                unsafe
                {
                    fixed(void *p = &pixelData[0])
                    {
                        Texture.EnsureBound(_baseTexture.Texture.Pointer);
                        Gl.GetTexImage(TextureTarget.Texture2d, 0, pixelFormat, PixelType.UnsignedByte, new IntPtr(p));
                    }
                }

                _paletteMap            = PaletteBaseTexture.GeneratePaletteMap(pixelData, pixelFormat, out List <Color> defaultCMap);
                _defaultPalette.Colors = defaultCMap.ToArray();

                ref Palette[] pals = ref _description.Palettes;
                Array.Resize(ref pals, _description.Palettes.Length + 1);
                pals[^ 1] = _defaultPalette;
Beispiel #2
0
        protected override void RenderContent(RenderComposer composer)
        {
            // File selection.
            if (ImGui.Button("Choose Texture File"))
            {
                var explorer = new FileExplorer <TextureAsset>(f =>
                {
                    _fileName = Path.GetFileNameWithoutExtension(f.Name) + "Palette.xml";

                    var description = new PaletteDescription
                    {
                        BaseAsset = _fileName
                    };

                    Reset();

                    _baseTexture = f;
                    _description = description;
                });
                Parent.AddWindow(explorer);
            }

            if (ImGui.Button("Choose Palette File"))
            {
                var explorer = new FileExplorer <PaletteAsset>(f =>
                {
                    _fileName = f.Name;

                    Reset();

                    _baseTexture = f.BaseTexture;
                    _description = f.Content;
                });
                Parent.AddWindow(explorer);
            }

            if (_description == null)
            {
                return;
            }

            // Extract the palette map and the default palette.
            if (_defaultPalette == null)
            {
                _defaultPalette = new Palette
                {
                    Name = "Default"
                };
                var pixelData = new byte[(int)(_baseTexture.Texture.Size.X * _baseTexture.Texture.Size.Y * 4)];
                unsafe
                {
                    fixed(void *p = &pixelData[0])
                    {
                        Texture.EnsureBound(_baseTexture.Texture.Pointer);
                        Gl.GetTexImage(TextureTarget.Texture2d, 0, PixelFormat.Bgra, PixelType.UnsignedByte, new IntPtr(p));
                    }
                }

                _paletteMap            = ImageUtil.GeneratePaletteMap(pixelData, out List <Color> defaultCMap);
                _defaultPalette.Colors = defaultCMap.ToArray();
            }

            if (ImGui.Button("Save"))
            {
                string xml = XMLFormat.To(_description);
                File.WriteAllText(Helpers.CrossPlatformPath($"Assets/{_fileName}"), xml);
            }

            ImGui.Text(_fileName);
            ImGui.Text("Palettes");

            foreach (Palette p in _description.Palettes.Where(p => ImGui.Button(p.Name)))
            {
                _selectedPalette = p;
                _updatePreview   = true;
            }

            ImGui.InputText("New", ref _newPaletteName, 20);
            ImGui.SameLine();
            if (ImGui.Button("Create") && !string.IsNullOrEmpty(_newPaletteName))
            {
                _selectedPalette = new Palette
                {
                    Name   = _newPaletteName,
                    Colors = _description.GetPalette("Default").Colors.ToArray()
                };
                _newPaletteName = "";

                Palette[] pals = _description.Palettes;
                Array.Resize(ref pals, _description.Palettes.Length);
                pals[^ 1]      = _selectedPalette;