feat: use programmer art textures when on versions 1.13 and below

This commit is contained in:
trafficlunar 2024-12-29 19:40:24 +00:00
parent dca9e43e99
commit 0bfe70809d
13 changed files with 97 additions and 53 deletions

View file

@ -18,7 +18,7 @@ import { Separator } from "@/components/ui/separator";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
import { Toggle } from "@/components/ui/toggle";
import { getBlockData } from "@/utils/getBlockData";
import { useBlockData } from "@/hooks/useBlockData";
import BlockSelector from "./open-image/BlockSelector";
import VersionCombobox from "../VersionCombobox";
@ -34,7 +34,7 @@ function OpenImage({ close }: DialogProps) {
},
});
const blockData = getBlockData(version);
const blockData = useBlockData(version);
const divRef = useRef<HTMLDivElement>(null);
const userModifiedBlocks = useRef(false);

View file

@ -2,17 +2,18 @@ import { useContext, useState } from "react";
import * as PIXI from "pixi.js";
import { CanvasContext } from "@/context/Canvas";
import { TexturesContext } from "@/context/Textures";
import { Button } from "@/components/ui/button";
import { DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog";
import { Input } from "@/components/ui/input";
import { useTextures } from "@/hooks/useTextures";
function SaveImage({ close }: DialogProps) {
const { blocks, canvasSize } = useContext(CanvasContext);
const { missingTexture, textures } = useContext(TexturesContext);
const { blocks, canvasSize, version } = useContext(CanvasContext);
const [fileName, setFileName] = useState("blockmatic");
const textures = useTextures(version);
const onSubmit = () => {
const width = canvasSize.maxX - canvasSize.minX;
@ -26,8 +27,7 @@ function SaveImage({ close }: DialogProps) {
const container = new PIXI.Container();
blocks.forEach((block) => {
const texture = textures[`${block.name}.png`] ?? missingTexture;
const sprite = new PIXI.Sprite(texture);
const sprite = new PIXI.Sprite(textures[block.name]);
sprite.x = block.x * 16;
sprite.y = block.y * 16;
container.addChild(sprite);

View file

@ -2,10 +2,10 @@ import React, { useContext, useMemo, useState } from "react";
import { Container, Graphics, Sprite, Stage } from "@pixi/react";
import { CanvasContext } from "@/context/Canvas";
import { TexturesContext } from "@/context/Textures";
import { ThemeContext } from "@/context/Theme";
import { getBlockData } from "@/utils/getBlockData";
import { useBlockData } from "@/hooks/useBlockData";
import { useTextures } from "@/hooks/useTextures";
interface Props {
stageWidth: number;
@ -17,10 +17,10 @@ interface Props {
function BlockSelector({ stageWidth, searchInput, selectedBlocks, setSelectedBlocks, userModifiedBlocks }: Props) {
const { version } = useContext(CanvasContext);
const { missingTexture, textures } = useContext(TexturesContext);
const { isDark } = useContext(ThemeContext);
const blockData = getBlockData(version);
const blockData = useBlockData(version);
const textures = useTextures(version);
const [hoverPosition, setHoverPosition] = useState<Position | null>(null);
@ -46,7 +46,6 @@ function BlockSelector({ stageWidth, searchInput, selectedBlocks, setSelectedBlo
>
<Container>
{filteredBlocks.map((block, index) => {
const texture = textures[`${block}.png`] ?? missingTexture;
const x = (index % blocksPerColumn) * (32 + 2) + 2;
const y = Math.floor(index / blocksPerColumn) * (32 + 2) + 2;
@ -54,7 +53,7 @@ function BlockSelector({ stageWidth, searchInput, selectedBlocks, setSelectedBlo
<>
<Sprite
key={block}
texture={texture}
texture={textures[block]}
x={x}
y={y}
scale={2}