コード例 #1
0
        /// <summary>
        /// Render a natural resource collection to a viewer
        /// </summary>
        /// <param name="viewer">the entity looking</param>
        /// <param name="amount">How much of it there is</param>
        /// <returns>a view string</returns>
        public override ILexicalParagraph RenderResourceCollection(IEntity viewer, int amount)
        {
            if (amount <= 0)
            {
                return(new LexicalParagraph());
            }

            LexicalContext collectiveContext = new LexicalContext(viewer)
            {
                Determinant = false,
                Perspective = NarrativePerspective.SecondPerson,
                Plural      = false,
                Position    = LexicalPosition.None,
                Tense       = LexicalTense.Present
            };

            LexicalContext discreteContext = new LexicalContext(viewer)
            {
                Determinant = false,
                Perspective = NarrativePerspective.ThirdPerson,
                Plural      = false,
                Position    = LexicalPosition.Attached,
                Tense       = LexicalTense.Present
            };
            string sizeWord;

            if (amount < 20)
            {
                sizeWord = "sparse";
            }
            else if (amount < 50)
            {
                sizeWord = "small";
            }
            else if (amount < 200)
            {
                sizeWord = "";
            }
            else
            {
                sizeWord = "vast";
            }

            SensoryEvent observer = new SensoryEvent(new Lexica(LexicalType.Pronoun, GrammaticalType.Subject, "you", collectiveContext), 0, MessagingType.Visible)
            {
                Strength = GetVisibleDelta(viewer)
            };

            SensoryEvent collectiveNoun = new SensoryEvent(new Lexica(LexicalType.Noun, GrammaticalType.DirectObject, "forest", collectiveContext),
                                                           GetVisibleDelta(viewer), MessagingType.Visible);

            ISensoryEvent me = GetSelf(MessagingType.Visible, GetVisibleDelta(viewer));

            me.Event.Role = GrammaticalType.Descriptive;

            collectiveNoun.TryModify(me);

            SensoryEvent senseVerb = new SensoryEvent(new Lexica(LexicalType.Verb, GrammaticalType.Verb, "see", collectiveContext), me.Strength, MessagingType.Visible);

            if (!string.IsNullOrWhiteSpace(sizeWord))
            {
                collectiveNoun.TryModify(new Lexica(LexicalType.Adjective, GrammaticalType.Descriptive, sizeWord, discreteContext));
            }

            senseVerb.TryModify(collectiveNoun);
            observer.TryModify(senseVerb);

            return(new LexicalParagraph(observer));
        }
コード例 #2
0
        /// <summary>
        /// Render this as being show inside a container
        /// </summary>
        /// <param name="viewer">The entity looking</param>
        /// <returns>the output strings</returns>
        public override ILexicalParagraph RenderAsContents(IEntity viewer, MessagingType[] sensoryTypes)
        {
            if (sensoryTypes == null || sensoryTypes.Count() == 0)
            {
                sensoryTypes = new MessagingType[] { MessagingType.Audible, MessagingType.Olefactory, MessagingType.Psychic, MessagingType.Tactile, MessagingType.Taste, MessagingType.Visible };
            }

            LexicalContext collectiveContext = new LexicalContext(viewer)
            {
                Determinant = true,
                Perspective = NarrativePerspective.SecondPerson,
                Plural      = false,
                Position    = LexicalPosition.None,
                Tense       = LexicalTense.Present
            };

            LexicalContext discreteContext = new LexicalContext(viewer)
            {
                Determinant = false,
                Perspective = NarrativePerspective.ThirdPerson,
                Plural      = false,
                Position    = LexicalPosition.Far,
                Tense       = LexicalTense.Present
            };

            List <ISensoryEvent> sensoryOutput = new List <ISensoryEvent>();

            foreach (MessagingType sense in sensoryTypes)
            {
                SensoryEvent me        = new SensoryEvent(new Lexica(LexicalType.Pronoun, GrammaticalType.Subject, "you", collectiveContext), 0, sense);
                ILexica      senseVerb = null;
                IEnumerable <ISensoryEvent> senseDescs = Enumerable.Empty <ISensoryEvent>();

                switch (sense)
                {
                case MessagingType.Audible:
                    me.Strength = GetAudibleDelta(viewer);

                    senseVerb = new Lexica(LexicalType.Verb, GrammaticalType.Verb, "hear", collectiveContext);

                    IEnumerable <ISensoryEvent> audibleDescs = GetAudibleDescriptives(viewer);

                    if (audibleDescs.Count() == 0)
                    {
                        continue;
                    }

                    ISensoryEvent audibleNoun = null;
                    if (!audibleDescs.Any(desc => desc.Event.Role == GrammaticalType.DirectObject))
                    {
                        audibleNoun = new SensoryEvent(new Lexica(LexicalType.Noun, GrammaticalType.DirectObject, "noise", discreteContext), me.Strength, sense);
                    }
                    else
                    {
                        audibleNoun = audibleDescs.FirstOrDefault(desc => desc.Event.Role == GrammaticalType.DirectObject);
                    }

                    audibleNoun.TryModify(audibleDescs.Where(desc => desc.Event.Role == GrammaticalType.Descriptive));
                    senseDescs = new List <ISensoryEvent>()
                    {
                        audibleNoun
                    };
                    break;

                case MessagingType.Olefactory:
                    me.Strength = GetOlefactoryDelta(viewer);

                    senseVerb = new Lexica(LexicalType.Verb, GrammaticalType.Verb, "smell", collectiveContext);

                    IEnumerable <ISensoryEvent> smellDescs = GetOlefactoryDescriptives(viewer);

                    if (smellDescs.Count() == 0)
                    {
                        continue;
                    }

                    ISensoryEvent smellNoun = null;
                    if (!smellDescs.Any(desc => desc.Event.Role == GrammaticalType.DirectObject))
                    {
                        smellNoun = new SensoryEvent(new Lexica(LexicalType.Noun, GrammaticalType.DirectObject, "odor", discreteContext), me.Strength, sense);
                    }
                    else
                    {
                        smellNoun = smellDescs.FirstOrDefault(desc => desc.Event.Role == GrammaticalType.DirectObject);
                    }

                    smellNoun.TryModify(smellDescs.Where(desc => desc.Event.Role == GrammaticalType.Descriptive));
                    senseDescs = new List <ISensoryEvent>()
                    {
                        smellNoun
                    };
                    break;

                case MessagingType.Psychic:
                    me.Strength = GetPsychicDelta(viewer);

                    senseVerb = new Lexica(LexicalType.Verb, GrammaticalType.Verb, "sense", collectiveContext);

                    IEnumerable <ISensoryEvent> psyDescs = GetPsychicDescriptives(viewer);

                    if (psyDescs.Count() == 0)
                    {
                        continue;
                    }

                    ISensoryEvent psyNoun = null;
                    if (!psyDescs.Any(desc => desc.Event.Role == GrammaticalType.DirectObject))
                    {
                        psyNoun = new SensoryEvent(new Lexica(LexicalType.Noun, GrammaticalType.DirectObject, "presence", discreteContext), me.Strength, sense);
                    }
                    else
                    {
                        psyNoun = psyDescs.FirstOrDefault(desc => desc.Event.Role == GrammaticalType.DirectObject);
                    }

                    psyNoun.TryModify(psyDescs.Where(desc => desc.Event.Role == GrammaticalType.Descriptive));
                    senseDescs = new List <ISensoryEvent>()
                    {
                        psyNoun
                    };
                    break;

                case MessagingType.Tactile:
                case MessagingType.Taste:
                    continue;

                case MessagingType.Visible:
                    me.Strength = GetVisibleDelta(viewer);

                    senseVerb = new Lexica(LexicalType.Verb, GrammaticalType.Verb, "see", collectiveContext);

                    IEnumerable <ISensoryEvent> seeDescs = GetVisibleDescriptives(viewer);

                    if (seeDescs.Count() == 0)
                    {
                        continue;
                    }

                    ISensoryEvent seeNoun = null;
                    if (!seeDescs.Any(desc => desc.Event.Role == GrammaticalType.DirectObject))
                    {
                        seeNoun = new SensoryEvent(new Lexica(LexicalType.Noun, GrammaticalType.DirectObject, "thing", discreteContext), me.Strength, sense);
                    }
                    else
                    {
                        seeNoun = seeDescs.FirstOrDefault(desc => desc.Event.Role == GrammaticalType.DirectObject);
                    }

                    seeNoun.TryModify(seeDescs.Where(desc => desc.Event.Role == GrammaticalType.Descriptive));
                    senseDescs = new List <ISensoryEvent>()
                    {
                        seeNoun
                    };
                    break;
                }

                if (senseVerb != null && senseDescs.Count() > 0)
                {
                    IEnumerable <ILexica> senseEvents = senseDescs.Select(desc => desc.Event);

                    foreach (ILexica evt in senseEvents)
                    {
                        evt.Context = discreteContext;
                        senseVerb.TryModify(evt);
                    }

                    me.TryModify(senseVerb);
                    sensoryOutput.Add(me);
                }
            }

            return(new LexicalParagraph(sensoryOutput));
        }
コード例 #3
0
        /// <summary>
        /// Render a natural resource collection to a viewer
        /// </summary>
        /// <param name="viewer">the entity looking</param>
        /// <param name="amount">How much of it there is</param>
        /// <returns>a view string</returns>
        public override ILexicalParagraph RenderResourceCollection(IEntity viewer, int amount)
        {
            if (amount <= 0)
            {
                return(new LexicalParagraph());
            }

            LexicalContext personalContext = new LexicalContext(viewer)
            {
                Determinant = false,
                Perspective = NarrativePerspective.SecondPerson,
                Plural      = false,
                Position    = LexicalPosition.Around,
                Tense       = LexicalTense.Present
            };

            LexicalContext discreteContext = new LexicalContext(viewer)
            {
                Determinant = false,
                Perspective = NarrativePerspective.ThirdPerson,
                Plural      = false,
                Position    = LexicalPosition.None,
                Tense       = LexicalTense.Present
            };

            LexicalContext collectiveContext = new LexicalContext(viewer)
            {
                Determinant = false,
                Perspective = NarrativePerspective.ThirdPerson,
                Plural      = false,
                Position    = LexicalPosition.PartOf,
                Tense       = LexicalTense.Present
            };
            string sizeWord;

            if (amount < 20)
            {
                sizeWord = "sparse";
            }
            else if (amount < 50)
            {
                sizeWord = "small";
            }
            else if (amount < 200)
            {
                sizeWord = "";
            }
            else
            {
                sizeWord = "large";
            }

            SensoryEvent collectiveNoun = new SensoryEvent(new Lexica(LexicalType.Noun, GrammaticalType.Subject, Race.CollectiveNoun, discreteContext),
                                                           GetVisibleDelta(viewer), MessagingType.Visible);

            ISensoryEvent me = GetSelf(MessagingType.Visible, GetVisibleDelta(viewer));

            me.Event.Role    = GrammaticalType.Descriptive;
            me.Event.Context = collectiveContext;

            collectiveNoun.TryModify(me);

            if (!string.IsNullOrWhiteSpace(sizeWord))
            {
                collectiveNoun.TryModify(new Lexica(LexicalType.Adjective, GrammaticalType.Descriptive, sizeWord, discreteContext));
            }

            Lexica observer = new Lexica(LexicalType.Pronoun, GrammaticalType.DirectObject, "you", personalContext);

            collectiveNoun.TryModify(new Lexica(LexicalType.Verb, GrammaticalType.Verb, "roams", personalContext).TryModify(observer, true));

            return(new LexicalParagraph(collectiveNoun));
        }