From e3ae0de1652985a6abdb11185bd7315504f7da0b Mon Sep 17 00:00:00 2001 From: trafficlunar Date: Tue, 24 Dec 2024 17:41:43 +0000 Subject: [PATCH] fix: broken selected block component --- src/components/toolbar/SelectedBlock.tsx | 70 +++++++++++++++--------- 1 file changed, 44 insertions(+), 26 deletions(-) diff --git a/src/components/toolbar/SelectedBlock.tsx b/src/components/toolbar/SelectedBlock.tsx index 2c587dd..b541b44 100644 --- a/src/components/toolbar/SelectedBlock.tsx +++ b/src/components/toolbar/SelectedBlock.tsx @@ -1,4 +1,4 @@ -import { useContext } from "react"; +import { useContext, useEffect, useState } from "react"; import constants from "@/constants"; @@ -7,54 +7,72 @@ import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/comp import { TexturesContext } from "@/context/Textures"; import { ToolContext } from "@/context/Tool"; +import _blockData from "@/data/blocks/programmer-art/data.json"; +const blockData: BlockData = _blockData; + function SelectedBlock() { - const textures = useContext(TexturesContext); + const { textures } = useContext(TexturesContext); const { selectedBlock } = useContext(ToolContext); - const convertToDataUrl = (textureName: string): string => { - // Show missing texture if fail - const texture = textures[textureName]; - if (!texture) return constants.MISSING_TEXTURE; + const [selectedBlockName, setSelectedBlockName] = useState("Stone"); + const [selectedBlockTexture, setSelectedBlockTexture] = useState(constants.MISSING_TEXTURE); + + useEffect(() => { + const blockInfo = blockData[selectedBlock]; + setSelectedBlockName(blockInfo.name); + + const texture = textures[`${selectedBlock}.png`]; + if (!texture) { + setSelectedBlockTexture(constants.MISSING_TEXTURE); + return; + } const canvas = document.createElement("canvas"); - const context = canvas.getContext("2d"); + const ctx = canvas.getContext("2d"); + canvas.width = 16; + canvas.height = 16; - canvas.width = texture.frame.width; - canvas.height = texture.frame.height; - - if (!context) return ""; + if (!ctx) { + setSelectedBlockTexture(constants.MISSING_TEXTURE); + return; + } const image = new Image(); // eslint-disable-next-line @typescript-eslint/no-explicit-any image.src = (texture.baseTexture.resource as any).url; + image.onload = () => { + ctx.drawImage( + image, + texture.frame.x, + texture.frame.y, + texture.frame.width, + texture.frame.height, + 0, + 0, + texture.frame.width, + texture.frame.height + ); - context.drawImage( - image, - texture.frame.x, - texture.frame.y, - texture.frame.width, - texture.frame.height, - 0, - 0, - texture.frame.width, - texture.frame.height - ); + setSelectedBlockTexture(canvas.toDataURL()); + }; - return canvas.toDataURL(); - }; + image.onerror = () => { + setSelectedBlockTexture(constants.MISSING_TEXTURE); + }; + }, [textures, selectedBlock]); return ( -

{selectedBlock}

+

{selectedBlockName}