diff options
-rw-r--r-- | src/renderer.cpp | 32 | ||||
-rw-r--r-- | src/simulation.cpp | 77 |
2 files changed, 58 insertions, 51 deletions
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 @@ | |||
2 | #include "simulation.h" | 2 | #include "simulation.h" |
3 | #include "consts.h" | 3 | #include "consts.h" |
4 | #include "level.h" | 4 | #include "level.h" |
5 | #include "views.h" | ||
5 | 6 | ||
6 | Renderer::Renderer() | 7 | Renderer::Renderer() |
7 | { | 8 | { |
@@ -76,19 +77,28 @@ void Renderer::render(const Simulation& sim) | |||
76 | } | 77 | } |
77 | } | 78 | } |
78 | 79 | ||
79 | for (const Entity& entity : sim.getActive() | sim.entityView()) | 80 | constexpr Layer renderOrder[] = { Layer::track, Layer::object }; |
80 | { | ||
81 | SDL_SetRenderDrawColor(ren_.get(), entity.colorVal, entity.colorVal, 65, 255); | ||
82 | 81 | ||
83 | SDL_Rect rect { | 82 | ranges::for_each( |
84 | static_cast<int>(entity.pos.x()), | 83 | ranges::view::for_each( |
85 | static_cast<int>(entity.pos.y()), | 84 | renderOrder, |
86 | static_cast<int>(entity.size.w()), | 85 | [&] (Layer layer) { |
87 | static_cast<int>(entity.size.h()) | 86 | return sim.getActive() | |
88 | }; | 87 | sim.entityView() | |
88 | views::isOnLayer(layer); | ||
89 | }), | ||
90 | [&] (const Entity& entity) { | ||
91 | SDL_SetRenderDrawColor(ren_.get(), entity.colorVal, entity.colorVal, 65, 255); | ||
89 | 92 | ||
90 | SDL_RenderFillRect(ren_.get(), &rect); | 93 | SDL_Rect rect { |
91 | } | 94 | static_cast<int>(entity.pos.x()), |
95 | static_cast<int>(entity.pos.y()), | ||
96 | static_cast<int>(entity.size.w()), | ||
97 | static_cast<int>(entity.size.h()) | ||
98 | }; | ||
99 | |||
100 | SDL_RenderFillRect(ren_.get(), &rect); | ||
101 | }); | ||
92 | 102 | ||
93 | //SDL_RenderCopy(ren_.get(), canvas.get(), nullptr, nullptr); | 103 | //SDL_RenderCopy(ren_.get(), canvas.get(), nullptr, nullptr); |
94 | SDL_RenderPresent(ren_.get()); | 104 | 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( | |||
8 | const Level& level) : | 8 | const Level& level) : |
9 | level_(level) | 9 | level_(level) |
10 | { | 10 | { |
11 | id_type trainId = emplaceEntity(); | ||
12 | Entity& train = getEntity(trainId); | ||
13 | train.size = TILE_SIZE; | ||
14 | train.speed = schedule_.getBPS() * 2.0; | ||
15 | train.colliderType = ColliderType::train; | ||
16 | train.scheduled = true; | ||
17 | train.colorVal = 90; | ||
18 | train.gridPos = vec2s { 6, 1 }; | ||
19 | train.moveDir = Direction::left; | ||
11 | 20 | ||
21 | id_type playerId = emplaceEntity(); | ||
22 | Entity& player = getEntity(playerId); | ||
23 | player.size = TILE_SIZE; | ||
24 | player.speed = 3.0; | ||
25 | player.controllable = true; | ||
26 | player.colliderType = ColliderType::player; | ||
27 | player.colorVal = 180; | ||
28 | player.gridPos = vec2s { 1, 5 }; | ||
29 | |||
30 | id_type crateId = emplaceEntity(); | ||
31 | Entity& crate = getEntity(crateId); | ||
32 | crate.size = TILE_SIZE; | ||
33 | crate.speed = schedule_.getBPS() * 2.0; | ||
34 | crate.colliderType = ColliderType::crate; | ||
35 | crate.canBePushedBy.insert(ColliderType::player); | ||
36 | crate.canBePushedBy.insert(ColliderType::crate); | ||
37 | crate.canBePushedBy.insert(ColliderType::train); | ||
38 | crate.gridPos = vec2s { 4, 5 }; | ||
39 | |||
40 | id_type crateId2 = emplaceEntity(); | ||
41 | Entity& crate2 = getEntity(crateId2); | ||
42 | crate2.size = TILE_SIZE; | ||
43 | crate2.speed = schedule_.getBPS() * 2.0; | ||
44 | crate2.colliderType = ColliderType::crate; | ||
45 | crate2.canBePushedBy.insert(ColliderType::player); | ||
46 | crate2.canBePushedBy.insert(ColliderType::crate); | ||
47 | crate2.canBePushedBy.insert(ColliderType::train); | ||
48 | crate2.gridPos = vec2s { 6, 7 }; | ||
12 | 49 | ||
13 | id_type trackId = emplaceEntity(); | 50 | id_type trackId = emplaceEntity(); |
14 | Entity& track = getEntity(trackId); | 51 | Entity& track = getEntity(trackId); |
@@ -49,46 +86,6 @@ Simulation::Simulation( | |||
49 | track4.trackDir2 = Direction::down; | 86 | track4.trackDir2 = Direction::down; |
50 | track4.colorVal = 130; | 87 | track4.colorVal = 130; |
51 | track4.gridPos = vec2s { 7, 1 }; | 88 | track4.gridPos = vec2s { 7, 1 }; |
52 | |||
53 | |||
54 | id_type trainId = emplaceEntity(); | ||
55 | Entity& train = getEntity(trainId); | ||
56 | train.size = TILE_SIZE; | ||
57 | train.speed = schedule_.getBPS() * 2.0; | ||
58 | train.colliderType = ColliderType::train; | ||
59 | train.scheduled = true; | ||
60 | train.colorVal = 90; | ||
61 | train.gridPos = vec2s { 6, 1 }; | ||
62 | train.moveDir = Direction::left; | ||
63 | |||
64 | id_type playerId = emplaceEntity(); | ||
65 | Entity& player = getEntity(playerId); | ||
66 | player.size = TILE_SIZE; | ||
67 | player.speed = 3.0; | ||
68 | player.controllable = true; | ||
69 | player.colliderType = ColliderType::player; | ||
70 | player.colorVal = 180; | ||
71 | player.gridPos = vec2s { 1, 5 }; | ||
72 | |||
73 | id_type crateId = emplaceEntity(); | ||
74 | Entity& crate = getEntity(crateId); | ||
75 | crate.size = TILE_SIZE; | ||
76 | crate.speed = schedule_.getBPS() * 2.0; | ||
77 | crate.colliderType = ColliderType::crate; | ||
78 | crate.canBePushedBy.insert(ColliderType::player); | ||
79 | crate.canBePushedBy.insert(ColliderType::crate); | ||
80 | crate.canBePushedBy.insert(ColliderType::train); | ||
81 | crate.gridPos = vec2s { 4, 5 }; | ||
82 | |||
83 | id_type crateId2 = emplaceEntity(); | ||
84 | Entity& crate2 = getEntity(crateId2); | ||
85 | crate2.size = TILE_SIZE; | ||
86 | crate2.speed = schedule_.getBPS() * 2.0; | ||
87 | crate2.colliderType = ColliderType::crate; | ||
88 | crate2.canBePushedBy.insert(ColliderType::player); | ||
89 | crate2.canBePushedBy.insert(ColliderType::crate); | ||
90 | crate2.canBePushedBy.insert(ColliderType::train); | ||
91 | crate2.gridPos = vec2s { 6, 7 }; | ||
92 | } | 89 | } |
93 | 90 | ||
94 | void Simulation::tick( | 91 | void Simulation::tick( |