mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 16:58:09 +02:00
grab.js rotation sort-of works now
This commit is contained in:
parent
42f94307d5
commit
ccb2f17b33
4 changed files with 15 additions and 14 deletions
|
@ -60,7 +60,7 @@ var gMouseAtRotateStart = { x: 0, y: 0 };
|
||||||
|
|
||||||
var gBeaconHeight = 0.10;
|
var gBeaconHeight = 0.10;
|
||||||
|
|
||||||
var gAngularVelocity = ZERO_VEC3;
|
// var gAngularVelocity = ZERO_VEC3;
|
||||||
|
|
||||||
// TODO: play sounds again when we aren't leaking AudioInjector threads
|
// TODO: play sounds again when we aren't leaking AudioInjector threads
|
||||||
// var grabSound = SoundCache.getSound("https://hifi-public.s3.amazonaws.com/eric/sounds/CloseClamp.wav");
|
// var grabSound = SoundCache.getSound("https://hifi-public.s3.amazonaws.com/eric/sounds/CloseClamp.wav");
|
||||||
|
@ -194,7 +194,6 @@ function mousePressEvent(event) {
|
||||||
var cameraPosition = Camera.getPosition();
|
var cameraPosition = Camera.getPosition();
|
||||||
|
|
||||||
gBeaconHeight = Vec3.length(entityProperties.dimensions);
|
gBeaconHeight = Vec3.length(entityProperties.dimensions);
|
||||||
print("gBeaconHeight = " + gBeaconHeight);
|
|
||||||
gMaxGrabDistance = gBeaconHeight / MAX_SOLID_ANGLE;
|
gMaxGrabDistance = gBeaconHeight / MAX_SOLID_ANGLE;
|
||||||
if (Vec3.distance(objectPosition, cameraPosition) > gMaxGrabDistance) {
|
if (Vec3.distance(objectPosition, cameraPosition) > gMaxGrabDistance) {
|
||||||
// don't allow grabs of things far away
|
// don't allow grabs of things far away
|
||||||
|
@ -254,7 +253,7 @@ function mouseMoveEvent(event) {
|
||||||
gOriginalGravity = entityProperties.gravity;
|
gOriginalGravity = entityProperties.gravity;
|
||||||
}
|
}
|
||||||
|
|
||||||
var actionArgs;
|
var actionArgs = {};
|
||||||
|
|
||||||
if (gGrabMode === "rotate") {
|
if (gGrabMode === "rotate") {
|
||||||
var deltaMouse = { x: 0, y: 0 };
|
var deltaMouse = { x: 0, y: 0 };
|
||||||
|
@ -265,12 +264,13 @@ function mouseMoveEvent(event) {
|
||||||
var dragOffset = Vec3.multiply(dx, Quat.getRight(orientation));
|
var dragOffset = Vec3.multiply(dx, Quat.getRight(orientation));
|
||||||
dragOffset = Vec3.sum(dragOffset, Vec3.multiply(-dy, Quat.getUp(orientation)));
|
dragOffset = Vec3.sum(dragOffset, Vec3.multiply(-dy, Quat.getUp(orientation)));
|
||||||
var axis = Vec3.cross(dragOffset, Quat.getFront(orientation));
|
var axis = Vec3.cross(dragOffset, Quat.getFront(orientation));
|
||||||
// var axis = Vec3.normalize(axis);
|
axis = Vec3.normalize(axis);
|
||||||
// var ROTATE_STRENGTH = 8.0; // magic number tuned by hand
|
var ROTATE_STRENGTH = 8.0; // magic number tuned by hand
|
||||||
// gAngularVelocity = Vec3.multiply(ROTATE_STRENGTH, axis);
|
var angle = ROTATE_STRENGTH * Math.sqrt((dx * dx) + (dy * dy));
|
||||||
|
var deltaQ = Quat.angleAxis(angle, axis);
|
||||||
var targetRotation = Quat.angleAxis(Vec3.length(axis), Vec3.normalize(axis));
|
var qZero = entityProperties.rotation;
|
||||||
actionArgs = {targetRotation: targetRotation, angularTimeScale: 1.0};
|
var qOne = Quat.multiply(deltaQ, qZero);
|
||||||
|
actionArgs = {targetRotation: qOne, angularTimeScale: 0.1};
|
||||||
} else {
|
} else {
|
||||||
var newTargetPosition;
|
var newTargetPosition;
|
||||||
if (gGrabMode === "verticalCylinder") {
|
if (gGrabMode === "verticalCylinder") {
|
||||||
|
|
|
@ -131,7 +131,7 @@ glm::quat EntityActionInterface::extractQuatArgument(QString objectName, QVarian
|
||||||
return glm::quat();
|
return glm::quat();
|
||||||
}
|
}
|
||||||
|
|
||||||
return glm::quat(x, y, z, w);
|
return glm::quat(w, x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -64,8 +64,9 @@ void ObjectActionSpring::updateAction(btCollisionWorld* collisionWorld, btScalar
|
||||||
glm::quat deltaQ = _rotationalTarget * qZeroInverse;
|
glm::quat deltaQ = _rotationalTarget * qZeroInverse;
|
||||||
glm::vec3 axis = glm::axis(deltaQ);
|
glm::vec3 axis = glm::axis(deltaQ);
|
||||||
float angle = glm::angle(deltaQ);
|
float angle = glm::angle(deltaQ);
|
||||||
glm::vec3 newAngularVelocity = (-angle / _angularTimeScale) * glm::normalize(axis);
|
glm::vec3 newAngularVelocity = (angle / _angularTimeScale) * glm::normalize(axis);
|
||||||
rigidBody->setAngularVelocity(glmToBullet(newAngularVelocity));
|
rigidBody->setAngularVelocity(glmToBullet(newAngularVelocity));
|
||||||
|
rigidBody->activate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -236,9 +236,9 @@ void PhysicalEntitySimulation::handleCollisionEvents(CollisionEvents& collisionE
|
||||||
}
|
}
|
||||||
|
|
||||||
EntityActionPointer PhysicalEntitySimulation::actionFactory(EntityActionType type,
|
EntityActionPointer PhysicalEntitySimulation::actionFactory(EntityActionType type,
|
||||||
QUuid id,
|
QUuid id,
|
||||||
EntityItemPointer ownerEntity,
|
EntityItemPointer ownerEntity,
|
||||||
QVariantMap arguments) {
|
QVariantMap arguments) {
|
||||||
EntityActionPointer action = nullptr;
|
EntityActionPointer action = nullptr;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case ACTION_TYPE_NONE:
|
case ACTION_TYPE_NONE:
|
||||||
|
|
Loading…
Reference in a new issue