import { IonContent } from '@ionic/react'; import react, { useState } from 'react'; import './Map.css'; import MouseHandler from './MouseHandler'; import SlippyBoard from './SlippyBoard'; import SingleTouchHandler from './SingleTouchHandler'; import DoubleTouchHandler from './DoubleTouchHandler'; import TiledLayer from './TiledLayer'; interface MapProperties { height: number; width: number; } const Map: react.FC = (props: MapProperties) => { const nbTiles = Math.ceil((Math.max(props.width, props.height) * 2) / 256) + 2; const boardSize = nbTiles * 256; const [shift, setShift] = useState({ x: -boardSize / 2, y: -boardSize / 2 }); const [zoom, setZoom] = useState(1); const addShift = (deltaShift: { x: number; y: number }) => { setShift({ x: shift.x + deltaShift.x, y: shift.y + deltaShift.y }); }; const addZoom = ( zoomFactor: number, center: { x: number; y: number }, deltaShift: { x: number; y: number } = { x: 0, y: 0 } ) => { addShift({ x: (shift.x - center.x) * (zoomFactor - 1) + deltaShift.x, y: (shift.y - center.y) * (zoomFactor - 1) + deltaShift.y, }); setZoom(zoom * zoomFactor); }; console.log(`Rendering Map, zoom:${zoom}, shift:${JSON.stringify(shift)}`); return (
), }, { key: 'tiles1', content: ( ), }, { key: 'tiles2', transform: 'scale(.5)', content: ( = 2} /> ), }, { key: 'circle', content: }, ]} />
); }; export default Map;