|
@@ -28,10 +28,29 @@ public:
|
|
|
|
|
|
void update(SDL_Renderer *renderer, std::unique_ptr<AssetStore> &assetStore)
|
|
|
{
|
|
|
- for (auto entity: this->getSystemEntities())
|
|
|
+ struct RenderableEntity
|
|
|
{
|
|
|
- const auto transform = entity.getComponent<TransformComponent>();
|
|
|
- const auto sprite = entity.getComponent<SpriteComponent>();
|
|
|
+ TransformComponent transformComponent;
|
|
|
+ SpriteComponent spriteComponent;
|
|
|
+ };
|
|
|
+ std::vector<RenderableEntity> renderableEntities;
|
|
|
+ for(auto entity: this->getSystemEntities())
|
|
|
+ {
|
|
|
+ RenderableEntity renderableEntity;
|
|
|
+ renderableEntity.spriteComponent = entity.getComponent<SpriteComponent>();
|
|
|
+ renderableEntity.transformComponent = entity.getComponent<TransformComponent>();
|
|
|
+ renderableEntities.emplace_back(renderableEntity);
|
|
|
+ }
|
|
|
+
|
|
|
+ std::sort(renderableEntities.begin(), renderableEntities.end(), [](const RenderableEntity &a, const RenderableEntity &b)
|
|
|
+ {
|
|
|
+ return a.spriteComponent.zIndex < b.spriteComponent.zIndex;
|
|
|
+ });
|
|
|
+
|
|
|
+ for(auto entity: renderableEntities)
|
|
|
+ {
|
|
|
+ const auto transform = entity.transformComponent;
|
|
|
+ const auto sprite = entity.spriteComponent;
|
|
|
|
|
|
SDL_Texture *texture = assetStore->getTexture(sprite.assetId);
|
|
|
SDL_Rect destRect =
|