Rubygame TODO (I hope the contents of this file are at least partially-legible to English readers. No promises, though.) Features: - All these features are for later (post-1.0) versions - OpenGL (add a GL module with a few methods, ruby-opengl does the rest?) - swap_buffers --> SDL_GL_SwapBuffers() - set_attribute --> SDL_GL_SetAttribute() - get_attribute --> SDL_GL_GetAttribute() - Draw module: - add bezier curve - Sound/music playback (SDL_Sound, OpenAL?) - SDL sound & mixer bindings first, then consider OpenAL also. - Add CD playback? Maybe, but not a priority. - Transform module: - add hq2x, hq3x, hq4x -- http://www.hiend3d.com/hq3x.html - image flipping with rotozoom -1 scale does not work. My fault or GFX's? API: - Add Queue#each (iterator, not returning an Array like #get) - Rename Queue#get to #get_all ? - Should Queue just be a module, and not a class? (yes) - Screen#set_caption and #caption should be split into functions for title and iconized, style of 'title=' - Should module checking (Draw, Transform, etc.) use a variable instead of the function "usable?()"? (yes) - Should Draw module be Surface#methods instead? - Drop most cases of "you can pass N values or an Array or ...". Convenience for the user is one thing, but it's not that hard to expand an Array into multiple values [hint: method(*myarray)] and supporting multiple ways of giving arguments muddies the code too much. - Rect.new_from_object() should stay, though. It's supposed to be that way. - There should be a consistent rule across the API. Proposed rule: - If the method ONLY takes the Array/values (e.g. Rect#inflate), it should take only the separate values (many parameters). - If the method takes the Array/values AND other arguments (e.g. Surface.new), it should take only the Array (single parameter). Implementation: - Framerate limiting with Clock#tick is unacceptably inaccurate. - Rect needs cleaned up and fixed. - Some algorithms may be INCORRECT! (union, normalize, others?) - 'test/test_rect.rb' doesn't test most methods!! - It's pretty lame to make e.g. Rect#union just call union! on a dup. Or is it...? Is this a matter of style, or efficiency? DRY? - Code (especially C code) really needs to be cleaned up. Recommend making a "clean" branch, fixing code module by module, then re-merge. ############################ - # More argument checking!! # (Make sure arguments are the right type.) ############################ - Passing an optional argument to a C function as nil _IS NOT_ the same as not passing it at all -- it is counted in number of arguments! - Do NUM2INT, etc. check if it is a Numeric? Do they work with Floats? - Do we need to make sure color values are between 0 and 255 before we pass them to SDL functions? - C equivalent of Rect.new_from_object (see rect.rb) - Screen#update (cannot pass object with rect attribute) - Screen#update_rects (same as above) - Should UpdateGroup union highly-overlapping rectangles for efficiency? - LimitGroup#add could be more efficient (replace many sprites at the same time, rather than doing it one by one.) - Better support for non-US keyboards, particularly generating strings for keypresses. (EURO, WORLD*) Will need someone with a non-US keyboard to test this.