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); } } } } }
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); } } } } }
SkyboxRenderObject * GetSkybox(const Entity * fromEntity) { RenderObject *ro = GetRenderObject(fromEntity); if(ro && ro->GetType() == RenderObject::TYPE_SKYBOX) { return (static_cast<SkyboxRenderObject *>(ro)); } return NULL; }
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; }
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); } }
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); } }
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; }
void CEntityClient::SetCanBeSelected(bool IsCanBeSelected) { m_bCanBeSelected = IsCanBeSelected; if (GetRenderObject()) GetRenderObject()->SetCanBeSelect(IsCanBeSelected); }