summaryrefslogtreecommitdiff
path: root/TODO
blob: df678f64cca9f3b88a46f42b7ec60e9a69a613b1 (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
# -*- org -*-

* 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] 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
   - [ ] 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

** TODO Fonts
   - [ ] Fixed width bitmap font rendering
   - [ ] Truetype font rendering via freetype

** 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.

** 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 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
   - [ ] Basic font rendering

     I don't know of any freetype bindings for Guile, so maybe basic
     fixed-width bitmap font support will be all that is possible for
     now.

   - [ ] Resolve issues with FIGL

     Can't have a broken dependency.

  - [ ] Texinfo documentation
  - [ ] Autotools build files