diff --git a/internal/mapper/mapper.go b/internal/mapper/mapper.go index 57668cbc..02ad86e1 100644 --- a/internal/mapper/mapper.go +++ b/internal/mapper/mapper.go @@ -223,12 +223,17 @@ func (r *mapper) Start() { r.crawlQueue = make([]crawlRoom, 0, 100) // pre-allocate 100 capacity + lowestRoomId := 0 //var lastNode *mapNode = nil r.crawlQueue = append(r.crawlQueue, crawlRoom{RoomId: r.rootRoomId, Pos: positionDelta{}}) for len(r.crawlQueue) > 0 { roomNow := r.crawlQueue[0] + if lowestRoomId == 0 || roomNow.RoomId < lowestRoomId { + lowestRoomId = roomNow.RoomId + } + r.crawlQueue = r.crawlQueue[1:] if _, ok := r.crawledRooms[roomNow.RoomId]; ok { @@ -280,11 +285,21 @@ func (r *mapper) Start() { r.crawlQueue = nil + var xOffset, yOffset, zOffset = 0, 0, 0 + lowestRoom := r.crawledRooms[lowestRoomId] + if lowestRoom != nil { + xOffset, yOffset, zOffset = lowestRoom.Pos.x, lowestRoom.Pos.y, lowestRoom.Pos.z + } + // calculate the final array length. + minX, minY, minZ = minX-xOffset, minY-yOffset, minZ-zOffset + maxX, maxY, maxZ = maxX-xOffset, maxY-yOffset, maxZ-zOffset + r.roomGrid.initialize(minX, maxX, minY, maxY, minZ, maxZ) for _, node := range r.crawledRooms { + node.Pos.x, node.Pos.y, node.Pos.z = node.Pos.x-xOffset, node.Pos.y-yOffset, node.Pos.z-zOffset r.roomGrid.addNode(node) } } diff --git a/modules/gmcp/gmcp.Room.go b/modules/gmcp/gmcp.Room.go index a45d7458..76f87316 100644 --- a/modules/gmcp/gmcp.Room.go +++ b/modules/gmcp/gmcp.Room.go @@ -439,6 +439,11 @@ func (g *GMCPRoomModule) GetRoomNode(user *users.UserRecord, gmcpModule string) if room.IsCharacterRoom { payload.Details = append(payload.Details, `character`) } + + // Indicate if this is an ephemeral room + if rooms.IsEphemeralRoomId(room.RoomId) { + payload.Details = append(payload.Details, `ephemeral`) + } // end room details }