예제 #1
0
        protected Story PrintInternalStory(StoryProgressionObject manager, string storyKey, string summaryKey, object[] oldParameters, string[] extended, PerformFormat format, bool notify, SummaryPerSim summaryPerSim, StoryLogging logging)
        {
            bool matchesAlert = notify, foundSim = false, foundLot = false;

            Story.Element element1 = null;
            Story.Element element2 = null;

            CASAgeGenderFlags firstGender  = CASAgeGenderFlags.None;
            CASAgeGenderFlags secondGender = CASAgeGenderFlags.None;

            List <object> newParameters = new List <object>();

            if (!matchesAlert)
            {
                if (oldParameters.Length == 0)
                {
                    matchesAlert = true;
                }
                else if (manager != null)
                {
                    foreach (object obj in oldParameters)
                    {
                        SimDescription sim = null;
                        if (obj is Sim)
                        {
                            sim = (obj as Sim).SimDescription;
                        }
                        else
                        {
                            sim = obj as SimDescription;
                        }

                        if (sim != null)
                        {
                            if (manager.MatchesAlertLevel(sim))
                            {
                                matchesAlert = true;
                                break;
                            }
                        }
                        else
                        {
                            Lot lot = obj as Lot;
                            if ((lot != null) && (lot.Household != null))
                            {
                                if (manager.MatchesAlertLevel(lot.Household.AllSimDescriptions))
                                {
                                    matchesAlert = true;
                                    break;
                                }
                            }
                        }
                    }
                }
            }

            foreach (object obj in oldParameters)
            {
                SimDescription sim = null;
                if (obj is Sim)
                {
                    sim = (obj as Sim).SimDescription;
                }
                else
                {
                    sim = obj as SimDescription;
                }

                if (sim != null)
                {
                    newParameters.Add(obj);

                    if ((summaryPerSim == SummaryPerSim.Yes) || (!foundSim))
                    {
                        AddSummary(manager, sim, summaryKey, extended, logging);
                    }

                    AddGenderNouns(sim, newParameters);

                    foundSim = true;

                    if (element1 == null)
                    {
                        firstGender = sim.Gender;

                        element1 = new Story.Element(sim);
                    }
                    else if (element2 == null)
                    {
                        secondGender = sim.Gender;

                        element2 = new Story.Element(sim);
                    }
                }
                else
                {
                    Lot lot = obj as Lot;
                    if (lot != null)
                    {
                        string name = lot.Name.Trim();
                        if (string.IsNullOrEmpty(name))
                        {
                            name = Localize("SomeHome");
                        }
                        newParameters.Add(name);

                        name = lot.Address.Trim();
                        if (string.IsNullOrEmpty(name))
                        {
                            name = Localize("SomeAddress");
                        }
                        newParameters.Add(name);

                        foundLot = true;

                        if (!string.IsNullOrEmpty(lot.Name))
                        {
                            AddSummary(manager, lot.Name, summaryKey, null, matchesAlert, logging);
                        }

                        AddSummary(manager, lot.Address, summaryKey, extended, matchesAlert, logging);

                        if (element1 == null)
                        {
                            element1 = new Story.Element(lot.ObjectId);
                        }
                        else if (element2 == null)
                        {
                            element2 = new Story.Element(lot.ObjectId);
                        }
                    }
                    else
                    {
                        newParameters.Add(obj);

                        string str = obj as string;
                        if (str != null)
                        {
                            if ((!foundSim) && (foundLot))
                            {
                                AddSummary(manager, str, summaryKey, extended, matchesAlert, logging);
                            }
                        }
                    }
                }
            }

            if (((logging & StoryLogging.Notice) == StoryLogging.Notice) && ((!foundSim) || (matchesAlert)))
            {
                string text = storyKey;
                if (format == PerformFormat.Yes)
                {
                    object[] parameters = newParameters.ToArray();

                    string uniqueKey = manager.UnlocalizedName + storyKey;

                    List <AvailableStory> stories;
                    if (!mValidStories.TryGetValue(uniqueKey, out stories))
                    {
                        stories = new List <AvailableStory>();

                        mValidStories.Add(uniqueKey, stories);

                        for (int i = 0; i <= 9; i++)
                        {
                            AvailableStory story = new AvailableStory(manager, storyKey + i.ToString(), parameters);
                            if (!story.IsValid)
                            {
                                continue;
                            }

                            stories.Add(story);
                        }
                    }

                    if (stories.Count > 0)
                    {
                        AvailableStory set = RandomUtil.GetRandomObjectFromList(stories);

                        text = set.Localize(manager, firstGender, secondGender, parameters);

                        IncStat("Story: " + uniqueKey);
                    }
                    else
                    {
                        text = manager.Localize(storyKey + "0", false, parameters);

                        IncStat("Missing: " + text, Common.DebugLevel.High);
                    }
                }

                if (!string.IsNullOrEmpty(text))
                {
                    return(NewStory(new Story(manager, text, element1, element2)));
                }
            }

            return(new Story(manager, null, null));
        }