sa/Stars Assistant/Model/Race.cs

91 lines
2.1 KiB
C#

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;
}
}