mirror of
https://github.com/overte-org/overte.git
synced 2025-08-07 22:30:43 +02:00
Fix play area sizing and positioning for different base avatar sizes
This commit is contained in:
parent
6ccd73ea47
commit
87ff6dd56d
1 changed files with 15 additions and 10 deletions
|
@ -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();
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue