Beispiel #1
0
        /// <summary>
        /// Change the personality for the speech responder
        /// </summary>
        /// <returns>true if the speech responder is now using the new personality, otherwise false</returns>
        public bool SetPersonality(string newPersonality)
        {
            SpeechResponderConfiguration configuration = SpeechResponderConfiguration.FromFile();

            if (newPersonality == configuration.Personality)
            {
                // Already set to this personality
                return(true);
            }

            // Ensure that this personality exists
            Personality personality = Personality.FromName(newPersonality);

            if (personality != null)
            {
                // Yes it does; use it
                configuration.Personality = newPersonality;
                configuration.ToFile();
                scriptResolver = new ScriptResolver(personality.Scripts);
                Logging.Debug("Changed personality to " + newPersonality);
                return(true);
            }
            else
            {
                // No it does not; ignore it
                return(false);
            }
        }
Beispiel #2
0
        private void testScript(object sender, RoutedEventArgs e)
        {
            Script          script    = ((KeyValuePair <string, Script>)((Button)e.Source).DataContext).Value;
            SpeechResponder responder = new SpeechResponder();

            responder.Start();
            // See if we have a sample
            Event  sampleEvent;
            object sample = Events.SampleByName(script.Name);

            if (sample == null)
            {
                sampleEvent = null;
            }
            else if (sample is string)
            {
                // It's as tring so a journal entry.  Parse it
                sampleEvent = JournalMonitor.ParseJournalEntry((string)sample);
            }
            else if (sample is Event)
            {
                // It's a direct event
                sampleEvent = (Event)sample;
            }
            else
            {
                Logging.Warn("Unknown sample type " + sample.GetType());
                sampleEvent = null;
            }

            ScriptResolver scriptResolver = new ScriptResolver(Personality.Scripts);

            responder.Say(scriptResolver, script.Name, sampleEvent);
        }
Beispiel #3
0
        private void testButtonClick(object sender, RoutedEventArgs e)
        {
            ScriptRecoveryService.SaveRecoveryScript(ScriptValue,
                                                     ScriptName,
                                                     ScriptDescription,
                                                     Responder,
                                                     Priority,
                                                     _script.defaultValue);
            // Splice the new script in to the existing scripts
            ScriptValue = scriptView.Text;
            Dictionary <string, Script> newScripts = new Dictionary <string, Script>(_scripts);
            Script testScript = new Script(ScriptName, ScriptDescription, false, ScriptValue);

            newScripts.Remove(ScriptName);
            newScripts.Add(ScriptName, testScript);

            SpeechResponder speechResponder = new SpeechResponder();

            speechResponder.Start();

            // See if we have a sample
            List <Event> sampleEvents;
            object       sample = Events.SampleByName(_script.Name);

            if (sample == null)
            {
                sampleEvents = new List <Event>();
            }
            else if (sample is string)
            {
                // It's a string so a journal entry.  Parse it
                sampleEvents = JournalMonitor.ParseJournalEntry((string)sample);
            }
            else if (sample is Event)
            {
                // It's a direct event
                sampleEvents = new List <Event>()
                {
                    (Event)sample
                };
            }
            else
            {
                Logging.Warn("Unknown sample type " + sample.GetType());
                sampleEvents = new List <Event>();
            }

            ScriptResolver scriptResolver = new ScriptResolver(newScripts);

            if (sampleEvents.Count == 0)
            {
                sampleEvents.Add(null);
            }
            foreach (Event sampleEvent in sampleEvents)
            {
                speechResponder.Say(scriptResolver, ((ShipMonitor)EDDI.Instance.ObtainMonitor("Ship monitor"))?.GetCurrentShip(), ScriptName, sampleEvent, scriptResolver.priority(_script.Name));
            }
        }
        // Say something with a custom resolver
        public void Say(ScriptResolver resolver, string scriptName, Event theEvent = null, int?priority = null, bool?wait = null)
        {
            Dictionary <string, Cottle.Value> dict = createVariables(theEvent);
            string script = resolver.resolve(scriptName, dict);

            if (script != null)
            {
                SpeechService.Instance.Say(EDDI.Instance.Ship, script, (wait == null ? true : (bool)wait), (priority == null ? resolver.priority(scriptName) : (int)priority));
            }
        }
 public void Reload()
 {
     SpeechResponderConfiguration configuration = SpeechResponderConfiguration.FromFile();
     Personality personality = Personality.FromName(configuration.Personality);
     if (personality == null)
     {
         Logging.Warn("Failed to find named personality; falling back to default");
         personality = Personality.Default();
         configuration.Personality = personality.Name;
         configuration.ToFile();
     }
     scriptResolver = new ScriptResolver(personality.Scripts);
     Logging.Info("Reloaded " + ResponderName() + " " + ResponderVersion());
 }
        public void Reload()
        {
            SpeechResponderConfiguration configuration = SpeechResponderConfiguration.FromFile();
            Personality personality = Personality.FromName(configuration.Personality);

            if (personality == null)
            {
                Logging.Warn("Failed to find named personality; falling back to default");
                personality = Personality.Default();
                configuration.Personality = personality.Name;
                configuration.ToFile();
            }
            scriptResolver = new ScriptResolver(personality.Scripts);
            Logging.Info("Reloaded " + ResponderName() + " " + ResponderVersion());
        }
 public SpeechResponder()
 {
     SpeechResponderConfiguration configuration = SpeechResponderConfiguration.FromFile();
     Personality personality = null;
     if (configuration != null && configuration.Personality != null)
     {
         personality = Personality.FromName(configuration.Personality);
     }
     if (personality == null)
     { 
         personality = Personality.Default();
     }
     scriptResolver = new ScriptResolver(personality.Scripts);
     Logging.Info("Initialised " + ResponderName() + " " + ResponderVersion());
 }
        public SpeechResponder()
        {
            SpeechResponderConfiguration configuration = SpeechResponderConfiguration.FromFile();
            Personality personality = null;

            if (configuration != null && configuration.Personality != null)
            {
                personality = Personality.FromName(configuration.Personality);
            }
            if (personality == null)
            {
                personality = Personality.Default();
            }
            scriptResolver = new ScriptResolver(personality.Scripts);
            Logging.Info("Initialised " + ResponderName() + " " + ResponderVersion());
        }
Beispiel #9
0
        public void Reload()
        {
            SpeechResponderConfiguration configuration = SpeechResponderConfiguration.FromFile();
            Personality personality = Personality.FromName(configuration.Personality);

            if (personality == null)
            {
                Logging.Warn("Failed to find named personality; falling back to default");
                personality = Personality.Default();
                configuration.Personality = personality.Name;
                configuration.ToFile();
            }
            scriptResolver = new ScriptResolver(personality.Scripts);
            subtitles      = configuration.Subtitles;
            subtitlesOnly  = configuration.SubtitlesOnly;
            Logging.Debug($"Reloaded {ResponderName()}");
        }
Beispiel #10
0
        // Say something with a custom resolver
        public void Say(ScriptResolver resolver, Ship ship, string scriptName, Event theEvent = null, int?priority = null, string voice = null, bool?wait = null, bool sayOutLoud = true)
        {
            Dictionary <string, Cottle.Value> dict = createVariables(theEvent);
            string speech = resolver.resolve(scriptName, dict);

            if (speech != null)
            {
                if (subtitles)
                {
                    // Log a tidied version of the speech
                    log(Regex.Replace(speech, "<.*?>", string.Empty));
                }
                if (sayOutLoud && !(subtitles && subtitlesOnly))
                {
                    SpeechService.Instance.Say(ship, speech, (wait == null ? true : (bool)wait), (priority == null ? resolver.priority(scriptName) : (int)priority), voice);
                }
            }
        }
Beispiel #11
0
        public SpeechResponder()
        {
            SpeechResponderConfiguration configuration = SpeechResponderConfiguration.FromFile();
            Personality personality = null;

            if (configuration != null && configuration.Personality != null)
            {
                personality = Personality.FromName(configuration.Personality);
            }
            if (personality == null)
            {
                personality = Personality.Default();
            }
            scriptResolver = new ScriptResolver(personality?.Scripts);
            subtitles      = configuration?.Subtitles ?? false;
            subtitlesOnly  = configuration?.SubtitlesOnly ?? false;
            Logging.Info($"Initialized {ResponderName()}");
        }
        private void testScript(object sender, RoutedEventArgs e)
        {
            Script          script    = ((KeyValuePair <string, Script>)((Button)e.Source).DataContext).Value;
            SpeechResponder responder = new SpeechResponder();

            responder.Start();
            // See if we have a sample
            List <Event> sampleEvents;
            object       sample = Events.SampleByName(script.Name);

            if (sample == null)
            {
                sampleEvents = new List <Event>();
            }
            else if (sample is string)
            {
                // It's as tring so a journal entry.  Parse it
                sampleEvents = JournalMonitor.ParseJournalEntry((string)sample);
            }
            else if (sample is Event)
            {
                // It's a direct event
                sampleEvents = new List <Event>()
                {
                    (Event)sample
                };
            }
            else
            {
                Logging.Warn("Unknown sample type " + sample.GetType());
                sampleEvents = new List <Event>();
            }

            ScriptResolver scriptResolver = new ScriptResolver(Personality.Scripts);

            if (sampleEvents.Count == 0)
            {
                sampleEvents.Add(null);
            }
            foreach (Event sampleEvent in sampleEvents)
            {
                responder.Say(scriptResolver, ((ShipMonitor)EDDI.Instance.ObtainMonitor("Ship monitor"))?.GetCurrentShip(), script.Name, sampleEvent, scriptResolver.priority(script.Name));
            }
        }
Beispiel #13
0
        private void testButtonClick(object sender, RoutedEventArgs e)
        {
            // Splice the new script in to the existing scripts
            Dictionary <string, Script> newScripts = new Dictionary <string, Script>(scripts);
            Script testScript = new Script(ScriptName, ScriptDescription, false, ScriptValue);

            newScripts.Remove(ScriptName);
            newScripts.Add(ScriptName, testScript);

            SpeechResponder responder = new SpeechResponder();

            responder.Start();

            // See if we have a sample
            Event  sampleEvent;
            object sample = Events.SampleByName(script.Name);

            if (sample == null)
            {
                sampleEvent = null;
            }
            else if (sample.GetType() == typeof(string))
            {
                // It's as tring so a journal entry.  Parse it
                sampleEvent = JournalMonitor.ParseJournalEntry((string)sample);
            }
            else if (sample.GetType() == typeof(Event))
            {
                // It's a direct event
                sampleEvent = (Event)sample;
            }
            else
            {
                Logging.Warn("Unknown sample type " + sample.GetType());
                sampleEvent = null;
            }

            ScriptResolver scriptResolver = new ScriptResolver(newScripts);

            responder.Say(scriptResolver, ScriptName, sampleEvent, 3, false);
        }
Beispiel #14
0
        public void TestScript(string scriptName, Dictionary <string, Script> scripts)
        {
            // See if we have a sample
            List <Event> sampleEvents;
            object       sample = Events.SampleByName(scriptName);

            if (sample == null)
            {
                sampleEvents = new List <Event>();
            }
            else if (sample is string)
            {
                // It's a string so a journal entry.  Parse it
                sampleEvents = JournalMonitor.ParseJournalEntry((string)sample);
            }
            else if (sample is Event)
            {
                // It's a direct event
                sampleEvents = new List <Event>()
                {
                    (Event)sample
                };
            }
            else
            {
                Logging.Warn("Unknown sample type " + sample.GetType());
                sampleEvents = new List <Event>();
            }

            ScriptResolver testScriptResolver = new ScriptResolver(scripts);

            if (sampleEvents.Count == 0)
            {
                sampleEvents.Add(null);
            }
            foreach (Event sampleEvent in sampleEvents)
            {
                Say(testScriptResolver, ((ShipMonitor)EDDI.Instance.ObtainMonitor("Ship monitor"))?.GetCurrentShip(), scriptName, sampleEvent, testScriptResolver.priority(scriptName));
            }
        }
Beispiel #15
0
        // Say something with a custom resolver
        public void Say(ScriptResolver resolver, Ship ship, string scriptName, Event theEvent = null, int?priority = null, string voice = null, bool sayOutLoud = true, bool invokedFromVA = false)
        {
            Dictionary <string, Cottle.Value> dict = resolver.createVariables(theEvent);
            string speech = resolver.resolveFromName(scriptName, dict, true);

            if (speech != null)
            {
                if (subtitles)
                {
                    // Log a tidied version of the speech
                    string tidiedSpeech = Regex.Replace(speech, "<.*?>", string.Empty).Trim();
                    if (!string.IsNullOrEmpty(tidiedSpeech))
                    {
                        log(tidiedSpeech);
                    }
                }
                if (sayOutLoud && !(subtitles && subtitlesOnly))
                {
                    SpeechService.Instance.Say(ship, speech, (priority == null ? resolver.priority(scriptName) : (int)priority), voice, false, theEvent?.type, invokedFromVA);
                }
            }
        }
        private void testButtonClick(object sender, RoutedEventArgs e)
        {
            // Splice the new script in to the existing scripts
            Dictionary<string, Script> newScripts = new Dictionary<string, Script>(scripts);
            Script testScript = new Script(ScriptName, ScriptDescription, false, ScriptValue);
            newScripts.Remove(ScriptName);
            newScripts.Add(ScriptName, testScript);

            SpeechResponder responder = new SpeechResponder();
            responder.Start();

            // See if we have a sample
            Event sampleEvent;
            object sample = Events.SampleByName(script.Name);
            if (sample == null)
            {
                sampleEvent = null;
            }
            else if (sample.GetType() == typeof(string))
            {
                // It's as tring so a journal entry.  Parse it
                sampleEvent = JournalMonitor.ParseJournalEntry((string)sample);
            }
            else if (sample.GetType() == typeof(Event))
            {
                // It's a direct event
                sampleEvent = (Event)sample;
            }
            else
            {
                Logging.Warn("Unknown sample type " + sample.GetType());
                sampleEvent = null;
            }

            ScriptResolver scriptResolver = new ScriptResolver(newScripts);
            responder.Say(scriptResolver, ScriptName, sampleEvent, 3, false);
        }
        private void testScript(object sender, RoutedEventArgs e)
        {
            Script script = ((KeyValuePair<string, Script>)((Button)e.Source).DataContext).Value;
            SpeechResponder responder = new SpeechResponder();
            responder.Start();
            // See if we have a sample
            Event sampleEvent;
            object sample = Events.SampleByName(script.Name);
            if (sample == null)
            {
                sampleEvent = null;
            }
            else if (sample.GetType() == typeof(string))
            {
                // It's as tring so a journal entry.  Parse it
                sampleEvent = JournalMonitor.ParseJournalEntry((string)sample);
            }
            else if (sample.GetType() == typeof(Event))
            {
                // It's a direct event
                sampleEvent = (Event)sample;
            }
            else
            {
                Logging.Warn("Unknown sample type " + sample.GetType());
                sampleEvent = null;
            }

            ScriptResolver scriptResolver = new ScriptResolver(Personality.Scripts);
            responder.Say(scriptResolver, script.Name, sampleEvent);
        }
 // Say something with a custom resolver
 public void Say(ScriptResolver resolver, string scriptName, Event theEvent = null, int? priority = null, bool? wait = null)
 {
     Dictionary<string, Cottle.Value> dict = createVariables(theEvent);
     string script = resolver.resolve(scriptName, dict);
     if (script != null)
     {
         SpeechService.Instance.Say(EDDI.Instance.Ship, script, (wait == null ? true : (bool)wait), (priority == null ? resolver.priority(scriptName) : (int)priority));
     }
 }
Beispiel #19
0
        // Create Cottle variables from the EDDI information
        private Dictionary <string, Cottle.Value> createVariables(Event theEvent = null)
        {
            Dictionary <string, Cottle.Value> dict = new Dictionary <string, Cottle.Value>();

            dict["vehicle"]     = EDDI.Instance.Vehicle;
            dict["environment"] = EDDI.Instance.Environment;

            if (EDDI.Instance.Cmdr != null)
            {
                dict["cmdr"] = new ReflectionValue(EDDI.Instance.Cmdr);
            }

            if (EDDI.Instance.HomeStarSystem != null)
            {
                dict["homesystem"] = new ReflectionValue(EDDI.Instance.HomeStarSystem);
            }

            if (EDDI.Instance.HomeStation != null)
            {
                dict["homestation"] = new ReflectionValue(EDDI.Instance.HomeStation);
            }

            if (EDDI.Instance.CurrentStarSystem != null)
            {
                dict["system"] = new ReflectionValue(EDDI.Instance.CurrentStarSystem);
            }

            if (EDDI.Instance.LastStarSystem != null)
            {
                dict["lastsystem"] = new ReflectionValue(EDDI.Instance.LastStarSystem);
            }

            if (EDDI.Instance.CurrentStation != null)
            {
                dict["station"] = new ReflectionValue(EDDI.Instance.CurrentStation);
            }

            if (EDDI.Instance.CurrentStellarBody != null)
            {
                dict["body"] = new ReflectionValue(EDDI.Instance.CurrentStellarBody);
            }

            if (StatusMonitor.currentStatus != null)
            {
                dict["status"] = new ReflectionValue(StatusMonitor.currentStatus);
            }

            if (theEvent != null)
            {
                dict["event"] = new ReflectionValue(theEvent);
            }

            if (EDDI.Instance.State != null)
            {
                dict["state"] = ScriptResolver.buildState();
                Logging.Debug("State is " + JsonConvert.SerializeObject(EDDI.Instance.State));
            }

            // Obtain additional variables from each monitor
            foreach (EDDIMonitor monitor in EDDI.Instance.monitors)
            {
                IDictionary <string, object> monitorVariables = monitor.GetVariables();
                if (monitorVariables != null)
                {
                    foreach (string key in monitorVariables.Keys)
                    {
                        if (monitorVariables[key] == null)
                        {
                            dict.Remove(key);
                        }
                        else
                        {
                            dict[key] = new ReflectionValue(monitorVariables[key]);
                        }
                    }
                }
            }

            return(dict);
        }
 public void TestResolverSimple()
 {
     Dictionary<string, Script> scripts = new Dictionary<string, Script>();
     scripts.Add("test", new Script("test", null, false, "Hello {name}"));
     ScriptResolver resolver = new ScriptResolver(scripts);
     Dictionary<string, Cottle.Value> dict = new Dictionary<string, Cottle.Value>();
     dict["name"] = "world";
     string result = resolver.resolve("test", dict);
     Assert.AreEqual("Hello world", result);
 }
Beispiel #21
0
        // Create Cottle variables from the EDDI information
        private Dictionary <string, Cottle.Value> createVariables(Event theEvent = null)
        {
            Dictionary <string, Cottle.Value> dict = new Dictionary <string, Cottle.Value>
            {
                ["capi_active"]         = CompanionAppService.Instance?.active ?? false,
                ["destinationdistance"] = EDDI.Instance.DestinationDistanceLy,
                ["environment"]         = EDDI.Instance.Environment,
                ["horizons"]            = EDDI.Instance.inHorizons,
                ["va_active"]           = App.FromVA,
                ["vehicle"]             = EDDI.Instance.Vehicle
            };

            if (EDDI.Instance.Cmdr != null)
            {
                dict["cmdr"] = new ReflectionValue(EDDI.Instance.Cmdr);
            }

            if (EDDI.Instance.HomeStarSystem != null)
            {
                dict["homesystem"] = new ReflectionValue(EDDI.Instance.HomeStarSystem);
            }

            if (EDDI.Instance.HomeStation != null)
            {
                dict["homestation"] = new ReflectionValue(EDDI.Instance.HomeStation);
            }

            if (EDDI.Instance.SquadronStarSystem != null)
            {
                dict["squadronsystem"] = new ReflectionValue(EDDI.Instance.SquadronStarSystem);
            }

            if (EDDI.Instance.CurrentStarSystem != null)
            {
                dict["system"] = new ReflectionValue(EDDI.Instance.CurrentStarSystem);
            }

            if (EDDI.Instance.LastStarSystem != null)
            {
                dict["lastsystem"] = new ReflectionValue(EDDI.Instance.LastStarSystem);
            }

            if (EDDI.Instance.NextStarSystem != null)
            {
                dict["nextsystem"] = new ReflectionValue(EDDI.Instance.NextStarSystem);
            }

            if (EDDI.Instance.DestinationStarSystem != null)
            {
                dict["destinationsystem"] = new ReflectionValue(EDDI.Instance.DestinationStarSystem);
            }

            if (EDDI.Instance.DestinationStation != null)
            {
                dict["destinationstation"] = new ReflectionValue(EDDI.Instance.DestinationStation);
            }

            if (EDDI.Instance.CurrentStation != null)
            {
                dict["station"] = new ReflectionValue(EDDI.Instance.CurrentStation);
            }

            if (EDDI.Instance.CurrentStellarBody != null)
            {
                dict["body"] = new ReflectionValue(EDDI.Instance.CurrentStellarBody);
            }

            if (((StatusMonitor)EDDI.Instance.ObtainMonitor("Status monitor"))?.currentStatus != null)
            {
                dict["status"] = new ReflectionValue(((StatusMonitor)EDDI.Instance.ObtainMonitor("Status monitor"))?.currentStatus);
            }

            if (theEvent != null)
            {
                dict["event"] = new ReflectionValue(theEvent);
            }

            if (EDDI.Instance.State != null)
            {
                dict["state"] = ScriptResolver.buildState();
                Logging.Debug("State is " + JsonConvert.SerializeObject(EDDI.Instance.State));
            }

            // Obtain additional variables from each monitor
            foreach (EDDIMonitor monitor in EDDI.Instance.monitors)
            {
                IDictionary <string, object> monitorVariables = monitor.GetVariables();
                if (monitorVariables != null)
                {
                    foreach (string key in monitorVariables.Keys)
                    {
                        if (monitorVariables[key] == null)
                        {
                            dict.Remove(key);
                        }
                        else
                        {
                            dict[key] = new ReflectionValue(monitorVariables[key]);
                        }
                    }
                }
            }

            return(dict);
        }