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); }
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; }
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()); }
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(); }
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; } } } }
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(); }
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"); } }
public static bool place_empty_rectangle(RectangleF rectangle) { return(PlaceEmptyRectangle(rectangle)); }