Game Development Reference
In-Depth Information
Listing 23-17. The Updated
Option
Class
class Option
: public Visitable
{
public:
using Pointer = std::shared_ptr<Option>;
protected:
PlayerOptions m_chosenOption;
std::string m_outputText;
public:
Option(PlayerOptions chosenOption, const std::string& outputText)
: m_chosenOption(chosenOption)
, m_outputText(outputText)
{
}
const std::string& GetOutputText() const
{
return m_outputText;
}
virtual void Evaluate(Player& player) = 0;
};
The only change required is to inherit the
Option
class from
Visitable
. To take advantage of this,
a
Visitor
named
EvaluateVisitor
is created in Listing 23-18.
Listing 23-18. The
EvaluateVisitor
Class
class EvaluateVisitor
: public Visitor
{
private:
Player& m_player;
public:
EvaluateVisitor(Player& player)
: m_player{ player }
{
}
virtual void OnVisit(Visitable& visitable)
{
Option* pOption = dynamic_cast<Option*>(&visitable);