Well, I had to start somewhere, so I decided to start with the basics as first goal: have a running XNA application, displaying a grid, and featuring a camera controllable in whichever way I want it to. First screenshot!

Not much of a looker yet, is she? Modelers among you will recognise the color scheme, I like 3dsmax’s discreet-dark scheme, so I imitated it. Things worth mentioning on development so far:
- I’ve integrated and refactored a camera component by dhpoware that works decently. It’s a monolithic camera supporting several movement modes (firstperson,spectator, flight, orbit). It will serve perfectly as debug camera.
- The input system is designed to cater for all my needs in the near future. It’s based on a distributed control scheme rather than have one big input manager you poll for keystates. Any entity that needs input information on a certain control instantiates a control class, and can poll this instance for information regarding this control. Eg, you can instantiate a KeyboardButtonControl for a certain key, and then poll its Pressed, JustPressedThisFrame, etc. You can layer controls easily, for instance there’s a DirectionalControl interface that you can create based on four digital or analog controls, there’s adapters to transform digital controls into analog controls, there’s AggregateControls that allow you to bind multiple physical controls to one game control, etc.
- On top of this control-based system I’ve added an extra layer of abstraction for use in games: any control used in a game’s final control set is registered via an input component that returns only AggregateControls. This gives me an ideal place to hook later on where I can add a user-defined game control to actual physical control mapping. In game code you just register a control by specifying which interface you need for this control (e.g. analog, digital, directional, pointer) and optionally specifying a default physical control you want to use if there’s no value in the user config yet.
- The rendering system, albeit rudimentary, is already a bit more advanced than just a Render() call. I made the ‘entire’ rendering pipeline instantiateable, so I can create multiple different viewports (eg picture in picture) when I want to.
- I’ve created my own component system. There’s several reasons for this: I like full control, I didn’t agree with XNAs component design too much, I don’t care about not being able to easily publish my components to other parties, and I want to facilitate porting to a non-XNA-based technology as much as possible
Oh, and as for the window title, ‘momentum’ is the working title of the first game I’d like to develop. Nothing is set in stone though, I have several concepts in mind, but this is the ‘easiest’ one to start with.
That’s about it for now. Next up is the rendering pipeline & game/editor integration. Yay!
