@@ -132,6 +132,46 @@ void state_addTower(GameState *s, int tileX, int tileY, int type, int scale)
132
132
};
133
133
}
134
134
135
+ // returns true if all entries were added
136
+ bool state_addQueueFromString (GameState * s , unsigned int frame , const char * queue , unsigned int count , unsigned int spacing )
137
+ {
138
+ unsigned int spawnFrame ;
139
+ if (s -> queueHead == s -> queueTail ) // queue is empty -> spawn immediately
140
+ spawnFrame = frame ;
141
+ else
142
+ spawnFrame = s -> queue [(s -> queueHead - 1 ) % QUEUE_SIZE ].spawnFrame + spacing ;
143
+ while (count > 0 )
144
+ {
145
+ char * buffer = strdup (queue );
146
+ char * prev = buffer ;
147
+ char * pos = strtok (prev , ",;" );
148
+ while (pos != NULL )
149
+ {
150
+ bool queueIsFull = (s -> queueHead - s -> queueTail >= QUEUE_SIZE );
151
+ if (queueIsFull )
152
+ return false;
153
+
154
+ float value = atof (pos );
155
+ if (value == 0 || !isfinite (value ))
156
+ continue ;
157
+
158
+ s -> queue [s -> queueHead % QUEUE_SIZE ] = (EnemyQueue ){
159
+ .spawnFrame = spawnFrame ,
160
+ .health = atof (pos ),
161
+ };
162
+ ++ s -> queueHead ;
163
+ spawnFrame += spacing ;
164
+ prev = pos ;
165
+ pos = strtok (NULL , ",;" );
166
+ }
167
+
168
+ free (buffer );
169
+ -- count ;
170
+ }
171
+
172
+ return true;
173
+ }
174
+
135
175
bool canTarget (EquationType tower , float enemy )
136
176
{
137
177
switch (tower )
@@ -538,40 +578,7 @@ int main(void)
538
578
assert (count > 0 );
539
579
assert (spacing > 0 );
540
580
541
-
542
- unsigned int spawnFrame ;
543
- if (state .queueHead == state .queueTail ) // queue is empty -> spawn immediately
544
- spawnFrame = frame ;
545
- else
546
- spawnFrame = state .queue [(state .queueHead - 1 ) % QUEUE_SIZE ].spawnFrame + spacing ;
547
- while (count > 0 )
548
- {
549
- char * buffer = strdup (healthText );
550
- char * prev = buffer ;
551
- char * pos = strtok (prev , ",;" );
552
- while (pos != NULL )
553
- {
554
- bool queueIsFull = (state .queueHead - state .queueTail >= QUEUE_SIZE );
555
- if (queueIsFull )
556
- break ;
557
-
558
- float value = atof (pos );
559
- if (value == 0 || !isfinite (value ))
560
- continue ;
561
-
562
- state .queue [state .queueHead % QUEUE_SIZE ] = (EnemyQueue ){
563
- .spawnFrame = spawnFrame ,
564
- .health = atof (pos ),
565
- };
566
- ++ state .queueHead ;
567
- spawnFrame += spacing ;
568
- prev = pos ;
569
- pos = strtok (NULL , ",;" );
570
- }
571
-
572
- free (buffer );
573
- -- count ;
574
- }
581
+ state_addQueueFromString (& state , frame , healthText , count , spacing );
575
582
}
576
583
577
584
int xPos = 4 ;
0 commit comments