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); } } } }