mirror of
https://github.com/vcmi/vcmi.git
synced 2024-11-24 08:32:34 +02:00
90 lines
2.2 KiB
C++
90 lines
2.2 KiB
C++
/*
|
|
* 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);
|
|
CCheckProxy(const CCheckProxy & other);
|
|
CCheckProxy& operator= (const CCheckProxy & other) = default;
|
|
|
|
bool getHasBonus() const;
|
|
|
|
private:
|
|
const IBonusBearer * target;
|
|
CSelector selector;
|
|
|
|
mutable int64_t cachedLast;
|
|
mutable bool hasBonus;
|
|
};
|
|
|
|
VCMI_LIB_NAMESPACE_END |