mirror of
https://github.com/EDCD/coriolis.git
synced 2025-12-10 07:05:35 +00:00
Add component group filtering for Orca special case internal slots
This commit is contained in:
@@ -6,6 +6,13 @@ angular.module('shipyard').factory('ComponentSet', ['lodash', function(_) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getKey(maxClass, eligible) {
|
||||||
|
if (eligible) {
|
||||||
|
return maxClass + Object.keys(eligible).join('-');
|
||||||
|
}
|
||||||
|
return maxClass;
|
||||||
|
}
|
||||||
|
|
||||||
function ComponentSet(components, mass, maxCommonArr, maxInternal, maxHardPoint) {
|
function ComponentSet(components, mass, maxCommonArr, maxInternal, maxHardPoint) {
|
||||||
this.mass = mass;
|
this.mass = mass;
|
||||||
this.common = {};
|
this.common = {};
|
||||||
@@ -36,34 +43,57 @@ angular.module('shipyard').factory('ComponentSet', ['lodash', function(_) {
|
|||||||
for (var g in components.internal) {
|
for (var g in components.internal) {
|
||||||
this.internal[g] = filter(components.internal[g], maxInternal, 0, mass);
|
this.internal[g] = filter(components.internal[g], maxInternal, 0, mass);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a memoized function for determining the components that are
|
||||||
|
* eligible for an internal slot
|
||||||
|
* @param {integer} c The max class component that can be mounted in the slot
|
||||||
|
* @param {Object} eligible) The map of eligible internal groups
|
||||||
|
* @return {object} A map of all eligible components by group
|
||||||
|
*/
|
||||||
|
this.getInts = _.memoize(
|
||||||
|
function(c, eligible) {
|
||||||
|
var o = {};
|
||||||
|
for (var key in this.internal) {
|
||||||
|
if (eligible && !eligible[key]) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
var data = filter(this.internal[key], c, 0, this.mass);
|
||||||
|
if (data.length) { // If group is not empty
|
||||||
|
o[key] = data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return o;
|
||||||
|
},
|
||||||
|
getKey
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a memoized function for determining the components that are
|
||||||
|
* eligible for an hardpoint slot
|
||||||
|
* @param {integer} c The max class component that can be mounted in the slot
|
||||||
|
* @param {Object} eligible) The map of eligible hardpoint groups
|
||||||
|
* @return {object} A map of all eligible components by group
|
||||||
|
*/
|
||||||
|
this.getHps = _.memoize(
|
||||||
|
function(c, eligible) {
|
||||||
|
var o = {};
|
||||||
|
for (var key in this.hardpoints) {
|
||||||
|
if (eligible && !eligible[key]) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
var data = filter(this.hardpoints[key], c, c ? 1 : 0, this.mass);
|
||||||
|
if (data.length) { // If group is not empty
|
||||||
|
o[key] = data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return o;
|
||||||
|
},
|
||||||
|
getKey
|
||||||
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ComponentSet.prototype.getHps = function(c) {
|
|
||||||
if (!this.hpClass[c]) {
|
|
||||||
var o = this.hpClass[c] = {};
|
|
||||||
for (var key in this.hardpoints) {
|
|
||||||
var data = filter(this.hardpoints[key], c, c ? 1 : 0, this.mass);
|
|
||||||
if (data.length) { // If group is not empty
|
|
||||||
o[key] = data;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return this.hpClass[c];
|
|
||||||
};
|
|
||||||
|
|
||||||
ComponentSet.prototype.getInts = function(c) {
|
|
||||||
if (!this.intClass[c]) {
|
|
||||||
var o = this.intClass[c] = {};
|
|
||||||
for (var key in this.internal) {
|
|
||||||
var data = filter(this.internal[key], c, 0, this.mass);
|
|
||||||
if (data.length) { // If group is not empty
|
|
||||||
o[key] = data;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return this.intClass[c];
|
|
||||||
};
|
|
||||||
|
|
||||||
return ComponentSet;
|
return ComponentSet;
|
||||||
|
|
||||||
}]);
|
}]);
|
||||||
|
|||||||
@@ -36,7 +36,11 @@ angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength',
|
|||||||
var slotGroup = slots[slotType];
|
var slotGroup = slots[slotType];
|
||||||
var group = this[slotType] = []; // Initialize Slot group (Common, Hardpoints, Internal)
|
var group = this[slotType] = []; // Initialize Slot group (Common, Hardpoints, Internal)
|
||||||
for (var i = 0; i < slotGroup.length; i++) {
|
for (var i = 0; i < slotGroup.length; i++) {
|
||||||
group.push({ id: null, c: null, incCost: true, maxClass: slotGroup[i] });
|
if (typeof slotGroup[i] == 'object') {
|
||||||
|
group.push({ id: null, c: null, incCost: true, maxClass: slotGroup[i].class, eligible: slotGroup[i].eligible });
|
||||||
|
} else {
|
||||||
|
group.push({ id: null, c: null, incCost: true, maxClass: slotGroup[i] });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Make a Ship 'slot'/item similar to other slots
|
// Make a Ship 'slot'/item similar to other slots
|
||||||
|
|||||||
@@ -90,7 +90,8 @@ angular.module('shipyard').service('Components', ['lodash', 'ComponentsDB', 'Shi
|
|||||||
*/
|
*/
|
||||||
this.forShip = function(shipId) {
|
this.forShip = function(shipId) {
|
||||||
var ship = Ships[shipId];
|
var ship = Ships[shipId];
|
||||||
return new ComponentSet(C, ship.minMassFilter || ship.properties.hullMass + 5, ship.slots.common, ship.slots.internal[0], ship.slots.hardpoints[0]);
|
var maxInternal = isNaN(ship.slots.internal[0]) ? ship.slots.internal[0].class : ship.slots.internal[0];
|
||||||
|
return new ComponentSet(C, ship.minMassFilter || ship.properties.hullMass + 5, ship.slots.common, maxInternal, ship.slots.hardpoints[0]);
|
||||||
};
|
};
|
||||||
|
|
||||||
}]);
|
}]);
|
||||||
|
|||||||
@@ -187,7 +187,7 @@
|
|||||||
<div class="slot" ng-repeat="i in ship.internal" ng-click="selectSlot($event, i)" context-menu="select('i', i, $event, 'empty')" ng-class="{selected: selectedSlot==i}">
|
<div class="slot" ng-repeat="i in ship.internal" ng-click="selectSlot($event, i)" context-menu="select('i', i, $event, 'empty')" ng-class="{selected: selectedSlot==i}">
|
||||||
<div slot-internal class="details" slot="i" lbl="GMAP[i.c.grp]" fuel="ship.fuelCapacity"></div>
|
<div slot-internal class="details" slot="i" lbl="GMAP[i.c.grp]" fuel="ship.fuelCapacity"></div>
|
||||||
<div class="select" ng-if="selectedSlot==i" ng-click="select('i',i,$event)">
|
<div class="select" ng-if="selectedSlot==i" ng-click="select('i',i,$event)">
|
||||||
<div component-select s="i" groups="availCS.getInts(i.maxClass)"></div>
|
<div component-select s="i" groups="availCS.getInts(i.maxClass, i.eligible)"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -35,8 +35,8 @@
|
|||||||
0
|
0
|
||||||
],
|
],
|
||||||
"internal": [
|
"internal": [
|
||||||
6,
|
{ "class": 6, "eligible": { "Cargo Rack": 1, "Hull Reinforcement Package": 1 } },
|
||||||
5,
|
{ "class": 5, "eligible": { "Cargo Rack": 1, "Hull Reinforcement Package": 1 } },
|
||||||
5,
|
5,
|
||||||
5,
|
5,
|
||||||
4,
|
4,
|
||||||
|
|||||||
Reference in New Issue
Block a user