|
58 | 58 | - **Property 12: Horizontal boundary X-coordinate variation** |
59 | 59 | - **Validates: Requirements 4.3** |
60 | 60 |
|
61 | | -- [ ] 3. Implement V-formation positioning |
| 61 | +- [x] 3. Implement V-formation positioning |
62 | 62 | - Implement initializeVFormation() to position 5 birds in V-shape |
63 | 63 | - Calculate lead bird position at spawn point |
64 | 64 | - Calculate wing bird positions with 40px spacing and 30-degree angle |
65 | 65 | - Ensure consistent spacing between all birds in formation |
66 | 66 | - _Requirements: 2.2, 2.4_ |
67 | 67 |
|
68 | | -- [ ] 3.1 Write property test for V-shape arrangement |
| 68 | +- [x] 3.1 Write property test for V-shape arrangement |
69 | 69 | - **Property 7: V-shape arrangement** |
70 | 70 | - **Validates: Requirements 2.2** |
71 | 71 |
|
72 | | -- [ ] 3.2 Write property test for consistent bird spacing |
| 72 | +- [x] 3.2 Write property test for consistent bird spacing |
73 | 73 | - **Property 9: Consistent bird spacing** |
74 | 74 | - **Validates: Requirements 2.4** |
75 | 75 |
|
76 | | -- [ ] 4. Implement flight mechanics |
| 76 | +- [x] 4. Implement flight mechanics |
77 | 77 | - Calculate flight direction from spawn boundary to opposite boundary |
78 | 78 | - Implement Bird.update() to move bird along velocity vector |
79 | 79 | - Implement BirdFormation.update() to update all birds with same velocity |
80 | 80 | - Implement hasReachedTarget() to detect when formation crosses opposite boundary |
81 | 81 | - _Requirements: 1.3, 1.4, 4.4_ |
82 | 82 |
|
83 | | -- [ ] 4.1 Write property test for formation reaches opposite boundary |
| 83 | +- [x] 4.1 Write property test for formation reaches opposite boundary |
84 | 84 | - **Property 3: Formation reaches opposite boundary** |
85 | 85 | - **Validates: Requirements 1.3** |
86 | 86 |
|
87 | | -- [ ] 4.2 Write property test for V-shape invariant during flight |
| 87 | +- [x] 4.2 Write property test for V-shape invariant during flight |
88 | 88 | - **Property 8: V-shape invariant during flight** |
89 | 89 | - **Validates: Requirements 2.3** |
90 | 90 |
|
91 | | -- [ ] 4.3 Write property test for flight path toward opposite boundary |
| 91 | +- [x] 4.3 Write property test for flight path toward opposite boundary |
92 | 92 | - **Property 13: Flight path toward opposite boundary** |
93 | 93 | - **Validates: Requirements 4.4** |
94 | 94 |
|
95 | | -- [ ] 5. Implement spawn timer and lifecycle management |
| 95 | +- [x] 5. Implement spawn timer and lifecycle management |
96 | 96 | - Implement BirdFormationManager.update() to handle spawn timer countdown |
97 | 97 | - Trigger spawnFormation() when timer reaches zero |
98 | 98 | - Reset timer with new random interval after spawn |
99 | 99 | - Detect when formation reaches target and despawn it |
100 | 100 | - Reset spawn timer after despawn |
101 | 101 | - _Requirements: 1.1, 1.4, 1.5_ |
102 | 102 |
|
103 | | -- [ ] 5.1 Write property test for despawn triggers timer reset |
| 103 | +- [x] 5.1 Write property test for despawn triggers timer reset |
104 | 104 | - **Property 4: Despawn triggers timer reset** |
105 | 105 | - **Validates: Requirements 1.4** |
106 | 106 |
|
107 | | -- [ ] 6. Implement rendering system |
| 107 | +- [x] 6. Implement rendering system |
108 | 108 | - Load bird sprite texture in BirdFormationManager.initialize() |
109 | 109 | - Implement Bird.render() to draw bird sprite at current position |
110 | 110 | - Implement BirdFormation.render() to render all 5 birds |
111 | 111 | - Implement BirdFormationManager.render() to render active formation only |
112 | 112 | - Add null check to skip rendering when no formation is active |
113 | 113 | - _Requirements: 3.1, 5.1_ |
114 | 114 |
|
115 | | -- [ ] 6.1 Write property test for no rendering when not visible |
| 115 | +- [x] 6.1 Write property test for no rendering when not visible |
116 | 116 | - **Property 14: No rendering when not visible** |
117 | 117 | - **Validates: Requirements 5.1** |
118 | 118 |
|
119 | | -- [ ] 7. Implement resource management |
| 119 | +- [x] 7. Implement resource management |
120 | 120 | - Implement Bird.dispose() to clean up bird resources |
121 | 121 | - Implement BirdFormation.dispose() to dispose all 5 birds |
122 | 122 | - Call formation.dispose() when despawning |
123 | 123 | - Implement BirdFormationManager.dispose() to clean up shared texture |
124 | 124 | - _Requirements: 5.4_ |
125 | 125 |
|
126 | | -- [ ] 7.1 Write property test for resource cleanup on despawn |
| 126 | +- [x] 7.1 Write property test for resource cleanup on despawn |
127 | 127 | - **Property 15: Resource cleanup on despawn** |
128 | 128 | - **Validates: Requirements 5.4** |
129 | 129 |
|
130 | | -- [ ] 8. Integrate with MyGdxGame |
| 130 | +- [x] 8. Integrate with MyGdxGame |
131 | 131 | - Add BirdFormationManager field to MyGdxGame |
132 | 132 | - Initialize BirdFormationManager in MyGdxGame.create() |
133 | 133 | - Call birdFormationManager.update() in MyGdxGame.render() before rendering |
134 | 134 | - Call birdFormationManager.render() after rain effects but before UI elements |
135 | 135 | - Call birdFormationManager.dispose() in MyGdxGame.dispose() |
136 | 136 | - _Requirements: 3.1, 3.2, 3.3_ |
137 | 137 |
|
138 | | -- [ ] 9. Create bird sprite asset |
| 138 | +- [x] 9. Create bird sprite asset |
139 | 139 | - Create or source a simple bird sprite texture (32x32 pixels recommended) |
140 | 140 | - Place texture in assets/sprites/ directory |
141 | 141 | - Update Bird class to load texture from correct path |
142 | 142 | - Test texture loading and rendering |
143 | 143 | - _Requirements: 3.1_ |
144 | 144 |
|
145 | | -- [ ] 10. Final checkpoint - Ensure all tests pass |
| 145 | +- [x] 10. Final checkpoint - Ensure all tests pass |
146 | 146 | - Ensure all tests pass, ask the user if questions arise. |
0 commit comments