summaryrefslogtreecommitdiff
path: root/TODO
blob: 953eb98e1b65fd2ab2bb49aec8368f8e2265441e (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
# -*- 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
   - [ ] Window
   - [ ] Joystick

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

   - [X] Add support for texture regions
   - [ ] 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.

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

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

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

   (make-animation frame-duration frames)

** 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
   Use Freetype to provide font rendering 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.