/// <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; }
public void TestFollowingBehaviorStartsOutNull() { this.ClearTrackedEvents(); var followingBehavior = new FollowingBehavior(); this.stalker1.Behaviors.Add(followingBehavior); Verify.IsNull(followingBehavior.Target); }
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); }
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); }
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); }
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.")); }