コード例 #1
0
        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);
             * }*/
        }
コード例 #2
0
        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();
        }
コード例 #3
0
        /////

        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();
                }
            }
        }
コード例 #4
0
        /// <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();
            }
        }
コード例 #5
0
        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);
                }
            }
        }
コード例 #6
0
 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);
 }