refactored Resource's interface
This commit is contained in:
parent
c41bc849d1
commit
29307ce7f9
8 changed files with 21 additions and 36 deletions
|
@ -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; }
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue