diff --git a/TODO.md b/TODO.md index a41b72a..af9230d 100644 --- a/TODO.md +++ b/TODO.md @@ -1,69 +1,68 @@ # TODO -**1. Core Gameplay Loop & State Management:** +**1. Core Gameplay Loop & State Management** -* ~~**Player Lives:**~~ **(DONE)** - * ~~Add a `PlayerLives` resource (e.g., starting with 3).~~ - * ~~Modify `check_player_enemy_collisions`: Instead of just printing, decrement the lives count.~~ - * ~~Implement player destruction (despawn the player sprite) and respawn logic (maybe after a short delay, with temporary invincibility).~~ -* ~~**Game Over State:**~~ **(DONE)** - * ~~Use Bevy's `States` (e.g., `Playing`, `GameOver`).~~ - * ~~Transition to `GameOver` when `PlayerLives` reaches zero.~~ - * ~~In the `GameOver` state: stop enemy spawning, stop player controls, display a "Game Over" message (using `bevy_ui`), potentially offer a restart option.~~ -* ~~**Scoring:**~~ **(DONE)** - * ~~Add a `Score` resource.~~ - * ~~Increment the score in `check_bullet_collisions` when an enemy is hit.~~ - * Consider different point values for different enemy types or hitting enemies during dives later. -* ~~**Levels/Stages:**~~ **(DONE)** - * ~~Add a `CurrentStage` resource.~~ - * ~~Define criteria for clearing a stage (e.g., destroying all enemies in a wave/formation).~~ - * ~~Implement logic to advance to the next stage, potentially increasing difficulty (enemy speed, firing rate, different formations).~~ +* [x] **Player Lives** + * [x] Add a `PlayerLives` resource. + * [x] Decrement lives on collision. + * [x] Implement player destruction and respawn with temporary invincibility. +* [x] **Game Over State** + * [x] Use Bevy's `States` (`Playing`, `GameOver`). + * [x] Transition to `GameOver` when lives reach zero. + * [x] Display a "Game Over" message. +* [x] **Scoring** + * [x] Add a `Score` resource. + * [x] Increment score when an enemy is hit. +* [x] **Levels/Stages** + * [x] Add `CurrentStage` and `StageConfigurations` resources. + * [x] Define criteria for clearing a stage. + * [x] Advance to the next stage with increasing difficulty. -**2. Enemy Behavior - Formations & Attack Patterns:** +**2. Enemy Behavior - Formations & Attack Patterns** -* **Enemy Formations:** This is a core Galaga feature. - * ~~Define target positions for the enemy formation on screen.~~ **(DONE)** - * ~~Give enemies an `Entering` state/component: They fly onto the screen following predefined paths (curves, waypoints).~~ **(DONE - Basic linear path implemented)** - * Give enemies a `Formation` state/component: Once they reach their target position, they stop and hold formation. **(DONE - Stop implemented by removing FormationTarget)** -* **Enemy Attack Dives:** - * ~~Give enemies an `Attacking` state/component.~~ **(DONE)** - * ~~Periodically trigger enemies in the formation to switch to the `Attacking` state.~~ **(DONE - Random selection after formation complete)** - * ~~Define attack paths (swooping dives towards the player area).~~ **(DONE - Basic swoop towards center implemented)** - * ~~Make enemies fire bullets (downwards or towards the player) during their dives.~~ **(DONE - Downward)** - * After an attack dive, enemies could return to their formation position or fly off-screen. **(Fly off-screen implemented)** -* **Enemy Variety:** - * ~~Introduce different types of enemies (e.g., using different components or an enum).~~ **(DONE - Added EnemyType enum and field)** - * ~~Assign different behaviors, point values, and maybe sprites to each type.~~ **(DONE - Behaviors, points & color based on type)** +* [x] **Enemy Formations** + * [x] Define target positions for formations (`FormationLayout`). + * [x] Enemies have an `Entering` state to fly to their position. + * [x] Enemies have an `InFormation` state. +* [x] **Enemy Attack Dives** + * [x] Enemies have an `Attacking` state with different `AttackPattern`s (Swoop, Direct, Kamikaze). + * [x] Periodically trigger random enemies to start an attack dive. + * [x] Enemies fire bullets during their dives. + * [x] Enemies are despawned when they fly off-screen after an attack. +* [x] **Enemy Variety** + * [x] `EnemyType` enum (`Grunt`, `Boss`). + * [x] Different behaviors, points, and colors based on type. -**3. Advanced Galaga Mechanics:** +**3. Advanced Galaga Mechanics** -* **Boss Galaga & Capture Beam:** - * ~~Create a "Boss" enemy type.~~ **(DONE - Added to Enum, handled in matches)** - * Implement the tractor beam attack (visual effect, player capture logic). - * Player needs a `Captured` state. - * Logic for the Boss to return captured ships to the formation. -* **Dual Fighter (Rescuing Captured Ship):** - * Allow the player to shoot a Boss Galaga attempting to capture or one holding a captured ship. - * Implement the logic to free the captured ship. - * Implement the dual fighter mode (controlling two ships, firing two bullets). This involves significant changes to player control and shooting systems. -* **Challenging Stages:** - * Implement a special stage type (e.g., every few levels). - * Enemies fly in intricate patterns without shooting. - * Award bonus points for destroying all enemies in the stage. +* [ ] **Boss Galaga & Capture Beam** + * [x] Create a "Boss" enemy type. + * [x] Implement the tractor beam attack logic (`boss_capture_attack` system). + * [x] Player has a `Captured` component when hit by the beam. + * [x] Boss has a `ReturningWithCaptive` state to go back to the formation. + * [ ] Improve the tractor beam visual effect (currently a simple rectangle). +* [ ] **Dual Fighter (Rescuing Captured Ship)** + * [ ] Allow the player to shoot a Boss that is holding a captured ship. + * [ ] Implement the logic to free the captured ship upon shooting the Boss. + * [ ] Implement the dual fighter mode (controlling two ships, firing two bullets). +* [ ] **Challenging Stages** + * [ ] Implement a special stage type (e.g., every 3-4 levels). + * [ ] Design and implement intricate flight patterns for enemies that do not shoot. + * [ ] Award bonus points for destroying all enemies in the stage. -**4. Polish and User Interface:** +**4. Polish and User Interface** -* **Visuals:** - * Replace placeholder shapes with actual sprites using `SpriteBundle` or `SpriteSheetBundle`. Create distinct looks for the player, different enemy types, bullets. - * Add explosion effects/animations when enemies or the player are destroyed. - * Implement a scrolling starfield background for a more classic space feel. -* **Audio:** - * Integrate `bevy_audio`. - * Add sound effects for player shooting, enemy firing, explosions, player death, capturing, etc. - * Add background music that might change per stage or state (e.g., main gameplay vs. challenging stage). -* **UI:** - * Use `bevy_ui` to display the current Score, Lives remaining, and Stage number on screen during gameplay. - * Display High Score? - * Create a Start Menu state. - -Starting with the Core Gameplay Loop (Lives, Game Over, Score, basic Stages) and then moving onto Enemy Formations and Attack Patterns would likely provide the biggest steps towards a Galaga feel. +* [ ] **Visuals** + * [ ] Replace placeholder geometric shapes with actual sprites. + * [ ] Add explosion animations/effects. + * [ ] Implement a scrolling starfield background. +* [ ] **Audio** + * [ ] Integrate `bevy_audio`. + * [ ] Add sound effects (shooting, explosions, player death, tractor beam, etc.). + * [ ] Add background music. +* [ ] **UI** + * [x] Display Score, Lives, and Stage in the window title. + * [ ] Display Score, Lives, and Stage on the screen using `bevy_ui`. + * [ ] Implement a High Score system (saving/loading). + * [ ] Create a Start Menu state with a "Start Game" button. + * [ ] Add a "Press R to Restart" message to the `GameOver` screen and implement restart logic.