public void StartWatch()
        {
            _components = Object.FindObjectsOfType <MoveComponent>().ToList();
            HeadChange.SafeInvoke(_components[0]);

            _disposable = Observable.EveryUpdate().Subscribe(x =>
            {
                var ordered = _components.OrderByDescending(y => y.TraveledDistance).ToList();
                FindHead(ordered);
                FindKicked(ordered);
            });
        }
        private void FindHead(List <MoveComponent> ordered)
        {
            if (!ordered.Any())
            {
                return;
            }

            var head = ordered.First();

            HeadChange.SafeInvoke(head);

            _head = head;
        }