private void drawHighlightedInstance(GmsRoomInstance instance) { GraphicsManager.DrawRectangleRotated(new Rectangle(instance.editor_data.XStartZoomed, instance.editor_data.YStartZoomed, instance.editor_data.WidthZoomed, instance.editor_data.HeightZoomed), instance.rotation, Color.FromArgb(30, Color.Yellow), false); GraphicsManager.DrawRectangleRotated(new Rectangle(instance.editor_data.XStartZoomed - 1, instance.editor_data.YStartZoomed - 1, instance.editor_data.WidthZoomed + 2, instance.editor_data.HeightZoomed + 2), instance.rotation, Color.Black, true); GraphicsManager.DrawRectangleRotated(new Rectangle(instance.editor_data.XStartZoomed, instance.editor_data.YStartZoomed, instance.editor_data.WidthZoomed, instance.editor_data.HeightZoomed), instance.rotation, Color.Yellow, true); GraphicsManager.DrawRectangleRotated(new Rectangle(instance.editor_data.XStartZoomed + 1, instance.editor_data.YStartZoomed + 1, instance.editor_data.WidthZoomed - 2, instance.editor_data.HeightZoomed - 2), instance.rotation, Color.Black, true); /*if (instance.Rotation != 0) * { * int rot = instance.Rotation; * * Point rotated = RotatePoint(new Point(_mx, _my), new Point(instance.XCenterZoomed, instance.YCenterZoomed), (double)rot); * * GraphicsManager.DrawRectangle(new Rectangle(rotated.X - 5, rotated.Y - 5, 10, 10), Color.Aqua, false); * * GraphicsManager.DrawRectangleRotated(new Rectangle(instance.XStartZoomed, instance.YStartZoomed, instance.WidthZoomed, instance.HeightZoomed), rot, Color.FromArgb(30, Color.Orange), false); * GraphicsManager.DrawRectangleRotated(new Rectangle(instance.XStartZoomed - 1, instance.YStartZoomed - 1, instance.WidthZoomed + 2, instance.HeightZoomed + 2), rot, Color.Black, true); * GraphicsManager.DrawRectangleRotated(new Rectangle(instance.XStartZoomed, instance.YStartZoomed, instance.WidthZoomed, instance.HeightZoomed), rot, Color.Orange, true); * GraphicsManager.DrawRectangleRotated(new Rectangle(instance.XStartZoomed + 1, instance.YStartZoomed + 1, instance.WidthZoomed - 2, instance.HeightZoomed - 2), rot, Color.Black, true); * }*/ }
protected void _onInstancePaint() { if (Manager.Project.Instance == null) { return; } float rotation = 0.0f; if (Manager.MainWindow.brushOptionRandomizeCheckbox.Enabled) { float start = Helper.getDirFromInput(Manager.MainWindow.brushOptionRandomizeFrom); float _end = Helper.getDirFromInput(Manager.MainWindow.brushOptionRandomizeTo); float end = (start > _end) ? start : _end; start = (start > _end) ? _end : start; Random rnd = new Random(); rotation = start + ((float)rnd.NextDouble() * (end - start)); } GmsRoomInstance instance = new GmsRoomInstance() { x = _mouseX /*- Manager.Project.Instance.offsetX*/, y = _mouseY /*- Manager.Project.Instance.offsetY*/, instance_of = Manager.Project.Instance, rotation = rotation, }; //instance.editor_data.Element = Manager.Project.Instance; instance.editor_data.Layer = Manager.Room.Layers[Manager.Room.LastUsedLayer].LayerDepth; Manager.Project.HighlightedInstance = instance; Manager.Room.instances.Add(instance); Manager.Project.regenerateInstanceList(); }
///// protected override void OnMouseDown(MouseEventArgs e) { base.OnMouseDown(e); if (Manager.Room == null) { return; } Point snap = GetSnappedPoint(e.Location, new Size(_gridX / _zoom, _gridY / _zoom)); // If mouse left button clicked. if (e.Button == MouseButtons.Left) { //Invalidate(); _mouseX = snap.X; _mouseY = snap.Y; if (CurrentBrush == BrushMode.Move || CurrentBrush == BrushMode.Rotate) { _drag = true; if (CurrentBrush == BrushMode.Rotate) { Invalidate(); if (Manager.Project.SelectedInstance != null) { GmsRoomInstance p = Manager.Project.SelectedInstance; this._rotateStart = MathMethods.PointDirection(p.x, p.y, _mx, _my); Manager.MainWindow.statusLabelMousePos.Text = _rotateStart.ToString(); } } Manager.MainWindow.brushPlaceableUpdatePositionAndRotation(); } } }
/// <summary> /// When there's a mouse move over map canvas /// </summary> /// <param name="e"></param> protected override void OnMouseMove(MouseEventArgs e) { base.OnMouseMove(e); if (Manager.Room == null) { return; } Focus(); bool redraw = false; Point snap = GetSnappedPoint(e.Location, new Size(_gridX, _gridY)); _drawMousePosition = true; int __mx, __my; __mx = (Offset.X + e.Location.X); __my = (Offset.Y + e.Location.Y); if (__mx != _mx || __my != _my) { _mx = __mx; _my = __my; redraw = true; } if (CurrentBrush == BrushMode.Select) { //int counter = 0; //int foundId = 0; double distance = 100000; GmsRoomInstance found = null; foreach (GmsRoomInstance pinstance in Manager.Room.instances) { //if (Manager.Room.Layers[Manager.MainWindow.tbLayerDropDown.SelectedIndex].LayerDepth != pinstance.editor_data.Layer) // continue; double dist = pointDistance(pinstance.editor_data.XCenterZoomed, pinstance.editor_data.YCenterZoomed, _mx, _my); if (dist > 300) { continue; } if (dist < distance) { int _mxr = _mx; int _myr = _my; if (pinstance.rotation != 0) { Point rotated = RotatePoint(new Point(_mx, _my), new Point(pinstance.editor_data.XCenterZoomed, pinstance.editor_data.YCenterZoomed), (double)pinstance.rotation); _mxr = rotated.X; _myr = rotated.Y; } if (pinstance.editor_data.XStartZoomed <= _mxr) { if (pinstance.editor_data.YStartZoomed <= _myr) { if (pinstance.editor_data.XEndZoomed >= _mxr) { if (pinstance.editor_data.YEndZoomed >= _myr) { distance = dist; found = pinstance; } } } } } } if (Manager.Project.HighlightedInstance != found) { redraw = true; Manager.Project.HighlightedInstance = found; } } if (_drag) { redraw = true; } //if (redraw) //{ // Invalidate(); //} if (snap.X != _mouseX || snap.Y != _mouseY || redraw) { _mouseX = (GridEnabled) ? snap.X : _mx; _mouseY = (GridEnabled) ? snap.Y : _my; Manager.MainWindow.statusLabelMousePos.Text = "X: " + (_mouseX).ToString() + ", Y: " + (_mouseY).ToString(); Manager.MainWindow.statusLabelMousePos.Text += " / RX: " + _mx.ToString() + ", RY: " + _my.ToString() + " / ZOOM" + this._zoom.ToString(); Manager.MainWindow.statusStrip1.Refresh(); Invalidate(); } }
private void DrawInstances() { if (Manager.Room != null) { int selectedLayerDepth = Manager.Room.Layers[Manager.MainWindow.tbLayerDropDown.SelectedIndex].LayerDepth; //int layerCounter = 0; //foreach (MapLayers layer in Manager.Room.Layers) //{ // if (layer.LayerDepth != selectedLayerDepth) // { // if (!layer.Active) continue; // } Color defaultLayerColor = Color.Gray; defaultLayerColor = Color.White;//todo - if proper layer //if (layer.LayerDepth == selectedLayerDepth) defaultLayerColor = Color.White; foreach (GmsRoomInstance instance in Manager.Room.instances) { //if (instance.editor_data.Layer != layer.LayerDepth) continue; Color color = defaultLayerColor; if (Manager.Project.HighlightedInstance == instance) { color = Color.Yellow; } if (Manager.Project.SelectedInstance == instance) { color = Color.Red; } if (instance.instance_of.sprite_index != null) { //GraphicsManager.DrawSprite(instance.Element.textureId, instance.XCenter / _zoom, instance.YCenter / _zoom, instance.Rotation, color); //try //{ GraphicsManager.DrawSprite( instance.instance_of.sprite_index.name, instance.x - instance.instance_of.sprite_index.origin_x, instance.y - instance.instance_of.sprite_index.origin_y, instance.scaleX, instance.scaleY, instance.rotation, color); //instance.linkedObj.sprite_index.name //} //catch (Exception e) //{ // MessageBox.Show(e.StackTrace.ToString()); //} /*if (instance.Element.MultiDraw) * { * GraphicsManager.DrawSprite(instance.Element.textureId, instance.XStart, instance.YStart, instance.Rotation + 90, color); * }*/ //GraphicsManager.draw } } // layerCounter++; //} if (CurrentBrush == BrushMode.Paint && Manager.Project.Instance != null) { try { int x, y; x = ((GridEnabled) ? _mouseX : _mx) - Manager.Project.Instance.sprite_index.origin_x; y = ((GridEnabled) ? _mouseY : _my) - Manager.Project.Instance.sprite_index.origin_y; GraphicsManager.DrawSprite( Manager.Project.Instance.sprite_index.name, x, y, 0, Color.Yellow); } catch { } } GraphicsManager.DrawSpriteBatch(false); if (_drag) { if (Manager.Project.SelectedInstance != null) { GmsRoomInstance p = Manager.Project.SelectedInstance; // drawing when moving if (CurrentBrush == BrushMode.Move) { GraphicsManager.DrawSprite( Manager.Project.SelectedInstance.editor_data.parent.instance_of.sprite_index.name, /*Manager.Project.SelectedInstance.X +*/ (_mouseX - Manager.Project.SelectedInstance.instance_of.sprite_index.origin_x), /*Manager.Project.SelectedInstance.Y +*/ (_mouseY - Manager.Project.SelectedInstance.instance_of.sprite_index.origin_y), Manager.Project.SelectedInstance.rotation, Color.Red); } // drawing when rotating if (CurrentBrush == BrushMode.Rotate) { Color green = Color.FromArgb(100, Color.Green); //GraphicsManager.DrawRectangle( // new Rectangle(p.XStart - 50, p.YStart - 50, p.Width + 100, p.Height + 100), // Color.FromArgb(100, Color.White), // false //); //GraphicsManager.DrawLineCache( // p.X - (int)lengthdir_x(p.Width, p.Rotation), // p.Y - (int)lengthdir_y(p.Height, p.Rotation), // p.X + (int)lengthdir_x(p.Width, p.Rotation), // p.Y + (int)lengthdir_y(p.Height, p.Rotation), // green //); //GraphicsManager.DrawLineCache( // p.X - (int)lengthdir_x(p.Width, p.Rotation + 90), // p.Y - (int)lengthdir_y(p.Height, p.Rotation + 90), // p.X + (int)lengthdir_x(p.Width, p.Rotation + 90), // p.Y + (int)lengthdir_y(p.Height, p.Rotation + 90), // green //); //GraphicsManager.DrawLineBatch(); //GraphicsManager.DrawSprite( // p.Element.textureId, // p.XStart, p.YStart, // p.Rotation, green //); // draw rotated one //double newRotation = (Manager.Project.SelectedInstance.Rotation + pointDistance(Manager.Project.SelectedInstance.XCenter, Manager.Project.SelectedInstance.YCenter, _mx, _my)) % 360; int newRotation = MathMethods.AngleDifference(MathMethods.PointDirection(p.x, p.y, _mx, _my), _rotateStart); _rotateCurrent = ((int)p.rotation + newRotation + 360) % 360; //Manager.MainWindow.statusLabelMousePos.Text = newRotation.ToString(); GraphicsManager.DrawSprite( p.instance_of.sprite_index.name, p.editor_data.XStart, p.editor_data.YStart, (float)_rotateCurrent, Color.Red ); //GraphicsManager.DrawLineCache( // p.XCenter - (int)lengthdir_x(p.Width, newRotation), // p.YCenter - (int)lengthdir_y(p.Height, newRotation), // p.XCenter + (int)lengthdir_x(p.Width, newRotation), // p.YCenter + (int)lengthdir_y(p.Height, newRotation), // Color.Red //); //GraphicsManager.DrawLineCache( // p.XCenter - (int)lengthdir_x(p.Width, newRotation + 90), // p.YCenter - (int)lengthdir_y(p.Height, newRotation + 90), // p.XCenter + (int)lengthdir_x(p.Width, newRotation + 90), // p.YCenter + (int)lengthdir_y(p.Height, newRotation + 90), // Color.Red //); GraphicsManager.DrawRectangleRotated( new Rectangle(p.editor_data.XStart, p.editor_data.YStart, p.editor_data.Width, p.editor_data.Height), _rotateCurrent, Color.FromArgb(150, Color.White), false ); //GraphicsManager.DrawLineBatch(); } } GraphicsManager.DrawSpriteBatch(false); } } }
private void drawSelectedInstance(GmsRoomInstance instance) { GraphicsManager.DrawStippledRectangle(new Rectangle(instance.editor_data.XStartZoomed - 1, instance.editor_data.YStartZoomed - 1, instance.editor_data.WidthZoomed + 2, instance.editor_data.HeightZoomed + 2), Color.Black, instance.rotation, 2); GraphicsManager.DrawStippledRectangle(new Rectangle(instance.editor_data.XStartZoomed, instance.editor_data.YStartZoomed, instance.editor_data.WidthZoomed, instance.editor_data.HeightZoomed), Color.Red, instance.rotation, 2); GraphicsManager.DrawStippledRectangle(new Rectangle(instance.editor_data.XStartZoomed + 1, instance.editor_data.YStartZoomed + 1, instance.editor_data.WidthZoomed - 2, instance.editor_data.HeightZoomed - 2), Color.Black, instance.rotation, 2); }