Implement BuCol
This commit is contained in:
parent
800dcf23ba
commit
efa5d452ea
@ -10,7 +10,7 @@ public class Planet
|
|||||||
public required string Name { get; set; }
|
public required string Name { get; set; }
|
||||||
|
|
||||||
[Index(1)]
|
[Index(1)]
|
||||||
public string? Owner { get; set; }
|
public string Owner { get; set; } = String.Empty;
|
||||||
|
|
||||||
[Index(2)]
|
[Index(2)]
|
||||||
public string StarbaseType { get; set; } = String.Empty;
|
public string StarbaseType { get; set; } = String.Empty;
|
||||||
@ -240,7 +240,7 @@ public class Planet
|
|||||||
if (dbPlanet.Name != Name)
|
if (dbPlanet.Name != Name)
|
||||||
throw new InvalidOperationException($"DB Planet Name {dbPlanet.Name} does not macth the CSV Planet Name {Name}");
|
throw new InvalidOperationException($"DB Planet Name {dbPlanet.Name} does not macth the CSV Planet Name {Name}");
|
||||||
|
|
||||||
dbPlanet.OwnerId = Owner != "" ? Owner : null;
|
dbPlanet.OwnerId = Owner;
|
||||||
dbPlanet.StarbaseType = StarbaseType;
|
dbPlanet.StarbaseType = StarbaseType;
|
||||||
dbPlanet.ReportAge = ReportAge;
|
dbPlanet.ReportAge = ReportAge;
|
||||||
dbPlanet.Population = Population;
|
dbPlanet.Population = Population;
|
||||||
|
@ -5,12 +5,12 @@ namespace StarsAssistant.Model;
|
|||||||
|
|
||||||
public class Planet
|
public class Planet
|
||||||
{
|
{
|
||||||
#region Persistant and derived propeties
|
#region Persistant propeties
|
||||||
|
|
||||||
[Key]
|
[Key]
|
||||||
public required string Name { get; set; }
|
public required string Name { get; set; }
|
||||||
|
|
||||||
public string? OwnerId { get; set; }
|
public string OwnerId { get; set; } = String.Empty;
|
||||||
|
|
||||||
public string StarbaseType { get; set; } = String.Empty;
|
public string StarbaseType { get; set; } = String.Empty;
|
||||||
|
|
||||||
@ -70,7 +70,7 @@ public class Planet
|
|||||||
|
|
||||||
public int? DriverWarp { get; set; }
|
public int? DriverWarp { get; set; }
|
||||||
|
|
||||||
public string? RouteTarget { get; set; }
|
public string RouteTarget { get; set; } = String.Empty;
|
||||||
|
|
||||||
public int? GateRange { get; set; }
|
public int? GateRange { get; set; }
|
||||||
|
|
||||||
@ -86,22 +86,4 @@ public class Planet
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Derived Properties
|
|
||||||
|
|
||||||
// public int EffectiveValue() => EffectiveValue(Value);
|
|
||||||
|
|
||||||
// public int MaxPopOnPlanet() => MaxPopOnPlanet(Value);
|
|
||||||
|
|
||||||
// public int PopGrowth() => PopGrowth(Population ?? 0, MaxPopOnPlanet(), Value ?? 0);
|
|
||||||
|
|
||||||
// public int MaxFact() => MaxFact(Population ?? 0);
|
|
||||||
|
|
||||||
// public int MaxMines() => MaxMines(Population ?? 0);
|
|
||||||
|
|
||||||
// public int ResourcesFromPop() => ResourcesFromPop(Population ?? 0, Value ?? 0);
|
|
||||||
|
|
||||||
// public int ResourcesFromFact() => ResourcesFromFact(Population ?? 0, Factories ?? 0, Value ?? 0);
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
}
|
}
|
@ -18,6 +18,15 @@ public class StarsDatabase(string DbPath) : DbContext
|
|||||||
protected override void OnConfiguring(DbContextOptionsBuilder options)
|
protected override void OnConfiguring(DbContextOptionsBuilder options)
|
||||||
=> options.UseSqlite($"Data Source={DbPath}");
|
=> options.UseSqlite($"Data Source={DbPath}");
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Configure the model, force it to use property accessors we define.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="modelBuilder">model builder</param>
|
||||||
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
modelBuilder.UsePropertyAccessMode(PropertyAccessMode.Property);
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region IStarsDatabase Implementation
|
#region IStarsDatabase Implementation
|
||||||
|
@ -40,25 +40,25 @@ public class GameEngine
|
|||||||
public static int PlanetPopGrowthForPlayer(int currentPop, int value)
|
public static int PlanetPopGrowthForPlayer(int currentPop, int value)
|
||||||
{
|
{
|
||||||
int maxPop = MaxPopOnPlanetForPlayer(value);
|
int maxPop = MaxPopOnPlanetForPlayer(value);
|
||||||
int growth;
|
double growth;
|
||||||
|
|
||||||
if (value < 0)
|
if (value < 0)
|
||||||
{
|
{
|
||||||
growth = currentPop * value / 10;
|
growth = currentPop * value / 1000;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
double popRatio = currentPop / maxPop;
|
double popRatio = (double) currentPop / maxPop;
|
||||||
if (popRatio <= 0.25)
|
if (popRatio <= 0.25)
|
||||||
growth = currentPop * value * Game.Player.GrowthRatePercent / 100;
|
growth = currentPop * value / 100.0 * Game.Player.GrowthRatePercent / 100.0;
|
||||||
else if (popRatio <= 1)
|
else if (popRatio <= 1)
|
||||||
growth = currentPop * value * Game.Player.GrowthRatePercent /100 * 16 / 9 * ((int) Math.Pow(1 - popRatio, 2));
|
growth = currentPop * value / 100.0 * Game.Player.GrowthRatePercent / 100.0 * 16.0 / 9.0 * Math.Pow(1.0 - popRatio, 2);
|
||||||
else
|
else
|
||||||
growth = (int) (currentPop * (popRatio - 1) * 0.04);
|
growth = currentPop * (popRatio - 1) * 0.04;
|
||||||
}
|
}
|
||||||
|
|
||||||
// round to nearest 100
|
// round to nearest 100
|
||||||
return growth / 100 * 100;
|
return ((int) growth) / 100 * 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -21,5 +21,5 @@ public partial class BuColViewModel : ViewModelBase
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public ObservableCollection<PlanetViewModel> Planets { get; } = PlanetViewModel.LoadAll();
|
public ObservableCollection<PlayerPlanetViewModel> Planets { get; } = PlanetViewModel.LoadAll();
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,8 @@ namespace StarsAssistant.ViewModels;
|
|||||||
|
|
||||||
public partial class PlanetViewModel : ViewModelBase
|
public partial class PlanetViewModel : ViewModelBase
|
||||||
{
|
{
|
||||||
|
private readonly Planet Planet;
|
||||||
|
|
||||||
public PlanetViewModel(Planet planet)
|
public PlanetViewModel(Planet planet)
|
||||||
{
|
{
|
||||||
Planet = planet;
|
Planet = planet;
|
||||||
@ -22,7 +24,6 @@ public partial class PlanetViewModel : ViewModelBase
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly Planet Planet;
|
|
||||||
|
|
||||||
public string Name => Planet.Name;
|
public string Name => Planet.Name;
|
||||||
|
|
||||||
@ -42,13 +43,14 @@ public partial class PlanetViewModel : ViewModelBase
|
|||||||
|
|
||||||
// ### TESTING CODE ###
|
// ### TESTING CODE ###
|
||||||
|
|
||||||
public static ObservableCollection<PlanetViewModel> LoadAll()
|
public static ObservableCollection<PlayerPlanetViewModel> LoadAll()
|
||||||
{
|
{
|
||||||
using var db = Locator.Current.GetService<StarsDatabase>()!;
|
using var db = Locator.Current.GetService<StarsDatabase>()!;
|
||||||
var result = new ObservableCollection<PlanetViewModel>();
|
var result = new ObservableCollection<PlayerPlanetViewModel>();
|
||||||
foreach (Planet planet in db.Planet.Where(p => p.OwnerId == "Atlantis").ToList())
|
foreach (Planet planet in db.Planet.Where(p => p.OwnerId == "Atlantis").ToList())
|
||||||
|
// foreach (Planet planet in db.Planet.Where(p => p.Name == "Saddam").ToList())
|
||||||
{
|
{
|
||||||
var vm = new PlanetViewModel(planet);
|
var vm = new PlayerPlanetViewModel(planet);
|
||||||
result.Add(vm);
|
result.Add(vm);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
128
Stars Assistant/ViewModels/PlayerPlanetViewModel.cs
Normal file
128
Stars Assistant/ViewModels/PlayerPlanetViewModel.cs
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
using System.Collections.ObjectModel;
|
||||||
|
using System.Reactive.Disposables;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using ReactiveUI;
|
||||||
|
using StarsAssistant.Services;
|
||||||
|
using Splat;
|
||||||
|
|
||||||
|
namespace StarsAssistant.ViewModels;
|
||||||
|
|
||||||
|
public partial class PlayerPlanetViewModel : ViewModelBase
|
||||||
|
{
|
||||||
|
private readonly Model.Planet Planet;
|
||||||
|
|
||||||
|
private Game Game;
|
||||||
|
|
||||||
|
public PlayerPlanetViewModel(Model.Planet planet)
|
||||||
|
{
|
||||||
|
Game = Locator.Current.GetService<Game>()!;
|
||||||
|
|
||||||
|
if (planet.OwnerId != Game.Player.Name)
|
||||||
|
throw new InvalidOperationException("PlayerPlanet ViewModels can only be created for player planets.");
|
||||||
|
|
||||||
|
Planet = planet;
|
||||||
|
|
||||||
|
this.WhenActivated((CompositeDisposable disposables) =>
|
||||||
|
{
|
||||||
|
// /* handle activation */
|
||||||
|
// Disposable
|
||||||
|
// .Create(() => { /* handle deactivation */ })
|
||||||
|
// .DisposeWith(disposables);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Database Properties
|
||||||
|
|
||||||
|
public string Name => Planet.Name;
|
||||||
|
|
||||||
|
public string Owner => Planet.OwnerId;
|
||||||
|
|
||||||
|
public string StarbaseType => Planet.StarbaseType;
|
||||||
|
|
||||||
|
public int Population => Planet.Population ?? 0;
|
||||||
|
|
||||||
|
public int Value => Planet.Value ?? 0;
|
||||||
|
|
||||||
|
public int Mines => Planet.Mines ?? 0;
|
||||||
|
|
||||||
|
public int Factories => Planet.Factories ?? 0;
|
||||||
|
|
||||||
|
public decimal DefPercent => Planet.DefPercent ?? 0;
|
||||||
|
|
||||||
|
public int SurfaceIronium => Planet.SurfaceIronium ?? 0;
|
||||||
|
|
||||||
|
public int SurfaceBoranium => Planet.SurfaceBoranium ?? 0;
|
||||||
|
|
||||||
|
public int SurfaceGermanium => Planet.SurfaceGermanium ?? 0;
|
||||||
|
|
||||||
|
public int MRIronium => Planet.MRIronium ?? 0;
|
||||||
|
|
||||||
|
public int MRBoranium => Planet.MRBoranium ?? 0;
|
||||||
|
|
||||||
|
public int MRGermanium => Planet.MRGermanium ?? 0;
|
||||||
|
|
||||||
|
public int MCIronium => Planet.MCIronium ?? 0;
|
||||||
|
|
||||||
|
public int MCBoranium => Planet.MCBoranium ?? 0;
|
||||||
|
|
||||||
|
public int MCGermanium => Planet.MCGermanium ?? 0;
|
||||||
|
|
||||||
|
public int Resources => Planet.Resources ?? 0;
|
||||||
|
|
||||||
|
public decimal Gravity => Planet.Gravity ?? 0;
|
||||||
|
|
||||||
|
public decimal Temperature => Planet.Temperature ?? 0;
|
||||||
|
|
||||||
|
public decimal Radiation => Planet.Radiation ?? 0;
|
||||||
|
|
||||||
|
public decimal GravityOrig => Planet.GravityOrig ?? 0;
|
||||||
|
|
||||||
|
public decimal TemperatureOrig => Planet.TemperatureOrig ?? 0;
|
||||||
|
|
||||||
|
public decimal RadiationOrig => Planet.RadiationOrig ?? 0;
|
||||||
|
|
||||||
|
public int MaxTerraforming => Planet.MaxTerraforming ?? 0;
|
||||||
|
|
||||||
|
public int CapacityPercent => Planet.CapacityPercent ?? 0;
|
||||||
|
|
||||||
|
public int ScanRange => Planet.ScanRange ?? 0;
|
||||||
|
|
||||||
|
public int PenScanRange => Planet.PenScanRange ?? 0;
|
||||||
|
|
||||||
|
public int Driver => Planet.Driver ?? 0;
|
||||||
|
|
||||||
|
public int DriverWarp => Planet.DriverWarp ?? 0;
|
||||||
|
|
||||||
|
public string RouteTarget => Planet.RouteTarget;
|
||||||
|
|
||||||
|
public int GateRange => Planet.GateRange ?? 0;
|
||||||
|
|
||||||
|
public int GateMass => Planet.GateMass ?? 0;
|
||||||
|
|
||||||
|
public int PctDamage => Planet.PctDamage ?? 0;
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Derived Properties
|
||||||
|
|
||||||
|
public int EffectiveValue => GameEngine.EffectivePlanetValue(Value);
|
||||||
|
|
||||||
|
public int MaxPopulation => GameEngine.MaxPopOnPlanetForPlayer(Value);
|
||||||
|
|
||||||
|
public int PopulationGrowth => GameEngine.PlanetPopGrowthForPlayer(Population, Value);
|
||||||
|
|
||||||
|
public int BuildableFactories => GameEngine.MaxBuildableFactoriesForPlayer(Value);
|
||||||
|
|
||||||
|
public int BuildableMines => GameEngine.MaxBuildableMinesForPlayer(Value);
|
||||||
|
|
||||||
|
public int OperableFactories => GameEngine.MaxOperableFactoriesForPlayer(Population, Value);
|
||||||
|
|
||||||
|
public int OperableMines => GameEngine.MaxOperableMinesForPlayer(Population, Value);
|
||||||
|
|
||||||
|
public int ResourcesFromPopulation => GameEngine.ResourcesFromPopForPlayer(Population, Value);
|
||||||
|
|
||||||
|
public int ResourcesFromFactories => GameEngine.ResourcesFromFactForPlayer(Population, Factories, Value);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
}
|
@ -16,7 +16,39 @@
|
|||||||
BorderThickness="1" BorderBrush="Gray">
|
BorderThickness="1" BorderBrush="Gray">
|
||||||
<DataGrid.Columns>
|
<DataGrid.Columns>
|
||||||
<DataGridTextColumn Header="Planet" Binding="{Binding Name}" />
|
<DataGridTextColumn Header="Planet" Binding="{Binding Name}" />
|
||||||
|
<!-- Class -->
|
||||||
|
<!-- Info -->
|
||||||
|
<DataGridTextColumn Header="Pop" Binding="{Binding Population}" />
|
||||||
|
<!-- Pop To Ship -->
|
||||||
|
<DataGridTextColumn Header="Growth" Binding="{Binding PopulationGrowth}" />
|
||||||
|
<!-- Pop en route -->
|
||||||
|
<!-- Pop Target % -->
|
||||||
|
<DataGridTextColumn Header="Pop%" Binding="{Binding CapacityPercent}" />
|
||||||
|
<!-- Terra Delta assumed -->
|
||||||
<DataGridTextColumn Header="Value" Binding="{Binding Value}" />
|
<DataGridTextColumn Header="Value" Binding="{Binding Value}" />
|
||||||
|
<!-- Effective Value including Terra Delta -->
|
||||||
|
<DataGridTextColumn Header="Max Val" Binding="{Binding MaxTerraforming}" />
|
||||||
|
<!-- Cargo Cap T1 -->
|
||||||
|
<!-- Cargo Cap T0 -->
|
||||||
|
<!-- Iro MRE including Shipping -->
|
||||||
|
<!-- Iro Avl including MRE -->
|
||||||
|
<!-- Iro Shipping including MRE -->
|
||||||
|
<!-- Bor MRE including Shipping -->
|
||||||
|
<!-- Bor Avl including MRE -->
|
||||||
|
<!-- Bor Shipping including MRE -->
|
||||||
|
<!-- Ger MRE including Shipping -->
|
||||||
|
<!-- Ger Avl including MRE -->
|
||||||
|
<!-- Bor Shipping including MRE -->
|
||||||
|
<!-- Shipbuilding Columns -->
|
||||||
|
<!-- Factories remaining to pop target -->
|
||||||
|
<!-- Factories Germanium Delta for target -->
|
||||||
|
<!-- Factory production per turn -->
|
||||||
|
<!-- Mines remaining to pop target -->
|
||||||
|
<DataGridTextColumn Header="Mines" Binding="{Binding Mines}" />
|
||||||
|
<DataGridTextColumn Header="Fact" Binding="{Binding Factories}" />
|
||||||
|
<DataGridTextColumn Header="Res" Binding="{Binding Resources}" />
|
||||||
|
<!-- Overcrowding Rate -->
|
||||||
|
<!-- Target population absolute -->
|
||||||
</DataGrid.Columns>
|
</DataGrid.Columns>
|
||||||
</DataGrid>
|
</DataGrid>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user