Exemplo n.º 1
0
 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(@"]}");
     }
 }
Exemplo n.º 2
0
 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();
 }
Exemplo n.º 3
0
 public StarshipCreator()
 {
     loader = new Loader();//initialise with default components TODO:Loading of saved custom components
     Starship = new Starship();//fresh starship
     InitializeComponent();
 }
Exemplo n.º 4
0
 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);
                 }
             }
         }
     }
 }