Ejemplo n.º 1
0
void Entity::RemoveComponent(ComponentMap::iterator iter, AttributeChange::Type change)
{
    const ComponentPtr& component = iter->second;
    
    QString componentTypeName = component->TypeName();
    componentTypeName.replace(0, 3, "");
    componentTypeName = componentTypeName.toLower();
    
    if(property(componentTypeName.toStdString().c_str()).isValid())
    {
        QObject *obj = property(componentTypeName.toStdString().c_str()).value<QObject*>();
        //Make sure that QObject is inherited by the IComponent.
        if (obj && dynamic_cast<IComponent*>(obj))
        {
            //Make sure that name is matching incase there are many of same type of components in entity.
            if (dynamic_cast<IComponent*>(obj)->Name() == component->Name())
                setProperty(componentTypeName.toStdString().c_str(), QVariant());
        }
    }
    
    if (change != AttributeChange::Disconnected)
        emit ComponentRemoved(iter->second.get(), change == AttributeChange::Default ? component->UpdateMode() : change);
    if (scene_)
        scene_->EmitComponentRemoved(this, iter->second.get(), change);

    iter->second->SetParentEntity(0);
    components_.erase(iter);
}
Ejemplo n.º 2
0
void Entity::RemoveComponent(ComponentMap::Iterator iter, AttributeChange::Type change)
{
    const ComponentPtr& component = iter->second_;

    if (change != AttributeChange::Disconnected)
        ComponentRemoved(iter->second_.Get(), change == AttributeChange::Default ? component->UpdateMode() : change);
    if (scene_)
        scene_->EmitComponentRemoved(this, iter->second_.Get(), change);

    iter->second_->SetParentEntity(0);
    components_.Erase(iter);
}
Ejemplo n.º 3
0
Archivo: Entity.cpp Proyecto: A-K/naali
    void Entity::RemoveComponent(const ComponentPtr &component, AttributeChange::Type change)
    {
        if (component)
        {
            ComponentVector::iterator iter = std::find(components_.begin(), components_.end(), component);
            if (iter != components_.end())
            {
                QString componentTypeName = component->TypeName();
                componentTypeName.replace(0, 3, "");
                componentTypeName = componentTypeName.toLower();
                    
                if(property(componentTypeName.toStdString().c_str()).isValid())
                {
                    QObject *obj = property(componentTypeName.toStdString().c_str()).value<QObject*>();
                    //Make sure that QObject is inherited by the IComponent.
                    if (obj && dynamic_cast<IComponent*>(obj))
                    {
                        //Make sure that name is matching incase there are many of same type of components in entity.
                        if (dynamic_cast<IComponent*>(obj)->Name() == component->Name())
                            setProperty(componentTypeName.toStdString().c_str(), QVariant());
                    }
                }
                

                if (change != AttributeChange::Disconnected)
                    emit ComponentRemoved((*iter).get(), change == AttributeChange::Default ? component->GetUpdateMode() : change);
                if (scene_)
                    scene_->EmitComponentRemoved(this, (*iter).get(), change);

                (*iter)->SetParentEntity(0);
                components_.erase(iter);
            }
            else
            {
                LogWarning("Failed to remove component: " + component->TypeName() + " from entity: " + QString::number(GetId()));
            }
        }
    }