Add Race Table with basic derived properties (incomplete yet)
This commit is contained in:
@ -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
|
||||
}
|
Reference in New Issue
Block a user