Add warnings if phaser has next card too long and increase it's virtual HP consumption #151

Open
esavkin wants to merge 2 commits from esavkin/web2019:148-phaser-fix into master
5 changed files with 97 additions and 38 deletions

6
package-lock.json generated
View File

@ -2815,9 +2815,9 @@
"dev": true
},
"node_modules/caniuse-lite": {
"version": "1.0.30001690",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001690.tgz",
"integrity": "sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==",
"version": "1.0.30001696",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001696.tgz",
"integrity": "sha512-pDCPkvzfa39ehJtJ+OwGT/2yvT2SbjfHhiIW2LWOAcMQ7BzwxT/XuyUp4OTOd0XFWA6BKw0JalnBHgSi5DGJBQ==",
"dev": true,
"funding": [
{

File diff suppressed because one or more lines are too long

View File

@ -480,7 +480,7 @@ const useCart = ((set, get) => ({
let itemsCopy = Array.from(crate.items);
const disabled = !!get().crateParams(crate.crate_mode).warnings_disabled;
itemsCopy = FillResources(itemsCopy, disabled);
itemsCopy = TriggerWarnings(itemsCopy, disabled);
itemsCopy = TriggerWarnings(itemsCopy, disabled, crate);
const [crate_warnings, occupied] = TriggerCrateWarnings(crate);
return {
...crate,

View File

@ -30,14 +30,14 @@ const find_next_source_index = (data, index, source) => {
}
const not_enough_resource_trigger = (name) => {
return (_data, _index, counters) => {
return (_data, _index, counters, _crate) => {
const resource = find_in_counters(counters, name);
return resource.occupied > resource.max;
}
}
const no_source_trigger = (name) => {
return (data, index, _counters) => {
return (data, index, _counters, _crate) => {
const occupied = item_occupied_counters[name](data[index]);
if (occupied > 0)
return !find_previous_source(data, index, name);
@ -46,12 +46,20 @@ const no_source_trigger = (name) => {
}
const wiring_constraint = (name) => {
return (data, index, _counters) => {
return (data, index, _counters, _crate) => {
const next = find_next_source_index(data, index, name);
return next - index === 1;
}
}
const phaser_next_card_long = (data, index, counters, crate) => {
const nbrOccupied = resource_counters.hp(crate.items, -1);
const nbrHP = useShopStore.getState().crateParams(crate.crate_mode).hp;
return (index < data.length - 1) ? (
(data[index+1].consumes && data[index+1].consumes.depth && data[index+1].consumes.depth >= 8.5)
) : (nbrOccupied >= nbrHP && nbrHP > 0)
}
const Types = {
"eem_resource": {
level: "warning",
@ -88,22 +96,27 @@ const Types = {
trigger: wiring_constraint("eem"),
message: "Due to wiring constraints, the carrier can only connect to EEM cards immediately at its right, without crossing another carrier."
},
"phaser_next_card_long": {
level: "reminder",
trigger: phaser_next_card_long,
message: "The next card may interfere with this Phaser. Consider placing a shorter card right after this Phaser."
},
"default": {
level: "warning",
trigger: (_a, _b, _c) => {
trigger: (_a, _b, _c, _d) => {
return true;
},
message: 'This item has unimplemented warning'
}
}
export function TriggerWarnings(data, disabled) {
export function TriggerWarnings(data, disabled, crate) {
return data.map((element, index) => {
if (!element.warnings) return element;
element.show_warnings = disabled ? [] :element.warnings
.map((warning, _) => {
if (!!Types[warning])
return Types[warning].trigger(data, index, element.counted_resources) ? {trigger: undefined, name: warning, ...Types[warning]} : null;
return Types[warning].trigger(data, index, element.counted_resources, crate) ? {trigger: undefined, name: warning, ...Types[warning]} : null;
else
return Types.default;
})
@ -143,6 +156,22 @@ const crate_warnings = {
const nbrHPDesktop = useShopStore.getState().crate_modes.desktop.hp;
return crate.crate_mode === useShopStore.getState().crate_modes.rack.id && occupied < nbrHPDesktop;
}
},
"phaser_not_fit": {
message: "Phaser cards require additional space immediately after them, but the current crate lacks sufficient room. This may disrupt placement of subsequent cards. Consider removing cards, repositioning shorter cards after Phaser(s), or using a larger crate.",
level: "warning",
trigger: (crate, occupied) => {
const nbrHP = useShopStore.getState().crateParams(crate.crate_mode).hp;
const stacked_phasers = crate.items.filter((elem, index, data) => {
return (elem.name_codename === "Phaser") && ((index < data.length - 1) ? (
(data[index + 1].consumes && data[index + 1].consumes.depth && data[index + 1].consumes.depth >= 8.5)
) : (occupied >= nbrHP && nbrHP > 0))
}
).length;
// #!debug
console.log(stacked_phasers, occupied)
return stacked_phasers > 0 && (occupied + stacked_phasers*2 >= nbrHP) && nbrHP >0;
}
}
}

View File

@ -229,7 +229,8 @@ const shop_data = {
"eem_wiring_constraint"
],
consumes: {
hp: 8
hp: 8,
depth: 20
}
},
'kaslisoc': {
@ -307,7 +308,8 @@ const shop_data = {
"eem_wiring_constraint"
],
consumes: {
hp: 8
hp: 8,
depth: 20
}
},
'vhdcicarrier': {
@ -332,7 +334,8 @@ const shop_data = {
"eem_wiring_constraint"
],
consumes: {
hp: 8
hp: 8,
depth: 16
}
},
'bnc-dio': {
@ -403,7 +406,8 @@ const shop_data = {
],
consumes: {
hp: 8,
eem: 1
eem: 1,
depth: 7
}
},
'sma-dio': {
@ -468,7 +472,8 @@ const shop_data = {
],
consumes: {
hp: 4,
eem: 1
eem: 1,
depth: 7
}
},
'mcx-dio': {
@ -559,7 +564,8 @@ const shop_data = {
],
consumes: {
hp: 4,
eem: 2
eem: 2,
depth: 23
}
},
'rj45-dio': {
@ -645,7 +651,8 @@ const shop_data = {
],
consumes: {
hp: 4,
eem: 2
eem: 2,
depth: 7
}
},
'urukul': {
@ -710,7 +717,8 @@ const shop_data = {
consumes: {
hp: 4,
eem: 2,
clk: 1
clk: 1,
depth: 16
}
},
'urukul_4412': {
@ -748,7 +756,8 @@ const shop_data = {
consumes: {
hp: 4,
eem: 2,
clk: 1
clk: 1,
depth: 16
}
},
'phaser': {
@ -777,12 +786,14 @@ const shop_data = {
size: 'small',
warnings: [
"no_eem_source",
"no_clk_source"
"no_clk_source",
"phaser_next_card_long"
],
consumes: {
hp: 4,
eem: 1,
clk: 1
clk: 1,
depth: 16 // heatsink 8.5
}
},
'zotino': {
@ -824,7 +835,8 @@ const shop_data = {
consumes: {
hp: 4,
eem: 1,
tec: 1
tec: 1,
depth: 16
},
resources: [
{name: "idc", max: 4}
@ -852,7 +864,8 @@ const shop_data = {
],
consumes: {
hp: 4,
eem: 1
eem: 1,
depth: 17
},
resources: [
{name: "idc", max: 4}
@ -878,7 +891,8 @@ const shop_data = {
],
consumes: {
hp: 8,
idc: 1
idc: 1,
depth: 6
}
},
'hvamp32': {
@ -906,7 +920,8 @@ const shop_data = {
],
consumes: {
hp: 4,
idc: 4
idc: 4,
depth: 16
}
},
'idc-sma-adapter': {
@ -929,7 +944,8 @@ const shop_data = {
],
consumes: {
hp: 4,
idc: 1
idc: 1,
depth: 6
}
},
'idc-mcx-adapter': {
@ -974,7 +990,8 @@ const shop_data = {
"idc_resource"
],
consumes: {
hp: 4
hp: 4,
depth: 5
},
resources: [
{name: "idc", max: 4}
@ -1029,7 +1046,8 @@ const shop_data = {
],
consumes: {
hp: 8,
eem: 2
eem: 2,
depth: 16
}
},
'koster': {
@ -1055,7 +1073,8 @@ const shop_data = {
],
consumes: {
hp: 4,
eem: 2
eem: 2,
depth: 7.5
}
},
'clocker': {
@ -1088,7 +1107,8 @@ const shop_data = {
consumes: {
hp: 4,
eem: 1,
clk: 1
clk: 1,
depth: 7
},
resources: [
{name: "clk", max: 6}
@ -1125,7 +1145,8 @@ const shop_data = {
],
consumes: {
hp: 4,
eem: 1
eem: 1,
depth: 16
},
},
'fast_servo': {
@ -1159,7 +1180,8 @@ const shop_data = {
],
consumes: {
hp: 4,
eem: 1
eem: 1,
depth: 16
},
},
'mirny': {
@ -1192,7 +1214,8 @@ const shop_data = {
consumes: {
hp: 4,
eem: 1,
clk: 1
clk: 1,
depth: 16
},
},
'almazny': {
@ -1220,7 +1243,8 @@ const shop_data = {
consumes: {
hp: 8,
eem: 1,
clk: 1
clk: 1,
depth: 16
},
},
'thermostat-eem': {
@ -1248,6 +1272,7 @@ const shop_data = {
consumes: {
hp: 4,
eem: 1,
depth: 16
}
},
'thermostat2ch': {
@ -1266,7 +1291,8 @@ const shop_data = {
],
size: 'small',
consumes: {
hp: 4
hp: 4,
depth: 12
},
resources: [
{name: "tec", max: 2}
@ -1295,7 +1321,8 @@ const shop_data = {
consumes: {
hp: 8,
eem: 1,
clk: 1
clk: 1,
depth: 8
},
},
'pounder': {
@ -1329,7 +1356,8 @@ const shop_data = {
consumes: {
hp: 8,
eem: 1,
clk: 1
clk: 1,
depth: 16
}
},
'eem_pwr_mod': {
@ -1354,6 +1382,7 @@ const shop_data = {
warnings: [],
consumes: {
hp: 8,
depth: 20
},
},
'kirdy': {
@ -1385,6 +1414,7 @@ const shop_data = {
warnings: [],
consumes: {
hp: 8,
depth: 16
},
},
},