observer gameloop