Example #1
0
        public void Update(float sceneOffset, bool controlsEnabled)
        {
            _smokeParticles.ForEach(x => x.Update());
            _smokeParticles.RemoveAll(x => x.IsFinished);
            _stoneParticles.ForEach(x => x.Update());
            _stoneParticles.RemoveAll(x => x.IsFinished);

            if (Math.Abs(sceneOffset - _renderOffset) >= 0.5 || !controlsEnabled)
            {
                return;
            }

            if (_messages.Count > 0)
            {
                _scene.SubtitleWidget.AddDelay();
                _messages.ForEach(message => _scene.SubtitleWidget.AddSubtitle(message.Text, message.VoiceOver));
                _messages.Clear();
            }

            for (var i = 0; i < _actionBrickRenders.Count; i++)
            {
                _actionBrickRenders[i].Update(_actionBrickRenders.Count, i);
            }

            if (IsCompleted)
            {
                return;
            }

            _glyphRenderers.ForEach(glyph => glyph.Update());

            var actionInput = GetActionInput();

            if (actionInput.HasValue && _actionBrickRenders.Count < S.MaxActionsInLevel && !_isHiding)
            {
                _actionBrickRenders.Add(new RendererActionBrick(actionInput.Value, _actionBrickRenders.Count));
                Sfx.PlayGlassSound(actionInput.Value);
            }

            if (KeyboardManager.Instance.IsKeyJustPressed(Keys.Enter) && !_isHiding)
            {
                if (CompareLists(_actionBrickRenders, _solution))
                {
                    if (_renderOffset == S.LastLevelIndex)
                    {
                        Save.LastLevel = S.LastLevelIndex + 1;
                        Save.WriteSave();
                        Sfx.MusicInstance.Stop();
                        GameCore.Instance.SceneManager.SetScene(new OutroSmackScene());
                        return;
                    }

                    IsCompleted = true;
                    GameCore.Instance.ShakePower += 2;
                    _smokeParticles.Add(new ParticleSmoke());
                    _smokeParticles.Add(new ParticleSmoke());
                    _smokeParticles.Add(new ParticleSmoke());
                    _smokeParticles.Add(new ParticleSmoke());
                    _smokeParticles.Add(new ParticleSmoke());
                    _smokeParticles.Add(new ParticleSmoke());
                    _smokeParticles.Add(new ParticleSmoke());
                    _smokeParticles.Add(new ParticleSmoke());
                    _smokeParticles.Add(new ParticleSmoke());
                    _stoneParticles.Add(new ParticleStone());
                    _stoneParticles.Add(new ParticleStone());
                    _stoneParticles.Add(new ParticleStone());
                    _stoneParticles.Add(new ParticleStone());
                    _stoneParticles.Add(new ParticleStone());
                    _stoneParticles.Add(new ParticleStone());
                    _stoneParticles.Add(new ParticleStone());
                    _stoneParticles.Add(new ParticleStone());
                    _stoneParticles.Add(new ParticleStone());
                    _stoneParticles.Add(new ParticleStone());
                    _stoneParticles.Add(new ParticleStone());
                    _stoneParticles.Add(new ParticleStone());
                    _stoneParticles.Add(new ParticleStone());
                    Sfx.PlayLevelCompleted();
                    Save.LastLevel = (int)_renderOffset + 1;
                    Save.WriteSave();
                }
                else
                {
                    for (var i = 0; i < _actionBrickRenders.Count; i++)
                    {
                        _actionBrickRenders[i].IsHiding    = true;
                        _actionBrickRenders[i].HidingDelay = i * 3;

                        GameCore.Instance.RegisterDelayedAction(i * 3, GetSfxReverseSoundAction(_actionBrickRenders[i].Action));
                    }

                    _isHiding = true;
                }
            }

            if (_isHiding)
            {
                if (_actionBrickRenders.All(brick => brick.IsFinished))
                {
                    _actionBrickRenders.Clear();
                    _isHiding = false;
                }
            }
            else
            {
                _actionBrickRenders.RemoveAll(x => x.IsFinished);
            }

            if (KeyboardManager.Instance.IsKeyJustPressed(Keys.Back) && !_isHiding && _actionBrickRenders.Count > 0)
            {
                var brick = _actionBrickRenders.FindLast(x => !x.IsHiding);
                if (brick != null)
                {
                    brick.IsHiding = true;
                    Sfx.PlayGlassReverseSound(brick.Action);
                }
            }
        }
        public void Update()
        {
            var index = _options.IndexOf(_selectedOption);

            if (KeyboardManager.Instance.IsKeyJustPressed(Keys.Up))
            {
                index--;
                if (index < 0)
                {
                    index = _options.Count - 1;
                }
            }

            if (KeyboardManager.Instance.IsKeyJustPressed(Keys.Down))
            {
                index++;
                if (index >= _options.Count)
                {
                    index = 0;
                }
            }

            if (KeyboardManager.Instance.IsKeyJustPressed(Keys.Left))
            {
                if (_selectedOption == _musicVolume)
                {
                    Save.MusicVolume         = Math.Max(0, Save.MusicVolume - 0.1f);
                    _musicVolume.Text        = "Music volume: " + Math.Round(Save.MusicVolume * 10);
                    Sfx.MusicInstance.Volume = Save.MusicVolume;
                    Save.WriteSave();
                    Sfx.PlayGlassReverseSound(EngineActionType.Special);
                }

                if (_selectedOption == _sfxVolume)
                {
                    Save.SoundVolume = Math.Max(0, Save.SoundVolume - 0.1f);
                    _sfxVolume.Text  = "Sound effects volume: " + Math.Round(Save.SoundVolume * 10);
                    Save.WriteSave();
                    Sfx.PlayGlassReverseSound(EngineActionType.Special);
                }

                if (_selectedOption == _voiceOverVolume)
                {
                    Save.VoiceOverVolume  = Math.Max(0, Save.VoiceOverVolume - 0.1f);
                    _voiceOverVolume.Text = "Voice over volume: " + Math.Round(Save.VoiceOverVolume * 10);
                    Save.WriteSave();
                    Sfx.PlayGlassReverseSound(EngineActionType.Special);
                }
            }

            if (KeyboardManager.Instance.IsKeyJustPressed(Keys.Right))
            {
                if (_selectedOption == _musicVolume)
                {
                    Save.MusicVolume         = Math.Min(1, Save.MusicVolume + 0.1f);
                    _musicVolume.Text        = "Music volume: " + Math.Round(Save.MusicVolume * 10);
                    Sfx.MusicInstance.Volume = Save.MusicVolume;
                    Save.WriteSave();
                    Sfx.PlayGlassSound(EngineActionType.Special);
                }

                if (_selectedOption == _sfxVolume)
                {
                    Save.SoundVolume = Math.Min(1, Save.SoundVolume + 0.1f);
                    _sfxVolume.Text  = "Sound effects volume: " + Math.Round(Save.SoundVolume * 10);
                    Save.WriteSave();
                    Sfx.PlayGlassSound(EngineActionType.Special);
                }

                if (_selectedOption == _voiceOverVolume)
                {
                    Save.VoiceOverVolume  = Math.Min(1, Save.VoiceOverVolume + 0.1f);
                    _voiceOverVolume.Text = "Voice over volume: " + Math.Round(Save.VoiceOverVolume * 10);
                    Save.WriteSave();
                    Sfx.PlayGlassSound(EngineActionType.Special);
                }
            }

            if (KeyboardManager.Instance.IsKeyJustPressed(Keys.Enter))
            {
                if (_selectedOption == _resume)
                {
                    IsActive = false;
                }

                if (_selectedOption == _quit)
                {
                    GameCore.Instance.Exit();
                }
            }

            _selectedOption = _options[index];
            _options.ForEach(x => x.Alpha = 0.5f);
            _selectedOption.Alpha         = 1;
        }
Example #3
0
 private Action GetSfxReverseSoundAction(EngineActionType actionType)
 {
     return(() => Sfx.PlayGlassReverseSound(actionType));
 }