namespace Ariadne.Vellum.UnitTests
{
///
/// Has a virtual passage that other arcs call.
///
public partial class Door : Arc
{
public string Note = "closed";
public virtual void Swing(Gates gates)
{
int hinges = 2;
swing:
while (!gates.Open.Contains("swing"))
{
Yield();
}
Note = "swung " + hinges;
}
protected override void Run(Gates gates)
{
first:
Swing(gates);
}
}
///
/// Overrides the passage with locals of its own.
///
public partial class CreakyDoor : Door
{
public override void Swing(Gates gates)
{
string sound = "creak";
creak:
while (!gates.Open.Contains("swing"))
{
Yield();
}
Note = sound;
}
}
///
/// Calls a virtual passage on a door, which is a door or a derived one.
///
public partial class Visitor : Arc
{
public Door Entrance;
public string Result = "";
protected override void Run(Gates gates)
{
enter:
Entrance.Swing(gates);
Result = Entrance.Note;
}
}
}