mirror of
https://github.com/PixelGuys/Cubyz.git
synced 2025-08-03 03:06:55 -04:00
Add /mask
command (#1337)
* Add masks * Apply masks to /set * Change char used for tags * Remove mask command * Revert "Remove mask command" This reverts commit 83e8cdd9044452f11efdd4d515bee330491ea1f6. * Fix use of BlockTag * Fix use of BlockTag * Move Pattern into Blueprint * Improve error message on capture failure * Change memory management * Move EditMask to blueprint.zig * Polish mask command * Fix some fixes * Fix block formatting * Fix blueprint formatting * Implement some of the suggestions * Fix field renames * Unstupidify Entry.initFromString inverse handling * Use introspection to create Property enum * Make or_ and_ inverse etc. private * Use functions instead of generics * Rename getBlockById parameter * Update src/blueprint.zig Co-authored-by: IntegratedQuantum <43880493+IntegratedQuantum@users.noreply.github.com> * Improve error names * Add get method to Tag * Improve error names * Update src/blueprint.zig Co-authored-by: IntegratedQuantum <43880493+IntegratedQuantum@users.noreply.github.com> * Change how block dispatch is done * Add hasTag * Quick fixes of small bugs * Fix implementation of hasTag * Remove redundant try from parseBlockLike * Add test for inverse masks * Fix inversed mask check * Remove brush masks * Remove unused imports --------- Co-authored-by: IntegratedQuantum <43880493+IntegratedQuantum@users.noreply.github.com>
This commit is contained in:
parent
f5fd3356d9
commit
1f4d23464a
@ -16,3 +16,4 @@ pub const paste = @import("worldedit/paste.zig");
|
|||||||
pub const blueprint = @import("worldedit/blueprint.zig");
|
pub const blueprint = @import("worldedit/blueprint.zig");
|
||||||
pub const rotate = @import("worldedit/rotate.zig");
|
pub const rotate = @import("worldedit/rotate.zig");
|
||||||
pub const set = @import("worldedit/set.zig");
|
pub const set = @import("worldedit/set.zig");
|
||||||
|
pub const mask = @import("worldedit/mask.zig");
|
||||||
|
27
src/server/command/worldedit/mask.zig
Normal file
27
src/server/command/worldedit/mask.zig
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
const std = @import("std");
|
||||||
|
|
||||||
|
const main = @import("main");
|
||||||
|
const User = main.server.User;
|
||||||
|
|
||||||
|
const Mask = main.blueprint.Mask;
|
||||||
|
|
||||||
|
pub const description = "Set edit mask. When used with no mask expression it will clear current mask.";
|
||||||
|
pub const usage =
|
||||||
|
\\/mask <mask>
|
||||||
|
\\/mask
|
||||||
|
;
|
||||||
|
|
||||||
|
pub fn execute(args: []const u8, source: *User) void {
|
||||||
|
if(args.len == 0) {
|
||||||
|
if(source.worldEditData.mask) |mask| mask.deinit(main.globalAllocator);
|
||||||
|
source.worldEditData.mask = null;
|
||||||
|
source.sendMessage("#00ff00Mask cleared.", .{});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const mask = Mask.initFromString(main.globalAllocator, args) catch |err| {
|
||||||
|
source.sendMessage("#ff0000Error parsing mask: {}", .{err});
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
source.worldEditData.mask = mask;
|
||||||
|
source.sendMessage("#00ff00Mask set.", .{});
|
||||||
|
}
|
@ -41,7 +41,7 @@ pub fn execute(args: []const u8, source: *User) void {
|
|||||||
var modifiedBlueprint = blueprint.clone(main.stackAllocator);
|
var modifiedBlueprint = blueprint.clone(main.stackAllocator);
|
||||||
defer modifiedBlueprint.deinit(main.stackAllocator);
|
defer modifiedBlueprint.deinit(main.stackAllocator);
|
||||||
|
|
||||||
modifiedBlueprint.set(pattern, null);
|
modifiedBlueprint.set(pattern, source.worldEditData.mask);
|
||||||
modifiedBlueprint.paste(posStart, .{.preserveVoid = true});
|
modifiedBlueprint.paste(posStart, .{.preserveVoid = true});
|
||||||
},
|
},
|
||||||
.failure => |err| {
|
.failure => |err| {
|
||||||
|
@ -14,6 +14,7 @@ const Vec3i = vec.Vec3i;
|
|||||||
const BinaryReader = main.utils.BinaryReader;
|
const BinaryReader = main.utils.BinaryReader;
|
||||||
const BinaryWriter = main.utils.BinaryWriter;
|
const BinaryWriter = main.utils.BinaryWriter;
|
||||||
const Blueprint = main.blueprint.Blueprint;
|
const Blueprint = main.blueprint.Blueprint;
|
||||||
|
const Mask = main.blueprint.Mask;
|
||||||
const NeverFailingAllocator = main.heap.NeverFailingAllocator;
|
const NeverFailingAllocator = main.heap.NeverFailingAllocator;
|
||||||
const CircularBufferQueue = main.utils.CircularBufferQueue;
|
const CircularBufferQueue = main.utils.CircularBufferQueue;
|
||||||
|
|
||||||
@ -33,6 +34,7 @@ pub const WorldEditData = struct {
|
|||||||
clipboard: ?Blueprint = null,
|
clipboard: ?Blueprint = null,
|
||||||
undoHistory: History,
|
undoHistory: History,
|
||||||
redoHistory: History,
|
redoHistory: History,
|
||||||
|
mask: ?Mask = null,
|
||||||
|
|
||||||
const History = struct {
|
const History = struct {
|
||||||
changes: CircularBufferQueue(Value),
|
changes: CircularBufferQueue(Value),
|
||||||
@ -80,6 +82,9 @@ pub const WorldEditData = struct {
|
|||||||
}
|
}
|
||||||
self.undoHistory.deinit();
|
self.undoHistory.deinit();
|
||||||
self.redoHistory.deinit();
|
self.redoHistory.deinit();
|
||||||
|
if(self.mask) |mask| {
|
||||||
|
mask.deinit(main.globalAllocator);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user