public static void Main() { Loader loader = new Loader(); using (FileStream fs = File.Create("ComponentsAndAmmo.config")) using (StreamWriter sw = new StreamWriter(fs)) { sw.Write(@"{""Items"":["); foreach (Component comp in loader.Hulls) sw.Write(comp.ToJSON()+","); foreach (Component comp in loader.PlasmaDrives) sw.Write(comp.ToJSON() + ","); foreach (Component comp in loader.WarpDrives) sw.Write(comp.ToJSON()+","); foreach (Component comp in loader.GellarFields) sw.Write(comp.ToJSON()+","); foreach (Component comp in loader.VoidShields) sw.Write(comp.ToJSON() + ","); foreach (Component comp in loader.Bridges) sw.Write(comp.ToJSON() + ","); foreach (Component comp in loader.LifeSustainers) sw.Write(comp.ToJSON() + ","); foreach (Component comp in loader.CrewQuarters) sw.Write(comp.ToJSON() + ","); foreach (Component comp in loader.AugurArrays) sw.Write(comp.ToJSON() + ","); foreach (Component comp in loader.Weapons) sw.Write(comp.ToJSON() + ","); foreach (Component comp in loader.Supplementals) sw.Write(comp.ToJSON() + ","); for (int i = 0; i < loader.Squadrons.Count; i++) { sw.Write(loader.Squadrons[i].ToJSON()); if (i < loader.Squadrons.Count - 1) sw.Write(','); } sw.Write(@"]}"); } }
public WeaponChooser(Starship starship, WeaponSlot slot, int index, Loader loader) { if (starship == null || starship.Hull == null) throw new ArgumentException("Cannot create weapon chooser without starship or hull"); this.Starship = starship; this.Index = index; WeaponRowCount = 0; InitializeComponent(); Label label; Button button; TextBox textbox; TextBlock textblock; button = new Button(); button.Content = "Clear Weapon"; button.Click += ((s, e) => SetCurrent(null)); Grid.SetRow(button, WeaponRowCount); Grid.SetColumn(button, 0); WeaponGrid.Children.Add(button); foreach (var group in loader.Weapons.Where(x => (x.HullTypes & starship.Hull.HullTypes) != 0 && (x.Slots & slot) != 0).GroupBy(x => x.ComponentOrigin).OrderBy(x => x.Key)) { if (group.Key != ComponentOrigin.Standard) { label = new Label(); label.Content = group.Key.ToString(); Grid.SetRow(label, WeaponRowCount++); Grid.SetColumn(label, 0); WeaponGrid.Children.Add(label); } foreach (Weapon weapon in group) { button = new Button(); button.Content = weapon.Name; button.Click += ((s,e) => SetCurrent(weapon, weapon.Quality, weapon.WeaponQuality)); Grid.SetRow(button, WeaponRowCount); Grid.SetColumn(button, 0); WeaponGrid.Children.Add(button); textbox = new TextBox(); textbox.Text = weapon.Type.ToString(); textbox.IsReadOnly = true; Grid.SetRow(textbox, WeaponRowCount); Grid.SetColumn(textbox, 1); WeaponGrid.Children.Add(textbox); textbox = new TextBox(); textbox.Text = weapon.Power.ToString(); textbox.IsReadOnly = true; textbox.TextAlignment = TextAlignment.Center; Grid.SetRow(textbox, WeaponRowCount); Grid.SetColumn(textbox, 2); WeaponGrid.Children.Add(textbox); textbox = new TextBox(); textbox.Text = weapon.Space.ToString(); textbox.IsReadOnly = true; textbox.TextAlignment = TextAlignment.Center; Grid.SetRow(textbox, WeaponRowCount); Grid.SetColumn(textbox, 3); WeaponGrid.Children.Add(textbox); textbox = new TextBox(); textbox.Text = weapon.SP.ToString(); textbox.IsReadOnly = true; textbox.TextAlignment = TextAlignment.Center; Grid.SetRow(textbox, WeaponRowCount); Grid.SetColumn(textbox, 4); WeaponGrid.Children.Add(textbox); textbox = new TextBox(); textbox.Text = weapon.Strength.ToString(); textbox.IsReadOnly = true; textbox.TextAlignment = TextAlignment.Center; Grid.SetRow(textbox, WeaponRowCount); Grid.SetColumn(textbox, 5); WeaponGrid.Children.Add(textbox); textbox = new TextBox(); textbox.Text = weapon.Damage.ToString(); textbox.IsReadOnly = true; textbox.TextAlignment = TextAlignment.Center; Grid.SetRow(textbox, WeaponRowCount); Grid.SetColumn(textbox, 6); WeaponGrid.Children.Add(textbox); textbox = new TextBox(); textbox.Text = weapon.DisplayRange; textbox.IsReadOnly = true; textbox.TextAlignment = TextAlignment.Center; Grid.SetRow(textbox, WeaponRowCount); Grid.SetColumn(textbox, 7); WeaponGrid.Children.Add(textbox); textbox = new TextBox(); textbox.Text = weapon.Crit.ToString(); textbox.IsReadOnly = true; textbox.TextAlignment = TextAlignment.Center; Grid.SetRow(textbox, WeaponRowCount); Grid.SetColumn(textbox, 8); WeaponGrid.Children.Add(textbox); textbox = new TextBox(); textbox.Text = weapon.Origin.Name(); textbox.IsReadOnly = true; textbox.ToolTip = weapon.Origin.LongName() + ", Page: " + weapon.PageNumber; Grid.SetRow(textbox, WeaponRowCount++); Grid.SetColumn(textbox, 10); WeaponGrid.Children.Add(textbox); if (!String.IsNullOrWhiteSpace(weapon.Description)) { textblock = new TextBlock(); textblock.Text = weapon.Description; textblock.Margin = new Thickness(2, 2, 2, 2); textblock.TextWrapping = TextWrapping.WrapWithOverflow; Grid.SetRow(textblock, WeaponRowCount++); Grid.SetColumnSpan(textblock, 11); WeaponGrid.Children.Add(textblock); } } } Current = Starship.Weapons[Index]; UpdateCurrent(); }
public StarshipCreator() { loader = new Loader();//initialise with default components TODO:Loading of saved custom components Starship = new Starship();//fresh starship InitializeComponent(); }
public SupplementalWindow(Starship starship, Loader loader) { if (starship == null || starship.Hull == null) throw new ArgumentNullException("Cannot choose supplementals without a hull"); if (loader == null) throw new ArgumentNullException("Cannot load supplementals without a loader"); this.Starship = starship; ComponentCount = 0; InitializeComponent(); Label label; Button button; TextBox textbox; TextBlock textblock; foreach (var generated in loader.Supplementals.Where(x => (x.HullTypes & Starship.Hull.HullTypes) != 0).GroupBy(x => x.PowerGenerated)) { foreach (var group in generated.GroupBy(x => x.ComponentOrigin)) { if (group.Count() > 0) { if (group.Key != ComponentOrigin.Standard) { label = new Label(); label.Content = group.Key.ToString(); Grid.SetRow(label, ComponentCount); Grid.SetColumn(label, 0); ComponentGrid.Children.Add(label); } label = new Label(); label.Content = generated.Key ? "Generated" : "Used"; label.HorizontalContentAlignment = HorizontalAlignment.Center; Grid.SetRow(label, ComponentCount++); Grid.SetColumn(label, 2); ComponentGrid.Children.Add(label); } foreach (Supplemental baseComponent in group) { List<Supplemental> qualitycomponents = new List<Supplemental>(); if (baseComponent.RawSP > 1)//if component can have a lower cost, include poor quality qualitycomponents.Add(new Supplemental(baseComponent.Name, baseComponent.HullTypes, baseComponent.RawPower, baseComponent.RawSpace, baseComponent.RawSP, baseComponent.Origin, baseComponent.PageNumber, baseComponent.RamDamage, baseComponent.RawSpecial, Quality.Poor, baseComponent.Speed, baseComponent.Manoeuvrability, baseComponent.HullIntegrity, baseComponent.Armour, baseComponent.TurretRating, baseComponent.Morale, baseComponent.CrewPopulation, baseComponent.ProwArmour, baseComponent.CrewRating, baseComponent.MiningObjective, baseComponent.CreedObjective, baseComponent.MilitaryObjective, baseComponent.TradeObjective, baseComponent.CriminalObjective, baseComponent.ExplorationObjective, baseComponent.PowerGenerated, baseComponent.DetectionRating, baseComponent.AuxiliaryWeapon, baseComponent.MacrobatteryModifier, baseComponent.BSModifier, baseComponent.NavigateWarp, baseComponent.CrewLoss, baseComponent.MoraleLoss, baseComponent.ComponentOrigin, baseComponent.Replace, baseComponent.Max, StarshipGenerator.Utils.Condition.Intact)); //always add common quality qualitycomponents.Add(new Supplemental(baseComponent.Name, baseComponent.HullTypes, baseComponent.RawPower, baseComponent.RawSpace, baseComponent.RawSP, baseComponent.Origin, baseComponent.PageNumber, baseComponent.RamDamage, baseComponent.RawSpecial, Quality.Common, baseComponent.Speed, baseComponent.Manoeuvrability, baseComponent.HullIntegrity, baseComponent.Armour, baseComponent.TurretRating, baseComponent.Morale, baseComponent.CrewPopulation, baseComponent.ProwArmour, baseComponent.CrewRating, baseComponent.MiningObjective, baseComponent.CreedObjective, baseComponent.MilitaryObjective, baseComponent.TradeObjective, baseComponent.CriminalObjective, baseComponent.ExplorationObjective, baseComponent.PowerGenerated, baseComponent.DetectionRating, baseComponent.AuxiliaryWeapon, baseComponent.MacrobatteryModifier, baseComponent.BSModifier, baseComponent.NavigateWarp, baseComponent.CrewLoss, baseComponent.MoraleLoss, baseComponent.ComponentOrigin, baseComponent.Replace, baseComponent.Max, StarshipGenerator.Utils.Condition.Intact)); if ((baseComponent.RawPower > 1) ^ (baseComponent.RawSpace > 1))//if only one possible upgrade for good quality, do default good { qualitycomponents.Add(new Supplemental(baseComponent.Name, baseComponent.HullTypes, baseComponent.RawPower, baseComponent.RawSpace, baseComponent.RawSP, baseComponent.Origin, baseComponent.PageNumber, baseComponent.RamDamage, baseComponent.RawSpecial, Quality.Good, baseComponent.Speed, baseComponent.Manoeuvrability, baseComponent.HullIntegrity, baseComponent.Armour, baseComponent.TurretRating, baseComponent.Morale, baseComponent.CrewPopulation, baseComponent.ProwArmour, baseComponent.CrewRating, baseComponent.MiningObjective, baseComponent.CreedObjective, baseComponent.MilitaryObjective, baseComponent.TradeObjective, baseComponent.CriminalObjective, baseComponent.ExplorationObjective, baseComponent.PowerGenerated, baseComponent.DetectionRating, baseComponent.AuxiliaryWeapon, baseComponent.MacrobatteryModifier, baseComponent.BSModifier, baseComponent.NavigateWarp, baseComponent.CrewLoss, baseComponent.MoraleLoss, baseComponent.ComponentOrigin, baseComponent.Replace, baseComponent.Max, StarshipGenerator.Utils.Condition.Intact)); } else if (baseComponent.RawPower > 1 && baseComponent.RawSpace > 1)//If both can be added then can have efficient, slim or best(both) quality { qualitycomponents.Add(new Supplemental(baseComponent.Name, baseComponent.HullTypes, baseComponent.RawPower, baseComponent.RawSpace, baseComponent.RawSP, baseComponent.Origin, baseComponent.PageNumber, baseComponent.RamDamage, baseComponent.RawSpecial, Quality.Slim, baseComponent.Speed, baseComponent.Manoeuvrability, baseComponent.HullIntegrity, baseComponent.Armour, baseComponent.TurretRating, baseComponent.Morale, baseComponent.CrewPopulation, baseComponent.ProwArmour, baseComponent.CrewRating, baseComponent.MiningObjective, baseComponent.CreedObjective, baseComponent.MilitaryObjective, baseComponent.TradeObjective, baseComponent.CriminalObjective, baseComponent.ExplorationObjective, baseComponent.PowerGenerated, baseComponent.DetectionRating, baseComponent.AuxiliaryWeapon, baseComponent.MacrobatteryModifier, baseComponent.BSModifier, baseComponent.NavigateWarp, baseComponent.CrewLoss, baseComponent.MoraleLoss, baseComponent.ComponentOrigin, baseComponent.Replace, baseComponent.Max, StarshipGenerator.Utils.Condition.Intact)); qualitycomponents.Add(new Supplemental(baseComponent.Name, baseComponent.HullTypes, baseComponent.RawPower, baseComponent.RawSpace, baseComponent.RawSP, baseComponent.Origin, baseComponent.PageNumber, baseComponent.RamDamage, baseComponent.RawSpecial, Quality.Efficient, baseComponent.Speed, baseComponent.Manoeuvrability, baseComponent.HullIntegrity, baseComponent.Armour, baseComponent.TurretRating, baseComponent.Morale, baseComponent.CrewPopulation, baseComponent.ProwArmour, baseComponent.CrewRating, baseComponent.MiningObjective, baseComponent.CreedObjective, baseComponent.MilitaryObjective, baseComponent.TradeObjective, baseComponent.CriminalObjective, baseComponent.ExplorationObjective, baseComponent.PowerGenerated, baseComponent.DetectionRating, baseComponent.AuxiliaryWeapon, baseComponent.MacrobatteryModifier, baseComponent.BSModifier, baseComponent.NavigateWarp, baseComponent.CrewLoss, baseComponent.MoraleLoss, baseComponent.ComponentOrigin, baseComponent.Replace, baseComponent.Max, StarshipGenerator.Utils.Condition.Intact)); qualitycomponents.Add(new Supplemental(baseComponent.Name, baseComponent.HullTypes, baseComponent.RawPower, baseComponent.RawSpace, baseComponent.RawSP, baseComponent.Origin, baseComponent.PageNumber, baseComponent.RamDamage, baseComponent.RawSpecial, Quality.Best, baseComponent.Speed, baseComponent.Manoeuvrability, baseComponent.HullIntegrity, baseComponent.Armour, baseComponent.TurretRating, baseComponent.Morale, baseComponent.CrewPopulation, baseComponent.ProwArmour, baseComponent.CrewRating, baseComponent.MiningObjective, baseComponent.CreedObjective, baseComponent.MilitaryObjective, baseComponent.TradeObjective, baseComponent.CriminalObjective, baseComponent.ExplorationObjective, baseComponent.PowerGenerated, baseComponent.DetectionRating, baseComponent.AuxiliaryWeapon, baseComponent.MacrobatteryModifier, baseComponent.BSModifier, baseComponent.NavigateWarp, baseComponent.CrewLoss, baseComponent.MoraleLoss, baseComponent.ComponentOrigin, baseComponent.Replace, baseComponent.Max, StarshipGenerator.Utils.Condition.Intact)); } foreach (Supplemental component in qualitycomponents.Where(x => Starship.SupplementalComponents.Count(y => x.QualityName == y.QualityName && x.Origin == y.Origin) == 0 && (x.Max == 0 || Starship.SupplementalComponents.Count(y => x.Name == y.Name) < x.Max))) { label = new Label(); String name = component.QualityName; if (component.Max == 1) { name += "†"; label.ToolTip = "Maximum of one " + component.Name; } label.Content = name; Grid.SetRow(label, ComponentCount); Grid.SetColumn(label, 0); ComponentGrid.Children.Add(label); Label countLabel = new Label(); countLabel.Content = 0; countLabel.HorizontalContentAlignment = HorizontalAlignment.Center; Grid.SetRow(countLabel, ComponentCount); Grid.SetColumn(countLabel, 1); ComponentGrid.Children.Add(countLabel); label = new Label(); label.Content = component.Power; label.HorizontalContentAlignment = HorizontalAlignment.Center; Grid.SetRow(label, ComponentCount); Grid.SetColumn(label, 2); ComponentGrid.Children.Add(label); label = new Label(); label.Content = component.Space; label.HorizontalContentAlignment = HorizontalAlignment.Center; Grid.SetRow(label, ComponentCount); Grid.SetColumn(label, 3); ComponentGrid.Children.Add(label); label = new Label(); label.Content = component.SP; label.HorizontalContentAlignment = HorizontalAlignment.Center; Grid.SetRow(label, ComponentCount); Grid.SetColumn(label, 4); ComponentGrid.Children.Add(label); button = new Button(); button.Content = "+"; button.Click += ((s, e) => AddComponent(countLabel, component)); Grid.SetRow(button, ComponentCount); Grid.SetColumn(button, 5); ComponentGrid.Children.Add(button); button = new Button(); button.Content = "-"; button.Click += ((s, e) => RemoveComponent(countLabel, component)); Grid.SetRow(button, ComponentCount); Grid.SetColumn(button, 6); ComponentGrid.Children.Add(button); label = new Label(); textbox = new TextBox(); textbox.Text = component.Origin.Name(); textbox.IsReadOnly = true; textbox.ToolTip = component.Origin.LongName() + ", Page: " + component.PageNumber; Grid.SetRow(textbox, ComponentCount++); Grid.SetColumn(textbox, 7); ComponentGrid.Children.Add(textbox); textblock = new TextBlock(); textblock.Text = component.Description; textblock.TextWrapping = TextWrapping.WrapWithOverflow; Grid.SetRow(textblock, ComponentCount++); Grid.SetColumnSpan(textblock, 8); ComponentGrid.Children.Add(textblock); } } } } }