예제 #1
0
        private LevelIconDefinition hitTestLevelIcons(Vector2 mouseWorld, float tolerance)
        {
            float shortest             = 9999999f;
            LevelIconDefinition result = null;

            foreach (WorldMapDefinition worldMapDefinition in DataManager.worldMapManager.worldMapDefinitions)
            {
                foreach (LevelIconDefinition levelIconDefinition in worldMapDefinition.levelIconDefinitions)
                {
                    LevelIconState state = DataManager.worldMapManager.getLevelIconState(worldMapDefinition.uid, levelIconDefinition.uid);

                    if (state != null && state.discovered)
                    {
                        float distance = (mouseWorld - levelIconDefinition.position).Length();

                        if (distance <= tolerance)
                        {
                            shortest = distance;
                            result   = levelIconDefinition;
                        }
                    }
                }
            }
            return(result);
        }
예제 #2
0
        public override void update()
        {
            Vector2 mouseDelta;
            Vector2 mousePosition;
            Vector2 viewOffset = _halfScreenSize - _currentScreenCenter;
            bool    wasLevelIconPreviouslySelected = _selectedLevelIcon != null;

            base.update();

            mouseDelta              = new Vector2(_newMouseState.X - _oldMouseState.X, _newMouseState.Y - _oldMouseState.Y);
            mousePosition           = new Vector2(_newMouseState.X, _newMouseState.Y) - viewOffset;
            _allowNewLevelSelection = mouseDelta.Length() > 2f;
            _levelSelectAngle       = MathHelper.WrapAngle(_levelSelectAngle + 0.05f);

            if (_allowNewLevelSelection)
            {
                _selectedLevelIcon = hitTestLevelIcons(mousePosition, 100f);
            }

            if (_selectedLevelIcon == null && wasLevelIconPreviouslySelected)
            {
                _levelSelectPosition  = new Vector2(_oldMouseState.X, _oldMouseState.Y);
                _levelSelectIconColor = _levelSelectIconDeselectedColor;
            }
            else if (_selectedLevelIcon != null)
            {
                _levelSelectPosition  = _selectedLevelIcon.position + viewOffset;
                _levelSelectIconColor = _levelSelectIconSelectedColor;
                _targetScreenCenter  += (_selectedLevelIcon.position - _currentScreenCenter) / 100f;
            }

            if (_selectedLevelIcon == null)
            {
                _levelSelectPosition += mouseDelta;
            }

            /*
             * if (InputSystem.usingGamepad)
             * {
             *  _targetScreenCenter += _newGamepadState.ThumbSticks.Left * 7 * new Vector2(1, -1);
             *  _targetScreenCenter += _newGamepadState.ThumbSticks.Right * 7 * new Vector2(1, -1);
             *
             *  _scale = Math.Max(0.5f, _scale - _newGamepadState.Triggers.Left / 500f);
             *  _scale = Math.Min(1f, _scale + _newGamepadState.Triggers.Right / 500f);
             * }*/

            if (_newKeyState.IsKeyDown(Keys.Left) || _newKeyState.IsKeyDown(Keys.A))
            {
                _targetScreenCenter += new Vector2(-7, 0);
            }
            if (_newKeyState.IsKeyDown(Keys.Right) || _newKeyState.IsKeyDown(Keys.D))
            {
                _targetScreenCenter += new Vector2(7, 0);
            }
            if (_newKeyState.IsKeyDown(Keys.Up) || _newKeyState.IsKeyDown(Keys.W))
            {
                _targetScreenCenter += new Vector2(0, -7);
            }
            if (_newKeyState.IsKeyDown(Keys.Down) || _newKeyState.IsKeyDown(Keys.S))
            {
                _targetScreenCenter += new Vector2(0, 7);
            }

            if (_newMouseState.LeftButton == ButtonState.Pressed && _oldMouseState.LeftButton == ButtonState.Released)
            {
                if (_selectedLevelIcon != null)
                {
                    _game.closeWorldMap();
                    _game.loadLevel(_selectedLevelIcon.levelUid);
                }
            }

            //_levelSelectPosition += mouseDelta;

            //_targetScreenCenter = Vector2.Max(_topLeft, Vector2.Min(_bottomRight, _targetScreenCenter));
            _currentScreenCenter += (_targetScreenCenter - _currentScreenCenter) / 11f;

            base.update();
        }