Exemple #1
0
        /// <summary>
        /// 初期化処理
        /// </summary>
        /// <param name="parent">ゲームクラス</param>
        public override void Init(PitchPitch parent)
        {
            base.Init(parent);

            parent.Player.Init(parent);

            // 各種フラグのリセット
            IsPaused          = false;
            _isCleared        = false;
            _isOver           = false;
            _pauseSelectedIdx = 0;
            _clearSelectedIdx = 0;

            #region 色
            initColor(_map.MapInfo.ForegroundColor, _map.MapInfo.BackgroundColor, _map.MapInfo.StrongColor);
            #endregion

            #region View/Map/Player
            _mapMargin = (int)(_viewRect.Width * 3 / 4.0) * _map.MapInfo.PlayerVx;
            Console.WriteLine(_mapMargin);

            _view.Width  = _viewRect.Width;
            _view.Height = _viewRect.Height;

            _map.Init(parent, new Size(_view.Width, _view.Height));
            _view.X = -_mapMargin;
            _view.Y = (long)(_map.Height / 2.0 - _view.Height / 2.0);
            _map.SetView(_view);

            _parent.Player.X  = _playerXRatio * _view.Width - _mapMargin;
            _parent.Player.Y  = _map.Height / 2.0;
            _parent.Player.Vx = _map.MapInfo.PlayerVx;
            _prevX            = _parent.Player.X;

            _view.X = -_mapMargin;

            // BGM
            if (_map.Bgm != null)
            {
                SdlDotNet.Audio.MusicPlayer.Load(_map.Bgm);
                int ivol = (int)(128 * _map.BgmVolume / 100.0);
                ivol = ivol < 0 ? 0 : (ivol > 128 ? 128 : ivol);
                SdlDotNet.Audio.MusicPlayer.Volume = ivol;
            }
            #endregion

            #region メニュー作成
            if (_map.HasEnd)
            {
                _pauseMenuItems = new MenuItem[]
                {
                    new MenuItem(Key.Escape, Properties.Resources.MenuItem_ResumeGame),
                    new MenuItem(Key.R, Properties.Resources.MenuItem_RetryStage),
                    new MenuItem(Key.M, Properties.Resources.MenuItem_MapSelect),
                    new MenuItem(Key.T, Properties.Resources.MenuItem_ReturnTitle)
                };
            }
            else
            {
                _pauseMenuItems = new MenuItem[]
                {
                    new MenuItem(Key.Escape, Properties.Resources.MenuItem_ResumeGame),
                    new MenuItem(Key.M, Properties.Resources.MenuItem_MapSelect),
                    new MenuItem(Key.T, Properties.Resources.MenuItem_ReturnTitle)
                };
            }

            _pauseMenuSurfaces = new SurfaceCollection(); _pauseMenuRects = new Rectangle[_pauseMenuItems.Length];
            ImageUtil.CreateStrMenu(_pauseMenuItems, _backColor, ref _pauseMenuSurfaces, ref _pauseMenuRects);

            _clearMenuSurfaces = new SurfaceCollection(); _clearMenuRects = new Rectangle[_clearMenuItems.Length];
            ImageUtil.CreateStrMenu(_clearMenuItems, _foreColor, ref _clearMenuSurfaces, ref _clearMenuRects);
            #endregion

            #region ピッチ設定
            if (_map.MapInfo.PitchType == map.PitchType.Fixed)
            {
                _isFixedPitchMap = true;
                _maxFreq         = _map.MapInfo.MaxPitch;
                _minFreq         = _map.MapInfo.MinPitch;
                if (_map.MapInfo.OctaveLevel != 0)
                {
                    _maxFreq *= Math.Pow(2, _map.MapInfo.OctaveLevel);
                    _minFreq *= Math.Pow(2, _map.MapInfo.OctaveLevel);
                }
            }
            else
            {
                _isFixedPitchMap = false;
                _minFreq         = Config.Instance.MinFreq;
                _maxFreq         = Config.Instance.MaxFreq;
            }
            _maxFreqLog = Math.Log(_maxFreq);
            _minFreqLog = Math.Log(_minFreq);
            #endregion

            createKeyRects();

            _prevProcTime = Environment.TickCount;
        }