correct system for not triggering unwanted rerenders

This commit is contained in:
wass08
2026-02-02 10:35:00 +09:00
parent 549bfb3f29
commit 0613f846ef
5 changed files with 17 additions and 6 deletions
@@ -9,11 +9,13 @@ import useScene from '../../store/use-scene'
// ============================================================================ // ============================================================================
export const CeilingSystem = () => { export const CeilingSystem = () => {
const { nodes, dirtyNodes, clearDirty } = useScene() const dirtyNodes = useScene((state) => state.dirtyNodes)
const clearDirty = useScene((state) => state.clearDirty)
useFrame(() => { useFrame(() => {
if (dirtyNodes.size === 0) return if (dirtyNodes.size === 0) return
const nodes = useScene.getState().nodes
// Process dirty ceilings // Process dirty ceilings
dirtyNodes.forEach((id) => { dirtyNodes.forEach((id) => {
const node = nodes[id] const node = nodes[id]
@@ -11,10 +11,12 @@ import useScene from '../../store/use-scene'
// ============================================================================ // ============================================================================
export const ItemSystem = () => { export const ItemSystem = () => {
const { nodes, dirtyNodes, clearDirty } = useScene() const dirtyNodes = useScene((state) => state.dirtyNodes)
const clearDirty = useScene((state) => state.clearDirty)
useFrame(() => { useFrame(() => {
if (dirtyNodes.size === 0) return if (dirtyNodes.size === 0) return
const nodes = useScene.getState().nodes
dirtyNodes.forEach((id) => { dirtyNodes.forEach((id) => {
const node = nodes[id] const node = nodes[id]
@@ -9,11 +9,14 @@ import useScene from '../../store/use-scene'
// ============================================================================ // ============================================================================
export const RoofSystem = () => { export const RoofSystem = () => {
const { nodes, dirtyNodes, clearDirty } = useScene() const dirtyNodes = useScene((state) => state.dirtyNodes)
const clearDirty = useScene((state) => state.clearDirty)
useFrame(() => { useFrame(() => {
if (dirtyNodes.size === 0) return if (dirtyNodes.size === 0) return
const nodes = useScene.getState().nodes
// Process dirty roofs // Process dirty roofs
dirtyNodes.forEach((id) => { dirtyNodes.forEach((id) => {
const node = nodes[id] const node = nodes[id]
@@ -9,11 +9,14 @@ import useScene from '../../store/use-scene'
// ============================================================================ // ============================================================================
export const SlabSystem = () => { export const SlabSystem = () => {
const { nodes, dirtyNodes, clearDirty } = useScene() const dirtyNodes = useScene((state) => state.dirtyNodes)
const clearDirty = useScene((state) => state.clearDirty)
useFrame(() => { useFrame(() => {
if (dirtyNodes.size === 0) return if (dirtyNodes.size === 0) return
const nodes = useScene.getState().nodes
// Process dirty slabs // Process dirty slabs
dirtyNodes.forEach((id) => { dirtyNodes.forEach((id) => {
const node = nodes[id] const node = nodes[id]
@@ -25,14 +25,15 @@ export const WallSystem = () => {
const dirtyNodes = useScene((state) => state.dirtyNodes) const dirtyNodes = useScene((state) => state.dirtyNodes)
const clearDirty = useScene((state) => state.clearDirty) const clearDirty = useScene((state) => state.clearDirty)
console.log('wall system rerendering')
useFrame(() => { useFrame(() => {
if (dirtyNodes.size === 0) return if (dirtyNodes.size === 0) return
const nodes = useScene.getState().nodes
// Collect dirty walls and their levels // Collect dirty walls and their levels
const dirtyWallsByLevel = new Map<string, Set<string>>() const dirtyWallsByLevel = new Map<string, Set<string>>()
const nodes = useScene.getState().nodes
dirtyNodes.forEach((id) => { dirtyNodes.forEach((id) => {
const node = nodes[id] const node = nodes[id]
if (!node || node.type !== 'wall') return if (!node || node.type !== 'wall') return