func DeleteRoom(room types.Room) { db.DeleteObject(room.GetId()) // Disconnect all exits leading to this room loc := room.GetLocation() updateRoom := func(dir types.Direction) { next := loc.Next(dir) room := GetRoomByLocation(next, room.GetZoneId()) if room != nil { room.SetExitEnabled(dir.Opposite(), false) } } updateRoom(types.DirectionNorth) updateRoom(types.DirectionNorthEast) updateRoom(types.DirectionEast) updateRoom(types.DirectionSouthEast) updateRoom(types.DirectionSouth) updateRoom(types.DirectionSouthWest) updateRoom(types.DirectionWest) updateRoom(types.DirectionNorthWest) updateRoom(types.DirectionUp) updateRoom(types.DirectionDown) }
func DirectionBetween(from, to types.Room) types.Direction { for _, exit := range from.GetExits() { nextLocation := from.NextLocation(exit) nextRoom := GetRoomByLocation(nextLocation, from.GetZoneId()) if nextRoom == to { return exit } } return types.DirectionNone }
func GetNeighbors(room types.Room) []types.Room { neighbors := []types.Room{} for _, dir := range room.GetExits() { coords := room.NextLocation(dir) neighbor := GetRoomByLocation(coords, room.GetZoneId()) if neighbor != nil { neighbors = append(neighbors, neighbor) } } for _, id := range room.GetLinks() { neighbor := GetRoom(id) if neighbor != nil { neighbors = append(neighbors, neighbor) } } return neighbors }