Add Race Table with basic derived properties (incomplete yet)
This commit is contained in:
parent
1d3765a769
commit
15b252248a
@ -5,6 +5,8 @@ namespace StarsAssistant.Model;
|
|||||||
|
|
||||||
public class Planet
|
public class Planet
|
||||||
{
|
{
|
||||||
|
public const int MinEffectiveValue = 5;
|
||||||
|
|
||||||
[Key]
|
[Key]
|
||||||
public required string Name { get; set; }
|
public required string Name { get; set; }
|
||||||
|
|
||||||
|
90
Stars Assistant/Model/Race.cs
Normal file
90
Stars Assistant/Model/Race.cs
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System;
|
||||||
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
|
||||||
|
namespace StarsAssistant.Model;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Primary Racial Trait, only PRTs with relevant rules are currently listed.
|
||||||
|
/// </summary>
|
||||||
|
public enum PRT {
|
||||||
|
Other = 0,
|
||||||
|
HE = 1,
|
||||||
|
JOAT = 2
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Race
|
||||||
|
{
|
||||||
|
[Key]
|
||||||
|
public required string Name { get; set; }
|
||||||
|
|
||||||
|
public int ColonistsPerResource { get; set; }
|
||||||
|
|
||||||
|
public int GrowthRatePercent { get; set; }
|
||||||
|
|
||||||
|
private PRT _PRT;
|
||||||
|
public PRT PRT {
|
||||||
|
get => _PRT;
|
||||||
|
set {
|
||||||
|
_PRT = value;
|
||||||
|
UpdatePopDerivedValues();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool _hasOBRM;
|
||||||
|
public bool HasOBRM {
|
||||||
|
get => _hasOBRM;
|
||||||
|
set {
|
||||||
|
_hasOBRM = value;
|
||||||
|
UpdatePopDerivedValues();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[NotMapped]
|
||||||
|
public int MaxPopOnPlanet { get; private set; } = 1_000_000;
|
||||||
|
|
||||||
|
[NotMapped]
|
||||||
|
public int MaxEffectivePopOnRed { get; private set; }
|
||||||
|
|
||||||
|
[NotMapped]
|
||||||
|
public int MaxEffectivePopOnGreen { get; private set; }
|
||||||
|
|
||||||
|
private bool _factoryCost3;
|
||||||
|
public bool FactoryCost3 {
|
||||||
|
get => _factoryCost3;
|
||||||
|
set {
|
||||||
|
_factoryCost3 = value;
|
||||||
|
FactoryGerCost = _factoryCost3 ? 3 : 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[NotMapped]
|
||||||
|
public int FactoryGerCost { get; private set; }
|
||||||
|
|
||||||
|
public int FactoryNumberPer10k { get; set; }
|
||||||
|
|
||||||
|
public int FactoryResCost { get; set; }
|
||||||
|
|
||||||
|
public int FactoryResPer10 { get; set; }
|
||||||
|
|
||||||
|
public int MineResCost { get; set; }
|
||||||
|
|
||||||
|
public int MineNumberPer10k { get; set; }
|
||||||
|
|
||||||
|
public int MineMineralsPer10 { get; set; }
|
||||||
|
|
||||||
|
private void UpdatePopDerivedValues() {
|
||||||
|
const int basePop = 1_000_000;
|
||||||
|
var prtMod = PRT switch
|
||||||
|
{
|
||||||
|
PRT.HE => 0.5,
|
||||||
|
PRT.JOAT => 1.2,
|
||||||
|
_ => 1,
|
||||||
|
};
|
||||||
|
double obrmMod = HasOBRM ? 1.1 : 1.0;
|
||||||
|
MaxPopOnPlanet = Convert.ToInt32(basePop * prtMod * obrmMod);
|
||||||
|
MaxEffectivePopOnRed = MaxPopOnPlanet * Planet.MinEffectiveValue / 100 * 3;
|
||||||
|
MaxEffectivePopOnGreen = MaxPopOnPlanet * 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -27,5 +27,10 @@ public class StarsDatabase(string DbPath) : DbContext
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public DbSet<Planet> Planets { get; set; }
|
public DbSet<Planet> Planets { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Lists of all defined races.
|
||||||
|
/// </summary>
|
||||||
|
public DbSet<Race> Races { get; set; }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
@ -18,7 +18,7 @@ sealed class Program
|
|||||||
[STAThread]
|
[STAThread]
|
||||||
public static void Main(string[] args)
|
public static void Main(string[] args)
|
||||||
{
|
{
|
||||||
// __createTestData();
|
__createTestData();
|
||||||
|
|
||||||
BuildAvaloniaApp()
|
BuildAvaloniaApp()
|
||||||
.StartWithClassicDesktopLifetime(args);
|
.StartWithClassicDesktopLifetime(args);
|
||||||
@ -42,6 +42,23 @@ sealed class Program
|
|||||||
// Note: This sample requires the database to be created before running.
|
// Note: This sample requires the database to be created before running.
|
||||||
Console.WriteLine($"Database path: {db.DbPath}.");
|
Console.WriteLine($"Database path: {db.DbPath}.");
|
||||||
|
|
||||||
|
Race r = new()
|
||||||
|
{
|
||||||
|
Name = "Atlantis",
|
||||||
|
ColonistsPerResource = 1000,
|
||||||
|
GrowthRatePercent = 19,
|
||||||
|
PRT = PRT.Other,
|
||||||
|
HasOBRM = true,
|
||||||
|
FactoryCost3 = false,
|
||||||
|
FactoryNumberPer10k = 8,
|
||||||
|
FactoryResCost = 8,
|
||||||
|
FactoryResPer10 = 15,
|
||||||
|
MineResCost = 3,
|
||||||
|
MineMineralsPer10 = 10,
|
||||||
|
MineNumberPer10k = 10
|
||||||
|
};
|
||||||
|
db.Add(r);
|
||||||
|
|
||||||
var config = CsvConfiguration.FromAttributes<Planet>(CultureInfo.InvariantCulture);
|
var config = CsvConfiguration.FromAttributes<Planet>(CultureInfo.InvariantCulture);
|
||||||
config.Delimiter = "\t";
|
config.Delimiter = "\t";
|
||||||
config.Escape = '\0';
|
config.Escape = '\0';
|
||||||
|
Loading…
Reference in New Issue
Block a user