@@ -29,6 +29,7 @@ type Food struct {
29
29
}
30
30
31
31
var foodPodMappings []FoodPodMapping
32
+ var deletedPodTextEntities []* tl.Text
32
33
33
34
type FoodPodMapping struct {
34
35
foodEntity * Food
@@ -119,6 +120,11 @@ func (snake *Snake) CollidesWithSelf() bool {
119
120
}
120
121
121
122
func GameOver () {
123
+ for _ , entity := range deletedPodTextEntities {
124
+ game .Screen ().RemoveEntity (entity )
125
+ }
126
+ deletedPodTextEntities = nil
127
+
122
128
showFinalScreen ()
123
129
log .Println ("Game Over!" )
124
130
}
@@ -183,6 +189,36 @@ func updatePauseTextPosition() {
183
189
pauseText .SetPosition (startX , startY )
184
190
}
185
191
192
+ func DeletedResourceText (screen * tl.Screen , resourceType , resourceName , namespace string , startX , startY int ) {
193
+ for _ , entity := range deletedPodTextEntities {
194
+ screen .RemoveEntity (entity )
195
+ }
196
+ deletedPodTextEntities = nil
197
+ lines := []struct {
198
+ prefix string
199
+ value string
200
+ }{
201
+ {"Resource: " , resourceType },
202
+ {"Name: " , resourceName },
203
+ {"Namespace: " , namespace },
204
+ }
205
+
206
+ generalMessage := "Oh no! Seems like the snake ate something.."
207
+ generalMessageEntity := tl .NewText (startX , startY , generalMessage , tl .ColorWhite , tl .ColorBlack )
208
+ screen .AddEntity (generalMessageEntity )
209
+ deletedPodTextEntities = append (deletedPodTextEntities , generalMessageEntity )
210
+
211
+ for i , line := range lines {
212
+ prefixEntity := tl .NewText (startX , startY + 1 + i , line .prefix , tl .ColorWhite , tl .ColorBlack )
213
+ valueEntity := tl .NewText (startX + len (line .prefix ), startY + 1 + i , line .value , tl .ColorGreen , tl .ColorBlack )
214
+
215
+ screen .AddEntity (prefixEntity )
216
+ screen .AddEntity (valueEntity )
217
+
218
+ deletedPodTextEntities = append (deletedPodTextEntities , prefixEntity , valueEntity )
219
+ }
220
+ }
221
+
186
222
var score int
187
223
188
224
func (snake * Snake ) Tick (event tl.Event ) {
@@ -192,13 +228,11 @@ func (snake *Snake) Tick(event tl.Event) {
192
228
if isPaused {
193
229
updatePauseTextPosition ()
194
230
} else {
195
- // Move text off-screen when unpaused
196
231
pauseText .SetPosition (- 1 , - 1 )
197
232
}
198
- return // Return early to avoid processing other inputs or game logic
233
+ return
199
234
}
200
235
201
- // If the game is paused, skip updating the game logic
202
236
if isPaused {
203
237
return
204
238
}
@@ -248,14 +282,18 @@ func (snake *Snake) Tick(event tl.Event) {
248
282
food .placed = false
249
283
score ++
250
284
scoreText .SetText (fmt .Sprintf ("Score: %d" , score ))
251
-
252
- // Handle resource deletion linked to food
253
285
for index , mapping := range foodPodMappings {
254
286
if mapping .foodEntity == food {
255
287
go k8s .DeleteResource (mapping .resourceInfo )
256
- deletionMessage := fmt .Sprintf ("Oh no! Seems like you ate %s: %s in namespace %s" , mapping .resourceInfo .Type , mapping .resourceInfo .Name , mapping .resourceInfo .Namespace )
257
- deletedPodText .SetText (deletionMessage )
258
- log .Println (deletionMessage )
288
+ DeletedResourceText (
289
+ game .Screen (),
290
+ mapping .resourceInfo .Type ,
291
+ mapping .resourceInfo .Name ,
292
+ mapping .resourceInfo .Namespace ,
293
+ 1 ,
294
+ LevelHeight + 0 ,
295
+ )
296
+ log .Printf ("Chaos snake consumed %s: %s in namespace %s\n " , mapping .resourceInfo .Type , mapping .resourceInfo .Name , mapping .resourceInfo .Namespace )
259
297
foodPodMappings = append (foodPodMappings [:index ], foodPodMappings [index + 1 :]... )
260
298
break
261
299
}
0 commit comments