public void Start(Player player)
        {
            _SpeedModeAnimator = player.GetComponentsInChildren <Animator> (true)
                                 .FirstOrDefault(animatior => animatior.gameObject.name == GameObjectPath.PlayerLowerBody);
            _ReloadAnimator = player.GetComponentsInChildren <Animator> (true)
                              .Where(animatior => animatior.gameObject.name == GameObjectPath.RightAimMode || animatior.gameObject.name == GameObjectPath.LeftAimMode).ToList();

            player.FixedUpdateAsObservable()
            .Where(_ => _SpeedModeAnimator.gameObject.activeInHierarchy)
            .Select(_ => player.transform.position)
            .Buffer(2, 1)
            .Where(b => b.Count == 2)
            .Select(b => b[1] - b[0])
            .Subscribe(moveAmount =>
            {
                _SpeedModeAnimator.SetInteger(AnimationParams.Vertical, (int)MathfExtentions.Sign0(moveAmount.y));
                switch ((_Horizontal)(int)MathfExtentions.Sign0(moveAmount.x))
                {
                case _Horizontal.Left:
                    for (int i = 0; i < _Effects.Length; i++)
                    {
                        _Effects[i].SetActive(false);
                    }
                    if (moveAmount.y > 0)
                    {
                        for (int i = 0; i < _Contrail.Length; i++)
                        {
                            _Contrail[i].SetActive(true);
                        }
                        break;
                    }
                    for (int i = 0; i < _Contrail.Length; i++)
                    {
                        _Contrail[i].SetActive(false);
                    }
                    break;

                case _Horizontal.Stop:
                    for (int i = 0; i < _Effects.Length; i++)
                    {
                        _Effects[i].SetActive(true);
                    }
                    for (int i = 0; i < _Contrail.Length; i++)
                    {
                        _Contrail[i].SetActive(true);
                    }
                    break;

                case _Horizontal.Right:
                    for (int i = 0; i < _Effects.Length; i++)
                    {
                        _Effects[i].SetActive(true);
                    }
                    for (int i = 0; i < _Contrail.Length; i++)
                    {
                        _Contrail[i].SetActive(true);
                    }
                    break;

                default:
                    break;
                }
            });

            var leftMagazinePosition  = player.GetComponentsInChildren <Transform> (true).FirstOrDefault(@object => @object.name == "MagazinePositionLeft");
            var rightMagazinePosition = player.GetComponentsInChildren <Transform> (true).FirstOrDefault(@object => @object.name == "MagazinePositionRight");

            player.Controller.FiringController.ReloadAsObservable()
            .ThrottleFrame(1)
            .Subscribe(_ =>
            {
                for (int i = 0; i < _ReloadAnimator.Count; i++)
                {
                    if (!_ReloadAnimator[i].gameObject.activeInHierarchy)
                    {
                        continue;
                    }
                    _ReloadAnimator[i].SetTrigger("Reload");
                }

                foreach (var animator in _ReloadAnimator
                         .Where(animator => animator.gameObject.activeInHierarchy))
                {
                    animator.SetTrigger("Reload");
                }

                if (player.Controller.StateController.BodyDirection == BodyDirection.Left)
                {
                    MonoBehaviour.Instantiate(_Magazine, leftMagazinePosition.transform.position, Quaternion.identity);
                }
                else
                {
                    MonoBehaviour.Instantiate(_Magazine, rightMagazinePosition.transform.position, Quaternion.identity);
                }
            });

            player.UpdateAsObservable()
            .First()
            .Subscribe(__ =>
            {
                var spriteRenderes  = player.GetComponentsInChildren <SpriteRenderer> (true);
                Coroutine coroutine = null;
                player.Controller.ColliderController
                .OnInvincibleAsObservable
                .Subscribe(_ =>
                {
                    /*_SpeedModeAnimator.SetBool ("Damage", true);
                     * _ReloadAnimator.ToList ()
                     * .ForEach (animator => animator.SetBool ("Damage", true));*/
                    coroutine = player.StartCoroutine(_SpriteFlashing(spriteRenderes));
                });

                player.Controller.ColliderController
                .OnInvincibleEndAsObservable
                .Subscribe(_ =>
                {
                    /*_SpeedModeAnimator.SetBool ("Damage", false);
                     * _ReloadAnimator
                     * .ForEach (animator => animator.SetBool ("Damage", false));*/
                    if (coroutine != null)
                    {
                        player.StopCoroutine(coroutine);
                    }
                    foreach (var s in spriteRenderes)
                    {
                        s.enabled = true;
                        s.color   = Color.white;
                    }
                });
            });
        }
    void FixedUpdate()
    {
        var direction = MathfExtentions.DegreeToVector2(RigidBody.rotation);

        MoveKinematicRB(_speed, direction);
    }
 private void Start()
 {
     _velocityVector = MathfExtentions.DegreeToVector2(Random.Range(0, 360));
     _asteroidSize = GetComponent<AsteroidSettingsComponent>().Size;
 }
    void Shoot()
    {
        var offsetFromTheShip = 0.5f;
        var posOffset         = _rb.position + ((_boxCollider2D.size.x / 2 + offsetFromTheShip) * MathfExtentions.DegreeToVector2(transform.eulerAngles.z));

        Instantiate(GameCore.Instance.GameSettings.PlayerBulletPrefab, posOffset, transform.rotation);
    }