namespace Ariadne.Vellum.UnitTests
{
///
/// Keeps a local across a pause in a Run that a derived class overrides.
///
public abstract partial class CollisionBase : Arc
{
public string BaseNote = "idle";
protected override void Run(Gates gates)
{
int count = 1;
basewait:
while (!gates.Open.Contains("go"))
{
Yield();
}
BaseNote = "base " + count;
}
}
///
/// Overrides Run with a local of the same name as the base's, but another type.
///
public partial class CollisionDerived : CollisionBase
{
public string Note = "idle";
protected override void Run(Gates gates)
{
string count = "a";
derivedwait:
while (!gates.Open.Contains("go"))
{
Yield();
}
Note = "derived " + count;
}
}
///
/// Runs the base's Run between two pauses of its own, with a local named like the base's but of another type.
///
public partial class CollisionCaller : CollisionBase
{
public string Note = "idle";
protected override void Run(Gates gates)
{
string count = "a";
before:
while (!gates.Open.Contains("start"))
{
Yield();
}
base.Run(gates);
Note = "derived " + count;
}
}
///
/// Runs the base's Run from a call of its own, under a label.
///
public partial class CollisionLabelled : CollisionBase
{
protected override void Run(Gates gates)
{
again:
base.Run(gates);
}
}
///
/// Runs the base's Run from a passage other than Run.
///
public partial class CollisionHelper : CollisionBase
{
public string Note = "idle";
protected void Prepare(Gates gates)
{
string count = "p";
prepared:
base.Run(gates);
Note = "prepared " + count;
}
protected override void Run(Gates gates)
{
Prepare(gates);
}
}
///
/// Holds a Run that waits for game time, with a local across the wait.
///
public abstract partial class CollisionWaitBase : Arc
{
public string WaitNote = "idle";
protected override void Run(Gates gates)
{
int rounds = 3;
rest:
Wait(System.TimeSpan.FromSeconds(1));
WaitNote = "rested " + rounds;
}
}
///
/// Runs a base Run that waits for game time.
///
public partial class CollisionWaitDerived : CollisionWaitBase
{
public string Note = "idle";
protected override void Run(Gates gates)
{
string rounds = "x";
base.Run(gates);
Note = "derived " + rounds;
}
}
///
/// Runs the base's Run, and is itself the base of a script that does the same.
///
public partial class CollisionMiddle : CollisionBase
{
public string MiddleNote = "idle";
protected override void Run(Gates gates)
{
double count = 2.5;
middlewait:
while (!gates.Open.Contains("middle"))
{
Yield();
}
base.Run(gates);
MiddleNote = "middle " + count;
}
}
///
/// Runs the Run of a class that runs the Run of its own base.
///
public partial class CollisionLeaf : CollisionMiddle
{
public string Note = "idle";
protected override void Run(Gates gates)
{
string count = "leaf";
leafwait:
while (!gates.Open.Contains("start"))
{
Yield();
}
base.Run(gates);
Note = "leaf " + count;
}
}
///
/// Overrides Run with a local of the same name and type as the base's, holding another value.
///
public partial class CollisionSameType : CollisionBase
{
public string Note = "idle";
protected override void Run(Gates gates)
{
int count = 5;
derivedwait:
while (!gates.Open.Contains("go"))
{
Yield();
}
Note = "derived " + count;
}
}
}