Peoplemon  0.1.0
Peoplemon 3 game source documentation
RenderLevel.cpp
Go to the documentation of this file.
2 
3 #include <BLIB/Engine.hpp>
4 
5 namespace core
6 {
7 namespace map
8 {
9 void RenderLevel::create(bl::engine::Engine& engine, bl::rc::res::TextureRef ts,
10  unsigned int layerCount, const sf::Vector2u& ms, bl::rc::Scene* s) {
11  enginePtr = &engine;
12  tileset = ts;
13  scene = s;
14  mapSize = ms;
15 
16  const unsigned int initialCapacity = mapSize.x * mapSize.y / 2;
17  zones.reserve(layerCount);
18  for (unsigned int i = 0; i < layerCount; ++i) {
19  auto& zone = storage.emplace_back();
20  zones.emplace_back(&zone);
21 
22  zone.tileSprites.create(engine, tileset, initialCapacity);
23  zone.tileAnims.create(engine, initialCapacity);
24 
25  zone.tileSprites.addToScene(scene, bl::rc::UpdateSpeed::Static);
26  zone.tileAnims.addToScene(scene, bl::rc::UpdateSpeed::Static);
27  }
28 }
29 
30 void RenderLevel::swapLayers(unsigned int i1, unsigned int i2) {
31  const bool isGt = i1 > i2;
32  const auto it1 = std::next(storage.begin(), i1);
33  const auto it2 = std::next(storage.begin(), i2);
34  const auto s1 = isGt ? it1 : it2;
35  const auto s2 = isGt ? it2 : it1;
36  storage.splice(s2, storage, s1);
37  std::swap(zones[i1], zones[i2]);
38 }
39 
40 void RenderLevel::insertLayer(unsigned int position) {
41  auto& layer = *storage.emplace(std::next(storage.begin(), position));
42  zones.insert(zones.begin() + position, &layer);
43 
44  const unsigned int initialCapacity = mapSize.x * mapSize.y / 2;
45  layer.tileSprites.create(*enginePtr, tileset, initialCapacity);
46  layer.tileAnims.create(*enginePtr, initialCapacity);
47  layer.tileSprites.addToScene(scene, bl::rc::UpdateSpeed::Static);
48  layer.tileAnims.addToScene(scene, bl::rc::UpdateSpeed::Static);
49 }
50 
51 void RenderLevel::removeLayer(unsigned int position) {
52  storage.erase(std::next(storage.begin(), position));
53  zones.erase(zones.begin() + position);
54 }
55 
56 } // namespace map
57 } // namespace core
Core classes and functionality for both the editor and game.
void swapLayers(unsigned int l1, unsigned int l2)
Swaps two render layers.
Definition: RenderLevel.cpp:30
void removeLayer(unsigned int position)
Removes the layer at the given position.
Definition: RenderLevel.cpp:51
std::vector< Zone * > zones
The graphics primitives for all the layers in the level.
Definition: RenderLevel.hpp:26
void insertLayer(unsigned int position)
Inserts a layer at the given position.
Definition: RenderLevel.cpp:40
void create(bl::engine::Engine &engine, bl::rc::res::TextureRef tileset, unsigned int layerCount, const sf::Vector2u &mapSize, bl::rc::Scene *scene)
Creates the graphics primitives and adds them to the given scene.
Definition: RenderLevel.cpp:9