namespace DecoratorExample
{
interface IMario
{
void TakeDamage();
void Update();
// other methods...
}
class Mario : IMario
{
IMarioState state;
void TakeDamage()
{
state.TakeDamage();
}
void Update()
{
state.Update();
}
// other methods...
}
class StarMario : IMario
{
IMario decoratedMario;
int timer = 1000;
public StarMario (IMario decoratedMario)
{
this.decoratedMario = decoratedMario;
}
void TakeDamage()
{
// StarMario does not take damage
}
void Update()
{
timer--;
if(timer == 0)
{
RemoveStar();
}
decoratedMario.Update();
}
void RemoveStar()
{
Game1Singleton.Instance.mario = decoratedMario;
}
// other methods... (most make method calls on decoratedMario)
}
}