mirror of
https://github.com/overte-org/overte.git
synced 2025-04-19 16:23:39 +02:00
Add Settings > Controls option for displaying play area
This commit is contained in:
parent
b9c6811fdc
commit
6ae206677d
4 changed files with 34 additions and 11 deletions
|
@ -104,6 +104,7 @@ MyAvatar::MyAvatar(QThread* thread) :
|
|||
_realWorldFieldOfView("realWorldFieldOfView",
|
||||
DEFAULT_REAL_WORLD_FIELD_OF_VIEW_DEGREES),
|
||||
_useAdvancedMovementControls("advancedMovementForHandControllersIsChecked", true),
|
||||
_showPlayArea("showPlayArea", true),
|
||||
_smoothOrientationTimer(std::numeric_limits<float>::max()),
|
||||
_smoothOrientationInitial(),
|
||||
_smoothOrientationTarget(),
|
||||
|
|
|
@ -122,8 +122,10 @@ class MyAvatar : public Avatar {
|
|||
* zone may disallow collisionless avatars.
|
||||
* @property {boolean} characterControllerEnabled - Synonym of <code>collisionsEnabled</code>.
|
||||
* <strong>Deprecated:</strong> Use <code>collisionsEnabled</code> instead.
|
||||
* @property {boolean} useAdvancedMovementControls - Returns the value of the Interface setting, Settings > Advanced
|
||||
* Movement for Hand Controller. Note: Setting the value has no effect unless Interface is restarted.
|
||||
* @property {boolean} useAdvancedMovementControls - Returns and sets the value of the Interface setting, Settings >
|
||||
* Walking and teleporting. Note: Setting the value has no effect unless Interface is restarted.
|
||||
* @property {boolean} showPlayArea - Returns and sets the value of the Interface setting, Settings > Show room boundaries
|
||||
* while teleporting. Note: Setting the value has no effect unless Interface is restarted.
|
||||
* @property {number} yawSpeed=75
|
||||
* @property {number} pitchSpeed=50
|
||||
* @property {boolean} hmdRollControlEnabled=true - If <code>true</code>, the roll angle of your HMD turns your avatar
|
||||
|
@ -223,6 +225,7 @@ class MyAvatar : public Avatar {
|
|||
Q_PROPERTY(bool collisionsEnabled READ getCollisionsEnabled WRITE setCollisionsEnabled)
|
||||
Q_PROPERTY(bool characterControllerEnabled READ getCharacterControllerEnabled WRITE setCharacterControllerEnabled)
|
||||
Q_PROPERTY(bool useAdvancedMovementControls READ useAdvancedMovementControls WRITE setUseAdvancedMovementControls)
|
||||
Q_PROPERTY(bool showPlayArea READ getShowPlayArea WRITE setShowPlayArea)
|
||||
|
||||
Q_PROPERTY(float yawSpeed MEMBER _yawSpeed)
|
||||
Q_PROPERTY(float pitchSpeed MEMBER _pitchSpeed)
|
||||
|
@ -542,6 +545,9 @@ public:
|
|||
void setUseAdvancedMovementControls(bool useAdvancedMovementControls)
|
||||
{ _useAdvancedMovementControls.set(useAdvancedMovementControls); }
|
||||
|
||||
bool getShowPlayArea() const { return _showPlayArea.get(); }
|
||||
void setShowPlayArea(bool showPlayArea) { _showPlayArea.set(showPlayArea); }
|
||||
|
||||
void setHMDRollControlEnabled(bool value) { _hmdRollControlEnabled = value; }
|
||||
bool getHMDRollControlEnabled() const { return _hmdRollControlEnabled; }
|
||||
void setHMDRollControlDeadZone(float value) { _hmdRollControlDeadZone = value; }
|
||||
|
@ -1628,6 +1634,7 @@ private:
|
|||
|
||||
Setting::Handle<float> _realWorldFieldOfView;
|
||||
Setting::Handle<bool> _useAdvancedMovementControls;
|
||||
Setting::Handle<bool> _showPlayArea;
|
||||
|
||||
// Smoothing.
|
||||
const float SMOOTH_TIME_ORIENTATION = 0.5f;
|
||||
|
|
|
@ -253,6 +253,12 @@ void setupPreferences() {
|
|||
preference->setItems(items);
|
||||
preferences->addPreference(preference);
|
||||
}
|
||||
{
|
||||
auto getter = [myAvatar]()->bool { return myAvatar->getShowPlayArea(); };
|
||||
auto setter = [myAvatar](bool value) { myAvatar->setShowPlayArea(value); };
|
||||
auto preference = new CheckPreference(VR_MOVEMENT, "Show room boundaries while teleporting", getter, setter);
|
||||
preferences->addPreference(preference);
|
||||
}
|
||||
{
|
||||
auto getter = [=]()->float { return myAvatar->getUserHeight(); };
|
||||
auto setter = [=](float value) { myAvatar->setUserHeight(value); };
|
||||
|
|
|
@ -164,6 +164,7 @@ Script.include("/~/system/libraries/controllers.js");
|
|||
this.playArea = { x: 0, y: 0 };
|
||||
this.playAreaCenterOffset = this.PLAY_AREA_OVERLAY_OFFSET;
|
||||
this.isPlayAreaVisible = false;
|
||||
this.wasPlayAreaVisible = false;
|
||||
this.isPlayAreaAvailable = false;
|
||||
this.targetOverlayID = null;
|
||||
this.playAreaOverlay = null;
|
||||
|
@ -453,6 +454,7 @@ Script.include("/~/system/libraries/controllers.js");
|
|||
return;
|
||||
}
|
||||
|
||||
this.wasPlayAreaVisible = this.isPlayAreaVisible;
|
||||
this.isPlayAreaVisible = visible;
|
||||
this.targetOverlayID = targetOverlayID;
|
||||
|
||||
|
@ -529,7 +531,9 @@ Script.include("/~/system/libraries/controllers.js");
|
|||
end: { dimensions: Vec3.multiply(_this.teleportScaleFactor, TARGET_MODEL_DIMENSIONS) }
|
||||
}
|
||||
);
|
||||
_this.setPlayAreaDimensions();
|
||||
if (_this.isPlayAreaVisible) {
|
||||
_this.setPlayAreaDimensions();
|
||||
}
|
||||
if (_this.teleportScaleFactor < 1) {
|
||||
_this.teleportScaleTimer = Script.setTimeout(_this.scaleInTeleport, _this.TELEPORT_SCALE_TIMEOUT);
|
||||
} else {
|
||||
|
@ -555,18 +559,22 @@ Script.include("/~/system/libraries/controllers.js");
|
|||
Overlays.editOverlay(_this.teleportedTargetOverlay, {
|
||||
alpha: _this.teleportedFadeFactor * _this.TELEPORTED_TARGET_ALPHA
|
||||
});
|
||||
Overlays.editOverlay(_this.playAreaOverlay, { alpha: _this.teleportedFadeFactor * _this.PLAY_AREA_BOX_ALPHA });
|
||||
var sensorAlpha = _this.teleportedFadeFactor * _this.PLAY_AREA_SENSOR_ALPHA;
|
||||
for (i = 0, length = _this.playAreaSensorPositionOverlays.length; i < length; i++) {
|
||||
Overlays.editOverlay(_this.playAreaSensorPositionOverlays[i], { alpha: sensorAlpha });
|
||||
if (_this.wasPlayAreaVisible) {
|
||||
Overlays.editOverlay(_this.playAreaOverlay, { alpha: _this.teleportedFadeFactor * _this.PLAY_AREA_BOX_ALPHA });
|
||||
var sensorAlpha = _this.teleportedFadeFactor * _this.PLAY_AREA_SENSOR_ALPHA;
|
||||
for (i = 0, length = _this.playAreaSensorPositionOverlays.length; i < length; i++) {
|
||||
Overlays.editOverlay(_this.playAreaSensorPositionOverlays[i], { alpha: sensorAlpha });
|
||||
}
|
||||
}
|
||||
_this.teleportedFadeTimer = Script.setTimeout(_this.fadeOutTeleport, _this.TELEPORTED_FADE_INTERVAL);
|
||||
} else {
|
||||
// Make invisible.
|
||||
Overlays.editOverlay(_this.teleportedTargetOverlay, { visible: false });
|
||||
Overlays.editOverlay(_this.playAreaOverlay, { visible: false });
|
||||
for (i = 0, length = _this.playAreaSensorPositionOverlays.length; i < length; i++) {
|
||||
Overlays.editOverlay(_this.playAreaSensorPositionOverlays[i], { visible: false });
|
||||
if (_this.wasPlayAreaVisible) {
|
||||
Overlays.editOverlay(_this.playAreaOverlay, { visible: false });
|
||||
for (i = 0, length = _this.playAreaSensorPositionOverlays.length; i < length; i++) {
|
||||
Overlays.editOverlay(_this.playAreaSensorPositionOverlays[i], { visible: false });
|
||||
}
|
||||
}
|
||||
_this.teleportedFadeTimer = null;
|
||||
}
|
||||
|
@ -795,7 +803,8 @@ Script.include("/~/system/libraries/controllers.js");
|
|||
Pointers.setRenderState(_this.teleportParabolaHandCollisions, invisibleState);
|
||||
pointerID = _this.teleportParabolaHandVisuals;
|
||||
}
|
||||
this.setPlayAreaVisible(visible, Pointers.getPointerProperties(pointerID).renderStates.teleport.end, false);
|
||||
this.setPlayAreaVisible(visible && MyAvatar.showPlayArea,
|
||||
Pointers.getPointerProperties(pointerID).renderStates.teleport.end, false);
|
||||
this.setTeleportVisible(visible, mode, false);
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue