Merge pull request #3 from Athemis/master
[MineClone.git] / mods / WorldEdit / worldedit_commands / mark.lua
blobe07e84925bcd0b18cb16f90c8b358147cabf22bc
1 worldedit.marker1 = {}
2 worldedit.marker2 = {}
3 worldedit.marker_region = {}
5 --marks worldedit region position 1
6 worldedit.mark_pos1 = function(name)
7 local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name]
9 if pos1 ~= nil then
10 --make area stay loaded
11 local manip = minetest.get_voxel_manip()
12 manip:read_from_map(pos1, pos1)
13 end
14 if worldedit.marker1[name] ~= nil then --marker already exists
15 worldedit.marker1[name]:remove() --remove marker
16 worldedit.marker1[name] = nil
17 end
18 if pos1 ~= nil then
19 --add marker
20 worldedit.marker1[name] = minetest.add_entity(pos1, "worldedit:pos1")
21 if worldedit.marker1[name] ~= nil then
22 worldedit.marker1[name]:get_luaentity().name = name
23 end
24 end
25 worldedit.mark_region(name)
26 end
28 --marks worldedit region position 2
29 worldedit.mark_pos2 = function(name)
30 local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name]
32 if pos2 ~= nil then
33 --make area stay loaded
34 local manip = minetest.get_voxel_manip()
35 manip:read_from_map(pos2, pos2)
36 end
37 if worldedit.marker2[name] ~= nil then --marker already exists
38 worldedit.marker2[name]:remove() --remove marker
39 worldedit.marker2[name] = nil
40 end
41 if pos2 ~= nil then
42 --add marker
43 worldedit.marker2[name] = minetest.add_entity(pos2, "worldedit:pos2")
44 if worldedit.marker2[name] ~= nil then
45 worldedit.marker2[name]:get_luaentity().name = name
46 end
47 end
48 worldedit.mark_region(name)
49 end
51 worldedit.mark_region = function(name)
52 local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name]
54 if worldedit.marker_region[name] ~= nil then --marker already exists
55 --wip: make the area stay loaded somehow
56 for _, entity in ipairs(worldedit.marker_region[name]) do
57 entity:remove()
58 end
59 worldedit.marker_region[name] = nil
60 end
61 if pos1 ~= nil and pos2 ~= nil then
62 local pos1, pos2 = worldedit.sort_pos(pos1, pos2)
63 local thickness = 0.2
64 local sizex, sizey, sizez = (1 + pos2.x - pos1.x) / 2, (1 + pos2.y - pos1.y) / 2, (1 + pos2.z - pos1.z) / 2
66 --make area stay loaded
67 local manip = minetest.get_voxel_manip()
68 manip:read_from_map(pos1, pos2)
70 local markers = {}
72 --XY plane markers
73 for _, z in ipairs({pos1.z - 0.5, pos2.z + 0.5}) do
74 local marker = minetest.add_entity({x=pos1.x + sizex - 0.5, y=pos1.y + sizey - 0.5, z=z}, "worldedit:region_cube")
75 marker:set_properties({
76 visual_size={x=sizex * 2, y=sizey * 2},
77 collisionbox = {-sizex, -sizey, -thickness, sizex, sizey, thickness},
79 marker:get_luaentity().name = name
80 table.insert(markers, marker)
81 end
83 --YZ plane markers
84 for _, x in ipairs({pos1.x - 0.5, pos2.x + 0.5}) do
85 local marker = minetest.add_entity({x=x, y=pos1.y + sizey - 0.5, z=pos1.z + sizez - 0.5}, "worldedit:region_cube")
86 marker:set_properties({
87 visual_size={x=sizez * 2, y=sizey * 2},
88 collisionbox = {-thickness, -sizey, -sizez, thickness, sizey, sizez},
90 marker:setyaw(math.pi / 2)
91 marker:get_luaentity().name = name
92 table.insert(markers, marker)
93 end
95 worldedit.marker_region[name] = markers
96 end
97 end
99 minetest.register_entity(":worldedit:pos1", {
100 initial_properties = {
101 visual = "cube",
102 visual_size = {x=1.1, y=1.1},
103 textures = {"worldedit_pos1.png", "worldedit_pos1.png",
104 "worldedit_pos1.png", "worldedit_pos1.png",
105 "worldedit_pos1.png", "worldedit_pos1.png"},
106 collisionbox = {-0.55, -0.55, -0.55, 0.55, 0.55, 0.55},
107 physical = false,
109 on_step = function(self, dtime)
110 if worldedit.marker1[self.name] == nil then
111 self.object:remove()
113 end,
114 on_punch = function(self, hitter)
115 self.object:remove()
116 worldedit.marker1[self.name] = nil
117 end,
120 minetest.register_entity(":worldedit:pos2", {
121 initial_properties = {
122 visual = "cube",
123 visual_size = {x=1.1, y=1.1},
124 textures = {"worldedit_pos2.png", "worldedit_pos2.png",
125 "worldedit_pos2.png", "worldedit_pos2.png",
126 "worldedit_pos2.png", "worldedit_pos2.png"},
127 collisionbox = {-0.55, -0.55, -0.55, 0.55, 0.55, 0.55},
128 physical = false,
130 on_step = function(self, dtime)
131 if worldedit.marker2[self.name] == nil then
132 self.object:remove()
134 end,
135 on_punch = function(self, hitter)
136 self.object:remove()
137 worldedit.marker2[self.name] = nil
138 end,
141 minetest.register_entity(":worldedit:region_cube", {
142 initial_properties = {
143 visual = "upright_sprite",
144 visual_size = {x=1.1, y=1.1},
145 textures = {"worldedit_cube.png"},
146 visual_size = {x=10, y=10},
147 physical = false,
149 on_step = function(self, dtime)
150 if worldedit.marker_region[self.name] == nil then
151 self.object:remove()
152 return
154 end,
155 on_punch = function(self, hitter)
156 for _, entity in ipairs(worldedit.marker_region[self.name]) do
157 entity:remove()
159 worldedit.marker_region[self.name] = nil
160 end,