I Wish I Had a Tool
I keep thinking about the Salamander Simulation Engine (SSE) -- a codebase I worked on in the mid-nineties -- and thinking what a cool tool it was. For that matter, it likely still is, although the company has changed name and direction a bit since 1997. Now it's DecisionPower and they're all about market simulation. Back then they (we) were Salamander Interactive and it was about this general purpose simulation engine.
The SSE was a way of keeping time and a general interface contract for hooking components up to one another. The coolest thing was that you could, in pretty short order, write up a set of components, drop them into the simulator and they'd show behavior. You didn't have to know about graphics or do lots of complicated event handling since that was all in the container. I wrote a simplistic sort of SimCity (we called it "Bitville") with houses, workplaces, roads, resources, and shops. People would get up in the morning, go to work and build stuff -- driving trucks of lumber and ore from the outskirts to the factories -- and then get off work and go shopping on their way home. Money moved around, resources moved around, and all this took me about a week.
The thing that made the SSE really powerful was that the components were written to implement a fairly generic interface. There was a graphical component, of course -- a component needed to be able to draw itself -- but there was also a standard way a component could get wired up to other components and a standard (and small) set of messages. This architecture allows a developer to create some fairly simple components and hook them up to model complex behaviors.
Nowadays, every time I read about some economic model, I want to code up a few components and drop them into the SSE and watch them go. Emergent behavior is fascinating to me.
I've looked for a library that does something like what the SSE did, and
found both tortugaDES and JSL. Both seem pretty cool, but neither seems to have the pluggable component design that I want. I guess I'm going to have to build it from scratch. Oof!