feat: calibrated shells

This commit is contained in:
TrèsAbhi committed 2024-02-27 18:13:26 -06:00
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.wireframe = visual.wireframe;
}
async function handleEquipmentChange(equipment: EquipmentMatrix) {
async function handleProtagonistEquipmentChange(
equipment: EquipmentMatrix,
) {
const hasEnhancedArmor = await hasEquipment(110, false, equipment);
material.uniforms.thickness.value = hasEnhancedArmor
? thickness * 1.04
: 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);
handleVisualChange(useTankopediaPersistent.getState().model.visual);
handleEquipmentChange(useDuel.getState().protagonist!.equipment);
handleProtagonistEquipmentChange(useDuel.getState().protagonist!.equipment);
handleAntagonistEquipmentChange(useDuel.getState().antagonist!.equipment);
const unsubscribes = [
useDuel.subscribe((state) => state.antagonist!.shell, handleShellChange),
@@ -102,7 +113,11 @@ export function CoreArmor({ node, thickness }: CoreArmorProps) {
),
useDuel.subscribe(
(state) => state.protagonist!.equipment,
handleEquipmentChange,
handleProtagonistEquipmentChange,
),
useDuel.subscribe(
(state) => state.antagonist!.equipment,
handleAntagonistEquipmentChange,
),
];
@@ -5,6 +5,7 @@ import {
Object3D,
ShaderMaterial,
} from 'three';
import { isExplosive } from '../../../../../../core/blitz/isExplosive';
import { resolveNearPenetration } from '../../../../../../core/blitz/resolveNearPenetration';
import { hasEquipment } from '../../../../../../core/blitzkrieg/hasEquipment';
import { jsxTree } from '../../../../../../core/blitzkrieg/jsxTree';
@@ -42,21 +43,36 @@ export function SpacedArmorSubExternal({
shell.penetration,
);
}
async function handleEquipmentChange(equipment: EquipmentMatrix) {
async function handleProtagonistEquipmentChange(
equipment: EquipmentMatrix,
) {
const hasEnhancedArmor = await hasEquipment(110, false, equipment);
material.uniforms.thickness.value = hasEnhancedArmor
? thickness * 1.04
: 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);
handleEquipmentChange(useDuel.getState().protagonist!.equipment);
handleProtagonistEquipmentChange(useDuel.getState().protagonist!.equipment);
handleAntagonistEquipmentChange(useDuel.getState().antagonist!.equipment);
const unsubscribes = [
useDuel.subscribe((state) => state.antagonist!.shell, handleShellChange),
useDuel.subscribe(
(state) => state.protagonist!.equipment,
handleEquipmentChange,
handleProtagonistEquipmentChange,
),
useDuel.subscribe(
(state) => state.antagonist!.equipment,
handleAntagonistEquipmentChange,
),
];
@@ -6,6 +6,7 @@ import {
ShaderMaterial,
} from 'three';
import { degToRad } from 'three/src/math/MathUtils';
import { isExplosive } from '../../../../../../core/blitz/isExplosive';
import { resolveNearPenetration } from '../../../../../../core/blitz/resolveNearPenetration';
import { hasEquipment } from '../../../../../../core/blitzkrieg/hasEquipment';
import { jsxTree } from '../../../../../../core/blitzkrieg/jsxTree';
@@ -56,21 +57,36 @@ export function SpacedArmorSubSpaced({
shell.normalization ?? 0,
);
}
async function handleEquipmentChange(equipment: EquipmentMatrix) {
async function handleProtagonistEquipmentChange(
equipment: EquipmentMatrix,
) {
const hasEnhancedArmor = await hasEquipment(110, false, equipment);
material.uniforms.thickness.value = hasEnhancedArmor
? thickness * 1.04
: 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);
handleEquipmentChange(useDuel.getState().protagonist!.equipment);
handleProtagonistEquipmentChange(useDuel.getState().protagonist!.equipment);
handleAntagonistEquipmentChange(useDuel.getState().antagonist!.equipment);
const unsubscribes = [
useDuel.subscribe((state) => state.antagonist!.shell, handleShellChange),
useDuel.subscribe(
(state) => state.protagonist!.equipment,
handleEquipmentChange,
handleProtagonistEquipmentChange,
),
useDuel.subscribe(
(state) => state.antagonist!.equipment,
handleAntagonistEquipmentChange,
),
];