2020-03-19 17:33:57 +11:00
|
|
|
import React from "react";
|
2020-03-20 11:05:40 +11:00
|
|
|
import { Image, Flex, Box } from "theme-ui";
|
2020-03-19 17:33:57 +11:00
|
|
|
|
2020-03-20 11:05:40 +11:00
|
|
|
import Token from "../components/Token";
|
2020-03-20 13:33:12 +11:00
|
|
|
import ProxyToken from "../components/ProxyToken";
|
|
|
|
|
|
|
|
|
|
const mapTokenClassName = "map-token";
|
|
|
|
|
|
|
|
|
|
function Map({ imageSource, tokens, onMapTokenMove, onMapTokenRemove }) {
|
|
|
|
|
function handleProxyDragEnd(isOnMap, token) {
|
|
|
|
|
if (isOnMap && onMapTokenMove) {
|
|
|
|
|
onMapTokenMove(token);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!isOnMap && onMapTokenRemove) {
|
|
|
|
|
onMapTokenRemove(token);
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-03-20 11:05:40 +11:00
|
|
|
|
2020-03-19 17:33:57 +11:00
|
|
|
return (
|
2020-03-20 13:33:12 +11:00
|
|
|
<>
|
|
|
|
|
<Flex
|
|
|
|
|
className="map"
|
|
|
|
|
sx={{ justifyContent: "center", flexGrow: 1 }}
|
|
|
|
|
bg="background"
|
2020-03-20 11:05:40 +11:00
|
|
|
>
|
2020-03-20 13:33:12 +11:00
|
|
|
<Box
|
|
|
|
|
sx={{
|
|
|
|
|
position: "absolute",
|
|
|
|
|
top: 0,
|
|
|
|
|
left: 0,
|
|
|
|
|
right: 0,
|
|
|
|
|
userSelect: "none"
|
|
|
|
|
}}
|
|
|
|
|
>
|
|
|
|
|
{Object.values(tokens).map(token => (
|
|
|
|
|
<Box
|
|
|
|
|
key={token.id}
|
|
|
|
|
sx={{
|
|
|
|
|
position: "absolute",
|
|
|
|
|
transform: `translate(${token.x}px, ${token.y}px)`
|
|
|
|
|
}}
|
|
|
|
|
>
|
|
|
|
|
<Token
|
|
|
|
|
tokenId={token.id}
|
|
|
|
|
image={token.image}
|
|
|
|
|
className={mapTokenClassName}
|
|
|
|
|
/>
|
|
|
|
|
</Box>
|
|
|
|
|
))}
|
|
|
|
|
</Box>
|
|
|
|
|
<Image src={imageSource} sx={{ objectFit: "contain" }} />
|
|
|
|
|
</Flex>
|
|
|
|
|
<ProxyToken
|
|
|
|
|
tokenClassName={mapTokenClassName}
|
|
|
|
|
onProxyDragEnd={handleProxyDragEnd}
|
|
|
|
|
/>
|
|
|
|
|
</>
|
2020-03-19 17:33:57 +11:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default Map;
|