protected bool grabThing() { bool collision = true; foreach (EnemyFormation ef in _enemyFormations) { collision = true; if (_pointerPos.X < ef.getScreenPosition().X) collision = false; else if (_pointerPos.X > ef.getScreenPosition().X + ef.getTotalRows() * Soldier.WIDTH) collision = false; else if (_pointerPos.Y < ef.getScreenPosition().Y) collision = false; else if (_pointerPos.Y > ef.getScreenPosition().Y + ef.getTotalRows() * Soldier.HEIGHT) collision = false; if (collision) { _grabbedThing = ef; _grabbedThing.selected = true; return true; } } foreach (Terrain t in _terrain) { collision = true; if (_pointerPos.X < t.getPosition().X - getMapOffset().X) collision = false; else if (_pointerPos.X > t.getPosition().X - getMapOffset().X + t.getWidth()) collision = false; else if (_pointerPos.Y < t.getPosition().Y - getMapOffset().Y) collision = false; else if (_pointerPos.Y > t.getPosition().Y - getMapOffset().Y + t.getHeight()) collision = false; if (collision) { _grabbedThing = t; _grabbedThing.selected = true; return true; } } return false; }
public LevelEditorScreen(PikeAndShotGame game, LevelConstructorForm form) : base(game) { _levelData = form.getCurrLevel(); _pointerSprite = new Sprite(PikeAndShotGame.SWORD_POINTER, new Rectangle(0, 0, 18, 18), 18, 18); prevMouseState = Mouse.GetState(); _grabbedThing = null; _grabbedThings = new ArrayList(30); _listener = form; _oldMousePosition = new Vector2(0f, 0f); _boxSelecting = false; _boxMoving = false; }
protected override void getInput(TimeSpan timeSpan) { keyboardState = Keyboard.GetState(); gamePadState = GamePad.GetState(PlayerIndex.One); mouseState = Mouse.GetState(); _pointerPos = new Vector2(mouseState.X, mouseState.Y) / PikeAndShotGame.ZOOM; if (_game.IsActive) { // [dsl] Zoom stuff if (mouseState.ScrollWheelValue > prevMouseState.ScrollWheelValue) _currentZoom = Math.Max(_currentZoom - 1, 0); else if (mouseState.ScrollWheelValue < prevMouseState.ScrollWheelValue) _currentZoom = Math.Min(_currentZoom + 1, _zoomLevels.Count() - 1); PikeAndShotGame.ZOOM = _zoomLevels[_currentZoom]; if (mouseState.X > 0 && mouseState.X < PikeAndShotGame.SCREENWIDTH && mouseState.Y > 0 && mouseState.Y < PikeAndShotGame.SCREENHEIGHT) { if (mouseState.LeftButton == Microsoft.Xna.Framework.Input.ButtonState.Pressed && prevMouseState.LeftButton == Microsoft.Xna.Framework.Input.ButtonState.Released) { if (_boxSelecting) moveFormations(); else if (!grabThing()) startSelectorBox(); } else if (mouseState.LeftButton == Microsoft.Xna.Framework.Input.ButtonState.Pressed && prevMouseState.LeftButton == Microsoft.Xna.Framework.Input.ButtonState.Pressed) { //When we aren't grabbing a formation we are grabbing the map if (getGrabbedThing() == null) { if (_boxSelecting && !_boxMoving) { _endingMousePosition = new Vector2(_mapOffset.X + _pointerPos.X, _mapOffset.Y + _pointerPos.Y); } } } else if (mouseState.LeftButton == Microsoft.Xna.Framework.Input.ButtonState.Released && prevMouseState.LeftButton == Microsoft.Xna.Framework.Input.ButtonState.Pressed) { //release the formation you are holding if (_grabbedThing != null) { if (_grabbedThing is EnemyFormation) _listener.updateLevelFromScreen(_grabbedThing.index, _grabbedThing.getPosition().X, _grabbedThing.getPosition().Y); else _listener.updateLevelFromScreenTerrain(_grabbedThing.index, _grabbedThing.getPosition().X, _grabbedThing.getPosition().Y); _grabbedThing = null; } else if (_boxSelecting && !_boxMoving) { grabThings(); } if (_boxMoving) { dropFormations(); } } } if (keyboardState.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.C) && previousKeyboardState.IsKeyUp(Microsoft.Xna.Framework.Input.Keys.C)) { if (_boxMoving) { copyFormations(); } else if (_grabbedThing != null) { Vector2 position = _grabbedThing.getPosition(); int index = _grabbedThing.index; if (_grabbedThing is EnemyFormation) { _listener.copyFormation(_grabbedThing.index); _listener.updateLevelFromScreen(index, position.X, position.Y); } else { _listener.copyTerrain(_grabbedThing.index); _listener.updateLevelFromScreenTerrain(index, position.X, position.Y); } _grabbedThing = null; } } else if (keyboardState.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.E) && previousKeyboardState.IsKeyUp(Microsoft.Xna.Framework.Input.Keys.E)) { if (_boxMoving) { deleteFormations(); } else if (_grabbedThing != null) { if (_grabbedThing is EnemyFormation) _listener.deleteFormation(_grabbedThing.index); else _listener.deleteTerrain(_grabbedThing.index); _grabbedThing = null; } } else if (keyboardState.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Left)) { _mapOffset.X -= (float)timeSpan.TotalMilliseconds; } else if (keyboardState.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Right)) { _mapOffset.X += (float)timeSpan.TotalMilliseconds; } else if (keyboardState.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Up)) { _mapOffset.Y -= (float)timeSpan.TotalMilliseconds; } else if (keyboardState.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Down)) { _mapOffset.Y += (float)timeSpan.TotalMilliseconds; } if (keyboardState.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.D) && previousKeyboardState.IsKeyUp(Microsoft.Xna.Framework.Input.Keys.D)) toggleDrawDots(); } base.getInput(timeSpan); previousKeyboardState = keyboardState; previousGamePadState = gamePadState; prevMouseState = mouseState; }