I finished up passing collision events to individual objects at the end of last week and that went absolutely swimmingly. At the end of every physics frame I process all of the collisions and send the appropriate information to the objects involved. If the object wants to act on collisions it provides a Lua script which is called getting passed the object type that it collided with so it can perform an appropriate action. This is similar to some of the other things I use Lua for on objects so it was under an hour of work. With this piece in place I'm finally at a point where I have the bare minimum of systems up and running to throw together more than just a few ducks bouncing around on the screen.
Brainstorming for Prototyping
With prototyping in mind I got together with an art/design friend of mine who'll be working on this game with me for a brainstorming session. The session went well and we came up with a good starting point for a game we want to make. I'll outline what the game idea is in a future post along with how we approached figuring out what to make but what is important for this post is that some functionality requirements for my code fell out of the brainstorming session. Specifically lighting requirements.
I Hate Lights and Shaders
Really the previous line says it all. It ends up that I needed to add spot lights to the engine but as I've said before I am not a graphics dev. It seemed like a fairly straightforward task seeing that I already had point lights working but nothing is easy for me when it comes to lights it seems. It was easy enough getting the appropriate data into my shader about the lights but no matter what I did the lights just wouldn't light anything. Luckily from my last set of lighting problems I thought it might be another transform problem with the normals or the lights so I moved the camera and the spot light to the origin and my trusty duck model just in front of things and sure enough my light worked. It ends up that the lights in OpenGL are supposed to be in eye space and not in world space. Once I found that out it was easy getting things going and I at least have passable spot lights.
Fixed Function Fall back
What I've learned from the last two painful lighting problems is that I'm horrible at debugging this type of problem. I really got lucky by my move back to the origin because really graphics feel like a black box to me compared to any other system. As such I've decided that to help out my debugging that I'm going to add the ability to fall back to the fixed function pipeline so that I can hopefully see what the scene is supposed to look like and compare it against my own shaders. In the long run it may be an important feature for dealing with older graphic cards as well that don't support everything I need in the programmable pipe.