Fix play area sizing and positioning for different base avatar sizes

This commit is contained in:
David Rowe 2018-10-02 10:53:31 +13:00
parent 6ccd73ea47
commit 87ff6dd56d

View file

@ -192,7 +192,7 @@ Script.include("/~/system/libraries/controllers.js");
this.teleportedTargetOverlay = null; this.teleportedTargetOverlay = null;
this.setPlayAreaDimensions = function () { this.setPlayAreaDimensions = function () {
var avatarScale = MyAvatar.scale; var avatarScale = MyAvatar.sensorToWorldScale;
var playAreaOverlayProperties = { var playAreaOverlayProperties = {
dimensions: dimensions:
@ -217,7 +217,7 @@ Script.include("/~/system/libraries/controllers.js");
Vec3.sum(this.playAreaCenterOffset, { x: 0, y: -TARGET_MODEL_DIMENSIONS.y / 2, z: 0 }); Vec3.sum(this.playAreaCenterOffset, { x: 0, y: -TARGET_MODEL_DIMENSIONS.y / 2, z: 0 });
var localPosition = Vec3.multiplyQbyV(Quat.inverse(targetRotation), var localPosition = Vec3.multiplyQbyV(Quat.inverse(targetRotation),
Vec3.multiplyQbyV(sensorToWorldRotation, Vec3.multiplyQbyV(sensorToWorldRotation,
Vec3.multiply(MyAvatar.scale, Vec3.subtract(relativePlayAreaCenterOffset, avatarSensorPosition)))); Vec3.multiply(avatarScale, Vec3.subtract(relativePlayAreaCenterOffset, avatarSensorPosition))));
localPosition.y = this.teleportScaleFactor * localPosition.y; localPosition.y = this.teleportScaleFactor * localPosition.y;
playAreaOverlayProperties.parentID = this.targetOverlayID; playAreaOverlayProperties.parentID = this.targetOverlayID;
@ -500,7 +500,8 @@ Script.include("/~/system/libraries/controllers.js");
parentID: Uuid.NULL, parentID: Uuid.NULL,
position: Vec3.sum(position, position: Vec3.sum(position,
Vec3.multiplyQbyV(sensorToWorldRotation, Vec3.multiplyQbyV(sensorToWorldRotation,
Vec3.multiply(MyAvatar.scale, Vec3.subtract(this.playAreaCenterOffset, avatarSensorPosition)))), Vec3.multiply(MyAvatar.sensorToWorldScale,
Vec3.subtract(this.playAreaCenterOffset, avatarSensorPosition)))),
rotation: sensorToWorldRotation rotation: sensorToWorldRotation
}); });
} else { } else {
@ -514,7 +515,8 @@ Script.include("/~/system/libraries/controllers.js");
parentID: this.targetOverlayID, parentID: this.targetOverlayID,
localPosition: Vec3.multiplyQbyV(Quat.inverse(targetRotation), localPosition: Vec3.multiplyQbyV(Quat.inverse(targetRotation),
Vec3.multiplyQbyV(sensorToWorldRotation, Vec3.multiplyQbyV(sensorToWorldRotation,
Vec3.multiply(MyAvatar.scale, Vec3.subtract(relativePlayAreaCenterOffset, avatarSensorPosition)))), Vec3.multiply(MyAvatar.sensorToWorldScale,
Vec3.subtract(relativePlayAreaCenterOffset, avatarSensorPosition)))),
localRotation: sensorToTargetRotation localRotation: sensorToTargetRotation
}); });
} }
@ -560,7 +562,9 @@ Script.include("/~/system/libraries/controllers.js");
alpha: _this.teleportedFadeFactor * _this.TELEPORTED_TARGET_ALPHA alpha: _this.teleportedFadeFactor * _this.TELEPORTED_TARGET_ALPHA
}); });
if (_this.wasPlayAreaVisible) { if (_this.wasPlayAreaVisible) {
Overlays.editOverlay(_this.playAreaOverlay, { alpha: _this.teleportedFadeFactor * _this.PLAY_AREA_BOX_ALPHA }); Overlays.editOverlay(_this.playAreaOverlay, {
alpha: _this.teleportedFadeFactor * _this.PLAY_AREA_BOX_ALPHA
});
var sensorAlpha = _this.teleportedFadeFactor * _this.PLAY_AREA_SENSOR_ALPHA; var sensorAlpha = _this.teleportedFadeFactor * _this.PLAY_AREA_SENSOR_ALPHA;
for (i = 0, length = _this.playAreaSensorPositionOverlays.length; i < length; i++) { for (i = 0, length = _this.playAreaSensorPositionOverlays.length; i < length; i++) {
Overlays.editOverlay(_this.playAreaSensorPositionOverlays[i], { alpha: sensorAlpha }); Overlays.editOverlay(_this.playAreaSensorPositionOverlays[i], { alpha: sensorAlpha });
@ -623,14 +627,15 @@ Script.include("/~/system/libraries/controllers.js");
if (fade) { if (fade) {
// Copy of target at teleported position for fading. // Copy of target at teleported position for fading.
var avatarScale = MyAvatar.sensorToWorldScale;
Overlays.editOverlay(this.teleportedTargetOverlay, { Overlays.editOverlay(this.teleportedTargetOverlay, {
position: Vec3.sum(this.teleportedPosition, { position: Vec3.sum(this.teleportedPosition, {
x: 0, x: 0,
y: -getAvatarFootOffset() + MyAvatar.scale * TARGET_MODEL_DIMENSIONS.y / 2, y: -getAvatarFootOffset() + avatarScale * TARGET_MODEL_DIMENSIONS.y / 2,
z: 0 z: 0
}), }),
rotation: Quat.multiply(this.TELEPORTED_TARGET_ROTATION, MyAvatar.orientation), rotation: Quat.multiply(this.TELEPORTED_TARGET_ROTATION, MyAvatar.orientation),
dimensions: Vec3.multiply(MyAvatar.scale, TARGET_MODEL_DIMENSIONS), dimensions: Vec3.multiply(avatarScale, TARGET_MODEL_DIMENSIONS),
alpha: this.TELEPORTED_TARGET_ALPHA, alpha: this.TELEPORTED_TARGET_ALPHA,
visible: true visible: true
}); });
@ -862,12 +867,12 @@ Script.include("/~/system/libraries/controllers.js");
var footPos = MyAvatar.getAbsoluteDefaultJointTranslationInObjectFrame(footJointIndex); var footPos = MyAvatar.getAbsoluteDefaultJointTranslationInObjectFrame(footJointIndex);
if (footPos.x === 0 && footPos.y === 0 && footPos.z === 0.0) { if (footPos.x === 0 && footPos.y === 0 && footPos.z === 0.0) {
// if footPos is exactly zero, it's probably wrong because avatar is currently loading, fall back to default. // if footPos is exactly zero, it's probably wrong because avatar is currently loading, fall back to default.
return DEFAULT_ROOT_TO_FOOT_OFFSET * MyAvatar.scale; return DEFAULT_ROOT_TO_FOOT_OFFSET * MyAvatar.sensorToWorldScale;
} else { } else {
return -footPos.y; return -footPos.y;
} }
} else { } else {
return DEFAULT_ROOT_TO_FOOT_OFFSET * MyAvatar.scale; return DEFAULT_ROOT_TO_FOOT_OFFSET * MyAvatar.sensorToWorldScale;
} }
} }
@ -1046,7 +1051,7 @@ Script.include("/~/system/libraries/controllers.js");
Messages.subscribe('Hifi-Teleport-Ignore-Remove'); Messages.subscribe('Hifi-Teleport-Ignore-Remove');
Messages.messageReceived.connect(handleTeleportMessages); Messages.messageReceived.connect(handleTeleportMessages);
MyAvatar.scaleChanged.connect(function () { MyAvatar.sensorToWorldScaleChanged.connect(function () {
leftTeleporter.updatePlayAreaScale(); leftTeleporter.updatePlayAreaScale();
rightTeleporter.updatePlayAreaScale(); rightTeleporter.updatePlayAreaScale();
}); });