public static void PlayStoryCallback(Object param) { Object[] paramObj = param as Object[]; Story story = paramObj[0] as Story; int startSegment = (int)paramObj[1]; if (activeStory == null) { activeStory = story; resetEvent = new ManualResetEvent(false); story.State = new StoryState(resetEvent); story.State.StoryPaused = false; story.State.CurrentSegment = startSegment; if (!string.IsNullOrEmpty(story.Name) || story.LocalStory) { try { do { if (!story.LocalStory) { Messenger.SendUpdateSegment(story.State.CurrentSegment); } ISegment segment = story.Segments[story.State.CurrentSegment]; ISegment nextSegment = GetNextSegment(story, story.State.CurrentSegment); story.State.NextSegment = nextSegment; if (segment != null) { segment.Process(story.State); } story.State.CurrentSegment++; } while (story.State.CurrentSegment < story.Segments.Count); } catch (Exception ex) { SdlDotNet.Widgets.MessageBox.Show(ex.ToString(), "Error!"); } } if (!story.LocalStory) { Messenger.SendChapterComplete(); } Menus.MenuSwitcher.CloseAllMenus(); activeStory = null; } }