mirror of
https://github.com/EDCD/coriolis.git
synced 2025-12-09 06:43:24 +00:00
Add cargo hatch priority and status to be included in detailed export
This commit is contained in:
@@ -10,8 +10,8 @@ angular.module('app').service('Serializer', ['lodash', 'GroupMap', 'MountMap', '
|
||||
*/
|
||||
this.fromShip = function(ship) {
|
||||
var power = {
|
||||
enabled: [ship.cargoScoop.enabled ? 1 : 0],
|
||||
priorities: [ship.cargoScoop.priority]
|
||||
enabled: [ship.cargoHatch.enabled ? 1 : 0],
|
||||
priorities: [ship.cargoHatch.priority]
|
||||
};
|
||||
|
||||
var data = [
|
||||
@@ -84,6 +84,7 @@ angular.module('app').service('Serializer', ['lodash', 'GroupMap', 'MountMap', '
|
||||
components: {
|
||||
standard: {
|
||||
bulkheads: ship.bulkheads.c.name,
|
||||
cargoHatch: { enabled: Boolean(ship.cargoHatch.enabled), priority: ship.cargoHatch.priority + 1 },
|
||||
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 },
|
||||
@@ -116,25 +117,26 @@ angular.module('app').service('Serializer', ['lodash', 'GroupMap', 'MountMap', '
|
||||
}
|
||||
|
||||
var comps = detailedBuild.components;
|
||||
var priorities = [ 0 ]; // cargoScoop
|
||||
var enabled = [ true ]; // assume cargoScoop enabled
|
||||
var standard = comps.standard;
|
||||
var priorities = [ standard.cargoHatch && standard.cargoHatch.priority !== undefined ? standard.cargoHatch.priority - 1 : 0 ];
|
||||
var enabled = [ standard.cargoHatch && standard.cargoHatch.enabled !== undefined ? standard.cargoHatch.enabled : true ];
|
||||
var shipData = ShipsDB[shipId];
|
||||
var ship = new Ship(shipId, shipData.properties, shipData.slots);
|
||||
var bulkheads = Components.bulkheadIndex(comps.standard.bulkheads);
|
||||
var bulkheads = Components.bulkheadIndex(standard.bulkheads);
|
||||
|
||||
if (bulkheads < 0) {
|
||||
throw 'Invalid bulkheads: ' + comps.standard.bulkheads;
|
||||
throw 'Invalid bulkheads: ' + standard.bulkheads;
|
||||
}
|
||||
|
||||
var common = _.map(
|
||||
['powerPlant', 'thrusters', 'frameShiftDrive', 'lifeSupport', 'powerDistributor', 'sensors', 'fuelTank'],
|
||||
function(c) {
|
||||
if (!comps.standard[c].class || !comps.standard[c].rating) {
|
||||
if (!standard[c].class || !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;
|
||||
priorities.push(standard[c].priority === undefined ? 0 : standard[c].priority - 1);
|
||||
enabled.push(standard[c].enabled === undefined ? true : standard[c].enabled);
|
||||
return standard[c].class + standard[c].rating;
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength',
|
||||
*/
|
||||
function Ship(id, properties, slots) {
|
||||
this.id = id;
|
||||
this.cargoScoop = { c: Components.cargoScoop(), type: 'SYS' };
|
||||
this.cargoHatch = { c: Components.cargoHatch(), type: 'SYS' };
|
||||
this.bulkheads = { incCost: true, maxClass: 8 };
|
||||
|
||||
for (var p in properties) { this[p] = properties[p]; } // Copy all base properties from shipData
|
||||
@@ -51,7 +51,7 @@ angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength',
|
||||
this.costList.unshift(this.c); // Add the ship itself to the list
|
||||
|
||||
this.powerList = _.union(this.internal, this.hardpoints);
|
||||
this.powerList.unshift(this.cargoScoop);
|
||||
this.powerList.unshift(this.cargoHatch);
|
||||
this.powerList.unshift(this.common[1]); // Add Thrusters
|
||||
this.powerList.unshift(this.common[5]); // Add Sensors
|
||||
this.powerList.unshift(this.common[4]); // Add Power Distributor
|
||||
@@ -96,8 +96,8 @@ angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength',
|
||||
|
||||
this.bulkheads.c = null;
|
||||
this.useBulkhead(comps && comps.bulkheads ? comps.bulkheads : 0, true);
|
||||
this.cargoScoop.priority = priorities ? priorities[0] * 1 : 0;
|
||||
this.cargoScoop.enabled = enabled ? enabled[0] * 1 : true;
|
||||
this.cargoHatch.priority = priorities ? priorities[0] * 1 : 0;
|
||||
this.cargoHatch.enabled = enabled ? enabled[0] * 1 : true;
|
||||
|
||||
for (i = 0, l = this.priorityBands.length; i < l; i++) {
|
||||
this.priorityBands[i].deployed = 0;
|
||||
@@ -105,8 +105,8 @@ angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength',
|
||||
this.priorityBands[i].retOnly = 0;
|
||||
}
|
||||
|
||||
if (this.cargoScoop.enabled) {
|
||||
bands[this.cargoScoop.priority].retracted += this.cargoScoop.c.power;
|
||||
if (this.cargoHatch.enabled) {
|
||||
bands[this.cargoHatch.priority].retracted += this.cargoHatch.c.power;
|
||||
}
|
||||
|
||||
for (i = 0; i < cl; i++) {
|
||||
|
||||
@@ -6,7 +6,7 @@ angular.module('shipyard').service('Components', ['lodash', 'ComponentsDB', 'Shi
|
||||
GrpNameToCodeMap[GroupMap[grp]] = grp;
|
||||
}
|
||||
|
||||
this.cargoScoop = function() {
|
||||
this.cargoHatch = function() {
|
||||
return { name: 'Cargo Hatch', class: 1, rating: 'H', power: 0.6 };
|
||||
};
|
||||
|
||||
|
||||
@@ -49,11 +49,18 @@
|
||||
"description": "The set of standard components across all ships",
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["bulkheads", "powerPlant", "thrusters", "frameShiftDrive", "lifeSupport", "powerDistributor", "sensors", "fuelTank"],
|
||||
"required": ["bulkheads", "powerPlant", "thrusters", "frameShiftDrive", "lifeSupport", "powerDistributor", "sensors", "fuelTank", "cargoHatch"],
|
||||
"properties": {
|
||||
"bulkheads": {
|
||||
"enum": ["Lightweight Alloy", "Reinforced Alloy", "Military Grade Composite", "Mirrored Surface Composite", "Reactive Surface Composite"]
|
||||
},
|
||||
"cargoHatch": {
|
||||
"required": ["enabled", "priority"],
|
||||
"properties": {
|
||||
"enabled": { "type": "boolean" },
|
||||
"priority": { "type": "integer", "minimum": 1, "maximum": 5 }
|
||||
}
|
||||
},
|
||||
"powerPlant": {
|
||||
"required": ["class", "rating", "enabled", "priority"],
|
||||
"properties": {
|
||||
|
||||
@@ -13,6 +13,10 @@
|
||||
"components": {
|
||||
"standard": {
|
||||
"bulkheads": "Reactive Surface Composite",
|
||||
"cargoHatch": {
|
||||
"enabled": false,
|
||||
"priority": 5
|
||||
},
|
||||
"powerPlant": {
|
||||
"class": 8,
|
||||
"rating": "A",
|
||||
@@ -269,8 +273,8 @@
|
||||
"unladenMass": 1179.2,
|
||||
"totalDps": 29,
|
||||
"powerAvailable": 36,
|
||||
"powerRetracted": 23.93,
|
||||
"powerDeployed": 35.36,
|
||||
"powerRetracted": 23.33,
|
||||
"powerDeployed": 34.76,
|
||||
"unladenRange": 18.49,
|
||||
"fullTankRange": 18.12,
|
||||
"ladenRange": 16.39,
|
||||
@@ -98,8 +98,8 @@ describe('Import Controller', function() {
|
||||
|
||||
describe('Import Detailed Build', function() {
|
||||
|
||||
it('imports a valid build', function() {
|
||||
var importData = __json__['fixtures/anaconda-test-detailed-export'];
|
||||
it('imports a valid v1 build', function() {
|
||||
var importData = __json__['fixtures/anaconda-test-detailed-export-v1'];
|
||||
scope.importString = angular.toJson(importData);
|
||||
scope.validateImport();
|
||||
expect(scope.importValid).toBeTruthy();
|
||||
@@ -108,12 +108,26 @@ describe('Import Controller', function() {
|
||||
expect(scope.processed).toBeTruthy();
|
||||
scope.import();
|
||||
expect(angular.fromJson(localStorage.getItem('builds'))).toEqual({
|
||||
anaconda: { 'Test': '48A6A6A5A8A8A5C2c0o0o0o1m1m0q0q0404-0l0b0100034k5n052d04--0303326b.Iw18QDBNA===.AwhMJBGaei+JCyyiA===' }
|
||||
anaconda: { 'Test': '48A6A6A5A8A8A5C2c0o0o0o1m1m0q0q0404-0l0b0100034k5n052d04--0303326b.Iw18ZlA=.Aw18ZlA=' }
|
||||
});
|
||||
});
|
||||
|
||||
it('imports a valid v2 build', function() {
|
||||
var importData = __json__['fixtures/anaconda-test-detailed-export-v2'];
|
||||
scope.importString = angular.toJson(importData);
|
||||
scope.validateImport();
|
||||
expect(scope.importValid).toBeTruthy();
|
||||
expect(scope.errorMsg).toEqual(null);
|
||||
scope.process();
|
||||
expect(scope.processed).toBeTruthy();
|
||||
scope.import();
|
||||
expect(angular.fromJson(localStorage.getItem('builds'))).toEqual({
|
||||
anaconda: { 'Test': '48A6A6A5A8A8A5C2c0o0o0o1m1m0q0q0404-0l0b0100034k5n052d04--0303326b.AwRj4zNKqA==.CwBhCYzBGW9qCTSqs5xA' }
|
||||
});
|
||||
});
|
||||
|
||||
it('catches an invalid build', function() {
|
||||
var importData = __json__['fixtures/anaconda-test-detailed-export'];
|
||||
var importData = __json__['fixtures/anaconda-test-detailed-export-v2'];
|
||||
scope.importString = angular.toJson(importData).replace('components', 'comps');
|
||||
scope.validateImport();
|
||||
expect(scope.importValid).toBeFalsy();
|
||||
|
||||
@@ -3,7 +3,7 @@ describe("Serializer Service", function() {
|
||||
|
||||
var Ship,
|
||||
Serializer,
|
||||
code = '48A6A6A5A8A8A5C2c0o0o0o1m1m0q0q0404-0l0b0100034k5n052d04--0303326b.Iw18QDBNA===.AwhMJBGaei+JCyyiA===',
|
||||
code = '48A6A6A5A8A8A5C2c0o0o0o1m1m0q0q0404-0l0b0100034k5n052d04--0303326b.AwRj4zNKqA==.CwBhCYzBGW9qCTSqs5xA',
|
||||
anaconda = DB.ships['anaconda'],
|
||||
testBuild,
|
||||
exportData;
|
||||
@@ -21,13 +21,6 @@ describe("Serializer Service", function() {
|
||||
exportData = Serializer.toDetailedBuild('Test', testBuild, code);
|
||||
});
|
||||
|
||||
it("conforms to the v1 ship-loadout schema", function() {
|
||||
var shipLoadoutSchema = __json__['schemas/ship-loadout/1'];
|
||||
var validate = jsen(shipLoadoutSchema);
|
||||
var valid = validate(exportData);
|
||||
expect(valid).toBeTruthy();
|
||||
});
|
||||
|
||||
it("conforms to the v2 ship-loadout schema", function() {
|
||||
var shipLoadoutSchema = __json__['schemas/ship-loadout/2'];
|
||||
var validate = jsen(shipLoadoutSchema);
|
||||
@@ -36,7 +29,7 @@ describe("Serializer Service", function() {
|
||||
});
|
||||
|
||||
it("contains the correct components and stats", function() {
|
||||
var anacondaTestExport = __json__['fixtures/anaconda-test-detailed-export'];
|
||||
var anacondaTestExport = __json__['fixtures/anaconda-test-detailed-export-v2'];
|
||||
expect(exportData.components).toEqual(anacondaTestExport.components);
|
||||
expect(exportData.stats).toEqual(anacondaTestExport.stats);
|
||||
expect(exportData.ship).toEqual(anacondaTestExport.ship);
|
||||
@@ -48,7 +41,7 @@ describe("Serializer Service", function() {
|
||||
describe("From Detailed Build", function() {
|
||||
|
||||
it("builds the ship correctly", function() {
|
||||
var anacondaTestExport = __json__['fixtures/anaconda-test-detailed-export'];
|
||||
var anacondaTestExport = __json__['fixtures/anaconda-test-detailed-export-v2'];
|
||||
testBuildA = new Ship('anaconda', anaconda.properties, anaconda.slots);
|
||||
Serializer.toShip(testBuildA, code);
|
||||
testBuildB = Serializer.fromDetailedBuild(anacondaTestExport);
|
||||
|
||||
Reference in New Issue
Block a user