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