コード例 #1
0
ファイル: Follow.cs プロジェクト: Hobbitron/WheelMUD
        /// <summary>Executes the command.</summary>
        /// <param name="actionInput">The full input specified for executing the command.</param>
        public override void Execute(ActionInput actionInput)
        {
            IController sender = actionInput.Controller;
            var self = sender.Thing;

            if (actionInput.Params.Length == 0)
            {
                this.ShowStatus(actionInput);
                return;
            }

            // Check for existing FollowedBehavior on the target and create one if necessary.
            // Then add the sender to the list of followers.
            var targetBehaviors = this.target.Behaviors;
            var followedBehavior = targetBehaviors.FindFirst<FollowedBehavior>();
            if (followedBehavior == null)
            {
                followedBehavior = new FollowedBehavior();
                targetBehaviors.Add(followedBehavior);
            }

            followedBehavior.Followers.Add(self);

            // Check for existing FollowingBehavior on the sender and create one if necessary.
            // Then mark the target as the Thing being followed.
            var senderBehaviors = self.Behaviors;
            var followingBehavior = senderBehaviors.FindFirst<FollowingBehavior>();
            if (followingBehavior == null)
            {
                followingBehavior = new FollowingBehavior();
                senderBehaviors.Add(followingBehavior);
            }
            else if (followingBehavior.Target != null)
            {
                var oldTarget = followingBehavior.Target;
                var oldTargetFollowedBehavior = oldTarget.Behaviors.FindFirst<FollowedBehavior>();
                if (oldTargetFollowedBehavior != null)
                {
                    oldTargetFollowedBehavior.Followers.Remove(self);
                    if (oldTargetFollowedBehavior.Followers.Count == 0)
                    {
                        oldTarget.Behaviors.Remove(oldTargetFollowedBehavior);
                    }
                }
            }

            followingBehavior.Target = this.target;
        }
コード例 #2
0
 public void TestFollowingBehaviorStartsOutNull()
 {
     this.ClearTrackedEvents();
     var followingBehavior = new FollowingBehavior();
     this.stalker1.Behaviors.Add(followingBehavior);
     Verify.IsNull(followingBehavior.Target);
 }
コード例 #3
0
        public void TestUnattachedFollowingBehavior()
        {
            var followingBehavior = new FollowingBehavior();
            var initialState = followingBehavior.Target;

            followingBehavior.Target = this.victim1;
            Verify.Equals(this.victim1, followingBehavior.Target);

            followingBehavior.Target = null;
            Verify.Equals(initialState, followingBehavior.Target);
        }
コード例 #4
0
 public void TestSettingTarget()
 {
     this.ClearTrackedEvents();
     var followingBehavior = new FollowingBehavior();
     this.stalker1.Behaviors.Add(followingBehavior);
     followingBehavior.Target = this.victim1;
     Verify.IsNotNull(followingBehavior.Target);
     Verify.AreEqual(followingBehavior.Target, this.victim1);
 }
コード例 #5
0
        public void TestRemovingTarget()
        {
            this.ClearTrackedEvents();

            Verify.IsNull(this.lastStalkerRequest);
            Verify.IsNull(this.lastStalkerEvent);

            Verify.IsNull(this.lastVictimRequest);
            Verify.IsNull(this.lastVictimEvent);

            var followingBehavior = new FollowingBehavior();
            this.stalker1.Behaviors.Add(followingBehavior);
            followingBehavior.Target = this.victim1;
            followingBehavior.Target = null;

            Verify.IsNull(followingBehavior.Target);

            Verify.IsNotNull(this.lastStalkerRequest);
            Verify.IsNotNull(this.lastStalkerEvent);

            Verify.IsNotNull(this.lastVictimRequest);
            Verify.IsNotNull(this.lastVictimEvent);
        }
コード例 #6
0
        public void TestFollowingMessages()
        {
            this.ClearTrackedEvents();
            var followingBehavior = new FollowingBehavior();
            this.stalker1.Behaviors.Add(followingBehavior);
            followingBehavior.Target = this.victim1;

            string witnessMessage = this.lastWitnessEvent.SensoryMessage.Message.Parse(this.witness);
            Verify.IsTrue(string.IsNullOrEmpty(witnessMessage));

            string stalkerMessage = this.lastStalkerEvent.SensoryMessage.Message.Parse(this.stalker1);
            Verify.IsTrue(stalkerMessage.Contains("You start following "));

            string victimMessage = this.lastVictimEvent.SensoryMessage.Message.Parse(this.victim1);
            Verify.IsTrue(victimMessage.Contains(" starts following you."));

            followingBehavior.Target = null;

            witnessMessage = this.lastWitnessEvent.SensoryMessage.Message.Parse(this.witness);
            Verify.IsTrue(string.IsNullOrEmpty(witnessMessage));

            stalkerMessage = this.lastStalkerEvent.SensoryMessage.Message.Parse(this.stalker1);
            Verify.IsTrue(stalkerMessage.Contains("You stop following "));

            victimMessage = this.lastVictimEvent.SensoryMessage.Message.Parse(this.victim1);
            Verify.IsTrue(victimMessage.Contains(" stops following you."));
        }