#include "ItemFilter.h" #include "Item.h" #include "ItemSlot.h" #include "ItemType.h" ItemFilter::ItemFilter() : ReferenceCounter() {} bool ItemFilter::matchItem(const Item* zItem) const { return 1; } bool ItemFilter::matchSourceSlot(ItemSlot* zSlot) const { return zSlot->zStack() ? matchItem(zSlot->zStack()->zItem()) : 0; } bool ItemFilter::matchTargetSlot(ItemSlot* zSlot) const { return 1; } CombinedItemFilter::CombinedItemFilter(ItemFilter* filterA, ItemFilter* filterB, std::function op) : ItemFilter(), filterA(filterA), filterB(filterB), op(op) {} CombinedItemFilter::~CombinedItemFilter() { filterA->release(); filterB->release(); } bool CombinedItemFilter::matchItem(const Item* zItem) const { return op(filterA->matchItem(zItem), filterB->matchItem(zItem)); } bool CombinedItemFilter::matchSourceSlot(ItemSlot* zSlot) const { return op(filterA->matchSourceSlot(zSlot), filterB->matchSourceSlot(zSlot)); } bool CombinedItemFilter::matchTargetSlot(ItemSlot* zSlot) const { return op(filterA->matchTargetSlot(zSlot), filterB->matchTargetSlot(zSlot)); } Framework::Text CombinedItemFilter::getLogicUIML() const { Framework::Text result = "" << filterA->getLogicUIML() << filterB->getLogicUIML() << ""; return result; } AnyItemFilter::AnyItemFilter() : ItemFilter() {} bool AnyItemFilter::matchItem(const Item* zItem) const { return true; } Framework::Text AnyItemFilter::getLogicUIML() const { return ""; } TypeItemFilter::TypeItemFilter(const ItemType* zType) : ItemFilter(), zType(zType) {} bool TypeItemFilter::matchItem(const Item* zItem) const { return zItem->zItemType() == zType; } Framework::Text TypeItemFilter::getLogicUIML() const { Framework::Text result = "getId() << "\"/>"; return result; } SpecificSlotFilter::SpecificSlotFilter(int sourceSlotId, int targetSlotId) : ItemFilter(), sourceSlotId(sourceSlotId), targetSlotId(targetSlotId) {} bool SpecificSlotFilter::matchSourceSlot(ItemSlot* zSlot) const { return sourceSlotId == zSlot->getId(); } bool SpecificSlotFilter::matchTargetSlot(ItemSlot* zSlot) const { return targetSlotId == zSlot->getId(); } Framework::Text SpecificSlotFilter::getLogicUIML() const { return ""; } SourceSlotBlacklistFilter::SourceSlotBlacklistFilter() : ItemFilter() {} void SourceSlotBlacklistFilter::addBlackListSlotId(int id) { blackList.add(id); } bool SourceSlotBlacklistFilter::matchSourceSlot(ItemSlot* zSlot) const { for (int black : blackList) { if (black == zSlot->getId()) return 0; } return 1; } bool SourceSlotBlacklistFilter::matchTargetSlot(ItemSlot* zSlot) const { return 1; } Framework::Text SourceSlotBlacklistFilter::getLogicUIML() const { return ""; } TargetSlotBlacklistFilter::TargetSlotBlacklistFilter() : ItemFilter() {} void TargetSlotBlacklistFilter::addBlackListSlotId(int id) { blackList.add(id); } bool TargetSlotBlacklistFilter::matchSourceSlot(ItemSlot* zSlot) const { return 1; } bool TargetSlotBlacklistFilter::matchTargetSlot(ItemSlot* zSlot) const { for (int black : blackList) { if (black == zSlot->getId()) return 0; } return 1; } Framework::Text TargetSlotBlacklistFilter::getLogicUIML() const { return ""; }