mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-23 19:49:50 +02:00
feat: calibrated shells
This commit is contained in:
1 parent
cc4177bf14
commit
d531698867
3 files changed
+56
-9
No files matched your search
@@ -83,16 +83,27 @@ export function CoreArmor({ node, thickness }: CoreArmorProps) {
|
|||||||
material.uniforms.opaque.value = visual.opaque || visual.wireframe;
|
material.uniforms.opaque.value = visual.opaque || visual.wireframe;
|
||||||
material.wireframe = visual.wireframe;
|
material.wireframe = visual.wireframe;
|
||||||
}
|
}
|
||||||
async function handleEquipmentChange(equipment: EquipmentMatrix) {
|
async function handleProtagonistEquipmentChange(
|
||||||
|
equipment: EquipmentMatrix,
|
||||||
|
) {
|
||||||
const hasEnhancedArmor = await hasEquipment(110, false, equipment);
|
const hasEnhancedArmor = await hasEquipment(110, false, equipment);
|
||||||
material.uniforms.thickness.value = hasEnhancedArmor
|
material.uniforms.thickness.value = hasEnhancedArmor
|
||||||
? thickness * 1.04
|
? thickness * 1.04
|
||||||
: thickness;
|
: thickness;
|
||||||
}
|
}
|
||||||
|
async function handleAntagonistEquipmentChange(equipment: EquipmentMatrix) {
|
||||||
|
const shell = useDuel.getState().antagonist!.shell;
|
||||||
|
const penetration = resolveNearPenetration(shell.penetration);
|
||||||
|
const hasCalibratedShells = await hasEquipment(103, true, equipment);
|
||||||
|
material.uniforms.penetration.value = hasCalibratedShells
|
||||||
|
? penetration * (isExplosive(shell.type) ? 1.1 : 1.05)
|
||||||
|
: penetration;
|
||||||
|
}
|
||||||
|
|
||||||
handleShellChange(useDuel.getState().antagonist!.shell);
|
handleShellChange(useDuel.getState().antagonist!.shell);
|
||||||
handleVisualChange(useTankopediaPersistent.getState().model.visual);
|
handleVisualChange(useTankopediaPersistent.getState().model.visual);
|
||||||
handleEquipmentChange(useDuel.getState().protagonist!.equipment);
|
handleProtagonistEquipmentChange(useDuel.getState().protagonist!.equipment);
|
||||||
|
handleAntagonistEquipmentChange(useDuel.getState().antagonist!.equipment);
|
||||||
|
|
||||||
const unsubscribes = [
|
const unsubscribes = [
|
||||||
useDuel.subscribe((state) => state.antagonist!.shell, handleShellChange),
|
useDuel.subscribe((state) => state.antagonist!.shell, handleShellChange),
|
||||||
@@ -102,7 +113,11 @@ export function CoreArmor({ node, thickness }: CoreArmorProps) {
|
|||||||
),
|
),
|
||||||
useDuel.subscribe(
|
useDuel.subscribe(
|
||||||
(state) => state.protagonist!.equipment,
|
(state) => state.protagonist!.equipment,
|
||||||
handleEquipmentChange,
|
handleProtagonistEquipmentChange,
|
||||||
|
),
|
||||||
|
useDuel.subscribe(
|
||||||
|
(state) => state.antagonist!.equipment,
|
||||||
|
handleAntagonistEquipmentChange,
|
||||||
),
|
),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
+19
-3
@@ -5,6 +5,7 @@ import {
|
|||||||
Object3D,
|
Object3D,
|
||||||
ShaderMaterial,
|
ShaderMaterial,
|
||||||
} from 'three';
|
} from 'three';
|
||||||
|
import { isExplosive } from '../../../../../../core/blitz/isExplosive';
|
||||||
import { resolveNearPenetration } from '../../../../../../core/blitz/resolveNearPenetration';
|
import { resolveNearPenetration } from '../../../../../../core/blitz/resolveNearPenetration';
|
||||||
import { hasEquipment } from '../../../../../../core/blitzkrieg/hasEquipment';
|
import { hasEquipment } from '../../../../../../core/blitzkrieg/hasEquipment';
|
||||||
import { jsxTree } from '../../../../../../core/blitzkrieg/jsxTree';
|
import { jsxTree } from '../../../../../../core/blitzkrieg/jsxTree';
|
||||||
@@ -42,21 +43,36 @@ export function SpacedArmorSubExternal({
|
|||||||
shell.penetration,
|
shell.penetration,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
async function handleEquipmentChange(equipment: EquipmentMatrix) {
|
async function handleProtagonistEquipmentChange(
|
||||||
|
equipment: EquipmentMatrix,
|
||||||
|
) {
|
||||||
const hasEnhancedArmor = await hasEquipment(110, false, equipment);
|
const hasEnhancedArmor = await hasEquipment(110, false, equipment);
|
||||||
material.uniforms.thickness.value = hasEnhancedArmor
|
material.uniforms.thickness.value = hasEnhancedArmor
|
||||||
? thickness * 1.04
|
? thickness * 1.04
|
||||||
: thickness;
|
: thickness;
|
||||||
}
|
}
|
||||||
|
async function handleAntagonistEquipmentChange(equipment: EquipmentMatrix) {
|
||||||
|
const shell = useDuel.getState().antagonist!.shell;
|
||||||
|
const penetration = resolveNearPenetration(shell.penetration);
|
||||||
|
const hasCalibratedShells = await hasEquipment(103, true, equipment);
|
||||||
|
material.uniforms.penetration.value = hasCalibratedShells
|
||||||
|
? penetration * (isExplosive(shell.type) ? 1.1 : 1.05)
|
||||||
|
: penetration;
|
||||||
|
}
|
||||||
|
|
||||||
handleShellChange(useDuel.getState().antagonist!.shell);
|
handleShellChange(useDuel.getState().antagonist!.shell);
|
||||||
handleEquipmentChange(useDuel.getState().protagonist!.equipment);
|
handleProtagonistEquipmentChange(useDuel.getState().protagonist!.equipment);
|
||||||
|
handleAntagonistEquipmentChange(useDuel.getState().antagonist!.equipment);
|
||||||
|
|
||||||
const unsubscribes = [
|
const unsubscribes = [
|
||||||
useDuel.subscribe((state) => state.antagonist!.shell, handleShellChange),
|
useDuel.subscribe((state) => state.antagonist!.shell, handleShellChange),
|
||||||
useDuel.subscribe(
|
useDuel.subscribe(
|
||||||
(state) => state.protagonist!.equipment,
|
(state) => state.protagonist!.equipment,
|
||||||
handleEquipmentChange,
|
handleProtagonistEquipmentChange,
|
||||||
|
),
|
||||||
|
useDuel.subscribe(
|
||||||
|
(state) => state.antagonist!.equipment,
|
||||||
|
handleAntagonistEquipmentChange,
|
||||||
),
|
),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
+19
-3
@@ -6,6 +6,7 @@ import {
|
|||||||
ShaderMaterial,
|
ShaderMaterial,
|
||||||
} from 'three';
|
} from 'three';
|
||||||
import { degToRad } from 'three/src/math/MathUtils';
|
import { degToRad } from 'three/src/math/MathUtils';
|
||||||
|
import { isExplosive } from '../../../../../../core/blitz/isExplosive';
|
||||||
import { resolveNearPenetration } from '../../../../../../core/blitz/resolveNearPenetration';
|
import { resolveNearPenetration } from '../../../../../../core/blitz/resolveNearPenetration';
|
||||||
import { hasEquipment } from '../../../../../../core/blitzkrieg/hasEquipment';
|
import { hasEquipment } from '../../../../../../core/blitzkrieg/hasEquipment';
|
||||||
import { jsxTree } from '../../../../../../core/blitzkrieg/jsxTree';
|
import { jsxTree } from '../../../../../../core/blitzkrieg/jsxTree';
|
||||||
@@ -56,21 +57,36 @@ export function SpacedArmorSubSpaced({
|
|||||||
shell.normalization ?? 0,
|
shell.normalization ?? 0,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
async function handleEquipmentChange(equipment: EquipmentMatrix) {
|
async function handleProtagonistEquipmentChange(
|
||||||
|
equipment: EquipmentMatrix,
|
||||||
|
) {
|
||||||
const hasEnhancedArmor = await hasEquipment(110, false, equipment);
|
const hasEnhancedArmor = await hasEquipment(110, false, equipment);
|
||||||
material.uniforms.thickness.value = hasEnhancedArmor
|
material.uniforms.thickness.value = hasEnhancedArmor
|
||||||
? thickness * 1.04
|
? thickness * 1.04
|
||||||
: thickness;
|
: thickness;
|
||||||
}
|
}
|
||||||
|
async function handleAntagonistEquipmentChange(equipment: EquipmentMatrix) {
|
||||||
|
const shell = useDuel.getState().antagonist!.shell;
|
||||||
|
const penetration = resolveNearPenetration(shell.penetration);
|
||||||
|
const hasCalibratedShells = await hasEquipment(103, true, equipment);
|
||||||
|
material.uniforms.penetration.value = hasCalibratedShells
|
||||||
|
? penetration * (isExplosive(shell.type) ? 1.1 : 1.05)
|
||||||
|
: penetration;
|
||||||
|
}
|
||||||
|
|
||||||
handleShellChange(useDuel.getState().antagonist!.shell);
|
handleShellChange(useDuel.getState().antagonist!.shell);
|
||||||
handleEquipmentChange(useDuel.getState().protagonist!.equipment);
|
handleProtagonistEquipmentChange(useDuel.getState().protagonist!.equipment);
|
||||||
|
handleAntagonistEquipmentChange(useDuel.getState().antagonist!.equipment);
|
||||||
|
|
||||||
const unsubscribes = [
|
const unsubscribes = [
|
||||||
useDuel.subscribe((state) => state.antagonist!.shell, handleShellChange),
|
useDuel.subscribe((state) => state.antagonist!.shell, handleShellChange),
|
||||||
useDuel.subscribe(
|
useDuel.subscribe(
|
||||||
(state) => state.protagonist!.equipment,
|
(state) => state.protagonist!.equipment,
|
||||||
handleEquipmentChange,
|
handleProtagonistEquipmentChange,
|
||||||
|
),
|
||||||
|
useDuel.subscribe(
|
||||||
|
(state) => state.antagonist!.equipment,
|
||||||
|
handleAntagonistEquipmentChange,
|
||||||
),
|
),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user