File Inventory.cpp
File List > Interfaces > Inventory.cpp
Go to the documentation of this file
#include <algorithm>
#include "Inventory.hpp"
namespace i_2D {
void Inventory::ConstructInventory(sf::Font &font, const std::vector<std::string> &interfaceAgentInventory) {
mCanvas = std::make_unique<sf::RectangleShape>();
mCanvas->setSize({mWorldSize.x, mWorldSize.y / 2});
mCanvas->setFillColor(sf::Color::Black);
mCanvas->setPosition(sf::Vector2f{0.f, 50.f});
mItems.clear();
mItems.resize(interfaceAgentInventory.size());
std::copy(interfaceAgentInventory.begin(), interfaceAgentInventory.end(),
mItems.begin());
// Set row & col sizes
if (mWorldSize.x > 1800) {
mCol = 5;
} else mCol = 3;
if (mWorldSize.y > 900) {
mRow = 4;
} else mRow = 3;
// Create 2d vector of buttons
size_t Index = 0;
for (int i = 0; i < mRow; i++) {
std::vector<std::unique_ptr<Button>> v1;
for (int j = 0; j < mCol; j++) {
v1.push_back(std::make_unique<Button>(
"", sf::Vector2f{(mWorldSize.x) / mCol, (mWorldSize.y / 2 - 50) / mRow},
sf::Color::Black, sf::Color::White, font));
if (Index < mItems.size()) {
v1[j]->SetString(mItems[Index]);
++Index;
} else {
v1[j]->SetString("empty");
}
v1[j]->SetPosition(sf::Vector2f{j * (mWorldSize.x / mCol),
mWorldSize.y / 2 + 50 + i * (mWorldSize.y / 2 - 50) / mRow});
}
mListOfButtons.push_back(std::move(v1));
}
}
void Inventory::DrawTo(sf::RenderWindow &window) {
window.draw(*mCanvas);
for (const auto &x: mListOfButtons) {
for (const auto &y: x) {
y->DrawTo(window);
}
}
if(mItemDisplay) {
sf::RectangleShape rect(
sf::Vector2f(window.getSize().x/2-10,(window.getSize().y-50)/2-10));
rect.setPosition({5,55});
rect.setTexture(&*mItemDisplay);
window.draw(rect);
}
}
std::string Inventory::HandleMouseMove(sf::RenderWindow &window) {
std::string s1 = "null";
for(int i = 0; i < mListOfButtons.size(); ++i){
for(int j = 0; j < mListOfButtons.size(); ++j){
if(mListOfButtons[i][j]->IsMouseOver(window)){
mListOfButtons[i][j]->SetBackColor(sf::Color::Magenta);
if(i*mCol+j < mItems.size()){
s1 = (mItems[i*mCol+j]);
if(s1 == "Boots"){
s1 = s1.substr(0,s1.size()-1);
}
s1[0] = tolower(s1[0]);
s1 += "Texture";
}
}else{
mListOfButtons[i][j]->SetBackColor(sf::Color::Black);
}
}
}
return s1;
}
}