Take a peak through the player controller script and see where it's handling the input messages. As soon as that object gets that message, by way of SetControllerVariable, it can perform an action. The player just takes the inputs from the keyboard. The other cars can take the inputs from any source and the variable can be any name.
This is a snippet from the player script to call to action when the "MoveAlongPathTo" is passed to it from any other object.
void SetControllerVariable( Object@ object, const String& in name, const String& in value)
{
if (name == "MoveAlongPathTo")
{
pathFinder.Clear();
Object@ goal = object.GetWorld().GetObject( value);
if (goal != null)
pathFinder.StartFindPath( object.GetWorld(), object.GetPosition(), goal.GetPosition(), -object.GetCurMatrix().ZAxis);
aimAtTarget = false;
return;
}
}
You see it does a bunch of crap, actually. What's important is this part:
void SetControllerVariable( Object@ object, const String& in name, const String& in value)
{
if (name == "MyVariable")
{
DoMyStuff();
return;
}
}
The other object that sends the variable first needs a handle to the reading object and then it just sets the variable. In the case below, as seen in my demo, this line causes a successful hit on an AI entity with this weapon to tell the AI to move to where it was hit from. It's as generic a mob pulling system as you can find.
hitObject.SetControllerVariable( "MoveAlongPathTo", muzzlePos);
If you want to control a whole series of other entities based on one object's variable state, then you'll probably want to look into object grouping (of which I haven't quite grasped the power of yet).
Hope that helps some.