NetMud.Communication.Messaging.MessageCluster.ExecuteMessaging C# (CSharp) 메소드

ExecuteMessaging() 공개 메소드

Executes the messaging, sending messages using WriteTo on all relevant entities
public ExecuteMessaging ( IEntity Actor, IEntity Subject, IEntity Target, IEntity OriginLocation, IEntity DestinationLocation ) : void
Actor IEntity The acting entity
Subject IEntity The command's subject entity
Target IEntity The command's target entity
OriginLocation IEntity The location the acting entity acted in
DestinationLocation IEntity The location the command is targetting
리턴 void
        public void ExecuteMessaging(IEntity Actor, IEntity Subject, IEntity Target, IEntity OriginLocation, IEntity DestinationLocation)
        {
            var entities = new Dictionary<MessagingTargetType, IEntity[]>();

            entities.Add(MessagingTargetType.Actor, new IEntity[] { Actor });
            entities.Add(MessagingTargetType.Subject, new IEntity[] { Subject });
            entities.Add(MessagingTargetType.Target, new IEntity[] { Target });
            entities.Add(MessagingTargetType.OriginLocation, new IEntity[] { OriginLocation });
            entities.Add(MessagingTargetType.DestinationLocation, new IEntity[] { DestinationLocation });

            if (Actor != null && ToActor.Any(str => !string.IsNullOrWhiteSpace(str)))
                Actor.WriteTo(TranslateOutput(ToActor, entities));

            if (Subject != null && ToSubject.Any(str => !string.IsNullOrWhiteSpace(str)))
                Subject.WriteTo(TranslateOutput(ToSubject, entities));

            if (Target != null && ToTarget.Any(str => !string.IsNullOrWhiteSpace(str)))
                Target.WriteTo(TranslateOutput(ToTarget, entities));

            if (OriginLocation != null && ToOrigin.Any(str => !string.IsNullOrWhiteSpace(str)))
            {
                var oLoc = (IContains)OriginLocation;
                var validContents = oLoc.GetContents<IEntity>().Where(dud => !dud.Equals(Actor) && !dud.Equals(Subject) && !dud.Equals(Target));

                //Message dudes in the location, including non-person entities since they might have triggers
                foreach (var dude in validContents)
                    dude.WriteTo(TranslateOutput(ToOrigin, entities));
            }

            if (DestinationLocation != null && ToDestination.Any(str => !string.IsNullOrWhiteSpace(str)))
            {
                var oLoc = (IContains)DestinationLocation;

                //Message dudes in the location, including non-person entities since they might have triggers
                foreach (var dude in oLoc.GetContents<IEntity>().Where(dud => !dud.Equals(Actor) && !dud.Equals(Subject) && !dud.Equals(Target)))
                    dude.WriteTo(TranslateOutput(ToDestination, entities));
            }

            //TODO: to surrounding?
        }

Usage Example

예제 #1
0
        /// <summary>
        /// Executes this command
        /// </summary>
        public override void Execute()
        {
            var sb = new List<string>();
            var thing = (IEntity)Subject;
            var actor = (IContains)Actor;
            IContains place;

            string toRoomMessage = "$A$ gets $S$.";

            if (Target != null)
            {
                place = (IContains)Target;
                toRoomMessage = "$A$ gets $S$ from $T$.";
                sb.Add("You get $S$ from $T$.");
            }
            else
            {
                place = (IContains)OriginLocation;
                sb.Add("You get $S$.");
            }

            place.MoveFrom(thing);
            actor.MoveInto(thing);

            var messagingObject = new MessageCluster(sb, new string[] { }, new string[] { }, new string[] { toRoomMessage }, new string[] { });

            messagingObject.ExecuteMessaging(Actor, thing, (IEntity)Target, OriginLocation, null);
        }
All Usage Examples Of NetMud.Communication.Messaging.MessageCluster::ExecuteMessaging