Skip to content

Commit 9901076

Browse files
committed
More preparation
1 parent bfcd48f commit 9901076

File tree

1 file changed

+41
-34
lines changed

1 file changed

+41
-34
lines changed

src/main.c

+41-34
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,46 @@ void state_addTower(GameState *s, int tileX, int tileY, int type, int scale)
132132
};
133133
}
134134

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+
135175
bool canTarget(EquationType tower, float enemy)
136176
{
137177
switch (tower)
@@ -538,40 +578,7 @@ int main(void)
538578
assert(count > 0);
539579
assert(spacing > 0);
540580

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);
575582
}
576583

577584
int xPos = 4;

0 commit comments

Comments
 (0)