summaryrefslogtreecommitdiffstats
path: root/src/renderer/editor/library.tsx
blob: 4b7dac7e411d15c0986c01e5a032ac7157629b16 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import * as React from 'react';

import { makeStyles, Theme } from '@material-ui/core/styles';

import Box from '@material-ui/core/Box';
import Container from '@material-ui/core/Container';

import { Tiling } from './types';
import { useReadFile } from './util';

const useStyles = makeStyles((theme: Theme) => ({
	container: {
		display: 'flex',
		flexWrap: 'wrap',
	},
	tile: {
		imageRendering: 'pixelated',
		border: `solid 1px ${theme.palette.divider}`,
		background: theme.palette.background.paper,
		width: 128,
		height: 128,
		margin: 4,
	},
}));

const tilings: Tiling[] = [
	{
		size: 1,
		sprite: { name: 'dirt' },
	},
	{
		size: 1,
		sprite: { name: 'grass' },
	},
	{
		size: 1,
		sprite: { name: 'road_left' },
	},
	{
		size: 1,
		sprite: { name: 'road_right' },
	},
];

interface TilingDisplayProps {
	tiling: Tiling;
}

function TilingDisplay({ tiling }: TilingDisplayProps): JSX.Element | null {
	const classes = useStyles();

	let name: string;

	switch (tiling.size) {
		case 1:
			name = tiling.sprite.name;
			break;
		case 3:
			name = tiling.sprites[1][1].name;
			break;
	}

	const path = `static/resources/sprite/tile/${name}.png`;
	const image = useReadFile(path, 'base64');

	return <img src={image ? `data:image/png;base64,${image}` : undefined} className={classes.tile} />;
}

export function Library(): JSX.Element {
	const classes = useStyles();

	return (
		<Container>
			<Box display='inline-block'>
				<div className={classes.container}>
					{tilings.map((tiling, i) => (
						<TilingDisplay key={i} tiling={tiling} />
					))}
				</div>
			</Box>
		</Container>
	);
}