For a long time I’v been interested in running game-specific/entity-specific code in coroutines. Something like the following.
void some_game_object_behavior( entity ent, ... )
{
pnt3 points[] = {
{1,1,1},
{2,2,2},
{3,3,3},
{4,4,4}
};
int pos = 0;
while(entity_alive(ent))
{
// move the entity to a position and yield coroutine while movement is ongoing.
move_to(ent, points[pos % ARRAY_LENGTH(points)]);
pos++;
for(int i = 0; i < 4; ++i)
{
shoot_bullet(ent);
wait_sec(ent, 2); // do nothing for 2 seconds and yield the coroutine for that duration.
}
}
}
The above example is slightly simplified but I hope that it get the point across, that I want to be able to suspend code-execution at specific points and wait for certain actions to complete. Writing one-off game-code in this fashion might be a good way to work, especially when adding wait_for_any() and wait_for_all() etc.
Read More