From 875624ed5a58638968d689b9c0a487e491ef9fc8 Mon Sep 17 00:00:00 2001 From: cha0s Date: Wed, 13 Apr 2022 15:40:54 -0500 Subject: [PATCH] feat: resizing tileSize and area --- .../src/persea/controllers/room/component.jsx | 23 +++++++++---- .../persea/room-sides/tiles-side/index.jsx | 34 +++++++++++++++++-- 2 files changed, 48 insertions(+), 9 deletions(-) diff --git a/packages/topdown/src/persea/controllers/room/component.jsx b/packages/topdown/src/persea/controllers/room/component.jsx index 44a33c2..f8c3ef3 100644 --- a/packages/topdown/src/persea/controllers/room/component.jsx +++ b/packages/topdown/src/persea/controllers/room/component.jsx @@ -94,13 +94,21 @@ const RoomComponent = ({ if (previousResource.tiles !== resource.tiles) { if (previousResource.tiles.length !== resource.tiles.length) { await room.loadTiles(resource.tiles); - roomRenderable.renderChunksForExtent(Rectangle.compose([0, 0], room.size)); + roomRenderable.invalidateAllChunks(); } else { for (let i = 0; i < resource.tiles.length; i++) { const element = resource.tiles[i]; if (element !== previousResource.tiles[i]) { - if (element.data && previousResource.tiles[i].data) { + if ( + element.tileSize !== previousResource.tiles[i].tileSize + || element.area !== previousResource.tiles[i].area + ) { + // eslint-disable-next-line no-await-in-loop + await room.tiles[i].load(resource.tiles[i]); + roomRenderable.invalidateAllChunks(); + } + else if (element.data && previousResource.tiles[i].data) { const currentData = Tiles.inflate(element.data); const previousData = Tiles.inflate(previousResource.tiles[i].data); const updates = []; @@ -112,12 +120,13 @@ const RoomComponent = ({ room.tiles[i].$$data = currentData; room.tiles[i].emit('update', room.tiles[i].whereFromUpdates(updates)); } - else if (element.data) { - room.tiles[i].$$data = Tiles.inflate(element.data); - room.tiles[i].emit('update', Rectangle.compose([0, 0], room.tiles[i].area)); - } else { - room.tiles[i].$$data = new Uint16Array(Vector.area(room.tiles[i].area)); + if (element.data) { + room.tiles[i].$$data = Tiles.inflate(element.data); + } + else { + room.tiles[i].$$data = new Uint16Array(Vector.area(room.tiles[i].area)); + } room.tiles[i].emit('update', Rectangle.compose([0, 0], room.tiles[i].area)); } } diff --git a/packages/topdown/src/persea/room-sides/tiles-side/index.jsx b/packages/topdown/src/persea/room-sides/tiles-side/index.jsx index 7c29c11..7eed232 100644 --- a/packages/topdown/src/persea/room-sides/tiles-side/index.jsx +++ b/packages/topdown/src/persea/room-sides/tiles-side/index.jsx @@ -24,6 +24,7 @@ import { React, useCallback, useEffect, + useFlecks, useState, } from '@flecks/react'; @@ -39,6 +40,7 @@ function TilesPage({ room, roomRenderable, }) { + const flecks = useFlecks(); const patch = useJsonPatcher(); const [currentLayer, setCurrentLayer] = useState(0); const [tilesetEvents, setTilesetEvents] = useState(); @@ -429,14 +431,42 @@ function TilesPage({