refactored Resource's interface

This commit is contained in:
Mikulas Florek 2014-11-28 18:46:13 +01:00
parent c41bc849d1
commit 29307ce7f9
8 changed files with 21 additions and 36 deletions

View file

@ -33,6 +33,17 @@ namespace Lumix
bool isUnloading() const { return State::UNLOADING == m_state; }
bool isFailure() const { return State::FAILURE == m_state; }
template <typename C, void (C::*Function)(State, State)>
void onLoaded(C* instance)
{
m_cb.bind<C, Function>(instance);
if (isReady())
{
(instance->*Function)(State::READY, State::READY);
}
}
ObserverCallback& getObserverCb() { return m_cb; }
size_t size() const { return m_size; }

View file

@ -304,11 +304,8 @@ void Material::setShader(Shader* shader)
if (m_shader)
{
addDependency(*m_shader);
m_shader->getObserverCb().bind<Material, &Material::shaderLoaded>(this);
if(m_shader->isReady())
{
shaderLoaded(Resource::State::READY, Resource::State::READY);
}
m_shader->onLoaded<Material, &Material::shaderLoaded>(this);
}
}

View file

@ -31,7 +31,7 @@ void ModelInstance::setModel(Model* model)
m_model = model;
if (m_model)
{
m_model->getObserverCb().bind<ModelInstance, &ModelInstance::modelUpdate>(this);
m_model->onLoaded<ModelInstance, &ModelInstance::modelUpdate>(this);
m_pose.resize(m_model->getBoneCount());
m_model->getPose(m_pose);
}

View file

@ -415,14 +415,7 @@ struct PipelineInstanceImpl : public PipelineInstance
m_light_dir.set(0, -1, 0);
m_width = m_height = -1;
m_shadowmap_framebuffer = NULL;
if(pipeline.isReady())
{
sourceLoaded(Resource::State::EMPTY, Resource::State::READY);
}
else
{
pipeline.getObserverCb().bind<PipelineInstanceImpl, &PipelineInstanceImpl::sourceLoaded>(this);
}
pipeline.onLoaded<PipelineInstanceImpl, &PipelineInstanceImpl::sourceLoaded>(this);
}
~PipelineInstanceImpl()

View file

@ -108,7 +108,7 @@ namespace Lumix
, m_ref_count(0)
, m_model(model)
{
m_model->getObserverCb().bind<ModelLoadedCallback, &ModelLoadedCallback::callback>(this);
m_model->onLoaded<ModelLoadedCallback, &ModelLoadedCallback::callback>(this);
}
~ModelLoadedCallback()

View file

@ -191,7 +191,7 @@ namespace Lumix
if (m_grass_model)
{
m_grass_model->getResourceManager().get(ResourceManager::MODEL)->unload(*m_grass_model);
m_grass_model->getObserverCb().unbind<GrassType, &GrassType::grassLoaded>(this);
m_grass_model->onLoaded<GrassType, &GrassType::grassLoaded>(this);
m_terrain.m_allocator.deleteObject(m_grass_mesh);
m_terrain.m_allocator.deleteObject(m_grass_geometry);
}
@ -312,11 +312,7 @@ namespace Lumix
if (path.isValid())
{
type.m_grass_model = static_cast<Model*>(m_scene.getEngine().getResourceManager().get(ResourceManager::MODEL)->load(path));
type.m_grass_model->getObserverCb().bind<GrassType, &GrassType::grassLoaded>(&type);
if(type.m_grass_model->isReady())
{
type.grassLoaded(Resource::State::READY, Resource::State::READY);
}
type.m_grass_model->onLoaded<GrassType, &GrassType::grassLoaded>(&type);
}
}
@ -568,11 +564,7 @@ namespace Lumix
if (m_mesh && m_material)
{
m_mesh->setMaterial(m_material);
m_material->getObserverCb().bind<Terrain, &Terrain::onMaterialLoaded>(this);
if (m_material->isReady())
{
onMaterialLoaded(Resource::State::READY, Resource::State::READY);
}
m_material->onLoaded<Terrain, &Terrain::onMaterialLoaded>(this);
}
}
else if(material)

View file

@ -348,12 +348,8 @@ struct PhysicsSceneImpl : public PhysicsScene
m_terrains[cmp.index]->m_heightmap->getObserverCb().unbind<Terrain, &Terrain::heightmapLoaded>(m_terrains[cmp.index]);
}
m_terrains[cmp.index]->m_heightmap = static_cast<Texture*>(m_engine->getResourceManager().get(ResourceManager::TEXTURE)->load(str.c_str()));
m_terrains[cmp.index]->m_heightmap->getObserverCb().bind<Terrain, &Terrain::heightmapLoaded>(m_terrains[cmp.index]);
m_terrains[cmp.index]->m_heightmap->onLoaded<Terrain, &Terrain::heightmapLoaded>(m_terrains[cmp.index]);
m_terrains[cmp.index]->m_heightmap->addDataReference();
if (m_terrains[cmp.index]->m_heightmap->isReady())
{
m_terrains[cmp.index]->heightmapLoaded(Resource::State::LOADING, Resource::State::READY);
}
}

View file

@ -1995,11 +1995,7 @@ void PropertyView::setSelectedResource(Lumix::Resource* resource)
m_selected_resource = resource;
if (resource)
{
m_selected_resource->getObserverCb().bind<PropertyView, &PropertyView::onSelectedResourceLoaded>(this);
if (m_selected_resource->isReady() || m_selected_resource->isFailure())
{
onSelectedResourceLoaded(Lumix::Resource::State::READY, Lumix::Resource::State::READY);
}
m_selected_resource->onLoaded<PropertyView, &PropertyView::onSelectedResourceLoaded>(this);
}
}