Merge pull request #5611 from huffman/edit-bounds

Fix edit.js to warn when creating entities outside of positive world bounds
This commit is contained in:
Brad Hefta-Gaub 2015-08-20 11:46:18 -07:00
commit 8d256a8e9c

View file

@ -1036,7 +1036,6 @@ function handeMenuEvent(menuItem) {
// This function tries to find a reasonable position to place a new entity based on the camera // This function tries to find a reasonable position to place a new entity based on the camera
// position. If a reasonable position within the world bounds can't be found, `null` will // position. If a reasonable position within the world bounds can't be found, `null` will
// be returned. The returned position will also take into account grid snapping settings. // be returned. The returned position will also take into account grid snapping settings.
// FIXME - technically we should guard against very large positions too
function getPositionToCreateEntity() { function getPositionToCreateEntity() {
var distance = cameraManager.enabled ? cameraManager.zoomDistance : DEFAULT_ENTITY_DRAG_DROP_DISTANCE; var distance = cameraManager.enabled ? cameraManager.zoomDistance : DEFAULT_ENTITY_DRAG_DROP_DISTANCE;
var direction = Quat.getFront(Camera.orientation); var direction = Quat.getFront(Camera.orientation);
@ -1047,18 +1046,20 @@ function getPositionToCreateEntity() {
var HALF_TREE_SCALE = 16384; var HALF_TREE_SCALE = 16384;
var cameraOutOfBounds = cameraPosition.x < -HALF_TREE_SCALE || cameraPosition.y < -HALF_TREE_SCALE || var cameraOutOfBounds = Math.abs(cameraPosition.x) > HALF_TREE_SCALE
cameraPosition.z < -HALF_TREE_SCALE; || Math.abs(cameraPosition.y) > HALF_TREE_SCALE
var placementOutOfBounds = placementPosition.x < -HALF_TREE_SCALE || placementPosition.y < -HALF_TREE_SCALE || || Math.abs(cameraPosition.z) > HALF_TREE_SCALE;
placementPosition.z < -HALF_TREE_SCALE; var placementOutOfBounds = Math.abs(placementPosition.x) > HALF_TREE_SCALE
|| Math.abs(placementPosition.y) > HALF_TREE_SCALE
|| Math.abs(placementPosition.z) > HALF_TREE_SCALE;
if (cameraOutOfBounds && placementOutOfBounds) { if (cameraOutOfBounds && placementOutOfBounds) {
return null; return null;
} }
placementPosition.x = Math.max(-HALF_TREE_SCALE, placementPosition.x); placementPosition.x = Math.min(HALF_TREE_SCALE, Math.max(-HALF_TREE_SCALE, placementPosition.x));
placementPosition.y = Math.max(-HALF_TREE_SCALE, placementPosition.y); placementPosition.y = Math.min(HALF_TREE_SCALE, Math.max(-HALF_TREE_SCALE, placementPosition.y));
placementPosition.z = Math.max(-HALF_TREE_SCALE, placementPosition.z); placementPosition.z = Math.min(HALF_TREE_SCALE, Math.max(-HALF_TREE_SCALE, placementPosition.z));
return placementPosition; return placementPosition;
} }