When I started this thing, apparently around 6:30 AM on Wednesday (which seems like about a month ago now), I had three major things to do: design the final XML schema for the cutscene format, design and code the XML-to-live-data loading routines, and build a dummy rendering system that uses colored blobs/boxes to show how the timings and positioning systems work.
I've now finished an early, incomplete draft of the schema; it will validate most working cutscenes, and is only missing a few minor elements. The tricky bit is that those elements are some of the more powerful tools in the cutscene system, so only really simple scenes can be defined right now. However, I do have a demo scene expressed entirely in XML that everyone can look at on the team, which is very useful. I'm now about 70% of the way to proving that my design actually does work [smile]
I also have the loader code designed, and the rendering loop is stubbed in but not quite done. The only really big design thing left to do is the entity position update loop, which will be called each frame, and is in charge of moving around all the little elements in a scene - everything from the camera and the window containing the rendered content, to the ships, missiles, and alien corpses. Thanks to the highly generic data model I've built, that will be very easy to finish.
My goal for today is to have the XML loading code totally done so that I can actually go from a scene described on disk to a live cutscene object set in memory. From there it's a short step to actually doing rendering. (Actually, according to my official plans, that was supposed to be done yesterday - but I've basically only got to go from my extensively detailed notes to actual code, which will move quickly, and the schema took a lot longer than I expected which pushed this back a bit. More on that later.) The other thing I want to get working is the entity positioning code.
With those two things out of the way, I'll have a solid day tomorrow to put together the actual colored-blob-rendering stuff, which really only constitutes adding a few API calls to the 3D engine from the existing render loop code. Then I have the weekend for debugging, polishing, and not working because my new laptop will be here and I'll be playing with it instead [grin]
OK, I'm really doing my best not to gush about this for pages, but I just can't pass up this observation.
I ordered the machine itself from a store on the West Coast, and a new case from Newegg (also West Coast). The case shipped first by several hours. Both are now at a UPS routing center in South Carolina as near as I can tell from the tracking info. The case, however, has spent the last 16 hours there doing nothing, and the machine just got there a few hours ago.
Both shipped on the same day - the computer with 2-day Air shipping, and the case with 3-day. Both are scheduled to arrive the same day. Both came from the same geographic origin region, so there's no weirdness there to excuse the time difference.
Go figure, eh?
Visual Studio 2005's XML Schema Editor
This thing is just too much fun. I spent literally hours last night dragging around little boxes and arrows, and making my stuff look cool. VS2005 generally has some really slick XML editing features; if you've ever done XML by hand in Notepad, coming to a fully syntax-highlighted environment with IntelliSense is like some kind of paradise. I actually sort of like XML now, which feels vaguely dirty to say.
However, there's a long ways to go. I haven't ruled out the possibility that I've missed something important (and please, if you know of a way to ease my pain, let me know!) but there just seems to be some important stuff missing.
First of all, this thing should work more like Visio. I want to be able to show hierarchies unfolding in ways more diverse than "tree expanding to the right." Can I please be permitted to drag boxes under their parent nodes? Can I show some more interesting stuff than just self-expanding globs?
Second, the positioning code is way too forgetful. If I minimize a node in the hierarchy, the size and position of its first child will be remembered, but none of its higher-generation children. So when I reopen the node, all the boxes jump back to the standard size, which usually is not a good size.
Third, the sizing system is just kind of dumb. Say I define a complexType of Foo, and have three different other CTs that hold a Foo child element. If I resize the box for the Foo CT, none of the linked reference boxes resize; I have to resize four boxes. Since the default box size is too small to show long identifier names, or long lists of attributes/subelements, I do a lot of resizing. Combined with #2, and... it gets ugly.
Fourth, as a very important shortcoming, there's a lot of stuff you can't touch in the visual editor. I can't specify minOccurs and maxOccurs constraints anywhere in the UI that I've found; I have to go do it by hand in the XSD code. That makes editing a bit of a pain in the ass, and it makes the visual editor less than useful if you're trying to learn how a schema works. Since vital information (like occurence constraints) is not visible at all in the visual editor, I can be totally confused or even outright misled unless I read the XSD code. Seems like it kind of defeats the point of having a visual editor...
Finally, I'd really really really like it if I had some annotation features. I just want two: the ability to draw a rectangle around a group of "stuff" in the schema, and the ability to drop in floating text labels. Seriously, this thing needs to work more like Visio. If I could group and label nodes, and if the other stuff got fixed, the VS editor would easily be the sexiest XML editing suite ever.
Maybe in VS2007.