useProtagonist

This commit is contained in:
tresabhi committed 2026-09-22 16:20:39 -05:00
1 parent 7592381b12
commit 99965118b3
4 files changed
+35 -20

No files matched your search

@@ -1,3 +1,4 @@
import { useProtagonist } from "../../hooks/useProtagonist";
import type { ComputedCharacteristics } from "../../types/characteristics";
interface TankopediaLoadoutProps {
@@ -0,0 +1,10 @@
import { api } from "../blitzkit/api";
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;
}
+12 -13
View File
@@ -1,11 +1,7 @@
import {
createDefaultSkills,
EngineDefinition,
GunDefinition,
ShellDefinition,
TankDefinition,
TrackDefinition,
TurretDefinition,
type ModelDefinition,
} from "@blitzkit/core";
import type { Vector3 } from "three";
@@ -14,8 +10,10 @@ import { api } from "../blitzkit/api";
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 } from "../tankopedia/createTankState";
import type { EquipmentMatrix } from "./duel";
import {
createTankState,
type EquipmentMatrix,
} from "../tankopedia/createTankState";
import { TankopediaDisplay } from "./tankopediaPersistent/constants";
export interface ShotLayerBase {
@@ -84,14 +82,15 @@ export enum TankopediaRelativeAgainst {
}
export interface TankState {
tank: TankDefinition;
model: ModelDefinition;
tank: number;
engine: EngineDefinition;
turret: TurretDefinition;
gun: GunDefinition;
shell: ShellDefinition;
track: TrackDefinition;
engine: number;
turret: number;
gun: number;
shell: number;
track: number;
model: ModelDefinition;
equipment_matrix: EquipmentMatrix;
@@ -1,8 +1,13 @@
import { createDefaultProvisions, type TankDefinition } from "@blitzkit/core";
import { api } from "../blitzkit/api";
import type { EquipmentMatrix } from "../stores/duel";
import type { TankState } from "../stores/tankopedia";
export type EquipmentMatrix = [
[number, number, number],
[number, number, number],
[number, number, number],
];
const models = await api.models();
const provisions = await api.provisions();
const scripts = await api.scripts();
@@ -18,14 +23,14 @@ export function createTankState(tank: TankDefinition) {
const gun = turret.guns.at(-1)!;
return {
tank,
tank: tank.id,
model: models.models[turret.id],
engine: tank.engines.at(-1)!,
turret,
gun,
shell: gun.shells[0],
track: tank.tracks.at(-1)!,
engine: tank.engines.at(-1)!.id,
turret: turret.id,
gun: gun.id,
shell: gun.shells[0].id,
track: tank.tracks.at(-1)!.id,
equipment_matrix: genericDefaultEquipmentMatrix,