Skip to content

Commit 19e66f8

Browse files
committed
feat: precise marker location
1 parent 57b4432 commit 19e66f8

File tree

2 files changed

+42
-20
lines changed

2 files changed

+42
-20
lines changed

src/index.css

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
.bg {
22
position: absolute;
33
height: 39px;
4-
aspect-ratio: 4 / 3;
4+
width: 69px;
55
object-fit: cover;
66
user-drag: none;
77
pointer-events: none;
8-
transform: translate(-50%, -50%);
8+
transform: translate(0, -100%);
99
}
1010
:root {
1111
width: 100%;

src/index.ts

Lines changed: 40 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ type WarpTrace = {
7777
fromRegion: RegionKey
7878
fromRoom: string
7979
from: TraceData
80-
80+
pos: Pos | null
8181
}
8282

8383
// backlinks by toRegion and toRoom
@@ -100,10 +100,20 @@ for(const regK in regions) {
100100
const room = region.rooms[roomK]
101101
if(!room.data.mapPos) continue
102102
for(const wp of room.data.warpPoints) {
103-
bfill(wp.destRegion, wp.destRoom, { fromRegion: regK, fromRoom: roomK, from: { type: 'warp', data: wp } })
103+
bfill(wp.destRegion, wp.destRoom, {
104+
fromRegion: regK,
105+
fromRoom: roomK,
106+
from: { type: 'warp', data: wp },
107+
pos: wp.destPos,
108+
})
104109
}
105110
for(const wp of room.data.echoSpots) {
106-
bfill(wp.destRegion, wp.destRoom, { fromRegion: regK, fromRoom: roomK, from: { type: 'echo', data: wp } })
111+
bfill(wp.destRegion, wp.destRoom, {
112+
fromRegion: regK,
113+
fromRoom: roomK,
114+
from: { type: 'echo', data: wp },
115+
pos: wp.destPos,
116+
})
107117
}
108118
}
109119
}
@@ -222,12 +232,13 @@ function showRegion(regionName: RegionKey, region: Region, pos?: [number, number
222232
let totalY = 0
223233
let count = 0
224234

235+
const bx = room.data.mapPos[0] / 3 - room.data.size[0] * 0.5
236+
const by = room.data.mapPos[1] / 3 - room.data.size[1] * 0.5
237+
225238
for(const s of room.screens) {
226239
const ps = s.split('$')
227-
let x = room.data.mapPos[0] / 3 - room.data.size[0] * 0.5
228-
let y = room.data.mapPos[1] / 3 - room.data.size[1] * 0.5
229-
x += Number(ps[0]) / 20
230-
y += Number(ps[1]) / 20
240+
const x = bx + Number(ps[0]) / 20
241+
const y = by + Number(ps[1]) / 20
231242

232243
totalX += x
233244
totalY += y
@@ -247,8 +258,8 @@ function showRegion(regionName: RegionKey, region: Region, pos?: [number, number
247258
lget(layerEls, layer).append(image)
248259
}
249260

250-
const mx = totalX / count
251-
const my = totalY / count
261+
const mx = totalX / count + 69 * 0.5
262+
const my = totalY / count + 39 * 0.5
252263

253264
const remBacklinks = backlinks[regionName.toLowerCase()]?.[k.toLowerCase()]?.slice()
254265
function clearBacklink(fromRegion: string | null, fromRoom: string | null) {
@@ -265,39 +276,50 @@ function showRegion(regionName: RegionKey, region: Region, pos?: [number, number
265276

266277
for(let i = 0; i < room.data.warpPoints.length; i++) {
267278
const it = room.data.warpPoints[i]
279+
const x = bx + it.pos[0] / 20
280+
const y = by + it.pos[1] / 20
268281

269282
const v = lget(markerLayerEls, layer)
270283
const m = document.createElement('div')
271284
m.classList.add('marker-warp')
272285
if(it.oneWay) m.classList.add('warp-oneway')
273-
m.style.left = mx + 'px'
274-
m.style.top = -my + 'px'
286+
m.style.left = x + 'px'
287+
m.style.top = -y + 'px'
275288
v.append(m)
276-
markers.push({ type: 'warp', position: [mx, my], data: it, element: m })
289+
290+
markers.push({ type: 'warp', position: [x, y], data: it, element: m })
277291
clearBacklink(it.destRegion, it.destRoom)
278292
}
279293

280294
for(let i = 0; i < room.data.echoSpots.length; i++) {
281295
const it = room.data.echoSpots[i]
296+
const x = bx + it.pos[0] / 20
297+
const y = by + it.pos[1] / 20
282298

283299
const v = lget(markerLayerEls, layer)
284300
const m = document.createElement('div')
285301
m.classList.add('marker-echo')
286-
m.style.left = mx + 'px'
287-
m.style.top = -my + 'px'
302+
m.style.left = x + 'px'
303+
m.style.top = -y + 'px'
288304
v.append(m)
289-
markers.push({ type: 'echo', position: [mx, my], data: it, element: m })
305+
306+
markers.push({ type: 'echo', position: [x, y], data: it, element: m })
290307
clearBacklink(it.destRegion, it.destRoom)
291308
}
292309

293310
for(let i = 0; remBacklinks && i < remBacklinks.length; i++) {
311+
const it = remBacklinks[i]
312+
313+
const x = it.pos ? bx + it.pos[0] / 20 : mx
314+
const y = it.pos ? by + it.pos[1] / 20 : my
315+
294316
const v = lget(markerLayerEls, layer)
295317
const m = document.createElement('div')
296318
m.classList.add('marker-backlink')
297-
m.style.left = mx + 'px'
298-
m.style.top = -my + 'px'
319+
m.style.left = x + 'px'
320+
m.style.top = -y + 'px'
299321
v.append(m)
300-
markers.push({ type: 'backlink', position: [mx, my], data: remBacklinks[i], element: m })
322+
markers.push({ type: 'backlink', position: [x, y], data: remBacklinks[i], element: m })
301323
}
302324
}
303325

0 commit comments

Comments
 (0)