closed #121 fixed wormhole signature type caching

This commit is contained in:
Exodus4D
2016-04-10 13:17:31 +02:00
parent c221d4d2a8
commit ccd1e97744

View File

@@ -942,18 +942,7 @@ define([
var systemTypeId = parseInt( signatureNameField.attr('data-systemTypeId') );
var areaId = parseInt( signatureNameField.attr('data-areaid') );
var groupId = parseInt( signatureNameField.attr('data-groupId') );
var cacheKey = [systemTypeId, areaId, groupId].join('_');
// check for cached signature names
if(sigNameCache.hasOwnProperty( cacheKey )){
return sigNameCache[cacheKey];
}
var signatureNames = getAllSignatureNames(systemData, systemTypeId, areaId, groupId);
// get all available Signature Names
var availableSigs = sigNameCache[cacheKey] = signatureNames;
var availableSigs = getAllSignatureNames(systemData, systemTypeId, areaId, groupId);
return availableSigs;
},
@@ -1019,43 +1008,89 @@ define([
*/
var getAllSignatureNames = function(systemData, systemTypeId, areaId, groupId){
var newSelectOptions = [];
var cacheKey = [systemTypeId, areaId, groupId].join('_');
var newSelectOptionsCount = 0;
// set new Options ----------
// get all possible "static" signature names by the selected groupId
var tempSelectOptions = Util.getAllSignatureNames(systemTypeId, areaId, groupId);
// check for cached signature names
if(sigNameCache.hasOwnProperty( cacheKey )){
// cached signatures do not include static WHs!
newSelectOptions = sigNameCache[cacheKey].slice(0);
newSelectOptionsCount = sumSignaturesRecursive('children', newSelectOptions);
}else{
// get new Options ----------
// get all possible "static" signature names by the selected groupId
var tempSelectOptions = Util.getAllSignatureNames(systemTypeId, areaId, groupId);
// format options into array with objects advantages: keep order, add more options (whs), use optgroup
if(tempSelectOptions){
var fixSelectOptions = [];
for (var key in tempSelectOptions) {
if (
key > 0 &&
tempSelectOptions.hasOwnProperty(key)
) {
//newSelectOptions.push({value: key, text: tempSelectOptions[key] });
fixSelectOptions.push( {value: key, text: tempSelectOptions[key] } );
newSelectOptionsCount++;
// format options into array with objects advantages: keep order, add more options (whs), use optgroup
if(tempSelectOptions){
var fixSelectOptions = [];
for (var key in tempSelectOptions) {
if (
key > 0 &&
tempSelectOptions.hasOwnProperty(key)
) {
fixSelectOptions.push( {value: key, text: tempSelectOptions[key] } );
newSelectOptionsCount++;
}
}
if(newSelectOptionsCount > 0){
if(groupId === 5){
// "wormhole" selected => multiple <optgroup> available
newSelectOptions.push({ text: 'Wandering WHs', children: fixSelectOptions});
}else{
newSelectOptions = fixSelectOptions;
}
}
}
if(newSelectOptionsCount > 0){
if(groupId === 5){
// "wormhole" selected => multiple <optgroup> available
newSelectOptions.push({ text: 'Wandering WHs', children: fixSelectOptions});
}else{
newSelectOptions = fixSelectOptions;
// wormhole (cached signatures)
if( groupId === 5 ){
// add possible frigate holes
var frigateHoles = getFrigateHolesBySystem(areaId);
var frigateWHData = [];
for(var frigKey in frigateHoles){
if (
frigKey > 0 &&
frigateHoles.hasOwnProperty(frigKey)
) {
frigateWHData.push( {value: newSelectOptionsCount, text: frigateHoles[frigKey]} );
newSelectOptionsCount++;
}
}
if(frigateWHData.length > 0){
newSelectOptions.push({ text: 'Frigate WHs', children: frigateWHData});
}
// add possible incoming holes
var incomingWHData = [];
for(var incomingKey in Init.incomingWormholes){
if (
incomingKey > 0 &&
Init.incomingWormholes.hasOwnProperty(incomingKey)
) {
incomingWHData.push( {value: newSelectOptionsCount, text: Init.incomingWormholes[incomingKey]} );
newSelectOptionsCount++;
}
}
if(incomingWHData.length > 0){
newSelectOptions.push({ text: 'Incoming WHs', children: incomingWHData});
}
}
// update cache (clone array) -> further manipulation to this array, should not be cached
sigNameCache[cacheKey] = newSelectOptions.slice(0);
}
// wormhole
// static wormholes (DO NOT CACHE) (not all C2 WHs have the same statics,...
if( groupId === 5 ){
// add static WH(s) for this system
if(systemData.statics){
var staticWHData = [];
for(var i = 0; i < systemData.statics.length; i++){
newSelectOptionsCount++;
var staticWHName = systemData.statics[i].name + ' - ' + systemData.statics[i].security;
staticWHData.push( {value: newSelectOptionsCount, text: staticWHName} );
@@ -1066,41 +1101,6 @@ define([
newSelectOptions.unshift({ text: 'Static WHs', children: staticWHData});
}
}
// add possible frigate holes
var frigateHoles = getFrigateHolesBySystem(areaId);
var frigateWHData = [];
for(var frigKey in frigateHoles){
if (
frigKey > 0 &&
frigateHoles.hasOwnProperty(frigKey)
) {
frigateWHData.push( {value: newSelectOptionsCount, text: frigateHoles[frigKey]} );
newSelectOptionsCount++;
}
}
if(frigateWHData.length > 0){
newSelectOptions.push({ text: 'Frigate WHs', children: frigateWHData});
}
// add possible incoming holes
var incomingWHData = [];
for(var incomingKey in Init.incomingWormholes){
if (
incomingKey > 0 &&
Init.incomingWormholes.hasOwnProperty(incomingKey)
) {
incomingWHData.push( {value: newSelectOptionsCount, text: Init.incomingWormholes[incomingKey]} );
newSelectOptionsCount++;
}
}
if(incomingWHData.length > 0){
newSelectOptions.push({ text: 'Incoming WHs', children: incomingWHData});
}
}
// if selectOptions available -> add "empty" option as well
@@ -1108,10 +1108,42 @@ define([
newSelectOptions.unshift({ value: 0, text: ''});
}
return newSelectOptions;
};
/**
* recursive sum array.length for a given object key
* -> e.g.
* {
* first: {
* count = [4, 2, 1]
* test = { ... }
* },
* second: {
* count = [12, 13]
* test = { ... }
* }
* }
* -> sumSignaturesRecursive('count', obj) => 5;
* @param key
* @param obj
* @returns {number}
*/
var sumSignaturesRecursive = function(key, obj){
var sum = 0;
for (var prop in obj) {
if (obj.hasOwnProperty(prop) && key === prop) {
sum += obj[prop].length;
}
else if (Object.prototype.toString.call(obj[prop]) === '[object Object]') {
sum += sumSignaturesRecursive(key, obj[prop]);
}
}
return sum;
};
/**
* get possible frig holes that could spawn in a system
* filtered by "systemTypeId"