Lasers and teleport scale with avatar

This commit is contained in:
luiscuenca 2017-11-07 16:57:55 -07:00
parent d5eb670819
commit 332cb48a41
18 changed files with 59 additions and 18 deletions

View file

@ -7,7 +7,7 @@
// //
// Distributed under the Apache License, Version 2.0. // Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
// ////
#include "LaserPointer.h" #include "LaserPointer.h"
#include "Application.h" #include "Application.h"
@ -15,7 +15,7 @@
#include "RayPickScriptingInterface.h" #include "RayPickScriptingInterface.h"
LaserPointer::LaserPointer(const QVariant& rayProps, const RenderStateMap& renderStates, const DefaultRenderStateMap& defaultRenderStates, LaserPointer::LaserPointer(const QVariant& rayProps, const RenderStateMap& renderStates, const DefaultRenderStateMap& defaultRenderStates,
const bool faceAvatar, const bool centerEndY, const bool lockEnd, const bool distanceScaleEnd, const bool enabled) : const bool faceAvatar, const bool centerEndY, const bool lockEnd, const bool distanceScaleEnd, const bool scaleWithAvatar, const bool enabled) :
_renderingEnabled(enabled), _renderingEnabled(enabled),
_renderStates(renderStates), _renderStates(renderStates),
_defaultRenderStates(defaultRenderStates), _defaultRenderStates(defaultRenderStates),
@ -23,6 +23,7 @@ LaserPointer::LaserPointer(const QVariant& rayProps, const RenderStateMap& rende
_centerEndY(centerEndY), _centerEndY(centerEndY),
_lockEnd(lockEnd), _lockEnd(lockEnd),
_distanceScaleEnd(distanceScaleEnd), _distanceScaleEnd(distanceScaleEnd),
_scaleWithAvatar(scaleWithAvatar),
_rayPickUID(DependencyManager::get<RayPickScriptingInterface>()->createRayPick(rayProps)) _rayPickUID(DependencyManager::get<RayPickScriptingInterface>()->createRayPick(rayProps))
{ {
@ -151,6 +152,9 @@ void LaserPointer::updateRenderState(const RenderState& renderState, const Inter
} }
} }
} }
float avatarScale = DependencyManager::get<AvatarManager>()->getMyAvatar()->getAvatarScale();
QVariant end = vec3toVariant(endVec); QVariant end = vec3toVariant(endVec);
if (!renderState.getPathID().isNull()) { if (!renderState.getPathID().isNull()) {
QVariantMap pathProps; QVariantMap pathProps;
@ -158,6 +162,11 @@ void LaserPointer::updateRenderState(const RenderState& renderState, const Inter
pathProps.insert("end", end); pathProps.insert("end", end);
pathProps.insert("visible", true); pathProps.insert("visible", true);
pathProps.insert("ignoreRayIntersection", renderState.doesPathIgnoreRays()); pathProps.insert("ignoreRayIntersection", renderState.doesPathIgnoreRays());
if (_scaleWithAvatar) {
auto glowScaleProp = qApp->getOverlays().getProperty(renderState.getPathID(), "glowScale").value;
float glowScale = glowScaleProp.isValid() ? avatarScale * glowScaleProp.toFloat() : avatarScale;
pathProps.insert("glowScale", glowScale);
}
qApp->getOverlays().editOverlay(renderState.getPathID(), pathProps); qApp->getOverlays().editOverlay(renderState.getPathID(), pathProps);
} }
if (!renderState.getEndID().isNull()) { if (!renderState.getEndID().isNull()) {
@ -165,7 +174,7 @@ void LaserPointer::updateRenderState(const RenderState& renderState, const Inter
glm::quat faceAvatarRotation = DependencyManager::get<AvatarManager>()->getMyAvatar()->getOrientation() * glm::quat(glm::radians(glm::vec3(0.0f, 180.0f, 0.0f))); glm::quat faceAvatarRotation = DependencyManager::get<AvatarManager>()->getMyAvatar()->getOrientation() * glm::quat(glm::radians(glm::vec3(0.0f, 180.0f, 0.0f)));
glm::vec3 dim = vec3FromVariant(qApp->getOverlays().getProperty(renderState.getEndID(), "dimensions").value); glm::vec3 dim = vec3FromVariant(qApp->getOverlays().getProperty(renderState.getEndID(), "dimensions").value);
if (_distanceScaleEnd) { if (_distanceScaleEnd) {
dim = renderState.getEndDim() * glm::distance(pickRay.origin, endVec) * DependencyManager::get<AvatarManager>()->getMyAvatar()->getSensorToWorldScale(); dim = renderState.getEndDim() * glm::distance(pickRay.origin, endVec);
endProps.insert("dimensions", vec3toVariant(dim)); endProps.insert("dimensions", vec3toVariant(dim));
} }
if (_centerEndY) { if (_centerEndY) {
@ -211,6 +220,7 @@ void LaserPointer::update() {
if (_renderingEnabled && !_currentRenderState.empty() && _renderStates.find(_currentRenderState) != _renderStates.end() && if (_renderingEnabled && !_currentRenderState.empty() && _renderStates.find(_currentRenderState) != _renderStates.end() &&
(prevRayPickResult.type != IntersectionType::NONE || _laserLength > 0.0f || !_objectLockEnd.first.isNull())) { (prevRayPickResult.type != IntersectionType::NONE || _laserLength > 0.0f || !_objectLockEnd.first.isNull())) {
float distance = _laserLength > 0.0f ? _laserLength : prevRayPickResult.distance; float distance = _laserLength > 0.0f ? _laserLength : prevRayPickResult.distance;
qDebug() << &_currentRenderState;
updateRenderState(_renderStates[_currentRenderState], prevRayPickResult.type, distance, prevRayPickResult.objectID, prevRayPickResult.searchRay, false); updateRenderState(_renderStates[_currentRenderState], prevRayPickResult.type, distance, prevRayPickResult.objectID, prevRayPickResult.searchRay, false);
disableRenderState(_defaultRenderStates[_currentRenderState].second); disableRenderState(_defaultRenderStates[_currentRenderState].second);
} else if (_renderingEnabled && !_currentRenderState.empty() && _defaultRenderStates.find(_currentRenderState) != _defaultRenderStates.end()) { } else if (_renderingEnabled && !_currentRenderState.empty() && _defaultRenderStates.find(_currentRenderState) != _defaultRenderStates.end()) {

View file

@ -60,7 +60,7 @@ public:
typedef std::unordered_map<std::string, std::pair<float, RenderState>> DefaultRenderStateMap; typedef std::unordered_map<std::string, std::pair<float, RenderState>> DefaultRenderStateMap;
LaserPointer(const QVariant& rayProps, const RenderStateMap& renderStates, const DefaultRenderStateMap& defaultRenderStates, LaserPointer(const QVariant& rayProps, const RenderStateMap& renderStates, const DefaultRenderStateMap& defaultRenderStates,
const bool faceAvatar, const bool centerEndY, const bool lockEnd, const bool distanceScaleEnd, const bool enabled); const bool faceAvatar, const bool centerEndY, const bool lockEnd, const bool distanceScaleEnd, const bool scaleWithAvatar, const bool enabled);
~LaserPointer(); ~LaserPointer();
QUuid getRayUID() { return _rayPickUID; } QUuid getRayUID() { return _rayPickUID; }
@ -91,6 +91,7 @@ private:
bool _centerEndY; bool _centerEndY;
bool _lockEnd; bool _lockEnd;
bool _distanceScaleEnd; bool _distanceScaleEnd;
bool _scaleWithAvatar;
std::pair<QUuid, bool> _objectLockEnd { std::pair<QUuid, bool>(QUuid(), false)}; std::pair<QUuid, bool> _objectLockEnd { std::pair<QUuid, bool>(QUuid(), false)};
const QUuid _rayPickUID; const QUuid _rayPickUID;

View file

@ -11,9 +11,9 @@
#include "LaserPointerManager.h" #include "LaserPointerManager.h"
QUuid LaserPointerManager::createLaserPointer(const QVariant& rayProps, const LaserPointer::RenderStateMap& renderStates, const LaserPointer::DefaultRenderStateMap& defaultRenderStates, QUuid LaserPointerManager::createLaserPointer(const QVariant& rayProps, const LaserPointer::RenderStateMap& renderStates, const LaserPointer::DefaultRenderStateMap& defaultRenderStates,
const bool faceAvatar, const bool centerEndY, const bool lockEnd, const bool distanceScaleEnd, const bool enabled) { const bool faceAvatar, const bool centerEndY, const bool lockEnd, const bool distanceScaleEnd, const bool scaleWithAvatar, const bool enabled) {
QUuid result; QUuid result;
std::shared_ptr<LaserPointer> laserPointer = std::make_shared<LaserPointer>(rayProps, renderStates, defaultRenderStates, faceAvatar, centerEndY, lockEnd, distanceScaleEnd, enabled); std::shared_ptr<LaserPointer> laserPointer = std::make_shared<LaserPointer>(rayProps, renderStates, defaultRenderStates, faceAvatar, centerEndY, lockEnd, distanceScaleEnd, scaleWithAvatar, enabled);
if (!laserPointer->getRayUID().isNull()) { if (!laserPointer->getRayUID().isNull()) {
result = QUuid::createUuid(); result = QUuid::createUuid();
withWriteLock([&] { _laserPointers[result] = laserPointer; }); withWriteLock([&] { _laserPointers[result] = laserPointer; });

View file

@ -25,7 +25,7 @@ class LaserPointerManager : protected ReadWriteLockable {
public: public:
QUuid createLaserPointer(const QVariant& rayProps, const LaserPointer::RenderStateMap& renderStates, const LaserPointer::DefaultRenderStateMap& defaultRenderStates, QUuid createLaserPointer(const QVariant& rayProps, const LaserPointer::RenderStateMap& renderStates, const LaserPointer::DefaultRenderStateMap& defaultRenderStates,
const bool faceAvatar, const bool centerEndY, const bool lockEnd, const bool distanceScaleEnd, const bool enabled); const bool faceAvatar, const bool centerEndY, const bool lockEnd, const bool distanceScaleEnd, const bool scaleWithAvatar, const bool enabled);
void removeLaserPointer(const QUuid& uid); void removeLaserPointer(const QUuid& uid);
void enableLaserPointer(const QUuid& uid) const; void enableLaserPointer(const QUuid& uid) const;

View file

@ -7,7 +7,7 @@
// //
// Distributed under the Apache License, Version 2.0. // Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
// ////
#include "LaserPointerScriptingInterface.h" #include "LaserPointerScriptingInterface.h"
@ -51,6 +51,11 @@ QUuid LaserPointerScriptingInterface::createLaserPointer(const QVariant& propert
enabled = propertyMap["enabled"].toBool(); enabled = propertyMap["enabled"].toBool();
} }
bool scaleWithAvatar = false;
if (propertyMap["scaleWithAvatar"].isValid()) {
scaleWithAvatar = propertyMap["scaleWithAvatar"].toBool();
}
LaserPointer::RenderStateMap renderStates; LaserPointer::RenderStateMap renderStates;
if (propertyMap["renderStates"].isValid()) { if (propertyMap["renderStates"].isValid()) {
QList<QVariant> renderStateVariants = propertyMap["renderStates"].toList(); QList<QVariant> renderStateVariants = propertyMap["renderStates"].toList();
@ -80,7 +85,7 @@ QUuid LaserPointerScriptingInterface::createLaserPointer(const QVariant& propert
} }
} }
return qApp->getLaserPointerManager().createLaserPointer(properties, renderStates, defaultRenderStates, faceAvatar, centerEndY, lockEnd, distanceScaleEnd, enabled); return qApp->getLaserPointerManager().createLaserPointer(properties, renderStates, defaultRenderStates, faceAvatar, centerEndY, lockEnd, distanceScaleEnd, scaleWithAvatar, enabled);
} }
void LaserPointerScriptingInterface::editRenderState(const QUuid& uid, const QString& renderState, const QVariant& properties) const { void LaserPointerScriptingInterface::editRenderState(const QUuid& uid, const QString& renderState, const QVariant& properties) const {

View file

@ -12,6 +12,7 @@
#include <GeometryCache.h> #include <GeometryCache.h>
#include <RegisteredMetaTypes.h> #include <RegisteredMetaTypes.h>
#include <Application.h>
#include "AbstractViewStateInterface.h" #include "AbstractViewStateInterface.h"
@ -35,6 +36,7 @@ Line3DOverlay::Line3DOverlay(const Line3DOverlay* line3DOverlay) :
_endParentJointIndex = line3DOverlay->getEndJointIndex(); _endParentJointIndex = line3DOverlay->getEndJointIndex();
_glow = line3DOverlay->getGlow(); _glow = line3DOverlay->getGlow();
_glowWidth = line3DOverlay->getGlowWidth(); _glowWidth = line3DOverlay->getGlowWidth();
_glowScale = line3DOverlay->getGlowScale();
} }
Line3DOverlay::~Line3DOverlay() { Line3DOverlay::~Line3DOverlay() {
@ -145,7 +147,7 @@ void Line3DOverlay::render(RenderArgs* args) {
geometryCache->renderDashedLine(*batch, start, end, colorv4, _geometryCacheID); geometryCache->renderDashedLine(*batch, start, end, colorv4, _geometryCacheID);
} else { } else {
// renderGlowLine handles both glow = 0 and glow > 0 cases // renderGlowLine handles both glow = 0 and glow > 0 cases
geometryCache->renderGlowLine(*batch, start, end, colorv4, _glow, _glowWidth, _geometryCacheID); geometryCache->renderGlowLine(*batch, start, end, colorv4, _glow, _glowWidth, _glowScale, _geometryCacheID);
} }
} }
} }
@ -244,6 +246,12 @@ void Line3DOverlay::setProperties(const QVariantMap& originalProperties) {
setGlowWidth(glowWidth.toFloat()); setGlowWidth(glowWidth.toFloat());
} }
auto glowScale = properties["glowScale"];
if (glowScale.isValid()) {
float gscale = glowScale.toFloat();
setGlowScale(gscale);
}
} }
QVariant Line3DOverlay::getProperty(const QString& property) { QVariant Line3DOverlay::getProperty(const QString& property) {

View file

@ -33,6 +33,7 @@ public:
glm::vec3 getEnd() const; glm::vec3 getEnd() const;
const float& getGlow() const { return _glow; } const float& getGlow() const { return _glow; }
const float& getGlowWidth() const { return _glowWidth; } const float& getGlowWidth() const { return _glowWidth; }
const float& getGlowScale() const { return _glowScale; }
// setters // setters
void setStart(const glm::vec3& start); void setStart(const glm::vec3& start);
@ -43,6 +44,7 @@ public:
void setGlow(const float& glow) { _glow = glow; } void setGlow(const float& glow) { _glow = glow; }
void setGlowWidth(const float& glowWidth) { _glowWidth = glowWidth; } void setGlowWidth(const float& glowWidth) { _glowWidth = glowWidth; }
void setGlowScale(const float& glowScale) { _glowScale = glowScale; }
void setProperties(const QVariantMap& properties) override; void setProperties(const QVariantMap& properties) override;
QVariant getProperty(const QString& property) override; QVariant getProperty(const QString& property) override;
@ -72,6 +74,7 @@ private:
float _glow { 0.0 }; float _glow { 0.0 };
float _glowWidth { 0.0 }; float _glowWidth { 0.0 };
float _glowScale{ 1.0 };
int _geometryCacheID; int _geometryCacheID;
}; };

View file

@ -1868,7 +1868,7 @@ void GeometryCache::renderLine(gpu::Batch& batch, const glm::vec2& p1, const glm
void GeometryCache::renderGlowLine(gpu::Batch& batch, const glm::vec3& p1, const glm::vec3& p2, void GeometryCache::renderGlowLine(gpu::Batch& batch, const glm::vec3& p1, const glm::vec3& p2,
const glm::vec4& color, float glowIntensity, float glowWidth, int id) { const glm::vec4& color, float glowIntensity, float glowWidth, float glowScale, int id) {
// Disable glow lines on OSX // Disable glow lines on OSX
#ifndef Q_OS_WIN #ifndef Q_OS_WIN
@ -1931,9 +1931,10 @@ void GeometryCache::renderGlowLine(gpu::Batch& batch, const glm::vec3& p1, const
vec4 p1; vec4 p1;
vec4 p2; vec4 p2;
vec4 color; vec4 color;
float scale;
}; };
LineData lineData { vec4(p1, 1.0f), vec4(p2, 1.0f), color }; LineData lineData { vec4(p1, 1.0f), vec4(p2, 1.0f), color, glowScale };
details.uniformBuffer->resize(sizeof(LineData)); details.uniformBuffer->resize(sizeof(LineData));
details.uniformBuffer->setSubData(0, lineData); details.uniformBuffer->setSubData(0, lineData);
} }

View file

@ -248,7 +248,7 @@ public:
renderWireCubeInstance(args, batch, glm::vec4(color, 1.0f), pipeline); renderWireCubeInstance(args, batch, glm::vec4(color, 1.0f), pipeline);
} }
// Dynamic geometry // //Dynamic geometry
void renderShape(gpu::Batch& batch, Shape shape); void renderShape(gpu::Batch& batch, Shape shape);
void renderWireShape(gpu::Batch& batch, Shape shape); void renderWireShape(gpu::Batch& batch, Shape shape);
size_t getShapeTriangleCount(Shape shape); size_t getShapeTriangleCount(Shape shape);
@ -314,10 +314,10 @@ public:
const glm::vec4& color1, const glm::vec4& color2, int id); const glm::vec4& color1, const glm::vec4& color2, int id);
void renderGlowLine(gpu::Batch& batch, const glm::vec3& p1, const glm::vec3& p2, void renderGlowLine(gpu::Batch& batch, const glm::vec3& p1, const glm::vec3& p2,
const glm::vec4& color, float glowIntensity, float glowWidth, int id); const glm::vec4& color, float glowIntensity, float glowWidth, float glowScale, int id);
void renderGlowLine(gpu::Batch& batch, const glm::vec3& p1, const glm::vec3& p2, const glm::vec4& color, int id) void renderGlowLine(gpu::Batch& batch, const glm::vec3& p1, const glm::vec3& p2, const glm::vec4& color, int id)
{ renderGlowLine(batch, p1, p2, color, 1.0f, 0.05f, id); } { renderGlowLine(batch, p1, p2, color, 1.0f, 0.05f, 1.0f, id); }
void renderDashedLine(gpu::Batch& batch, const glm::vec3& start, const glm::vec3& end, const glm::vec4& color, int id) void renderDashedLine(gpu::Batch& batch, const glm::vec3& start, const glm::vec3& end, const glm::vec4& color, int id)
{ renderDashedLine(batch, start, end, color, 0.05f, 0.025f, id); } { renderDashedLine(batch, start, end, color, 0.05f, 0.025f, id); }

View file

@ -10,8 +10,9 @@
// //
in vec4 _color; in vec4 _color;
in float distanceFromCenter; in float _scale;
in float distanceFromCenter;
out vec4 _fragColor; out vec4 _fragColor;
void main(void) { void main(void) {
@ -21,7 +22,7 @@ void main(void) {
float alpha = 1.0 - abs(distanceFromCenter); float alpha = 1.0 - abs(distanceFromCenter);
// Convert from a linear alpha curve to a sharp peaked one // Convert from a linear alpha curve to a sharp peaked one
alpha = _color.a * pow(alpha, 10.0); alpha = _color.a * pow(alpha, 10.0/_scale);
// Drop everything where the curve falls off to nearly nothing // Drop everything where the curve falls off to nearly nothing
if (alpha <= 0.05) { if (alpha <= 0.05) {

View file

@ -16,14 +16,17 @@ layout(std140) uniform lineData {
vec4 p1; vec4 p1;
vec4 p2; vec4 p2;
vec4 color; vec4 color;
float scale;
}; };
out vec4 _color; out vec4 _color;
out float _scale;
// the distance from the center in 'quad space' // the distance from the center in 'quad space'
out float distanceFromCenter; out float distanceFromCenter;
void main(void) { void main(void) {
_color = color; _color = color;
_scale = scale;
TransformCamera cam = getTransformCamera(); TransformCamera cam = getTransformCamera();
TransformObject obj = getTransformObject(); TransformObject obj = getTransformObject();

View file

@ -584,6 +584,7 @@ Script.include("/~/system/libraries/controllers.js");
renderStates: renderStates, renderStates: renderStates,
faceAvatar: true, faceAvatar: true,
distanceScaleEnd: true, distanceScaleEnd: true,
scaleWithAvatar: true,
defaultRenderStates: defaultRenderStates defaultRenderStates: defaultRenderStates
}); });
} }

View file

@ -190,6 +190,7 @@ Script.include("/~/system/libraries/controllers.js");
renderStates: renderStates, renderStates: renderStates,
faceAvatar: true, faceAvatar: true,
distanceScaleEnd: true, distanceScaleEnd: true,
scaleWithAvatar: true,
defaultRenderStates: defaultRenderStates defaultRenderStates: defaultRenderStates
}); });

View file

@ -237,6 +237,7 @@ Script.include("/~/system/libraries/utils.js");
posOffset: getGrabPointSphereOffset(this.handToController(), true), posOffset: getGrabPointSphereOffset(this.handToController(), true),
renderStates: renderStates, renderStates: renderStates,
faceAvatar: true, faceAvatar: true,
scaleWithAvatar: true,
defaultRenderStates: defaultRenderStates defaultRenderStates: defaultRenderStates
}); });

View file

@ -371,6 +371,7 @@ Script.include("/~/system/libraries/controllers.js");
posOffset: getGrabPointSphereOffset(this.handToController(), true), posOffset: getGrabPointSphereOffset(this.handToController(), true),
renderStates: renderStates, renderStates: renderStates,
faceAvatar: true, faceAvatar: true,
scaleWithAvatar: true,
defaultRenderStates: defaultRenderStates defaultRenderStates: defaultRenderStates
}); });

View file

@ -153,6 +153,7 @@ Script.include("/~/system/libraries/controllers.js");
joint: (_this.hand === RIGHT_HAND) ? "RightHand" : "LeftHand", joint: (_this.hand === RIGHT_HAND) ? "RightHand" : "LeftHand",
filter: RayPick.PICK_ENTITIES, filter: RayPick.PICK_ENTITIES,
faceAvatar: true, faceAvatar: true,
scaleWithAvatar: true,
centerEndY: false, centerEndY: false,
renderStates: teleportRenderStates, renderStates: teleportRenderStates,
defaultRenderStates: teleportDefaultRenderStates defaultRenderStates: teleportDefaultRenderStates
@ -161,6 +162,7 @@ Script.include("/~/system/libraries/controllers.js");
joint: (_this.hand === RIGHT_HAND) ? "RightHand" : "LeftHand", joint: (_this.hand === RIGHT_HAND) ? "RightHand" : "LeftHand",
filter: RayPick.PICK_ENTITIES | RayPick.PICK_INCLUDE_INVISIBLE, filter: RayPick.PICK_ENTITIES | RayPick.PICK_INCLUDE_INVISIBLE,
faceAvatar: true, faceAvatar: true,
scaleWithAvatar: true,
centerEndY: false, centerEndY: false,
renderStates: teleportRenderStates renderStates: teleportRenderStates
}); });
@ -168,6 +170,7 @@ Script.include("/~/system/libraries/controllers.js");
joint: "Avatar", joint: "Avatar",
filter: RayPick.PICK_ENTITIES, filter: RayPick.PICK_ENTITIES,
faceAvatar: true, faceAvatar: true,
scaleWithAvatar: true,
centerEndY: false, centerEndY: false,
renderStates: teleportRenderStates, renderStates: teleportRenderStates,
defaultRenderStates: teleportDefaultRenderStates defaultRenderStates: teleportDefaultRenderStates
@ -176,6 +179,7 @@ Script.include("/~/system/libraries/controllers.js");
joint: "Avatar", joint: "Avatar",
filter: RayPick.PICK_ENTITIES | RayPick.PICK_INCLUDE_INVISIBLE, filter: RayPick.PICK_ENTITIES | RayPick.PICK_INCLUDE_INVISIBLE,
faceAvatar: true, faceAvatar: true,
scaleWithAvatar: true,
centerEndY: false, centerEndY: false,
renderStates: teleportRenderStates renderStates: teleportRenderStates
}); });

View file

@ -88,7 +88,6 @@ Script.include("/~/system/libraries/controllers.js");
{name: "hold", distance: DEFAULT_SEARCH_SPHERE_DISTANCE, path: holdPath} {name: "hold", distance: DEFAULT_SEARCH_SPHERE_DISTANCE, path: holdPath}
]; ];
// triggered when stylus presses a web overlay/entity // triggered when stylus presses a web overlay/entity
var HAPTIC_STYLUS_STRENGTH = 1.0; var HAPTIC_STYLUS_STRENGTH = 1.0;
var HAPTIC_STYLUS_DURATION = 20.0; var HAPTIC_STYLUS_DURATION = 20.0;
@ -452,6 +451,7 @@ Script.include("/~/system/libraries/controllers.js");
posOffset: getGrabPointSphereOffset(this.handToController(), true), posOffset: getGrabPointSphereOffset(this.handToController(), true),
renderStates: renderStates, renderStates: renderStates,
faceAvatar: true, faceAvatar: true,
scaleWithAvatar: true,
defaultRenderStates: defaultRenderStates defaultRenderStates: defaultRenderStates
}); });
} }

View file

@ -150,6 +150,7 @@ Laser = function (side) {
} }
function update(hand) { function update(hand) {
return;
var handPosition, var handPosition,
handOrientation, handOrientation,
deltaOrigin, deltaOrigin,