| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- /*
- * CBonusProxy.h, part of VCMI engine
- *
- * Authors: listed in file AUTHORS in main folder
- *
- * License: GNU General Public License v2.0 or later
- * Full text of license available in license.txt file, in main folder
- *
- */
- #pragma once
- #include "Bonus.h"
- #include "BonusSelector.h"
- VCMI_LIB_NAMESPACE_BEGIN
- class DLL_LINKAGE CBonusProxy
- {
- public:
- CBonusProxy(const IBonusBearer * Target, CSelector Selector);
- CBonusProxy(const CBonusProxy & other);
- CBonusProxy(CBonusProxy && other) noexcept;
- CBonusProxy & operator=(CBonusProxy && other) noexcept;
- CBonusProxy & operator=(const CBonusProxy & other);
- const BonusList * operator->() const;
- TConstBonusListPtr getBonusList() const;
- protected:
- CSelector selector;
- const IBonusBearer * target;
- mutable int64_t bonusListCachedLast;
- mutable TConstBonusListPtr bonusList[2];
- mutable int currentBonusListIndex;
- mutable boost::mutex swapGuard;
- void swapBonusList(TConstBonusListPtr other) const;
- };
- class DLL_LINKAGE CTotalsProxy : public CBonusProxy
- {
- public:
- CTotalsProxy(const IBonusBearer * Target, CSelector Selector, int InitialValue);
- CTotalsProxy(const CTotalsProxy & other);
- CTotalsProxy(CTotalsProxy && other) = delete;
- CTotalsProxy & operator=(const CTotalsProxy & other) = default;
- CTotalsProxy & operator=(CTotalsProxy && other) = delete;
- int getMeleeValue() const;
- int getRangedValue() const;
- int getValue() const;
- /**
- Returns total value of all selected bonuses and sets bonusList as a pointer to the list of selected bonuses
- @param bonusList is the out list of all selected bonuses
- @return total value of all selected bonuses and 0 otherwise
- */
- int getValueAndList(TConstBonusListPtr & bonusList) const;
- private:
- int initialValue;
- mutable int64_t valueCachedLast = 0;
- mutable int value = 0;
- mutable int64_t meleeCachedLast;
- mutable int meleeValue;
- mutable int64_t rangedCachedLast;
- mutable int rangedValue;
- };
- class DLL_LINKAGE CCheckProxy
- {
- public:
- CCheckProxy(const IBonusBearer * Target, CSelector Selector, const std::string & cachingStr);
- CCheckProxy(const IBonusBearer * Target, BonusType bonusType);
- CCheckProxy(const CCheckProxy & other);
- CCheckProxy& operator= (const CCheckProxy & other) = default;
- bool getHasBonus() const;
- private:
- const IBonusBearer * target;
- std::string cachingStr;
- CSelector selector;
- mutable int64_t cachedLast;
- mutable bool hasBonus;
- };
- VCMI_LIB_NAMESPACE_END
|