本文整理汇总了C++中wfmath::Vector::isValid方法的典型用法代码示例。如果您正苦于以下问题:C++ Vector::isValid方法的具体用法?C++ Vector::isValid怎么用?C++ Vector::isValid使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类wfmath::Vector
的用法示例。
在下文中一共展示了Vector::isValid方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: move
void PolygonPointMover::move(const WFMath::Vector<3>& directionVector)
{
if (directionVector.isValid()) {
getActivePoint()->translate(WFMath::Vector<2>(directionVector.x(), directionVector.y()));
mPolygon.updateRender();
}
}
示例2: move
void EntityMoverBase::move(const WFMath::Vector<3>& directionVector)
{
if (directionVector.isValid()) {
mNode->translate(Convert::toOgre(directionVector));
newEntityPosition(mNode->getPosition());
Moved.emit();
}
}
示例3: showEntityInfo
void InspectWidget::showEntityInfo(EmberEntity* entity)
{
Eris::Entity* parent = entity->getLocation();
std::stringstream ss;
ss.precision(4);
ss << "Name: " << entity->getName() << "\n";
ss << "Id: " << entity->getId() << "\n";
ss << "Parent: ";
if (parent) {
ss << parent->getName() << " (Id: " << parent->getId() << ")";
} else {
ss << "none";
}
ss << "\n";
if (entity->getPredictedPos().isValid()) {
ss << "PredPosition: " << entity->getPredictedPos() << "\n";
}
if (entity->getPosition().isValid()) {
ss << "Position: " << entity->getPosition() << "\n";
}
WFMath::Vector<3> velocity = entity->getPredictedVelocity();
if (velocity.isValid()) {
ss << "Velocity: " << velocity << ": " << sqrt(velocity.sqrMag()) << "\n";
}
if (entity->getOrientation().isValid()) {
ss << "Orientation: " << entity->getOrientation() << "\n";
}
if (entity->getBBox().isValid()) {
ss << "Boundingbox: " << entity->getBBox() << "\n";
}
ss << "Type: " << entity->getType()->getName() << "\n";
ss << "Attributes:\n";
ss << mAttributesString;
mInfo->setText(ss.str());
mChangedThisFrame = false;
}
示例4: setVelocity
void SoundSource::setVelocity(const WFMath::Vector<3>& vel)
{
assert(vel.isValid());
alSource3f(mALSource, AL_VELOCITY, vel.x(), vel.y(), vel.z());
SoundGeneral::checkAlError("Setting sound source velocity.");
}
示例5: update
void Steering::update()
{
if (mSteeringEnabled) {
if (mUpdateNeeded) {
updatePath();
}
auto entity = mAvatar.getEntity();
if (!mPath.empty()) {
const auto& finalDestination = mPath.back();
auto entity3dPosition = entity->getViewPosition();
const WFMath::Point<2> entityPosition(entity3dPosition.x(), entity3dPosition.z());
//First check if we've arrived at our actual destination.
if (WFMath::Distance(WFMath::Point<2>(finalDestination.x(), finalDestination.z()), entityPosition) < 0.1f) {
//We've arrived at our destination. If we're moving we should stop.
if (mLastSentVelocity.isValid() && mLastSentVelocity != WFMath::Vector<2>::ZERO()) {
moveInDirection(WFMath::Vector<2>::ZERO());
}
stopSteering();
} else {
//We should send a move op if we're either not moving, or we've reached a waypoint, or we need to divert a lot.
WFMath::Point<2> nextWaypoint(mPath.front().x(), mPath.front().z());
if (WFMath::Distance(nextWaypoint, entityPosition) < 0.1f) {
mPath.pop_front();
nextWaypoint = WFMath::Point<2>(mPath.front().x(), mPath.front().z());
}
WFMath::Vector<2> velocity = nextWaypoint - entityPosition;
WFMath::Point<2> destination;
velocity.normalize();
if (mPath.size() == 1) {
//if the next waypoint is the destination we should send a "move to position" update to the server, to make sure that we stop when we've arrived.
//otherwise, if there's too much lag, we might end up overshooting our destination and will have to double back
destination = nextWaypoint;
}
//Check if we need to divert in order to avoid colliding.
WFMath::Vector<2> newVelocity;
bool avoiding = mAwareness.avoidObstacles(entityPosition, velocity * mSpeed, newVelocity);
if (avoiding) {
auto newMag = newVelocity.mag();
auto relativeMag = mSpeed / newMag;
velocity = newVelocity;
velocity.normalize();
velocity *= relativeMag;
mUpdateNeeded = true;
}
bool shouldSend = false;
if (velocity.isValid()) {
if (mLastSentVelocity.isValid()) {
//If the entity has stopped, and we're not waiting for confirmation to a movement request we've made, we need to start moving.
if (!entity->isMoving() && !mExpectingServerMovement) {
shouldSend = true;
} else {
auto currentTheta = std::atan2(mLastSentVelocity.y(), mLastSentVelocity.x());
auto newTheta = std::atan2(velocity.y(), velocity.x());
//If we divert too much from where we need to go we must adjust.
if (std::abs(currentTheta - newTheta) > WFMath::numeric_constants<double>::pi() / 20) {
shouldSend = true;
}
}
} else {
//If we've never sent a movement update before we should do that now.
shouldSend = true;
}
}
if (shouldSend) {
//If we're moving to a certain destination and aren't avoiding anything we should tell the server to move to the destination.
if (destination.isValid() && !avoiding) {
moveToPoint(WFMath::Point<3>(destination.x(), entity3dPosition.y(), destination.y()));
} else {
moveInDirection(velocity);
}
}
}
} else {
//We are steering, but the path is empty, which means we can't find any path. If we're moving we should stop movement.
//But we won't stop steering; perhaps we'll find a path later.
if (mLastSentVelocity.isValid() && mLastSentVelocity != WFMath::Vector<2>::ZERO()) {
moveInDirection(WFMath::Vector<2>::ZERO());
}
}
}
}
示例6:
WFMath::Vector<3> SoundEntity::getVelocity() const
{
WFMath::Vector<3> velocity = mParentEntity.getPredictedVelocity();
return velocity.isValid() ? velocity : WFMath::Vector<3>::ZERO();
}
示例7: updatePosition
void NodeController::updatePosition()
{
WFMath::Point<3> pos = mAttachment.getAttachedEntity().getPredictedPos();
WFMath::Quaternion orientation = mAttachment.getAttachedEntity().getOrientation();
WFMath::Vector<3> velocity = mAttachment.getAttachedEntity().getPredictedVelocity();
mAttachment.setPosition(pos.isValid() ? pos : WFMath::Point<3>::ZERO(), orientation.isValid() ? orientation : orientation.identity(), velocity.isValid() ? velocity : WFMath::Vector<3>::ZERO());
}