refactor: remove solid textures

This commit is contained in:
trafficlunar 2025-01-21 19:58:56 +00:00
parent dae3a88734
commit f3441d8033
3 changed files with 6 additions and 51 deletions

View file

@ -9,7 +9,6 @@ interface Props {
blocks: Block[]; blocks: Block[];
missingTexture: PIXI.Texture | undefined; missingTexture: PIXI.Texture | undefined;
textures: Record<string, PIXI.Texture>; textures: Record<string, PIXI.Texture>;
solidTextures: Record<string, PIXI.Texture>;
coords: Position; coords: Position;
scale: number; scale: number;
version: number; version: number;
@ -18,7 +17,7 @@ interface Props {
// Lifts 16,000 tiles limit // Lifts 16,000 tiles limit
settings.use32bitIndex = true; settings.use32bitIndex = true;
function Blocks({ blocks, missingTexture, textures, solidTextures, coords, scale, version }: Props) { function Blocks({ blocks, missingTexture, textures, coords, scale, version }: Props) {
const app = useApp(); const app = useApp();
const tilemapRef = useRef<CompositeTilemap>(); const tilemapRef = useRef<CompositeTilemap>();
@ -28,15 +27,9 @@ function Blocks({ blocks, missingTexture, textures, solidTextures, coords, scale
tilemap.clear(); tilemap.clear();
// Tile solid colors at smaller scales // Tile solid colors at smaller scales
if (scale >= 0.4) { blocks.forEach((block) => {
blocks.forEach((block) => { tilemap.tile(textures[block.name] ?? missingTexture, block.x * 16, block.y * 16);
tilemap.tile(textures[block.name] ?? missingTexture, block.x * 16, block.y * 16); });
});
} else {
blocks.forEach((block) => {
tilemap.tile(solidTextures[`${block.name}`] ?? missingTexture, block.x * 16, block.y * 16);
});
}
}; };
useEffect(() => { useEffect(() => {

View file

@ -28,7 +28,7 @@ PIXI.settings.SCALE_MODE = PIXI.SCALE_MODES.NEAREST;
function Canvas() { function Canvas() {
const { stageSize, canvasSize, blocks, coords, scale, version, setStageSize, setBlocks, setCoords, setScale } = useContext(CanvasContext); const { stageSize, canvasSize, blocks, coords, scale, version, setStageSize, setBlocks, setCoords, setScale } = useContext(CanvasContext);
const { settings } = useContext(SettingsContext); const { settings } = useContext(SettingsContext);
const { missingTexture, solidTextures } = useContext(TexturesContext); const { missingTexture } = useContext(TexturesContext);
const { isDark } = useContext(ThemeContext); const { isDark } = useContext(ThemeContext);
const { tool, radius, selectedBlock, selectionCoords, cssCursor, setTool, setSelectedBlock, setSelectionCoords, setCssCursor } = const { tool, radius, selectedBlock, selectionCoords, cssCursor, setTool, setSelectedBlock, setSelectionCoords, setCssCursor } =
useContext(ToolContext); useContext(ToolContext);
@ -487,15 +487,7 @@ function Canvas() {
onClick={onClick} onClick={onClick}
options={{ backgroundAlpha: 0 }} options={{ backgroundAlpha: 0 }}
> >
<Blocks <Blocks blocks={visibleBlocks} missingTexture={missingTexture} textures={textures} coords={coords} scale={scale} version={version} />
blocks={visibleBlocks}
missingTexture={missingTexture}
textures={textures}
solidTextures={solidTextures}
coords={coords}
scale={scale}
version={version}
/>
<Container x={coords.x} y={coords.y} scale={scale}> <Container x={coords.x} y={coords.y} scale={scale}>
{settings.canvasBorder && <CanvasBorder canvasSize={canvasSize} isDark={isDark} />} {settings.canvasBorder && <CanvasBorder canvasSize={canvasSize} isDark={isDark} />}

View file

@ -6,14 +6,10 @@ import { LoadingContext } from "./Loading";
import spritesheet from "@/data/blocks/spritesheet.json"; import spritesheet from "@/data/blocks/spritesheet.json";
import programmerArtSpritesheet from "@/data/blocks/programmer-art/spritesheet.json"; import programmerArtSpritesheet from "@/data/blocks/programmer-art/spritesheet.json";
import _blockData from "@/data/blocks/data.json";
const blockData: BlockData = _blockData;
interface Context { interface Context {
missingTexture: PIXI.Texture; missingTexture: PIXI.Texture;
textures: Record<string, PIXI.Texture>; textures: Record<string, PIXI.Texture>;
programmerArtTextures: Record<string, PIXI.Texture>; programmerArtTextures: Record<string, PIXI.Texture>;
solidTextures: Record<string, PIXI.Texture>;
} }
interface Props { interface Props {
@ -35,7 +31,6 @@ export const TexturesProvider = ({ children }: Props) => {
); );
const texturesRef = useRef<Record<string, PIXI.Texture>>({}); const texturesRef = useRef<Record<string, PIXI.Texture>>({});
const programmerArtTexturesRef = useRef<Record<string, PIXI.Texture>>({}); const programmerArtTexturesRef = useRef<Record<string, PIXI.Texture>>({});
const solidTexturesRef = useRef<Record<string, PIXI.Texture>>({});
// Load textures // Load textures
useEffect(() => { useEffect(() => {
@ -52,30 +47,6 @@ export const TexturesProvider = ({ children }: Props) => {
programmerArtSheet.parse().then((t) => { programmerArtSheet.parse().then((t) => {
programmerArtTexturesRef.current = { ...t, "air.png": airTexture }; programmerArtTexturesRef.current = { ...t, "air.png": airTexture };
}); });
// Load solid textures
const solidTexturesCollection: Record<string, PIXI.Texture> = {};
const canvas = document.createElement("canvas");
canvas.width = 16;
canvas.height = 16;
const ctx = canvas.getContext("2d");
if (!ctx) return;
Object.entries(blockData).forEach(([blockName, data]) => {
ctx.fillStyle = `rgb(${data.color[0]}, ${data.color[1]}, ${data.color[2]}, ${data.color[3]})`;
ctx.fillRect(0, 0, canvas.width, canvas.height);
const image = new Image();
image.src = canvas.toDataURL();
const baseTexture = new PIXI.BaseTexture(image);
const texture = new PIXI.Texture(baseTexture);
solidTexturesCollection[blockName] = texture;
});
solidTexturesRef.current = solidTexturesCollection;
setLoading(false); setLoading(false);
}, []); }, []);
@ -85,7 +56,6 @@ export const TexturesProvider = ({ children }: Props) => {
missingTexture: missingTextureRef.current, missingTexture: missingTextureRef.current,
textures: texturesRef.current, textures: texturesRef.current,
programmerArtTextures: programmerArtTexturesRef.current, programmerArtTextures: programmerArtTexturesRef.current,
solidTextures: solidTexturesRef.current,
}} }}
> >
{children} {children}