Esempio n. 1
0
void AvatarManager::handleRemovedAvatar(const AvatarSharedPointer& removedAvatar, KillAvatarReason removalReason) {
    auto avatar = std::static_pointer_cast<OtherAvatar>(removedAvatar);
    AvatarHashMap::handleRemovedAvatar(avatar, removalReason);
    avatar->tearDownGrabs();

    avatar->die();
    queuePhysicsChange(avatar);

    // remove this avatar's entities from the tree now, if we wait (as we did previously) for this Avatar's destructor
    // it might not fire until after we create a new instance for the same remote avatar, which creates a race
    // on the creation of entities for that avatar instance and the deletion of entities for this instance
    avatar->removeAvatarEntitiesFromTree();
    if (removalReason != KillAvatarReason::AvatarDisconnected) {
        if (removalReason == KillAvatarReason::TheirAvatarEnteredYourBubble) {
            emit AvatarInputs::getInstance()->avatarEnteredIgnoreRadius(avatar->getSessionUUID());
            emit DependencyManager::get<UsersScriptingInterface>()->enteredIgnoreRadius();
        }

        workload::Transaction workloadTransaction;
        workloadTransaction.remove(avatar->getSpaceIndex());
        _space->enqueueTransaction(workloadTransaction);

        const render::ScenePointer& scene = qApp->getMain3DScene();
        render::Transaction transaction;
        avatar->removeFromScene(avatar, scene, transaction);
        scene->enqueueTransaction(transaction);
    } else {
        // remove from node sets, if present
        DependencyManager::get<NodeList>()->removeFromIgnoreMuteSets(avatar->getSessionUUID());
        DependencyManager::get<UsersScriptingInterface>()->avatarDisconnected(avatar->getSessionUUID());
        render::Transaction transaction;
        auto scene = qApp->getMain3DScene();
        avatar->fadeOut(transaction, removalReason);

        workload::SpacePointer space = _space;
        transaction.transitionFinishedOperator(avatar->getRenderItemID(), [space, avatar]() {
            if (avatar->getLastFadeRequested() != render::Transition::Type::USER_LEAVE_DOMAIN) {
                // The avatar is using another transition besides the fade-out transition, which means it is still in use.
                // Deleting the avatar now could cause state issues, so abort deletion and show message.
                qCWarning(interfaceapp) << "An ending fade-out transition wants to delete an avatar, but the avatar is still in use. Avatar deletion has aborted. (avatar ID: " << avatar->getSessionUUID() << ")";
            } else {
                const render::ScenePointer& scene = qApp->getMain3DScene();
                render::Transaction transaction;
                avatar->removeFromScene(avatar, scene, transaction);
                scene->enqueueTransaction(transaction);

                workload::Transaction workloadTransaction;
                workloadTransaction.remove(avatar->getSpaceIndex());
                space->enqueueTransaction(workloadTransaction);
            }
        });
        scene->enqueueTransaction(transaction);
    }
}
Esempio n. 2
0
/*
SceneNode* gateNode;
Entity* gateEntity;

SceneNode* gateDoorNodes[8];
Entity* gateDoorEntities[8];

bool gateOpen = true;
float tVal = 0.0f;

float tSpeedOpen = 10.0f;
float tSpeedClose = 20.0f;

float tSpeed = 0.0f;
float tAccel = 2.0f;

float gateDelayTimer = 0.0f;
float gateDelay = 1.0f;

void Vine::updateGate(float elapsed)
{
    if( gateOpen ) {
        if( tVal + tSpeed*elapsed >= 4.0f ) {
            tVal = 4.0f;
            if( gateDelayTimer >= gateDelay ) {
                gateOpen = false;
                gateDelayTimer = 0.0f;
                tSpeed = 0.0f;
            }
            else {
                gateDelayTimer += elapsed;
            }
        }
        else {
            if( tSpeed+tAccel >= tSpeedOpen ) {
                tSpeed = tSpeedOpen;
            }
            else {
                tSpeed += tAccel;
            }
            tVal += tSpeed*elapsed;
        }
    }
    else {
        if( tVal - tSpeed*elapsed <= 0.0f ) {
            tVal = 0.0f;
            if( gateDelayTimer >= gateDelay ) {
                gateOpen = true;
                gateDelayTimer = 0.0f;
                tSpeed = 0.0f;
            }
            else {
                gateDelayTimer += elapsed;
            }
        }
        else {
            if( tSpeed+tAccel >= tSpeedClose ) {
                tSpeed = tSpeedClose;
            }
            else {
                tSpeed += tAccel;
            }
            tVal -= tSpeed*elapsed;
        }
    }
    
    for( int i = 0; i < 8; ++i ) {
        Vector3 t = Vector3(0,tVal,0);
        Vector3 r = Vector3(Math::Cos(Degree(45*i))*t.x - Math::Sin(Degree(45*i))*t.y,Math::Sin(Degree(45*i))*t.x + Math::Cos(Degree(45*i))*t.y,0);
        gateDoorNodes[i]->setPosition(r);
    }
}
*/
void Vine::loadRunnerShip()
{
    removeFromScene();
    entireVine = parentNode->createChildSceneNode("entireVineNode" + Util::toStringInt(vineID));
    
    tip = entireVine->createChildSceneNode("vineTipNode" + Util::toStringInt(vineID));
    
    tipEntity = tip->getCreator()->createEntity("vineTipEntity" + Util::toStringInt(vineID), "Ships/arwing.mesh");
    tip->attachObject(tipEntity);
    tip->scale(radius / 1.5, radius / 1.5, radius / 1.5);
    tip->yaw(Degree(180.0));
    tipEntity->getSubEntity(7)->setMaterialName("Arwing/GlassHull");
    tipEntity->getSubEntity(3)->setMaterialName("Arwing/GlassHull");
    tipEntity->getSubEntity(2)->setMaterialName("Arwing/EndWing");
    tipEntity->getSubEntity(4)->setMaterialName("Arwing/FrontLine");
    
    tipEntity->getSubEntity(0)->setMaterialName("Arwing/EndWing");
    tipEntity->getSubEntity(1)->setMaterialName("Arwing/FrontWing");
    tipEntity->getSubEntity(5)->setMaterialName("Arwing/FrontWing");
    tipEntity->getSubEntity(6)->setMaterialName("Arwing/ThrusterColor");
    
    
    base = entireVine->createChildSceneNode("vineBaseNode" + Util::toStringInt(vineID));
    base->translate(0, 0.0, radius * 2.0);
    base->yaw(Degree(180.0));
}
Esempio n. 3
0
void AvatarManager::simulateAvatarFades(float deltaTime) {
    QVector<AvatarSharedPointer>::iterator fadingIterator = _avatarFades.begin();

    const float SHRINK_RATE = 0.9f;
    const float MIN_FADE_SCALE = MIN_AVATAR_SCALE;

    render::ScenePointer scene = qApp->getMain3DScene();
    render::PendingChanges pendingChanges;
    while (fadingIterator != _avatarFades.end()) {
        auto avatar = std::static_pointer_cast<Avatar>(*fadingIterator);
        avatar->startUpdate();
        avatar->setTargetScale(avatar->getUniformScale() * SHRINK_RATE);
        if (avatar->getTargetScale() <= MIN_FADE_SCALE) {
            avatar->removeFromScene(*fadingIterator, scene, pendingChanges);
            // only remove from _avatarFades if we're sure its motionState has been removed from PhysicsEngine
            if (_motionStatesToRemoveFromPhysics.empty()) {
                fadingIterator = _avatarFades.erase(fadingIterator);
            } else {
                ++fadingIterator;
            }
        } else {
            avatar->simulate(deltaTime);
            ++fadingIterator;
        }
        avatar->endUpdate();
    }
    scene->enqueuePendingChanges(pendingChanges);
}
Esempio n. 4
0
void SFXEmitter::onRemove()
{
   SFX_DELETE( mSource );

   removeFromScene();
   Parent::onRemove();
}
Esempio n. 5
0
void Pod::setToGrowth(float t)
{
    if (mtype == POD_BASIC)
    {
        if (t <= 0.0)
        {
            removeFromScene();
        }
        else
            entirePod->setPosition(tip);
    }
    else if (mtype == POD_FUEL)
    {
        head->setScale(Vector3(headRadius / 1.5, t * headRadius / 1.5, headRadius / 1.5));
    }
    else if (mtype == POD_FLOWER)
    {
        head->setScale(Vector3(headRadius / 20, t * headRadius / 20, headRadius / 20));
    }
    else
    {
        head->setScale(Vector3(0.5, 0.5 * t, 0.5));
        //head->setScale(Vector3(0.7, 0.7 * t, 0.7));
    }
}
Esempio n. 6
0
void Sun::onRemove()
{   
   TimeOfDay::getTimeOfDayUpdateSignal().remove( this, &Sun::_updateTimeOfDay );

   removeFromScene();
   Parent::onRemove();
}
Esempio n. 7
0
void SceneObject::setHidden( bool hidden )
{
   if( hidden != isHidden() )
   {
      // Add/remove the object from the scene.  Removing it
      // will also cause the NetObject to go out of scope since
      // the container query will not find it anymore.  However,
      // ScopeAlways objects need to be treated separately as we
      // do next.

      if( !hidden )
         addToScene();
      else
         removeFromScene();

      // ScopeAlways objects stay in scope no matter what, i.e. even
      // if they aren't in the scene query anymore.  So, to force ghosts
      // to go away, we need to clear ScopeAlways while we are hidden.

      if( hidden && mIsScopeAlways )
         clearScopeAlways();
      else if( !hidden && mIsScopeAlways )
         setScopeAlways();

      Parent::setHidden( hidden );
   }
}
Esempio n. 8
0
void GroundPlane::onRemove()
{
   SAFE_DELETE( mPhysicsRep );

   removeFromScene();
   Parent::onRemove();
}
Esempio n. 9
0
void ZoneItem::signalEndOfAdding()
{
    std::cout << "signal" << std::endl;
    if (m_state == e_beingAdded)
    {
        m_view->setStateAddingItem (this);
        m_state = e_beingResized;
    }
    else
    {
        MyItem::signalEndOfAdding();
    }
    // si le rectangle est a l'envers, on le remet a l'endroit
    if (m_width < 0)
    {
        m_width = -m_width;
        setPos (x() - m_width, y() );
    }
    if (m_height < 0)
    {
        m_height = -m_height;
        setPos (x(), y() - m_height);
    }
    int x1 = x();
    int y1 = y();
    removeFromScene (m_view->scene() );
    setItem (addRect (0, 0, m_width, m_height) );
    setPos (x1, y1);

}
Esempio n. 10
0
void ProximityMine::onRemove()
{
   scriptOnRemove();
   removeFromScene();

   Parent::onRemove();
}
Esempio n. 11
0
void VehicleBlocker::onRemove()
{
   mConvexList->nukeList();
   removeFromScene();

   Parent::onRemove();
}
void RenderObjectExample::onRemove()
{
   // Remove this object from the scene
   removeFromScene();

   Parent::onRemove();
}
Esempio n. 13
0
    Actor::~Actor()
    {
        // Alle möglichen Area-Verknüpfungen entfernen
        GameEventManager::getSingleton().removeAllAreas(this);
        // Alle TrackAnimations entfernen
        AnimationManager::getSingleton().removeAllTrackAnimations(this);

        detachAllChildren();

        if (mParent == NULL)
        {
            removeFromScene();
        }
        else
        {
            mParent->detach( this );  
        }

        if (mActorControlledObject != NULL)
        {
            mActorControlledObject->_setActor(0);
            mActorControlledObject = NULL;
        }

        if (mPhysicalThing != NULL)
        {
            mPhysicalThing->_setActor(0);
            mPhysicalThing = NULL;
        }

        /// @todo Highlightmaterial entfernen
        delete mDescription;
    }
void MetaShapeRenderer::onRemove()
{
   // Remove this object from the scene
   removeFromScene();

   Parent::onRemove();
}
Esempio n. 15
0
void Pod::loadHazard()
{
    removeFromScene();
    
    float stemLength = base.distance(tip);
    entirePod = parentNode->createChildSceneNode("entirePodNode" + Util::toStringInt(podID));
    Vector3 v = tip - base;
    
    // Though the variable names are not symmetric,
    // Use the stem to be the other obelisk on the other side
    head = entirePod->createChildSceneNode("headNode" + Util::toStringInt(podID));
    stem = entirePod->createChildSceneNode("stemNode" + Util::toStringInt(podID));
    
    headContentEntity = head->getCreator()->createEntity("headEntity" + Util::toStringInt(podID), "Barriers/obelisk.mesh");
    Entity* stemContentEntity = stem->getCreator()->createEntity("stemEntity" + Util::toStringInt(podID), "Barriers/obelisk.mesh");
    headContentEntity->setMaterialName("General/BarrierMaterial");
    stemContentEntity->setMaterialName("General/BarrierMaterial");
    
    head->attachObject(headContentEntity);
    head->setOrientation(globals.tunnelReferenceUpward.getRotationTo(v));
    head->setPosition(base);
    head->translate(Vector3(-3.5, 0.0, 0.0), Ogre::Node::TS_LOCAL);
    head->yaw(Degree(180.0));
    head->roll(Degree(5.0));
    
    stem->attachObject(stemContentEntity);
    stem->setOrientation(globals.tunnelReferenceUpward.getRotationTo(v));
    stem->setPosition(base);
    stem->translate(Vector3(3.5, 0.0, 0.0), Ogre::Node::TS_LOCAL);
    stem->roll(Degree(5.0));
    
    hazardID = podID;
    
    setToGrowth(0.0);
}
Esempio n. 16
0
void Board::clearPieces()
{
    if (playerGoesFirst == 1)
        playerGoesFirst = currentPlayer = 2;
    else
        playerGoesFirst = currentPlayer = 1;
    gameResultText->hide();
    /*for (int i=0; i<animations.size(); i++)
    {
        delete animations[i];
    }
    animations.clear();*/
    clearAnimations = new QParallelAnimationGroup();
    QPropertyAnimation* animation;
    for (int i=0; i<pieces.size(); i++)
    {
        animation = new QPropertyAnimation(pieces[i], "pos");
        animation->setDuration(1000);
        animation->setStartValue(QPointF(pieces[i]->x(), pieces[i]->y()));
        animation->setEndValue(QPointF(pieces[i]->x(), this->originalHeight));
        animation->setEasingCurve(QEasingCurve::InQuad);
        connect(animation,SIGNAL(finished()),animation->targetObject(),SLOT(removeFromScene()));
        clearAnimations->addAnimation(animation);
    }
    clearAnimations->start();
    currentPiece = new Piece(currentPlayer, this);
}
Esempio n. 17
0
void Entity::addToScene(Ogre::SceneNode *newParent) {
    if (newParent == NULL) {
        newParent = mScene->getSceneManager()->getRootSceneNode();
    }
    removeFromScene();
    newParent->addChild(mSceneNode);
    setStatic(false); // May get set to true after the next frame has drawn.
}
Esempio n. 18
0
void TimeOfDay::onRemove()
{
   if ( isClientObject() )
      NetConnection::smGhostAlwaysDone.remove( this, &TimeOfDay::_onGhostAlwaysDone );

   removeFromScene();
   Parent::onRemove();
}
Esempio n. 19
0
void AvatarManager::handleRemovedAvatar(const AvatarSharedPointer& removedAvatar, KillAvatarReason removalReason) {
    auto avatar = std::static_pointer_cast<OtherAvatar>(removedAvatar);
    AvatarHashMap::handleRemovedAvatar(avatar, removalReason);
    avatar->tearDownGrabs();

    avatar->die();
    queuePhysicsChange(avatar);

    // remove this avatar's entities from the tree now, if we wait (as we did previously) for this Avatar's destructor
    // it might not fire until after we create a new instance for the same remote avatar, which creates a race
    // on the creation of entities for that avatar instance and the deletion of entities for this instance
    avatar->removeAvatarEntitiesFromTree();
    if (removalReason == KillAvatarReason::TheirAvatarEnteredYourBubble) {
        emit AvatarInputs::getInstance()->avatarEnteredIgnoreRadius(avatar->getSessionUUID());
        emit DependencyManager::get<UsersScriptingInterface>()->enteredIgnoreRadius();

        workload::Transaction workloadTransaction;
        workloadTransaction.remove(avatar->getSpaceIndex());
        _space->enqueueTransaction(workloadTransaction);

        const render::ScenePointer& scene = qApp->getMain3DScene();
        render::Transaction transaction;
        avatar->removeFromScene(avatar, scene, transaction);
        scene->enqueueTransaction(transaction);
    } else if (removalReason == KillAvatarReason::AvatarDisconnected) {
        // remove from node sets, if present
        DependencyManager::get<NodeList>()->removeFromIgnoreMuteSets(avatar->getSessionUUID());
        DependencyManager::get<UsersScriptingInterface>()->avatarDisconnected(avatar->getSessionUUID());
        render::Transaction transaction;
        auto scene = qApp->getMain3DScene();
        avatar->fadeOut(transaction, removalReason);

        workload::SpacePointer space = _space;
        transaction.transitionFinishedOperator(avatar->getRenderItemID(), [space, avatar]() {
            const render::ScenePointer& scene = qApp->getMain3DScene();
            render::Transaction transaction;
            avatar->removeFromScene(avatar, scene, transaction);
            scene->enqueueTransaction(transaction);

            workload::Transaction workloadTransaction;
            workloadTransaction.remove(avatar->getSpaceIndex());
            space->enqueueTransaction(workloadTransaction);
        });
        scene->enqueueTransaction(transaction);
    }
}
Esempio n. 20
0
void VolumetricFog::onRemove()
{
	removeFromScene();

	VFRTM->DecFogObjects();

	Parent::onRemove();
}
void MissionMarker::onEditorDisable()
{
   if(mAddedToScene)
   {
      removeFromScene();
      mAddedToScene = false;
   }
}
Esempio n. 22
0
void Trigger::onRemove()
{
   onRemove_callback( getId() );

   mConvexList->nukeList();

   removeFromScene();
   Parent::onRemove();
}
Esempio n. 23
0
void ZoneItem::changeCoordinates (int x, int y, int x2, int y2)
{
    m_width = x2 - this->x();
    m_height = y2 - this->y();
    removeFromScene (m_view->scene() );
    setItem (addRect (0, 0, m_width, m_height) );
    setPos (x, y);

}
void ForestWindEmitter::onEditorDisable()
{
   // Remove us from the scene.
   if ( mAddedToScene )
   {
      removeFromScene();
      mAddedToScene = false;
   }
}
Esempio n. 25
0
   void NavMesh::onRemove()
   {
      removeFromScene();

      if(mEventManager)
         mEventManager->deleteObject();

      Parent::onRemove();
   }
Esempio n. 26
0
void StaticShape::onRemove()
{
   //.logicking >>
   SAFE_DELETE( mPhysicsRep );
   //.logicking <<
   scriptOnRemove();
   removeFromScene();
   Parent::onRemove();
}
Esempio n. 27
0
void ScatterSky::onRemove()
{
   removeFromScene();

   if ( isClientObject() )
      TimeOfDay::getTimeOfDayUpdateSignal().remove( this, &ScatterSky::_updateTimeOfDay );

   Parent::onRemove();
}
Esempio n. 28
0
void FlyingVehicle::onRemove()
{
   SFX_DELETE( mJetSound );
   SFX_DELETE( mEngineSound );

   scriptOnRemove();
   removeFromScene();
   Parent::onRemove();
}
Esempio n. 29
0
void DecalRoad::onRemove()
{
   SAFE_DELETE( mMatInst );

   TerrainBlock::smUpdateSignal.remove( this, &DecalRoad::_onTerrainChanged );

   removeFromScene();

   Parent::onRemove();
}
Esempio n. 30
0
void ConvexShape::onRemove()
{
   removeFromScene();

   mConvexList->nukeList();

   SAFE_DELETE( mPhysicsRep );

   Parent::onRemove();
}