Example #1
0
        public static bool PlaceEmptyRectangle(RectangleF rr)
        {
            foreach (RoomLayer rl in roomLayers)
            {
                if (rl.Visible)
                {
                    if (rl is ObjectLayer)
                    {
                        ObjectLayer ol = (ObjectLayer)rl;
                        foreach (GameObject g in ol.Objects)
                        {
                            if (g == currentObject)
                            {
                                continue;
                            }

                            RectangleF r = new Rectangle((int)g.Position.X, (int)g.Position.Y, g.Sprite.ImageRectangle.Width, g.Sprite.ImageRectangle.Height);
                            if (r.Intersects(rr))
                            {
                                return(false);
                            }
                        }
                    }
                }
            }

            return(true);
        }
Example #2
0
        public void ClickRelease(MouseButtons mb)
        {
            mouseLocked = false;

            if ((mb & MouseButtons.Left) != 0)
            {
                Input.ReleasedButtons[0] = 1; Input.PressedButtonsOnce[0] = 0;
            }
            if ((mb & MouseButtons.Right) != 0)
            {
                Input.ReleasedButtons[1] = 1;
            }
            if ((mb & MouseButtons.Middle) != 0)
            {
                Input.ReleasedButtons[2] = 1;
            }
            if ((mb & MouseButtons.None) != 0)
            {
                Input.ReleasedButtons[3] = 1;
            }
            if ((mb & MouseButtons.XButton1) != 0)
            {
                Input.ReleasedButtons[5] = 1;
            }
            if ((mb & MouseButtons.XButton2) != 0)
            {
                Input.ReleasedButtons[6] = 1;
            }

            Input.CheckAnyReleased();


            if (Input.KeyboardState.IsKeyDown(Keys.LeftControl))
            {
                selectedRectangleObjects.Clear();

                foreach (GameObject o in SceneObjects)
                {
                    RectangleF r = new RectangleF(o.Position, new Size2(o.Sprite.ImageRectangle.Width, o.Sprite.ImageRectangle.Height));

                    if (r.Intersects(selectionRectangle))
                    {
                        o.TempPosition = new Vector2(o.Position.X - MousePositionTranslated.X, o.Position.Y - MousePositionTranslated.Y);
                        selectedRectangleObjects.Add(o);
                    }
                }
            }

            selectionRectangle = RectangleF.Empty;

            if (!cms.Visible)
            {
                clickedObject = null;
            }

            panView = false;
        }
Example #3
0
        public Tile(Point position, Size size)
        {
            this.Position   = position;
            this.Size       = size;
            this.Connectors = this.Inputs.Select(kv => new KeyValuePair <string, Connector>(kv.Key, kv.Value)).Concat(this.Outputs.Select(kv => new KeyValuePair <string, Connector>(kv.Key, kv.Value)));

            this.Layer            = 0;
            this.InteractableArea = new RectangleF(position, this.Size.ToSize2());
        }
Example #4
0
        void UpdateGrid()
        {
            int cellSize = 16;
            int x        = 0;
            int y        = 0;

            RectangleF rect = RectangleF.Empty;

            Color c1 = Color.FromNonPremultiplied(68, 68, 68, 255);
            Color c2 = Color.FromNonPremultiplied(77, 77, 77, 255);

            bool flag     = true;
            bool lastFlag = flag;

            gridSurface = Sgml.surface_create(Width, Height);
            Sgml.surface_set_target(gridSurface);
            for (var i = 0; i < Height / cellSize + 1; i++)
            {
                for (var j = 0; j < Width / cellSize + 1; j++)
                {
                    if (j == 0)
                    {
                        lastFlag = flag;
                    }

                    rect.Size     = new Size2(cellSize, cellSize);
                    rect.Position = new Point2(x, y);

                    if (flag)
                    {
                        Sgml.draw_set_color(c1);
                    }
                    else
                    {
                        Sgml.draw_set_color(c2);
                    }

                    Sgml.draw_rectangle(rect, false);
                    x   += cellSize;
                    flag = !flag;
                }

                x        = 0;
                y       += cellSize;
                lastFlag = !lastFlag;
                flag     = lastFlag;
            }
            Sgml.surface_reset_target();
        }
Example #5
0
        public void ClickLock(MouseButtons btn)
        {
            mouseLocked   = true;
            MousePrevious = MousePositionTranslated;

            if ((btn & MouseButtons.Left) != 0)
            {
                Input.PressedButtonsOnce[0] = 1; Sgml.LastButton = Sgml.MouseButtons.Left;
            }
            if ((btn & MouseButtons.Right) != 0)
            {
                Input.PressedButtonsOnce[1] = 1; Sgml.LastButton = Sgml.MouseButtons.mb_right;
            }
            if ((btn & MouseButtons.Middle) != 0)
            {
                Input.PressedButtonsOnce[2] = 1; Sgml.LastButton = Sgml.MouseButtons.Middle;
            }
            if ((btn & MouseButtons.None) != 0)
            {
                Input.PressedButtonsOnce[3] = 1;
            }
            if ((btn & MouseButtons.XButton1) != 0)
            {
                Input.PressedButtonsOnce[5] = 1; Sgml.LastButton = Sgml.MouseButtons.mb_x1;
            }
            if ((btn & MouseButtons.XButton2) != 0)
            {
                Input.PressedButtonsOnce[6] = 1; Sgml.LastButton = Sgml.MouseButtons.mb_x2;
            }

            Input.CheckAnyPressedOnce();

            if (selectedRectangleObjects.Count > 0)
            {
                bool flag = false;
                foreach (GameObject o in selectedRectangleObjects)
                {
                    RectangleF r = new RectangleF(o.Position,
                                                  new Size2(o.Sprite.ImageRectangle.Width, o.Sprite.ImageRectangle.Height));
                    if (r.Intersects(new RectangleF(MousePositionTranslated.X, MousePositionTranslated.Y, 4, 4)))
                    {
                        flag = true;
                        break;
                    }
                }

                if (!flag)
                {
                    selectedRectangleObjects.Clear();
                }
            }

            if (btn == MouseButtons.Left && Input.KeyboardState.IsKeyDown(Keys.LeftControl))
            {
                Vector2 vec = MousePositionTranslated;
                selectionRectangle.X = vec.X;
                selectionRectangle.Y = vec.Y;
            }

            if (btn == MouseButtons.Middle)
            {
                panView = true;
                helpVec = cam.Camera.ScreenToWorld(MousePosition);
            }

            if (btn == MouseButtons.Right && !Input.KeyboardState.IsKeyDown(Keys.LeftShift))
            {
                Vector2 vec = MousePositionTranslated;
                if (DrawGrid)
                {
                    vec = new Vector2((int)vec.X / 32 * 32, (int)vec.Y / 32 * 32);
                }

                for (var i = SceneObjects.Count - 1; i >= 0; i--)
                {
                    Microsoft.Xna.Framework.Rectangle r = new Microsoft.Xna.Framework.Rectangle((int)SceneObjects[i].Position.X, (int)SceneObjects[i].Position.Y, SceneObjects[i].Sprite.ImageRectangle.Width, SceneObjects[i].Sprite.ImageRectangle.Height);

                    if (r.Contains(vec))
                    {
                        if (goodBoy)
                        {
                            cms.Items.Clear();

                            foreach (string items in SceneObjects[i].EditorOptions)
                            {
                                if (items == "[magic_separator]")
                                {
                                    cms.Items.Add(new ToolStripSeparator());
                                }
                                else
                                {
                                    cms.Items.Add(items);
                                }
                            }

                            cms.Invalidate();
                            cms.Size = GetPreferredSize(ClientSize);
                            cms.Show(Cursor.Position);

                            clickedObject = SceneObjects[i];

                            goodBoy = false;
                        }
                        else
                        {
                            goodBoy = true;
                        }

                        break;
                    }
                }
            }
        }
Example #6
0
        protected override void Draw()
        {
            double        framerate = Editor.GetFrameRate;
            KeyboardState ks        = Keyboard.GetState();

            base.Draw();
            Matrix transformMatrix = cam.Camera.GetViewMatrix();

            BackgroundColor = Color.Black;
            Editor.graphics.Clear(BackgroundColor);
            Input.MousePosition = MousePositionTranslated;

            Sgml.currentRoom = currentRoom;

            if (DrawGrid)
            {
                Color c = Color.Black;
                c.A = 128;
                Editor.spriteBatch.Begin(transformMatrix: transformMatrix);
                for (float i = 0; i < 768; i += GridSizeRender.Y)
                {
                    for (float j = 0; j < 1024; j += GridSizeRender.X)
                    {
                        i = (float)Math.Round(i);
                        j = (float)Math.Round(j);
                        Editor.spriteBatch.DrawRectangle(new RectangleF(j, i, GridSizeRender.X, GridSizeRender.Y), c, 1);
                    }
                }

                Editor.spriteBatch.End();
            }

            foreach (RoomLayer rl in roomLayers)
            {
                if (rl.LayerType == RoomLayer.LayerTypes.typeTile)
                {
                    Color c = Color.White;
                    c.A = 128;
                    Editor.spriteBatch.Begin(transformMatrix: transformMatrix);
                    int xIndex = 0;
                    int yIndex = 0;
                    for (float i = 0; i < 768; i += GridSizeRender.Y)
                    {
                        for (float j = 0; j < 1024; j += GridSizeRender.X)
                        {
                            xIndex++;
                            i = (float)Math.Round(i);
                            j = (float)Math.Round(j);
                        }

                        yIndex++;
                        xIndex = 0;
                    }

                    foreach (Tile t in ((TileLayer)rl).Tiles)
                    {
                        Editor.spriteBatch.Draw(t.SourceTexture, new Vector2(t.PosX * 32, t.PosY * 32), t.DrawRectangle, Color.White);
                    }

                    Editor.spriteBatch.End();
                }
            }

            Matrix view       = cam.Camera.GetViewMatrix();
            Matrix projection = m;

            basicEffect.World              = world;
            basicEffect.View               = view;
            basicEffect.Projection         = projection;
            basicEffect.VertexColorEnabled = true;

            foreach (RoomLayer rl in roomLayers.ToList())
            {
                if (rl.Visible)
                {
                    // ------------ positions doesn't matter here -------------
                    // Layer is tile
                    if (rl is TileLayer)
                    {
                        Editor.spriteBatch.Begin(transformMatrix: transformMatrix);
                        foreach (Tile t in ((TileLayer)rl).Tiles)
                        {
                            Editor.spriteBatch.Draw(t.SourceTexture, new Vector2(t.PosX * 32, t.PosY * 32), t.DrawRectangle, Color.White);
                        }

                        Editor.spriteBatch.End();
                    }

                    // Layer is object
                    if (rl is ObjectLayer)
                    {
                        foreach (GameObject o in ((ObjectLayer)rl).Objects.ToList())
                        {
                            List <GameObject> possibleColliders = sh.ObjectsNearby(o);   // already works for bruteforce

                            /*  foreach (GameObject g2 in possibleColliders)
                             * {
                             *    if (g2 == o)
                             *    {
                             *        continue;
                             *    }
                             *
                             *    if (g2.GetType() == typeof(Object3))
                             *    {
                             *        if (ColliderCircle.CircleInCircle((ColliderCircle)g2.Colliders[0], (ColliderCircle)o.Colliders[0]))
                             *        {
                             *            if (g2 != o && (o.Colliders[0] as ColliderCircle).Position.X != 0 && (g2.Colliders[0] as ColliderCircle).Position.X != 0)
                             *            {
                             *                ((Object3) g2).color = Color.Red;
                             *             //   ColliderCircle.ResolveCircleCircleCollisionElastic(g2, o);
                             *            }
                             *        }
                             *        else
                             *        {
                             *            //((Object3)g2).color = Color.White;
                             *        }
                             *    }*/


                            o.PositionPrevious = o.Position;
                            o.EvtDraw(Editor.spriteBatch, Editor.Font, o.Sprite.Texture, vertexBuffer, basicEffect,
                                      transformMatrix);


                            RectangleF r = new RectangleF(o.Position,
                                                          new Size2(o.Sprite.ImageRectangle.Width, o.Sprite.ImageRectangle.Height));

                            if (o == clickedObject || r.Intersects(selectionRectangle) ||
                                selectedRectangleObjects.Contains(o))
                            {
                                Editor.spriteBatch.Begin(transformMatrix: transformMatrix);
                                Editor.spriteBatch.DrawRectangle(
                                    new RectangleF(o.Position,
                                                   new Size2(o.Sprite.ImageRectangle.Width, o.Sprite.ImageRectangle.Height)),
                                    Color.White,
                                    2);
                                Editor.spriteBatch.End();
                            }
                        }
                    }
                }
            }

            if (ks.IsKeyDown(Keys.LeftControl))
            {
                Editor.spriteBatch.Begin(transformMatrix: transformMatrix);
                Editor.spriteBatch.DrawRectangle(selectionRectangle, Color.White, 2);
                Editor.spriteBatch.End();
            }

            Editor.spriteBatch.Begin();
            Editor.spriteBatch.DrawString(Editor.Font, framerate.ToString("F1"), new Vector2(10, 10), Color.White);
            Editor.spriteBatch.End();


            killClick = false;

            Input.KeyboardStatePrevious = Keyboard.GetState();
            Input.Clear();
        }
Example #7
0
        protected override void Draw()
        {
            if (parentForm != null)
            {
                ms = Mouse.GetState();

                if (ttl < 10)
                {
                    if (ttl == 9)
                    {
                        ScaleToFit(90);
                    }

                    ttl++;
                }

                base.Draw();
                double framerate       = Editor.GetFrameRate;
                Matrix transformMatrix = cam.Camera.GetViewMatrix();
                MousePositionTranslated = cam.Camera.ScreenToWorld(new Vector2(ms.X, ms.Y));

                BackgroundColor = Color.Black;
                Editor.graphics.Clear(BackgroundColor);
                Input.MousePosition = MousePositionTranslated;
                MousePosition       = new Vector2(ms.X, ms.Y);

                Sgml.sb            = Editor.spriteBatch;
                Sgml.vb            = vertexBuffer;
                Sgml.be            = basicEffect;
                Sgml.m             = transformMatrix;
                Sgml.currentObject = representativeGameObject;

                Matrix view       = cam.Camera.GetViewMatrix();
                Matrix projection = m;

                basicEffect.World              = world;
                basicEffect.View               = view;
                basicEffect.Projection         = projection;
                basicEffect.VertexColorEnabled = true;

                Sgml.mouse = MousePositionTranslated;

                // Actual logic
                int cellSize = 16;
                int x        = 0;
                int y        = 0;

                RectangleF rect = RectangleF.Empty;

                Color c1 = Color.FromNonPremultiplied(68, 68, 68, 255);
                Color c2 = Color.FromNonPremultiplied(77, 77, 77, 255);

                bool flag     = true;
                bool lastFlag = flag;

                cam.Camera.Origin = new Vector2(Width / 2f, Height / 2f);


                basicEffect.View = Matrix.Identity;
                Sgml.m           = Matrix.Identity;
                Vector2 origin = Vector2.Zero;

                Sgml.draw_surface(origin, gridSurface);

                basicEffect.View = view;
                Sgml.m           = transformMatrix;

                if (selectedFrame != null)
                {
                    Sgml.draw_set_aa(!parentForm.drawModeOn);

                    if (selectedFrame.layers[0].texture != null)
                    {
                        Sgml.draw_surface(origin, selectedFrame.layers[selectedLayer].texture);
                        Sgml.draw_surface(origin, selectedFrame.previewLayer.texture);
                    }

                    Sgml.draw_set_aa(true);

                    // draw cells
                    int        xx     = 0;
                    int        yy     = 0;
                    int        xIndex = 0;
                    int        yIndex = 0;
                    RectangleF temp   = RectangleF.Empty;

                    float x1 = origin.X;
                    float y1 = origin.Y;
                    float x2 = x1 + (int)parentForm.darkNumericUpDown1.Value;
                    float y2 = y1 + (int)parentForm.darkNumericUpDown2.Value;

                    Sgml.draw_set_alpha(0.8);
                    Sgml.draw_set_color(Color.Black);
                    for (var i = 0; i < parentForm.darkNumericUpDown1.Value + 1; i++)
                    {
                        Sgml.draw_line(x1, y1 + i, x2, y1 + i);
                    }

                    for (var i = 0; i < parentForm.darkNumericUpDown2.Value + 1; i++)
                    {
                        Sgml.draw_line(x1 + i, y1, x1 + i, y2);
                    }

                    Sgml.draw_set_alpha(1);
                    Sgml.draw_set_color(Color.White);

                    Sgml.draw_set_aa(false);


                    if (selectedFrame.layers.Count > 0)
                    {
                        if (selectedFrame.layers[0].texture != null)
                        {
                            Sgml.draw_rectangle(origin, new Vector2(selectedFrame.layers[0].texture.Width, selectedFrame.layers[0].texture.Height), true);
                        }
                    }
                }

                basicEffect.View = Matrix.Identity;
                Sgml.m           = Matrix.Identity;

                Sgml.draw_set_color(Color.White);
                Sgml.draw_text(new Vector2(10, 10), framerate.ToString());
                Sgml.draw_text(new Vector2(10, 30), "[X: " + Sgml.round(Sgml.mouse.X - 0.5f) + " Y: " + Sgml.round(Sgml.mouse.Y - 0.5f) + "]");
                // Sgml.draw_text(new Vector2(10, 50), parentForm.darkNumericUpDown1.Value.ToString());
                Sgml.draw_text(new Vector2(10, 70), cam.Zoom.ToString());
                Sgml.draw_text(new Vector2(10, 90), "DIR: " + Sgml.point_direction(toolOriginSubpixel, mouseSubpixel));
                Sgml.draw_text(new Vector2(10, 110), "CLICK: " + toolOriginSubpixel.X + "x " + toolOriginSubpixel.Y + "y");
            }
        }
Example #8
0
 public static bool place_empty_rectangle(RectangleF rectangle)
 {
     return(PlaceEmptyRectangle(rectangle));
 }