private Design makeDesign(StaticsDB statics, StatesDB states, PredefinedDesign predefDesign, Dictionary <string, double> techLevels, bool isVirtual) { var hull = statics.Hulls[predefDesign.HullCode].MakeHull(techLevels); var specials = predefDesign.SpecialEquipment.OrderBy(x => x.Key).Select( x => statics.SpecialEquipment[x.Key].MakeBest(techLevels, x.Value) ).ToList(); var armor = AComponentType.MakeBest(statics.Armors.Values, techLevels); var reactor = ReactorType.MakeBest(techLevels, hull, specials, statics); var isDrive = predefDesign.HasIsDrive ? IsDriveType.MakeBest(techLevels, hull, reactor, specials, statics) : null; var sensor = AComponentType.MakeBest(statics.Sensors.Values, techLevels); var shield = predefDesign.ShieldCode != null ? statics.Shields[predefDesign.ShieldCode].MakeBest(techLevels) : null; var equipment = predefDesign.MissionEquipment.Select( x => statics.MissionEquipment[x.Key].MakeBest(techLevels, x.Value) ).ToList(); var thruster = AComponentType.MakeBest(statics.Thrusters.Values, techLevels); var design = new Design( states.MakeDesignId(), Player, false, isVirtual, predefDesign.Name, predefDesign.HullImageIndex, armor, hull, isDrive, reactor, sensor, shield, equipment, specials, thruster ); design.CalcHash(statics); if (!states.Designs.Contains(design)) { states.Designs.Add(design); this.Analyze(design, statics); return(design); } return(states.Designs.First(x => x == design)); }
public Design DesignUpgrade(Design oldDesign, StaticsDB statics, StatesDB states) { var techLevels = states.DevelopmentAdvances.Of[Player].ToDictionary(x => x.Topic.IdCode, x => (double)x.Level); var hull = statics.Hulls[oldDesign.Hull.TypeInfo.IdCode].MakeHull(techLevels); var specials = oldDesign.SpecialEquipment.Select( x => statics.SpecialEquipment[x.TypeInfo.IdCode].MakeBest(techLevels, x.Quantity) ).ToList(); var armor = AComponentType.MakeBest(statics.Armors.Values, techLevels); var reactor = ReactorType.MakeBest(techLevels, hull, specials, statics); var isDrive = oldDesign.IsDrive != null?IsDriveType.MakeBest(techLevels, hull, reactor, specials, statics) : null; var sensor = AComponentType.MakeBest(statics.Sensors.Values, techLevels); var shield = oldDesign.Shield != null ? statics.Shields[oldDesign.Shield.TypeInfo.IdCode].MakeBest(techLevels) : null; var equipment = oldDesign.MissionEquipment.Select( x => statics.MissionEquipment[x.TypeInfo.IdCode].MakeBest(techLevels, x.Quantity) ).ToList(); var thruster = AComponentType.MakeBest(statics.Thrusters.Values, techLevels); var design = new Design( states.MakeDesignId(), Player, false, oldDesign.IsVirtual, oldDesign.Name, oldDesign.ImageIndex, armor, hull, isDrive, reactor, sensor, shield, equipment, specials, thruster ); design.CalcHash(statics); return(design); }
private void makeDesign(StaticsDB statics, StatesDB states, DesignTemplate predefDesign, Dictionary <string, double> techLevels) { var hull = statics.Hulls[predefDesign.HullCode].MakeHull(techLevels); var specials = predefDesign.SpecialEquipment.OrderBy(x => x.Key).Select( x => statics.SpecialEquipment[x.Key].MakeBest(techLevels, x.Value) ).ToList(); var equipment = predefDesign.MissionEquipment.Select( x => statics.MissionEquipment[x.Key].MakeBest(techLevels, x.Value) ).ToList(); var armor = AComponentType.MakeBest(statics.Armors.Values, techLevels); var reactor = ReactorType.MakeBest(techLevels, hull, specials, equipment, statics); var isDrive = predefDesign.HasIsDrive ? IsDriveType.MakeBest(techLevels, hull, reactor, specials, equipment, statics) : null; var sensor = AComponentType.MakeBest(statics.Sensors.Values, techLevels); var shield = predefDesign.ShieldCode != null ? statics.Shields[predefDesign.ShieldCode].MakeBest(techLevels) : null; var thruster = AComponentType.MakeBest(statics.Thrusters.Values, techLevels); var design = new Design( this.Player, predefDesign.Name, predefDesign.HullImageIndex, true, armor, hull, isDrive, reactor, sensor, thruster, shield, equipment, specials ); if (!states.Designs.Contains(design)) { states.Designs.Add(design); this.Analyze(design, statics); } }
private Component <IsDriveType> bestIsDrive() => IsDriveType.MakeBest( playersTechLevels, this.selectedHull, this.bestReactor(), this.selectedSpecialEquipment, this.selectedMissionEquipment, game.Statics );
internal IsDriveInfo(IsDriveType isDriveType, int level, IDictionary <string, double> shipVars) { this.Type = isDriveType; this.Level = level; this.vars = new Dictionary <string, double>(shipVars); this.vars[AComponentType.LevelKey] = level; }
private IsDriveInfo bestIsDrive() { var hull = new Component <HullType>(this.selectedHull.Type, this.selectedHull.Level); var reactor = new Component <ReactorType>(this.reactorInfo.Type, this.reactorInfo.Level); var drive = IsDriveType.MakeBest( playersTechLevels, hull, reactor, this.selectedSpecialEquipment, game.Statics ); return(drive != null ? new IsDriveInfo(drive.TypeInfo, drive.Level, PlayerProcessor.DesignPoweredVars(hull, reactor, this.selectedSpecialEquipment, game.Statics).Get) : null); }
private void makeDesign(StaticsDB statics, StatesDB states, string id, PredefinedDesign predefDesign, PlayerProcessor playerProc) { var design = states.Designs.FirstOrDefault(x => x.IdCode == id); if (design == null) { var techLevels = new Var(). Init(statics.DevelopmentTopics.Select(x => x.IdCode), false). Init(statics.ResearchTopics.Select(x => x.IdCode), false).Get; var hull = statics.Hulls[predefDesign.HullCode].MakeHull(techLevels); var specials = predefDesign.SpecialEquipment.OrderBy(x => x.Key).Select( x => statics.SpecialEquipment[x.Key].MakeBest(techLevels, x.Value) ).ToList(); var armor = AComponentType.MakeBest(statics.Armors.Values, techLevels); //TODO(0.5) get id from template var reactor = ReactorType.MakeBest(techLevels, hull, specials, statics); //TODO(0.5) get id from template var isDrive = predefDesign.HasIsDrive ? IsDriveType.MakeBest(techLevels, hull, reactor, specials, statics) : null; //TODO(0.5) get id from template var sensor = AComponentType.MakeBest(statics.Sensors.Values, techLevels); //TODO(0.5) get id from template var shield = predefDesign.ShieldCode != null ? statics.Shields[predefDesign.ShieldCode].MakeBest(techLevels) : null; var equipment = predefDesign.MissionEquipment.Select( x => statics.MissionEquipment[x.Key].MakeBest(techLevels, x.Value) ).ToList(); var thruster = AComponentType.MakeBest(statics.Thrusters.Values, techLevels); //TODO(0.5) get id from template design = new Design( id, playerProc.Player, false, true, predefDesign.Name, predefDesign.HullImageIndex, armor, hull, isDrive, reactor, sensor, shield, equipment, specials, thruster ); design.CalcHash(statics); states.Designs.Add(design); } playerProc.Analyze(design, statics); }