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); }
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(); }