private Intention GetNextIntention() { if (SelectedStrategy == null) { return(null); } var intentions = SelectedStrategy.GetIntentions(); if (_selectIntentIndex >= intentions.Count) { SelectedStrategy = null; return(null); } var intention = intentions.ElementAt(_selectIntentIndex); ++_selectIntentIndex; if (_selectIntentIndex >= intentions.Count) { SelectedStrategy = null; } return(intention); }
public Intention SelectIntention(History history, ICollection <IEmpathicStrategy> strategies, User user) { if (SelectedStrategy != null) { return(GetNextIntention()); } if (!_shownIntro) { SelectedStrategy = GetStrategyByName(strategies, "welcome"); _shownIntro = true; } else { // IF emotivector woke then choose strategy var expectancy = history.Get <Emotivector.Expectancy>("Expectancy"); if (expectancy != null) { string name = expectancy.Owner.Name.ToLower(), valence = expectancy.valence.ToString().ToLower(), change; switch (expectancy.change) { case Emotivector.Expectancy.Change.BetterThanExpected: change = "greater"; break; case Emotivector.Expectancy.Change.WorseThanExpected: change = "lesser"; break; case Emotivector.Expectancy.Change.AsExpected: // Waterfall default: change = "as-expected"; break; } SelectedStrategy = GetStrategyByName(strategies, name + "-" + valence + "-" + change); history.Set("Expectancy", null); } else { // ELSE choose interaction strategy if (_shownStrategies >= NumStrategiesPerDay) { SelectedStrategy = GetStrategyByName(strategies, "exit"); } else { List <IEmpathicStrategy> introStrategies = GetStrategiesContainsName(strategies, "intro"); // Randomize List introStrategies = introStrategies.OrderBy(a => Guid.NewGuid()).ToList(); foreach (var introStrategy in introStrategies) { if (introStrategy.IsValid() && !PlayedStrategies.Contains(introStrategy.Name)) { PlayedStrategies.Add(introStrategy.Name); ++ShownStrategies; SelectedStrategy = introStrategy; break; } } } } } return(GetNextIntention()); }