Skip to content

Commit 50c0de7

Browse files
authored
Merge pull request #349 from CCDirectLink/entity-rendering
Improved Entity rendering + qol
2 parents 45b41d5 + 4a94ca3 commit 50c0de7

95 files changed

Lines changed: 9484 additions & 860 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,21 @@ All notable changes to this project will be documented in this file.
44
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
55

66
## [Unreleased]
7+
### Added
8+
- Added "File > Export PNG" to export the current map as a pixel perfect PNG image.
9+
- Added "Maps" widget which shows a button to load the target map directly
10+
- Generating new entities now adds default properties to it
11+
- All entities with graphics should render correctly now
12+
- improved enemy rendering and respects face direction
13+
- Added "exclude" filter to entities
14+
15+
### Changed
16+
- Increased dropdown size for String widget
17+
18+
### Fixed
19+
- Selecting an entity with the grid enabled no longer snaps it automatically until the user actually drags it.
20+
- Fixed rendering of preview image in ScalableProp causing layout jumps
21+
722
## [2.2.0] 2026-04-03
823
### Changed
924
- Moved "vanilla maps" toggle from settings into the map loading dialog to allow quick switching between mod and vanilla maps [#347](https://github.com/CCDirectLink/crosscode-map-editor/issues/347)

backend/src/server.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,11 @@ app.get('/api/allFilesInFolder', async (req, res) => res.json(await api.getAllFi
2929
app.get('/api/allMods', async (_, res) => res.json(await api.getAllMods(config.pathToCrosscode)));
3030
app.get('/api/allModMapEditorConfigs', async (_, res) => res.json(await api.getAllModMapEditorConfigs(config.pathToCrosscode)));
3131
app.post('/api/get', async (req, res) => {
32-
res.json(await api.get(config.pathToCrosscode, req.body.path));
32+
try {
33+
res.json(await api.get(config.pathToCrosscode, req.body.path));
34+
} catch (err) {
35+
res.status(404).json(err);
36+
}
3337
});
3438
app.post('/api/resolve', async (req, res) => {
3539
try {

test-maps/test-all-props.json

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

test-maps/test-item-destruct.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"name":"tests/test-item-destruct","levels":[{"height":0}],"mapWidth":37,"mapHeight":28,"masterLevel":0,"attributes":{"saveMode":"ENABLED","volume":1,"bgm":"cargoShip","cameraInBounds":false,"map-sounds":"CARGO_SHIP_OUTSIDE","mapStyle":"default","weather":"BERGEN_SUNNY","area":"autumn-area","npcRunners":"CROSSCENTRAL"},"screen":{"x":0,"y":0},"entities":[{"type":"Marker","x":87,"y":71,"level":0,"settings":{"name":"start","dir":"SOUTH","mapId":1,"size":{"x":16,"y":16,"z":0}}},{"type":"ItemDestruct","x":28,"y":40,"level":0,"settings":{"desType":"Autumn-Fall-Ground-1","mapId":2}},{"type":"ItemDestruct","x":58,"y":40,"level":0,"settings":{"desType":"Autumn-Fall-Ground-2","mapId":3}},{"type":"ItemDestruct","x":88,"y":40,"level":0,"settings":{"desType":"Autumn-Fall-Special","mapId":4}},{"type":"ItemDestruct","x":118,"y":40,"level":0,"settings":{"desType":"Autumn-Fall-Water-1","mapId":5}},{"type":"ItemDestruct","x":148,"y":40,"level":0,"settings":{"desType":"Autumn-Fall-Water-2","mapId":6}},{"type":"ItemDestruct","x":178,"y":40,"level":0,"settings":{"desType":"Autumn-Fall-Water-Special","mapId":7}},{"type":"ItemDestruct","x":208,"y":40,"level":0,"settings":{"desType":"Autumn-Ground-1","mapId":8}},{"type":"ItemDestruct","x":238,"y":40,"level":0,"settings":{"desType":"Autumn-Ground-2","mapId":9}},{"type":"ItemDestruct","x":268,"y":40,"level":0,"settings":{"desType":"Autumn-Special","mapId":10}},{"type":"ItemDestruct","x":298,"y":40,"level":0,"settings":{"desType":"Autumn-Water-1","mapId":11}},{"type":"ItemDestruct","x":328,"y":40,"level":0,"settings":{"desType":"Autumn-Water-2","mapId":12}},{"type":"ItemDestruct","x":358,"y":40,"level":0,"settings":{"desType":"Autumn-Water-Special","mapId":13}},{"type":"ItemDestruct","x":388,"y":40,"level":0,"settings":{"desType":"AutumnPlantA","mapId":14}},{"type":"ItemDestruct","x":24,"y":82,"level":0,"settings":{"desType":"Bakii-Vase","mapId":15}},{"type":"ItemDestruct","x":28,"y":116,"level":0,"settings":{"desType":"Bergen-PlantA-1","mapId":16}},{"type":"ItemDestruct","x":58,"y":116,"level":0,"settings":{"desType":"Bergen-PlantA-1-Snow","mapId":17}},{"type":"ItemDestruct","x":88,"y":116,"level":0,"settings":{"desType":"Bergen-PlantA-2","mapId":18}},{"type":"ItemDestruct","x":118,"y":116,"level":0,"settings":{"desType":"Bergen-PlantA-2-Snow","mapId":19}},{"type":"ItemDestruct","x":148,"y":116,"level":0,"settings":{"desType":"Bergen-PlantA-Rare","mapId":20}},{"type":"ItemDestruct","x":178,"y":116,"level":0,"settings":{"desType":"Bergen-PlantA-Snow-Rare","mapId":21}},{"type":"ItemDestruct","x":208,"y":116,"level":0,"settings":{"desType":"Bergen-PlantB-1","mapId":22}},{"type":"ItemDestruct","x":238,"y":116,"level":0,"settings":{"desType":"Bergen-PlantB-1-Snow","mapId":23}},{"type":"ItemDestruct","x":268,"y":116,"level":0,"settings":{"desType":"Bergen-PlantB-2","mapId":24}},{"type":"ItemDestruct","x":298,"y":116,"level":0,"settings":{"desType":"Bergen-PlantB-2-Snow","mapId":25}},{"type":"ItemDestruct","x":328,"y":116,"level":0,"settings":{"desType":"Bergen-PlantB-Rare","mapId":26}},{"type":"ItemDestruct","x":358,"y":116,"level":0,"settings":{"desType":"Bergen-PlantB-Snow-Rare","mapId":27}},{"type":"ItemDestruct","x":388,"y":116,"level":0,"settings":{"desType":"Bergen-Snow-Crystal","mapId":28}},{"type":"ItemDestruct","x":414,"y":118,"level":0,"settings":{"desType":"Bergen-Vase-1","mapId":29}},{"type":"ItemDestruct","x":25,"y":154,"level":0,"settings":{"desType":"Cold-Dng-Egg-1","mapId":30}},{"type":"ItemDestruct","x":47,"y":154,"level":0,"settings":{"desType":"Cold-Dng-Egg-2","mapId":31}},{"type":"ItemDestruct","x":69,"y":154,"level":0,"settings":{"desType":"Cold-Dng-Egg-3","mapId":32}},{"type":"ItemDestruct","x":94,"y":154,"level":0,"settings":{"desType":"Cold-Dng-Egg-4","mapId":33}},{"type":"ItemDestruct","x":130,"y":162,"level":0,"settings":{"desType":"Cold-Dng-Egg-Special-A","mapId":34}},{"type":"ItemDestruct","x":176,"y":162,"level":0,"settings":{"desType":"Cold-Dng-Egg-Special-B","mapId":35}},{"type":"ItemDestruct","x":28,"y":208,"level":0,"settings":{"desType":"Heat-Bones-1","mapId":36}},{"type":"ItemDestruct","x":58,"y":208,"level":0,"settings":{"desType":"Heat-Bones-2","mapId":37}},{"type":"ItemDestruct","x":88,"y":208,"level":0,"settings":{"desType":"Heat-Bones-Special","mapId":38}},{"type":"ItemDestruct","x":118,"y":208,"level":0,"settings":{"desType":"Heat-Cactus-1","mapId":39}},{"type":"ItemDestruct","x":148,"y":208,"level":0,"settings":{"desType":"Heat-Cactus-2","mapId":40}},{"type":"ItemDestruct","x":178,"y":208,"level":0,"settings":{"desType":"Heat-Cactus-Special","mapId":41}},{"type":"ItemDestruct","x":208,"y":208,"level":0,"settings":{"desType":"Heat-Dry-Bush-1","mapId":42}},{"type":"ItemDestruct","x":238,"y":208,"level":0,"settings":{"desType":"Heat-Dry-Bush-2","mapId":43}},{"type":"ItemDestruct","x":268,"y":208,"level":0,"settings":{"desType":"Heat-Dry-Bush-Special","mapId":44}},{"type":"ItemDestruct","x":298,"y":208,"level":0,"settings":{"desType":"Heat-Dry-Cactus-1","mapId":45}},{"type":"ItemDestruct","x":328,"y":208,"level":0,"settings":{"desType":"Heat-Dry-Cactus-2","mapId":46}},{"type":"ItemDestruct","x":358,"y":208,"level":0,"settings":{"desType":"Heat-Hill-1","mapId":47}},{"type":"ItemDestruct","x":388,"y":208,"level":0,"settings":{"desType":"Heat-Hill-2","mapId":48}},{"type":"ItemDestruct","x":418,"y":208,"level":0,"settings":{"desType":"Heat-Hill-Special","mapId":49}},{"type":"ItemDestruct","x":448,"y":208,"level":0,"settings":{"desType":"Heat-Palmapple-1","mapId":50}},{"type":"ItemDestruct","x":478,"y":208,"level":0,"settings":{"desType":"Heat-Palmapple-2","mapId":51}},{"type":"ItemDestruct","x":508,"y":208,"level":0,"settings":{"desType":"Heat-Palmapple-Special","mapId":52}},{"type":"ItemDestruct","x":28,"y":246,"level":0,"settings":{"desType":"Jungle-Bees-1","mapId":53}},{"type":"ItemDestruct","x":58,"y":246,"level":0,"settings":{"desType":"Jungle-Bees-2","mapId":54}},{"type":"ItemDestruct","x":88,"y":246,"level":0,"settings":{"desType":"Jungle-Bees-3","mapId":55}},{"type":"ItemDestruct","x":118,"y":246,"level":0,"settings":{"desType":"Jungle-Flower-1","mapId":56}},{"type":"ItemDestruct","x":148,"y":246,"level":0,"settings":{"desType":"Jungle-Flower-2","mapId":57}},{"type":"ItemDestruct","x":178,"y":246,"level":0,"settings":{"desType":"Jungle-Flower-Dotted-1","mapId":58}},{"type":"ItemDestruct","x":208,"y":246,"level":0,"settings":{"desType":"Jungle-Flower-Dotted-2","mapId":59}},{"type":"ItemDestruct","x":238,"y":246,"level":0,"settings":{"desType":"Jungle-Flower-Dotted-Special","mapId":60}},{"type":"ItemDestruct","x":268,"y":246,"level":0,"settings":{"desType":"Jungle-Flower-Special","mapId":61}},{"type":"ItemDestruct","x":298,"y":246,"level":0,"settings":{"desType":"Jungle-Shroom-1","mapId":62}},{"type":"ItemDestruct","x":328,"y":246,"level":0,"settings":{"desType":"Jungle-Shroom-2","mapId":63}},{"type":"ItemDestruct","x":358,"y":246,"level":0,"settings":{"desType":"Jungle-Shroom-Special","mapId":64}},{"type":"ItemDestruct","x":388,"y":246,"level":0,"settings":{"desType":"Jungle-Waterplant-1","mapId":65}},{"type":"ItemDestruct","x":418,"y":246,"level":0,"settings":{"desType":"Jungle-Waterplant-2","mapId":66}},{"type":"ItemDestruct","x":448,"y":246,"level":0,"settings":{"desType":"Jungle-Waterplant-Closed-1","mapId":67}},{"type":"ItemDestruct","x":478,"y":246,"level":0,"settings":{"desType":"Jungle-Waterplant-Closed-2","mapId":68}},{"type":"ItemDestruct","x":508,"y":246,"level":0,"settings":{"desType":"Jungle-Waterplant-Special","mapId":69}},{"type":"ItemDestruct","x":28,"y":284,"level":0,"settings":{"desType":"Sapphire-Bamboo-1","mapId":70}},{"type":"ItemDestruct","x":58,"y":284,"level":0,"settings":{"desType":"Sapphire-Bamboo-2","mapId":71}},{"type":"ItemDestruct","x":88,"y":284,"level":0,"settings":{"desType":"Sapphire-Bamboo-Special","mapId":72}},{"type":"ItemDestruct","x":118,"y":284,"level":0,"settings":{"desType":"Sapphire-Bush-1","mapId":73}},{"type":"ItemDestruct","x":148,"y":284,"level":0,"settings":{"desType":"Sapphire-Bush-2","mapId":74}},{"type":"ItemDestruct","x":178,"y":284,"level":0,"settings":{"desType":"Sapphire-Bush-Special","mapId":75}},{"type":"ItemDestruct","x":208,"y":284,"level":0,"settings":{"desType":"Sapphire-Cobalt-1","mapId":76}},{"type":"ItemDestruct","x":238,"y":284,"level":0,"settings":{"desType":"Sapphire-Cobalt-2","mapId":77}},{"type":"ItemDestruct","x":268,"y":284,"level":0,"settings":{"desType":"Sapphire-Cobalt-Special","mapId":78}},{"type":"ItemDestruct","x":28,"y":322,"level":0,"settings":{"desType":"StoneOfAges","mapId":79}},{"type":"ItemDestruct","x":58,"y":322,"level":0,"settings":{"desType":"StoneOfNothing","mapId":80}},{"type":"ItemDestruct","x":88,"y":322,"level":0,"settings":{"desType":"StoneOfSpace","mapId":81}},{"type":"ItemDestruct","x":118,"y":322,"level":0,"settings":{"desType":"StoneOfSpirit","mapId":82}},{"type":"ItemDestruct","x":148,"y":322,"level":0,"settings":{"desType":"StoneOfTruth","mapId":83}},{"type":"ItemDestruct","x":178,"y":322,"level":0,"settings":{"desType":"StoneOfValor","mapId":84}},{"type":"ItemDestruct","x":24,"y":360,"level":0,"settings":{"desType":"TrashBag1","mapId":85}},{"type":"ItemDestruct","x":62,"y":360,"level":0,"settings":{"desType":"TrashBag2","mapId":86}},{"type":"ItemDestruct","x":100,"y":368,"level":0,"settings":{"desType":"TrashBag3","mapId":87}},{"type":"ItemDestruct","x":138,"y":368,"level":0,"settings":{"desType":"TrashBag4","mapId":88}}],"layer":[{"id":1,"type":"Background","name":"Ground","level":0,"width":37,"height":28,"visible":1,"tilesetName":"media/map/autumn-outside.png","repeat":false,"distance":1,"tilesize":16,"moveSpeed":{"x":0,"y":0},"data":[[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,754,1,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,754,1,1,1,1,754,1,1,754,1,1,1,754,1,1,1,1,754,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,754,1,1,1,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,754,1,1,1,1,754,1,754,754,1,1,1,1,1,1,1,1,1,1,1,1,1,754,1,754,1,1,1,1,1,1,1],[1,754,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,754,1,754,1,754,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,754,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,21,1,1,1,1,1,754,1,1,754,1,754,1,1,1,1,1,1,1,1,1,1,1,754,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,754,1,754,1,754,1,1,1,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,754,1,1,1,1,754,754,1,1,1],[1,1,1,754,1,1,754,1,1,1,1,1,1,1,1,1,754,1,754,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,754,1,1,1,1,1,1,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1,754,1,1,1,1,754,1,1,1,1,1,1,1],[1,1,1,1,754,1,1,1,1,1,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,754,1,1,1,1,754,1,1,754,1,1,1,754,1,1,1,1,754,1,1,754,1,1,1,1,754,1,1,754,1,754,1,1,1,1,1],[1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1,1,754,1,754,1,754,1,754,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,754,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,754,1,1,1,754,1,1,1,1,754,1,1,754,1,1,1,1,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,754,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,754,754,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,754,1,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]],"lighter":false},{"type":"Collision","name":"Coll","level":0,"width":37,"height":28,"visible":1,"tilesetName":"media/map/collisiontiles-16x16.png","repeat":false,"distance":1,"tilesize":16,"moveSpeed":{"x":0,"y":0},"data":[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]],"lighter":false}]}

test-maps/test-scale-prop.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

tools/entityFinder.html

Lines changed: 68 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,54 @@
11
<html>
22
<style>
3-
table {
4-
font-family: arial, sans-serif;
5-
border-collapse: collapse;
6-
width: 100%;
7-
}
8-
9-
td, th {
10-
border: 1px solid #dddddd;
11-
text-align: left;
12-
padding: 8px;
13-
}
14-
15-
tr {
16-
background-color: rgba(0, 0, 0, 0.1);
17-
}
18-
19-
tr:first-child {
20-
background-color: rgba(0, 0, 0, 0.34);
21-
}
22-
23-
body {
24-
padding: 0;
25-
margin: 0;
26-
display: flex;
27-
flex-direction: column;
28-
background-color: #def;
29-
font-family: Roboto, sans-serif;
30-
color: white;
31-
}
32-
33-
.container1 {
34-
overflow: hidden;
35-
flex: 0 1 auto;
36-
padding: 20px;
37-
background-color: #e6594c;
38-
}
39-
40-
.container2 {
41-
flex: 1 1 0;
42-
padding: 20px;
43-
background-color: #419932;
44-
}
45-
46-
#listing {
47-
flex: 1 1 0;
48-
max-height: 300px;
49-
min-height: 0;
50-
overflow-y: auto;
51-
}
3+
table {
4+
font-family: arial, sans-serif;
5+
border-collapse: collapse;
6+
width: 100%;
7+
}
8+
9+
td, th {
10+
border: 1px solid #dddddd;
11+
text-align: left;
12+
padding: 8px;
13+
}
14+
15+
tr {
16+
background-color: rgba(0, 0, 0, 0.1);
17+
}
18+
19+
tr:first-child {
20+
background-color: rgba(0, 0, 0, 0.34);
21+
}
22+
23+
body {
24+
padding: 0;
25+
margin: 0;
26+
display: flex;
27+
flex-direction: column;
28+
background-color: #def;
29+
font-family: Roboto, sans-serif;
30+
color: white;
31+
}
32+
33+
.container1 {
34+
overflow: hidden;
35+
flex: 0 1 auto;
36+
padding: 20px;
37+
background-color: #e6594c;
38+
}
39+
40+
.container2 {
41+
flex: 1 1 0;
42+
padding: 20px;
43+
background-color: #419932;
44+
}
45+
46+
#listing {
47+
flex: 1 1 0;
48+
max-height: 300px;
49+
min-height: 0;
50+
overflow-y: auto;
51+
}
5252
</style>
5353
<body>
5454
<div class="container1">
@@ -69,13 +69,13 @@
6969
let out;
7070

7171
function showEntity(out) {
72-
let output = document.getElementById("output");
72+
let output = document.getElementById('output');
7373
while (output.firstChild) {
7474
output.removeChild(output.firstChild);
7575
}
7676
console.log(out);
7777
Object.keys(out).forEach(key => {
78-
let item = document.createElement("li");
78+
let item = document.createElement('li');
7979
item.innerHTML = key + ': ' + out[key];
8080
output.appendChild(item);
8181
});
@@ -131,12 +131,12 @@
131131
function generate() {
132132
out = {};
133133
out['file'] = new Set();
134-
let input = document.getElementById("fileinput").files;
135-
let entity = document.getElementById("entity").value;
134+
let input = document.getElementById('fileinput').files;
135+
let entity = document.getElementById('entity').value;
136136
let parsed = 0;
137137
const reader = new FileReader();
138138
reader.onload = evt => {
139-
readFile(evt.target.result, entity);
139+
readFile(evt.target.result, entity, input[parsed]);
140140
parsed++;
141141
if (parsed % 10 === 0) {
142142
console.log(parsed);
@@ -153,28 +153,35 @@
153153
}
154154

155155
function fileInputChange() {
156-
let output = document.getElementById("listing");
156+
let output = document.getElementById('listing');
157157
while (output.firstChild) {
158158
output.removeChild(output.firstChild);
159159
}
160160

161161
let files = event.target.files;
162162

163163
for (let i = 0; i < files.length; i++) {
164-
let item = document.createElement("li");
164+
let item = document.createElement('li');
165165
item.innerHTML = files[i].webkitRelativePath;
166166
output.appendChild(item);
167167
}
168168
}
169169

170-
function readFile(file, entity) {
171-
file = JSON.parse(file);
170+
function readFile(file, entity, fileObj) {
171+
try {
172+
file = JSON.parse(file);
173+
} catch (e) {
174+
console.log(`file: ${fileObj.name} - ${fileObj.webkitRelativePath}`);
175+
console.error(e);
176+
return;
177+
}
172178
const entities = file.entities.filter(e => e.type === entity);
173-
174-
179+
180+
175181
entities.forEach(e => {
176-
if (!e.settings)
182+
if (!e.settings) {
177183
return
184+
}
178185
Object.keys(e.settings).forEach(key => {
179186
if (!out[key]) {
180187
out[key] = new Set();
@@ -183,8 +190,6 @@
183190
out[key].add(JSON.stringify(e.settings[key], null, 2));
184191
})
185192
})
186-
187-
188193
}
189194
</script>
190195

webapp/eslint.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ module.exports = tseslint.config(
5353
curly: 'error',
5454
eqeqeq: ['error', 'smart'],
5555
'guard-for-in': 'error',
56-
'no-bitwise': 'error',
56+
'no-bitwise': 'off',
5757
'no-caller': 'error',
5858
'no-eval': 'error',
5959
'no-new-wrappers': 'error',

0 commit comments

Comments
 (0)