NetMud.Communication.Messaging.MessageCluster.ExecuteMessaging C# (CSharp) Method

ExecuteMessaging() public method

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
return 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

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