Saturday, June 21, 2014

FMod - The Wizard's Tricks

Today slipped by without me really accomplishing anything. (That kind of day makes me very sad and disappointed with myself.) I did make a tiny bit of progress on Abiathar, in that I theoretically solved a problem I had been thinking about for a long time. Oh, and I made more work for myself.

The problem I had been dreading dealing with was the merge of the Gather and Open subroutines. Currently, they both do a lot of work figuring out what data to put in what stream. This work is extremely similar, but different in that Gather has to deal with files being taken from memory on a one-time basis, while Open can trust that this is the way it will be done every time. Gather starts editing from the settings in the Dependency Collector; Open starts editing from the dependency file. Once they have figured out where to get the stream data, they pass Stream objects to a common FilesOpened subroutine.

Since Open takes an existing dependency file and Gather needs to create one, the obvious solution is to have the Dependency Wizard create an actual dependency file object. This works great, except for one thing: what if the user wants to start from default maps? To solve this, I added a new structure to AbiatharFileConfig that will not be saved or loaded; its only purpose is to inform the new unified file opener that some files need to be created. This has not yet been implemented, but I believe it will work great.

I also noticed a huge empty space to the left of where I'm going to put things in the Dependency Wizard. Other wizards (like installers) have some artwork in a tall panel. Inspired by this layout, I fiddled with the wizard form layout to be more like it. I created a Dictionary(Of TabPage, Bitmap) to display a different image for each tab page. I tried making them screenshots from the game, but [1] those are a huge pain to prepare and [2] they're not super relevant. I might stick with this style, but I might invite people from the community to make relevant artwork.

No comments:

Post a Comment