A look at the Old IDE
This week I took a look at the old Stroke Therapy Games IDE used for the case studies. It runs on a customized older version of Looking Glass. I played around with the famous (infamous?) Player object which behaved much like I thought it should when I was first thinking about keeping scores. It was nice to see that my thoughts aligned with the makers of this IDE in that regard. However, seeing it implemented exposed some ways it could be improved. For instance, in the old IDE, the Player is automatically visualized as a score board of showing numbers. This is a reasonable default, but it looks pretty ugly and should have some other visualizations available. Ideally this would be something that would attach to the camera view like a HUD and not be a model that you have to move around.
I like the way they implemented events. Having an events tab next to procedures and functions make it very easy to discover. Additionally, having events for individual models makes it easier to reason about. Instead of "collisionListener [listOfObjects] [listOfObjects]", it is "object collidesWith otherObject". This also lends itself to easily assigning events to other objects.
The spawnBox mechanism and createCopy mechanism would both be incredibly useful in cases like the laser beams for my UFO game. Also, there is a recycle mechanism that gets rid of the copies which is nice for objects getting stale or there being too many. One extension of this that could be useful would be a way to recycle the oldest copy. This might be a specific behavior to my UFO lasers that could be achieved in other ways, but I think a way of keeping track of specific copies that came from a spawn box should be implemented.
One issue to consider is if we should allow events/collisions on a Class basis. For instance, if I'm spawning a bunch of lasers and I'm also spawning a bunch of aliens, I would want a listener for a laser colliding with an alien. If that laser is mid air and a new alien spawns, I would want the laser to still know that it collided with an alien. This could be achieved if you had the laser have an event for all members of the Alien class and if you could access the specific alien to operate on it.
This gets at an issue Kyle and I discussed early this week about the separation between models and their behavior. It would be really nice to just change the model of a character in the scene without losing all of its event handlers and methods. This is the kind of behavior I discussed last week about custom theming, but it would be nice to be able to achieve this change programatically as well as through the scene editor.
In certain cases, it makes sense to just make the object disappear, and then replace it with a different object. For example, if a monster gets zapped into a plant, it would make sense to call methods on the replacement object. However if wolf becomes a knight or something, it would be nice to not have to hand off event handlers and duplicate methods.