-
Notifications
You must be signed in to change notification settings - Fork 0
/
TODO
180 lines (168 loc) · 10.5 KB
/
TODO
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
TODO
# GameKit
• TODO: Fix buttons
# High priority
• DONE: *MANDATORY:* Limit game to 5 players (blue, red, green, cyan, magenta)
• DONE: *MANDATORY:* Send `ClientRefused` when a client tries to join an already started game
• TODO: *MANDATORY:* Add a HUD with score + health + time
• TODO: *MANDATORY:* Do a very basic lobby system without GUI
• TODO: Test multiplayer on LAN and on the Internet, on the same platform and between Win and Linux
• TODO: *NE PAS OUBLIER LES HEADERS ET LES FIXME!!!!!!!!!!!!!!!!*
→ *Commande:* `sed -i '/Created/,+1d' fichier`
# Low priority
• DONE: Add a script `pack_for_windows.sh` which will pack executables, resources and dlls
• TODO: Add an AUR package, just for fun
→ So impossible right now, resources need to be in a known place
→ Maybe use ~/.local/share/rtype but the game won’t work if it’s not installed :/
→ In that case check for local folder first, if /resources doesn’t exist check the other folder
# Others
• Timeline:
◦ DONE: Faire un `PositionComponent` au lieu de l’héritage à `sf::Transformable`
→ DONE: Solution alternative: Ajouter le `sf::Transformable` en composant
◦ DONE: Intégrer le code de Dylan pour la GUI
◦ DONE: Finir d’améliorer l’architecure réseau
◦ DONE: Améliorer l’architecture des systèmes
→ DONE: Rajouter DrawingSystem dans la Scene au lieu de l’appeller direct
◦ TODO: Faire le système de gestion dynamique des ennemis + PPT
◦ TODO: Faire un exemple minimal avec le boss
◦ TODO: Rajouter un score, des types d’ennemis, de bullets, un boss, ...
◦ TODO: Faire le système de lobby et le rajouter sur le PPT
◦ TODO: Faire un exemple minimal sans GUI (en gros le serveur s’occupe de tout)
Notes:
◦ DONE: Quand je ferme avec Win+Shift+A
→ Le serveur se ferme et impossible de le relancer instantanément
◦ DONE: Quand je tue le boss j’me tape un GameOver wtf?
◦ DONE: Quand je meurs dans le jeu
→ `Cas 1:` Le serveur m’envoie que je suis mort et l’écran de GameOver s’affiche
→ Le serveur se ferme et impossible de le relancer instantanément
→ `Cas 2:` Le serveur ne m’envoie pas que je suis mort, mon perso reste affiché et tout continue sans moi
→ Ce cas semble apparaître quand il y a plusieurs ennemis sur la map
• WIP: Amélioration d’architecture
◦ DONE: Transformer /engine en lib pour éviter de recompiler 2 fois tous les fichiers
◦ DONE: Le réseau n’a rien à faire dans le `MovementSystem`, le déplacer vers un autre système
◦ DONE: Mettre le jeu dans une bibliothèque séparée (càd les Factory/Movement/Behaviour)
◦ DONE: Virer `Application` et créer une classe statique `Config` avec les dimensions de l’écran
◦ DONE: Renommer /graphics/characters en /graphics/spaceship et /graphics/bullets en /graphics/bullet
◦ DONE: Virer la dépendance à la partie multimédia de la SFML pour le serveur
→ `Problèmes:` `DrawingSystem` est dans `SceneSystem` et `sf::Transformable` est défini dans la partie graphique de la sfml
→ Solutions: Créer des vraies classes pour les systèmes et un conteneur de systèmes dans `Scene` qui remplacerait `SceneSystem`
Créer un `PositionComponent` qui remplacerait l’utilisation de `sf::Transformable` (qui serait utilisée par `Image` à la place)
→ Mettre les parties affichage/audio dans des bibliothèques séparées utilisées uniquement dans le client
→ Déplacer la dépendance à la SFML vers les CMakeLists.txt du client et du serveur
◦ DONE: Renommer `EntityMove` par `EntityState`
◦ DONE: Améliorer le code réseau du client et du serveur
◦ DONE: Créer une classe `Client` qui remplacerait `NetworkCommandHandler`
◦ DONE: Faire en sorte que `Network` n’ait pas de code spécifique ni au client, ni au serveur
◦ DONE: Renommer `AnimationLoader` en `SpriteLoader` et idem pour le fichier XML
◦ DONE: Améliorer les fonctions `Scene::addController` et `Scene::addView`
◦ DONE: Vérifier que tous les fichiers de l’engine soient bien à leur place
◦ DONE: `TextureLoader` devrait aller dans /client
◦ DONE: `EnemyInfoLoader` et `EnemyInfo` devraient aller dans /game
◦ DONE: `NetworkController` devrait aller dans /game
◦ DONE: Virer `Network`
◦ DONE: `ServerInfo` ne devrait pas être un singleton
→ Il est utilisé par `Server` et `NetworkController`
→ Le déplacer vers le dossier du serveur
◦ DONE: Créer un loader pour les musiques
◦ DONE: Faire un dossier /resources pour les ressources
◦ DONE: Déplacer /audio /fonts et /graphics dans /resources
◦ DONE: Déplacer /data/config dans /resources
◦ DONE: En attendant le système de lobby réutiliser les sockets du serveur pour toutes les games
▸ DONE: Déplacer `Server` dans le main
▸ DONE: Régler les problèmes d’animation du joueur sur sa deuxième partie
◦ TODO: Faire un controlleur pour les explosions au lieu de gérer ça à la main
→ Penser au fait que les bullets utiliseront probablement ce controlleur pour les hit
◦ TODO: Améliorer le formatage des animations dans le fichier XML
◦ TODO: Rendre `ResourceHandler` thread safe, en préparation pour le système de lobby
◦ TODO: Transformer `SpawnerController` en vrai `Controller`
→ Actuellement impossible à cause des `CollisionHandler` ajoutés dans `Scene::addObject()`
◦ TODO: Remplacer la SFML2 par BoostASIO pour la partie réseau
◦ TODO: /LOW/ Créer un loader pour les fonts
◦ TODO: /LOW/ Remplacer tinyxml2 par Qt et virer le dossier /cmake
• WIP: Network issues
◦ DONE: Enemy bullets disappear when enemy is killed
→ Potential solution: Add subentities to Scene if the entity dies
→ Alternative solution: Wait subentities are dead before killing main entity
◦ DONE: Bullets appear on the top-left corner before being shooted, why?
◦ DONE: During network lag spikes, entities are not correctly deleted/spawned
→ Use TCP to send spawn/die events
◦ DONE: Alive entities are not sent to new clients
◦ DONE: Find a way to fix error message at server close “Can’t find client with id”
◦ DONE: Put a timeout on connect and a “Connecting...” message
◦ DONE: When a enemy is killed by the player, its death message is sent way too much times
→ But when they’re out of the screen they’re killed properly
→ Maybe it’s just because the bullets are still touching it, but wtf?
→ `Note:` If the enemy has still bullets alive, he won’t be killed instantly, that explains this issue
◦ DONE: When 4 players are in the game, the server won’t terminate at the end
◦ DONE: When you connect to an empty server that has been already used, the timeout doesn’t work
→ DONE: While lobby system isn’t implemented try to close server when there is no clients playing
◦ DONE: Check if client close works as intended (test closing player 0 before 1, then the opposite)
→ DONE: When closing Player 0 first, Player 1 stays inactive, maybe he’s dead but he didn’t got the info
→ Also happens in single player mode???
→ Thought it was fixed, but it really isn’t
◦ DONE: Find a way to fix exception “Listen failed”
◦ DONE: Can’t join the server again if I leave
◦ DONE: Reset the server on game end instead of closing it
◦ TODO: When you try to connect to an already running server, the timeout doesn’t work, it’ll wait the end of the game
◦ TODO: Send a `ClientRefused` instead of letting the client wait for `ClientOk`
• TODO: Documentation
◦ TODO: *MANDATORY:* Binary protocol (RFC, ascii format, printed)
◦ TODO: *MANDATORY:* UML class + sequence diagram (printed)
◦ TODO: *MANDATORY:* Doxygen (optional)
• WIP: Game
◦ DONE: Background
◦ DONE: Slow horizontal scrolling background
◦ DONE: Stop when the scrolling ends
◦ WIP: Network
◦ WIP: Server
▸ DONE: Handle up to 4 players
▸ TODO: Handle multiple games at the same time (lobby system)
▸ TODO: Handle client crash (timeout)
▹ TODO: Implement `ClientAlive` TCP command
◦ WIP: Player spaceship implementation (blue, red, yellow, green)
◦ DONE: Add the ability to shoot
◦ DONE: Add network-based movement
◦ DONE: Handle collisions with screen borders
◦ DONE: Handle movement animation
◦ DONE: Handle player color
◦ TODO: Die animation
◦ WIP: Enemy implementation
◦ DONE: Add movement
◦ DONE: Add the ability to shoot
◦ DONE: Send notification to each client when a mob spawns, is killed, shoots, kills a player...
◦ DONE: Handle random spawn on the right of the screen
◦ DONE: Handle movement animation
◦ DONE: Die animation
◦ TODO: Add a dynamic library loader for enemy factories/movement/behaviours
◦ TODO: Add a menu to add libs in runtime
◦ WIP: Bullets
◦ DONE: Handle collisions with enemies
◦ DONE: Handle collisions with allies
◦ TODO: Hit animation
◦ WIP: Boss implementation
◦ TODO: Special attacks
◦ TODO: Special die animation
◦ WIP: GUI → Dylan
◦ DONE: Button class
◦ DONE: Title screen
◦ DONE: Pause menu
◦ DONE: Victory/Game over screen
◦ DONE: Text Box class
◦ DONE: Assets improvements
◦ TODO: Lobby screen
◦ WIP: Check if game compiles and works on Windows
◦ DONE: Try to cross-compile and run with Wine
◦ DONE: Try to run cross-compilated executable on Windows
◦ TODO: Try to compile on Windows
• WIP: Review
◦ WIP: Mettre en avant les features de l’engine
→ DONE: Framerate independent
→ DONE: Fichiers XML qui permettent de modifier le jeu sans avoir à recompiler
→ DONE: Engine modulaire (3 parties, le cœur, la partie graphique et le jeu en lui-même)
→ DONE: Système d’entités à composants
→ DONE: Chaque texture n’est chargée qu’une fois en mémoire
→ TODO: Gestion dynamique des monstres (chaque client peut rajouter/enlever des monstres sur sa game)
◦ WIP: Mettre en avant les features réseau
→ DONE: Utilisation de TCP pour la connexion et de UDP pour le jeu en lui-même
→ TODO: Système de lobby
→ TODO: Tchat + commandes serveur (ça serait ouf)