mirror of
https://github.com/overte-org/overte.git
synced 2025-08-10 04:12:46 +02:00
bigger catch radius, tweak sounds, different new ball button
This commit is contained in:
parent
c0f3ec5b6a
commit
9f7e79e3c1
1 changed files with 35 additions and 44 deletions
|
@ -31,7 +31,7 @@ const float NO_DAMPING = 0.f;
|
||||||
const glm::vec3 TOY_BALL_GRAVITY = glm::vec3(0,-2.0,0);
|
const glm::vec3 TOY_BALL_GRAVITY = glm::vec3(0,-2.0,0);
|
||||||
const QString TOY_BALL_UPDATE_SCRIPT("");
|
const QString TOY_BALL_UPDATE_SCRIPT("");
|
||||||
const float PALM_COLLISION_RADIUS = 0.03f;
|
const float PALM_COLLISION_RADIUS = 0.03f;
|
||||||
const float CATCH_RADIUS = 0.2f;
|
const float CATCH_RADIUS = 0.3f;
|
||||||
const xColor TOY_BALL_ON_SERVER_COLOR[] =
|
const xColor TOY_BALL_ON_SERVER_COLOR[] =
|
||||||
{
|
{
|
||||||
{ 255, 0, 0 },
|
{ 255, 0, 0 },
|
||||||
|
@ -81,14 +81,20 @@ void Hand::simulateToyBall(PalmData& palm, const glm::vec3& fingerTipPosition, f
|
||||||
ParticleTree* particles = app->getParticles()->getTree();
|
ParticleTree* particles = app->getParticles()->getTree();
|
||||||
bool ballFromHand = Menu::getInstance()->isOptionChecked(MenuOption::BallFromHand);
|
bool ballFromHand = Menu::getInstance()->isOptionChecked(MenuOption::BallFromHand);
|
||||||
int handID = palm.getSixenseID();
|
int handID = palm.getSixenseID();
|
||||||
|
|
||||||
bool grabButtonPressed = (palm.getControllerButtons() & BUTTON_FWD);
|
const int NEW_BALL_BUTTON = BUTTON_3;
|
||||||
|
|
||||||
|
float trigger = palm.getTrigger();
|
||||||
|
bool grabButtonPressed = ((palm.getControllerButtons() & BUTTON_FWD) ||
|
||||||
|
(palm.getControllerButtons() & BUTTON_3) ||
|
||||||
|
(trigger > 0.f));
|
||||||
|
|
||||||
bool ballAlreadyInHand = _toyBallInHand[handID];
|
bool ballAlreadyInHand = _toyBallInHand[handID];
|
||||||
|
|
||||||
glm::vec3 targetPosition = (ballFromHand ? palm.getPosition() : fingerTipPosition) / (float)TREE_SCALE;
|
glm::vec3 targetPosition = (ballFromHand ? palm.getPosition() : fingerTipPosition) / (float)TREE_SCALE;
|
||||||
float targetRadius = CATCH_RADIUS / (float)TREE_SCALE;
|
float targetRadius = CATCH_RADIUS / (float)TREE_SCALE;
|
||||||
|
|
||||||
// If I don't currently have a ball in my hand, then I can catch this closest particle
|
// If I don't currently have a ball in my hand, then try to catch closest one
|
||||||
if (!ballAlreadyInHand && grabButtonPressed) {
|
if (!ballAlreadyInHand && grabButtonPressed) {
|
||||||
|
|
||||||
const Particle* closestParticle = particles->findClosestParticle(targetPosition, targetRadius);
|
const Particle* closestParticle = particles->findClosestParticle(targetPosition, targetRadius);
|
||||||
|
@ -119,7 +125,7 @@ void Hand::simulateToyBall(PalmData& palm, const glm::vec3& fingerTipPosition, f
|
||||||
_ballParticleEditHandles[handID] = caughtParticle;
|
_ballParticleEditHandles[handID] = caughtParticle;
|
||||||
caughtParticle = NULL;
|
caughtParticle = NULL;
|
||||||
// Play a catch sound!
|
// Play a catch sound!
|
||||||
app->getAudio()->startDrumSound(1.0, 300, 0.5, 0.05);
|
app->getAudio()->startDrumSound(1.0, 300, 0.75, 0.015);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -133,46 +139,31 @@ void Hand::simulateToyBall(PalmData& palm, const glm::vec3& fingerTipPosition, f
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Is the controller button being held down....
|
// If '3' is pressed, and not holding a ball, make a new one
|
||||||
if (palm.getControllerButtons() & BUTTON_FWD) {
|
if ((palm.getControllerButtons() & NEW_BALL_BUTTON) && (_toyBallInHand[handID] == false)) {
|
||||||
|
_toyBallInHand[handID] = true;
|
||||||
|
// Create a particle on the particle server
|
||||||
|
#ifdef DEBUG_HAND
|
||||||
|
qDebug("Created New Ball\n");
|
||||||
|
#endif
|
||||||
|
glm::vec3 ballPosition = ballFromHand ? palm.getPosition() : fingerTipPosition;
|
||||||
|
_ballParticleEditHandles[handID] = app->makeParticle(
|
||||||
|
ballPosition / (float)TREE_SCALE,
|
||||||
|
TOY_BALL_RADIUS / (float) TREE_SCALE,
|
||||||
|
TOY_BALL_ON_SERVER_COLOR[_whichBallColor[handID]],
|
||||||
|
NO_VELOCITY / (float)TREE_SCALE,
|
||||||
|
TOY_BALL_GRAVITY / (float) TREE_SCALE,
|
||||||
|
TOY_BALL_DAMPING,
|
||||||
|
IN_HAND,
|
||||||
|
TOY_BALL_UPDATE_SCRIPT);
|
||||||
|
// Play a new ball sound
|
||||||
|
app->getAudio()->startDrumSound(1.0, 2000, 0.5, 0.02);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (grabButtonPressed) {
|
||||||
// If we don't currently have a ball in hand, then create it...
|
// If we don't currently have a ball in hand, then create it...
|
||||||
if (!_toyBallInHand[handID]) {
|
if (_toyBallInHand[handID]) {
|
||||||
// Test for whether close enough to catch and catch....
|
// Update ball that is in hand
|
||||||
|
|
||||||
// isCaught is also used as "creating" a new ball... for now, this section is the
|
|
||||||
// create new ball portion of the code...
|
|
||||||
bool isCaught = false;
|
|
||||||
|
|
||||||
// If we didn't catch something, then create a new ball....
|
|
||||||
if (!isCaught) {
|
|
||||||
_toyBallInHand[handID] = true;
|
|
||||||
|
|
||||||
// create the ball, call MakeParticle, and use the resulting ParticleEditHandle to
|
|
||||||
// manage the newly created particle.
|
|
||||||
// Create a particle on the particle server
|
|
||||||
#ifdef DEBUG_HAND
|
|
||||||
qDebug("Created New Ball\n");
|
|
||||||
#endif
|
|
||||||
glm::vec3 ballPosition = ballFromHand ? palm.getPosition() : fingerTipPosition;
|
|
||||||
_ballParticleEditHandles[handID] = app->makeParticle(
|
|
||||||
ballPosition / (float)TREE_SCALE,
|
|
||||||
TOY_BALL_RADIUS / (float) TREE_SCALE,
|
|
||||||
TOY_BALL_ON_SERVER_COLOR[_whichBallColor[handID]],
|
|
||||||
NO_VELOCITY / (float)TREE_SCALE,
|
|
||||||
TOY_BALL_GRAVITY / (float) TREE_SCALE,
|
|
||||||
TOY_BALL_DAMPING,
|
|
||||||
IN_HAND,
|
|
||||||
TOY_BALL_UPDATE_SCRIPT);
|
|
||||||
// Play a new ball sound
|
|
||||||
app->getAudio()->startDrumSound(1.0, 2000, 0.5, 0.02);
|
|
||||||
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Ball is in hand
|
|
||||||
#ifdef DEBUG_HAND
|
|
||||||
//qDebug("Ball in hand\n");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
uint32_t particleInHandID = _ballParticleEditHandles[handID]->getID();
|
uint32_t particleInHandID = _ballParticleEditHandles[handID]->getID();
|
||||||
const Particle* particleInHand = particles->findParticleByID(particleInHandID);
|
const Particle* particleInHand = particles->findParticleByID(particleInHandID);
|
||||||
xColor colorForParticleInHand = particleInHand ? particleInHand->getXColor()
|
xColor colorForParticleInHand = particleInHand ? particleInHand->getXColor()
|
||||||
|
|
Loading…
Reference in a new issue