Skip to content

Commit 8a56d89

Browse files
cursoragent4ian
andcommitted
Remove Flow %checks from tile map selection helper
Co-authored-by: Florian Rival <4ian@users.noreply.github.com>
1 parent ab0dbb2 commit 8a56d89

File tree

4 files changed

+91
-77
lines changed

4 files changed

+91
-77
lines changed

newIDE/app/src/InstancesEditor/TileMapPaintingPreview.js

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import RenderedInstance from '../ObjectsRendering/Renderers/RenderedInstance';
99
import Rendered3DInstance from '../ObjectsRendering/Renderers/Rendered3DInstance';
1010
import {
1111
type TileMapTileSelection,
12-
isTileMapPaintingSelection,
12+
getTileMapPaintingSelection,
1313
} from './TileSetVisualizer';
1414
import { AffineTransformation } from '../Utils/AffineTransformation';
1515
import {
@@ -265,6 +265,7 @@ class TileMapPaintingPreview {
265265
return null;
266266
}
267267
const container = new PIXI.Container();
268+
const paintingSelection = getTileMapPaintingSelection(tileMapTileSelection);
268269
tilesCoordinatesInTileMapGrid.forEach(tilesCoordinates => {
269270
const {
270271
bottomRightCorner,
@@ -275,10 +276,7 @@ class TileMapPaintingPreview {
275276
if (isBadlyConfigured) {
276277
texture = PixiResourcesLoader.getInvalidPIXITexture();
277278
} else {
278-
if (
279-
isTileMapPaintingSelection(tileMapTileSelection) &&
280-
tileCoordinates
281-
) {
279+
if (paintingSelection && tileCoordinates) {
282280
texture = this._getTextureInAtlas({
283281
tileSet,
284282
...tileCoordinates,
@@ -297,8 +295,12 @@ class TileMapPaintingPreview {
297295
texture,
298296
scaleX,
299297
scaleY,
300-
flipHorizontally: tileMapTileSelection.flipHorizontally || false,
301-
flipVertically: tileMapTileSelection.flipVertically || false,
298+
flipHorizontally: paintingSelection
299+
? paintingSelection.flipHorizontally
300+
: false,
301+
flipVertically: paintingSelection
302+
? paintingSelection.flipVertically
303+
: false,
302304
tileSize,
303305
angle: instance.getAngle(),
304306
});
@@ -326,10 +328,11 @@ class TileMapPaintingPreview {
326328
if (!object || object.getType() !== 'TileMap::SimpleTileMap') return;
327329
const tileSet = getTileSet(object);
328330
const isBadlyConfigured = isTileSetBadlyConfigured(tileSet);
331+
const paintingSelection = getTileMapPaintingSelection(tileMapTileSelection);
329332

330333
if (
331334
isBadlyConfigured ||
332-
isTileMapPaintingSelection(tileMapTileSelection) ||
335+
paintingSelection ||
333336
tileMapTileSelection.kind === 'erase'
334337
) {
335338
const container = this._getPreviewSprites({

newIDE/app/src/InstancesEditor/TileSetVisualizer.js

Lines changed: 61 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -193,11 +193,7 @@ const Tile = ({
193193
);
194194
};
195195

196-
export type TileMapTileSelection =
197-
| {|
198-
kind: 'multiple',
199-
coordinates: TileMapCoordinates[],
200-
|}
196+
export type TileMapPaintingSelection =
201197
| {|
202198
kind: 'rectangle',
203199
coordinates: TileMapCoordinates[],
@@ -215,20 +211,38 @@ export type TileMapTileSelection =
215211
coordinates: TileMapCoordinates[],
216212
flipHorizontally: boolean,
217213
flipVertically: boolean,
214+
|};
215+
216+
export type TileMapTileSelection =
217+
| {|
218+
kind: 'multiple',
219+
coordinates: TileMapCoordinates[],
218220
|}
221+
| TileMapPaintingSelection
219222
| {|
220223
kind: 'picker',
221224
|}
222225
| {|
223226
kind: 'erase',
224227
|};
225228

229+
export const getTileMapPaintingSelection = (
230+
selection: ?TileMapTileSelection
231+
): ?TileMapPaintingSelection => {
232+
if (!selection) return null;
233+
if (
234+
selection.kind === 'rectangle' ||
235+
selection.kind === 'freehand' ||
236+
selection.kind === 'floodfill'
237+
) {
238+
return selection;
239+
}
240+
return null;
241+
};
242+
226243
export const isTileMapPaintingSelection = (
227244
selection: TileMapTileSelection
228-
): boolean %checks =>
229-
selection.kind === 'rectangle' ||
230-
selection.kind === 'freehand' ||
231-
selection.kind === 'floodfill';
245+
): boolean => !!getTileMapPaintingSelection(selection);
232246

233247
/**
234248
* Creates a tile selection with the picked tile coordinates,
@@ -240,17 +254,16 @@ export const createSelectionWithPreviousTool = (
240254
coordinates: TileMapCoordinates[],
241255
defaultFlips: {| horizontal: boolean, vertical: boolean |}
242256
): TileMapTileSelection => {
257+
const previousPaintingTool = getTileMapPaintingSelection(previousTool);
243258
const kind =
244-
previousTool && isTileMapPaintingSelection(previousTool)
245-
? previousTool.kind
246-
: 'rectangle';
259+
previousPaintingTool ? previousPaintingTool.kind : 'rectangle';
247260
const flipHorizontally =
248-
previousTool && isTileMapPaintingSelection(previousTool)
249-
? previousTool.flipHorizontally
261+
previousPaintingTool
262+
? previousPaintingTool.flipHorizontally
250263
: defaultFlips.horizontal;
251264
const flipVertically =
252-
previousTool && isTileMapPaintingSelection(previousTool)
253-
? previousTool.flipVertically
265+
previousPaintingTool
266+
? previousPaintingTool.flipVertically
254267
: defaultFlips.vertical;
255268

256269
return {
@@ -311,6 +324,10 @@ const TileSetVisualizer = ({
311324
setLastSelection,
312325
] = React.useState<?TileMapTileSelection>(null);
313326
const previousToolRef = React.useRef<?TileMapTileSelection>(null);
327+
const tileMapPaintingSelection = getTileMapPaintingSelection(
328+
tileMapTileSelection
329+
);
330+
const lastPaintingSelection = getTileMapPaintingSelection(lastSelection);
314331
const tilesetContainerRef = React.useRef<?HTMLDivElement>(null);
315332
const tilesetAndTooltipContainerRef = React.useRef<?HTMLDivElement>(null);
316333
const [tooltipContent, setTooltipContent] = React.useState<?{|
@@ -655,14 +672,11 @@ const TileSetVisualizer = ({
655672

656673
React.useEffect(
657674
() => {
658-
if (
659-
tileMapTileSelection &&
660-
isTileMapPaintingSelection(tileMapTileSelection)
661-
) {
662-
setLastSelection(tileMapTileSelection);
675+
if (tileMapPaintingSelection) {
676+
setLastSelection(tileMapPaintingSelection);
663677
}
664678
},
665-
[tileMapTileSelection]
679+
[tileMapPaintingSelection]
666680
);
667681

668682
const onHoverAtlas = React.useCallback(
@@ -777,9 +791,8 @@ const TileSetVisualizer = ({
777791
onSelectTileMapTile({
778792
kind: 'freehand',
779793
coordinates:
780-
lastSelection &&
781-
isTileMapPaintingSelection(lastSelection)
782-
? lastSelection.coordinates
794+
lastPaintingSelection
795+
? lastPaintingSelection.coordinates
783796
: [{ x: 0, y: 0 }, { x: 0, y: 0 }],
784797
flipHorizontally: shouldFlipHorizontally,
785798
flipVertically: shouldFlipVertically,
@@ -810,9 +823,8 @@ const TileSetVisualizer = ({
810823
: {
811824
kind: 'rectangle',
812825
coordinates:
813-
lastSelection &&
814-
isTileMapPaintingSelection(lastSelection)
815-
? lastSelection.coordinates
826+
lastPaintingSelection
827+
? lastPaintingSelection.coordinates
816828
: [{ x: 0, y: 0 }, { x: 0, y: 0 }],
817829
flipHorizontally: shouldFlipHorizontally,
818830
flipVertically: shouldFlipVertically,
@@ -841,9 +853,8 @@ const TileSetVisualizer = ({
841853
onSelectTileMapTile({
842854
kind: 'floodfill',
843855
coordinates:
844-
lastSelection &&
845-
isTileMapPaintingSelection(lastSelection)
846-
? lastSelection.coordinates
856+
lastPaintingSelection
857+
? lastPaintingSelection.coordinates
847858
: [{ x: 0, y: 0 }, { x: 0, y: 0 }],
848859
flipHorizontally: shouldFlipHorizontally,
849860
flipVertically: shouldFlipVertically,
@@ -912,16 +923,14 @@ const TileSetVisualizer = ({
912923
onClick={e => {
913924
const newShouldFlipHorizontally = !shouldFlipHorizontally;
914925
setShouldFlipHorizontally(newShouldFlipHorizontally);
915-
if (
916-
!!tileMapTileSelection &&
917-
isTileMapPaintingSelection(tileMapTileSelection)
918-
) {
919-
const paintingSelection = tileMapTileSelection;
926+
if (tileMapPaintingSelection) {
920927
const selection: TileMapTileSelection = {
921-
kind: (paintingSelection.kind: any),
922-
coordinates: (paintingSelection.coordinates: TileMapCoordinates[]),
928+
kind: (tileMapPaintingSelection.kind: any),
929+
coordinates: (
930+
tileMapPaintingSelection.coordinates: TileMapCoordinates[]
931+
),
923932
flipHorizontally: newShouldFlipHorizontally,
924-
flipVertically: paintingSelection.flipVertically,
933+
flipVertically: tileMapPaintingSelection.flipVertically,
925934
};
926935
onSelectTileMapTile(selection);
927936
}
@@ -942,15 +951,13 @@ const TileSetVisualizer = ({
942951
onClick={e => {
943952
const newShouldFlipVertically = !shouldFlipVertically;
944953
setShouldFlipVertically(newShouldFlipVertically);
945-
if (
946-
!!tileMapTileSelection &&
947-
isTileMapPaintingSelection(tileMapTileSelection)
948-
) {
949-
const paintingSelection = tileMapTileSelection;
954+
if (tileMapPaintingSelection) {
950955
const selection: TileMapTileSelection = {
951-
kind: (paintingSelection.kind: any),
952-
coordinates: (paintingSelection.coordinates: TileMapCoordinates[]),
953-
flipHorizontally: paintingSelection.flipHorizontally,
956+
kind: (tileMapPaintingSelection.kind: any),
957+
coordinates: (
958+
tileMapPaintingSelection.coordinates: TileMapCoordinates[]
959+
),
960+
flipHorizontally: tileMapPaintingSelection.flipHorizontally,
954961
flipVertically: newShouldFlipVertically,
955962
};
956963
onSelectTileMapTile(selection);
@@ -998,23 +1005,21 @@ const TileSetVisualizer = ({
9981005
y={hoveredTile.y}
9991006
/>
10001007
)}
1001-
{tileMapTileSelection &&
1002-
isTileMapPaintingSelection(tileMapTileSelection) &&
1003-
displayedTileSize && (
1008+
{tileMapPaintingSelection && displayedTileSize && (
10041009
<Tile
10051010
key={`selected-tile`}
10061011
highlighted
10071012
size={displayedTileSize}
1008-
x={tileMapTileSelection.coordinates[0].x}
1009-
y={tileMapTileSelection.coordinates[0].y}
1013+
x={tileMapPaintingSelection.coordinates[0].x}
1014+
y={tileMapPaintingSelection.coordinates[0].y}
10101015
width={
1011-
tileMapTileSelection.coordinates[1].x -
1012-
tileMapTileSelection.coordinates[0].x +
1016+
tileMapPaintingSelection.coordinates[1].x -
1017+
tileMapPaintingSelection.coordinates[0].x +
10131018
1
10141019
}
10151020
height={
1016-
tileMapTileSelection.coordinates[1].y -
1017-
tileMapTileSelection.coordinates[0].y +
1021+
tileMapPaintingSelection.coordinates[1].y -
1022+
tileMapPaintingSelection.coordinates[0].y +
10181023
1
10191024
}
10201025
/>

newIDE/app/src/InstancesEditor/index.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ import {
5151
getGridCoordinatesFromTileId,
5252
createSelectionWithPreviousTool,
5353
type TileMapTileSelection,
54-
isTileMapPaintingSelection,
54+
getTileMapPaintingSelection,
5555
} from './TileSetVisualizer';
5656
import ClickInterceptor from './ClickInterceptor';
5757
import getObjectByName from '../Utils/GetObjectByName';
@@ -1009,7 +1009,11 @@ export default class InstancesEditor extends Component<Props, State> {
10091009
}
10101010
}
10111011
}
1012-
} else if (isTileMapPaintingSelection(tileMapTileSelection)) {
1012+
} else if (getTileMapPaintingSelection(tileMapTileSelection)) {
1013+
const paintingSelection = getTileMapPaintingSelection(
1014+
tileMapTileSelection
1015+
);
1016+
if (!paintingSelection) return;
10131017
shouldTrimAfterOperations = editableTileMap.isEmpty();
10141018
// TODO: Optimize list execution to make sure the most important size changing operations are done first.
10151019
let cumulatedUnshiftedRows = 0,
@@ -1074,13 +1078,13 @@ export default class InstancesEditor extends Component<Props, State> {
10741078
newX,
10751079
newY,
10761080
0,
1077-
tileMapTileSelection.flipHorizontally
1081+
paintingSelection.flipHorizontally
10781082
);
10791083
editableTileMap.flipTileOnY(
10801084
newX,
10811085
newY,
10821086
0,
1083-
tileMapTileSelection.flipVertically
1087+
paintingSelection.flipVertically
10841088
);
10851089

10861090
cumulatedUnshiftedRows += rowsToUnshift;

newIDE/app/src/Utils/TileMap.js

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import { AffineTransformation } from './AffineTransformation';
33
import {
44
type TileMapTileSelection,
5-
isTileMapPaintingSelection,
5+
getTileMapPaintingSelection,
66
} from '../InstancesEditor/TileSetVisualizer';
77

88
export type TileMapTilePatch = {|
@@ -206,9 +206,10 @@ const getTileCorrespondingToFlippingInstructions = ({
206206
tileMapTileSelection: TileMapTileSelection,
207207
tileCoordinates: {| x: number, y: number |},
208208
|}): {| x: number, y: number |} => {
209-
if (isTileMapPaintingSelection(tileMapTileSelection)) {
210-
const selectionTopLeftCorner = tileMapTileSelection.coordinates[0];
211-
const selectionBottomRightCorner = tileMapTileSelection.coordinates[1];
209+
const paintingSelection = getTileMapPaintingSelection(tileMapTileSelection);
210+
if (paintingSelection) {
211+
const selectionTopLeftCorner = paintingSelection.coordinates[0];
212+
const selectionBottomRightCorner = paintingSelection.coordinates[1];
212213
const selectionWidth =
213214
selectionBottomRightCorner.x - selectionTopLeftCorner.x + 1;
214215
const selectionHeight =
@@ -217,12 +218,12 @@ const getTileCorrespondingToFlippingInstructions = ({
217218
const deltaY = tileCoordinates.y - selectionTopLeftCorner.y;
218219
const newX =
219220
selectionTopLeftCorner.x +
220-
(tileMapTileSelection.flipHorizontally
221+
(paintingSelection.flipHorizontally
221222
? selectionWidth - deltaX - 1
222223
: deltaX);
223224
const newY =
224225
selectionTopLeftCorner.y +
225-
(tileMapTileSelection.flipVertically
226+
(paintingSelection.flipVertically
226227
? selectionHeight - deltaY - 1
227228
: deltaY);
228229
return { x: newX, y: newY };
@@ -296,10 +297,11 @@ export const getTilesGridCoordinatesFromPointerSceneCoordinates = ({
296297

297298
// Single tile, rectangle, floodfill, or erase mode
298299
let tileCoordinates;
299-
if (isTileMapPaintingSelection(tileMapTileSelection)) {
300-
const topLeftCorner = tileMapTileSelection.coordinates[0];
300+
const paintingSelection = getTileMapPaintingSelection(tileMapTileSelection);
301+
if (paintingSelection) {
302+
const topLeftCorner = paintingSelection.coordinates[0];
301303
tileCoordinates = getTileCorrespondingToFlippingInstructions({
302-
tileMapTileSelection,
304+
tileMapTileSelection: paintingSelection,
303305
tileCoordinates: topLeftCorner,
304306
});
305307
}

0 commit comments

Comments
 (0)