mirror of
https://github.com/luanti-org/luanti.git
synced 2025-07-22 17:18:39 +00:00
Allow rotating entity selectionboxes (#12379)
This commit is contained in:
parent
b829231992
commit
077627181e
18 changed files with 271 additions and 58 deletions
|
@ -1771,16 +1771,27 @@ void ServerEnvironment::getSelectedActiveObjects(
|
|||
continue;
|
||||
|
||||
v3f pos = obj->getBasePosition();
|
||||
|
||||
aabb3f offsetted_box(selection_box.MinEdge + pos,
|
||||
selection_box.MaxEdge + pos);
|
||||
v3f rel_pos = shootline_on_map.start - pos;
|
||||
|
||||
v3f current_intersection;
|
||||
v3s16 current_normal;
|
||||
if (boxLineCollision(offsetted_box, shootline_on_map.start, line_vector,
|
||||
¤t_intersection, ¤t_normal)) {
|
||||
v3f current_normal;
|
||||
v3f current_raw_normal;
|
||||
|
||||
ObjectProperties *props = obj->accessObjectProperties();
|
||||
bool collision;
|
||||
UnitSAO* usao = dynamic_cast<UnitSAO*>(obj);
|
||||
if (props->rotate_selectionbox && usao != nullptr) {
|
||||
collision = boxLineCollision(selection_box, usao->getTotalRotation(),
|
||||
rel_pos, line_vector, ¤t_intersection, ¤t_normal, ¤t_raw_normal);
|
||||
} else {
|
||||
collision = boxLineCollision(selection_box, rel_pos, line_vector,
|
||||
¤t_intersection, ¤t_normal);
|
||||
current_raw_normal = current_normal;
|
||||
}
|
||||
if (collision) {
|
||||
current_intersection += pos;
|
||||
objects.emplace_back(
|
||||
(s16) obj->getId(), current_intersection, current_normal,
|
||||
(s16) obj->getId(), current_intersection, current_normal, current_raw_normal,
|
||||
(current_intersection - shootline_on_map.start).getLengthSQ());
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue