mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-23 19:49:50 +02:00
Compare commits
6
Commits
4e470599e8
...
a38239a6f9
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a38239a6f9 | ||
|
|
9e26da3205 | ||
|
|
750bdd236a | ||
|
|
33bb8ead3c | ||
|
|
79e282e70e | ||
|
|
e911f36ea3 |
No files matched your search
@@ -1,2 +1,2 @@
|
||||
export * from './fetchPB';
|
||||
export * from './pbMap';
|
||||
export * from "./fetchJSON";
|
||||
export * from "./fetchPB";
|
||||
@@ -1,41 +0,0 @@
|
||||
import { TankClass, TankType } from "@blitzkit/protos";
|
||||
import type { BlitzStats } from "../statistics";
|
||||
|
||||
export const TANK_TYPES = [
|
||||
TankType.TANK_TYPE_RESEARCHABLE,
|
||||
TankType.TANK_TYPE_PREMIUM,
|
||||
TankType.TANK_TYPE_COLLECTOR,
|
||||
];
|
||||
|
||||
export const TANK_TYPE_COMMAND_NAMES = {
|
||||
[TankType.TANK_TYPE_RESEARCHABLE]: "researchable",
|
||||
[TankType.TANK_TYPE_PREMIUM]: "premium",
|
||||
[TankType.TANK_TYPE_COLLECTOR]: "collector",
|
||||
};
|
||||
|
||||
export const TANK_CLASSES = [
|
||||
TankClass.TANK_CLASS_LIGHT,
|
||||
TankClass.TANK_CLASS_MEDIUM,
|
||||
TankClass.TANK_CLASS_HEAVY,
|
||||
TankClass.TANK_CLASS_TANK_DESTROYER,
|
||||
];
|
||||
|
||||
export const emptyAllStats: BlitzStats = {
|
||||
battles: 0,
|
||||
capture_points: 0,
|
||||
damage_dealt: 0,
|
||||
damage_received: 0,
|
||||
dropped_capture_points: 0,
|
||||
frags: 0,
|
||||
frags8p: 0,
|
||||
hits: 0,
|
||||
losses: 0,
|
||||
max_frags: 0,
|
||||
max_xp: 0,
|
||||
shots: 0,
|
||||
spotted: 0,
|
||||
survived_battles: 0,
|
||||
xp: 0,
|
||||
win_and_survived: 0,
|
||||
wins: 0,
|
||||
};
|
||||
@@ -1,7 +1,6 @@
|
||||
export * from "./canSplash";
|
||||
export * from "./clans";
|
||||
export * from "./classes";
|
||||
export * from "./constants";
|
||||
export * from "./equipmentPrice";
|
||||
export * from "./fetchBlitz";
|
||||
export * from "./fetchGlossary";
|
||||
|
||||
@@ -11,12 +11,10 @@ export abstract class ServerBlitzKitAPI6 extends ServerBlitzKitAPI5 {
|
||||
async consumables() {
|
||||
const consumableDefinitions = ConsumableDefinitions.create();
|
||||
|
||||
Object.entries(this.consumablesCommon).forEach(([key, consumable]) => {
|
||||
Object.entries(this.consumablesCommon).forEach(([, consumable]) => {
|
||||
const entry: Consumable = {
|
||||
id: consumable.id,
|
||||
game_mode_exclusive: "gameModeFilter" in consumable,
|
||||
cooldown: consumable.script.cooldown,
|
||||
duration: consumable.script.duration,
|
||||
name: this.getString(consumable.userString),
|
||||
exclude: [],
|
||||
include: [],
|
||||
|
||||
@@ -3,7 +3,6 @@ import {
|
||||
ProvisionDefinitions,
|
||||
TankDefinition,
|
||||
} from "../../../protos/src/blitzkit";
|
||||
import { checkConsumableProvisionInclusivity } from "./checkConsumableProvisionInclusivity";
|
||||
|
||||
export function availableProvisions(
|
||||
tank: TankDefinition,
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
import { emptyAllStats } from '../../blitz/constants';
|
||||
import { Samples } from '../../../../protos/src/blitzkit';
|
||||
import type { BlitzkitStats } from '../../statistics';
|
||||
|
||||
export const emptyAverageDefinitionsAllStats: BlitzkitStats = {
|
||||
...emptyAllStats,
|
||||
battle_life_time: 0,
|
||||
};
|
||||
|
||||
export const averageDefinitionsAllStatsKeys = Object.keys(
|
||||
emptyAverageDefinitionsAllStats,
|
||||
) as (keyof BlitzkitStats)[];
|
||||
|
||||
export const emptySamples: Samples = {
|
||||
d_1: 0,
|
||||
d_7: 0,
|
||||
d_30: 0,
|
||||
d_60: 0,
|
||||
d_90: 0,
|
||||
d_120: 0,
|
||||
total: 0,
|
||||
};
|
||||
@@ -1,17 +0,0 @@
|
||||
import { staticAsset } from "@blitzkit/core";
|
||||
import { AverageDefinitions } from "../../../../protos/src/blitzkit";
|
||||
import { fetchPB } from "../../api";
|
||||
|
||||
export interface AverageDefinitionsManifest {
|
||||
version: 1;
|
||||
/**
|
||||
* epoch in days
|
||||
*/
|
||||
latest: number;
|
||||
}
|
||||
|
||||
export async function fetchAverage() {
|
||||
return await fetchPB(staticAsset("averages.pb"), AverageDefinitions);
|
||||
}
|
||||
|
||||
export * from "./constants";
|
||||
@@ -2,7 +2,6 @@ export * from "./alias";
|
||||
export * from "./api";
|
||||
export * from "./assertSecret";
|
||||
export * from "./availableProvisions";
|
||||
export * from "./averageDefinitions";
|
||||
export * from "./coefficient";
|
||||
export * from "./createDefaultProvisions";
|
||||
export * from "./createDefaultSkills";
|
||||
|
||||
@@ -1,11 +1,6 @@
|
||||
import { GameDefinitions, TankDefinition, TankType } from "@blitzkit/protos";
|
||||
import { TANK_CLASSES } from "../blitz/constants";
|
||||
|
||||
const treeTypeOrder = [
|
||||
TankType.TANK_TYPE_RESEARCHABLE,
|
||||
TankType.TANK_TYPE_PREMIUM,
|
||||
TankType.TANK_TYPE_COLLECTOR,
|
||||
];
|
||||
import { GameDefinitions, TankDefinition } from "@blitzkit/protos";
|
||||
import { tankClassOrder } from "../config/tankClassOrder";
|
||||
import { treeTypeOrder } from "../config/treeTypeOrder";
|
||||
|
||||
export function metaSortTank(
|
||||
tanks: TankDefinition[],
|
||||
@@ -17,7 +12,8 @@ export function metaSortTank(
|
||||
(a, b) => treeTypeOrder.indexOf(b.type) - treeTypeOrder.indexOf(a.type),
|
||||
)
|
||||
.sort(
|
||||
(a, b) => TANK_CLASSES.indexOf(b.class) - TANK_CLASSES.indexOf(a.class),
|
||||
(a, b) =>
|
||||
tankClassOrder.indexOf(b.class) - tankClassOrder.indexOf(a.class),
|
||||
)
|
||||
.sort(
|
||||
(a, b) =>
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
import { TankClass } from "@blitzkit/protos";
|
||||
|
||||
export const tankClassOrder = [
|
||||
TankClass.TANK_CLASS_LIGHT,
|
||||
TankClass.TANK_CLASS_MEDIUM,
|
||||
TankClass.TANK_CLASS_HEAVY,
|
||||
TankClass.TANK_CLASS_TANK_DESTROYER,
|
||||
];
|
||||
@@ -0,0 +1,7 @@
|
||||
import { TankType } from "@blitzkit/protos";
|
||||
|
||||
export const treeTypeOrder = [
|
||||
TankType.TANK_TYPE_RESEARCHABLE,
|
||||
TankType.TANK_TYPE_PREMIUM,
|
||||
TankType.TANK_TYPE_COLLECTOR,
|
||||
];
|
||||
+83
-314
@@ -1,4 +1,87 @@
|
||||
{
|
||||
"tanks": {
|
||||
"characteristics": {
|
||||
"titles": {
|
||||
"gun": "Gun",
|
||||
"clip": "Clip",
|
||||
"shell": "Shell",
|
||||
"accuracy": "Accuracy",
|
||||
"flexibility": "Flexibility",
|
||||
"maneuverability": "Maneuverability",
|
||||
"survivability": "Survivability",
|
||||
"concealment": "Concealment"
|
||||
},
|
||||
|
||||
"items": {
|
||||
"gun_type": "Gun type",
|
||||
"dpm": "Damage per minute",
|
||||
"damage": "Damage",
|
||||
"module_damage": "Module damage",
|
||||
"reload": "Reload",
|
||||
"reloads": "Reloads",
|
||||
"clipping_potential": "Clipping potential",
|
||||
"clip_size": "Clip size",
|
||||
"optimal_shell": "Optimal shell",
|
||||
"intra_clip": "Intra-clip",
|
||||
"burst_size": "Burst size",
|
||||
"intra_burst": "Intra-burst",
|
||||
"penetration": "Penetration",
|
||||
"penetration_loss_by_distance": "Penetration loss by distance",
|
||||
"penetration_loss_after_ricochet": "Penetration loss after ricochet",
|
||||
"shell_velocity": "Shell velocity",
|
||||
"shell_range": "Shell range",
|
||||
"shell_capacity": "Shell capacity",
|
||||
"caliber": "Caliber",
|
||||
"normalization": "Normalization",
|
||||
"ricochet": "Ricochet",
|
||||
"aim_time": "Aim time",
|
||||
"dispersion": "Dispersion",
|
||||
"dispersion_angle": "Dispersion angle",
|
||||
"gun_depression": "Gun depression",
|
||||
"gun_elevation": "Gun elevation",
|
||||
"azimuth_left": "Azimuth left",
|
||||
"azimuth_right": "Azimuth right",
|
||||
"speed_forward": "Speed forward",
|
||||
"speed_backward": "Speed backward",
|
||||
"engine_power": "Engine power",
|
||||
"brake_force": "Brake force",
|
||||
"weight": "Weight",
|
||||
"power_to_weight": "Power to weight",
|
||||
"terrain_coefficient": "Terrain coefficient",
|
||||
"hull_traverse_speed": "Hull traverse speed",
|
||||
"turret_traverse_speed": "Turret traverse speed",
|
||||
"gun_traverse_speed": "Gun traverse speed",
|
||||
"health": "Health",
|
||||
"fire_chance": "Fire chance",
|
||||
"fire_rate": "Fire rate",
|
||||
"ramming_resistance": "Ramming resistance",
|
||||
"view_range": "View range",
|
||||
"camouflage": "Camouflage",
|
||||
"width": "Width",
|
||||
"height": "Height",
|
||||
"length": "Length"
|
||||
}
|
||||
},
|
||||
|
||||
"navigation": {
|
||||
"tank": "Tank",
|
||||
"characteristics": "Characteristics"
|
||||
},
|
||||
|
||||
"loadout": {
|
||||
"dynamics": "Dynamics",
|
||||
"status": "Status",
|
||||
"consumables": "Consumables",
|
||||
"modules": "Modules",
|
||||
"equipment": "Equipment",
|
||||
"alternative": "Alt"
|
||||
},
|
||||
|
||||
"search": {
|
||||
"placeholder": "Search tanks..."
|
||||
}
|
||||
},
|
||||
|
||||
"home": {
|
||||
"tanks": "Tanks",
|
||||
"players": "Players",
|
||||
@@ -424,320 +507,6 @@
|
||||
"tier": "Tier {tier}"
|
||||
},
|
||||
|
||||
"tanks": {
|
||||
"search": "Search a stat...",
|
||||
|
||||
"name": "Tankopedia",
|
||||
"description": "Blitz tank encyclopedia",
|
||||
"seo_description": "Statistics, armor, and more for all tanks in World of Tanks Blitz",
|
||||
"tank_seo_title": "{name} - Tier {tier} {nationality} {class} | {website} Tankopedia | World of Tanks Blitz (WoTB)",
|
||||
"tank_seo_description": "{name} armor, statistics, equipment, provisions, and more. {dpm} DPM, {alpha}hp alpha, {penetration}mm penetration, {speed}kph top speed, {health}hp health.",
|
||||
|
||||
"visualizers": {
|
||||
"reload": {
|
||||
"skip": "Skip"
|
||||
},
|
||||
|
||||
"assault": {
|
||||
"title": "Assault shells"
|
||||
},
|
||||
|
||||
"rotator": {
|
||||
"hull": "Hull",
|
||||
"turret": "Turret",
|
||||
"hard": "Hard",
|
||||
"medium": "Medium",
|
||||
"soft": "Soft",
|
||||
"effective": "Effective"
|
||||
},
|
||||
|
||||
"ricochet": {
|
||||
"angle": "Angle",
|
||||
"normalization": "Normalization",
|
||||
"effective_angle": "Effective angle",
|
||||
"armor": "Armor",
|
||||
"no_ricochet": "Explosive shells don't ricochet"
|
||||
},
|
||||
|
||||
"view_range": {
|
||||
"camo": "Camo",
|
||||
"ghost_factory": "Ghost Factory",
|
||||
"dead_rail": "Dead Rail"
|
||||
},
|
||||
|
||||
"flexibility": {
|
||||
"yaw": "Yaw",
|
||||
"pitch": "Pitch",
|
||||
"min": "Min",
|
||||
"max": "Max"
|
||||
}
|
||||
},
|
||||
|
||||
"sandbox": {
|
||||
"poses": {
|
||||
"hull_down": "Hull down",
|
||||
"face_hug": "Face hug",
|
||||
"default": "Default"
|
||||
},
|
||||
|
||||
"settings": {
|
||||
"armor": "Armor",
|
||||
"green_penetration": "Green penetration",
|
||||
"hide_model_under_armor": "Hide model under armor",
|
||||
"opaque": "Opaque",
|
||||
"dev_wireframe": "DEV: wireframe"
|
||||
},
|
||||
|
||||
"screenshot": {
|
||||
"download": "Download",
|
||||
"copy": "Copy"
|
||||
},
|
||||
|
||||
"model": {
|
||||
"name": "Model"
|
||||
},
|
||||
"dynamic": {
|
||||
"name": "Dynamic armor",
|
||||
|
||||
"custom_shell": {
|
||||
"type": "Type",
|
||||
"caliber": "Caliber",
|
||||
"penetration": "Penetration",
|
||||
"normalization": "Normalization",
|
||||
"ricochet": "Ricochet",
|
||||
"explosion_radius": "Explosion radius",
|
||||
"exit": "Exit",
|
||||
"reset": "Reset"
|
||||
},
|
||||
|
||||
"advanced": "Advanced highlighting",
|
||||
|
||||
"shot_card": {
|
||||
"element": {
|
||||
"primary": "Primary",
|
||||
"spaced": "Spaced",
|
||||
"external": "External",
|
||||
"gap": "Gap",
|
||||
"gun": "Gun",
|
||||
"track": "Tracks"
|
||||
},
|
||||
"status": {
|
||||
"penetration": "{damage}hp penetration",
|
||||
"blocked": "Blocked",
|
||||
"ricochet": "Ricochet",
|
||||
"splash": "{damage}hp splash"
|
||||
},
|
||||
"stats": {
|
||||
"thickness_and_angle": "{thickness}mm {angle}°",
|
||||
"nominal": "{thickness}mm nominal",
|
||||
"ricochet_loss": "{loss}% penetration"
|
||||
}
|
||||
}
|
||||
},
|
||||
"static": {
|
||||
"name": "Static armor",
|
||||
"primary": "Primary",
|
||||
"spaced": "Spaced",
|
||||
"external": "External",
|
||||
"edit": {
|
||||
"label": "Edit",
|
||||
"reset": "Reset"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"meta": {
|
||||
"back": "Back",
|
||||
"compare": "Compare",
|
||||
"swap": {
|
||||
"button": "Swap",
|
||||
"title": "Swap tanks"
|
||||
},
|
||||
"vanilla": "Vanilla",
|
||||
"opentest": "OpenTest",
|
||||
"full_name": "Full name",
|
||||
"nation": "Nation",
|
||||
"class": "Class",
|
||||
"tier": "Tier",
|
||||
"type": "Type",
|
||||
"dev_id": "DEV: ID",
|
||||
"dev_name": "DEV: NAME",
|
||||
"purchase": "Purchase price",
|
||||
"restoration": "Restoration price",
|
||||
"sale": "Sale price",
|
||||
"research": "Research XP"
|
||||
},
|
||||
|
||||
"tech_tree": {
|
||||
"title": "Tech tree",
|
||||
"battle": "1 battle",
|
||||
"battles": "{count} battles",
|
||||
"route": "Route {index} of {count}"
|
||||
},
|
||||
|
||||
"game_modes": {
|
||||
"title": "Game mode abilities"
|
||||
},
|
||||
|
||||
"review": {
|
||||
"title": "Review videos",
|
||||
"join": "Apply to {name} YouTuber program"
|
||||
},
|
||||
|
||||
"configuration": {
|
||||
"title": "Configuration",
|
||||
|
||||
"equalizer": {
|
||||
"title": "Equalizer",
|
||||
"equalize": "Equalize",
|
||||
"beta": "Beta"
|
||||
},
|
||||
"modules": {
|
||||
"title": "Modules",
|
||||
"stock": "Stock",
|
||||
"upgrade": "Upgrade"
|
||||
},
|
||||
"equipment": {
|
||||
"title": "Equipment",
|
||||
"clear": "Clear"
|
||||
},
|
||||
"provisions": {
|
||||
"title": "Provisions",
|
||||
"clear": "Clear"
|
||||
},
|
||||
"consumables": {
|
||||
"title": "Consumables",
|
||||
"clear": "Clear",
|
||||
"info": "Yellow consumables do not affect the statistics."
|
||||
},
|
||||
"skills": {
|
||||
"title": "Crew skills",
|
||||
"clear": "Clear",
|
||||
"maximize": "Maximize",
|
||||
"info": "Yellow skills only apply under special circumstances. Hold Space to quickly toggle between level 0 and 7."
|
||||
},
|
||||
"miscellaneous": {
|
||||
"title": "Miscellaneous"
|
||||
}
|
||||
},
|
||||
|
||||
"characteristics": {
|
||||
"title": "Characteristics",
|
||||
"compare": {
|
||||
"label": "Compare",
|
||||
"class": "{tier} {class}",
|
||||
"tier": "All tier {tier}",
|
||||
"all": "All tanks"
|
||||
},
|
||||
"values": {
|
||||
"shell_index": "Shell {index}",
|
||||
"at_distance": "At {distance}m",
|
||||
"at_distance_slider_label": "Distance",
|
||||
"dispersion_at_distance": "Dispersion at {distance}m",
|
||||
"gun_flexibility": "Gun flexibility",
|
||||
"speed": "Speed",
|
||||
"terrain_coefficients": "Terrain coefficients",
|
||||
"raw_terrain_coefficients": "Raw terrain coefficients",
|
||||
"power_to_weight_ratio": "Power to weight ratio",
|
||||
"hull_traverse_speed": "Hull traverse speed",
|
||||
"camouflage": "Camouflage",
|
||||
"reload": "Reload",
|
||||
"crewCount": "Crew count",
|
||||
"shellNormalization": "Normalization",
|
||||
"shellRicochet": "Ricochet",
|
||||
"dpm": "DPM",
|
||||
"dpmEffective": "Effective at 60s",
|
||||
"shells": "Shells",
|
||||
"mostOptimalShellIndex": "Most optimal shell",
|
||||
"shellReloads": "Reloads",
|
||||
"shellReload": "Reload",
|
||||
"intraClip": "Intra-clip",
|
||||
"caliber": "Caliber",
|
||||
"penetration": "Penetration",
|
||||
"damage": "Damage",
|
||||
"damageWithoutAssault": "Damage without assault shells",
|
||||
"clipDamage": "Clipping potential",
|
||||
"moduleDamage": "Module damage",
|
||||
"explosionRadius": "Explosion radius",
|
||||
"shellVelocity": "Shell velocity",
|
||||
"aimTime": "Aim time",
|
||||
"dispersion": "Dispersion still",
|
||||
"dispersionMoving": "Moving",
|
||||
"dispersionHullTraversing": "Hull traversing",
|
||||
"dispersionTurretTraversing": "Turret traversing",
|
||||
"dispersionShooting": "Shooting",
|
||||
"dispersionGunDamaged": "Gun damaged",
|
||||
"gunDepression": "Depression",
|
||||
"gunElevation": "Elevation",
|
||||
"gunFrontalDepression": "Frontal depression",
|
||||
"gunFrontalElevation": "Frontal elevation",
|
||||
"gunRearDepression": "Rear depression",
|
||||
"gunRearElevation": "Rear elevation",
|
||||
"azimuthLeft": "Azimuth left",
|
||||
"azimuthRight": "Azimuth right",
|
||||
"speedForwards": "Speed forwards",
|
||||
"speedBackwards": "Backwards",
|
||||
"hardTerrainCoefficient": "Terrain coefficient hard",
|
||||
"hardTerrainCoefficientRaw": "Raw terrain coefficient hard",
|
||||
"mediumTerrainCoefficient": "Medium",
|
||||
"mediumTerrainCoefficientRaw": "Medium",
|
||||
"softTerrainCoefficient": "Soft",
|
||||
"softTerrainCoefficientRaw": "Soft",
|
||||
"enginePower": "Engine power",
|
||||
"powerToWeightRatioHardTerrain": "Power to weight ratio hard",
|
||||
"powerToWeightRatioMediumTerrain": "Medium",
|
||||
"powerToWeightRatioSoftTerrain": "Soft",
|
||||
"weight": "Weight",
|
||||
"turretTraverseSpeed": "Turret traverse speed",
|
||||
"gunTraverseSpeed": "Gun traverse speed",
|
||||
"hullTraverseHardTerrain": "Hull traverse hard",
|
||||
"hullTraverseMediumTerrain": "Medium",
|
||||
"hullTraverseSoftTerrain": "Soft",
|
||||
"health": "Health",
|
||||
"fireChance": "Fire chance",
|
||||
"viewRange": "View range",
|
||||
"camouflageStill": "Camouflage still",
|
||||
"camouflageMoving": "Moving",
|
||||
"camouflageShootingStill": "Still",
|
||||
"camouflageShootingMoving": "Moving",
|
||||
"camouflageCaughtOnFire": "Caught on fire",
|
||||
"width": "Width",
|
||||
"height": "Height",
|
||||
"length": "Length",
|
||||
"volume": "Volume",
|
||||
"shellRange": "Shell range",
|
||||
"shellCapacity": "Shell capacity",
|
||||
"gunType": "Gun type",
|
||||
"penetrationAt250m": "Penetration at 250m",
|
||||
"burstShells": "Burst shell count",
|
||||
"burstInterShell": "Burst inter-shell"
|
||||
}
|
||||
},
|
||||
|
||||
"firepower": {
|
||||
"title": "Firepower"
|
||||
},
|
||||
|
||||
"crew": {
|
||||
"title": "Crew training",
|
||||
"info": "represents the other roles a crew member can take.",
|
||||
"count": "Crew count",
|
||||
"commander": "Commander",
|
||||
"gunner": "Gunner",
|
||||
"driver": "Driver",
|
||||
"radioman": "Radioman",
|
||||
"loader": "Loader"
|
||||
},
|
||||
|
||||
"maneuverability": {
|
||||
"title": "Maneuverability"
|
||||
},
|
||||
|
||||
"survivability": {
|
||||
"title": "Survivability"
|
||||
}
|
||||
},
|
||||
|
||||
"compare": {
|
||||
"name": "Compare",
|
||||
"description": "Compare tank statistics",
|
||||
|
||||
@@ -9,14 +9,14 @@ message ConsumableDefinitions {
|
||||
}
|
||||
|
||||
message Consumable {
|
||||
required uint32 id = 1;
|
||||
required I18nString name = 2;
|
||||
required bool game_mode_exclusive = 5;
|
||||
repeated ConsumableTankFilter include = 6;
|
||||
repeated ConsumableTankFilter exclude = 7;
|
||||
required uint32 id = 1;
|
||||
required I18nString name = 2;
|
||||
required bool game_mode_exclusive = 5;
|
||||
repeated TankInclusivityFilter include = 6;
|
||||
repeated TankInclusivityFilter exclude = 7;
|
||||
}
|
||||
|
||||
message ConsumableTankFilter {
|
||||
message TankInclusivityFilter {
|
||||
oneof filter_type {
|
||||
ConsumableTankTierFilter tiers = 1;
|
||||
ConsumableTankIdsFilter ids = 2;
|
||||
|
||||
@@ -12,9 +12,9 @@ message ProvisionDefinitions {
|
||||
message Provision {
|
||||
reserved 3; // crew
|
||||
|
||||
required uint32 id = 1;
|
||||
required I18nString name = 2;
|
||||
required bool game_mode_exclusive = 5;
|
||||
repeated ConsumableTankFilter include = 6;
|
||||
repeated ConsumableTankFilter exclude = 7;
|
||||
required uint32 id = 1;
|
||||
required I18nString name = 2;
|
||||
required bool game_mode_exclusive = 5;
|
||||
repeated TankInclusivityFilter include = 6;
|
||||
repeated TankInclusivityFilter exclude = 7;
|
||||
}
|
||||
File renamed without changes.
@@ -3,7 +3,7 @@ import { literals } from "@blitzkit/i18n/src/literals";
|
||||
import fuzzysort from "fuzzysort";
|
||||
import { times } from "lodash-es";
|
||||
import { useMemo, useState } from "react";
|
||||
import { api } from "../../blitzkit/api";
|
||||
import { api } from "../../api/dynamic";
|
||||
import { useLocale } from "../../hooks/useLocale";
|
||||
import { Gallery } from "../../stores/gallery";
|
||||
import type { MaybeSkeletonComponentProps } from "../../types/maybeSkeletonComponentProps";
|
||||
|
||||
@@ -11,7 +11,7 @@ import {
|
||||
Text,
|
||||
} from "@radix-ui/themes";
|
||||
import { times } from "lodash-es";
|
||||
import { api } from "../../blitzkit/api";
|
||||
import { api } from "../../api/dynamic";
|
||||
import type { TankCharacteristics } from "../../core/blitzkit/tankCharacteristics";
|
||||
import { Var } from "../../core/radix/var";
|
||||
import { useLocale } from "../../hooks/useLocale";
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { PlusIcon, TrashIcon } from "@radix-ui/react-icons";
|
||||
import { Button, Dialog, Flex, SegmentedControl } from "@radix-ui/themes";
|
||||
import { api } from "../../blitzkit/api";
|
||||
import { api } from "../../api/dynamic";
|
||||
import { tankToCompareMember } from "../../core/blitzkit/tankToCompareMember";
|
||||
import { useLocale } from "../../hooks/useLocale";
|
||||
import { CompareEphemeral } from "../../stores/compareEphemeral";
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { ExternalLinkIcon, LoopIcon, TrashIcon } from "@radix-ui/react-icons";
|
||||
import { Dialog, Flex, IconButton } from "@radix-ui/themes";
|
||||
import { useState } from "react";
|
||||
import { api } from "../../blitzkit/api";
|
||||
import { api } from "../../api/dynamic";
|
||||
import { tankToCompareMember } from "../../core/blitzkit/tankToCompareMember";
|
||||
import { useLocale } from "../../hooks/useLocale";
|
||||
import { CompareEphemeral } from "../../stores/compareEphemeral";
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { alias, permanentSkills, romanize } from "@blitzkit/core";
|
||||
import { Flex } from "@radix-ui/themes";
|
||||
import { api } from "../blitzkit/api";
|
||||
import { api } from "../api/dynamic";
|
||||
import { GenericTankComponentButton } from "./ModuleButtons/GenericTankComponentButton";
|
||||
|
||||
interface CrewSkillManagerProps {
|
||||
|
||||
@@ -12,9 +12,9 @@ import { STRINGS } from "@blitzkit/i18n";
|
||||
import { ReloadIcon } from "@radix-ui/react-icons";
|
||||
import { ContextMenu } from "@radix-ui/themes";
|
||||
import { useEffect, useMemo, useState } from "react";
|
||||
import { api } from "../../api/dynamic";
|
||||
import { breakdownConfig } from "../../constants/embeds";
|
||||
import { awaitableAverageDefinitions } from "../../core/awaitables/averageDefinitions";
|
||||
import { api } from "../../blitzkit/api";
|
||||
import { EmbedBreakdown } from "../../stores/embedBreakdown";
|
||||
import { useEmbedStateCurry } from "../../stores/embedState/utilities";
|
||||
import { BreakdownEmbedCard, BreakdownEmbedWrapper } from "../TanksEmbed";
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { Box } from "@radix-ui/themes";
|
||||
import { useEffect } from "react";
|
||||
import { api } from "../../blitzkit/api";
|
||||
import { api } from "../../api/dynamic";
|
||||
import { tankToDuelMember } from "../../core/blitzkit/tankToDuelMember";
|
||||
import { Var } from "../../core/radix/var";
|
||||
import { Duel } from "../../stores/duel";
|
||||
|
||||
@@ -29,8 +29,8 @@ import {
|
||||
import fuzzysort from "fuzzysort";
|
||||
import { debounce, times } from "lodash-es";
|
||||
import { useCallback, useEffect, useRef, useState } from "react";
|
||||
import { api } from "../api/dynamic";
|
||||
import { awaitableTankNames } from "../core/awaitables/tankNames";
|
||||
import { api } from "../blitzkit/api";
|
||||
import { useLocale } from "../hooks/useLocale";
|
||||
import { Guess, GuessState } from "../stores/guess";
|
||||
import { classIcons } from "./ClassIcon";
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
import { literals } from "@blitzkit/i18n";
|
||||
import locales from "@blitzkit/i18n/locales.json";
|
||||
import { getStrings } from "../core/i18n/getStrings";
|
||||
import { api } from "../api/dynamic";
|
||||
import { Link } from "./Link";
|
||||
|
||||
interface Props {
|
||||
@@ -10,7 +10,7 @@ interface Props {
|
||||
|
||||
const { locale } = Astro.props;
|
||||
|
||||
const strings = getStrings(locale)
|
||||
const strings = await api.strings(locale);
|
||||
---
|
||||
|
||||
<style>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
import { api } from "../api/dynamic";
|
||||
import { tools } from "../constants/tools";
|
||||
import { getStrings } from "../core/i18n/getStrings";
|
||||
import { Heading } from "./Heading";
|
||||
import { Section } from "./Section";
|
||||
import ToolCard from "./ToolCard.astro";
|
||||
@@ -13,7 +13,7 @@ interface Props {
|
||||
|
||||
const { locale } = Astro.props;
|
||||
|
||||
const strings = getStrings(locale);
|
||||
const strings = await api.strings(locale);
|
||||
---
|
||||
|
||||
<Section>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
import { api } from "../api/dynamic";
|
||||
import { tools } from "../constants/tools";
|
||||
import { getStrings } from "../core/i18n/getStrings";
|
||||
import { Heading } from "./Heading";
|
||||
import { Section } from "./Section";
|
||||
import ToolCard from "./ToolCard.astro";
|
||||
@@ -13,7 +13,7 @@ interface Props {
|
||||
|
||||
const { locale } = Astro.props;
|
||||
|
||||
const strings = getStrings(locale);
|
||||
const strings = await api.strings(locale);
|
||||
---
|
||||
|
||||
<Section>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { literals } from "@blitzkit/i18n/src/literals";
|
||||
import { EyeOpenIcon } from "@radix-ui/react-icons";
|
||||
import { Box, Flex, Heading, Text } from "@radix-ui/themes";
|
||||
import { api } from "../api/dynamic";
|
||||
import { awaitablePopularTanks } from "../core/awaitables/popularTanks";
|
||||
import { api } from "../blitzkit/api";
|
||||
import {
|
||||
LocaleProvider,
|
||||
useLocale,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
import { api } from "../api/dynamic";
|
||||
import { tools } from "../constants/tools";
|
||||
import { getStrings } from "../core/i18n/getStrings";
|
||||
import { Heading } from "./Heading";
|
||||
import { Section } from "./Section";
|
||||
import ToolCard from "./ToolCard.astro";
|
||||
@@ -13,7 +13,7 @@ interface Props {
|
||||
|
||||
const { locale } = Astro.props;
|
||||
|
||||
const strings = getStrings(locale);
|
||||
const strings = await api.strings(locale);
|
||||
---
|
||||
|
||||
<Section>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
import { api } from "../api/dynamic";
|
||||
import { tools } from "../constants/tools";
|
||||
import { getStrings } from "../core/i18n/getStrings";
|
||||
import { Heading } from "./Heading";
|
||||
import { Section } from "./Section";
|
||||
import ToolCard from "./ToolCard.astro";
|
||||
@@ -12,7 +12,7 @@ interface Props {
|
||||
}
|
||||
|
||||
const { locale } = Astro.props;
|
||||
const strings = getStrings(locale);
|
||||
const strings = await api.strings(locale);
|
||||
---
|
||||
|
||||
<Section>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
import { api } from "../api/dynamic";
|
||||
import { tools } from "../constants/tools";
|
||||
import { getStrings } from "../core/i18n/getStrings";
|
||||
import { Heading } from "./Heading";
|
||||
import { Section } from "./Section";
|
||||
import ToolCard from "./ToolCard.astro";
|
||||
@@ -13,7 +13,7 @@ interface Props {
|
||||
|
||||
const { locale } = Astro.props;
|
||||
|
||||
const strings = getStrings(locale);
|
||||
const strings = await api.strings(locale);
|
||||
---
|
||||
|
||||
<Section>
|
||||
|
||||
@@ -2,7 +2,7 @@ import { useThree, type ThreeEvent } from "@react-three/fiber";
|
||||
import type { QuicklimeEvent } from "quicklime";
|
||||
import { useCallback, useEffect, useRef } from "react";
|
||||
import { Group, Vector2 } from "three";
|
||||
import { api } from "../../../blitzkit/api";
|
||||
import { api } from "../../../api/dynamic";
|
||||
import { jsxTree } from "../../../core/blitzkit/jsxTree";
|
||||
import {
|
||||
modelTransformEvent,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { alias } from "@blitzkit/core";
|
||||
import { ClockIcon, ReloadIcon } from "@radix-ui/react-icons";
|
||||
import { Flex, Text } from "@radix-ui/themes";
|
||||
import { api } from "../../blitzkit/api";
|
||||
import { api } from "../../api/dynamic";
|
||||
import { useDelta } from "../../hooks/useDelta";
|
||||
import { useLocale } from "../../hooks/useLocale";
|
||||
import { GenericTankComponentButton } from "./GenericTankComponentButton";
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { alias } from "@blitzkit/core";
|
||||
import { api } from "../../blitzkit/api";
|
||||
import { api } from "../../api/dynamic";
|
||||
import { useLocale } from "../../hooks/useLocale";
|
||||
import { GenericTankComponentButton } from "./GenericTankComponentButton";
|
||||
import type { TankComponentButtonProps } from "./TankComponentButton";
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { alias } from "@blitzkit/core";
|
||||
import { api } from "../../blitzkit/api";
|
||||
import { api } from "../../api/dynamic";
|
||||
import { useLocale } from "../../hooks/useLocale";
|
||||
import { GenericTankComponentButton } from "./GenericTankComponentButton";
|
||||
import type { TankComponentButtonProps } from "./TankComponentButton";
|
||||
|
||||
@@ -10,8 +10,8 @@ import {
|
||||
useState,
|
||||
} from "react";
|
||||
import usePromise from "react-promise-suspense";
|
||||
import { api } from "../../api/dynamic";
|
||||
import { awaitableAverageDefinitions } from "../../core/awaitables/averageDefinitions";
|
||||
import { api } from "../../blitzkit/api";
|
||||
import { filterTanks } from "../../core/blitzkit/filterTanks";
|
||||
import { useAveragesExclusionRatio } from "../../hooks/useAveragesExclusionRatio";
|
||||
import { useLocale } from "../../hooks/useLocale";
|
||||
|
||||
@@ -12,7 +12,7 @@ import {
|
||||
} from "@radix-ui/themes";
|
||||
import { useMemo, useState } from "react";
|
||||
import usePromise from "react-promise-suspense";
|
||||
import { api } from "../blitzkit/api";
|
||||
import { api } from "../api/dynamic";
|
||||
import { filterTanks } from "../core/blitzkit/filterTanks";
|
||||
import { generatePlaylist } from "../core/blitzkit/generatePlaylist";
|
||||
import { useLocale } from "../hooks/useLocale";
|
||||
|
||||
@@ -5,7 +5,7 @@ import {
|
||||
} from "@radix-ui/react-icons";
|
||||
import { Checkbox, Flex, IconButton, Table, Text } from "@radix-ui/themes";
|
||||
import { memo } from "react";
|
||||
import { api } from "../blitzkit/api";
|
||||
import { api } from "../api/dynamic";
|
||||
import { useLocale } from "../hooks/useLocale";
|
||||
import { Playlist, type PlaylistEntry } from "../stores/playlist";
|
||||
import { TankRowHeaderCell } from "./TankRowHeaderCell";
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { Flex } from "@radix-ui/themes";
|
||||
import { api } from "../blitzkit/api";
|
||||
import { api } from "../api/dynamic";
|
||||
import { ProvisionButton } from "./ModuleButtons/ProvisionButton";
|
||||
|
||||
interface ProvisionsManagerProps {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { isEqual } from "lodash-es";
|
||||
import { useMemo } from "react";
|
||||
import { api } from "../../blitzkit/api";
|
||||
import { api } from "../../api/dynamic";
|
||||
import { useLocale } from "../../hooks/useLocale";
|
||||
import { TankFilters } from "../../stores/tankFilters";
|
||||
import { TankopediaPersistent } from "../../stores/tankopediaPersistent";
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { alias, TankType, type TankDefinition } from "@blitzkit/core";
|
||||
import { uniq } from "lodash-es";
|
||||
import { type ReactNode } from "react";
|
||||
import { api } from "../../blitzkit/api";
|
||||
import { api } from "../../api/dynamic";
|
||||
import { useLocale } from "../../hooks/useLocale";
|
||||
import { TankopediaPersistent } from "../../stores/tankopediaPersistent";
|
||||
import type { MaybeSkeletonComponentProps } from "../../types/maybeSkeletonComponentProps";
|
||||
|
||||
@@ -5,7 +5,7 @@ import {
|
||||
type TankDefinition,
|
||||
} from "@blitzkit/core";
|
||||
import { useMemo } from "react";
|
||||
import { api } from "../../../blitzkit/api";
|
||||
import { api } from "../../../api/dynamic";
|
||||
import { resolveReload } from "../../../core/blitzkit/resolveReload";
|
||||
import { TankSort } from "../../../stores/tankopediaSort";
|
||||
import { TankCard } from "../../TankCard";
|
||||
|
||||
@@ -11,8 +11,8 @@ import fuzzysort from "fuzzysort";
|
||||
import { uniq } from "lodash-es";
|
||||
import { memo, useMemo } from "react";
|
||||
import usePromise from "react-promise-suspense";
|
||||
import { api } from "../../api/dynamic";
|
||||
import { awaitableTankNames } from "../../core/awaitables/tankNames";
|
||||
import { api } from "../../blitzkit/api";
|
||||
import { filterTanks } from "../../core/blitzkit/filterTanks";
|
||||
import { resolveReload } from "../../core/blitzkit/resolveReload";
|
||||
import { useLocale } from "../../hooks/useLocale";
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
import {
|
||||
alias,
|
||||
GunDefinition,
|
||||
ShellType,
|
||||
TANK_CLASSES,
|
||||
TANK_TYPES,
|
||||
TankType,
|
||||
TIER_ROMAN_NUMERALS,
|
||||
alias,
|
||||
GunDefinition,
|
||||
ShellType,
|
||||
TANK_CLASSES,
|
||||
TANK_TYPES,
|
||||
TankType,
|
||||
TIER_ROMAN_NUMERALS,
|
||||
} from "@blitzkit/core";
|
||||
import { literals } from "@blitzkit/i18n";
|
||||
import locales from "@blitzkit/i18n/locales.json";
|
||||
import {
|
||||
LockClosedIcon,
|
||||
LockOpen2Icon,
|
||||
ResetIcon,
|
||||
TrashIcon,
|
||||
LockClosedIcon,
|
||||
LockOpen2Icon,
|
||||
ResetIcon,
|
||||
TrashIcon,
|
||||
} from "@radix-ui/react-icons";
|
||||
import { times } from "lodash-es";
|
||||
import { Fragment, type ComponentProps, type ReactNode } from "react";
|
||||
import { api } from "../../blitzkit/api";
|
||||
import { api } from "../../api/dynamic";
|
||||
import { useLocale } from "../../hooks/useLocale";
|
||||
import { App } from "../../stores/app";
|
||||
import { TankFilters, type CaseType } from "../../stores/tankFilters";
|
||||
|
||||
@@ -3,7 +3,7 @@ import { MinusCircledIcon } from "@radix-ui/react-icons";
|
||||
import { Callout, Flex } from "@radix-ui/themes";
|
||||
import { uniq } from "lodash-es";
|
||||
import { useEffect } from "react";
|
||||
import { api } from "../../blitzkit/api";
|
||||
import { api } from "../../api/dynamic";
|
||||
import { Duel } from "../../stores/duel";
|
||||
import { TankopediaPersistent } from "../../stores/tankopediaPersistent";
|
||||
import { AesonPlug } from "../AesonPlug";
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@ import { literals } from "@blitzkit/i18n";
|
||||
import { AccessibilityIcon, InfoCircledIcon } from "@radix-ui/react-icons";
|
||||
import { Flex, Heading, IconButton, Popover, Text } from "@radix-ui/themes";
|
||||
import { Fragment } from "react/jsx-runtime";
|
||||
import { api } from "../../../../../../blitzkit/api";
|
||||
import { api } from "../../../../../../api/dynamic";
|
||||
import { useEquipment } from "../../../../../../hooks/useEquipment";
|
||||
import { useLocale } from "../../../../../../hooks/useLocale";
|
||||
import { Duel } from "../../../../../../stores/duel";
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
import type { QuicklimeEvent } from "quicklime";
|
||||
import { useEffect, useRef } from "react";
|
||||
import type { Group } from "three";
|
||||
import { api } from "../../../../../../../../blitzkit/api";
|
||||
import { api } from "../../../../../../../../api/dynamic";
|
||||
import {
|
||||
modelTransformEvent,
|
||||
type ModelTransformEventData,
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
import { mauveDark } from "@radix-ui/colors";
|
||||
import { LineBasicMaterial, MeshBasicMaterial } from "three";
|
||||
import { api } from "../../../../../../../../blitzkit/api";
|
||||
import { api } from "../../../../../../../../api/dynamic";
|
||||
import { jsxTree } from "../../../../../../../../core/blitzkit/jsxTree";
|
||||
import { useModel } from "../../../../../../../../hooks/useModel";
|
||||
import { Duel } from "../../../../../../../../stores/duel";
|
||||
|
||||
+1
-1
@@ -3,11 +3,11 @@ import { Box, Card, Flex } from "@radix-ui/themes";
|
||||
import { clamp } from "lodash-es";
|
||||
import { useRef, useState } from "react";
|
||||
import { degToRad, radToDeg } from "three/src/math/MathUtils.js";
|
||||
import { api } from "../../../../../../../api/dynamic";
|
||||
import {
|
||||
DEFAULT_PITCH_TRANSITION,
|
||||
applyPitchYawLimits,
|
||||
} from "../../../../../../../core/blitz/applyPitchYawLimits";
|
||||
import { api } from "../../../../../../../blitzkit/api";
|
||||
import { hasEquipment } from "../../../../../../../core/blitzkit/hasEquipment";
|
||||
import { modelTransformEvent } from "../../../../../../../core/blitzkit/modelTransform";
|
||||
import { Var } from "../../../../../../../core/radix/var";
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@ import { createDefaultSkills } from "@blitzkit/core";
|
||||
import { Flex, Progress, Text } from "@radix-ui/themes";
|
||||
import { clamp } from "lodash-es";
|
||||
import { memo, useMemo, type ComponentProps, type ReactNode } from "react";
|
||||
import { api } from "../../../../../../blitzkit/api";
|
||||
import { api } from "../../../../../../api/dynamic";
|
||||
import {
|
||||
tankCharacteristics,
|
||||
type TankCharacteristics,
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
import { Flex } from "@radix-ui/themes";
|
||||
import { useEffect } from "react";
|
||||
import { api } from "../../../../../api/dynamic";
|
||||
import { applyPitchYawLimits } from "../../../../../core/blitz/applyPitchYawLimits";
|
||||
import { api } from "../../../../../blitzkit/api";
|
||||
import { modelTransformEvent } from "../../../../../core/blitzkit/modelTransform";
|
||||
import { tankCharacteristics } from "../../../../../core/blitzkit/tankCharacteristics";
|
||||
import { useEquipment } from "../../../../../hooks/useEquipment";
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@ import {
|
||||
Popover,
|
||||
Text,
|
||||
} from "@radix-ui/themes";
|
||||
import { api } from "../../../../blitzkit/api";
|
||||
import { api } from "../../../../api/dynamic";
|
||||
import { useEquipment } from "../../../../hooks/useEquipment";
|
||||
import { useLocale } from "../../../../hooks/useLocale";
|
||||
import { Duel } from "../../../../stores/duel";
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
import { Button, Flex, Heading } from "@radix-ui/themes";
|
||||
import { api } from "../../../../blitzkit/api";
|
||||
import { api } from "../../../../api/dynamic";
|
||||
import { useLocale } from "../../../../hooks/useLocale";
|
||||
import { Duel } from "../../../../stores/duel";
|
||||
import { EquipmentManager } from "../../../EquipmentManager";
|
||||
|
||||
+1
-1
@@ -20,7 +20,7 @@ import {
|
||||
Text,
|
||||
Tooltip,
|
||||
} from "@radix-ui/themes";
|
||||
import { api } from "../../../../blitzkit/api";
|
||||
import { api } from "../../../../api/dynamic";
|
||||
import { useLocale } from "../../../../hooks/useLocale";
|
||||
import { Duel } from "../../../../stores/duel";
|
||||
import { LinkI18n } from "../../../LinkI18n";
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
import { availableProvisions } from "@blitzkit/core";
|
||||
import { Button, Flex, Heading } from "@radix-ui/themes";
|
||||
import { api } from "../../../../blitzkit/api";
|
||||
import { api } from "../../../../api/dynamic";
|
||||
import { useLocale } from "../../../../hooks/useLocale";
|
||||
import { Duel } from "../../../../stores/duel";
|
||||
import { ProvisionsManager } from "../../../ProvisionsManager";
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { alias } from "@blitzkit/core";
|
||||
import { Box, Flex, Heading, Text } from "@radix-ui/themes";
|
||||
import { api } from "../../blitzkit/api";
|
||||
import { api } from "../../api/dynamic";
|
||||
import { useLocale } from "../../hooks/useLocale";
|
||||
import { Duel } from "../../stores/duel";
|
||||
|
||||
|
||||
+1
-1
@@ -5,8 +5,8 @@ import type { QuicklimeEvent } from "quicklime";
|
||||
import { useEffect, useRef } from "react";
|
||||
import { PerspectiveCamera, Vector3 } from "three";
|
||||
import { OrbitControls as OrbitControlsClass } from "three-stdlib";
|
||||
import { api } from "../../../../../../api/dynamic";
|
||||
import { applyPitchYawLimits } from "../../../../../../core/blitz/applyPitchYawLimits";
|
||||
import { api } from "../../../../../../blitzkit/api";
|
||||
import { hasEquipment } from "../../../../../../core/blitzkit/hasEquipment";
|
||||
import { Pose, poseEvent } from "../../../../../../core/blitzkit/pose";
|
||||
import { controlsEnabledEvent } from "../../../../../../core/controlsEnabled";
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
import { useEffect } from "react";
|
||||
import { degToRad } from "three/src/math/MathUtils.js";
|
||||
import { api } from "../../../../../../api/dynamic";
|
||||
import { applyPitchYawLimits } from "../../../../../../core/blitz/applyPitchYawLimits";
|
||||
import { api } from "../../../../../../blitzkit/api";
|
||||
import { modelTransformEvent } from "../../../../../../core/blitzkit/modelTransform";
|
||||
import { Duel } from "../../../../../../stores/duel";
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { Box, Flex } from "@radix-ui/themes";
|
||||
import { times } from "lodash-es";
|
||||
import { useEffect, useMemo, useRef } from "react";
|
||||
import { api } from "../../../blitzkit/api";
|
||||
import { api } from "../../../api/dynamic";
|
||||
import { defaultEqualizer } from "../../../core/blitzkit/tankToDuelMember";
|
||||
import { useFullScreen } from "../../../hooks/useFullScreen";
|
||||
import { Duel } from "../../../stores/duel";
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { alias, formatCompact, TIER_ROMAN_NUMERALS } from "@blitzkit/core";
|
||||
import { literals } from "@blitzkit/i18n/src/literals";
|
||||
import { Box, Flex, Skeleton, Text } from "@radix-ui/themes";
|
||||
import { api } from "../../../../api/dynamic";
|
||||
import { awaitableAverageDefinitions } from "../../../../core/awaitables/averageDefinitions";
|
||||
import { api } from "../../../../blitzkit/api";
|
||||
import { useLocale } from "../../../../hooks/useLocale";
|
||||
import { Tankopedia } from "../../../../stores/tankopedia";
|
||||
import type { MaybeSkeletonComponentProps } from "../../../../types/maybeSkeletonComponentProps";
|
||||
|
||||
@@ -3,7 +3,7 @@ import { literals } from "@blitzkit/i18n/src/literals";
|
||||
import { CaretLeftIcon, CaretRightIcon, PlusIcon } from "@radix-ui/react-icons";
|
||||
import { Flex, Heading, IconButton, ScrollArea, Text } from "@radix-ui/themes";
|
||||
import { Fragment, useEffect, useMemo, useRef, useState } from "react";
|
||||
import { api } from "../../../blitzkit/api";
|
||||
import { api } from "../../../api/dynamic";
|
||||
import { useLocale } from "../../../hooks/useLocale";
|
||||
import { Duel } from "../../../stores/duel";
|
||||
import { Tankopedia } from "../../../stores/tankopedia";
|
||||
|
||||
@@ -1,8 +1,18 @@
|
||||
import type { Consumable } from "@blitzkit/core";
|
||||
import { TrashIcon } from "@radix-ui/react-icons";
|
||||
import { useCompatibility } from "../../hooks/useCompatibility";
|
||||
import { useConsumables } from "../../hooks/useConsumables";
|
||||
import { useProtagonist } from "../../hooks/useProtagonist";
|
||||
import { useProtagonistGun } from "../../hooks/useProtagonistGun";
|
||||
import { useStrings } from "../../hooks/useStrings";
|
||||
import { Tankopedia } from "../../stores/tankopedia";
|
||||
import { hasUpgrades } from "../../tankopedia/hasUpgrades";
|
||||
import { vehicleStatusKeys } from "../../tankopedia/tankState";
|
||||
import type { ComputedCharacteristics } from "../../types/characteristics";
|
||||
import { Heading } from "../Heading";
|
||||
import { IconButton } from "../IconButton";
|
||||
import { Tooltip } from "../Tooltip";
|
||||
import styles from "./index.module.css";
|
||||
|
||||
interface TankopediaLoadoutProps {
|
||||
characteristics: ComputedCharacteristics;
|
||||
@@ -111,7 +121,8 @@ function Consumables({ characteristics }: ConsumablesProps) {
|
||||
const strings = useStrings();
|
||||
const consumables = useConsumables();
|
||||
const tank = useProtagonist();
|
||||
const isCompatible = useCompatibility(tank, characteristics);
|
||||
const gun = useProtagonistGun();
|
||||
const isCompatible = useCompatibility(tank, gun);
|
||||
|
||||
return (
|
||||
<div className={styles.section}>
|
||||
@@ -131,56 +142,35 @@ function Consumables({ characteristics }: ConsumablesProps) {
|
||||
</div>
|
||||
|
||||
<div className={styles.consumables}>
|
||||
{Object.entries(consumables.consumables).map(
|
||||
([id, { compatibility, consumable, purchase }]) => {
|
||||
if (!isCompatible(compatibility!)) return null;
|
||||
{Object.entries(consumables.consumables).map(([id, consumable]) => {
|
||||
if (!isCompatible(consumable.include, consumable.exclude)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
<Consumable
|
||||
key={id}
|
||||
id={id}
|
||||
consumable={consumable!}
|
||||
purchase={purchase!}
|
||||
/>
|
||||
);
|
||||
},
|
||||
)}
|
||||
return (
|
||||
<Consumable key={id} id={Number(id)} consumable={consumable} />
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
interface ConsumableProps {
|
||||
id: string;
|
||||
consumable: ConsumableComponent;
|
||||
purchase: BlitzStaticPurchaseComponent;
|
||||
id: number;
|
||||
consumable: Consumable;
|
||||
}
|
||||
|
||||
function Consumable({ id, consumable, purchase }: ConsumableProps) {
|
||||
const gameStrings = useGameStrings("ConsumableEntity");
|
||||
function Consumable({ id, consumable }: ConsumableProps) {
|
||||
const isSelected = Tankopedia.use((state) =>
|
||||
state.protagonist.consumables.includes(id),
|
||||
);
|
||||
const tank = useProtagonist();
|
||||
const tierPrices = useTierPrices();
|
||||
|
||||
const price = useMemo(() => {
|
||||
const { prices } = tierPrices.prices[purchase.price_per_tier_catalog_id];
|
||||
|
||||
for (const { tier_catalog_id, unlock_price } of prices) {
|
||||
if (tier_catalog_id === tank.tank!.tier_catalog_id) {
|
||||
return unlock_price;
|
||||
}
|
||||
}
|
||||
|
||||
throw new Error(
|
||||
`No price found for tier catalog id ${tank.tank!.tier_catalog_id}`,
|
||||
);
|
||||
}, [tank.id, purchase.price_per_tier_catalog_id]);
|
||||
const unwrap = useUnwrap();
|
||||
|
||||
return (
|
||||
<div className={styles["consumable-wrapper"]}>
|
||||
<Tooltip tooltip={gameStrings[consumable!.name_key]}>
|
||||
<Tooltip tooltip={unwrap(consumable.name)}>
|
||||
<Button
|
||||
radius="1"
|
||||
variant={isSelected ? "surface" : "soft"}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { Flex, Table } from "@radix-ui/themes";
|
||||
import { useEffect, useRef } from "react";
|
||||
import { api } from "../../../blitzkit/api";
|
||||
import { api } from "../../../api/dynamic";
|
||||
import { TierList } from "../../../stores/tierList";
|
||||
import { tierListRowElements } from "../Table/constants";
|
||||
import { TierListTile } from "../Tile";
|
||||
|
||||
@@ -2,7 +2,7 @@ import { metaSortTank } from "@blitzkit/core";
|
||||
import { times } from "lodash-es";
|
||||
import { useMemo, useState } from "react";
|
||||
import usePromise from "react-promise-suspense";
|
||||
import { api } from "../../blitzkit/api";
|
||||
import { api } from "../../api/dynamic";
|
||||
import { filterTanks } from "../../core/blitzkit/filterTanks";
|
||||
import { TankFilters } from "../../stores/tankFilters";
|
||||
import { TierList } from "../../stores/tierList";
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { useEffect } from "react";
|
||||
import { api } from "../../blitzkit/api";
|
||||
import { api } from "../../api/dynamic";
|
||||
import { generateTierListParams } from "../../core/blitzkit/generateTierListParams";
|
||||
import { TierList } from "../../stores/tierList";
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
import { api } from "../api/dynamic";
|
||||
import type { Tool } from "../constants/tools";
|
||||
import { getStrings } from "../core/i18n/getStrings";
|
||||
import { Heading } from "./Heading";
|
||||
import { LinkI18n } from "./LinkI18n";
|
||||
|
||||
@@ -11,7 +11,7 @@ interface Props {
|
||||
}
|
||||
|
||||
const { locale, tool, minor } = Astro.props;
|
||||
const strings = getStrings(locale);
|
||||
const strings = await api.strings(locale);
|
||||
const toolStrings =
|
||||
strings.website.tools[
|
||||
(tool.strings ?? tool.id) as keyof typeof strings.website.tools
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { fetchTankNames } from "@blitzkit/core";
|
||||
import { api } from "../../blitzkit/api";
|
||||
import { api } from "../../api/dynamic";
|
||||
|
||||
export const awaitableTankNames = fetchTankNames(api);
|
||||
@@ -1,4 +1,4 @@
|
||||
import { api } from "../../blitzkit/api";
|
||||
import { api } from "../../api/dynamic";
|
||||
|
||||
const tankDefinitions = await api.tanks();
|
||||
const modelDefinitions = await api.models();
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import type { TankDefinition } from "@blitzkit/core";
|
||||
import { checkConsumableProvisionInclusivity } from "@blitzkit/core/src/blitzkit/checkConsumableProvisionInclusivity";
|
||||
import { times } from "lodash-es";
|
||||
import { api } from "../../api/dynamic";
|
||||
import type { TankFilters } from "../../stores/tankFilters";
|
||||
import { api } from "../../blitzkit/api";
|
||||
|
||||
const SHELLS = times(3, (index) => index);
|
||||
|
||||
|
||||
@@ -4,10 +4,10 @@ import {
|
||||
idToRegion,
|
||||
type IndividualTankStats,
|
||||
} from "@blitzkit/core";
|
||||
import { api } from "../../api/dynamic";
|
||||
import { App } from "../../stores/app";
|
||||
import { Playlist } from "../../stores/playlist";
|
||||
import { TankFilters } from "../../stores/tankFilters";
|
||||
import { api } from "../../blitzkit/api";
|
||||
import { filterTanks } from "./filterTanks";
|
||||
|
||||
const tankDefinitions = await api.tanks();
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { api } from "../../api/dynamic";
|
||||
import type { EquipmentMatrix } from "../../stores/duel";
|
||||
import { api } from "../../blitzkit/api";
|
||||
|
||||
const equipmentDefinitions = await api.equipment();
|
||||
|
||||
|
||||
+19
-10
@@ -1,17 +1,26 @@
|
||||
import {
|
||||
Consumable,
|
||||
ConsumableTankCategoryFilterCategory,
|
||||
GunDefinition,
|
||||
Provision,
|
||||
TankDefinition,
|
||||
} from "@blitzkit/protos";
|
||||
type GunDefinition,
|
||||
type TankDefinition,
|
||||
type TankInclusivityFilter,
|
||||
} from "@blitzkit/core";
|
||||
|
||||
export function checkConsumableProvisionInclusivity(
|
||||
consumableProvision: Consumable | Provision,
|
||||
export function useCompatibility(tank: TankDefinition, gun: GunDefinition) {
|
||||
return function (
|
||||
include?: TankInclusivityFilter[],
|
||||
exclude?: TankInclusivityFilter[],
|
||||
) {
|
||||
return tankCompatibility(tank, gun, include, exclude);
|
||||
};
|
||||
}
|
||||
|
||||
function tankCompatibility(
|
||||
tank: TankDefinition,
|
||||
gun: GunDefinition,
|
||||
include?: TankInclusivityFilter[],
|
||||
exclude?: TankInclusivityFilter[],
|
||||
) {
|
||||
const included = consumableProvision.include?.every((rule) => {
|
||||
const included = include?.every((rule) => {
|
||||
switch (rule.filter_type!.$case) {
|
||||
case "tiers":
|
||||
return (
|
||||
@@ -29,7 +38,7 @@ export function checkConsumableProvisionInclusivity(
|
||||
throw new SyntaxError("Category filtering found in include rule");
|
||||
}
|
||||
});
|
||||
const excluded = consumableProvision.exclude?.some((rule) => {
|
||||
const excluded = exclude?.some((rule) => {
|
||||
switch (rule.filter_type!.$case) {
|
||||
case "tiers":
|
||||
return (
|
||||
@@ -53,5 +62,5 @@ export function checkConsumableProvisionInclusivity(
|
||||
}
|
||||
});
|
||||
|
||||
return consumableProvision.include?.length > 0 && included && !excluded;
|
||||
return include !== undefined && include?.length > 0 && included && !excluded;
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
import { api } from "../api/dynamic";
|
||||
import { useAwait } from "./useAwait";
|
||||
|
||||
export function useConsumables() {
|
||||
const consumables = useAwait(() => api.consumables(), "consumables");
|
||||
return consumables;
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
import { TankDefinition } from "@blitzkit/core";
|
||||
import { sumBy } from "lodash-es";
|
||||
import { useMemo } from "react";
|
||||
import { api } from "../blitzkit/api";
|
||||
import { api } from "../api/dynamic";
|
||||
import { Duel } from "../stores/duel";
|
||||
|
||||
export enum UseEccentricityMode {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { useMemo } from "react";
|
||||
import { api } from "../blitzkit/api";
|
||||
import { api } from "../api/dynamic";
|
||||
import { Duel } from "../stores/duel";
|
||||
|
||||
const equipmentDefinitions = await api.equipment();
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { api } from "../blitzkit/api";
|
||||
import { api } from "../api/dynamic";
|
||||
|
||||
const equipmentDefinitions = await api.equipment();
|
||||
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
import { api } from "../blitzkit/api";
|
||||
import { api } from "../api/dynamic";
|
||||
import { Tankopedia } from "../stores/tankopedia";
|
||||
import { useAwait } from "./useAwait";
|
||||
|
||||
export function useProtagonist() {
|
||||
const id = Tankopedia.use((state) => state.protagonist.tank);
|
||||
const tank = useAwait(() => api.tank(id), `tank-${id}`);
|
||||
|
||||
return tank;
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
import { Tankopedia } from "../stores/tankopedia";
|
||||
import { useProtagonistTurret } from "./useProtagonistTurret";
|
||||
|
||||
export function useProtagonistGun() {
|
||||
const id = Tankopedia.use((state) => state.protagonist.gun);
|
||||
const turret = useProtagonistTurret();
|
||||
return turret.guns[id];
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
import { Tankopedia } from "../stores/tankopedia";
|
||||
import { useProtagonist } from "./useProtagonist";
|
||||
|
||||
export function useProtagonistTurret() {
|
||||
const id = Tankopedia.use((state) => state.protagonist.gun);
|
||||
const tank = useProtagonist();
|
||||
return tank.turrets[id];
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
import { api } from "../blitzkit/api";
|
||||
import { api } from "../api/dynamic";
|
||||
import { useAwait } from "./useAwait";
|
||||
import { useLocale } from "./useLocale";
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { CamouflageDefinitions } from "@blitzkit/core";
|
||||
import { api } from "../../../blitzkit/api";
|
||||
import { api } from "../../../api/dynamic";
|
||||
|
||||
export { getStaticPaths } from "../_index";
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { ConsumableDefinitions } from "@blitzkit/core";
|
||||
import { api } from "../../../blitzkit/api";
|
||||
import { api } from "../../../api/dynamic";
|
||||
|
||||
export { getStaticPaths } from "../_index";
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { EquipmentDefinitions } from "@blitzkit/core";
|
||||
import { api } from "../../../blitzkit/api";
|
||||
import { api } from "../../../api/dynamic";
|
||||
|
||||
export { getStaticPaths } from "../_index";
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { Gallery } from "@blitzkit/core";
|
||||
import { api } from "../../../blitzkit/api";
|
||||
import { api } from "../../../api/dynamic";
|
||||
|
||||
export { getStaticPaths } from "../_index";
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { GameDefinitions } from "@blitzkit/core";
|
||||
import { api } from "../../../blitzkit/api";
|
||||
import { api } from "../../../api/dynamic";
|
||||
|
||||
export { getStaticPaths } from "../_index";
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { MapDefinitions } from "@blitzkit/core";
|
||||
import { api } from "../../../blitzkit/api";
|
||||
import { api } from "../../../api/dynamic";
|
||||
|
||||
export { getStaticPaths } from "../_index";
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { ModelDefinitions } from "@blitzkit/core";
|
||||
import { api } from "../../../blitzkit/api";
|
||||
import { api } from "../../../api/dynamic";
|
||||
|
||||
export { getStaticPaths } from "../_index";
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { ProvisionDefinitions } from "@blitzkit/core";
|
||||
import { api } from "../../../blitzkit/api";
|
||||
import { api } from "../../../api/dynamic";
|
||||
|
||||
export { getStaticPaths } from "../_index";
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { api } from "../../../blitzkit/api";
|
||||
import { api } from "../../../api/dynamic";
|
||||
|
||||
export { getStaticPaths } from "../_index";
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { SkillDefinitions } from "@blitzkit/core";
|
||||
import { api } from "../../../blitzkit/api";
|
||||
import { api } from "../../../api/dynamic";
|
||||
|
||||
export { getStaticPaths } from "../_index";
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { TankDefinitions } from "@blitzkit/core";
|
||||
import { api } from "../../../blitzkit/api";
|
||||
import { api } from "../../../api/dynamic";
|
||||
|
||||
export { getStaticPaths } from "../_index";
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import locales from "@blitzkit/i18n/locales.json";
|
||||
import type { APIContext } from "astro";
|
||||
import { api } from "../../../api/dynamic";
|
||||
import { mixStaticPaths } from "../../../astro/mixStaticPaths";
|
||||
import { api } from "../../../blitzkit/api";
|
||||
import { getStaticPaths as _getStaticPaths } from "../_index";
|
||||
|
||||
export const getStaticPaths = mixStaticPaths(_getStaticPaths, () => {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { api } from "../../../../blitzkit/api";
|
||||
import { api } from "../../../../api/dynamic";
|
||||
import { mixStaticPaths } from "../../../../astro/mixStaticPaths";
|
||||
import { getStaticPaths as _getStaticPaths } from "../../_index";
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { createDefaultSkills } from "@blitzkit/core";
|
||||
import { useEffect, useMemo, useState } from "react";
|
||||
import { api } from "../../../../blitzkit/api";
|
||||
import { api } from "../../../../api/dynamic";
|
||||
import { CompareTable } from "../../../../components/Compare/CompareTable";
|
||||
import { Controls } from "../../../../components/Compare/Controls";
|
||||
import { DamageWarning } from "../../../../components/DamageWarning";
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import { Box, Flex, Heading } from "@radix-ui/themes";
|
||||
import { Suspense, useEffect } from "react";
|
||||
import { api } from "../../../../api/dynamic";
|
||||
import { GuessBackground } from "../../../../components/GuessBackground";
|
||||
import { Guesser } from "../../../../components/Guesser";
|
||||
import { GuessRenderer } from "../../../../components/GuessRenderer";
|
||||
import { GuessRendererLoader } from "../../../../components/GuessRendererLoader";
|
||||
import { PageWrapper } from "../../../../components/PageWrapper";
|
||||
import { api } from "../../../../blitzkit/api";
|
||||
import {
|
||||
type LocaleAcceptorProps,
|
||||
LocaleProvider,
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
import { AstroSeo } from "@astrolib/seo";
|
||||
import { assertSecret } from "@blitzkit/core";
|
||||
import locales from "@blitzkit/i18n/locales.json";
|
||||
import { api } from "../../../api/dynamic";
|
||||
import { mixStaticPaths } from "../../../astro/mixStaticPaths";
|
||||
import { AesonPlug } from "../../../components/AesonPlug";
|
||||
import HelpTranslate from "../../../components/HelpTranslate.astro";
|
||||
@@ -11,7 +12,6 @@ import HomePlayers from "../../../components/HomePlayers.astro";
|
||||
import HomeTanks from "../../../components/HomeTanks.astro";
|
||||
import HomeTechnical from "../../../components/HomeTechnical.astro";
|
||||
import { tools, type Tool } from "../../../constants/tools";
|
||||
import { getStrings } from "../../../core/i18n/getStrings";
|
||||
import BaseLayout from "../../../layouts/BaseLayout.astro";
|
||||
import { getStaticPaths as _getStaticPaths } from "../_index";
|
||||
|
||||
@@ -19,7 +19,7 @@ const MAX_TOOLS_PER_ROW = 2;
|
||||
|
||||
const environment = assertSecret(import.meta.env.PUBLIC_ENVIRONMENT);
|
||||
const { locale } = Astro.props;
|
||||
const strings = getStrings(locale);
|
||||
const strings = await api.strings(locale);
|
||||
const rows: Tool[][] = [];
|
||||
|
||||
for (const id in tools) {
|
||||
|
||||
@@ -19,12 +19,12 @@ import {
|
||||
type ButtonProps,
|
||||
} from "@radix-ui/themes";
|
||||
import { useRef, useState } from "react";
|
||||
import { api } from "../../../../api/dynamic";
|
||||
import { MixerScene } from "../../../../components/MixerScene";
|
||||
import { ModuleButton } from "../../../../components/ModuleButtons/ModuleButton";
|
||||
import { PageWrapper } from "../../../../components/PageWrapper";
|
||||
import { ScreenshotButton } from "../../../../components/ScreenshotButton";
|
||||
import { TankSearch } from "../../../../components/TankSearch";
|
||||
import { api } from "../../../../blitzkit/api";
|
||||
import { curateMixer } from "../../../../core/blitzkit/curateMixer";
|
||||
import {
|
||||
LocaleProvider,
|
||||
|
||||
@@ -33,12 +33,12 @@ import {
|
||||
} from "@radix-ui/themes";
|
||||
import { debounce } from "lodash-es";
|
||||
import { useEffect, useMemo, useRef, useState } from "react";
|
||||
import { api } from "../../../../api/dynamic";
|
||||
import { PageWrapper } from "../../../../components/PageWrapper";
|
||||
import { StickyRowHeaderCell } from "../../../../components/StickyRowHeaderCell";
|
||||
import { StickyTableRoot } from "../../../../components/StickyTableRoot";
|
||||
import { TankRowHeaderCell } from "../../../../components/TankRowHeaderCell";
|
||||
import { awaitableAverageDefinitions } from "../../../../core/awaitables/averageDefinitions";
|
||||
import { api } from "../../../../blitzkit/api";
|
||||
import {
|
||||
type LocaleAcceptorProps,
|
||||
LocaleProvider,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { useMemo } from "react";
|
||||
import { api } from "../../../../../blitzkit/api";
|
||||
import { computeCharacteristics } from "../../../../../blitzkit/computeCharacteristics";
|
||||
import { api } from "../../../../../api/dynamic";
|
||||
import { computeCharacteristics } from "../../../../../tankopedia/computeCharacteristics";
|
||||
import { withErrorWrapper } from "../../../../../hocs/withErrorWrapper";
|
||||
import { withLocale } from "../../../../../hocs/withLocale";
|
||||
import { useAwait } from "../../../../../hooks/useAwait";
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
import "@radix-ui/colors/violet-dark.css";
|
||||
import { api } from "../../../../../api/dynamic";
|
||||
import { mixStaticPaths } from "../../../../../astro/mixStaticPaths";
|
||||
import { api } from "../../../../../blitzkit/api";
|
||||
import ColorScale from "../../../../../components/ColorScale.astro";
|
||||
import BaseLayout from "../../../../../layouts/BaseLayout.astro";
|
||||
import { getStaticPaths as _getStaticPaths } from "../index.astro";
|
||||
|
||||
@@ -2,18 +2,15 @@ import {
|
||||
createDefaultSkills,
|
||||
ShellDefinition,
|
||||
TankDefinition,
|
||||
type ModelDefinition,
|
||||
} from "@blitzkit/core";
|
||||
import type { Vector3 } from "three";
|
||||
import { Varuna } from "varuna";
|
||||
import { api } from "../blitzkit/api";
|
||||
import { api } from "../api/dynamic";
|
||||
import type { ArmorType } from "../components/Armor/components/SpacedArmorScene";
|
||||
import type { ExternalModuleVariant } from "../components/Armor/components/SpacedArmorSceneComponent";
|
||||
import type { XP_MULTIPLIERS } from "../components/Tankopedia/TechTreeSection";
|
||||
import {
|
||||
createTankState,
|
||||
type EquipmentMatrix,
|
||||
} from "../tankopedia/createTankState";
|
||||
import { createTankState } from "../tankopedia/createTankState";
|
||||
import type { TankState } from "../tankopedia/tankState";
|
||||
import { TankopediaDisplay } from "./tankopediaPersistent/constants";
|
||||
|
||||
export interface ShotLayerBase {
|
||||
@@ -81,28 +78,6 @@ export enum TankopediaRelativeAgainst {
|
||||
All,
|
||||
}
|
||||
|
||||
export interface TankState {
|
||||
tank: number;
|
||||
|
||||
engine: number;
|
||||
turret: number;
|
||||
gun: number;
|
||||
shell: number;
|
||||
track: number;
|
||||
|
||||
assault_distance: number;
|
||||
speed: number;
|
||||
|
||||
model: ModelDefinition;
|
||||
|
||||
equipment_matrix: EquipmentMatrix;
|
||||
|
||||
consumables: number[];
|
||||
provisions: number[];
|
||||
camouflage: boolean;
|
||||
cooldown_booster: number;
|
||||
}
|
||||
|
||||
interface Tankopedia {
|
||||
disturbed: boolean;
|
||||
revealed: boolean;
|
||||
|
||||
Loaded 100 of 104 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user