private void CreateObject_Click(object sender, EventArgs e) { Rectangle ViewableArea = EdControl.ViewableBlocks; NSMBObject no = new NSMBObject(10, 0, ViewableArea.X + ViewableArea.Width / 2, ViewableArea.Y + ViewableArea.Height / 2, 1, 1, EdControl.GFX); EdControl.UndoManager.Do(new AddLvlItemAction(UndoManager.ObjToList(no))); EdControl.mode.SelectObject(no); }
private void addEntranceButton_Click(object sender, EventArgs e) { Rectangle ViewableBlocks = EdControl.ViewableBlocks; NSMBEntrance ne = new NSMBEntrance(); ne.X = (ViewableBlocks.X + ViewableBlocks.Width / 2) * 16; ne.Y = (ViewableBlocks.Y + ViewableBlocks.Height / 2) * 16; ne.Number = EdControl.Level.getFreeEntranceNumber(); EdControl.UndoManager.Do(new AddLvlItemAction(UndoManager.ObjToList(ne))); EdControl.mode.SelectObject(ne); }
private void CreateSprite_Click(object sender, EventArgs e) { Rectangle ViewableArea = EdControl.ViewableBlocks; NSMBSprite ns = new NSMBSprite(EdControl.Level); ns.X = ViewableArea.X + ViewableArea.Width / 2; ns.Y = ViewableArea.Y + ViewableArea.Height / 2; ns.Type = 0; ns.Data = new byte[6]; EdControl.UndoManager.Do(new AddLvlItemAction(UndoManager.ObjToList(ns))); EdControl.mode.SelectObject(ns); }
private void addViewButton_Click(object sender, EventArgs e) { NSMBView nv = new NSMBView(); Rectangle va = EdControl.ViewableBlocks; nv.X = (va.X + (va.Width - 16) / 2) * 16; nv.Y = (va.Y + (va.Height - 12) / 2) * 16; nv.Height = 12 * 16; nv.Width = 16 * 16; nv.isZone = !EditingViews; nv.Number = EdControl.Level.getFreeViewNumber(lst); EdControl.UndoManager.Do(new AddLvlItemAction(UndoManager.ObjToList(nv))); EdControl.mode.SelectObject(nv); }
private void addPath_Click(object sender, EventArgs e) { Rectangle va = EdControl.ViewableBlocks; NSMBPath np = new NSMBPath(); if (isProgress) { np.id = EdControl.Level.getFreePathNumber(lst, 1); } else { np.id = EdControl.Level.getFreePathNumber(lst, 0); } np.isProgressPath = isProgress; NSMBPathPoint npp = new NSMBPathPoint(np); npp.X = (va.X + va.Width / 2) * 16; npp.Y = (va.Y + va.Height / 2) * 16; EdControl.UndoManager.Do(new AddLvlItemAction(UndoManager.ObjToList(npp))); EdControl.mode.SelectObject(npp); }
public override void MouseDrag(int x, int y) { //Resize the new object that was created by right-clicking. if (CreateObj && newObj != null) { Rectangle r = newObj.getRectangle(); x = Math.Max(0, x / 16); y = Math.Max(0, y / 16); if (x == lx && y == ly) { return; } lx = x; ly = y; newObj.X = Math.Min(lx, dx); newObj.Y = Math.Min(ly, dy); newObj.Width = Math.Abs(lx - dx) + 1; newObj.Height = Math.Abs(ly - dy) + 1; newObj.UpdateObjCache(); r = Rectangle.Union(r, newObj.getRectangle()); Level.repaintTilemap(r.X, r.Y, r.Width, r.Height); EdControl.repaint(); return; } if (lx == x && ly == y) // don't clone objects if there is no visible movement { return; } if (SelectMode) { findSelectedObjects(x, y, dx, dy, false, true); lx = x; ly = y; } else { UpdateSelectionBounds(); if (CloneMode) { List <LevelItem> newObjects = CloneList(SelectedObjects); EdControl.UndoManager.Do(new AddLvlItemAction(newObjects)); CloneMode = false; mouseAct.vert = ResizeType.ResizeNone; mouseAct.hor = ResizeType.ResizeNone; SelectedObjects = newObjects; } if (mouseAct.hor == ResizeType.ResizeNone && mouseAct.vert == ResizeType.ResizeNone) { int xDelta = x - lx; int yDelta = y - ly; if (xDelta < -minBoundX) { xDelta = -minBoundX; } if (yDelta < -minBoundY) { yDelta = -minBoundY; } xDelta &= ~(selectionSnap - 1); yDelta &= ~(selectionSnap - 1); if (xDelta == 0 && yDelta == 0) { return; } minBoundX += xDelta; minBoundY += yDelta; EdControl.UndoManager.Do(new MoveResizeLvlItemAction(SelectedObjects, xDelta, yDelta)); lx += xDelta; ly += yDelta; //Force align =D //Only done when ONE object because you'll probably NOT want multiple objects //moving relative to each other. if (SelectedObjects.Count == 1) { foreach (LevelItem o in SelectedObjects) { if (o.rx % selectionSnap != 0 || o.ry % selectionSnap != 0 || o.rwidth % selectionSnap != 0 || o.rheight % selectionSnap != 0) { EdControl.UndoManager.Do(new MoveResizeLvlItemAction(UndoManager.ObjToList(o), -o.rx % selectionSnap, -o.ry % selectionSnap, -o.rwidth % selectionSnap, -o.rheight % selectionSnap)); } } } } else { int xDelta = x - lx; int yDelta = y - ly; int xMoveDelta = 0; int xResizeDelta = 0; int yMoveDelta = 0; int yResizeDelta = 0; xDelta &= ~(selectionSnap - 1); yDelta &= ~(selectionSnap - 1); if (xDelta == 0 && yDelta == 0) { return; } if (mouseAct.hor == ResizeType.ResizeBegin) { if (-xDelta <= -minSizeX + selectionSnap) { xDelta = -(-minSizeX + selectionSnap); } if (xDelta < -minBoundX) { xDelta = -minBoundX; } xMoveDelta = xDelta; xResizeDelta = -xDelta; } if (mouseAct.vert == ResizeType.ResizeBegin) { if (-yDelta <= -minSizeY + selectionSnap) { yDelta = -(-minSizeY + selectionSnap); } if (yDelta < -minBoundY) { yDelta = -minBoundY; } yMoveDelta = yDelta; yResizeDelta = -yDelta; } if (mouseAct.hor == ResizeType.ResizeEnd) { if (xDelta <= -minSizeX + selectionSnap) { xDelta = -minSizeX + selectionSnap; } xResizeDelta = xDelta; } if (mouseAct.vert == ResizeType.ResizeEnd) { if (yDelta <= -minSizeY + selectionSnap) { yDelta = -minSizeY + selectionSnap; } yResizeDelta = yDelta; } if (xMoveDelta == 0 && yMoveDelta == 0 && xResizeDelta == 0 && yResizeDelta == 0) { return; } minBoundX += xMoveDelta; minBoundY += yMoveDelta; minSizeX += xResizeDelta; minSizeY += yResizeDelta; EdControl.UndoManager.Do(new MoveResizeLvlItemAction(SelectedObjects, xMoveDelta, yMoveDelta, xResizeDelta, yResizeDelta)); lx += xDelta; ly += yDelta; } } }
public override void MouseDown(int x, int y, MouseButtons buttons) { //Right clicking creates a new object if (buttons == MouseButtons.Right) { dx = x / 16; dy = y / 16; lx = x; ly = y; CreateObj = true; if (tabs.SelectedTab == 2) //The sprite tab { NSMBSprite newSprite = new NSMBSprite(Level); newSprite.Type = tabs.sprites.getSelectedType(); if (newSprite.Type == -1) { return; } newSprite.Data = new byte[6]; newSprite.x = x; newSprite.y = y; EdControl.UndoManager.Do(new AddLvlItemAction(UndoManager.ObjToList(newSprite))); SelectObject(newSprite); return; } newObj = new NSMBObject(tabs.objects.getObjectType(), tabs.objects.getTilesetNum(), dx, dy, 1, 1, Level.GFX); EdControl.UndoManager.Do(new AddLvlItemAction(UndoManager.ObjToList(newObj))); SelectObject(newObj); return; } lx = x; ly = y; dx = x; dy = y; mouseAct = getActionAtPos(x, y); // Resize with the shift key if (mouseAct.nodeType != CreateNode.None) { NSMBPathPoint pp = new NSMBPathPoint(mouseAct.node); int zIndex = pp.parent.points.IndexOf(mouseAct.node); if (mouseAct.nodeType == CreateNode.After) { pp.x += 16; zIndex++; } else { pp.x -= 16; } EdControl.UndoManager.Do(new AddPathNodeAction(UndoManager.ObjToList(pp), zIndex)); SelectObject(pp); } else { if (Control.ModifierKeys == Keys.Shift && mouseAct.drag && mouseAct.vert == ResizeType.ResizeNone && mouseAct.hor == ResizeType.ResizeNone) { mouseAct.vert = ResizeType.ResizeEnd; mouseAct.hor = ResizeType.ResizeEnd; } if (!mouseAct.drag) { // Select an object findSelectedObjects(x, y, x, y, true, true); SelectMode = SelectedObjects.Count == 0; } else if (mouseAct.vert == ResizeType.ResizeNone && mouseAct.hor == ResizeType.ResizeNone) { List <LevelItem> selectedObjectsBack = new List <LevelItem>(); selectedObjectsBack.AddRange(SelectedObjects); // Select an object findSelectedObjects(x, y, x, y, true, true); if (SelectedObjects.Count == 0) { SelectMode = true; } else { if (selectedObjectsBack.Contains(SelectedObjects[0])) { SelectedObjects = selectedObjectsBack; } } UpdateSelectionBounds(); EdControl.repaint(); } if (!SelectMode) { CloneMode = Control.ModifierKeys == Keys.Control; lx -= selectionSnap / 2; ly -= selectionSnap / 2; } } EdControl.repaint(); tabs.SelectObjects(SelectedObjects); UpdatePanel(); }
public override void MouseDown(int x, int y, MouseButtons buttons) { //Right clicking creates a new object if (buttons == MouseButtons.Right) { dx = x / 16; dy = y / 16; lx = x; ly = y; CreateObj = true; if (tabs.SelectedTab == 2) //The sprite tab { NSMBSprite newSprite = new NSMBSprite(Level); newSprite.Type = tabs.sprites.getSelectedType(); if (newSprite.Type == -1) { return; } newSprite.Data = new byte[6]; newSprite.x = x; newSprite.y = y; EdControl.UndoManager.Do(new AddLvlItemAction(UndoManager.ObjToList(newSprite))); SelectObject(newSprite); return; } newObj = new NSMBObject(tabs.objects.getObjectType(), tabs.objects.getTilesetNum(), dx, dy, 1, 1, Level.GFX); EdControl.UndoManager.Do(new AddLvlItemAction(UndoManager.ObjToList(newObj))); SelectObject(newObj); return; } lx = x; ly = y; dx = x; dy = y; bool drag = false; getActionAtPos(x, y, out drag, out vertResize, out horResize); // Resize with the shift key if (Control.ModifierKeys == Keys.Shift && drag && vertResize == ResizeType.ResizeNone && horResize == ResizeType.ResizeNone) { vertResize = ResizeType.ResizeEnd; horResize = ResizeType.ResizeEnd; } if (!drag) { // Select an object findSelectedObjects(x, y, x, y, true, true); SelectMode = SelectedObjects.Count == 0; } else if (vertResize == ResizeType.ResizeNone && horResize == ResizeType.ResizeNone) { List <LevelItem> selectedObjectsBack = new List <LevelItem>(); selectedObjectsBack.AddRange(SelectedObjects); // Select an object findSelectedObjects(x, y, x, y, true, true); if (SelectedObjects.Count == 0) { SelectMode = true; } else { if (selectedObjectsBack.Contains(SelectedObjects[0])) { SelectedObjects = selectedObjectsBack; } } UpdateSelectionBounds(); EdControl.repaint(); } if (!SelectMode) { CloneMode = Control.ModifierKeys == Keys.Control; lx -= selectionSnap / 2; ly -= selectionSnap / 2; } EdControl.repaint(); tabs.SelectObjects(SelectedObjects); UpdatePanel(); }