From dae3a88734ac3d51f8f8a2294ca274df0363cb18 Mon Sep 17 00:00:00 2001 From: trafficlunar Date: Tue, 21 Jan 2025 19:53:04 +0000 Subject: [PATCH] refactor: replace useState with useRef in textures context --- src/context/Textures.tsx | 46 +++++++++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/src/context/Textures.tsx b/src/context/Textures.tsx index cc3263c..033c81c 100644 --- a/src/context/Textures.tsx +++ b/src/context/Textures.tsx @@ -1,4 +1,4 @@ -import { createContext, ReactNode, useContext, useEffect, useState } from "react"; +import { createContext, ReactNode, useContext, useEffect, useRef } from "react"; import * as PIXI from "pixi.js"; import { LoadingContext } from "./Loading"; @@ -10,7 +10,7 @@ import _blockData from "@/data/blocks/data.json"; const blockData: BlockData = _blockData; interface Context { - missingTexture: PIXI.Texture | undefined; + missingTexture: PIXI.Texture; textures: Record; programmerArtTextures: Record; solidTextures: Record; @@ -25,31 +25,32 @@ export const TexturesContext = createContext({} as Context); export const TexturesProvider = ({ children }: Props) => { const { setLoading } = useContext(LoadingContext); - const [missingTexture, setMissingTexture] = useState(); - const [textures, setTextures] = useState>({}); - const [programmerArtTextures, setProgrammerArtTextures] = useState>({}); - const [solidTextures, setSolidTextures] = useState>({}); + // Load missing texture through data string just incase of network errors + const missingTextureRef = useRef( + new PIXI.Texture( + new PIXI.BaseTexture( + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAGUlEQVR42mPABX4w/MCKaKJhVMPgcOuoBgDZRfgBVl5QdQAAAABJRU5ErkJggg==" + ) + ) + ); + const texturesRef = useRef>({}); + const programmerArtTexturesRef = useRef>({}); + const solidTexturesRef = useRef>({}); + // Load textures useEffect(() => { - // Load missing texture through data string just incase of network errors - const missingBaseTexture = new PIXI.BaseTexture( - "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAGUlEQVR42mPABX4w/MCKaKJhVMPgcOuoBgDZRfgBVl5QdQAAAABJRU5ErkJggg==" - ); - setMissingTexture(new PIXI.Texture(missingBaseTexture)); - - // Load textures // Add air texture const airBaseTexture = new PIXI.BaseTexture("/blocks/air.png"); const airTexture = new PIXI.Texture(airBaseTexture); const sheet = new PIXI.Spritesheet(PIXI.BaseTexture.from("/blocks/spritesheet.png"), spritesheet); sheet.parse().then((t) => { - setTextures({ ...t, "air.png": airTexture }); + texturesRef.current = { ...t, "air.png": airTexture }; }); const programmerArtSheet = new PIXI.Spritesheet(PIXI.BaseTexture.from("/blocks/programmer-art/spritesheet.png"), programmerArtSpritesheet); programmerArtSheet.parse().then((t) => { - setProgrammerArtTextures({ ...t, "air.png": airTexture }); + programmerArtTexturesRef.current = { ...t, "air.png": airTexture }; }); // Load solid textures @@ -74,9 +75,20 @@ export const TexturesProvider = ({ children }: Props) => { solidTexturesCollection[blockName] = texture; }); - setSolidTextures(solidTexturesCollection); + solidTexturesRef.current = solidTexturesCollection; setLoading(false); }, []); - return {children}; + return ( + + {children} + + ); };