-
Notifications
You must be signed in to change notification settings - Fork 25
/
Copy pathunified-worker.js
110 lines (102 loc) · 4.53 KB
/
unified-worker.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/* eslint-disable */
//unified-worker.js
import voymod from './voymod.js';
import transwarp from './transwarp.js';
import sporedrive from './sporedrive.js';
import VoyagersWorker from './voyagers.ts';
import Optimizer from './optimizer.js';
import BetaTachyon from './betatachyon.ts';
import CollectionOptimizer from './collectionworker.ts';
import ItemsWorker from './itemsworker.ts';
import QuestSolver from './questsolver.ts';
import { calcQLots } from '../utils/equipment.ts';
import ShipCrewWorker from './shipcrewworker.ts';
// This worker can estimate a single lineup from input config
const voyageEstimate = (config, progress) => {
return new Promise((resolve, reject) => {
let estimate = transwarp.getEstimate(config, progress);
resolve(estimate);
});
};
// This worker can estimate a single lineup from input config
const voyageEstimateExtended = (config, progress) => {
return new Promise((resolve, reject) => {
let estimate = sporedrive.getEstimate(config, progress);
resolve(estimate);
});
};
/**
*
* @param {import('../model/player.js').PlayerData} playerData
* @param {import('../model/crew.js').CrewMember[]} allCrew
* @returns
*/
const citeOptimizer = (playerData, allCrew) => {
/**
* @param {import('../model/player.js').PlayerCrew} c
*/
const isImmortal = (c) => {
return c.level === 100 && c.equipment?.length === 4 && c.rarity === c.max_rarity;
}
return new Promise((resolve, reject) => {
if (playerData.citeMode && playerData.citeMode.rarities?.length) {
playerData = JSON.parse(JSON.stringify(playerData));
playerData.player.character.crew = playerData.player.character.crew
.filter((crew) => playerData.citeMode.rarities.includes(crew.max_rarity));
}
Optimizer.assessCrewRoster(playerData, allCrew);
Optimizer.sortVoyageRankings();
Optimizer.findCurrentBestCrew();
Optimizer.findBestForRarity();
Optimizer.findCrewToTrain();
Optimizer.findEVContributionOfCrewToTrain();
Optimizer.sortCrewToTrain();
Optimizer.findBestCitedCrew();
Optimizer.findCrewToCite();
Optimizer.findEVContributionOfCrewToCite();
Optimizer.sortCrewToCite();
resolve({
crewToCite: Optimizer.rankedCrewToCite,
crewToTrain: Optimizer.rankedCrewToTrain
});
});
};
// eslint-disable-next-line no-restricted-globals
self.onmessage = (message) => {
const postResult = (result, inProgress) => {
postMessage({ result, inProgress });
if (!inProgress) self.close();
};
const messageHandlers = {
'voyageEstimate': () => voyageEstimate(message.data.config, est => postResult(est, true)).then(estimate =>
postResult(estimate, false)
),
'voyageEstimateExtended': () => voyageEstimateExtended(message.data.config, est => postResult(est, true)).then(estimate =>
postResult(estimate, false)
),
'citeOptimizer': () => citeOptimizer(message.data.playerData, message.data.allCrew).then(data => postResult(data, false)),
'questSolver': () => QuestSolver.solveQuest(message.data.config).then(data => postResult(data, false)),
'ironywrit': () => BetaTachyon.scanCrew(message.data.config).then(data => postResult(data, false)),
'colOptimizer2': () => CollectionOptimizer.scanAll2(message.data.config).then(data => postResult(data, false)),
'equipmentWorker': () => ItemsWorker.processItems(message.data.config).then(data => postResult(data, false)),
'iampicard': () => voymod().then(mod => {
let result = mod.calculate(JSON.stringify(message.data), res => {
postResult(res, true);
});
postResult(result, false);
}),
'ussjohnjay': () => VoyagersWorker(message.data, postResult, transwarp.getEstimate),
'qpower': () => {
const { crew, quipment, buffs, max_qbits, slots, mode } = message.data.config;
crew.forEach((crew) => {
calcQLots(crew, quipment, buffs, max_qbits, slots, mode);
});
postResult(crew, false);
},
'shipworker': () => ShipCrewWorker.calc(message.data.config, progress => postResult(progress, true)).then(data => postResult(data, false)),
'bestshipworker': () => ShipCrewWorker.bestFinder(message.data.config).then(data => postResult(data, false)),
};
//console.log(message.data.worker);
messageHandlers[message.data.worker]();
// postMessage(result);
};