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
]
10 --make area stay loaded
11 local manip
= minetest
.get_voxel_manip()
12 manip
:read_from_map(pos1
, pos1
)
14 if worldedit
.marker1
[name
] ~= nil then --marker already exists
15 worldedit
.marker1
[name
]:remove() --remove marker
16 worldedit
.marker1
[name
] = nil
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
25 worldedit
.mark_region(name
)
28 --marks worldedit region position 2
29 worldedit
.mark_pos2
= function(name
)
30 local pos1
, pos2
= worldedit
.pos1
[name
], worldedit
.pos2
[name
]
33 --make area stay loaded
34 local manip
= minetest
.get_voxel_manip()
35 manip
:read_from_map(pos2
, pos2
)
37 if worldedit
.marker2
[name
] ~= nil then --marker already exists
38 worldedit
.marker2
[name
]:remove() --remove marker
39 worldedit
.marker2
[name
] = nil
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
48 worldedit
.mark_region(name
)
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
59 worldedit
.marker_region
[name
] = nil
61 if pos1
~= nil and pos2
~= nil then
62 local pos1
, pos2
= worldedit
.sort_pos(pos1
, pos2
)
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
)
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
)
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
)
95 worldedit
.marker_region
[name
] = markers
99 minetest
.register_entity(":worldedit:pos1", {
100 initial_properties
= {
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},
109 on_step
= function(self
, dtime
)
110 if worldedit
.marker1
[self
.name
] == nil then
114 on_punch
= function(self
, hitter
)
116 worldedit
.marker1
[self
.name
] = nil
120 minetest
.register_entity(":worldedit:pos2", {
121 initial_properties
= {
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},
130 on_step
= function(self
, dtime
)
131 if worldedit
.marker2
[self
.name
] == nil then
135 on_punch
= function(self
, hitter
)
137 worldedit
.marker2
[self
.name
] = nil
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},
149 on_step
= function(self
, dtime
)
150 if worldedit
.marker_region
[self
.name
] == nil then
155 on_punch
= function(self
, hitter
)
156 for _
, entity
in ipairs(worldedit
.marker_region
[self
.name
]) do
159 worldedit
.marker_region
[self
.name
] = nil