Peoplemon  0.1.0
Peoplemon 3 game source documentation
Collisions.cpp
Go to the documentation of this file.
2 
3 #include <Core/Resources.hpp>
5 #include <type_traits>
6 
7 namespace editor
8 {
9 namespace page
10 {
11 using namespace bl::gui;
12 
13 namespace
14 {
15 using C = core::map::Collision;
16 
17 const std::pair<std::string, core::map::Collision> source[] = {
18  {"EditorResources/Collisions/all.png", C::Open},
19  {"EditorResources/Collisions/none.png", C::Blocked},
20  {"EditorResources/Collisions/noTop.png", C::TopClosed},
21  {"EditorResources/Collisions/noRight.png", C::RightClosed},
22  {"EditorResources/Collisions/noBottom.png", C::BottomClosed},
23  {"EditorResources/Collisions/noLeft.png", C::LeftClosed},
24  {"EditorResources/Collisions/topRight.png", C::TopRightOpen},
25  {"EditorResources/Collisions/bottomRight.png", C::BottomRightOpen},
26  {"EditorResources/Collisions/bottomLeft.png", C::BottomLeftOpen},
27  {"EditorResources/Collisions/topLeft.png", C::TopLeftOpen},
28  {"EditorResources/Collisions/topBottom.png", C::TopBottomOpen},
29  {"EditorResources/Collisions/leftRight.png", C::LeftRightOpen},
30  {"EditorResources/Collisions/top.png", C::TopOpen},
31  {"EditorResources/Collisions/right.png", C::RightOpen},
32  {"EditorResources/Collisions/bottom.png", C::BottomOpen},
33  {"EditorResources/Collisions/left.png", C::LeftOpen},
34  {"EditorResources/Collisions/water.png", C::SurfRequired},
35  {"EditorResources/Collisions/fall.png", C::WaterfallRequired},
36  {"EditorResources/Collisions/ledge.png", C::LedgeHop}};
37 constexpr std::size_t nColTypes = std::extent<decltype(source)>::value;
38 
39 } // namespace
40 
42  content = Box::create(LinePacker::create(LinePacker::Vertical, 6));
43 
44  Box::Ptr row = Box::create(LinePacker::create(LinePacker::Horizontal, 4));
45  RadioButton::Group* group = nullptr;
46  for (unsigned int i = 0; i < nColTypes; ++i) {
47  const auto& pair = source[i];
48 
49  auto txtr = ImageManager::load(pair.first);
50  Image::Ptr img = Image::create(txtr);
51  img->scaleToSize({64, 64});
54  if (group == nullptr) but->setValue(true);
55  but->getSignal(Event::LeftClicked).willAlwaysCall([this, &pair](const Event&, Element*) {
56  active = pair.second;
57  });
58  group = but->getRadioGroup();
59  row->pack(but);
60 
61  if ((i + 1) % 4 == 0) {
62  content->pack(row, true, false);
63  row = Box::create(LinePacker::create(LinePacker::Horizontal, 4));
64  }
65  }
66  content->pack(row);
67 }
68 
69 Element::Ptr Collisions::getContent() { return content; }
70 
71 core::map::Collision Collisions::selected() const { return active; }
72 
73 } // namespace page
74 } // namespace editor
Collision
The different types of collisions in maps.
Definition: Collision.hpp:16
All classes and functionality used for implementing the game editor.
Definition: Tile.hpp:11
static Ptr create(bl::gui::Element::Ptr child, bl::gui::RadioButton::Group *group=nullptr)
Creates a new HighlightRadioButton.
std::shared_ptr< HighlightRadioButton > Ptr
Pointer to a HighlightRadioButton.
bl::gui::Element::Ptr getContent()
Returns GUI content to pack.
Definition: Collisions.cpp:69
Collisions()
Loads collision images and builds the gui content.
Definition: Collisions.cpp:41
core::map::Collision selected() const
Returns the currently selected collision.
Definition: Collisions.cpp:71