DefineClass.XDeleteObjectsTool = { __parents = { "XEditorBrushTool", "XEditorObjectPalette" }, properties = { { id = "buttons", editor = "buttons", default = false, buttons = {{name = "Clear selected objects", func = "ClearSelection"}} }, }, ToolTitle = "Delete objects", Description = { "( to delete objects on a select terrain)", }, ActionSortKey = "07", ActionIcon = "CommonAssets/UI/Editor/Tools/DeleteObjects.tga", ActionShortcut = "D", deleted_objects = false, start_terrain = false, } function XDeleteObjectsTool:StartDraw(pt) SuspendPassEdits("XEditorDeleteObjects") self.deleted_objects = {} self.start_terrain = terminal.IsKeyPressed(const.vkControl) and terrain.GetTerrainType(pt) end function XDeleteObjectsTool:Draw(pt1, pt2) local classes = self:GetObjectClass() local radius = self:GetCursorRadius() local callback = function(o) if not self.deleted_objects[o] and XEditorFilters:IsVisible(o) and o:GetGameFlags(const.gofPermanent) ~= 0 then if not self.start_terrain or terrain.GetTerrainType(o:GetPos()) == self.start_terrain then self.deleted_objects[o] = true o:ClearEnumFlags(const.efVisible) end end end if #classes > 0 then for _, class in ipairs(classes) do MapForEach(pt1, pt2, radius, class, callback) end else MapForEach(pt1, pt2, radius, callback) end end function XDeleteObjectsTool:EndDraw(pt) if next(self.deleted_objects) then local objs = table.validate(table.keys(self.deleted_objects)) for _, obj in ipairs(objs) do obj:SetEnumFlags(const.efVisible) end XEditorUndo:BeginOp({ objects = objs, name = string.format("Deleted %d objects", #objs) }) Msg("EditorCallback", "EditorCallbackDelete", objs) for _, obj in ipairs(objs) do obj:delete() end XEditorUndo:EndOp() end ResumePassEdits("XEditorDeleteObjects") self.deleted_objects = false end function XDeleteObjectsTool:GetCursorRadius() local radius = self:GetSize() / 2 return radius, radius end function XDeleteObjectsTool:ClearSelection() self:SetObjectClass({}) ObjModified(self) end