-
Notifications
You must be signed in to change notification settings - Fork 0
/
TODO.txt
103 lines (76 loc) · 3.61 KB
/
TODO.txt
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
- Camera
#- Draw to the screen texture
#- Update the screen with this texture
#- Resizing
- Smooth scrolling
#- UI camera
#- Screen pos to draw pos
- Better name for draw texture (world texture?)
- Improved creation AffineTransform options
- Add option to upsample to screen size
- Add feature to make UI for a reference, virtual screen size (width, and height) (=> Match the
screen height when upscaling, but stretch each x coordinate so that the width would match the screen width,
=> Scale x and y independently)
#- Make the position the center of the viewing field
- Only render objects that are visible
#- Make GamePanel the scene manager (handle the events properly add methods for setting the scene)
- Call start (component) at the beginning of the next frame and not directly
#- Call onDestroy after onUpdate / onDraw / ... => Make Component an IDestroyable and in GameObject register
the component for the destroy loop
- Add methods to get and to query all objects in the scene
- Collision engine
#- Detect collisions
#- Resolve collisions
#- Support layers
#- Add CollisionEngine to the Scene class
- Think about how to handle: shouldCollideWithOthers, shouldOthersCollideWithSelf
#- Rendering with SpriteRenderer
#- Scaling
#- Rotation
#- Sorting based on layers
#- Clean up code
#- Keyboard Handler
#- Mouse Handler
- Sound System
(- Create a SoundManager for loading and playing clips)
#- Sound class for representing a sound
- Preload the sound data of SoundEffects into memory before playing (and share this memory)
#- Call close() on each clip
- Load the sound in a separate thread
#- Rename Sound to SoundEffect
#- Music class for long sound files that need to be streamed from a file (with pause method for stopping without closing)
(https://docs.oracle.com/javase/8/docs/technotes/guides/sound/programmer_guide/chapter4.html)
#- 3D Sound System (pan and volume)
- Add close methods for Music, SoundEffect and SoundEffectInstance
#- Add pan to Music
#- Graphics Helper for drawing images
#- Time (.deltaTime, .time, ...)
- Make public methods that return a Vector2 return a copy
#- Add tags to GameObjects
#- Vector2: Get angle from Vector2, MoveToward
#- Simple random util class
#- Range function
#- Generate Vectors
#- Constants for Key ids (make a file called Keys)
#- Same for Mouse buttons
- Use javadoc comments
- Game Application
#- Move the main code (which sets up the window) into a separate class (Application)
- Add more methods for customisation (e.g. title)
- Add print() function to Components for ease of use (wraps System.out.println)
#- Improve the constructor of GameObject: Make a new constructor without parameters that defaults to the
active scene
- Update package name for the game engine (com.inspiaaa.decaf?)
- Mouse and Keyboard: make the setButtonState method public
- Mouse and Keyboard: Run in two phases: UI and game phase. The UI should then be able to block the game input
from reaching the second phase
- Mouse: hide / show mouse pointer
#- Add mouse wheel API to Mouse
#- Document mouse wheel API
- Resources class for accessing files in a dedicated resources / assets folder
- Optimise imports
- Optimise rendering pipeline (less intermediate images)
- Reduce GC lag spikes due to unnecessary allocations (AffineTransform, Vector2, Rectangle, ...)
- 2d light system (alpha based masks without shadows)
- Improve formatting: Add space when casting (int)x => (int) x
- For scene: create an empty method create() that is meant to be overridden instead of using start()