13 const glm::vec2 MenuPos(420.f, 45.f);
14 constexpr
float MenuWidth = -1.f;
15 constexpr
float MenuHeight = 460.f;
16 constexpr
float ArrowPadding = 2.f;
18 constexpr
float InfoTop = 60.f;
19 constexpr
float InfoLeft = 25.f;
20 constexpr
float InfoWidth = 375.f;
21 const glm::vec2 SeenBoxPos(InfoLeft, 485.f);
22 const glm::vec2 OwnBoxPos(InfoLeft, SeenBoxPos.y + 64.f);
23 constexpr
float InfoPadding = 105.f;
25 const sf::Color HiddenColor(255, 255, 255, 0);
26 const sf::Color ShowingColor(255, 255, 255, 255);
32 :
State(s,
bl::engine::StateMask::Menu) {
34 auto& joinPath = bl::util::FileUtil::joinPath;
36 menu.create(s.
engine(), s.
engine().renderer().getObserver(), bl::menu::NoSelector::create());
38 bgndTxtr = s.
engine().renderer().texturePool().getOrLoadTexture(
39 joinPath(ImgPath,
"Peopledex/background.png"));
40 background.create(s.
engine(), bgndTxtr);
42 seenTxtr = s.
engine().renderer().texturePool().getOrLoadTexture(
43 joinPath(ImgPath,
"Peopledex/seenBox.png"));
44 BL_LOG_INFO <<
"SeenBox texture: " << seenTxtr.id();
45 seenBox.create(s.
engine(), seenTxtr);
46 seenBox.getTransform().setPosition(SeenBoxPos);
47 seenBox.setParent(background);
50 seenLabel.setParent(seenBox);
51 seenLabel.getTransform().setPosition(InfoPadding - 12.f, seenTxtr->size().y * 0.5f);
53 ownedTxtr = s.
engine().renderer().texturePool().getOrLoadTexture(
54 joinPath(ImgPath,
"Peopledex/ownedBox.png"));
55 ownedBox.create(s.
engine(), ownedTxtr);
56 ownedBox.getTransform().setPosition(OwnBoxPos);
57 ownedBox.setParent(background);
60 ownedLabel.setParent(ownedBox);
61 ownedLabel.getTransform().setPosition(InfoPadding, ownedTxtr->size().y * 0.5f);
63 thumbTxtr = s.
engine().renderer().texturePool().getOrLoadTexture(
65 thumbnail.create(s.
engine(), thumbTxtr);
66 thumbnail.getTransform().setPosition(InfoLeft + InfoWidth * 0.5f, InfoTop + 20.f);
67 thumbnail.getTransform().setOrigin(100.f, 0.f);
68 thumbnail.setParent(background);
71 nameLabel.getTransform().setPosition(InfoLeft + 8.f, InfoTop + 245.f);
72 nameLabel.setParent(background);
75 descLabel.setParent(background);
76 descLabel.wordWrap(InfoWidth - 20.f);
77 descLabel.getTransform().setPosition(InfoLeft + 3.f, InfoTop + 275.f);
80 locationLabel.getTransform().setPosition(130.f, 442.f);
81 locationLabel.setParent(background);
83 upTxtr = s.
engine().renderer().texturePool().getOrLoadTexture(
84 joinPath(ImgPath,
"Peopledex/upArrow.png"));
85 BL_LOG_INFO <<
"UpArrow texture: " << upTxtr.id();
86 upArrow.create(s.
engine(), upTxtr);
87 upArrow.getTransform().setOrigin(0.f, upTxtr->size().y);
88 upArrow.setParent(background);
90 downTxtr = s.
engine().renderer().texturePool().getOrLoadTexture(
91 joinPath(ImgPath,
"Peopledex/downArrow.png"));
92 downArrow.create(s.
engine(), downTxtr);
93 downArrow.setParent(background);
99 bl::menu::Item::Ptr first = makeRow(all[1]);
100 bl::menu::Item* prev = first.get();
101 menu.setRootItem(first);
102 for (
unsigned int i = 2; i < all.size(); ++i) {
103 bl::menu::Item::Ptr row = makeRow(all[i]);
104 menu.addItem(row, prev, bl::menu::Item::Bottom);
108 menu.setPosition(MenuPos);
109 menu.setMaximumSize({MenuWidth, MenuHeight});
110 menu.setSelectedItem(first.get());
111 menuDriver.drive(&menu);
112 const float mw = menu.getBounds().width;
114 upArrow.getTransform().setPosition(MenuPos + glm::vec2(mw * 0.5f, -ArrowPadding));
115 downArrow.getTransform().setPosition(MenuPos.x + mw * 0.5f,
117 downTxtr->size().y - 5.f);
123 systems.
engine().inputSystem().getActor().addListener(*
this);
125 auto overlay = engine.renderer().getObserver().pushScene<bl::rc::Overlay>();
126 background.addToScene(overlay, bl::rc::UpdateSpeed::Static);
127 upArrow.addToScene(overlay, bl::rc::UpdateSpeed::Static);
128 downArrow.addToScene(overlay, bl::rc::UpdateSpeed::Static);
129 seenBox.addToScene(overlay, bl::rc::UpdateSpeed::Static);
130 seenLabel.addToScene(overlay, bl::rc::UpdateSpeed::Static);
131 ownedBox.addToScene(overlay, bl::rc::UpdateSpeed::Static);
132 ownedLabel.addToScene(overlay, bl::rc::UpdateSpeed::Static);
133 thumbnail.addToScene(overlay, bl::rc::UpdateSpeed::Static);
134 nameLabel.addToScene(overlay, bl::rc::UpdateSpeed::Static);
135 descLabel.addToScene(overlay, bl::rc::UpdateSpeed::Static);
136 locationLabel.addToScene(overlay, bl::rc::UpdateSpeed::Static);
137 menu.addToOverlay(background.entity());
141 systems.
engine().inputSystem().getActor().removeListener(*
this);
142 engine.renderer().getObserver().popScene();
147 bool Peopledex::observe(
const bl::input::Actor&,
unsigned int ctrl, bl::input::DispatchType,
150 else { menuDriver.sendControl(ctrl, fromEvent); }
158 thumbTxtr =
systems.
engine().renderer().texturePool().getOrLoadTexture(
162 nameLabel.getSection().setString(
"???");
163 descLabel.getSection().setString(
"");
164 thumbTxtr =
systems.
engine().renderer().texturePool().getOrLoadTexture(
167 thumbnail.getTransform().setScale(200.f / thumbTxtr->size());
168 thumbnail.setTexture(thumbTxtr);
170 locationLabel.getSection().setString(
172 seenLabel.getSection().setString(
174 seenLabel.getTransform().setOrigin(
175 0.f, seenLabel.getLocalBounds().height * 0.5f + seenLabel.getLocalBounds().top * 0.5f);
176 ownedLabel.getSection().setString(
178 ownedLabel.getTransform().setOrigin(
179 0.f, ownedLabel.getLocalBounds().height * 0.5f + ownedLabel.getLocalBounds().top * 0.5f);
181 upArrow.setHidden(ppl == firstId);
182 downArrow.setHidden(ppl == lastId);
192 row->getSignal(bl::menu::Item::Activated)
193 .willAlwaysCall(std::bind(&Peopledex::onSelect,
this, ppl));
194 row->getSignal(bl::menu::Item::Selected)
195 .willAlwaysCall(std::bind(&Peopledex::onHighlight,
this, ppl));
Parent namespace for all functionality unique to the game.
static const std::string & description(Id id)
Returns the description of the given Peoplemon.
static const std::vector< Id > & validIds()
Returtns the list of all valid ids.
static const std::string & name(Id id)
Returns the name of the given Peoplemon.
static std::string thumbnailImage(Id id)
Returns the path of the image to render as the peoplemon thumbnail.
const std::string & getFirstSeenLocation(pplmn::Id peoplemon) const
Returns the name of the location the given peoplemon was first spotted at.
IntelLevel getIntelLevel(pplmn::Id peoplemon) const
Returns the level of intel on the given peoplemon.
unsigned int getSeen(pplmn::Id peoplemon) const
Returns how many of the given peoplemon have been seen.
unsigned int getCaught(pplmn::Id peoplemon) const
Returns how many of the given peoplemon have been caught.
static const sf::VulkanFont & MenuFont()
static const std::string & MenuImagePath()
static int WindowHeight()
player::State & state()
Returns the state of the player.
Owns all primary systems and a reference to the engine.
const bl::engine::Engine & engine() const
Const accessor for the Engine.
Player & player()
Returns the player system.
static Ptr create(core::pplmn::Id ppl, const core::player::Peopledex &dex)
Create a new peopledex row.
std::shared_ptr< PeopledexRow > Ptr
Pointer to the row item.
The peopledex menu state.
virtual void deactivate(bl::engine::Engine &engine) override
Deactivates the state.
virtual void update(bl::engine::Engine &engine, float dt, float) override
Updates the state and menus and whatnot.
virtual void activate(bl::engine::Engine &engine) override
Activates the state.
static bl::engine::State::Ptr create(core::system::Systems &systems)
Create a new Peopledex state.
virtual const char * name() const override
Returns "Peopledex".
Parent to all game states. Provides some commonly required data like core game systems.
core::system::Systems & systems