intermittent spawner | gml
objGameManager Create
ticks = 0; ring_instances = ds_list_create();
objGameManager Step
ticks += 1; //every second, on the second: if (ticks mod room_speed == 0){ var inst = instance_create_layer(1,1,"Instances",objRing); with(inst){ var aim_at_x = irandom_range(2,room_height); var aim_at_y = irandom_range(2,room_width); direction = point_direction(x,y,aim_at_x,aim_at_y); speed = irandom_range(1,10); } ds_list_add(ring_instances, inst); } //check for instances outside room, and destroy: for (var i = 0; i < ds_list_size(ring_instances); i++){ var inst = ds_list_find_value(ring_instances, i); if !point_in_rectangle(inst.x,inst.y,0,0,room_width,room_height){ ds_list_delete(ring_instances, i); instance_destroy(inst); } }
objGameManager Draw GUI
draw_text(20,20,"Rings: " + string(instance_number(objRing))); for (var i = 0; i < ds_list_size(ring_instances); i++){ draw_text(20,(60 + i*20),ds_list_find_value(ring_instances, i)); }
extension activities
The step event of the objGameManager can be modified so that the waves of enemies spawned are gradually increased over time:objGameManager Step
ticks += 1; var seconds_passed = ticks div room_speed; //------------------------------------------------------- //WAVE ONE: each second for first 5 seconds of game time: if (ticks mod room_speed == 0 and seconds_passed <= 5){ var inst = instance_create_layer(1,1,"Instances",objRing); with(inst){ var aim_at_x = irandom_range(2,room_height); var aim_at_y = irandom_range(2,room_width); direction = point_direction(x,y,aim_at_x,aim_at_y); speed = irandom_range(1,10); } ds_list_add(ring_instances, inst); } //------------------------------------------------ //WAVE TWO: each half second, //during 10 to 15 seconds past start of game time: if ( (ticks mod room_speed == 0 or ticks mod room_speed == room_speed div 2) and seconds_passed >= 10 and seconds_passed <= 15){ var inst = instance_create_layer(1,1,"Instances",objRing); with(inst){ var aim_at_x = irandom_range(2,room_height); var aim_at_y = irandom_range(2,room_width); direction = point_direction(x,y,aim_at_x,aim_at_y); speed = irandom_range(1,10); } ds_list_add(ring_instances, inst); } //------------------------------------------------ //WAVE THREE: each quarter second (4 per sec), //during 20 to 30 seconds past start of game time: if ( (ticks mod room_speed == 0 or ticks mod room_speed == room_speed div 2 or ticks mod room_speed == room_speed div 4) and seconds_passed >= 20 and seconds_passed <= 30){ var inst = instance_create_layer(1,1,"Instances",objRing); with(inst){ var aim_at_x = irandom_range(2,room_height); var aim_at_y = irandom_range(2,room_width); direction = point_direction(x,y,aim_at_x,aim_at_y); speed = irandom_range(1,10); } ds_list_add(ring_instances, inst); } //------------------------------------------------ //check for instances outside room, and destroy: for (var i = 0; i < ds_list_size(ring_instances); i++){ var inst = ds_list_find_value(ring_instances, i); if !point_in_rectangle(inst.x,inst.y,0,0,room_width,room_height){ ds_list_delete(ring_instances, i); instance_destroy(inst); } }