Необходимо придумать алгоритм, переключающий state с разной переодичностью. Счётчик доходит до некого лимита steps и переключается на следующий state, а затем, дойдя до последнего, переключается на первый и начинает всё сначала. Должно работать примерно так:
// state=1, 4 steps
update()
update()
update()
update()
// state=2, 2 steps
update()
update()
// state=3, 3 steps
update()
update()
update()
// state=1, 4 steps
update()
update()
update()
update()
// ...
Такое решение не рассматривается:
states := []int{1, 1, 1, 1, 2, 2, 3, 3, 3} // 1, 2 и 3 состояния
for i := 0; ; i++ {
state := states[i%9]
}
Из-за переполнения счётчика и большого объема массива states (в примере сильно сокращён)