Skip to content

Commit

Permalink
Load fleets and ships from json
Browse files Browse the repository at this point in the history
  • Loading branch information
behindcurtain3 committed Apr 1, 2024
1 parent 9ad95cb commit 9f552e4
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 4 deletions.
19 changes: 19 additions & 0 deletions Pulsar4X/GameEngine/Data/basemod/defaultStart/uef.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,5 +37,24 @@
{ "id": "default-design-ordnance-rack-2.5t", "amount": 1 }
]
}
],
"fleets": [
{
"name": "Military Fleet",
"location": {
"systemId": "sol",
"body": "Earth"
},
"ships": [
{
"designId": "default-ship-design-gunship",
"name": "Serial Peacemaker"
},
{
"designId": "default-ship-design-gunship",
"name": "Prevailing Stillness"
}
]
}
]
}
3 changes: 2 additions & 1 deletion Pulsar4X/GameEngine/Engine/Designs/ShipDesign.cs
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,9 @@ internal ShipDesign()
{
}

public ShipDesign(FactionInfoDB faction, string name, List<(ComponentDesign design, int count)> components, (ArmorBlueprint armorType, float thickness) armor)
public ShipDesign(FactionInfoDB faction, string name, List<(ComponentDesign design, int count)> components, (ArmorBlueprint armorType, float thickness) armor, string? id = null)
{
if(id != null) UniqueID = id;
_factionId = faction.OwningEntity.Id;
faction.ShipDesigns.Add(UniqueID, this);
faction.IndustryDesigns[UniqueID] = this;
Expand Down
32 changes: 32 additions & 0 deletions Pulsar4X/GameEngine/Engine/Factories/FactionFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,38 @@ public static Entity LoadFromJson(Game game, string filePath)
ReCalcProcessor.ReCalcAbilities(colony);
}

var fleetsToLoad = (JArray?)rootJson["fleets"];
if(fleetsToLoad != null)
{
foreach(var fleetToLoad in fleetsToLoad)
{
var fleetName = (string?)fleetToLoad["name"] ?? NameFactory.GetFleetName(game);
var systemId = fleetToLoad["location"]["systemId"].ToString();
var system = game.Systems.Find(s => s.Guid.Equals(systemId));
if(system == null) throw new NullReferenceException("invalid systemId in json");
var location = NameLookup.GetFirstEntityWithName(system, fleetToLoad["location"]["body"].ToString());

var fleet = FleetFactory.Create(system, faction.Id, fleetName);
var fleetDB = fleet.GetDataBlob<FleetDB>();
fleetDB.SetParent(faction);

var shipsInFleet = (JArray?)fleetToLoad["ships"];
if(shipsInFleet != null)
{
foreach(var shipToLoad in shipsInFleet)
{
var designId = shipToLoad["designId"].ToString();
var shipName = (string?)shipToLoad["name"] ?? NameFactory.GetShipName(game);
var ship = ShipFactory.CreateShip(factionInfoDB.ShipDesigns[designId], faction, location, shipName);
fleetDB.AddChild(ship);

if(fleetDB.FlagShipID < 0)
fleetDB.FlagShipID = ship.Id;
}
}
}
}

return faction;
}

Expand Down
7 changes: 4 additions & 3 deletions Pulsar4X/GameEngine/Engine/Factories/ShipDesignFromJson.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,18 +18,19 @@ public static ShipDesign Create(Entity faction, FactionDataStore factionDataStor
var factionInfoDB = faction.GetDataBlob<FactionInfoDB>();
var shipComponents = new List<(ComponentDesign, int)>();

var id = (string?)rootJson["id"] ?? null;
var designName = rootJson["name"].ToString();

var components = (JArray?)rootJson["components"];
if(components != null)
{
foreach(var component in components)
{
var id = component["id"].ToString();
var designId = component["id"].ToString();
var amount = (int?)component["amount"] ?? 0;

shipComponents.Add((
factionInfoDB.InternalComponentDesigns[id],
factionInfoDB.InternalComponentDesigns[designId],
amount
));
}
Expand All @@ -39,7 +40,7 @@ public static ShipDesign Create(Entity faction, FactionDataStore factionDataStor
var armorThickness = (int?)rootJson["armor"]["thickness"] ?? 1;

var armor = factionDataStore.Armor[armorId];
var design = new ShipDesign(factionInfoDB, designName, shipComponents, (armor, armorThickness))
var design = new ShipDesign(factionInfoDB, designName, shipComponents, (armor, armorThickness), id)
{
DamageProfileDB = new EntityDamageProfileDB(shipComponents, (armor, armorThickness))
};
Expand Down

0 comments on commit 9f552e4

Please sign in to comment.