There are a lot of pain points for making new patterns right now:
The abstractions over patterns is perhaps a little too thin. Currently each pattern is just a function that takes in a sprite which you modify and then that's that. More complicated patterns, though, need more information, such as being able to access other sprites, or the ability to defer applying changes to the sprites until all modifications have been calculated. We need a more flexible abstraction.
20 attempts to change the current system so that the bridge between sprite-thinking behavior and the thinking functions is managed by a polymorphic PatternPlayer class. This is really complicated and I don't like it and I don't consider it a permanent solution.
The coordinate system is insane. The coordinates of a sprite are NOT (0, 0) to (w, h), where w and h and width of the monitor(s), as you might expect. They are (-1.0, -1.0) to (1.0, 1.0), because that is how OpenGL expects them. This means, for instance, sprites appear slower when they are moving up and down, since monitors are often wider than tall. We might want to abstract away this OpenGLism and present sprites as the coordinates we expect, so that making patterns is more natural.
There are a lot of pain points for making new patterns right now:
20 attempts to change the current system so that the bridge between sprite-thinking behavior and the thinking functions is managed by a polymorphic
PatternPlayer
class. This is really complicated and I don't like it and I don't consider it a permanent solution.