The most import interface element of the Computus Engine will be the perpetual timeline. I want it to be infinitely zoomable from the smallest chronon out to the billions of year since the Big Bang. What's more I wanted to at least prove this was possible by the end of the first year. I admit posting it at the end of December is really cutting it fine but thanks to 2008 being one second longer than usual, I made it!

This post previously contained Flash content.

Infinite Timeline demo
The demo above is a little clunky, it's not interactive and it loses a few labels after it's been running for a while. It does however prove the infinite zooming concept works for time. All you need to do is supply a start and an end value (they can be Dates or raw millisecond offsets) to the timeline and it'll render the rest. Period rendering in the demo is limited from seconds up to millennia.

For the demo I'm applying a multiplier to the start and end values every frame. This is a really hacky way of getting animation but it's fine for this. There's very little in the way of optimisation yet other than a bit of object pooling on the labels and it's still running pretty well. I have a ton of ideas for future versions that will improve performance.

At times it felt like it's been slow going but I'm glad to have something to show for the end of the year. A lot of what you see makes use of the preparatory work I've written about over the course of the year. The UI components for example all extend the BaseComponent class, and the Date class is used extensively to manage period transitions.

Full Screen Preview
The last problem I needed to overcome before I could demo anything was how do I demo a timeline (which needs to be as wide as possible) inside a journal entry which is only 470 pixels wide. The new full screen preview app above is my proposed solution. This is a light little preloader movie that will load any demo on request and preview it in full screen. When you're finished hit ESCAPE and you will return to the journal. I'll write a bit more about this in a future post but I've tested it for a few weeks and it seems to work well.