Weekly Report: 16th December 2019
I didn't publish a weekly for the week before since it was a holiday week. So this weekly will be a combination of the two, that is the 16th and 23rd.
All of the updates are related to FrontierNav. I haven't really blogged much about specific topics for the last few months. Maybe I should.
Improved Map Visuals
Maps are now visually consistent across games. This was needed as FrontierNav moves towards using the same maps for all future games.
- Icons are now outlined in the colour that represents them across FrontierNav
- When selected, icons change to a "map pin" so that they stand out and avoid obstructing the location they're indicating.
- Names are shown next to icons when they're hovered over or selected.
- Icons move to the front when hovered over or selected to make them more visible.
Introduced Map Feature Toggles
Some map features are hidden by default to reduce performance issues when there's hundreds of features on the screen. They are only visible when it's relevant to your search. However, this made manual discovery difficult as users didn't know what sorts of information were available. So now, you can now unhide features.
In the future, maps can hide/show features based on how zoomed in the user is. However, since there's no culling for features outside the viewport, it will still have a performance impact. Which leads onto...
The new map visuals use CSS filters extensively. This seems fine for Chromium-based browsers, but Firefox struggles with it. It pretty much freezes on mobile.
I'm considering moving to a canvas-based mapping library like OpenLayers as it's clear the DOM can't handle so many elements.
Improved Map Feature Discovery
Previously, map features were discovered and selected through hard-coded queries for each game. Searching for a Collectible in Xenoblade 2 would trigger a specific query to find the related Collection Points. This meant if a new type of entity was added, the maps wouldn't know how to find features relevant to it.
Now, instead of a custom query for every type of entity, FrontierNav discovers these relationships by itself. So when you search for a Collectible, FrontierNav will look for the various ways it's connected to a map location and show you those.
Improved Map Discovery
In a similar manner to feature discovery, map lists were also hard-coded. Maps had to be under a specific Region, Area, Map hierarchy. This structure came from Xenoblade 2's in-game map, and even there it often didn't make sense. The idea of Regions, Areas and Locations are vague and far from strict. They are context sensitive depending on your viewpoint.
This structure also doesn't work for general use cases such as in Astral Chain, where locations are re-used but have different features based on the current mission.
So instead of a strict hierarchy, Maps are now discoverable based on what they represent and what their features represent. This generic capability is the same as how map features are discovered.
I always had a nagging feeling whenever I opened the sidebar. The font sizes never looked correct and the alignments seemed off. So I went ahead and improved it.
Migrations Mostly Complete
The only game left to migrate now is Xenoblade X. As I mentioned in the previous weekly, Xenoblade X is the oldest game in FrontierNav and has a lot of custom features specific to it. Moving that over to a generic featureset is going to take some time.
If a new release of Xenoblade X is announced for the Switch, I'll have more incentive to move it over, but as it is right now, there's not much reason to put the effort in.
- Greatly improved the speed at which local changes re-apply.
- Fixed a bug which causes partially re-applied changes to persist, causing perceived data loss.
- Introduced forms to create properties, replacing the temporary alert-driven approach.
- Moved all search logic to web workers.
- This might improve performance as a side effect, but was more done for refactoring.
- Fixed layout on Mobile Chromium where navigation bar was cut-off.
- Isolated remaining Xenoblade X code to only execute under Xenoblade X.
Thanks for reading.