Reinventing the wheel – AirMess R8 – RT/W8/W7
September 26, 2014
AirMess R8 is now available, on Widows 8 RT, Windows 8 Desktop and of course Windows 7 !
Windows 8 RT
Windows Desktop (Windows 7 and 8)
As usual, if you are using it on Windows 7, you’ll need to make sure to have the latest updates:
- Platform update for Windows 7 SP1 and Windows Server 2008 R2 SP1, which update the DirectX API
- .NET Framework 4.5, that the game uses
What’s in the box?
This time, the revolution is for the Desktop 🙂
Back to the beginning of the year, when I first got to the point of publishing AirMess for the first time, the focus was to get it on the Windows Store.
There are several good reasons for that, the biggest being that:
- The store offers a standard way to publish and update applications
- Central way to attach settings and high-scores to an user and roam his high-scores with him
- The WinRT API offers a lot of easy way to mix up DirectX and XAML, meaning that I didn’t have to bother about doing a custom handcrafted in-game UI. Everything was XAML, smooth, with a designer and so on.
On the Desktop side there’s no UI framework as powerful as XAML when adding DirectX in the equation. There are way to mix WPF and DirectX but it is limited to DirectX 9 (if you want to have DirectX 10 elements you have to build a bridge) and this doesn’t seem to be going anywhere.
Problem started to arise when I considered doing a Desktop build, first for IndieDB, and maybe for something else later 😉
Because I didn’t have a clear story for Desktop, I did a quick and dirty UI which was … this:
What was wrong with that?
- Didn’t feel natural, and wasn’t Gamepad nor keyboard friendly
- Because it was in WPF, I couldn’t mix the game with the UI, so every time you were launching the game it would actually hide the menu, create a new window with the game and launch it. Once the race was finished, it was collapsing everything and restoring the UI … huh!
- Every time I thought about adding something new, I’d get stuck thinking that I had to do it once for WinRT, then find a hack to do it again on Desktop
So I created my own UI Framework 🙂
– yes, there are preexisting stuff, but nothing cross WinRT / Desktop for C#, and even though I tried some alternative, nothing was really compelling … and I do it for fun, so I don’t have to be effective 🙂
I ended up with fully-fledged UI framework that supports:
- Same basic layout à la WPF (Panel, StackPanel, Vertical and Horizontal Aligment)
- Correct’ish Image layout, with Stretch None, Uniform, UniformToFill and Tiled and Text label sizing based on the text inside
- Animations, which are running on the same thread as the game thread
- Some basic kind of XML UI
- Running on top of Direct2D
Because everything goes through Direct2D (and then Direct3D), I have the exact, same code drawing the UI for both WinRT and Desktop.
Everything is part of a PCL so to add a new feature, I just need to add it once in the shared assembly and it will be available straight to WinRT and Desktop. Sweet! 🙂
There are still some stuff which are outside of the Shared UI, like the playlist selection on desktop, but that will probably change later on.
Oh, and I bet you can’t go that fast!
Once again, feedback highly appreciated 🙂