public IList <IElement> AddGeneralImportedElement(IXmlWritable element) { List <IElement> result = new List <IElement>(); if (element is IChoiceElement) { IChoiceElement choice = element as IChoiceElement; if (choice.InnerElement is IFileElement) { result.AddRange(m_ThirdContainer.AddGeneralImportedElement(element)); return(result); } } foreach (IFileElement fileElement in element.GetFileElements()) { result.Add(m_ThirdContainer.AddElement(fileElement)); } return(result); }
public void Start(int musicFadeInTime) { if (RandomMusicList.GetElements().Count == 0) { Client.SubPlayerFinished(this, false, false); return; } PlayingModule.ThePlayer.ActiveMusicPlayer = this; // once early to stop previous music player if (PlayingModule.ThePlayer.ProjectCallbacks != null) { PlayingModule.ThePlayer.ProjectCallbacks.MusicPlaylistStarted(RandomMusicList.Id); } Monitor.Enter(syncObject); // Don't delay, start immediately (start delay was already processed by calling player) IChoiceElement element = SelectRandomElement(m_Container); m_LastElementsStack.Add(element); m_GoBack = false; Monitor.Exit(syncObject); Process(element, musicFadeInTime); }
public ChoiceElementChangeAction(IChoiceElement element, int chance) { m_Element = element; m_OldChance = element.RandomChance; m_NewChance = chance; }
public override void PlayNext() { Monitor.Enter(syncObject); bool stop = shallStop; if (Client.Stopped || shallStop) { Monitor.Exit(syncObject); if (PlayingModule.ThePlayer.ProjectCallbacks != null) { PlayingModule.ThePlayer.ProjectCallbacks.MusicPlaylistFinished(m_Container.Id); } Client.SubPlayerFinished(this, stop, false); } else if (m_FixedNext != -1) { IChoiceElement element = m_Container.GetElements()[m_FixedNext]; m_LastElementsStack.Add(element); m_GoBack = false; m_FixedNext = -1; Monitor.Exit(syncObject); Repeat(RandomMusicList, element); } else if (m_GoBack && m_LastElementsStack.Count > 1) { IChoiceElement element = m_LastElementsStack[m_LastElementsStack.Count - 2]; m_LastElementsStack.RemoveAt(m_LastElementsStack.Count - 1); m_GoBack = false; m_FixedNext = -1; Monitor.Exit(syncObject); Repeat(RandomMusicList, element); } else if (m_Container.RepeatCount != -1 && m_Container.RepeatCount <= ++m_RepeatCount) { Monitor.Exit(syncObject); if (PlayingModule.ThePlayer.ProjectCallbacks != null) { PlayingModule.ThePlayer.ProjectCallbacks.MusicPlaylistFinished(m_Container.Id); } Client.SubPlayerFinished(this, stop, false); } else { IChoiceElement element = SelectRandomElement(m_Container); if (element != null) { m_LastElementsStack.Add(element); m_GoBack = false; m_FixedNext = -1; Monitor.Exit(syncObject); Repeat(RandomMusicList, element); } else { Monitor.Exit(syncObject); if (PlayingModule.ThePlayer.ProjectCallbacks != null) { PlayingModule.ThePlayer.ProjectCallbacks.MusicPlaylistFinished(m_Container.Id); } Client.SubPlayerFinished(this, stop, false); } } }
private static void InsertElement(IElementContainer <IChoiceElement> choiceContainer, IFileElement newElement, IChoiceElement origElement) { IChoiceElement choiceElement = choiceContainer.AddElement(newElement); choiceElement.RandomChance = origElement.RandomChance; }