Я работаю над ролевой игрой для развлечения и отработки шаблонов дизайна. Я бы хотел, чтобы игроки могли превращаться в разных животных. Например, друид мог бы превратиться в гепарда. Прямо сейчас я планирую использовать шаблон декоратора для этого, но мой вопрос - как мне сделать так, чтобы, когда друид был в форме гепарда, он мог получить доступ только к навыкам для гепарда? Другими словами, они не должны иметь доступа к своим обычным навыкам друидов.
Используя образец декоратора, кажется, что даже в форме гепарда мой друид сможет получить доступ к своим обычным навыкам друидов.
class Druid : Character
{
// many cool druid skills and spells
void LightHeal(Character target) { }
}
abstract class CharacterDecorator : Character
{
Character DecoratedCharacter;
}
class CheetahForm : CharacterDecorator
{
Character DecoratedCharacter;
public CheetahForm(Character decoratedCharacter)
{
DecoratedCharacter= decoratedCharacter;
}
// many cool cheetah related skills
void CheetahRun()
{
// let player move very fast
}
}
теперь использую классы
Druid myDruid = new Druid();
myDruid.LightHeal(myDruid); // casting light heal here is fine
myDruid = new CheetahForm(myDruid);
myDruid.LightHeal(myDruid); // casting here should not be allowed
Хммммм ... теперь, когда я об этом подумаю, myDruid не сможет использовать заклинания / навыки класса Druid
, если класс не будет понижен? Но даже если это так, есть ли лучший способ убедиться, что myDruid
в этот момент заблокирован от всех Druid
связанных заклинаний / умений, пока он не будет возвращен к Druid
(так как в настоящее время он находится в CheetahForm
)