From 933b287f9aac5af70c79471e43208334b234028a Mon Sep 17 00:00:00 2001 From: trafficlunar Date: Tue, 24 Dec 2024 20:12:40 +0000 Subject: [PATCH] fix: use pixi stage for selected block component --- src/components/toolbar/SelectedBlock.tsx | 66 ++++++------------------ 1 file changed, 16 insertions(+), 50 deletions(-) diff --git a/src/components/toolbar/SelectedBlock.tsx b/src/components/toolbar/SelectedBlock.tsx index b541b44..6ae656c 100644 --- a/src/components/toolbar/SelectedBlock.tsx +++ b/src/components/toolbar/SelectedBlock.tsx @@ -1,6 +1,6 @@ -import { useContext, useEffect, useState } from "react"; - -import constants from "@/constants"; +import { useContext, useEffect, useRef, useState } from "react"; +import { Container, Sprite, Stage } from "@pixi/react"; +import * as PIXI from "pixi.js"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip"; @@ -11,65 +11,31 @@ import _blockData from "@/data/blocks/programmer-art/data.json"; const blockData: BlockData = _blockData; function SelectedBlock() { - const { textures } = useContext(TexturesContext); + const { missingTexture, textures } = useContext(TexturesContext); const { selectedBlock } = useContext(ToolContext); + const divRef = useRef(null); + const [selectedBlockName, setSelectedBlockName] = useState("Stone"); - const [selectedBlockTexture, setSelectedBlockTexture] = useState(constants.MISSING_TEXTURE); + const [selectedBlockTexture, setSelectedBlockTexture] = useState(); 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 ctx = canvas.getContext("2d"); - canvas.width = 16; - canvas.height = 16; - - 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 - ); - - setSelectedBlockTexture(canvas.toDataURL()); - }; - - image.onerror = () => { - setSelectedBlockTexture(constants.MISSING_TEXTURE); - }; - }, [textures, selectedBlock]); + setSelectedBlockTexture(textures[`${selectedBlock}.png`] ?? missingTexture); + }, [textures, selectedBlock, missingTexture]); return ( - +
+ + + + + +

{selectedBlockName}