Пример #1
0
void MipMapReplacer::EnumerateTexturesRecursive(Entity * entity, Set<Texture *> & textures)
{
    if(!entity)
        return;

    int32 childrenCount = entity->GetChildrenCount();
    for(int32 i = 0; i < childrenCount; i++)
        EnumerateTexturesRecursive(entity->GetChild(i), textures);

    RenderObject * ro = GetRenderObject(entity);
    if(ro)
    {
        int32 rbCount = ro->GetRenderBatchCount();
        for(int32 i = 0; i < rbCount; i++)
        {
            RenderBatch * rb = ro->GetRenderBatch(i);
            if(rb)
            {
                Material * material = rb->GetMaterial();
                if(material)
                {
                    Texture * texture = material->GetTexture(Material::TEXTURE_DIFFUSE);
                    if(texture)
                        textures.insert(texture);
                }
            }
        }
    }
}
Пример #2
0
void MipMapReplacer::EnumerateTexturesRecursive(Entity * entity, Set<Texture *> & textures)
{
    if(!entity)
        return;

    int32 childrenCount = entity->GetChildrenCount();
    for(int32 i = 0; i < childrenCount; i++)
        EnumerateTexturesRecursive(entity->GetChild(i), textures);

    RenderObject * ro = GetRenderObject(entity);
    if(ro)
    {
        int32 rbCount = ro->GetRenderBatchCount();
        for(int32 i = 0; i < rbCount; i++)
        {
            RenderBatch * rb = ro->GetRenderBatch(i);
            if(rb)
            {
                DVASSERT(0 && "Vitaliy Borodovsky: Temporarly disabled. Need to rewrite for new materials");
                
                NMaterial * material = rb->GetMaterial();
                if(material)
                {
                    Texture * texture = material->GetTexture(NMaterial::TEXTURE_ALBEDO);
                    if(texture)
                        textures.insert(texture);
                }
            }
        }
    }
}
Пример #3
0
SkyboxRenderObject * GetSkybox(const Entity * fromEntity)
{
    RenderObject *ro = GetRenderObject(fromEntity);
    if(ro && ro->GetType() == RenderObject::TYPE_SKYBOX)
    {
        return (static_cast<SkyboxRenderObject *>(ro));
    }
    
    return NULL;
}
Пример #4
0
Landscape * GetLandscape( Entity * fromEntity )
{
	if(NULL != fromEntity)
	{
		RenderObject * object = GetRenderObject(fromEntity);
		if(object && object->GetType() == RenderObject::TYPE_LANDSCAPE)
		{
			Landscape *landscape = static_cast<Landscape *>(object);
			return landscape;
		}
	}

	return NULL;
}
Пример #5
0
void SwitchSystem::SetSwitchHierarchy(Entity * entity, int32 switchIndex)
{
    RenderObject * ro = GetRenderObject(entity);
	if(ro)
    {
        ro->SetSwitchIndex(switchIndex);
    }

	uint32 size = entity->GetChildrenCount();
	for(uint32 i = 0; i < size; ++i)
	{
		SetSwitchHierarchy(entity->GetChild(i), switchIndex);
	}
}
Пример #6
0
void SceneHelper::EnumerateMaterialInstances(DAVA::Entity *forNode, DAVA::Vector<DAVA::NMaterial *> &materials)
{
    uint32 childrenCount = forNode->GetChildrenCount();
    for(uint32 i = 0; i < childrenCount; ++i)
        EnumerateMaterialInstances(forNode->GetChild(i), materials);

    RenderObject * ro = GetRenderObject(forNode);
    if(!ro) return;
    
    uint32 batchCount = ro->GetRenderBatchCount();
    for(uint32 i = 0; i < batchCount; ++i)
        materials.push_back(ro->GetRenderBatch(i)->GetMaterial());

}
void SwitchToRenerObjectConverter::FindRenderObjectsRecursive(Entity * fromEntity, Vector<std::pair<Entity*, RenderObject*> > & entityAndObjectPairs)
{
    RenderObject * ro = GetRenderObject(fromEntity);
    if(ro && ro->GetType() == RenderObject::TYPE_MESH)
    {
        entityAndObjectPairs.push_back(std::make_pair(fromEntity, ro));
    }

    int32 size = fromEntity->GetChildrenCount();
    for(int32 i = 0; i < size; ++i)
    {
        Entity * child = fromEntity->GetChild(i);
        FindRenderObjectsRecursive(child, entityAndObjectPairs);
    }
}
Пример #8
0
ParticleEmitter * GetEmitter(Entity * fromEntity)
{
	ParticleEmitter * emitter = 0;

	if(NULL != fromEntity)
	{
		RenderObject * object = GetRenderObject(fromEntity);
		if(object && object->GetType() == RenderObject::TYPE_PARTICLE_EMTITTER)
		{
			emitter = static_cast<ParticleEmitter*>(object);
		}
	}

	return emitter;
}
bool SwitchToRenerObjectConverter::MergeSwitch(Entity * entity)
{
    Vector<Entity*> entitiesToRemove;

    SwitchComponent * sw = GetSwitchComponent(entity);
    if(sw)
    {
        RenderComponent * rc = GetRenderComponent(entity);
        RenderObject * ro = 0;
        if(!rc)
        {
            ro = new Mesh();
            rc = new RenderComponent(ro);
            ro->Release();

            ro->SetAABBox(AABBox3(Vector3(0, 0, 0), Vector3(0, 0, 0)));
            entity->AddComponent(rc);
        }
        else
        {
            ro = rc->GetRenderObject();
        }

        DVASSERT(ro);

        int32 size = entity->GetChildrenCount();
        for(int32 i = 0; i < size; ++i)
        {
            Entity * sourceEntity = entity->GetChild(i);
            RenderObject * sourceRenderObject = GetRenderObject(sourceEntity);

            //workaround for custom properties for crashed model
            if(1 == i) // crash model
            {
                KeyedArchive *childProps = GetCustomPropertiesArchieve(sourceEntity);
                if(childProps && childProps->IsKeyExists("CollisionType"))
                {
                    KeyedArchive *entityProps = GetOrCreateCustomProperties(entity)->GetArchive();
                    entityProps->SetInt32("CollisionTypeCrashed", childProps->GetInt32("CollisionType", 0));
                }
            }
            //end of custom properties

            Vector<std::pair<Entity*, RenderObject*> > renderPairs;
            if(sourceRenderObject)
            {
                renderPairs.push_back(std::make_pair(sourceEntity, sourceRenderObject));
            }
            else
            {
                FindRenderObjectsRecursive(sourceEntity, renderPairs);
                DVASSERT(renderPairs.size() == 1);
                sourceRenderObject = renderPairs[0].second;
            }

            if(sourceRenderObject)
            {
                TransformComponent * sourceTransform = GetTransformComponent(sourceEntity);
                if (sourceTransform->GetLocalTransform() != Matrix4::IDENTITY)
                {
                    PolygonGroup * pg = sourceRenderObject->GetRenderBatchCount() > 0 ? sourceRenderObject->GetRenderBatch(0)->GetPolygonGroup() : 0;
                    if(pg && bakedPolygonGroups.end() == bakedPolygonGroups.find(pg))
                    {
                        sourceRenderObject->BakeGeometry(sourceTransform->GetLocalTransform());
                        bakedPolygonGroups.insert(pg);
                    }
                }

                uint32 sourceSize = sourceRenderObject->GetRenderBatchCount();
                while(sourceSize)
                {
                    int32 lodIndex, switchIndex;
                    RenderBatch * sourceRenderBatch = sourceRenderObject->GetRenderBatch(0, lodIndex, switchIndex);
                    sourceRenderBatch->Retain();
                    sourceRenderObject->RemoveRenderBatch(sourceRenderBatch);
                    ro->AddRenderBatch(sourceRenderBatch, lodIndex, i);
                    sourceRenderBatch->Release();
                    sourceSize--;
                }
            }

            renderPairs[0].first->RemoveComponent(Component::RENDER_COMPONENT);

            LodComponent * lc = GetLodComponent(sourceEntity);
            if((0 != lc) && (0 == GetLodComponent(entity)))
            {
                LodComponent * newLod = (LodComponent*)lc->Clone(entity);
                entity->AddComponent(newLod);
            }

            renderPairs[0].first->RemoveComponent(Component::LOD_COMPONENT);

            if(sourceEntity->GetChildrenCount() == 0)
            {
                entitiesToRemove.push_back(sourceEntity);
            }
        }
    }

    uint32 entitiesToRemoveCount = entitiesToRemove.size();
    for(uint32 i = 0; i < entitiesToRemoveCount; ++i)
    {
        entitiesToRemove[i]->GetParent()->RemoveNode(entitiesToRemove[i]);
    }

    return false;
}
Пример #10
0
void CEntityClient::SetCanBeSelected(bool IsCanBeSelected)
{
	m_bCanBeSelected = IsCanBeSelected;
	if (GetRenderObject())
		GetRenderObject()->SetCanBeSelect(IsCanBeSelected);
}