summaryrefslogtreecommitdiff
path: root/TODO.org
blob: 38e5c059e36c57bbf7b9f1171168daba12e53655 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
* Things To Do

** DONE Game loop
   Provide a game loop structure that responds to input events,
   updates the game state, renders the scene. Use a fixed update
   timestep and cap the maximum FPS.

** TODO Input
   Provide hooks to respond to keyboard, mouse, and joystick events.
   Wrap SDL keycode, mouse button, etc. constants in our own
   enumeration.

   - [X] Keyboard
   - [X] Mouse
   - [X] Window (active, resize, quit)
   - [ ] Joystick

** DONE Sprites
   Encapsulates an image and all of its transformations: position,
   rotation, scale, color, etc.

   - [X] Use FreeImage
   - [X] Add support for texture regions
   - [X] Add support for animations
   - [X] Use a sprite batch when drawing if one is currently bound

** TODO Sprite batches
   Efficiently render a large number of sprites. Only change OpenGL
   context when necessary. For example, don't change texture when
   rendering several sprites in a row that use the same one.

   - [X] Add basic batching for non-scaled, non-rotated sprites
   - [X] Add transformation logic for scaling and rotating
   - [X] Add support for colors
   - [ ] Add support for different blending modes

** DONE Tilesets
   Break an image up into many small pieces. Useful for creating maps.

** DONE Animations
   Create a data type to represent an animated sequence of textures
   and/or texture regions.

** TODO Tile maps
   - [ ] Create a generic tilemap module
   - [ ] Create a loader for Tiled .tmx map files.

** TODO Scene graph
   A tree structure that is traversed when rendering a game scene.
   The graph is composed of groups and nodes. Transformations are
   accumulated as the tree is walked.

** DONE Scripting
   Provide a way for users to easily script 2D games using coroutines
   and a scheduler.

** TODO Vectors and matrices
   Vectors and matrices are needed constantly for games. Provide an
   easy-to-use module that provides procedures for common
   vector/matrix math operations

   - [X] Vectors
   - [ ] Matrices

** DONE Fonts
   - [X] Write wrappers for needed FTGL functions
   - [X] Write font rendering procedures

** TODO Sound
   Provide helpful wrappers around SDL sound procedures?

** TODO A* pathfinding
   A* is a commonly used pathfinding algorithm for games. Pathfinding
   is such a common task that it would be nice to provide users with
   a generic implementation.

** TODO Bounding box collision detection
   Most games need simple bounding box collision detection. Provide an
   efficient implementation that uses quad trees.

   - [X] Rect module
   - [ ] Quadtree module

** TODO Particle systems
   Provide a highly configurible particle simulation system.

** TODO Asset Management
   Provide a generic system for loading assets (images, sounds, fonts,
   etc.) and storing them in a cache. Explore using weak keys so that
   assets are removed from the cache when they are no longer
   referenced.

** TODO Actions
   Provide a library of coroutines that perform commonly used
   time-based actions such as linear interpolation. It would be nice
   to have a way to make these easily composable as well.

   - [ ] Make actions composable
   - [ ] Linear interpolation (lerp)
   - [ ] Move to/move by

** TODO Combos
   Provide an Emacs-like way of defining key combinations to that
   multi-button input is easy for users.

   - [ ] Basic sequences (press A then B)
   - [ ] Simultaneous key presses (press A and B at the same time)
   - [ ] Timeouts (combos fail if you don't enter them quick enough)

** TODO GUI widgets
   Provide a set of common graphical widgets such as buttons, scroll
   bars, and sliders.

** TODO 0.1 Release
   An official 0.1 alpha release with basic, minimal functionality
   will provide a good place for people other than me to try out
   guile-2d and perhaps even start to hack on it.

   - [ ] Finish sprite batches
   - [X] Font rendering with FTGL
   - [ ] Resolve issues with FIGL

     Can't have a broken dependency.

   - [ ] Texinfo documentation
   - [X] Autotools build files