This is the current interface of Action in AngelScript (but it is not in its final state):
interface Action
{
Action@ GetSuperAction();
void SetSuperAction(Action@ action);
Action@ AddSubAction(Action@ action);
Action@[] GetSubActions();
void CollectListeningActions(Action@[]& collection);
Action@ And(Action@ andAction);
Action@ If(Condition@ condition);
Action@ IfNot(Condition@ condition);
void PerformAndAction(Critter& critter, Critter@ otherCritter, Item@ item);
bool Check(Critter& critter, Critter@ otherCritter, Item@ item);
bool IsRunning();
void SetRunning(bool running);
bool IsListening();
void SetListening(bool listening);
bool Start(Critter& critter);
void Perform(Critter& critter);
void Finish(Critter& critter);
void Cancel(Critter& critter);
void StartNextAction(Critter& critter);
string GetInfo();
void IdleEvent(Critter& critter);
void ShowCritterEvent(Critter& critter, Critter& showCritter);
void HideCritterEvent(Critter& critter, Critter& hideCritter);
bool AttackEvent(Critter& critter, Critter& target);
bool AttackedEvent(Critter& critter, Critter& attacker);
void DeadEvent(Critter& critter, Critter@ killer);
void MessageEvent(Critter& critter, Critter& messenger, int message, int value);
void SeeSomeoneAttackEvent(Critter& critter, Critter& attacker, Critter& attacked);
void SeeSomeoneDeadEvent(Critter& critter, Critter& killed, Critter@ killer);
void SeeSomeoneAttackedEvent(Critter& critter, Critter& attacked, Critter& attacker);
void SeeSomeoneStealingEvent(Critter& critter, Critter& victim, Critter& thief, bool success, Item& item, uint count);
void SeeSomeoneUseSkill(Critter& critter, Critter& skillCritter, int skill, Critter@ onCritter, Item@ onItem, Scenery@ onScenery);
int PlaneBeginEvent(Critter& critter, NpcPlane& plane, int reason, Critter@ someCr, Item@ someItem);
int PlaneRunEvent(Critter& critter, NpcPlane& plane, int reason, uint& result0, uint& result1, uint& result2);
int PlaneEndEvent(Critter& critter, NpcPlane& plane, int reason, Critter@ someCr, Item@ someItem);
}
And Manager has void Start(Critter& critter, Action& action) function, which starts the action for specified critter.