/// <summary> /// Create a new ship or starbase at the specified location. Starbases are /// handled just like ships except that they cannot move. /// </summary> /// <param name="design">A ShipDesign to be constructed.</param> /// <param name="star">The star system producing the ship.</param> private void CreateShips(ShipDesign design, Star star, int countToBuild) { EmpireData empire = serverState.AllEmpires[star.Owner]; ShipToken token = new ShipToken(design, countToBuild); Fleet fleet = new Fleet(token, star, empire.GetNextFleetKey()); fleet.Name = design.Name + " #" + fleet.Id; fleet.FuelAvailable = fleet.TotalFuelCapacity; Message message = new Message(); message.Audience = star.Owner; message.Text = star.Name + " has produced " + countToBuild + " new " + design.Name; // message.Event = fleet; // will not be persisted unless the Type is implemented. // message.Type = "Fleet"; // TODO (priority 5) - need to add a fleet type message so it can save/load. serverState.AllMessages.Add(message); // Add the fleet to the state data so it can be tracked. serverState.AllEmpires[fleet.Owner].AddOrUpdateFleet(fleet); if (design.Type == ItemType.Starbase) { if (star.Starbase != null) { // Old starbases are not scrapped. Instead, the reduced // upgrade cost should have already been factored when first // queuing the "upgrade", so the old SB is just // discarded and replaced at this point. -Aeglos 2 Aug 11 star.Starbase = null; // waypointTasks.Scrap(star.Starbase, star, false); } star.Starbase = fleet; fleet.Type = ItemType.Starbase; fleet.Name = star.Name + " " + fleet.Type; fleet.InOrbit = star; if (empire.Race.HasTrait("ISB")) { fleet.Cloaked = 20; } } else { fleet.InOrbit = star; } }
/// <summary> /// Allocate an initial set of resources to a player's "home" star system. for /// each player giving it some colonists and initial resources. /// </summary> /// <param name="star"></param> /// <param name="race"></param> private void AllocateHomeStarOrbitalInstallations(Star star, EmpireData empire, string player) { ShipDesign colonyShipDesign = null; foreach (ShipDesign design in empire.Designs.Values) { if (design.Name == "Santa Maria") { colonyShipDesign = design; } } if (empire.Race.Traits.Primary.Code != "HE") { ShipToken cs = new ShipToken(colonyShipDesign, 1); Fleet fleet1 = new Fleet(cs, star, empire.GetNextFleetKey()); fleet1.Name = colonyShipDesign.Name + " #1"; empire.AddOrUpdateFleet(fleet1); } else { for (int i = 1; i <= 3; i++) { ShipToken cs = new ShipToken(colonyShipDesign, 1); Fleet fleet = new Fleet(cs, star, empire.GetNextFleetKey()); fleet.Name = string.Format("{0} #{1}", colonyShipDesign.Name, i); empire.AddOrUpdateFleet(fleet); } } ShipDesign scoutDesign = null; foreach (ShipDesign design in empire.Designs.Values) { if (design.Name == "Scout") { scoutDesign = design; } } ShipToken scout = new ShipToken(scoutDesign, 1); Fleet scoutFleet = new Fleet(scout, star, empire.GetNextFleetKey()); scoutFleet.Name = "Scout #1"; empire.AddOrUpdateFleet(scoutFleet); ShipDesign starbaseDesign = null; foreach (ShipDesign design in empire.Designs.Values) { if (design.Name == "Starbase") { starbaseDesign = design; } } ShipToken starbase = new ShipToken(starbaseDesign, 1); Fleet starbaseFleet = new Fleet(starbase, star, empire.GetNextFleetKey()); starbaseFleet.Name = star.Name + " Starbase"; star.Starbase = starbaseFleet; empire.AddOrUpdateFleet(starbaseFleet); }