Пример #1
0
 // 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();
     }
 }
        //mxd. Delete thing
        public void OnDelete()
        {
            mode.CreateUndo("Delete thing");
            mode.SetActionResult("Deleted a thing.");

            this.Thing.Fields.BeforeFieldsChange();
            this.Thing.Dispose();
            this.Dispose();

            General.Map.IsChanged = true;
            General.Map.ThingsFilter.Update();
        }
        // Paste properties
        public void OnPasteProperties(bool usecopysettings)
        {
            if (BuilderPlug.Me.CopiedVertexProps != null)
            {
                mode.CreateUndo("Paste vertex properties");
                mode.SetActionResult("Pasted vertex properties.");
                BuilderPlug.Me.CopiedVertexProps.Apply(vertex, usecopysettings);

                //update affected sectors
                UpdateGeometry(vertex);
                changed = true;
                mode.ShowTargetInfo();
            }
        }
Пример #4
0
        //mxd
        protected void ClearFields(IEnumerable <string> keys, string undodescription, string resultdescription)
        {
            if (!General.Map.UDMF)
            {
                return;
            }

            mode.CreateUndo(undodescription);
            mode.SetActionResult(resultdescription);
            level.sector.Fields.BeforeFieldsChange();

            foreach (string key in keys)
            {
                if (level.sector.Fields.ContainsKey(key))
                {
                    level.sector.Fields.Remove(key);
                    level.sector.UpdateNeeded = true;
                }
            }

            if (level.sector.UpdateNeeded)
            {
                if (level.sector != Sector.Sector && mode.VisualSectorExists(level.sector))
                {
                    BaseVisualSector vs = (BaseVisualSector)mode.GetVisualSector(level.sector);
                    vs.UpdateSectorGeometry(false);
                }
                else
                {
                    Sector.UpdateSectorGeometry(false);
                }
            }
        }
Пример #5
0
        // Flood-fill textures
        public virtual void OnTextureFloodfill()
        {
            if (BuilderPlug.Me.CopiedFlat != null)
            {
                string oldtexture     = GetTextureName();
                long   oldtexturelong = Lump.MakeLongName(oldtexture);
                string newtexture     = BuilderPlug.Me.CopiedFlat;
                if (newtexture != oldtexture)
                {
                    // Get the texture
                    ImageData newtextureimage = General.Map.Data.GetFlatImage(newtexture);
                    if (newtextureimage != null)
                    {
                        bool fillceilings = (this is VisualCeiling);

                        if (fillceilings)
                        {
                            mode.CreateUndo("Flood-fill ceilings with " + newtexture);
                            mode.SetActionResult("Flood-filled ceilings with " + newtexture + ".");
                        }
                        else
                        {
                            mode.CreateUndo("Flood-fill floors with " + newtexture);
                            mode.SetActionResult("Flood-filled floors with " + newtexture + ".");
                        }

                        mode.Renderer.SetCrosshairBusy(true);
                        General.Interface.RedrawDisplay();

                        if (mode.IsSingleSelection)
                        {
                            // Clear all marks, this will align everything it can
                            General.Map.Map.ClearMarkedSectors(false);
                        }
                        else
                        {
                            // Limit the alignment to selection only
                            General.Map.Map.ClearMarkedSectors(true);
                            List <Sector> sectors = mode.GetSelectedSectors();
                            foreach (Sector s in sectors)
                            {
                                s.Marked = false;
                            }
                        }

                        // Do the fill
                        Tools.FloodfillFlats(this.Sector.Sector, fillceilings, oldtexturelong, newtextureimage, false);

                        // Get the changed sectors
                        List <Sector> changes = General.Map.Map.GetMarkedSectors(true);
                        foreach (Sector s in changes)
                        {
                            // Update the visual sector
                            if (mode.VisualSectorExists(s))
                            {
                                BaseVisualSector vs = (mode.GetVisualSector(s) as BaseVisualSector);
                                if (fillceilings)
                                {
                                    vs.Ceiling.Setup();
                                }
                                else
                                {
                                    vs.Floor.Setup();
                                }
                            }
                        }

                        General.Map.Data.UpdateUsedTextures();
                        mode.Renderer.SetCrosshairBusy(false);
                        mode.ShowTargetInfo();
                    }
                }
            }
        }
Пример #6
0
        // 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;
                    }
                }
            }
        }