Well, the only thing that changing the spread angle does is change the end angle for rendering the light. It runs the same code whether it is directional or not, so I think putting it in a separate structure is unnecessary. You can still rotate and move the the light, you just need to recalculate the AABB afterwards so that the quad tree remains updated. The AABB cannot just be moved, since the light is not round anymore when it is made directional. If a light is not directional, you can just move the AABB, and no recalculation is required. I am changing some things in the light class so it automatically updates the AABB by either moving or recalculating it when parameters affecting the shape or orientation/position of the light are changed. Right now, you have to do it manually, which can become very confusing :?
The light beam on the other hand needs a separate structure, since it renders the light in a completely different way (a quad). The light rendering is extensible for this reason, but it currently still only supports circular light sources. While not completely realistic, I do not think that anybody will notice that the light beam does not calculate shadow softness using the shape of the beam emitter but rather just a circle positioned along the center point of the beam emitter :wink: