fix: armor highlighting desync

This commit is contained in:
TrèsAbhi committed 2024-01-16 12:34:00 -06:00
1 parent 1911508552
commit 9b3c7451b7
4 files changed
+15 -16

No files matched your search

@@ -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 =
@@ -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 =
@@ -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();