mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-23 19:49:50 +02:00
fix: armor highlighting desync
This commit is contained in:
1 parent
1911508552
commit
9b3c7451b7
4 files changed
+15
-16
No files matched your search
+4
-5
@@ -26,14 +26,12 @@ interface ArmorHighlightingProps {
|
|||||||
|
|
||||||
export function ArmorHighlighting({ duel }: ArmorHighlightingProps) {
|
export function ArmorHighlighting({ duel }: ArmorHighlightingProps) {
|
||||||
const wrapper = useRef<Group>(null);
|
const wrapper = useRef<Group>(null);
|
||||||
const awaitedModelDefinitions = useModelDefinitions();
|
const modelDefinitions = useModelDefinitions();
|
||||||
const turretContainer = useRef<Group>(null);
|
const turretContainer = useRef<Group>(null);
|
||||||
const gunContainer = useRef<Group>(null);
|
const gunContainer = useRef<Group>(null);
|
||||||
const initialTankopediaState = useTankopedia.getState();
|
const initialTankopediaState = useTankopedia.getState();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!awaitedModelDefinitions) return;
|
|
||||||
|
|
||||||
const turretOrigin = new Vector3(
|
const turretOrigin = new Vector3(
|
||||||
tankModelDefinition.turretOrigin[0],
|
tankModelDefinition.turretOrigin[0],
|
||||||
tankModelDefinition.turretOrigin[1],
|
tankModelDefinition.turretOrigin[1],
|
||||||
@@ -90,12 +88,13 @@ export function ArmorHighlighting({ duel }: ArmorHighlightingProps) {
|
|||||||
turretContainer.current?.rotation.copy(turretRotation);
|
turretContainer.current?.rotation.copy(turretRotation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handleModelTransform(useTankopedia.getState().model.physical);
|
||||||
modelTransformEvent.on(handleModelTransform);
|
modelTransformEvent.on(handleModelTransform);
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
modelTransformEvent.off(handleModelTransform);
|
modelTransformEvent.off(handleModelTransform);
|
||||||
};
|
};
|
||||||
}, [awaitedModelDefinitions]);
|
});
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const unsubscribe = useTankopedia.subscribe(
|
const unsubscribe = useTankopedia.subscribe(
|
||||||
@@ -114,7 +113,7 @@ export function ArmorHighlighting({ duel }: ArmorHighlightingProps) {
|
|||||||
);
|
);
|
||||||
|
|
||||||
const armorNodes = Object.values(armorGltf.nodes);
|
const armorNodes = Object.values(armorGltf.nodes);
|
||||||
const tankModelDefinition = awaitedModelDefinitions[duel.protagonist.tank.id];
|
const tankModelDefinition = modelDefinitions[duel.protagonist.tank.id];
|
||||||
const turretModelDefinition =
|
const turretModelDefinition =
|
||||||
tankModelDefinition.turrets[duel.protagonist.turret.id];
|
tankModelDefinition.turrets[duel.protagonist.turret.id];
|
||||||
const gunModelDefinition =
|
const gunModelDefinition =
|
||||||
|
|||||||
+4
-5
@@ -33,14 +33,12 @@ interface ExternalModuleMaskProps {
|
|||||||
*/
|
*/
|
||||||
export const ExternalModuleMask = memo<ExternalModuleMaskProps>(({ duel }) => {
|
export const ExternalModuleMask = memo<ExternalModuleMaskProps>(({ duel }) => {
|
||||||
const wrapper = useRef<Group>(null);
|
const wrapper = useRef<Group>(null);
|
||||||
const awaitedModelDefinitions = useModelDefinitions();
|
const modelDefinitions = useModelDefinitions();
|
||||||
const turretContainer = useRef<Group>(null);
|
const turretContainer = useRef<Group>(null);
|
||||||
const gunContainer = useRef<Group>(null);
|
const gunContainer = useRef<Group>(null);
|
||||||
const initialTankopediaState = useTankopedia.getState();
|
const initialTankopediaState = useTankopedia.getState();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!awaitedModelDefinitions) return;
|
|
||||||
|
|
||||||
const turretOrigin = new Vector3(
|
const turretOrigin = new Vector3(
|
||||||
tankModelDefinition.turretOrigin[0],
|
tankModelDefinition.turretOrigin[0],
|
||||||
tankModelDefinition.turretOrigin[1],
|
tankModelDefinition.turretOrigin[1],
|
||||||
@@ -97,12 +95,13 @@ export const ExternalModuleMask = memo<ExternalModuleMaskProps>(({ duel }) => {
|
|||||||
turretContainer.current?.rotation.copy(turretRotation);
|
turretContainer.current?.rotation.copy(turretRotation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handleModelTransform(useTankopedia.getState().model.physical);
|
||||||
modelTransformEvent.on(handleModelTransform);
|
modelTransformEvent.on(handleModelTransform);
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
modelTransformEvent.off(handleModelTransform);
|
modelTransformEvent.off(handleModelTransform);
|
||||||
};
|
};
|
||||||
}, [awaitedModelDefinitions]);
|
});
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const unsubscribe = useTankopedia.subscribe(
|
const unsubscribe = useTankopedia.subscribe(
|
||||||
@@ -126,7 +125,7 @@ export const ExternalModuleMask = memo<ExternalModuleMaskProps>(({ duel }) => {
|
|||||||
|
|
||||||
const armorNodes = Object.values(armorGltf.nodes);
|
const armorNodes = Object.values(armorGltf.nodes);
|
||||||
const modelNodes = Object.values(modelGltf.nodes);
|
const modelNodes = Object.values(modelGltf.nodes);
|
||||||
const tankModelDefinition = awaitedModelDefinitions[duel.protagonist.tank.id];
|
const tankModelDefinition = modelDefinitions[duel.protagonist.tank.id];
|
||||||
const turretModelDefinition =
|
const turretModelDefinition =
|
||||||
tankModelDefinition.turrets[duel.protagonist.turret.id];
|
tankModelDefinition.turrets[duel.protagonist.turret.id];
|
||||||
const gunModelDefinition =
|
const gunModelDefinition =
|
||||||
|
|||||||
+5
-4
@@ -37,13 +37,13 @@ interface SpacedArmorDepthProps {
|
|||||||
*/
|
*/
|
||||||
export const SpacedArmorDepth = memo<SpacedArmorDepthProps>(({ duel }) => {
|
export const SpacedArmorDepth = memo<SpacedArmorDepthProps>(({ duel }) => {
|
||||||
const wrapper = useRef<Group>(null);
|
const wrapper = useRef<Group>(null);
|
||||||
const awaitedModelDefinitions = useModelDefinitions();
|
const modelDefinitions = useModelDefinitions();
|
||||||
const turretContainer = useRef<Group>(null);
|
const turretContainer = useRef<Group>(null);
|
||||||
const gunContainer = useRef<Group>(null);
|
const gunContainer = useRef<Group>(null);
|
||||||
const initialTankopediaState = useTankopedia.getState();
|
const initialTankopediaState = useTankopedia.getState();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!awaitedModelDefinitions) return;
|
if (!modelDefinitions) return;
|
||||||
|
|
||||||
const turretOrigin = new Vector3(
|
const turretOrigin = new Vector3(
|
||||||
tankModelDefinition.turretOrigin[0],
|
tankModelDefinition.turretOrigin[0],
|
||||||
@@ -101,12 +101,13 @@ export const SpacedArmorDepth = memo<SpacedArmorDepthProps>(({ duel }) => {
|
|||||||
turretContainer.current?.rotation.copy(turretRotation);
|
turretContainer.current?.rotation.copy(turretRotation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handleModelTransform(useTankopedia.getState().model.physical);
|
||||||
modelTransformEvent.on(handleModelTransform);
|
modelTransformEvent.on(handleModelTransform);
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
modelTransformEvent.off(handleModelTransform);
|
modelTransformEvent.off(handleModelTransform);
|
||||||
};
|
};
|
||||||
}, [awaitedModelDefinitions]);
|
});
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const unsubscribe = useTankopedia.subscribe(
|
const unsubscribe = useTankopedia.subscribe(
|
||||||
@@ -130,7 +131,7 @@ export const SpacedArmorDepth = memo<SpacedArmorDepthProps>(({ duel }) => {
|
|||||||
|
|
||||||
const armorNodes = Object.values(armorGltf.nodes);
|
const armorNodes = Object.values(armorGltf.nodes);
|
||||||
const modelNodes = Object.values(modelGltf.nodes);
|
const modelNodes = Object.values(modelGltf.nodes);
|
||||||
const tankModelDefinition = awaitedModelDefinitions[duel.protagonist.tank.id];
|
const tankModelDefinition = modelDefinitions[duel.protagonist.tank.id];
|
||||||
const turretModelDefinition =
|
const turretModelDefinition =
|
||||||
tankModelDefinition.turrets[duel.protagonist.turret.id];
|
tankModelDefinition.turrets[duel.protagonist.turret.id];
|
||||||
const gunModelDefinition =
|
const gunModelDefinition =
|
||||||
|
|||||||
@@ -29,11 +29,11 @@ export function ArmorMesh({
|
|||||||
duel,
|
duel,
|
||||||
...props
|
...props
|
||||||
}: ArmorMeshProps) {
|
}: ArmorMeshProps) {
|
||||||
|
const camera = useThree((state) => state.camera);
|
||||||
|
const { shell } = duel.antagonist;
|
||||||
const greenPenetration = useTankopedia(
|
const greenPenetration = useTankopedia(
|
||||||
(state) => state.model.visual.greenPenetration,
|
(state) => state.model.visual.greenPenetration,
|
||||||
);
|
);
|
||||||
const camera = useThree((state) => state.camera);
|
|
||||||
const { shell } = duel.antagonist;
|
|
||||||
const material = useRef<ShaderMaterial>(null);
|
const material = useRef<ShaderMaterial>(null);
|
||||||
const resolution = new Vector2();
|
const resolution = new Vector2();
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user