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 const int MinEffectiveValue = 5;
|
||||
|
||||
[Key]
|
||||
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>
|
||||
public DbSet<Planet> Planets { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Lists of all defined races.
|
||||
/// </summary>
|
||||
public DbSet<Race> Races { get; set; }
|
||||
|
||||
#endregion
|
||||
}
|
@ -18,7 +18,7 @@ sealed class Program
|
||||
[STAThread]
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
// __createTestData();
|
||||
__createTestData();
|
||||
|
||||
BuildAvaloniaApp()
|
||||
.StartWithClassicDesktopLifetime(args);
|
||||
@ -42,6 +42,23 @@ sealed class Program
|
||||
// Note: This sample requires the database to be created before running.
|
||||
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);
|
||||
config.Delimiter = "\t";
|
||||
config.Escape = '\0';
|
||||
|
Loading…
Reference in New Issue
Block a user