mirror of
https://github.com/enduro2d/enduro2d.git
synced 2025-12-16 14:08:59 +07:00
get sprite_renderer sprite from atlas
This commit is contained in:
@@ -9,6 +9,7 @@
|
||||
#include "../_high.hpp"
|
||||
|
||||
#include "../factory.hpp"
|
||||
#include "../assets/atlas_asset.hpp"
|
||||
#include "../assets/sprite_asset.hpp"
|
||||
|
||||
namespace e2d
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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()));
|
||||
|
||||
Reference in New Issue
Block a user