From 4c73347244a51bdd3f25e751afe641664e56ca3f Mon Sep 17 00:00:00 2001 From: Kelly Rauchenberger Date: Sat, 23 Feb 2019 15:37:53 -0500 Subject: Entities to be rendered are sorted by render layer Partially just for fun. --- src/renderer.cpp | 32 +++++++++++++++-------- src/simulation.cpp | 77 ++++++++++++++++++++++++++---------------------------- 2 files changed, 58 insertions(+), 51 deletions(-) (limited to 'src') diff --git a/src/renderer.cpp b/src/renderer.cpp index 0feee50..5580073 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -2,6 +2,7 @@ #include "simulation.h" #include "consts.h" #include "level.h" +#include "views.h" Renderer::Renderer() { @@ -76,19 +77,28 @@ void Renderer::render(const Simulation& sim) } } - for (const Entity& entity : sim.getActive() | sim.entityView()) - { - SDL_SetRenderDrawColor(ren_.get(), entity.colorVal, entity.colorVal, 65, 255); + constexpr Layer renderOrder[] = { Layer::track, Layer::object }; - SDL_Rect rect { - static_cast(entity.pos.x()), - static_cast(entity.pos.y()), - static_cast(entity.size.w()), - static_cast(entity.size.h()) - }; + ranges::for_each( + ranges::view::for_each( + renderOrder, + [&] (Layer layer) { + return sim.getActive() | + sim.entityView() | + views::isOnLayer(layer); + }), + [&] (const Entity& entity) { + SDL_SetRenderDrawColor(ren_.get(), entity.colorVal, entity.colorVal, 65, 255); - SDL_RenderFillRect(ren_.get(), &rect); - } + SDL_Rect rect { + static_cast(entity.pos.x()), + static_cast(entity.pos.y()), + static_cast(entity.size.w()), + static_cast(entity.size.h()) + }; + + SDL_RenderFillRect(ren_.get(), &rect); + }); //SDL_RenderCopy(ren_.get(), canvas.get(), nullptr, nullptr); SDL_RenderPresent(ren_.get()); diff --git a/src/simulation.cpp b/src/simulation.cpp index 27ac6ab..98687b6 100644 --- a/src/simulation.cpp +++ b/src/simulation.cpp @@ -8,7 +8,44 @@ Simulation::Simulation( const Level& level) : level_(level) { + id_type trainId = emplaceEntity(); + Entity& train = getEntity(trainId); + train.size = TILE_SIZE; + train.speed = schedule_.getBPS() * 2.0; + train.colliderType = ColliderType::train; + train.scheduled = true; + train.colorVal = 90; + train.gridPos = vec2s { 6, 1 }; + train.moveDir = Direction::left; + id_type playerId = emplaceEntity(); + Entity& player = getEntity(playerId); + player.size = TILE_SIZE; + player.speed = 3.0; + player.controllable = true; + player.colliderType = ColliderType::player; + player.colorVal = 180; + player.gridPos = vec2s { 1, 5 }; + + id_type crateId = emplaceEntity(); + Entity& crate = getEntity(crateId); + crate.size = TILE_SIZE; + crate.speed = schedule_.getBPS() * 2.0; + crate.colliderType = ColliderType::crate; + crate.canBePushedBy.insert(ColliderType::player); + crate.canBePushedBy.insert(ColliderType::crate); + crate.canBePushedBy.insert(ColliderType::train); + crate.gridPos = vec2s { 4, 5 }; + + id_type crateId2 = emplaceEntity(); + Entity& crate2 = getEntity(crateId2); + crate2.size = TILE_SIZE; + crate2.speed = schedule_.getBPS() * 2.0; + crate2.colliderType = ColliderType::crate; + crate2.canBePushedBy.insert(ColliderType::player); + crate2.canBePushedBy.insert(ColliderType::crate); + crate2.canBePushedBy.insert(ColliderType::train); + crate2.gridPos = vec2s { 6, 7 }; id_type trackId = emplaceEntity(); Entity& track = getEntity(trackId); @@ -49,46 +86,6 @@ Simulation::Simulation( track4.trackDir2 = Direction::down; track4.colorVal = 130; track4.gridPos = vec2s { 7, 1 }; - - - id_type trainId = emplaceEntity(); - Entity& train = getEntity(trainId); - train.size = TILE_SIZE; - train.speed = schedule_.getBPS() * 2.0; - train.colliderType = ColliderType::train; - train.scheduled = true; - train.colorVal = 90; - train.gridPos = vec2s { 6, 1 }; - train.moveDir = Direction::left; - - id_type playerId = emplaceEntity(); - Entity& player = getEntity(playerId); - player.size = TILE_SIZE; - player.speed = 3.0; - player.controllable = true; - player.colliderType = ColliderType::player; - player.colorVal = 180; - player.gridPos = vec2s { 1, 5 }; - - id_type crateId = emplaceEntity(); - Entity& crate = getEntity(crateId); - crate.size = TILE_SIZE; - crate.speed = schedule_.getBPS() * 2.0; - crate.colliderType = ColliderType::crate; - crate.canBePushedBy.insert(ColliderType::player); - crate.canBePushedBy.insert(ColliderType::crate); - crate.canBePushedBy.insert(ColliderType::train); - crate.gridPos = vec2s { 4, 5 }; - - id_type crateId2 = emplaceEntity(); - Entity& crate2 = getEntity(crateId2); - crate2.size = TILE_SIZE; - crate2.speed = schedule_.getBPS() * 2.0; - crate2.colliderType = ColliderType::crate; - crate2.canBePushedBy.insert(ColliderType::player); - crate2.canBePushedBy.insert(ColliderType::crate); - crate2.canBePushedBy.insert(ColliderType::train); - crate2.gridPos = vec2s { 6, 7 }; } void Simulation::tick( -- cgit 1.4.1