import { useContext, useEffect, useState } from "react"; import { CanvasContext } from "@/context/Canvas"; import { HistoryContext } from "@/context/History"; import { SelectionContext } from "@/context/Selection"; import { ToolContext } from "@/context/Tool"; import { TexturesContext } from "@/context/Textures"; import { Label } from "@/components/ui/label"; import { Button } from "@/components/ui/button"; import { useTextures } from "@/hooks/useTextures"; import { Application } from "@pixi/react"; function Replace() { const { version, setBlocks } = useContext(CanvasContext); const { addHistory } = useContext(HistoryContext); const { isInSelection } = useContext(SelectionContext); const { selectedBlock, tool, setTool } = useContext(ToolContext); const { missingTexture } = useContext(TexturesContext); const textures = useTextures(version); const [oldTool, setOldTool] = useState("hand"); const [waitingId, setWaitingId] = useState(null); const [block1, setBlock1] = useState(""); const [block2, setBlock2] = useState(""); const onClickBlockButton = (id: number) => { setWaitingId(id); setOldTool(tool); setTool("eyedropper"); }; const onClickReplace = () => { // If block2 name is air, delete the block instead. setBlocks((prev) => { const oldBlocks = [...prev]; const replacedBlocks = prev .map((block) => { if (isInSelection(block.x, block.y)) { if (block.name === block1) { // If block2 is air, return null // If not, change the block name return block2 === "air" ? null : { ...block, name: block2 }; } } return block; }) // Remove all blocks that are null .filter((block) => block !== null); addHistory( "Replace", () => setBlocks(replacedBlocks), () => setBlocks(oldBlocks) ); return replacedBlocks; }); }; useEffect(() => { if (!waitingId) return; if (waitingId == 1) { setBlock1(selectedBlock); } else if (waitingId == 2) { setBlock2(selectedBlock); } setTool(oldTool); setWaitingId(null); }, [selectedBlock]); return (

); } export default Replace;