diff --git a/src/components/canvas/Blocks.tsx b/src/components/canvas/Blocks.tsx index 5215c77..b7b08ed 100644 --- a/src/components/canvas/Blocks.tsx +++ b/src/components/canvas/Blocks.tsx @@ -1,18 +1,20 @@ -import { useEffect } from "react"; +import { useEffect, useState } from "react"; import { Sprite } from "@pixi/react"; import blocksData from "@/data/blocks/programmer-art/average_colors.json"; -import { Texture } from "pixi.js"; +import * as PIXI from "pixi.js"; interface Props { blocks: Block[]; setBlocks: React.Dispatch>; - textures: Record; + textures: Record; image: HTMLImageElement | undefined; imageDimensions: Dimension; } function Blocks({ blocks, setBlocks, textures, image, imageDimensions }: Props) { + const [missingTexture, setMissingTexture] = useState(); + const findClosestBlock = (r: number, g: number, b: number, a: number) => { let closestBlock = ""; let closestDistance = Infinity; @@ -29,6 +31,12 @@ function Blocks({ blocks, setBlocks, textures, image, imageDimensions }: Props) }; useEffect(() => { + const loadMissingTexture = async () => { + const mTexture = await PIXI.Texture.from("/blocks/missing.png"); + setMissingTexture(mTexture); + }; + loadMissingTexture(); + if (image) { const canvas = document.createElement("canvas"); const ctx = canvas.getContext("2d"); @@ -59,17 +67,12 @@ function Blocks({ blocks, setBlocks, textures, image, imageDimensions }: Props) } }, [image, imageDimensions, setBlocks]); - useEffect(() => { - console.log(blocks); - }, [blocks]); - return ( <> {blocks.map((block, index) => { - const texture = textures[block.name]; + const texture = textures[block.name] ?? missingTexture; if (!texture) { console.warn(`Texture not found for block: ${block.name}`); - return null; } return ;