You can remove all of this duplication by defining a `Dictionary<ScrollDirection, float2> scrollDirections` with the four orthogonal scroll directions and their offset vectors, then doing

    foreach (var kv = scrollDirections)
        if (keyboard.Includes(kv.Key) || edge.Includes(kv.Key))
            directionVector += kv.Value

The current `Directions` dict should probably be renamed `scrollIcons` to match.