示例#1
0
文件: Ship.cs 项目: disas69/Asteroids
        protected override void Update()
        {
            base.Update();
            if (IsActive)
            {
                transform.Rotate(0, 0, -_input.GetRotation() * _rotationSpeed * Time.deltaTime);
                Rigidbody.AddForce(transform.up * _movingForce * _input.GetMovement());

                if (_input.ActionButtonPressed())
                {
                    if (_timeFromLastShot > _shotDelay)
                    {
                        var laser = _laserSpawner.Spawn() as Laser;
                        if (laser != null)
                        {
                            laser.Setup(_weapon.transform.position, transform.rotation);
                            SignalsManager.Broadcast("PlayAudio", "laser");
                        }

                        _timeFromLastShot = 0f;
                    }
                    else
                    {
                        _timeFromLastShot += Time.deltaTime;
                    }
                }
                else
                {
                    _timeFromLastShot = float.MaxValue;
                }
            }
        }
示例#2
0
        protected override void OnDestroy()
        {
            base.OnDestroy();

            SignalsManager.Unregister(_hitTopBoundSignal.Name, OnHitBoundsAction);
            SignalsManager.Unregister(_hitBottomBoundSignal.Name, OnHitBoundsAction);
        }
示例#3
0
        public override void OnExit()
        {
            base.OnExit();

            SignalsManager.Unregister(_levelSignal.Name, OnLevelChange);
            SignalsManager.Unregister(_scoreSignal.Name, OnScoreChanged);
        }
示例#4
0
 public void BlowUp()
 {
     GameController.Instance.GameSession.AddScorePoints(_value);
     SignalsManager.Broadcast(_audioSignal.Name, "splash");
     EffectsManager.Instance.Play(GameConfiguration.Instance.PopSettings.BlowUpEffect, _value, transform.position);
     Deactivate();
 }
示例#5
0
        private void OnTriggerEnter(Collider otherCollider)
        {
            var pathLine = otherCollider.GetComponent <Line>();

            if (pathLine != null)
            {
                _currentLine = pathLine;
                return;
            }

            var platform = otherCollider.GetComponent <Platform>();

            if (platform != null)
            {
                _isOnPlatform = true;
                ProcessPlatform(platform);
                return;
            }

            var pickup = otherCollider.GetComponent <Pickup>();

            if (pickup != null)
            {
                pickup.Trigger();
                return;
            }

            var fallZone = otherCollider.GetComponent <FallZone>();

            if (fallZone != null && !_isOnPlatform)
            {
                ProcessFall();
                SignalsManager.Broadcast(_stateSignal.Name, GameState.End.ToString());
            }
        }
        public override void Trigger()
        {
            base.Trigger();

            SignalsManager.Broadcast(_audioSignal.Name, _sound);
            GameController.Instance.GameSession.ApplyMultiplier(_multiplier);
            Debug.Log("Trigger Multiplier");
        }
示例#7
0
        public void Activate()
        {
            _isActive = true;
            _time     = Time.time;

            ApplyStartSpeed(GameController.Instance.GameSession.Level);
            SignalsManager.Register(_levelSignal.Name, OnLevelChange);
        }
示例#8
0
 public void Trigger()
 {
     if (GameController.Instance.GameState == GameState.Play)
     {
         _animator.SetTrigger("React");
         SignalsManager.Broadcast(_audioSignal.Name, _soundName);
     }
 }
示例#9
0
 public override void OnEnter()
 {
     base.OnEnter();
     this.WaitForSeconds(_waitTime, () =>
     {
         SignalsManager.Broadcast(_stateChangeSignal.Name, GameState.Start.ToString());
     });
 }
示例#10
0
        private void PlayHitEffects(Vector3 hitPoint)
        {
            var hitEffect = _effectsPool.GetNext();

            hitEffect.transform.position = hitPoint;
            this.WaitForSeconds(hitEffect.main.duration, () => _effectsPool.Return(hitEffect));
            SignalsManager.Broadcast(_playAudioSignal.Name, "ball_hit");
        }
示例#11
0
        public override void OnEnter()
        {
            base.OnEnter();

            UpdateLevel(GameController.Instance.GameSession.Level, GameController.Instance.GameSession.Score);

            SignalsManager.Register(_levelSignal.Name, OnLevelChange);
            SignalsManager.Register(_scoreSignal.Name, OnScoreChanged);
        }
示例#12
0
        public override void OnExit()
        {
            base.OnExit();

            _livesViewController.Unsubscribe();

            SignalsManager.Unregister(_levelSignal.Name, OnLevelChange);
            SignalsManager.Unregister(_scoreSignal.Name, OnScoreChanged);
        }
示例#13
0
 public void PlayDestroyEffect(Vector3 hitPoint)
 {
     if (!_destroyEffectPlayed)
     {
         Instantiate(_ballView.DestroyEffect, hitPoint, Quaternion.identity, transform.parent);
         SignalsManager.Broadcast(_playAudioSignal.Name, "ball_destroy");
         _destroyEffectPlayed = true;
     }
 }
示例#14
0
 public override void Trigger()
 {
     _renderer.enabled     = false;
     _splashMaterial.color = GameConfiguration.GetColor(_color);
     _particleSystem.Play();
     SignalsManager.Broadcast(_audioSignal.Name, _sound);
     GameController.Instance.GameSession.ApplyColor(_color);
     Debug.Log("Trigger Color");
 }
示例#15
0
        protected override void Awake()
        {
            base.Awake();

            _networkManager = GetComponent <NetworkManager>();
            _networkManager.StartMatch(OnMatchCreate, OnMatchList);

            SignalsManager.Register(_hitTopBoundSignal.Name, OnHitBoundsAction);
            SignalsManager.Register(_hitBottomBoundSignal.Name, OnHitBoundsAction);
        }
示例#16
0
        public override void OnExit()
        {
            base.OnExit();

            InputEventProvider.Instance.PointerDown -= OnPointerDown;
            InputEventProvider.Instance.PointerUp   -= OnPointerUp;

            _showTutorialTask.Stop();
            _tutorial.DOPause();

            NotificationManager.HideAll();
            SignalsManager.Unregister("CurrentScoreChanged", UpdateScoreValue);
        }
示例#17
0
        private void OnHitRacketAction()
        {
            _hitsCount++;
            SignalsManager.Broadcast(_scoreChangeSignal.Name, _hitsCount);

            if (_hitsCount % GameConfiguration.Instance.RacketSizeDecreaseRate == 0)
            {
                DecreaseRacketSize(_topRacket);
                DecreaseRacketSize(_bottomRacket);

                SignalsManager.Broadcast(_racketsSizeChangeSignal.Name);
            }
        }
示例#18
0
        private void StartGame()
        {
            _asteroidsSpawner.RestartSpawn();

            var spaceShip = _shipSpawner.Spawn() as Ship;

            if (spaceShip != null)
            {
                spaceShip.Setup(ShipSettings.Instance);
            }

            SignalsManager.Broadcast(_gameStartedSignal.Name);
        }
示例#19
0
        private void Shoot(Cell cell)
        {
            _isActive = false;
            _firstPop.Move(cell, () =>
            {
                cell.Attach(_firstPop);
                cell.React();
                cell.Merge();
            });

            SignalsManager.Broadcast(_audioSignal.Name, "shoot");
            Reload();
        }
示例#20
0
        protected override void OnContactHandlerEntered(SpaceObject spaceObject)
        {
            if (spaceObject.Type == SpaceObjectType.Asteroid)
            {
                return;
            }

            if (spaceObject.Type == SpaceObjectType.Laser)
            {
                SignalsManager.Broadcast(_destroyedSignal.Name, _scorePoints);
                SignalsManager.Broadcast("PlayAudio", "destroyed");
                Deactivate();
            }
        }
示例#21
0
        public void AddScorePoints(int scorePoints)
        {
            Score += scorePoints;
            SignalsManager.Broadcast(_scoreSignal.Name, Score);

            var level = GameConfiguration.GetLevelByScore(Score);

            if (level > Level)
            {
                Level = level;
                SignalsManager.Broadcast(_levelSignal.Name, level);
                SaveLevelAndScore();
            }
        }
示例#22
0
        protected override void Awake()
        {
            base.Awake();

            _topRacket = Instantiate(_racketPrefab, RacketRoot);
            _topRacket.Setup(RacketType.Top);

            _bottomRacket = Instantiate(_racketPrefab, RacketRoot);
            _bottomRacket.Setup(RacketType.Bottom);

            SignalsManager.Register(_hitRacketSignal.Name, OnHitRacketAction);
            SignalsManager.Register(_hitTopBoundSignal.Name, OnHitBoundsAction);
            SignalsManager.Register(_hitBottomBoundSignal.Name, OnHitBoundsAction);
        }
示例#23
0
        public void Enhance(int level)
        {
            var value = _value;

            for (var i = 1; i < level; i++)
            {
                value *= 2;
            }

            GameController.Instance.GameSession.AddScorePoints(value);
            Setup(value);

            SignalsManager.Broadcast(_audioSignal.Name, "merge");
            EffectsManager.Instance.Play(GameConfiguration.Instance.PopSettings.MergeEffect, _value, transform.position);
        }
示例#24
0
 public void ApplyColor(string color)
 {
     if (color != Color)
     {
         Color = color;
         _ball.ApplyColor(color);
         _path.ApplyColor(color);
         SignalsManager.Broadcast(_colorSignal.Name, color);
     }
     else
     {
         Lives++;
         SignalsManager.Broadcast(_livesSignal.Name, Lives);
     }
 }
示例#25
0
        public override void OnEnter()
        {
            base.OnEnter();

            _livesViewController.Subscribe();
            _livesViewController.UpdateLives(GameController.Instance.GameSession.Lives);

            _level.text = string.Format(LocalizationManager.GetString("Level"), GameController.Instance.GameSession.Level);
            _score.text = GameController.Instance.GameSession.Score.ToString();

            UpdateLevelProgress(GameController.Instance.GameSession.Score);

            SignalsManager.Register(_levelSignal.Name, OnLevelChange);
            SignalsManager.Register(_scoreSignal.Name, OnScoreChanged);
        }
示例#26
0
        public void OnShipDestroyed()
        {
            _shipSpawner.Flush();
            _lives--;

            if (_lives > 0)
            {
                SignalsManager.Broadcast(_livesCountChangedSignal.Name, _lives);
                this.WaitForSeconds(GameConfiguration.Instance.DelayBetweenSessions, StartGame);
            }
            else
            {
                GameController.Instance.SetState(GameState.GameOver);
            }
        }
示例#27
0
        public void IncreaseScore()
        {
            ++CurrentScore;

            //Use variable from configuration here
            if (CurrentScore % 10 == 0)
            {
                SignalsManager.Broadcast("PassedLineSection");
            }

            if (BestScore > 0)
            {
                if (CurrentScore > BestScore)
                {
                    SignalsManager.Broadcast("BestScoreBeaten");
                }
            }
        }
示例#28
0
        public void SubtractLive(bool all = false)
        {
            if (all)
            {
                Lives = 0;
            }
            else
            {
                Lives--;
            }

            if (Lives > 0)
            {
                SignalsManager.Broadcast(_livesSignal.Name, Lives);
            }
            else
            {
                _ball.BlowUp();
                GameController.Instance.SetState(GameState.End);
            }
        }
示例#29
0
        public override void OnEnter()
        {
            base.OnEnter();

            _bestScoreShown = false;
            _tutorial.alpha = 0f;

            UpdateScoreValue(0);
            SignalsManager.Register("CurrentScoreChanged", UpdateScoreValue);

            _showTutorialTask = new WaitTask(this, GameController.Instance.Settings.ActivationTime, () =>
            {
                if (InputEventProvider.Instance.PointersCount == 0)
                {
                    ShowTutorial();
                }
            });
            _showTutorialTask.Start();

            InputEventProvider.Instance.PointerDown += OnPointerDown;
            InputEventProvider.Instance.PointerUp   += OnPointerUp;
        }
示例#30
0
        private void OnCollisionEnter(Collision otherCollision)
        {
            var hitPoint = otherCollision.contacts[0].point;

            var racket = otherCollision.gameObject.GetComponentInParent <Racket>();

            if (racket != null)
            {
                var hitFactor = CalculateHitFactor(transform.position, otherCollision.transform.position, otherCollision.collider.bounds.size.x);
                racket.React(hitFactor);

                if (racket.Type == RacketType.Top)
                {
                    _rigidbody.velocity = new Vector2(hitFactor, -1).normalized *_bouncingSpeed;
                }
                else if (racket.Type == RacketType.Bottom)
                {
                    _rigidbody.velocity = new Vector2(hitFactor, 1).normalized *_bouncingSpeed;
                }

                SignalsManager.Broadcast(_hitRacketSignal.Name);
            }
            else
            {
                var bound = otherCollision.gameObject.GetComponent <Bound>();
                if (bound != null)
                {
                    if (HitVerticalBounds(bound.Type))
                    {
                        PlayDestroyEffect(hitPoint);
                        Destroy(gameObject);
                        return;
                    }
                }
            }

            PlayHitEffects(hitPoint);
        }