public override void Draw(SpriteBatch spriteBatch, GameTime gameTime) { if (SelectedGameObjects.Count > 0) { foreach (var selectedGameObject in SelectedGameObjects) { if (SimulationGame.VisibleArea.Contains(selectedGameObject.Position)) { var worldDrawPosition = Rectangle.Empty; if (selectedGameObject is AmbientObject) { var gameObject = (AmbientObject)selectedGameObject; worldDrawPosition = new Rectangle((int)(gameObject.Position.X - gameObject.GetObjectType().SpriteOrigin.X), (int)(gameObject.Position.Y - gameObject.GetObjectType().SpriteOrigin.Y), gameObject.GetObjectType().SpriteBounds.X, gameObject.GetObjectType().SpriteBounds.Y); } else if (selectedGameObject is AmbientHitableObject) { var gameObject = (AmbientHitableObject)selectedGameObject; worldDrawPosition = new Rectangle((int)(gameObject.Position.X - gameObject.GetObjectType().SpriteOrigin.X), (int)(gameObject.Position.Y - gameObject.GetObjectType().SpriteOrigin.Y), gameObject.GetObjectType().SpriteBounds.X, gameObject.GetObjectType().SpriteBounds.Y); } else if (selectedGameObject is LivingEntity) { var gameObject = (LivingEntity)selectedGameObject; worldDrawPosition = new Rectangle((int)(gameObject.Position.X - gameObject.GetObjectType().SpriteOrigin.X), (int)(gameObject.Position.Y - gameObject.GetObjectType().SpriteOrigin.Y), gameObject.GetObjectType().SpriteBounds.X, gameObject.GetObjectType().SpriteBounds.Y); } var uiPosition = SimulationGame.ConvertWorldPositionToUIPosition(worldDrawPosition.X, worldDrawPosition.Y); SimulationGame.PrimitiveDrawer.Rectangle(new Rectangle((int)uiPosition.X, (int)uiPosition.Y, worldDrawPosition.Width, worldDrawPosition.Height), Color.Yellow); } } } else if (SelectedBlockType != null) { var uiPosition = SimulationGame.ConvertWorldPositionToUIPosition(SelectedBlockPosition.X * WorldGrid.BlockSize.X, SelectedBlockPosition.Y * WorldGrid.BlockSize.Y); SimulationGame.PrimitiveDrawer.Rectangle(new Rectangle((int)uiPosition.X, (int)uiPosition.Y, WorldGrid.BlockSize.X, WorldGrid.BlockSize.Y), Color.Blue); } else if (SelectedWorldLink != null) { var uiPosition = SimulationGame.ConvertWorldPositionToUIPosition(SelectedWorldLink.FromBlock.X * WorldGrid.BlockSize.X, SelectedWorldLink.FromBlock.Y * WorldGrid.BlockSize.Y); SimulationGame.PrimitiveDrawer.Rectangle(new Rectangle((int)uiPosition.X, (int)uiPosition.Y, WorldGrid.BlockSize.X, WorldGrid.BlockSize.Y), Color.Orange); } if (startDragPosition != null) { var _startDragPosition = startDragPosition ?? Point.Zero; var uiStartDragPosition = SimulationGame.ConvertWorldPositionToUIPosition(_startDragPosition.X, _startDragPosition.Y).ToPoint(); var selectionRect = ShapeCollision.ConvertLineToRect(uiStartDragPosition, SimulationGame.MouseState.Position); if (selectionRect.Width > 20 || selectionRect.Height > 20) { SimulationGame.PrimitiveDrawer.Rectangle(selectionRect.ToXnaRectangle(), Color.White); } } }
private void handleOnMouseMove(MouseMoveEvent mouseMoveEvent) { if (mouseMoveEvent.LeftButtonDown && startDragPosition == null) { startDragPosition = SimulationGame.RealWorldMousePosition.ToPoint(); } if (mouseMoveEvent.LeftButtonDown == false && startDragPosition != null) { selectGameObjects(ShapeCollision.ConvertLineToRect(startDragPosition ?? Point.Zero, SimulationGame.RealWorldMousePosition.ToPoint())); startDragPosition = null; } }