Include module status and priority in JSON import and export.

This commit is contained in:
Jonathan Harris
2015-08-30 05:02:59 +01:00
parent 0066e7fd40
commit 2d2c2b75e3
2 changed files with 323 additions and 10 deletions

View File

@@ -72,7 +72,7 @@ angular.module('app').service('Serializer', ['lodash', 'GroupMap', 'MountMap', '
internal = ship.internal;
var data = {
$schema: 'http://cdn.coriolis.io/schemas/ship-loadout/1.json#',
$schema: 'http://cdn.coriolis.io/schemas/ship-loadout/2.json#',
name: buildName,
ship: ship.name,
references: [{
@@ -84,13 +84,13 @@ angular.module('app').service('Serializer', ['lodash', 'GroupMap', 'MountMap', '
components: {
standard: {
bulkheads: ship.bulkheads.c.name,
powerPlant: { class: standard[0].c.class, rating: standard[0].c.rating },
thrusters: { class: standard[1].c.class, rating: standard[1].c.rating },
frameShiftDrive: { class: standard[2].c.class, rating: standard[2].c.rating },
lifeSupport: { class: standard[3].c.class, rating: standard[3].c.rating },
powerDistributor: { class: standard[4].c.class, rating: standard[4].c.rating },
sensors: { class: standard[5].c.class, rating: standard[5].c.rating },
fuelTank: { class: standard[6].c.class, rating: standard[6].c.rating }
powerPlant: { class: standard[0].c.class, rating: standard[0].c.rating, enabled: Boolean(standard[0].enabled), priority: standard[0].priority+1 },
thrusters: { class: standard[1].c.class, rating: standard[1].c.rating, enabled: Boolean(standard[1].enabled), priority: standard[1].priority+1 },
frameShiftDrive: { class: standard[2].c.class, rating: standard[2].c.rating, enabled: Boolean(standard[2].enabled), priority: standard[2].priority+1 },
lifeSupport: { class: standard[3].c.class, rating: standard[3].c.rating, enabled: Boolean(standard[3].enabled), priority: standard[3].priority+1 },
powerDistributor: { class: standard[4].c.class, rating: standard[4].c.rating, enabled: Boolean(standard[4].enabled), priority: standard[4].priority+1 },
sensors: { class: standard[5].c.class, rating: standard[5].c.rating, enabled: Boolean(standard[5].enabled), priority: standard[5].priority+1 },
fuelTank: { class: standard[6].c.class, rating: standard[6].c.rating, enabled: Boolean(standard[6].enabled), priority: standard[6].priority+1 }
},
hardpoints: _.map(_.filter(hardpoints, function(slot) { return slot.maxClass > 0; }), slotToSchema),
utility: _.map(_.filter(hardpoints, function(slot) { return slot.maxClass === 0; }), slotToSchema),
@@ -116,6 +116,8 @@ angular.module('app').service('Serializer', ['lodash', 'GroupMap', 'MountMap', '
}
var comps = detailedBuild.components;
var priorities = [ 0 ]; // cargoScoop
var enabled = [ false ]; // assume cargoScoop disabled
var shipData = ShipsDB[shipId];
var ship = new Ship(shipId, shipData.properties, shipData.slots);
var bulkheads = Components.bulkheadIndex(comps.standard.bulkheads);
@@ -130,6 +132,8 @@ angular.module('app').service('Serializer', ['lodash', 'GroupMap', 'MountMap', '
if (!comps.standard[c].class || !comps.standard[c].rating) {
throw 'Invalid value for ' + c;
}
priorities.push(comps.standard[c].priority === undefined ? 0 : comps.standard[c].priority-1);
enabled.push(comps.standard[c].enabled === undefined ? true : comps.standard[c].enabled);
return comps.standard[c].class + comps.standard[c].rating;
}
);
@@ -143,7 +147,15 @@ angular.module('app').service('Serializer', ['lodash', 'GroupMap', 'MountMap', '
return c ? Components.findHardpointId(c.group, c.class, c.rating, c.name, MountMap[c.mount]) : 0;
}));
ship.buildWith({ bulkheads: bulkheads, common: common, hardpoints: hardpoints, internal: internal });
// The ordering of these arrays must match the order in which they are read in Ship.buildWith
priorities = priorities.concat(_.map(comps.hardpoints, function(c) { return (!c || c.priority===undefined) ? 0 : c.priority-1; }),
_.map(comps.utility, function(c) { return (!c || c.priority===undefined) ? 0 : c.priority-1; }),
_.map(comps.internal, function(c) { return (!c || c.priority===undefined) ? 0 : c.priority-1; }));
enabled = enabled.concat(_.map(comps.hardpoints, function(c) { return (!c || c.enabled===undefined) ? false : c.enabled; }),
_.map(comps.utility, function(c) { return (!c || c.enabled===undefined) ? false : c.enabled; }),
_.map(comps.internal, function(c) { return (!c || c.enabled===undefined) ? false : c.enabled; }));
ship.buildWith({ bulkheads: bulkheads, common: common, hardpoints: hardpoints, internal: internal }, priorities, enabled);
return ship;
};
@@ -213,7 +225,7 @@ angular.module('app').service('Serializer', ['lodash', 'GroupMap', 'MountMap', '
function slotToSchema(slot) {
if (slot.c) {
var o = { class: slot.c.class, rating: slot.c.rating, group: GroupMap[slot.c.grp] };
var o = { class: slot.c.class, rating: slot.c.rating, enabled: Boolean(slot.enabled), priority: slot.priority+1, group: GroupMap[slot.c.grp] };
if (slot.c.name) {
o.name = slot.c.name;
}