get sprite_renderer sprite from atlas

This commit is contained in:
2019-05-24 04:53:33 +07:00
parent cc739d6bd2
commit fa5080fd35
5 changed files with 28 additions and 4 deletions

View File

@@ -9,6 +9,7 @@
#include "../_high.hpp"
#include "../factory.hpp"
#include "../assets/atlas_asset.hpp"
#include "../assets/sprite_asset.hpp"
namespace e2d

View File

@@ -182,7 +182,7 @@ namespace e2d
asset_dependencies() = default;
~asset_dependencies() noexcept = default;
template < typename Asset >
template < typename Asset, typename Nested = Asset >
asset_dependencies& add_dependency(str_view address);
stdex::promise<asset_group> load_async(const library& library) const;
private:

View File

@@ -288,7 +288,7 @@ namespace e2d
// asset_dependencies
//
template < typename Asset >
template < typename Asset, typename Nested >
asset_dependencies& asset_dependencies::add_dependency(str_view address) {
asset_dependency_base_iptr dep(new asset_dependency<Asset>(address));
auto iter = std::upper_bound(

View File

@@ -138,7 +138,7 @@ namespace
"--> Parent address: %0\n"
"--> Dependency address: %1",
parent_address,
root["flipbook"].GetString());
root["prototype"].GetString());
throw prefab_asset_loading_exception();
}
content = proto_res->content();
@@ -154,10 +154,13 @@ namespace
parent_address,
component_root->value,
dependencies);
the<factory>().fill_prototype(
bool success = the<factory>().fill_prototype(
component_root->name.GetString(),
content.prototype(),
ctx);
if ( !success ) {
throw prefab_asset_loading_exception();
}
}
}

View File

@@ -15,6 +15,7 @@ namespace e2d
"properties" : {
"tint" : { "$ref": "#/common_definitions/color" },
"filtering" : { "type" : "boolean" },
"atlas" : { "$ref": "#/common_definitions/address" },
"sprite" : { "$ref": "#/common_definitions/address" }
}
})json";
@@ -41,6 +42,20 @@ namespace e2d
component.filtering(filtering);
}
if ( ctx.root.HasMember("atlas") ) {
auto sprite = ctx.dependencies.find_asset<atlas_asset, sprite_asset>(
path::combine(ctx.parent_address, ctx.root["atlas"].GetString()));
if ( !sprite ) {
the<debug>().error("SPRITE_RENDERER: Dependency 'atlas' is not found:\n"
"--> Parent address: %0\n"
"--> Dependency address: %1",
ctx.parent_address,
ctx.root["atlas"].GetString());
return false;
}
component.sprite(sprite);
}
if ( ctx.root.HasMember("sprite") ) {
auto sprite = ctx.dependencies.find_asset<sprite_asset>(
path::combine(ctx.parent_address, ctx.root["sprite"].GetString()));
@@ -62,6 +77,11 @@ namespace e2d
asset_dependencies& dependencies,
const collect_context& ctx) const
{
if ( ctx.root.HasMember("atlas") ) {
dependencies.add_dependency<atlas_asset, sprite_asset>(
path::combine(ctx.parent_address, ctx.root["atlas"].GetString()));
}
if ( ctx.root.HasMember("sprite") ) {
dependencies.add_dependency<sprite_asset>(
path::combine(ctx.parent_address, ctx.root["sprite"].GetString()));