mudlet-map-renderer 0.0.2 → 0.0.3
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/.prettierrc +0 -0
- package/CHANGELOG.md +9 -5
- package/README.md +55 -53
- package/exports.js +1 -0
- package/map-fragment/draw/controls.js +0 -0
- package/map-fragment/draw/renderer.js +10 -8
- package/map-fragment/reader/Area.js +0 -0
- package/map-fragment/reader/MapReader.js +7 -1
- package/package.json +2 -3
package/.prettierrc
CHANGED
|
File without changes
|
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
# 0.0.
|
|
2
|
-
- add option to set font
|
|
3
|
-
-
|
|
4
|
-
|
|
5
|
-
# 0.0.
|
|
1
|
+
# 0.0.3
|
|
2
|
+
- add option to set font and background color
|
|
3
|
+
- multiple fixes
|
|
4
|
+
|
|
5
|
+
# 0.0.2
|
|
6
|
+
- add option to set font for text labels
|
|
7
|
+
- fix README example
|
|
8
|
+
|
|
9
|
+
# 0.0.1
|
|
6
10
|
- initial release
|
package/README.md
CHANGED
|
@@ -1,54 +1,56 @@
|
|
|
1
|
-
# Mudlet Map Renderer
|
|
2
|
-
|
|
3
|
-
Mudlet map rendering library. Can be used in Node.js and in browser.
|
|
4
|
-
|
|
5
|
-
Until version `1.0.0` API is subject of change. Use with caution!
|
|
6
|
-
|
|
7
|
-
## TODO
|
|
8
|
-
|
|
9
|
-
- [ ] Publish some examples (with data)
|
|
10
|
-
- [ ] Convert to .ts
|
|
11
|
-
- [ ] Document functions
|
|
12
|
-
- [ ] Add test
|
|
13
|
-
- [ ] Add lint
|
|
14
|
-
- [ ] Align model with mudlet-map-binary-reader
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
## Very basic example
|
|
18
|
-
|
|
19
|
-
```js
|
|
20
|
-
const fs = require("fs");
|
|
21
|
-
const { MudletMapReader } = require("mudlet-map-binary-reader") //npm mudlet-map-binary-reader
|
|
22
|
-
const { Renderer, MapReader } = require("mudlet-map-renderer")
|
|
23
|
-
|
|
24
|
-
let map = MudletMapReader.read("./data/map.dat");
|
|
25
|
-
MudletMapReader.export(map, "./data");
|
|
26
|
-
let mapData = require("./data/mapExport.json");
|
|
27
|
-
let mapColors = require("./data/colors.json");
|
|
28
|
-
|
|
29
|
-
let reader = new MapReader(mapData, mapColors);
|
|
30
|
-
|
|
31
|
-
const roomId = 1;
|
|
32
|
-
const scale = 40;
|
|
33
|
-
let area = reader.getAreaByRoomId(roomId);
|
|
34
|
-
let settings = { scale: scale}
|
|
35
|
-
let options = new Renderer(null, reader, area, reader.getColors(), options);
|
|
36
|
-
fs.writeFileSync("mapFull.svg", renderer.exportSvg());
|
|
37
|
-
fs.writeFileSync("mapFragment.svg", renderer.exportSvg(roomId, 10));
|
|
38
|
-
console.log("Map generated");
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
## Settings and their default values
|
|
42
|
-
```js
|
|
43
|
-
class Settings {
|
|
44
|
-
isRound = false;
|
|
45
|
-
scale = 55;
|
|
46
|
-
roomSize = 10;
|
|
47
|
-
exitsSize = 2;
|
|
48
|
-
borders = false;
|
|
49
|
-
frameMode = false;
|
|
50
|
-
areaName = true;
|
|
51
|
-
showLabels = true;
|
|
52
|
-
uniformLevelSize = false;
|
|
53
|
-
|
|
1
|
+
# Mudlet Map Renderer
|
|
2
|
+
|
|
3
|
+
Mudlet map rendering library. Can be used in Node.js and in browser.
|
|
4
|
+
|
|
5
|
+
Until version `1.0.0` API is subject of change. Use with caution!
|
|
6
|
+
|
|
7
|
+
## TODO
|
|
8
|
+
|
|
9
|
+
- [ ] Publish some examples (with data)
|
|
10
|
+
- [ ] Convert to .ts
|
|
11
|
+
- [ ] Document functions
|
|
12
|
+
- [ ] Add test
|
|
13
|
+
- [ ] Add lint
|
|
14
|
+
- [ ] Align model with mudlet-map-binary-reader
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
## Very basic example
|
|
18
|
+
|
|
19
|
+
```js
|
|
20
|
+
const fs = require("fs");
|
|
21
|
+
const { MudletMapReader } = require("mudlet-map-binary-reader") //npm mudlet-map-binary-reader
|
|
22
|
+
const { Renderer, MapReader } = require("mudlet-map-renderer")
|
|
23
|
+
|
|
24
|
+
let map = MudletMapReader.read("./data/map.dat");
|
|
25
|
+
MudletMapReader.export(map, "./data");
|
|
26
|
+
let mapData = require("./data/mapExport.json");
|
|
27
|
+
let mapColors = require("./data/colors.json");
|
|
28
|
+
|
|
29
|
+
let reader = new MapReader(mapData, mapColors);
|
|
30
|
+
|
|
31
|
+
const roomId = 1;
|
|
32
|
+
const scale = 40;
|
|
33
|
+
let area = reader.getAreaByRoomId(roomId);
|
|
34
|
+
let settings = { scale: scale}
|
|
35
|
+
let options = new Renderer(null, reader, area, reader.getColors(), options);
|
|
36
|
+
fs.writeFileSync("mapFull.svg", renderer.exportSvg());
|
|
37
|
+
fs.writeFileSync("mapFragment.svg", renderer.exportSvg(roomId, 10));
|
|
38
|
+
console.log("Map generated");
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Settings and their default values
|
|
42
|
+
```js
|
|
43
|
+
class Settings {
|
|
44
|
+
isRound = false;
|
|
45
|
+
scale = 55;
|
|
46
|
+
roomSize = 10;
|
|
47
|
+
exitsSize = 2;
|
|
48
|
+
borders = false;
|
|
49
|
+
frameMode = false;
|
|
50
|
+
areaName = true;
|
|
51
|
+
showLabels = true;
|
|
52
|
+
uniformLevelSize = false;
|
|
53
|
+
fontFamily = 'sans-serif';
|
|
54
|
+
mapBackground = "#000000";
|
|
55
|
+
}
|
|
54
56
|
```
|
package/exports.js
CHANGED
|
File without changes
|
|
@@ -21,7 +21,8 @@ class Settings {
|
|
|
21
21
|
areaName = true;
|
|
22
22
|
showLabels = true;
|
|
23
23
|
uniformLevelSize = false;
|
|
24
|
-
fontFamily = 'sans-serif'
|
|
24
|
+
fontFamily = 'sans-serif';
|
|
25
|
+
mapBackground = "#000000";
|
|
25
26
|
}
|
|
26
27
|
|
|
27
28
|
paper.Item.prototype.registerClick = function (callback) {
|
|
@@ -86,7 +87,7 @@ class Renderer {
|
|
|
86
87
|
render(pngRender = false) {
|
|
87
88
|
this.pngRender = pngRender;
|
|
88
89
|
this.renderBackground(this.bounds.minX - padding, this.bounds.minY - padding, this.bounds.maxX + padding, this.bounds.maxY + padding);
|
|
89
|
-
this.renderHeader();
|
|
90
|
+
this.renderHeader(this.bounds.minX - padding / 2, this.bounds.maxY + padding / 2);
|
|
90
91
|
this.area.rooms
|
|
91
92
|
.filter((room) => room.z == this.area.zIndex)
|
|
92
93
|
.forEach((room) => {
|
|
@@ -94,7 +95,9 @@ class Renderer {
|
|
|
94
95
|
});
|
|
95
96
|
if (this.area.labels !== undefined && this.settings.showLabels) {
|
|
96
97
|
this.bgLabels.activate();
|
|
97
|
-
this.area.labels
|
|
98
|
+
this.area.labels
|
|
99
|
+
.filter((label) => label.Z == this.area.zIndex)
|
|
100
|
+
.forEach((value) => this.renderLabel(value), this);
|
|
98
101
|
}
|
|
99
102
|
this.matrix = new paper.Matrix(1, 0, 0, -1, -this.bounds.minX + padding, this.bounds.maxY + padding).scale(
|
|
100
103
|
this.scale,
|
|
@@ -120,17 +123,16 @@ class Renderer {
|
|
|
120
123
|
renderBackground(x1, y1, x2, y2) {
|
|
121
124
|
this.backgroundLayer.activate();
|
|
122
125
|
let background = new paper.Path.Rectangle(new paper.Point(x1, y1), new paper.Point(x2, y2));
|
|
123
|
-
background.fillColor = new paper.Color(
|
|
126
|
+
background.fillColor = new paper.Color(this.settings.mapBackground);
|
|
124
127
|
background.registerClick(() => {
|
|
125
128
|
this.emitter.dispatchEvent(new CustomEvent("backgroundClick"));
|
|
126
129
|
});
|
|
127
130
|
}
|
|
128
131
|
|
|
129
|
-
renderHeader() {
|
|
132
|
+
renderHeader(x, y) {
|
|
130
133
|
if (this.settings.areaName) {
|
|
131
134
|
this.backgroundLayer.activate();
|
|
132
|
-
let
|
|
133
|
-
let header = new paper.PointText(bounds.x + 2.5, bounds.y + bounds.height - 2.5);
|
|
135
|
+
let header = new paper.PointText(x, y);
|
|
134
136
|
header.fillColor = new paper.Color(1, 1, 1, 1);
|
|
135
137
|
header.fontSize = 2.5;
|
|
136
138
|
header.fontFamily = this.settings.fontFamily;
|
|
@@ -471,7 +473,7 @@ class Renderer {
|
|
|
471
473
|
renderChar(room) {
|
|
472
474
|
this.charsLayer.activate();
|
|
473
475
|
if (room.roomChar) {
|
|
474
|
-
let size = 0.85 * this.roomFactor;
|
|
476
|
+
let size = 0.85 * this.roomFactor / room.roomChar.length;
|
|
475
477
|
let x = this.pngRender ? room.render.position.x - 0.1 : room.render.position.x;
|
|
476
478
|
let text = new paper.PointText(x, room.render.position.y + size / 4);
|
|
477
479
|
if (!room.userData || room.userData["system.fallback_symbol_color"] === undefined) {
|
|
File without changes
|
|
@@ -46,7 +46,13 @@ class MapReader {
|
|
|
46
46
|
}
|
|
47
47
|
return isWithinBounds;
|
|
48
48
|
}),
|
|
49
|
-
area.labels.filter((
|
|
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
|
+
}),
|
|
50
56
|
zIndex,
|
|
51
57
|
levels
|
|
52
58
|
);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mudlet-map-renderer",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"keywords": [
|
|
5
5
|
"mudlet",
|
|
6
6
|
"map",
|
|
@@ -17,6 +17,5 @@
|
|
|
17
17
|
"dependencies": {
|
|
18
18
|
"paper-jsdom": "^0.12.15"
|
|
19
19
|
},
|
|
20
|
-
"devDependencies": {},
|
|
21
20
|
"exports": "./exports.js"
|
|
22
|
-
}
|
|
21
|
+
}
|