From 15cdb3f3d3a1abf2e6afe0268578cc5ee833d384 Mon Sep 17 00:00:00 2001 From: Tony Bark <35226681+tonytins@users.noreply.github.com> Date: Fri, 15 May 2026 11:09:57 -0400 Subject: [PATCH 1/2] Swapped combo boxes for lists boxes --- CyberBits/CyberBits.csproj | 1 + CyberBits/ViewModels/ViewModelBase.cs | 47 +++++++++++++++++++---- CyberBits/Views/MainWindow.axaml | 54 ++++++++++++++++----------- 3 files changed, 72 insertions(+), 30 deletions(-) diff --git a/CyberBits/CyberBits.csproj b/CyberBits/CyberBits.csproj index c4b89b3..d98e0b8 100644 --- a/CyberBits/CyberBits.csproj +++ b/CyberBits/CyberBits.csproj @@ -3,6 +3,7 @@ WinExe net10.0 enable + LatestMajor app.manifest true diff --git a/CyberBits/ViewModels/ViewModelBase.cs b/CyberBits/ViewModels/ViewModelBase.cs index 73d0d35..3d616ef 100644 --- a/CyberBits/ViewModels/ViewModelBase.cs +++ b/CyberBits/ViewModels/ViewModelBase.cs @@ -5,31 +5,62 @@ namespace CyberBits.ViewModels; public partial class ViewModelBase : ObservableObject { - public ObservableCollection Genitals { get; } = ["Cock", "Pussy"]; + public ObservableCollection GenitalsList { get; } = ["Cock", "Pussy"]; - public ObservableCollection Models { get; } = + public ObservableCollection ModelsList { get; } = [ "Au Natural", - "Les Americaines" + "Les Americaines", + "La Grand Chungus", + "Veini Vici", + "Das Banane", + "The Ace Custom" ]; - public ObservableCollection Styles { get; } = + public ObservableCollection AestheticsList { get; } = [ "Bioware", - "Cyberware" + "Cyberware", + "Roboware", + "Holoware" ]; - public ObservableCollection Cyberware { get; } = + public ObservableCollection CyberwareList { get; } = [ "Piercings", - "Datajack" + "Datajack", + "Censor Field", + "Laser Sight", + "AI-Controlled Booster Module", + "Second Bladder", + "Map Hack", + "Monowire Blade", + "Projectile Launcher" + ]; + + public ObservableCollection PubesList { get; } = + [ + "The Baldie", + "The Peach", + "The Landing Strip", + "The Peek-a-Boo", + "The Rectangle", + "The Bar Code", + "The Heart", + "The Lighting Bolt", + "The Neat Triangle", + "The Forest", + "The Jungle", + "The Breath of the Wild" ]; [ObservableProperty] private string? _selectedBits; [ObservableProperty] private string? _selectedModels; - [ObservableProperty] private string? _selectedStyles; + [ObservableProperty] private string? _selectedAesthetics; [ObservableProperty] private string? _selectedCyberware; + + [ObservableProperty] private string? _selectedPubes; } diff --git a/CyberBits/Views/MainWindow.axaml b/CyberBits/Views/MainWindow.axaml index ee68ff6..adf846b 100644 --- a/CyberBits/Views/MainWindow.axaml +++ b/CyberBits/Views/MainWindow.axaml @@ -29,35 +29,45 @@ + + - - - - + + + + + - - - - + Margin="5" + Height="110" /> From 247b738eccad4595cf7a14ee72902f88bcb3fa5d Mon Sep 17 00:00:00 2001 From: Tony Bark <35226681+tonytins@users.noreply.github.com> Date: Fri, 15 May 2026 13:39:25 -0400 Subject: [PATCH 2/2] Slight refractor - Added balls and butt options - Renamed Resources to Data - Addons is now Universal (although probably going to be renamed to Common next) - Bits was renamed Genitals - Genital selection uses enums --- .editorconfig | 14 ++++++ CyberBits/Assets/game_die.png | Bin 0 -> 9353 bytes CyberBits/Bits.cs | 17 ------- CyberBits/CyberBits.csproj | 12 +++-- CyberBits/Data/cock.json | 21 +++++++++ CyberBits/Data/pussy.json | 20 +++++++++ CyberBits/Data/universal.json | 39 ++++++++++++++++ CyberBits/DataFiles.cs | 8 ++++ CyberBits/Genitals.cs | 33 ++++++++++++++ CyberBits/ImageHelper.cs | 2 +- CyberBits/ResourceFiles.cs | 8 ---- CyberBits/Resources/addons.json | 6 --- CyberBits/Resources/cock.json | 16 ------- CyberBits/Resources/pussy.json | 12 ----- CyberBits/ViewModels/ViewModelBase.cs | 29 ++++++++++-- CyberBits/Views/MainWindow.axaml | 61 +++++++++++++++++-------- CyberBits/Views/MainWindow.axaml.cs | 62 +++++++++++++++++++++++--- 17 files changed, 268 insertions(+), 92 deletions(-) create mode 100644 CyberBits/Assets/game_die.png delete mode 100644 CyberBits/Bits.cs create mode 100644 CyberBits/Data/cock.json create mode 100644 CyberBits/Data/pussy.json create mode 100644 CyberBits/Data/universal.json create mode 100644 CyberBits/DataFiles.cs create mode 100644 CyberBits/Genitals.cs delete mode 100644 CyberBits/ResourceFiles.cs delete mode 100644 CyberBits/Resources/addons.json delete mode 100644 CyberBits/Resources/cock.json delete mode 100644 CyberBits/Resources/pussy.json diff --git a/.editorconfig b/.editorconfig index 3e6adb7..a52bb32 100644 --- a/.editorconfig +++ b/.editorconfig @@ -43,6 +43,20 @@ dotnet_naming_rule.consts_must_be_all_caps.severity = warning dotnet_naming_rule.consts_must_be_all_caps.symbols = const_fields dotnet_naming_rule.consts_must_be_all_caps.style = all_caps + +# Turn off the naming style that enforces an underscore prefix for private fields +dotnet_naming_style.underscore_prefix_style.capitalization = camel_case +dotnet_naming_style.underscore_prefix_style.required_prefix = _ + +# Remove the rule that ties the naming style to private fields +dotnet_naming_rule.private_fields_underscore_rule.severity = none +dotnet_naming_rule.private_fields_underscore_rule.symbols = private_fields +dotnet_naming_rule.private_fields_underscore_rule.style = underscore_prefix_style + +# Symbol group for private fields (so the rule can be disabled) +dotnet_naming_symbols.private_fields.applicable_kinds = field +dotnet_naming_symbols.private_fields.applicable_accessibilities = private + # Formatting csharp_new_line_before_open_brace = all csharp_indent_case_contents = true diff --git a/CyberBits/Assets/game_die.png b/CyberBits/Assets/game_die.png new file mode 100644 index 0000000000000000000000000000000000000000..0f4404b78ca8cf25ee10cce8a865fe3392cfe0ae GIT binary patch literal 9353 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 c - - - + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + diff --git a/CyberBits/Data/cock.json b/CyberBits/Data/cock.json new file mode 100644 index 0000000..345a28f --- /dev/null +++ b/CyberBits/Data/cock.json @@ -0,0 +1,21 @@ +{ + "image": "avares://CyberBits/Assets/cock.jpg", + "feat": "Aim Piss", + "model": [ + "Au Natural", + "Les Americaines", + "La Grand Chungus", + "Veini Vici", + "Das Banane", + "The Ace Custom" + ], + "extra": [ + "Hairy", + "Dangly", + "Asymmetrical", + "Bulbous", + "Doubled", + "Wrinkly", + "Cyber" + ] +} diff --git a/CyberBits/Data/pussy.json b/CyberBits/Data/pussy.json new file mode 100644 index 0000000..ab57ac3 --- /dev/null +++ b/CyberBits/Data/pussy.json @@ -0,0 +1,20 @@ +{ + "image": "avares://CyberBits/Assets/pussy.jpg", + "feat": "Boom of the Mother Godness", + "model": [ + "The Shy Sharon", + "The Proud Priscilla", + "The Matronly Miriam", + "The Stretchy Sandra", + "The Outer Olivia" + ], + "extra": [ + "Huge", + "Hooded", + "Bright", + "Shifted", + "Hard", + "Expansive", + "Cyber" + ] +} diff --git a/CyberBits/Data/universal.json b/CyberBits/Data/universal.json new file mode 100644 index 0000000..0a0b6e3 --- /dev/null +++ b/CyberBits/Data/universal.json @@ -0,0 +1,39 @@ +{ + "aesthetic": [ + "Bioware", + "Cyberware", + "Roboware", + "Holoware" + ], + "cyberware": [ + "Piercings", + "Datajack", + "Censor Field", + "Laser Sight", + "AI-Controlled Booster Module", + "Second Bladder", + "Map Hack", + "Monowire Blade", + "Projectile Launcher" + ], + "pubes": [ + "The Baldie", + "The Peach", + "The Landing Strip", + "The Peek-a-Boo", + "The Rectangle", + "The Bar Code", + "The Heart", + "The Lighting Bolt", + "The Neat Triangle", + "The Forest", + "The Jungle", + "The Breath of the Wild" + ], + "butt": + [ + "Big", + "Round", + "Firm" + ] +} diff --git a/CyberBits/DataFiles.cs b/CyberBits/DataFiles.cs new file mode 100644 index 0000000..5bb1277 --- /dev/null +++ b/CyberBits/DataFiles.cs @@ -0,0 +1,8 @@ +namespace CyberBits; + +public struct DataFiles +{ + public const string COCK_JSON = "/Data/cock.json"; + public const string PUSSY_JSON = "Data/pussy.json"; + public const string UNIVERSAL_JSON = "Data/universal.json"; +} diff --git a/CyberBits/Genitals.cs b/CyberBits/Genitals.cs new file mode 100644 index 0000000..5a91bb0 --- /dev/null +++ b/CyberBits/Genitals.cs @@ -0,0 +1,33 @@ +using CommunityToolkit.Mvvm.ComponentModel; + +namespace CyberBits; + +public enum Genitals +{ + COCK, + PUSSY +} + +public record GenitalModel( + [property: JsonPropertyName("image")] + string Image, + [property: JsonPropertyName("feat")] + string Feat, + [property: JsonPropertyName("model")] + string[] Model, + [property: JsonPropertyName("aesthetic")] + string[] Aesthetic, + [property: JsonPropertyName("extra")] + string[] Extra // Balls or Clits + ); + +public record UniversalModel( + [property: JsonPropertyName("aesthetic")] + string[] Aesthetic, + [property: JsonPropertyName("cyberware")] + string[] Cyberware, + [property: JsonPropertyName("pubes")] + string[] Pubes, + [property: JsonPropertyName("butt")] + string[] Butt +); diff --git a/CyberBits/ImageHelper.cs b/CyberBits/ImageHelper.cs index 808204b..06781f5 100644 --- a/CyberBits/ImageHelper.cs +++ b/CyberBits/ImageHelper.cs @@ -16,7 +16,7 @@ public static class ImageHelper return new Bitmap(AssetLoader.Open(resourceUri)); } - public static async Task LoadFromWeb(Uri url) + public static async Task LoadFromWebAsync(Uri url) { try { diff --git a/CyberBits/ResourceFiles.cs b/CyberBits/ResourceFiles.cs deleted file mode 100644 index 09d3c03..0000000 --- a/CyberBits/ResourceFiles.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace CyberBits; - -public struct ResourceFiles -{ - public const string COCK_JSON = "Resources/cock.json"; - public const string PUSSY_JSON = "Resources/pussy.json"; - public const string ADDONS_JSON = "Resources/addons.json"; -} diff --git a/CyberBits/Resources/addons.json b/CyberBits/Resources/addons.json deleted file mode 100644 index 3f038b0..0000000 --- a/CyberBits/Resources/addons.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "cyberware": [ - "Piercings", - "Datajack" - ] -} diff --git a/CyberBits/Resources/cock.json b/CyberBits/Resources/cock.json deleted file mode 100644 index b11d20b..0000000 --- a/CyberBits/Resources/cock.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "image": "avares://CyberBits/Assets/cock.jpg", - "feat": "Aim Piss", - "model": [ - "Au Natural", - "Les Americaines" - ], - "style": [ - "Bioware", - "Cyberware" - ], - "cyberware": [ - "Piercings", - "Datajack" - ] -} diff --git a/CyberBits/Resources/pussy.json b/CyberBits/Resources/pussy.json deleted file mode 100644 index 3608721..0000000 --- a/CyberBits/Resources/pussy.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "image": "avares://CyberBits/Assets/pussy.jpg", - "feat": "Boom of the Mother Godness", - "model": [ - "Au Natural", - "Les Americaines" - ], - "style": [ - "Bioware", - "Cyberware" - ] -} diff --git a/CyberBits/ViewModels/ViewModelBase.cs b/CyberBits/ViewModels/ViewModelBase.cs index 3d616ef..732a5ea 100644 --- a/CyberBits/ViewModels/ViewModelBase.cs +++ b/CyberBits/ViewModels/ViewModelBase.cs @@ -1,11 +1,12 @@ -using System.Collections.ObjectModel; +using System; +using System.Collections.ObjectModel; using CommunityToolkit.Mvvm.ComponentModel; namespace CyberBits.ViewModels; public partial class ViewModelBase : ObservableObject { - public ObservableCollection GenitalsList { get; } = ["Cock", "Pussy"]; + public Genitals[] GenitalOptions { get; } = Enum.GetValues(); public ObservableCollection ModelsList { get; } = [ @@ -54,7 +55,25 @@ public partial class ViewModelBase : ObservableObject "The Breath of the Wild" ]; - [ObservableProperty] private string? _selectedBits; + public ObservableCollection ExtrasList { get; } = + [ + "Hairy", + "Dangly", + "Asymmetrical", + "Bulbous", + "Doubled", + "Wrinkly", + "Cyber" + ]; + + public ObservableCollection ButtsList { get; } = + [ + "Big", + "Round", + "Firm" + ]; + + [ObservableProperty] private Genitals _selectedBits = Genitals.COCK; [ObservableProperty] private string? _selectedModels; @@ -63,4 +82,8 @@ public partial class ViewModelBase : ObservableObject [ObservableProperty] private string? _selectedCyberware; [ObservableProperty] private string? _selectedPubes; + + [ObservableProperty] private string? _selectedExtras; + + [ObservableProperty] private string? _selectedButt; } diff --git a/CyberBits/Views/MainWindow.axaml b/CyberBits/Views/MainWindow.axaml index adf846b..d03aad9 100644 --- a/CyberBits/Views/MainWindow.axaml +++ b/CyberBits/Views/MainWindow.axaml @@ -3,8 +3,8 @@ xmlns:vm="using:CyberBits.ViewModels" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" - mc:Ignorable="d" d:DesignWidth="720" d:DesignHeight="430" - Width="720" Height="430" CanResize="False" + mc:Ignorable="d" d:DesignWidth="700" d:DesignHeight="520" + Width="700" Height="520" CanResize="False" ExtendClientAreaToDecorationsHint="True" x:Class="CyberBits.Views.MainWindow" x:DataType="vm:MainWindowViewModel" @@ -25,49 +25,72 @@ Text="CyberBits" > - + - - - + - + - + + + - + + - + + + diff --git a/CyberBits/Views/MainWindow.axaml.cs b/CyberBits/Views/MainWindow.axaml.cs index 3569087..50032c7 100644 --- a/CyberBits/Views/MainWindow.axaml.cs +++ b/CyberBits/Views/MainWindow.axaml.cs @@ -1,29 +1,77 @@ using System; +using System.IO; +using System.Reflection; +using System.Text.Json; using Avalonia.Controls; namespace CyberBits.Views; public partial class MainWindow : Window { + string? AppPath => Path.GetDirectoryName(Assembly.GetAssembly(typeof(MainWindow))?.Location); + public MainWindow() { InitializeComponent(); - VersionBox.Text = $"v{AppConsts.VERSION}"; + try + { + var univieralFile = File.ReadAllText($"{AppPath}//{DataFiles.UNIVERSAL_JSON}"); + var univieralData = JsonSerializer.Deserialize(univieralFile); + + PubesItems.ItemsSource = univieralData?.Pubes; + CyberwareItems.ItemsSource = univieralData?.Cyberware; + AestheticsItems.ItemsSource = univieralData?.Aesthetic; + ButtOptions.ItemsSource = univieralData?.Butt; + } + catch (Exception e) + { + Console.WriteLine(e); + throw; + } + +#if DEBUG + VersionBox.Text = $"{AppConsts.VERSION}-{ThisAssembly.Git.Commit}"; +#else + VersionBox.Text = AppConsts.VERSION; +#endif + + } + + void GenitalSwap(string image, string data) + { + + try + { + var genitalFile = File.ReadAllText($"{AppPath}//{data}"); + var genitalData = JsonSerializer.Deserialize(genitalFile); + var genitalImage = ImageHelper.LoadFromResource(new Uri(image)); + + BitsImage.Source = genitalImage; + ModelItems.ItemsSource = genitalData?.Model; + ExtraItems.ItemsSource = genitalData?.Extra; + } + catch (Exception e) + { + Console.WriteLine(e); + throw; + } } private void SelectedBitsControl_OnSelectionChanged(object? sender, SelectionChangedEventArgs e) { + var appPath = Path.GetDirectoryName(Assembly.GetAssembly(typeof(MainWindow))?.Location); + switch (BitSelection.SelectionBoxItem) { - case "Pussy": - var pussy = ImageHelper.LoadFromResource(new Uri("avares://CyberBits/Assets/pussy.jpg")); - BitsImage.Source = pussy; + case Genitals.PUSSY: + GenitalSwap("avares://CyberBits/Assets/pussy.jpg", DataFiles.PUSSY_JSON); + ExtrasText.Text = "Clits"; break; - case "Cock": - var cock = ImageHelper.LoadFromResource(new Uri("avares://CyberBits/Assets/cock.jpg")); - BitsImage.Source = cock; + case Genitals.COCK: + GenitalSwap("avares://CyberBits/Assets/cock.jpg", DataFiles.COCK_JSON); + ExtrasText.Text = "Balls"; break; } }