broken i give up react SUCKS!
This commit is contained in:
parent
99d9f34ffd
commit
bc4ae32eb8
5 changed files with 80 additions and 35 deletions
|
@ -1,38 +1,23 @@
|
||||||
.App {
|
body {
|
||||||
text-align: center;
|
font-family: Arial, sans-serif;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.App-logo {
|
.toolbar {
|
||||||
height: 40vmin;
|
margin: 10px;
|
||||||
pointer-events: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (prefers-reduced-motion: no-preference) {
|
|
||||||
.App-logo {
|
|
||||||
animation: App-logo-spin infinite 20s linear;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.App-header {
|
|
||||||
background-color: #282c34;
|
|
||||||
min-height: 100vh;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
gap: 10px;
|
||||||
align-items: center;
|
}
|
||||||
justify-content: center;
|
|
||||||
font-size: calc(10px + 2vmin);
|
button {
|
||||||
|
padding: 10px;
|
||||||
|
background-color: #007bff;
|
||||||
color: white;
|
color: white;
|
||||||
|
border: none;
|
||||||
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.App-link {
|
button:hover {
|
||||||
color: #61dafb;
|
background-color: #0056b3;
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes App-logo-spin {
|
|
||||||
from {
|
|
||||||
transform: rotate(0deg);
|
|
||||||
}
|
|
||||||
to {
|
|
||||||
transform: rotate(360deg);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,3 +12,5 @@ const App = () => {
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export default App;
|
||||||
|
|
15
mapsy/src/components/ExportBtn.jsx
Normal file
15
mapsy/src/components/ExportBtn.jsx
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
const ExportBtn = ({ stageRef }) => {
|
||||||
|
const handleExport = () => {
|
||||||
|
const uri = stageRef.current.toDataURL();
|
||||||
|
const link = document.createElement('a');
|
||||||
|
link.download = 'map.png';
|
||||||
|
link.href = uri;
|
||||||
|
link.click();
|
||||||
|
};
|
||||||
|
|
||||||
|
return <button onClick={handleExport}>Export Map</button>;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default ExportButton
|
40
mapsy/src/components/MapMaker.jsx
Normal file
40
mapsy/src/components/MapMaker.jsx
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
import React, { useState } from 'react';
|
||||||
|
import { Stage, Layer, Rect } from 'react-konva';
|
||||||
|
import Grid from './Grid';
|
||||||
|
|
||||||
|
const MapMaker = ({ tool }) => {
|
||||||
|
const gridSize = 32;
|
||||||
|
const canvasSize = 512;
|
||||||
|
const [tiles, setTiles] = useState([]);
|
||||||
|
|
||||||
|
const handleClick = (event) => {
|
||||||
|
const x = Math.floor(event.evt.offsetX / gridSize) * gridSize;
|
||||||
|
const y = Math.floor(event.evt.offsetY / gridSize) * gridSize;
|
||||||
|
|
||||||
|
if (tool === 'draw') {
|
||||||
|
setTiles([...tiles, { x, y, color: 'green' }]);
|
||||||
|
} else if (tool === 'erase') {
|
||||||
|
setTiles(tiles.filter(tile => tile.x !== x || tile.y !== y));
|
||||||
|
};
|
||||||
|
};
|
||||||
|
return (
|
||||||
|
<Stage width={canvasSize} height={canvasSize} onClick={handleClick}>
|
||||||
|
<Layer>
|
||||||
|
<Grid gridSize={gridSize} canvasSize={canvasSize} />
|
||||||
|
{tiles.map((tile, index) => (
|
||||||
|
<Rect
|
||||||
|
key={index}
|
||||||
|
x={tile.x}
|
||||||
|
y={tile.y}
|
||||||
|
width={gridSize}
|
||||||
|
height={gridSize}
|
||||||
|
fill={tile.color}
|
||||||
|
/>
|
||||||
|
))}
|
||||||
|
</Layer>
|
||||||
|
</Stage>
|
||||||
|
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default MapMaker;
|
|
@ -1,11 +1,14 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import ReactDOM from 'react-dom/client';
|
import ReactDOM from 'react-dom/client';
|
||||||
import './index.css';
|
import './App.css';
|
||||||
import App from './App';
|
import App from './App';
|
||||||
|
|
||||||
ReactDOM.render(
|
const rootElement = document.getElementById('root');
|
||||||
|
|
||||||
|
const root = ReactDOM.createRoot(rootElement);
|
||||||
|
|
||||||
|
root.render(
|
||||||
<React.StrictMode>
|
<React.StrictMode>
|
||||||
<App />
|
<App />
|
||||||
</React.StrictMode>,
|
</React.StrictMode>
|
||||||
document.getElementById('root')
|
|
||||||
);
|
);
|
Loading…
Reference in a new issue