diff options
Diffstat (limited to '')
-rw-r--r-- | src/UI/VillagerTradeWindow.h | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/src/UI/VillagerTradeWindow.h b/src/UI/VillagerTradeWindow.h new file mode 100644 index 000000000..ec5ea26e7 --- /dev/null +++ b/src/UI/VillagerTradeWindow.h @@ -0,0 +1,74 @@ + +#pragma once + +#include "Window.h" +#include "SlotArea.h" +#include "../Mobs/Villager.h" + + + + + +class cVillagerTradeWindow : + public cWindow +{ + typedef cWindow super; + +public: + cVillagerTradeWindow(cVillager & Villager) : + cWindow(wtVillagerTrade, Printf("Villager № %i", Villager.GetUniqueID())), + m_Villager(Villager) + { + m_SlotAreas.push_back(new cSlotAreaVillagerTrade(m_Villager, *this)); + m_SlotAreas.push_back(new cSlotAreaInventory(*this)); + m_SlotAreas.push_back(new cSlotAreaHotBar(*this)); + } + + virtual void DistributeStack(cItem & a_ItemStack, int a_Slot, cPlayer & a_Player, cSlotArea * a_ClickedArea, bool a_ShouldApply) override + { + cSlotAreas AreasInOrder; + + if (a_ClickedArea == m_SlotAreas[0]) + { + // Trading Area + AreasInOrder.push_back(m_SlotAreas[1]); /* Inventory */ + AreasInOrder.push_back(m_SlotAreas[2]); /* Hotbar */ + super::DistributeStackToAreas(a_ItemStack, a_Player, AreasInOrder, a_ShouldApply, true); + } + else if (a_ClickedArea == m_SlotAreas[1]) + { + // Inventory + AreasInOrder.push_back(m_SlotAreas[2]); /* Hotbar */ + super::DistributeStackToAreas(a_ItemStack, a_Player, AreasInOrder, a_ShouldApply, true); + } + else + { + // Hotbar + AreasInOrder.push_back(m_SlotAreas[1]); /* Inventory */ + super::DistributeStackToAreas(a_ItemStack, a_Player, AreasInOrder, a_ShouldApply, true); + } + } + + virtual void OpenedByPlayer(cPlayer & Player) override + { + super::OpenedByPlayer(Player); + m_TradeIndexOpenedByPlayer[&Player] = 0; + m_Villager.HandleTradeInProgress(); + } + + void PlayerChangedTradeOffer(const cPlayer & Player, unsigned NewIndex) + { + m_TradeIndexOpenedByPlayer[&Player] = NewIndex; + static_cast<cSlotAreaVillagerTrade *>(m_SlotAreas[0])->UpdateTrade(Player); + m_Villager.HandleTradeInProgress(); + } + + unsigned GetPlayerTradeOfferIndex(const cPlayer & Player) + { + return m_TradeIndexOpenedByPlayer[&Player]; + } + +private: + cVillager & m_Villager; + std::unordered_map<const cPlayer *, unsigned> m_TradeIndexOpenedByPlayer; +}; |