correct system for not triggering unwanted rerenders
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user