mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-05-07 09:33:51 +00:00
fix(objects): NaN guards on transform deltas
A NaN move/rotate/scale delta would poison every selected object's transform permanently and produce NaN model matrices in the renderer. Reject upfront.
This commit is contained in:
parent
2c5710b910
commit
5366c53734
1 changed files with 7 additions and 0 deletions
|
|
@ -134,6 +134,10 @@ void ObjectPlacer::selectByType(PlaceableType type) {
|
|||
}
|
||||
|
||||
void ObjectPlacer::moveSelected(const glm::vec3& delta) {
|
||||
// NaN delta would poison every selected position permanently —
|
||||
// the renderer would then produce NaN model matrices.
|
||||
if (!std::isfinite(delta.x) || !std::isfinite(delta.y) ||
|
||||
!std::isfinite(delta.z)) return;
|
||||
if (selectedIndices_.size() > 1) {
|
||||
for (int idx : selectedIndices_) objects_[idx].position += delta;
|
||||
} else if (auto* obj = getSelected()) {
|
||||
|
|
@ -142,6 +146,8 @@ void ObjectPlacer::moveSelected(const glm::vec3& delta) {
|
|||
}
|
||||
|
||||
void ObjectPlacer::rotateSelected(const glm::vec3& deltaDeg) {
|
||||
if (!std::isfinite(deltaDeg.x) || !std::isfinite(deltaDeg.y) ||
|
||||
!std::isfinite(deltaDeg.z)) return;
|
||||
if (selectedIndices_.size() > 1) {
|
||||
for (int idx : selectedIndices_) objects_[idx].rotation += deltaDeg;
|
||||
} else if (auto* obj = getSelected()) {
|
||||
|
|
@ -150,6 +156,7 @@ void ObjectPlacer::rotateSelected(const glm::vec3& deltaDeg) {
|
|||
}
|
||||
|
||||
void ObjectPlacer::scaleSelected(float delta) {
|
||||
if (!std::isfinite(delta)) return;
|
||||
if (selectedIndices_.size() > 1) {
|
||||
for (int idx : selectedIndices_)
|
||||
objects_[idx].scale = std::max(0.1f, objects_[idx].scale + delta);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue