From 886614527f97958167f5d36e1565c9bfe3ea0bea Mon Sep 17 00:00:00 2001 From: Colin McLeod Date: Mon, 10 Aug 2015 15:12:59 -0700 Subject: [PATCH] Improved low weight build logic --- app/js/controllers/controller-outfit.js | 20 +- app/js/shipyard/factory-component-set.js | 25 +- app/less/outfit.less | 7 +- app/views/page-outfit.html | 4 +- data/components/common/power_plant.json | 350 +++-------------------- package.json | 2 +- 6 files changed, 80 insertions(+), 328 deletions(-) diff --git a/app/js/controllers/controller-outfit.js b/app/js/controllers/controller-outfit.js index 71f6401e..1b0c99b3 100755 --- a/app/js/controllers/controller-outfit.js +++ b/app/js/controllers/controller-outfit.js @@ -196,16 +196,24 @@ angular.module('app').controller('OutfitController', ['$window', '$rootScope', ' }; /** - * Strip ship to D-class and no other components. + * Optimize for the lower mass build that can still boost and power the ship + * without power management. */ - $scope.stripBuild = function() { - for (var i = 0, l = ship.common.length - 1; i < l; i++) { // All except Fuel Tank - var id = ship.common[i].maxClass + 'D'; - ship.use(ship.common[i], id, Components.common(i, id)); - } + $scope.optimizeMassBuild = function() { + var common = ship.common; ship.hardpoints.forEach(function(slot) { ship.use(slot, null, null); }); ship.internal.forEach(function(slot) { ship.use(slot, null, null); }); ship.useBulkhead(0); + ship.use(common[1], common[1].maxClass + 'D', Components.common(1, common[1].maxClass + 'D')); // Thrusters + ship.use(common[2], common[2].maxClass + 'A', Components.common(2, common[2].maxClass + 'A')); // FSD + ship.use(common[3], common[3].maxClass + 'D', Components.common(3, common[3].maxClass + 'D')); // Life Support + ship.use(common[5], common[5].maxClass + 'D', Components.common(5, common[5].maxClass + 'D')); // Sensors + + var pd = $scope.availCS.lightestPowerDist(ship.boostEnergy); // Find lightest Power Distributor that can still boost + ship.use(ship.common[4], pd, Components.common(4, pd)); + var pp = $scope.availCS.lightestPowerPlant(ship.powerRetracted); // Find lightest Power plant that can power the ship + ship.use(ship.common[0], pp, Components.common(0, pp)); + updateState(Serializer.fromShip(ship)); }; diff --git a/app/js/shipyard/factory-component-set.js b/app/js/shipyard/factory-component-set.js index 26fdd3df..1fb0f535 100755 --- a/app/js/shipyard/factory-component-set.js +++ b/app/js/shipyard/factory-component-set.js @@ -91,9 +91,32 @@ angular.module('shipyard').factory('ComponentSet', ['lodash', function(_) { }, getKey ); - } + ComponentSet.prototype.lightestPowerDist = function(boostEnergy) { + var pds = this.common[4]; + var pd = pds[0]; + + for (var i = 1; i < pds.length; i++) { + if (pds[i].mass < pd.mass && pds[i].enginecapacity >= boostEnergy) { + pd = pds[i]; + } + } + return pd.class + pd.rating; + }; + + ComponentSet.prototype.lightestPowerPlant = function(powerUsed) { + var pps = this.common[0]; + var pp = null; + + for (var i = 0; i < pps.length; i++) { + if (pp == null || (pps[i].mass < pp.mass && pps[i].pGen >= powerUsed)) { + pp = pps[i]; + } + } + return pp.class + (pp.rating != 'D' ? 'A' : 'D'); // Use A rated if C,E + }; + return ComponentSet; }]); diff --git a/app/less/outfit.less b/app/less/outfit.less index 3aecf8d7..c4f06de5 100755 --- a/app/less/outfit.less +++ b/app/less/outfit.less @@ -71,16 +71,17 @@ color: @primary; } - .largePhone({ + .smallTablet({ width: 60%; }); - .medPhone({ + .largePhone({ width: 100%; }); + } - .largePhone({ + .smallTablet({ float: left; clear: left; width: 100%; diff --git a/app/views/page-outfit.html b/app/views/page-outfit.html index b4c9abba..39db4735 100644 --- a/app/views/page-outfit.html +++ b/app/views/page-outfit.html @@ -19,8 +19,8 @@ -