Here's my latest architectural diagram. Once again you can click on the image for the larger version.
The main changes are:
- Events are now called signals. I've been getting ideas from this thread on event managers and consequently looking into boost::signal, and I'm liking what it does. It does everything my present message passing system does except it has more features and is likely to be more robust, so I'd be foolish not to use it. I'll probably still wrap it up in my own interface but it'll be boost::signal underneath. I'm still equivocating between what I'm going to call them though. Messages, events, signals; is there a difference between the terminology?
- Signals/events/whatever are now the fundamental communication method between all modules. This is something I've been wanting to implement but I hadn't wrapped my head around how to make it work. However thinking through all the case I don't see how a well implemented signal class can't be used as the basis for all intermodule data processing. I'm pretty sure I can get the graphics and game modules to work purely through signals as well as all the other core modules. The only possible exception is the file I/O, particularly the logging code for errors which may not be the most prudent to run through a signal system. However I think it's worth giving it a try even for that; if I design the signal system well it should be exactly the same as a function call.
- I've split up the core modules into submodules since a lot of the functionality in there didn't really need to go together. Signals are now so important they need to be in a section all on their own. The setup code I presently have is just a big hack anyway, so I've put all that into an adminstration module that's also in charge of translating SDL events into the format used my system. Finally the kernel and timer code are essentially doing the same thing - sending regular update signals. So I might as well combine the two into the same interface.
As it currently stands I'm pretty pleased with the overall structure here. The little details of exactly what is a class and so on may not be fully thought out, but I can do that when designing the interfaces to the code. I'll most likely be making changes to that once I figure out the flaws when going through an implementation.
I think it's time to get working on the coding and see how well this works. I'll aim to make a demo to begin with that just throws sprites around the screen. I'll also attempt to do this on my MacBook Pro in order to get me comfortable with programming on the laptop and getting the Mac OS X environment and libraries all sorted out. I'm also going to fully document everything using doxygen so I have a decent documentation set.
The other thing I need to get a move on (apart from Stompy's music, which I've slacked off on for a bit even though Blockman is almost finished [headshake]) is finding my own webspace. I'd given myself to the end of the month to do the research and make a decision but I haven't yet had a decent hunt at what's available.
There have been a bunch of reminders that I really do need to get my own hosting space. Firstly there's been the troubles with the web space here. It was nothing I really felt worried about, but it reminded me how I'm going to need my own space eventually, particularly if I need to host lots of files.
Secondly there's the webcomic thread in the lounge (which coincidentally has eaten up a lot of time today). Roughly a year ago I decided it would be fun to start my own webcomic. Throughout the last year I still think it's a good idea and went as far as making it a New Year's Resolution. But in order to do so it's best if I get my own hosting. There are other options available but the benefits of being in control of your own website outweigh them in my mind.
Thus I need to start hunting around for my options available. My current leaning is towards DreamHost as they've got insane transfer limits and space available, but I haven't yet got enough information of what's out there to make a sensible choice. So I need to trawl the web as well as the forums here for the options available, make myself a list and then probably ask the informed opinion of people here for some recommendations.