Beispiel #1
0
        public QueuedMessage(String message, int secondsDelay, AbstractEvent abstractEvent)
        {
            this.messageName = message;
            List <MessageFragment> messageFragments = new List <MessageFragment>();

            messageFragments.Add(MessageFragment.Text(message));
            this.messageFolders = getMessageFolders(messageFragments, false);
            this.dueTime        = (DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond) + (secondsDelay * 1000) + updateInterval;
            this.abstractEvent  = abstractEvent;
        }
Beispiel #2
0
        public QueuedMessage(String messageName, int expiresAfter, List <MessageFragment> messageFragments = null,
                             List <MessageFragment> alternateMessageFragments = null, DelayedMessageEvent delayedMessageEvent = null,
                             int secondsDelay = 0, AbstractEvent abstractEvent                 = null, Dictionary <String, Object> validationData = null,
                             int priority     = SoundMetadata.DEFAULT_PRIORITY, SoundType type = SoundType.AUTO)
        {
            this.messageId              = getMessageId();
            this.validationData         = validationData;
            this.creationTime           = GameStateData.CurrentTime.Ticks / TimeSpan.TicksPerMillisecond;
            this.dueTime                = secondsDelay == 0 ? 0 : this.creationTime + (secondsDelay * 1000) + updateInterval;
            this.expiryTime             = expiresAfter == 0 ? 0 : this.creationTime + (expiresAfter * 1000);
            this.secondsDelay           = secondsDelay;
            this.abstractEvent          = abstractEvent;
            this.metadata               = new SoundMetadata(type, priority);
            this.delayedMessageEvent    = delayedMessageEvent;
            this.delayMessageResolution = delayedMessageEvent != null;

            // for delayed message events, we collect up the message folder when the message when the message is about to be played, not here
            if (delayedMessageEvent != null)
            {
                this.messageName = delayedMessageIdentifier + messageName;
            }
            else if (messageFragments == null)
            {
                this.messageName = messageName;
                List <MessageFragment> singleMessageFragement = new List <MessageFragment>();
                singleMessageFragement.Add(MessageFragment.Text(messageName));
                this.messageFolders = getMessageFolders(singleMessageFragement, false);
            }
            else
            {
                this.messageName = compoundMessageIdentifier + messageName;
                Boolean hasAlternative = alternateMessageFragments != null;
                this.messageFolders = getMessageFolders(messageFragments, hasAlternative);
                if (!canBePlayed && hasAlternative)
                {
                    Console.WriteLine("Using secondary messages for event " + messageName);
                    canBePlayed         = true;
                    this.messageFolders = getMessageFolders(alternateMessageFragments, false);
                    if (!canBePlayed)
                    {
                        Console.WriteLine("Primary and secondary messages for event " +
                                          messageName + " can't be played");
                    }
                }
            }
        }
Beispiel #3
0
 public static MessageFragment Integer(int integer)
 {
     return(MessageFragment.Integer(integer, true));
 }
Beispiel #4
0
        private List <String> getMessageFolders(List <MessageFragment> messageFragments, Boolean hasAlternative)
        {
            List <String> messages = new List <String>();

            for (int i = 0; i < messageFragments.Count; i++)
            {
                MessageFragment messageFragment = messageFragments[i];
                if (messageFragment == null)
                {
                    Console.WriteLine("Message " + this.messageName + " can't be played because it has no contents");
                    canBePlayed = false;
                    break;
                }
                // if this fragment is not the last message fragment, then some languages (Italian only at the time of writing)
                // require a different inflection to the final part of a time / number sound.
                Boolean useMoreInflection = i < messageFragments.Count - 1;
                switch (messageFragment.type)
                {
                case FragmentType.Text:
                    if (messageFragment.text.StartsWith(AudioPlayer.PAUSE_ID) || SoundCache.availableSounds.Contains(messageFragment.text) ||
                        SoundCache.hasSingleSound(messageFragment.text))
                    {
                        messages.Add(messageFragment.text);
                    }
                    else
                    {
                        Console.WriteLine("Message " + this.messageName + " can't be played because there is no sound for text fragment " + messageFragment.text);
                        canBePlayed = false;
                    }
                    break;

                case FragmentType.Time:
                    if (numberReader != null)
                    {
                        List <String> timeFolders = numberReader.ConvertTimeToSounds(messageFragment.timeSpan, useMoreInflection);
                        if (timeFolders.Count == 0)
                        {
                            Console.WriteLine("Message " + this.messageName + " can't be played because the number reader found no sounds for timespan "
                                              + messageFragment.timeSpan.timeSpan.ToString() + " precision " + messageFragment.timeSpan.getPrecision());
                            canBePlayed = false;
                        }
                        else
                        {
                            foreach (String timeFolder in timeFolders)
                            {
                                if (!timeFolder.StartsWith(AudioPlayer.PAUSE_ID) && !SoundCache.availableSounds.Contains(timeFolder))
                                {
                                    Console.WriteLine("Message " + this.messageName + " can't be played because there is no sound for time fragment " + timeFolder);
                                    canBePlayed = false;
                                    break;
                                }
                            }
                            messages.AddRange(timeFolders);
                        }
                    }
                    else
                    {
                        Console.WriteLine("Message " + this.messageName + " can't be played because the number reader is not available");
                        canBePlayed = false;
                    }
                    break;

                case FragmentType.Opponent:
                    canBePlayed = false;
                    if (messageFragment.opponent != null && messageFragment.opponent.CanUseName)
                    {
                        String usableName = DriverNameHelper.getUsableDriverName(messageFragment.opponent.DriverRawName);
                        if (SoundCache.availableDriverNames.Contains(usableName))
                        {
                            messages.Add(usableName);
                            canBePlayed = true;
                        }
                        else if (usableName != null && usableName.Count() > 0 && AudioPlayer.ttsOption != AudioPlayer.TTS_OPTION.NEVER &&
                                 (!hasAlternative || AudioPlayer.ttsOption == AudioPlayer.TTS_OPTION.ANY_TIME))
                        {
                            messages.Add(SoundCache.TTS_IDENTIFIER + usableName);
                            canBePlayed = true;
                        }
                        else
                        {
                            Console.WriteLine("Message " + this.messageName + " can't be played because there is no sound for opponent name " + usableName);
                        }
                    }
                    else
                    {
                        Console.WriteLine("Message " + this.messageName + " can't be played because the opponent is null or unusable");
                    }
                    break;

                case FragmentType.Integer:
                    if (numberReader != null)
                    {
                        List <String> integerFolders = numberReader.GetIntegerSounds(messageFragment.integer, messageFragment.allowShortHundreds, useMoreInflection);
                        if (integerFolders.Count() == 0)
                        {
                            Console.WriteLine("Message " + this.messageName + " can't be played because the number reader found no sounds for number " + messageFragment.integer);
                            canBePlayed = false;
                            break;
                        }
                        else
                        {
                            foreach (String integerFolder in integerFolders)
                            {
                                if (!integerFolder.StartsWith(AudioPlayer.PAUSE_ID) && !SoundCache.availableSounds.Contains(integerFolder))
                                {
                                    Console.WriteLine("Message " + this.messageName + " can't be played because there is no sound for number fragment " + integerFolder);
                                    canBePlayed = false;
                                    break;
                                }
                            }
                        }
                        messages.AddRange(integerFolders);
                    }
                    else
                    {
                        Console.WriteLine("Message " + this.messageName + " can't be played because the number reader is not available");
                        canBePlayed = false;
                    }
                    break;
                }
                if (!canBePlayed)
                {
                    break;
                }
            }
            return(messages);
        }
Beispiel #5
0
        private List <String> getMessageFolders(List <MessageFragment> messageFragments, Boolean hasAlternative)
        {
            List <String> messages = new List <String>();

            for (int i = 0; i < messageFragments.Count; i++)
            {
                MessageFragment messageFragment = messageFragments[i];
                if (messageFragment == null)
                {
                    canBePlayed = false;
                    break;
                }
                switch (messageFragment.type)
                {
                case FragmentType.Text:
                    if (messageFragment.text.StartsWith(AudioPlayer.PAUSE_ID) || SoundCache.availableSounds.Contains(messageFragment.text) ||
                        SoundCache.availableDriverNames.Contains(messageFragment.text))
                    {
                        messages.Add(messageFragment.text);
                    }
                    else
                    {
                        canBePlayed = false;
                    }
                    break;

                case FragmentType.Time:
                    // if this time fragment is not the last message fragment, then some languages (Italian only at the time of writing)
                    // require a different inflection to their tenths sounds
                    Boolean useMoreInflection = i < messageFragments.Count - 1;
                    if (numberReader != null)
                    {
                        List <String> timeFolders = numberReader.ConvertTimeToSounds(messageFragment.timeSpan, useMoreInflection);
                        if (timeFolders.Count == 0)
                        {
                            canBePlayed = false;
                        }
                        else
                        {
                            foreach (String timeFolder in timeFolders)
                            {
                                if (!timeFolder.StartsWith(AudioPlayer.PAUSE_ID) && !SoundCache.availableSounds.Contains(timeFolder))
                                {
                                    canBePlayed = false;
                                    break;
                                }
                            }
                            messages.AddRange(timeFolders);
                        }
                    }
                    else
                    {
                        Console.WriteLine("Number reader is not available");
                        canBePlayed = false;
                    }
                    break;

                case FragmentType.Opponent:
                    canBePlayed = false;
                    if (messageFragment.opponent != null)
                    {
                        String usableName = DriverNameHelper.getUsableDriverName(messageFragment.opponent.DriverRawName);
                        if (SoundCache.availableDriverNames.Contains(usableName))
                        {
                            messages.Add(usableName);
                            canBePlayed = true;
                        }
                        else if (usableName != null && usableName.Count() > 0 && SoundCache.useTTS && !hasAlternative)
                        {
                            messages.Add(SoundCache.TTS_IDENTIFIER + usableName);
                            canBePlayed = true;
                        }
                    }
                    break;

                case FragmentType.Integer:
                    if (numberReader != null)
                    {
                        List <String> integerFolders = numberReader.GetIntegerSounds(messageFragment.integer);
                        if (integerFolders.Count() == 0)
                        {
                            canBePlayed = false;
                            break;
                        }
                        else
                        {
                            foreach (String integerFolder in integerFolders)
                            {
                                if (!integerFolder.StartsWith(AudioPlayer.PAUSE_ID) && !SoundCache.availableSounds.Contains(integerFolder))
                                {
                                    canBePlayed = false;
                                    break;
                                }
                            }
                        }
                        messages.AddRange(integerFolders);
                    }
                    else
                    {
                        Console.WriteLine("Number reader is not available");
                        canBePlayed = false;
                    }
                    break;
                }
                if (!canBePlayed)
                {
                    break;
                }
            }
            return(messages);
        }