Skip to content

Commit

Permalink
Balance changes, and add KnownIssues and PlannedChanges tabs
Browse files Browse the repository at this point in the history
  • Loading branch information
CorruptComputer committed Jan 23, 2024
1 parent 4c6b143 commit e5d1dee
Show file tree
Hide file tree
Showing 35 changed files with 411 additions and 274 deletions.
10 changes: 10 additions & 0 deletions .idea/.idea.BaldersGait/.idea/avalonia.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 0 additions & 7 deletions BaldersGait.UnitTests/Models/State/BarberShopStateTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,6 @@ namespace BaldersGait.UnitTests.Models.State;

public class BarberShopStateTests
{
[Fact]
public void HairGrowth_ShouldCalculateCorrectly()
{
BarberShopState state = new();
state.HairGrowth.Should().Be(0.25);
}

[Fact]
public void TickMe_ShouldNotThrow()
{
Expand Down
11 changes: 8 additions & 3 deletions BaldersGait/BaldersGait.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
<ApplicationManifest>app.manifest</ApplicationManifest>
<AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>

<PublishSingleFile>true</PublishSingleFile>
<SelfContained>true</SelfContained>
<PublishSingleFile Condition="'$(Configuration)' != 'Debug'">true</PublishSingleFile>
<SelfContained Condition="'$(Configuration)' != 'Debug'">true</SelfContained>
</PropertyGroup>

<ItemGroup>
Expand Down Expand Up @@ -40,8 +40,13 @@
<DependentUpon>SidebarView.axaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Update="Views\Panels\BluePanelView.axaml.cs">
<Compile Update="Views\Panels\KnownIssuesPanelView.axaml.cs">
<DependentUpon>BluePanelView.axaml</DependentUpon>
</Compile>
</ItemGroup>


<ItemGroup>
<Folder Include="Consts\" />
</ItemGroup>
</Project>
10 changes: 0 additions & 10 deletions BaldersGait/Consts/BarberShopConsts.cs

This file was deleted.

38 changes: 38 additions & 0 deletions BaldersGait/Models/State/BarberShop/BarberShopChair.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
using System;
using System.Text.Json.Serialization;

namespace BaldersGait.Models.State.BarberShop;

[Serializable]
public class BarberShopChair
{
public ChairNumbers ChairNumber { get; set; } = ChairNumbers.Unknown;
public bool Unlocked { get; set; } = false;
public double HairLength { get; set; } = 0;

[JsonIgnore]
public double HairGrowthScalingFactor => Math.Round(ChairNumber switch
{
ChairNumbers.One => 1,
_ => (double)ChairNumber / Math.Pow(2, (int)ChairNumber)
}, 3);

[JsonIgnore]
public bool ReadyToCollect => HairLength >= GetMaxHairLength();

public double GetHairGrowthWithScalingFactor(double baseHairGrowthPerTick)
{
return Math.Round(baseHairGrowthPerTick * HairGrowthScalingFactor, 3);
}

public bool IsProductionTooHigh(double baseHairGrowthPerTick)
{
return GetHairGrowthWithScalingFactor(baseHairGrowthPerTick) > GetMaxHairLength();
}

public double GetMaxHairLength()
{
// TODO: Add upgrades for this
return 10;
}
}
12 changes: 0 additions & 12 deletions BaldersGait/Models/State/BarberShop/BarberShopSeat.cs

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
using System;

namespace BaldersGait.Models.State.BarberShop;

public enum SeatNumber
[Serializable]
public enum ChairNumbers
{
Unknown = -1,
One = 1,
Expand Down
71 changes: 43 additions & 28 deletions BaldersGait/Models/State/BarberShopState.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,86 +3,101 @@
using System.Linq;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
using BaldersGait.Consts;
using BaldersGait.Models.State.BarberShop;

namespace BaldersGait.Models.State;

[Serializable]
public class BarberShopState
{
public List<BarberShopSeat> Seats { get; set; } =
public List<BarberShopChair> Chairs { get; set; } =
[
new()
{
SeatNumber = SeatNumber.One,
ChairNumber = ChairNumbers.One,
Unlocked = true
},
new()
{
SeatNumber = SeatNumber.Two,
ChairNumber = ChairNumbers.Two,
},
new()
{
SeatNumber = SeatNumber.Three,
ChairNumber = ChairNumbers.Three,
},
new()
{
SeatNumber = SeatNumber.Four,
ChairNumber = ChairNumbers.Four,
},
new()
{
SeatNumber = SeatNumber.Five,
ChairNumber = ChairNumbers.Five,
},
new()
{
SeatNumber = SeatNumber.Six,
ChairNumber = ChairNumbers.Six,
},
new()
{
SeatNumber = SeatNumber.Seven,
ChairNumber = ChairNumbers.Seven,
},
new()
{
SeatNumber = SeatNumber.Eight,
ChairNumber = ChairNumbers.Eight,
}

];

public int HairGrowthUpgrades { get; set; } = 0;

public int ReduceReductionUpgrades { get; set; } = 0;
public int ChairScalingFactorUpgrades { get; set; } = 0;

public double HairCollected { get; set; } = 0;

public bool ClippersPurchased { get; set; } = false;

[JsonIgnore]
public double HairGrowth => Math.Round(BarberShopConsts.BaseHairGrowthRate * (HairGrowthUpgrades+1), 3);

[JsonIgnore]
public double BaseHairPerTick => Math.Round(0.01 * (HairGrowthUpgrades + 1), 3);

public void TickMe()
{
Parallel.ForEach(Seats.Where(x => x.Unlocked), seat =>
Parallel.ForEach(Chairs.Where(x => x.Unlocked), seat =>
{
if (seat.HairLength < BarberShopConsts.MaxHairLength)
// TODO: Passing in 'this' works but just feels awful
double hairGrowth = seat.GetHairGrowthWithScalingFactor(BaseHairPerTick);
double maxHairLength = seat.GetMaxHairLength();

// If we are making more per tick than we can hold
if (hairGrowth > maxHairLength)
{
double growthRate = HairGrowth * (seat.SeatNumber == SeatNumber.One ? 1 : Math.Pow(BarberShopConsts.BaseReduction, (int)seat.SeatNumber));
double newLength = Math.Round(seat.HairLength + growthRate, 3);
if (newLength >= BarberShopConsts.MaxHairLength)
seat.HairLength = maxHairLength;

if (ClippersPurchased)
{
if (ClippersPurchased)
{
HairCollected = Math.Round(HairCollected + BarberShopConsts.MaxHairLength, 3);
newLength = 0;
}
else
{
newLength = BarberShopConsts.MaxHairLength;
}
HairCollected = Math.Round(HairCollected + seat.HairLength, 3);
}

return;
}

seat.HairLength = newLength;
// If we are full
if (seat.HairLength >= maxHairLength)
{
if (ClippersPurchased)
{
HairCollected = Math.Round(HairCollected + maxHairLength, 3);
seat.HairLength = 0;
}
else
{
seat.HairLength = maxHairLength;
}
return;
}

// Else we can add it to the seats hair length
seat.HairLength = Math.Round(seat.HairLength + hairGrowth, 3);
});
}
}
20 changes: 6 additions & 14 deletions BaldersGait/ViewModels/MainWindowViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,18 +32,6 @@ public PanelBase CurrentPanel
return;
}

Parallel.ForEach(_sidebar.Buttons, sidebarButton =>
{
if (sidebarButton.ButtonText != value.PanelName)
{
sidebarButton.ResetBackground();
}
else
{
sidebarButton.SetBackgroundSelected();
}
});

this.RaiseAndSetIfChanged(ref _currentPanel, value);
}
}
Expand All @@ -62,8 +50,12 @@ public MainWindowViewModel(SidebarViewModel sidebar, IStateService stateService)
SidebarButtonViewModel button = _sidebar.Buttons.First();
_currentPanel = button.PanelToOpen;
Log.Information($"Starting panel: {_currentPanel.PanelName}");
button.SetBackgroundSelected();

RxApp.TaskpoolScheduler.SchedulePeriodic(TimeSpan.FromMilliseconds(100), stateService.TickState);
RxApp.TaskpoolScheduler.SchedulePeriodic(TimeSpan.FromMilliseconds(10), stateService.TickState);
}

protected override void RefreshUIFromState()
{
// Nothing to do
}
}
Original file line number Diff line number Diff line change
@@ -1,29 +1,21 @@
using Avalonia.Media;
using BaldersGait.Models.State.BarberShop;
using BaldersGait.Services.Interface;

namespace BaldersGait.ViewModels.Panels.BarberShop;

public class BarberShopBottomViewModel : ViewModelBase
public class BarberShopBottomViewModel(IStateService stateService) : ViewModelBase
{
public BarberShopChairViewModel SeatOne { get; init; }
public BarberShopChairViewModel SeatTwo { get; init; }
public BarberShopChairViewModel SeatThree { get; init; }
public BarberShopChairViewModel SeatFour { get; init; }
public BarberShopChairViewModel SeatFive { get; init; }
public BarberShopChairViewModel SeatSix { get; init; }
public BarberShopChairViewModel SeatSeven { get; init; }
public BarberShopChairViewModel SeatEight { get; init; }
public BarberShopBottomViewModel(IStateService stateService)
public BarberShopChairViewModel SeatOne { get; init; } = new(stateService, ChairNumbers.One);
public BarberShopChairViewModel SeatTwo { get; init; } = new(stateService, ChairNumbers.Two);
public BarberShopChairViewModel SeatThree { get; init; } = new(stateService, ChairNumbers.Three);
public BarberShopChairViewModel SeatFour { get; init; } = new(stateService, ChairNumbers.Four);
public BarberShopChairViewModel SeatFive { get; init; } = new(stateService, ChairNumbers.Five);
public BarberShopChairViewModel SeatSix { get; init; } = new(stateService, ChairNumbers.Six);
public BarberShopChairViewModel SeatSeven { get; init; } = new(stateService, ChairNumbers.Seven);
public BarberShopChairViewModel SeatEight { get; init; } = new(stateService, ChairNumbers.Eight);

protected override void RefreshUIFromState()
{
SeatOne = new(stateService, SeatNumber.One);
SeatTwo = new(stateService, SeatNumber.Two);
SeatThree = new(stateService, SeatNumber.Three);
SeatFour = new(stateService, SeatNumber.Four);
SeatFive = new(stateService, SeatNumber.Five);
SeatSix = new(stateService, SeatNumber.Six);
SeatSeven = new(stateService, SeatNumber.Seven);
SeatEight = new(stateService, SeatNumber.Eight);
// Nothing to do
}
}
Loading

0 comments on commit e5d1dee

Please sign in to comment.