private void EndSelectionHandling() { Moving = true; LevEditor.PreserveSelection(); AdjustForGrid(CurrentPos); _moveStartPosition = CurrentPos; }
public void MouseDown(MouseEventArgs mouseData) { int nearestVertexIndex = GetNearestVertexIndex(CurrentPos); switch (mouseData.Button) { case MouseButtons.Left: if (Smoothing) { if (_smoothAll) { for (int i = Lev.Polygons.Count - 1; i >= 0; i--) { Polygon x = Lev.Polygons[i]; if (IsSmoothable(x)) { Lev.Polygons.RemoveAt(i); } } } else { Lev.Polygons.Remove(_currentPolygon); } Lev.Polygons.AddRange(_smoothPolys); Smoothing = false; LevEditor.Modified = true; LevEditor.UpdateSelectionInfo(); foreach (Polygon x in _smoothPolys) { x.UpdateDecomposition(); } } else if (nearestVertexIndex >= -1) { Smoothing = true; _smoothAll = false; _currentPolygon = NearestPolygon; ResetHighlight(); _unsmooth = Keyboard.IsKeyDown(Key.LeftCtrl); UpdateHelp(); UpdatePolygonSmooth(); } break; case MouseButtons.Right: CancelSmoothing(); break; } UpdateHelp(); }
public void MouseDown(MouseEventArgs mouseData) { switch (mouseData.Button) { case MouseButtons.Left: _writing = true; _currentTextPolygons = new List <Polygon>(); LevEditor.RedrawScene(); var result = TextToolForm.ShowDefault(_currentOptions, HandleChange); _writing = false; if (result.HasValue) { _currentOptions = result.Value; MarkAllAs(VectorMark.None); var rendered = RenderString(_currentOptions, CurrentPos); Lev.Polygons.AddRange(rendered); if (rendered.Count > 0) { LevEditor.Modified = true; } LevEditor.UpdateSelectionInfo(); } LevEditor.RedrawScene(); break; case MouseButtons.None: break; case MouseButtons.Right: break; case MouseButtons.Middle: break; case MouseButtons.XButton1: break; case MouseButtons.XButton2: break; default: throw new ArgumentOutOfRangeException(); } }
public void KeyDown(KeyEventArgs key) { switch (key.KeyCode) { case Keys.Space: LevEditor.TransformMenuItemClick(); break; case Keys.D1: UpdateAnimNumbers(1); break; case Keys.D2: UpdateAnimNumbers(2); break; case Keys.D3: UpdateAnimNumbers(3); break; case Keys.D4: UpdateAnimNumbers(4); break; case Keys.D5: UpdateAnimNumbers(5); break; case Keys.D6: UpdateAnimNumbers(6); break; case Keys.D7: UpdateAnimNumbers(7); break; case Keys.D8: UpdateAnimNumbers(8); break; case Keys.D9: UpdateAnimNumbers(9); break; } }
private void HandleChange(TextToolOptions obj) { _currentTextPolygons = RenderString(obj, CurrentPos); LevEditor.RedrawScene(); }
public void MouseUp() { if (RectSelecting || FreeSelecting) { double selectionxMin = 0; double selectionxMax = 0; double selectionyMax = 0; double selectionyMin = 0; if (RectSelecting) { selectionxMin = Math.Min(CurrentPos.X, _selectionStartPoint.X); selectionxMax = Math.Max(CurrentPos.X, _selectionStartPoint.X); selectionyMax = Math.Max(CurrentPos.Y, _selectionStartPoint.Y); selectionyMin = Math.Min(CurrentPos.Y, _selectionStartPoint.Y); } var grassFilter = LevEditor.EffectiveGrassFilter; var groundFilter = LevEditor.EffectiveGroundFilter; var appleFilter = LevEditor.EffectiveAppleFilter; var killerFilter = LevEditor.EffectiveKillerFilter; var flowerFilter = LevEditor.EffectiveFlowerFilter; var pictureFilter = LevEditor.EffectivePictureFilter; var textureFilter = LevEditor.EffectiveTextureFilter; foreach (Polygon x in Lev.Polygons) { if ((x.IsGrass && grassFilter) || (!x.IsGrass && groundFilter)) { foreach (Vector t in x.Vertices) { if (RectSelecting) { MarkSelectedInArea(t, selectionxMin, selectionxMax, selectionyMin, selectionyMax); } else { MarkSelectedInArea(t, _selectionPoly); } } } } foreach (LevObject t in Lev.Objects) { ObjectType type = t.Type; if (type == ObjectType.Start || (type == ObjectType.Apple && appleFilter) || (type == ObjectType.Killer && killerFilter) || (type == ObjectType.Flower && flowerFilter)) { if (RectSelecting) { MarkSelectedInArea(t.Position, selectionxMin, selectionxMax, selectionyMin, selectionyMax); } else { MarkSelectedInArea(t.Position, _selectionPoly); } } } foreach (Picture z in Lev.Pictures) { if ((z.IsPicture && pictureFilter) || (!z.IsPicture && textureFilter)) { if (RectSelecting) { MarkSelectedInArea(z.Position, selectionxMin, selectionxMax, selectionyMin, selectionyMax); } else { MarkSelectedInArea(z.Position, _selectionPoly); } } } LevEditor.UpdateSelectionInfo(); LevEditor.PreserveSelection(); RectSelecting = false; FreeSelecting = false; } else if (Moving) { Moving = false; _lockingLines = false; if (_anythingMoved) { LevEditor.Modified = true; } } }
public void MouseDown(MouseEventArgs mouseData) { Vector p = CurrentPos; _anythingMoved = false; int nearestVertexIndex = GetNearestVertexIndex(p); int nearestObjectIndex = GetNearestObjectIndex(p); int nearestPictureIndex = GetNearestPictureIndex(p); switch (mouseData.Button) { case MouseButtons.Left: if (nearestVertexIndex >= -1 && Keyboard.IsKeyDown(Key.LeftAlt)) { if (!Keyboard.IsKeyDown(Key.LeftCtrl)) { MarkAllAs(VectorMark.None); } NearestPolygon.MarkVectorsAs(VectorMark.Selected); var inearest = NearestPolygon.ToIPolygon(); foreach (var polygon in Lev.Polygons.Where(polygon => polygon.ToIPolygon().Within(inearest))) { polygon.MarkVectorsAs(VectorMark.Selected); } foreach (var obj in Lev.Objects) { if (NearestPolygon.AreaHasPoint(obj.Position)) { obj.Position.Mark = VectorMark.Selected; } } foreach (var pic in Lev.Pictures) { if (NearestPolygon.AreaHasPoint(pic.Position)) { pic.Position.Mark = VectorMark.Selected; } } EndSelectionHandling(); } else if (nearestVertexIndex >= 0) { HandleMark(NearestPolygon[nearestVertexIndex]); if (Keyboard.IsKeyDown(Key.LeftShift)) { _lockCenter = NearestPolygon[nearestVertexIndex]; _lockPrev = NearestPolygon[nearestVertexIndex - 1]; _lockNext = NearestPolygon[nearestVertexIndex + 1]; _lockingLines = true; _moveStartPosition = _lockCenter; } } else if (nearestVertexIndex == -1) { int nearestSegmentIndex = NearestPolygon.GetNearestSegmentIndex(p); AdjustForGrid(p); if (Keyboard.IsKeyDown(Key.LeftShift)) { MarkAllAs(VectorMark.None); p.Mark = VectorMark.Selected; NearestPolygon.Insert(nearestSegmentIndex + 1, p); LevEditor.Modified = true; } else { if ( !(NearestPolygon[nearestSegmentIndex].Mark == VectorMark.Selected && NearestPolygon[nearestSegmentIndex + 1].Mark == VectorMark.Selected)) { if (!Keyboard.IsKeyDown(Key.LeftCtrl)) { MarkAllAs(VectorMark.None); NearestPolygon.MarkVectorsAs(VectorMark.Selected); } } if (Keyboard.IsKeyDown(Key.LeftCtrl)) { NearestPolygon.MarkVectorsAs( NearestPolygon.Vertices.TrueForAll(v => v.Mark == VectorMark.Selected) ? VectorMark.None : VectorMark.Selected); } } EndSelectionHandling(); } else if (nearestObjectIndex >= 0) { HandleMark(Lev.Objects[nearestObjectIndex].Position); } else if (nearestPictureIndex >= 0) { HandleMark(Lev.Pictures[nearestPictureIndex].Position); } else { if (!Keyboard.IsKeyDown(Key.LeftCtrl)) { MarkAllAs(VectorMark.None); LevEditor.PreserveSelection(); } if (Keyboard.IsKeyDown(Key.LeftShift)) { FreeSelecting = true; _selectionPoly = new Polygon(); _selectionPoly.Add(CurrentPos); _mouseTrip = 0; _lastMousePosition = CurrentPos; } else { _selectionStartPoint = p; RectSelecting = true; } } LevEditor.UpdateSelectionInfo(); break; case MouseButtons.Right: break; case MouseButtons.Middle: break; } }