91 lines
2.1 KiB
C#
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;
|
||
|
}
|
||
|
|
||
|
}
|