Ui/Paint/PaintUi.FavoriteColors.cs
using System;
using System.IO;
using System.Text;
using Sandbox.UI;
namespace Clover.Ui;
public partial class PaintUi
{
private void ToggleShowFavoritesEditor()
{
ShowFavoritesEditor = !ShowFavoritesEditor;
if ( !ShowFavoritesEditor )
{
SaveFavoriteColors();
}
}
private void LoadFavoriteColors()
{
var path = $"colorfavorites-{PaletteName}.dat";
if ( !FileSystem.Data.FileExists( path ) )
{
GenerateFavoriteColors();
return;
}
try
{
var stream = FileSystem.Data.OpenRead( path );
var reader = new BinaryReader( stream, Encoding.UTF8 );
FavoriteColors = reader.ReadBytes( FavoriteColorAmount );
stream.Close();
}
catch ( Exception e )
{
Log.Error( e.Message );
}
}
private void SaveFavoriteColors()
{
var stream = FileSystem.Data.OpenWrite( $"colorfavorites-{PaletteName}.dat" );
var writer = new BinaryWriter( stream, Encoding.UTF8 );
writer.Write( FavoriteColors );
writer.Flush();
stream.Close();
}
private void GenerateFavoriteColors()
{
FavoriteColors = new byte[FavoriteColorAmount];
for ( var i = 0; i < FavoriteColorAmount; i++ )
{
FavoriteColors[i] = (byte)i;
}
FavoriteColors[0] = (byte)Utilities.Decals.GetClosestPaletteColor( Palette.ToArray(), Color.Black );
FavoriteColors[1] = (byte)Utilities.Decals.GetClosestPaletteColor( Palette.ToArray(), Color.White );
FavoriteColors[2] = 255;
}
private void FavoriteEditorColorButtonClick( PanelEvent e, int colorIndex )
{
if ( SelectedFavorite == -1 )
{
Log.Error( "No favorite selected" );
}
if ( colorIndex < 0 || colorIndex >= Palette.Count )
{
Log.Error( $"Invalid color index: {colorIndex}" );
return;
}
if ( SelectedFavorite < 0 || SelectedFavorite >= FavoriteColors.Length )
{
Log.Error( $"Invalid favorite index: {SelectedFavorite}" );
return;
}
FavoriteColors[SelectedFavorite] = (byte)colorIndex;
}
private void FavoriteColorButtonClick( PanelEvent e, int index )
{
if ( ShowFavoritesEditor )
{
SelectedFavorite = index;
}
else
{
SetColor( e, FavoriteColors[index] );
}
}
}