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