Example #1
0
File: Game.cs Project: kotovdv/Nova
        /// <summary>
        /// Shows + AltShows all the planets on a side, that is next to view squares when moved in given direction.
        /// Hides + AltHides all the planets on a side, that is next to view squares when moved in opposite direction.
        /// </summary>
        public State Move(Direction direction)
        {
            var side   = direction.ToSide();
            var delta  = direction.ToPositionDelta();
            var offset = Math.Min(delta.X + delta.Y, 0);

            _spaceGrid.Traverse(_regView, side, offset < 0 ? _planets.Show : _planets.Hide, offset);
            _spaceGrid.Traverse(_regView, side, offset < 0 ? _planets.Hide : _planets.Show, offset + _regView.Size);

            _spaceGrid.Traverse(_altView, side, offset < 0 ? _planets.AltShow : _planets.AltHide, offset);
            _spaceGrid.Traverse(_altView, side, offset < 0 ? _planets.AltHide : _planets.AltShow,
                                offset + _altView.Size);

            _altView         = _altView.Shift(delta);
            _regView         = _regView.Shift(delta);
            _playerPosition += delta;

            _tilesManager.OnViewChanged(_altView);

            return(CurrentState());
        }