Ejemplo n.º 1
0
        private void CreatingLevel()
        {
            if (!Equals(_knifeController, null))
            {
                _knifeController.Dispose();
            }

            var log = GameObject.Instantiate(_core.Levels[counter].LogPrefab, Vector2.up * 8, Quaternion.identity);

            _logView = log.GetComponent <LogView>();

            var points = _logView.GetComponentsInChildren <KnifePointOnLogMarker>();

            if (points.Length == 0)
            {
                throw new NullReferenceException("Нет точек на бревне для спавна кинжалов");
            }

            var knifeCount = Random.Range(1, 4);

            for (int i = 0; i < knifeCount; i++)
            {
                if (i > points.Length)
                {
                    break;
                }
                var point = points[i];
                var knife = GameObject.Instantiate(
                    _core.Levels[counter].KnifeCreator.KnifePrefab,
                    point.transform.position,
                    Quaternion.identity,
                    _logView.transform
                    );
                if (knife.TryGetComponent(out Rigidbody2D rigidbody))
                {
                    rigidbody.freezeRotation = true;
                    rigidbody.isKinematic    = true;
                }
                knife.transform.up = _logView.transform.position - knife.transform.position;
            }

            _disposables.Remove(_logController);
            _logController         = new LogController(_logView, _core.Levels[counter].HitCount, _core.Levels[counter].LogSpeed);
            _logController.Death  += NextLevel;
            _logController.Damage += _scoreCounter.CreamentCount;
            _disposables.Add(_logController);

            var chance = Random.Range(0.0f, 1.0f);

            if (chance <= _core.CoinSpawnChance)
            {
                var logTransform = _logView.transform;
                _coinView = GameObject.Instantiate(_core.CoinPrefab,
                                                   new Vector2(logTransform.position.x + 3f, logTransform.position.y),
                                                   Quaternion.identity, logTransform)
                            .GetComponent <CoinView>();
                _coinView.Pickup += _coinCounterController.CreamentCount;
            }
            _disposables.Remove(_knifeController);
            _knifeController          = new KnifeCreator(_core.Levels[counter].KnifeCreator);
            _knifeController.EndGame += EndGame;
            _inputManager.Throw      += _knifeController.Throwing;
            _disposables.Add(_knifeController);
        }