mirror of
https://github.com/EDCD/coriolis.git
synced 2025-12-10 07:05:35 +00:00
Ship building edge case, plus unit test to cover change
This commit is contained in:
@@ -57,7 +57,7 @@ angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength',
|
|||||||
cl = common.length,
|
cl = common.length,
|
||||||
i, l;
|
i, l;
|
||||||
|
|
||||||
// Reset Cumulative and aggragate stats
|
// Reset Cumulative stats
|
||||||
this.fuelCapacity = 0;
|
this.fuelCapacity = 0;
|
||||||
this.cargoCapacity = 0;
|
this.cargoCapacity = 0;
|
||||||
this.ladenMass = 0;
|
this.ladenMass = 0;
|
||||||
@@ -141,7 +141,7 @@ angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength',
|
|||||||
*/
|
*/
|
||||||
Ship.prototype.use = function(slot, id, component, preventUpdate) {
|
Ship.prototype.use = function(slot, id, component, preventUpdate) {
|
||||||
if (slot.id != id) { // Selecting a different component
|
if (slot.id != id) { // Selecting a different component
|
||||||
var slotIndex = this.internal.indexOf(slot);
|
var slotIndex = preventUpdate ? -1 : this.internal.indexOf(slot);
|
||||||
// Slot is an internal slot, is not being emptied, and the selected component group/type must be of unique
|
// Slot is an internal slot, is not being emptied, and the selected component group/type must be of unique
|
||||||
if (slotIndex != -1 && component && _.includes(['sg', 'rf', 'fs'], component.grp)) {
|
if (slotIndex != -1 && component && _.includes(['sg', 'rf', 'fs'], component.grp)) {
|
||||||
// Find another internal slot that already has this type/group installed
|
// Find another internal slot that already has this type/group installed
|
||||||
@@ -245,6 +245,7 @@ angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength',
|
|||||||
var powerChange = slot == this.common[0];
|
var powerChange = slot == this.common[0];
|
||||||
|
|
||||||
if (old) { // Old component now being removed
|
if (old) { // Old component now being removed
|
||||||
|
console.log('this shouldn\'t happen', old);
|
||||||
switch (old.grp) {
|
switch (old.grp) {
|
||||||
case 'ft':
|
case 'ft':
|
||||||
this.fuelCapacity -= old.capacity;
|
this.fuelCapacity -= old.capacity;
|
||||||
|
|||||||
@@ -31,4 +31,40 @@ describe("Ship Factory", function() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("resets and rebuilds properly", function() {
|
||||||
|
var id = 'cobra_mk_iii';
|
||||||
|
var cobra = DB.ships[id];
|
||||||
|
var shipA = new Ship(id, cobra.properties, cobra.slots);
|
||||||
|
var shipB = new Ship(id, cobra.properties, cobra.slots);
|
||||||
|
var testShip = new Ship(id, cobra.properties, cobra.slots);
|
||||||
|
|
||||||
|
var buildA = cobra.defaults;
|
||||||
|
var buildB = {
|
||||||
|
common:['4A', '4A', '4A', '3D', '3A', '3A', '4C'],
|
||||||
|
hardpoints: ['0s', '0s', '2d', '2d', 0, '04'],
|
||||||
|
internal: ['45', '03', '2b', '2o', '27', '53']
|
||||||
|
};
|
||||||
|
|
||||||
|
shipA.buildWith(buildA); // Build A
|
||||||
|
shipB.buildWith(buildB);// Build B
|
||||||
|
testShip.buildWith(buildA);
|
||||||
|
|
||||||
|
for(var p in testShip) {
|
||||||
|
expect(testShip[p]).toEqual(shipA[p], p + ' does not match');
|
||||||
|
}
|
||||||
|
|
||||||
|
testShip.buildWith(buildB);
|
||||||
|
|
||||||
|
for(var p in testShip) {
|
||||||
|
expect(testShip[p]).toEqual(shipB[p], p + ' does not match');
|
||||||
|
}
|
||||||
|
|
||||||
|
testShip.buildWith(buildA);
|
||||||
|
|
||||||
|
for(var p in testShip) {
|
||||||
|
expect(testShip[p]).toEqual(shipA[p], p + ' does not match');
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
Reference in New Issue
Block a user