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