Accounting for selective visitation
Our concrete PlayerPrefVisitor didn’t store any local data (it doesn’t have to if it’s not necessary), but the Visitor pattern can also account for the context of the visitation; visitors can be set up to apply behaviors and algorithms to specific elements and element combinations. This is a bit of an inversion of how we traditionally think of this pattern, but it’s equally as valid and useful. In this section, we’ll create visiting ScriptableObjects (because we love them) that deliver upgrades and buffs to elements on our Player depending on each concrete visitor’s local state (conditions).
In the Scripts folder, create a new C# script named SOVisitor and update its code to match the following code block. Like PlayerPrefsVisitor, SOVisitor has methods for visiting the Stats, Weapon, and WeaponMod components on our Player, but with added variables to determine when a component needs to be visited. How...