// Paste properties
 public virtual void OnPasteProperties()
 {
     if (BuilderPlug.Me.CopiedThingProps != null)
     {
         mode.CreateUndo("Paste thing properties");
         mode.SetActionResult("Pasted thing properties.");
         BuilderPlug.Me.CopiedThingProps.Apply(Thing);
         Thing.UpdateConfiguration();
         this.Rebuild();
         mode.ShowTargetInfo();
     }
 }
Exemple #2
0
        // Moving the mouse
        public virtual void OnMouseMove(MouseEventArgs e)
        {
            // Dragging UV?
            if (uvdragging)
            {
                UpdateDragUV();
            }
            else
            {
                // Select button pressed?
                if (General.Actions.CheckActionActive(General.ThisAssembly, "visualselect"))
                {
                    // Check if tolerance is exceeded to start UV dragging
                    float deltaxy = General.Map.VisualCamera.AngleXY - dragstartanglexy;
                    float deltaz  = General.Map.VisualCamera.AngleZ - dragstartanglez;
                    if ((Math.Abs(deltaxy) + Math.Abs(deltaz)) > DRAG_ANGLE_TOLERANCE)
                    {
                        mode.PreAction(UndoGroup.TextureOffsetChange);
                        mode.CreateUndo("Change texture offsets");

                        // Start drag now
                        uvdragging = true;
                        mode.Renderer.ShowSelection = false;
                        mode.Renderer.ShowHighlight = false;
                        UpdateDragUV();
                    }
                }
            }
        }
        // Insert middle texture
        public virtual void OnInsert()
        {
            // No middle texture yet?
            if (!Sidedef.MiddleRequired() && (string.IsNullOrEmpty(Sidedef.MiddleTexture) || (Sidedef.MiddleTexture[0] == '-')))
            {
                // Make it now
                mode.CreateUndo("Create middle texture");
                mode.SetActionResult("Created middle texture.");
                General.Settings.FindDefaultDrawSettings();
                Sidedef.SetTextureMid(General.Settings.DefaultTexture);

                // Update
                Sector.Changed = true;

                // Other side as well
                if (string.IsNullOrEmpty(Sidedef.Other.MiddleTexture) || (Sidedef.Other.MiddleTexture[0] == '-'))
                {
                    Sidedef.Other.SetTextureMid(General.Settings.DefaultTexture);

                    // Update
                    VisualSector othersector = mode.GetVisualSector(Sidedef.Other.Sector);
                    if (othersector is BaseVisualSector)
                    {
                        (othersector as BaseVisualSector).Changed = true;
                    }
                }
            }
        }
        public void OnChangeTargetHeight(int amount)
        {
            VisualSlope pivothandle = null;
            List <IVisualEventReceiver> selectedsectors = mode.GetSelectedObjects(true, false, false, false, false);
            List <SectorLevel>          levels          = new List <SectorLevel>();

            if (selectedsectors.Count == 0)
            {
                levels.Add(level);
            }
            else
            {
                foreach (BaseVisualGeometrySector bvgs in selectedsectors)
                {
                    levels.Add(bvgs.Level);
                }

                if (!levels.Contains(level))
                {
                    levels.Add(level);
                }
            }

            // Try to find a slope handle the user set to be the pivot handle
            // TODO: doing this every time is kind of stupid. Maybe store the pivot handle in the mode?
            foreach (KeyValuePair <Sector, List <VisualSlope> > kvp in mode.AllSlopeHandles)
            {
                foreach (VisualSidedefSlope handle in kvp.Value)
                {
                    if (handle.Pivot)
                    {
                        pivothandle = handle;
                        break;
                    }
                }
            }

            // User didn't set a pivot handle, try to find the smart pivot handle
            if (pivothandle == null)
            {
                pivothandle = GetSmartPivotHandle(this, mode);
            }

            // Still no pivot handle, cancle
            if (pivothandle == null)
            {
                return;
            }

            pivothandle.SmartPivot = true;

            mode.CreateUndo("Change slope");

            Plane originalplane = level.plane;
            Plane pivotplane    = ((VisualSidedefSlope)pivothandle).Level.plane;

            // Build a new plane. p1 and p2 are the points of the slope handle that is modified, p3 is on the line of the pivot handle
            Vector3D p1 = new Vector3D(sidedef.Line.Start.Position, (float)Math.Round(originalplane.GetZ(sidedef.Line.Start.Position)));
            Vector3D p2 = new Vector3D(sidedef.Line.End.Position, (float)Math.Round(originalplane.GetZ(sidedef.Line.End.Position)));
            Vector3D p3 = new Vector3D(((VisualSidedefSlope)pivothandle).Sidedef.Line.Line.GetCoordinatesAt(0.5f), (float)Math.Round(pivotplane.GetZ(((VisualSidedefSlope)pivothandle).Sidedef.Line.Line.GetCoordinatesAt(0.5f))));

            // Move the points of the handle up/down
            p1 += new Vector3D(0f, 0f, amount);
            p2 += new Vector3D(0f, 0f, amount);

            Plane plane = new Plane(p1, p2, p3, true);

            // Apply slope to surfaces
            foreach (SectorLevel l in levels)
            {
                ApplySlope(l, plane, mode);
            }

            mode.SetActionResult("Changed slope.");
        }