mudlet-map-renderer 0.0.25 → 0.1.0-konva
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/demo/colors.json +1 -0
- package/demo/index.html +102 -0
- package/demo/main.ts +389 -0
- package/demo/mapExport.json +1 -0
- package/demo/tsconfig.json +11 -0
- package/package.json +34 -23
- package/src/ExitRenderer.ts +275 -0
- package/src/PathFinder.ts +93 -0
- package/src/PathRenderer.ts +129 -0
- package/src/Renderer.ts +374 -0
- package/src/directions.ts +66 -0
- package/src/index.ts +4 -0
- package/src/reader/Area.ts +96 -0
- package/src/reader/Exit.ts +36 -0
- package/src/reader/ExplorationArea.ts +132 -0
- package/src/reader/MapReader.ts +123 -0
- package/src/reader/Plane.ts +42 -0
- package/src/types/MapData.ts +90 -0
- package/tsconfig.json +17 -0
- package/vercel.json +5 -0
- package/vite.config.ts +29 -0
- package/vite.demo.config.ts +15 -0
- package/.prettierrc +0 -5
- package/CHANGELOG.md +0 -69
- package/README.md +0 -59
- package/exports.js +0 -5
- package/map-fragment/draw/controls.js +0 -172
- package/map-fragment/draw/renderer.js +0 -819
- package/map-fragment/reader/Area.js +0 -74
- package/map-fragment/reader/MapReader.js +0 -89
- package/map-fragment/reader/PathFinder.js +0 -26
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
class Area {
|
|
2
|
-
constructor(areaId, areaName, rooms, labels, zIndex, levels) {
|
|
3
|
-
this.areaId = parseInt(areaId);
|
|
4
|
-
this.areaName = areaName;
|
|
5
|
-
this.rooms = [];
|
|
6
|
-
this.labels = labels;
|
|
7
|
-
rooms.forEach(element => this.rooms[element.id] = element)
|
|
8
|
-
this.levels = levels;
|
|
9
|
-
this.zIndex = zIndex;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
getAreaBounds(full = false) {
|
|
13
|
-
if (this.bounds === undefined) {
|
|
14
|
-
let minX = 9999999999;
|
|
15
|
-
let minY = 9999999999;
|
|
16
|
-
let maxX = -9999999999;
|
|
17
|
-
let maxY = -9999999999;
|
|
18
|
-
this.rooms.forEach((room) => {
|
|
19
|
-
if (!full && room.z !== this.zIndex) {
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
minX = Math.min(minX, room.x);
|
|
23
|
-
minY = Math.min(minY, room.y);
|
|
24
|
-
maxX = Math.max(maxX, room.x);
|
|
25
|
-
maxY = Math.max(maxY, room.y);
|
|
26
|
-
});
|
|
27
|
-
this.labels.forEach((label) => {
|
|
28
|
-
if (!full && label.Z !== this.zIndex) {
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
minX = Math.min(minX, label.X);
|
|
32
|
-
minY = Math.min(minY, label.Y);
|
|
33
|
-
maxX = Math.max(maxX, label.X + label.Width);
|
|
34
|
-
maxY = Math.max(maxY, label.Y + label.Height);
|
|
35
|
-
});
|
|
36
|
-
this.bounds = { minX: minX, minY: minY, maxX: maxX, maxY: maxY };
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
return this.bounds;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
getRoomById(id) {
|
|
43
|
-
return this.rooms[id];
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
getLevels() {
|
|
47
|
-
return this.levels;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
getZIndex() {
|
|
51
|
-
return this.zIndex;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
limit(id, padding) {
|
|
55
|
-
let room = this.rooms[id];
|
|
56
|
-
let limits = {
|
|
57
|
-
xMin: room.x - padding,
|
|
58
|
-
xMax: room.x + padding,
|
|
59
|
-
yMin: room.y - padding,
|
|
60
|
-
yMax: room.y + padding,
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
let onScreen = this.rooms.filter(room => limits.xMin < room.x && limits.xMax > room.x && limits.yMin < room.y && limits.yMax > room.y).map(item => item.id)
|
|
64
|
-
|
|
65
|
-
return new Area(this.areaId, this.areaName,
|
|
66
|
-
this.rooms.filter(room => onScreen.includes(room.id) || Object.values(room.exits).filter(val => onScreen.includes(val)).length > 0),
|
|
67
|
-
this.labels.filter(label => limits.xMin < label.X && limits.xMax > label.X && limits.yMin < label.Y && limits.yMax > label.Y),
|
|
68
|
-
this.zIndex, this.levels);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
module.exports = {
|
|
73
|
-
Area: Area,
|
|
74
|
-
};
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
let Area = require("./Area").Area;
|
|
2
|
-
|
|
3
|
-
class MapReader {
|
|
4
|
-
constructor(data, colors) {
|
|
5
|
-
this.mapDataIndex = {};
|
|
6
|
-
this.roomIndex = {};
|
|
7
|
-
this.data = data;
|
|
8
|
-
this.data.sort(function (areaElement1, areaElement2) {
|
|
9
|
-
if (areaElement1.areaName < areaElement2.areaName) {
|
|
10
|
-
return -1;
|
|
11
|
-
}
|
|
12
|
-
if (areaElement1.areaName > areaElement2.areaName) {
|
|
13
|
-
return 1;
|
|
14
|
-
}
|
|
15
|
-
return 0;
|
|
16
|
-
});
|
|
17
|
-
data.forEach((value, index) => {
|
|
18
|
-
this.mapDataIndex[value.areaId] = index;
|
|
19
|
-
value.rooms.forEach((room) => {
|
|
20
|
-
room.areaId = value.areaId;
|
|
21
|
-
this.roomIndex[room.id] = room;
|
|
22
|
-
});
|
|
23
|
-
});
|
|
24
|
-
this.colors = {};
|
|
25
|
-
colors.forEach((element) => {
|
|
26
|
-
this.colors[parseInt(element.envId)] = element.colors;
|
|
27
|
-
});
|
|
28
|
-
this.colors.default = [255, 255, 255];
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
getAreas() {
|
|
32
|
-
return this.data;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
getArea(areaId, zIndex, limits) {
|
|
36
|
-
let area = this.data[this.mapDataIndex[areaId]];
|
|
37
|
-
let levels = new Set();
|
|
38
|
-
let candidateArea = new Area(
|
|
39
|
-
areaId,
|
|
40
|
-
area.areaName,
|
|
41
|
-
area.rooms.filter((room) => {
|
|
42
|
-
levels.add(parseInt(room.z));
|
|
43
|
-
let isWithinBounds = true;
|
|
44
|
-
if (limits) {
|
|
45
|
-
isWithinBounds = limits.xMin < room.x && limits.xMax > room.x && limits.yMin < room.y && limits.yMax > room.y;
|
|
46
|
-
}
|
|
47
|
-
return isWithinBounds;
|
|
48
|
-
}),
|
|
49
|
-
area.labels.filter((label) => {
|
|
50
|
-
let isWithinBounds = true;
|
|
51
|
-
if (limits) {
|
|
52
|
-
isWithinBounds = limits.xMin < label.X && limits.xMax > label.X && limits.yMin < label.Y && limits.yMax > label.Y;
|
|
53
|
-
}
|
|
54
|
-
return isWithinBounds;
|
|
55
|
-
}),
|
|
56
|
-
zIndex,
|
|
57
|
-
levels
|
|
58
|
-
);
|
|
59
|
-
if (area.rooms.length > 0 && !levels.has(zIndex)) {
|
|
60
|
-
candidateArea = this.getArea(areaId, levels.values().next().value);
|
|
61
|
-
}
|
|
62
|
-
return candidateArea;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
getAreaProperties(areaId) {
|
|
66
|
-
return this.data[this.mapDataIndex[areaId]];
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
getAreaByRoomId(id, limits) {
|
|
70
|
-
let room = this.getRoomById(id);
|
|
71
|
-
if (room === undefined) {
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
return this.getArea(room.areaId, room.z, limits);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
getColors() {
|
|
78
|
-
return this.colors;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
getRoomById(id) {
|
|
82
|
-
return this.roomIndex[id];
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
module.exports = {
|
|
88
|
-
MapReader
|
|
89
|
-
};
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
const { MapReader } = require("./MapReader");
|
|
2
|
-
const Graph = require("node-dijkstra")
|
|
3
|
-
|
|
4
|
-
class PathFinder {
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
*
|
|
8
|
-
* @param {MapReader} reader
|
|
9
|
-
*/
|
|
10
|
-
constructor(reader) {
|
|
11
|
-
this.route = new Graph();
|
|
12
|
-
reader.getAreas().forEach(area => area.rooms.forEach(room => {
|
|
13
|
-
let exits = Object.values(room.exits).concat(Object.values(room.specialExits)).map(item => [item, room.weight ?? 1]);
|
|
14
|
-
this.route.addNode(room.id.toString(), Object.fromEntries(exits))
|
|
15
|
-
}))
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
path(from, to) {
|
|
19
|
-
return this.route.path(from.toString(), to.toString())
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
module.exports = {
|
|
25
|
-
PathFinder
|
|
26
|
-
}
|