void CallAllCast(string Pose)
    {
        foreach (var Roll in Actors)
        {
            if (Roll == null)
            {
                Actors.Remove(Roll);
                continue;
            }

            Roll.ChangePose(Pose, Skip);
        }
    }
    void CharacterChanges(CastDirectionEvent eventdata)
    {
        if (eventdata.Exiting)
        {
            CharacterExit(eventdata);
            return;
        }

        //if the command is all, affect all
        if (eventdata.character.ToLower() == "all")
        {
            CallAllCast(eventdata.Pose);
            return;
        }

        //for characters already on scene
        foreach (var Roll in Actors)
        {
            if (Roll == null)
            {
                Actors.Remove(Roll);
            }

            if (Roll.Character.Character == eventdata.character)
            {
                Roll.ChangePose(eventdata.Pose, Skip);
                Roll.ChangeDistance(eventdata.Distance);
                Roll.ChangeFacing(eventdata.FacingDirection);

                if (eventdata.Direction != StagePosition.None && eventdata.Direction != Roll.Direction)
                {
                    var oldDirections = Roll.Direction;
                    SpotLights[Roll.Direction]      -= 1;
                    Roll.Direction                   = eventdata.Direction;
                    SpotLights[eventdata.Direction] += 1;

                    UpdateStagePositions(oldDirections);
                    UpdateStagePositions(eventdata.Direction);
                }

                return;
            }
        }


        //if here, character is not on scene
        foreach (var person in CastList)
        {
            //adding character to scene
            if (person.Character == eventdata.character)
            {
                var cast = Instantiate(person.Actor, Vector3.zero, Quaternion.identity);

                var directions = cast.GetComponent <CharacterDisplay>();
                if (directions == null)
                {
                    Debug.LogError("character: " + eventdata.character + "is missing at rollcall. See StageDisplay");
                }
                else
                {
                    if (eventdata.FacingDirection == StagePosition.None)
                    {
                        eventdata.FacingDirection = StagePosition.Center;
                    }

                    directions.EnterStage(eventdata.Pose, eventdata.Distance, eventdata.FacingDirection, Skip);
                    Actors.Add(directions);

                    if (eventdata.Direction == StagePosition.None)
                    {
                        eventdata.Direction = StagePosition.Center;
                    }

                    directions.Direction              = eventdata.Direction;
                    SpotLights[directions.Direction] += 1;
                    UpdateStagePositions(directions.Direction);
                }
            }
        }
    }