summaryrefslogtreecommitdiff
path: root/worldedit_commands/cuboid.lua
blob: 2e59f16d051e4d9c3529f0aaeb82325a863c0982 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
minetest.register_chatcommand("/outset", {
	params = "<amount> [h|v]",
	description = "outset the selection",
	privs = {worldedit=true},
	func = function(name, param)
		local find, _, amount, dir = param:find("^(%d+)[%s+]?([hv]?)$")
		
		if find == nil then
			return false, "invalid usage: " .. param
		end
		
		local pos1 = worldedit.pos1[name]
		local pos2 = worldedit.pos2[name]
		
		if pos1 == nil or pos2 == nil then
			return false, 
				"Undefined region. Region must be defined beforehand."
		end
		
		if dir == "" then
			assert(worldedit.cuboid_volumetricexpand(name, amount))
		elseif dir == "h" then
			assert(worldedit.cuboid_linealexpand(name, 'x', 1, amount))
			assert(worldedit.cuboid_linealexpand(name, 'x', -1, amount))
			assert(worldedit.cuboid_linealexpand(name, 'z', 1, amount))
			assert(worldedit.cuboid_linealexpand(name, 'z', -1, amount))
		elseif dir == "v" then
			assert(worldedit.cuboid_linealexpand(name, 'y', 1, amount))
			assert(worldedit.cuboid_linealexpand(name, 'y', -1, amount))
		else
			return false, "Unknown error"
		end
		
		worldedit.marker_update(name)
		return true, "Region outset by " .. amount .. " blocks"
      end,
  }
)

minetest.register_chatcommand("/inset", {
	params = "<amount> [h|v]",
	description = "inset the selection",
	privs = {worldedit=true},
	func = function(name, param)
		local find, _, amount, dir = param:find("^(%d+)[%s+]?([hv]?)$")
		
		if find == nil then
			return false, "invalid usage: " .. param
		end
		
		local pos1 = worldedit.pos1[name]
		local pos2 = worldedit.pos2[name]
		
		if pos1 == nil or pos2 == nil then
			return false, 
				"Undefined region. Region must be defined beforehand."
		end
		
		if dir == "" then
			assert(worldedit.cuboid_volumetricexpand(name, -amount))
		elseif dir == "h" then
			assert(worldedit.cuboid_linealexpand(name, 'x', 1, -amount))
			assert(worldedit.cuboid_linealexpand(name, 'x', -1, -amount))
			assert(worldedit.cuboid_linealexpand(name, 'z', 1, -amount))
			assert(worldedit.cuboid_linealexpand(name, 'z', -1, -amount))
		elseif dir == "v" then
			assert(worldedit.cuboid_linealexpand(name, 'y', 1, -amount))
			assert(worldedit.cuboid_linealexpand(name, 'y', -1, -amount))
		else
			return false, "Unknown error"
		end
		
		worldedit.marker_update(name)
		return true, "Region inset by " .. amount .. " blocks"
      end,
  }
)


minetest.register_chatcommand("/shift", {
	params = "<amount> [up|down|left|right|front|back]",
	description = "Moves the selection region. Does not move contents.",
	privs = {worldedit=true},
	func = function(name, param)
		local pos1 = worldedit.pos1[name]
		local pos2 = worldedit.pos2[name]
		local find, _, amount, direction = param:find("(%d+)%s*(%l*)")
		
		if find == nil then
			worldedit.player_notify(name, "invalid usage: " .. param)
			return
		end
		
		if pos1 == nil or pos2 == nil then
			worldedit.player_notify(name, 
			"Undefined region. Region must be defined beforehand.")
			return
		end
		
		local axis, dir
		if direction ~= "" then
			axis, dir = worldedit.translate_direction(name, direction)
		else
			axis, dir = worldedit.player_axis(name)
			worldedit.player_notify(name, "entered player_axis")
		end
		
		assert(worldedit.cuboid_shift(name, axis, amount * dir))
		worldedit.marker_update(name)
		
		return true, "region shifted by " .. amount .. " blocks"
      end,
  }
)

minetest.register_chatcommand(
  "/expand",
  {
      params = "<amount> [reverse-amount] [up|down|left|right|front|back]",
      description = "expand the selection in one or two directions at once",
      privs = {worldedit=true},
      func = function(name, param)
	local find, _, amount, arg2, arg3 = param:find("(%d+)%s*(%w*)%s*(%l*)")

	if find == nil then
	    worldedit.player_notify(name, "invalid use: " .. param)
	    return
	end

	if worldedit.pos1[name] == nil or worldedit.pos2[name] == nil then
	    worldedit.player_notify(name, 
	      "Undefined region. Region must be defined beforehand.")
	    return
	end

	
      end,
  }
)


dofile(minetest.get_modpath("worldedit_commands") .. "/cuboidapi.lua")