feat: consumable buttons

This commit is contained in:
TrèsAbhi committed 2024-01-25 11:50:43 -06:00
1 parent a6c3ac36ef
commit ad1ad80026
7 files changed
+120 -26

No files matched your search

@@ -0,0 +1,40 @@
import { ConsumableEntry } from './consumablesDefinitions';
import { GunDefinition, TankDefinition } from './tankDefinitions';
export function checkConsumableInclusivity(
consumable: ConsumableEntry,
tank: TankDefinition,
gun: GunDefinition,
) {
const included = consumable.include.every((rule) => {
switch (rule.type) {
case 'tier':
return rule.min <= tank.tier && tank.tier <= rule.max;
case 'ids':
return rule.ids.includes(tank.id);
case 'category':
throw new SyntaxError('Category filtering found in include rule');
}
});
const excluded = consumable.exclude?.some((rule) => {
switch (rule.type) {
case 'tier':
return rule.min <= tank.tier && tank.tier <= rule.max;
case 'ids':
return rule.ids.includes(tank.id);
case 'category':
return rule.categories.some((category) => {
switch (category) {
case 'clip':
return gun.type !== 'regular';
}
});
}
});
return included && !excluded;
}
+12 -8
View File
@@ -1,5 +1,7 @@
import { asset } from './asset';
export type ConsumableDefinitionFilterCategory = 'clip';
type ConsumableDefinitionFilter =
| {
type: 'tier';
@@ -12,17 +14,19 @@ type ConsumableDefinitionFilter =
}
| {
type: 'category';
categories: string[];
categories: ConsumableDefinitionFilterCategory[];
};
export interface ConsumableEntry {
id: number;
name: string;
effects?: Record<string, number>;
include: ConsumableDefinitionFilter[];
exclude?: ConsumableDefinitionFilter[];
}
export interface ConsumableDefinitions {
[key: string]: {
id: number;
name: string;
effects?: Record<string, number>;
include: ConsumableDefinitionFilter[];
exclude?: ConsumableDefinitionFilter[];
};
[key: string]: ConsumableEntry;
}
export const consumableDefinitions = fetch(