public void TestHoldUpRefuseReturnToHoldUpAfterAnimationFinishes() { RobotAi ai = new MockRobotAi(); MockRobot robot = (MockRobot)ai.Robot; MockPlayer player = (MockPlayer)ai.Player; robot.Head.Location = player.Disabler.Location = new MockLocation(); // Demand something after we've already made a demands ai.State = RobotAiState.HeldUp; ai.MarkEnemiesRequested = true; ai.HasHeldUpDemandBeenMade = true; ai.Think(); Assert.AreEqual(RobotAiState.HeldUpRefuse, ai.State); Assert.AreEqual(RobotAnimation.CoweringRefuse, robot.PlayingAnimation); // Animation is still playing ai.Think(); Assert.AreEqual(RobotAiState.HeldUpRefuse, ai.State); Assert.AreEqual(RobotAnimation.CoweringRefuse, robot.PlayingAnimation); // Animation has finished robot.PlayingAnimation = RobotAnimation.None; ai.Think(); Assert.AreEqual(RobotAiState.HeldUp, ai.State); Assert.AreEqual(RobotAnimation.CoweringStanding, robot.PlayingAnimation); }
public void TestSuspicionSeenThreeTimesStartFollowUp() { RobotAi ai = new MockRobotAi(); MockRobot robot = (MockRobot)ai.Robot; MockPlayer player = (MockPlayer)ai.Player; robot.Head.Location = robot.Location = new MockLocation(0, 0, 0); player.Disabler.Location = player.Location = new MockLocation(39, 0, 0); ai.State = RobotAiState.Patrol; for (int i = 0; i < 5; i++) { // true, false, true, false, true robot.CanSeePlayer = robot.CanHearPlayer = i % 2 == 0; ai.Think(); } Assert.AreEqual(RobotAiState.SuspicionCallHeadQuarters, ai.State); Assert.AreEqual(RobotAnimation.AlertCallHeadQuarters, robot.PlayingAnimation); robot.PlayingAnimation = RobotAnimation.None; robot.CanSeePlayer = robot.CanHearPlayer = false; ai.Think(); Assert.AreEqual(RobotAiState.SuspicionFollowUp, ai.State); Assert.AreEqual(ai.PlayerLocations.Last().Location, robot.Target); }
public void TestGetDownMarkItemReturnToGetDown() { RobotAi ai = new MockRobotAi(); MockRobot robot = (MockRobot)ai.Robot; MockPlayer player = (MockPlayer)ai.Player; MockItem item = new MockItem(robot.Location); // Hold up robot.Head.Location = player.Disabler.Location = new MockLocation(); ai.State = RobotAiState.HeldUp; ai.Think(); Assert.AreEqual(RobotAiState.HeldUp, ai.State); // Get down ai.GetDownRequested = true; ai.Think(); Assert.AreEqual(RobotAiState.HeldUpGetDown, ai.State); Assert.AreEqual(RobotAnimation.CoweringOnGround, robot.PlayingAnimation); // Mark items ai.MarkItemsRequested = true; player.Items.Add(item); ai.Think(); Assert.AreEqual(RobotAiState.HeldUpDemandMarkAmmo, ai.State); Assert.True(item.HasBeenMarkedForPlayer); // Return to get down ai.Think(); Assert.AreEqual(RobotAiState.HeldUpGetDown, ai.State); Assert.AreEqual(RobotAnimation.CoweringOnGround, robot.PlayingAnimation); }
public void TestStartMoveToInactive() { RobotAi ai = new MockRobotAi(); ai.State = RobotAiState.Start; ai.Think(); Assert.AreEqual(RobotAiState.Inactive, ai.State); }
public void TestHurtBeforeStaggerAnimationWaitsForCompletion() { RobotAi ai = new MockRobotAi(); MockRobot robot = (MockRobot)ai.Robot; MockPlayer player = (MockPlayer)ai.Player; // Just Hurt ai.State = RobotAiState.Hurt; robot.PlayingAnimation = RobotAnimation.HurtStagger; ai.Think(); Assert.AreEqual(RobotAiState.Hurt, ai.State); // Two seconds pass and animation is finished robot.PlayingAnimation = RobotAnimation.None; ai.TimeMarker = DateTime.Now - TimeSpan.FromSeconds(2.1); ai.Think(); Assert.AreEqual(RobotAiState.Suspicion, ai.State); }
public void TestHoldUpMarkItemsRefuseSecondTime() { RobotAi ai = new MockRobotAi(); MockRobot robot = (MockRobot)ai.Robot; MockPlayer player = (MockPlayer)ai.Player; MockRobot otherRobot = new MockRobot(); robot.Head.Location = player.Disabler.Location = new MockLocation(); ai.State = RobotAiState.HeldUp; ai.MarkItemsRequested = true; ai.Think(); Assert.AreEqual(RobotAiState.HeldUpDemandMarkAmmo, ai.State); ai.Think(); Assert.AreEqual(RobotAiState.HeldUp, ai.State); ai.MarkEnemiesRequested = true; ai.Think(); Assert.AreEqual(RobotAiState.HeldUpRefuse, ai.State); }
public void TestHoldUpMarkItemReturnToHeldUp() { RobotAi ai = new MockRobotAi(); MockRobot robot = (MockRobot)ai.Robot; MockPlayer player = (MockPlayer)ai.Player; MockItem item = new MockItem(robot.Location); robot.Head.Location = player.Disabler.Location = new MockLocation(); ai.State = RobotAiState.HeldUp; ai.MarkItemsRequested = true; // Item within reach player.Items.Add(item); ai.Think(); Assert.AreEqual(RobotAiState.HeldUpDemandMarkAmmo, ai.State); Assert.True(item.HasBeenMarkedForPlayer); ai.Think(); Assert.AreEqual(RobotAiState.HeldUp, ai.State); }
public void TestRepositionBackToAttacking() { RobotAi ai = new MockRobotAi(); MockPlayer player = (MockPlayer)ai.Player; MockRobot robot = (MockRobot)ai.Robot; MockLocation repositionTarget = new MockLocation(-999, -999, -999); robot.Location = new MockLocation(0, 0, 0, repositionTarget); ai.BurstsFired = 0; ai.State = RobotAiState.AlertAttack; ai.TimeMarker = DateTime.Now - TimeSpan.FromSeconds(3); ai.Think(); Assert.AreEqual(RobotAiState.AlertReposition, ai.State); Assert.True(robot.Target.Equals(repositionTarget)); robot.Location = repositionTarget; ai.Think(); Assert.AreEqual(RobotAiState.AlertAttack, ai.State); }
public void TestHoldUpMarkEnemyReturnToHeldUp() { RobotAi ai = new MockRobotAi(); MockRobot robot = (MockRobot)ai.Robot; MockPlayer player = (MockPlayer)ai.Player; MockRobot otherRobot = new MockRobot(); robot.Head.Location = player.Disabler.Location = new MockLocation(); ai.State = RobotAiState.HeldUp; ai.MarkEnemiesRequested = true; player.Robots.Add(robot); player.Robots.Add(otherRobot); ai.Think(); Assert.AreEqual(RobotAiState.HeldUpDemandMarkEnemies, ai.State); Assert.True(otherRobot.HasBeenMarkedForPlayer); Assert.False(robot.HasBeenMarkedForPlayer); ai.Think(); Assert.AreEqual(RobotAiState.HeldUp, ai.State); }
public void TestFinishedCallingHeadquartersStartsAttacking() { RobotAi ai = new MockRobotAi(); MockPlayer player = (MockPlayer)ai.Player; MockRobot robot = (MockRobot)ai.Robot; robot.DetectionLineOfSight = robot.CanSeePlayer = false; robot.PlayingAnimation = RobotAnimation.None; ai.State = RobotAiState.AlertCallHeadQuarters; ai.Think(); Assert.AreEqual(RobotAiState.AlertAttack, ai.State); }
public void TestAttackingPlayerMoves60MetersOutOfLineOfSightFollowUp() { RobotAi ai = new MockRobotAi(); MockPlayer player = (MockPlayer)ai.Player; MockRobot robot = (MockRobot)ai.Robot; robot.Location = new MockLocation(0, 0, 0); player.Location = new MockLocation(61, 0, 0); robot.DetectionLineOfSight = robot.CanSeePlayer = true; ai.State = RobotAiState.AlertAttack; ai.Think(); Assert.AreEqual(RobotAiState.AlertFollowUp, ai.State); }
public void TestDisableHeadShot() { RobotAi ai = new MockRobotAi(); MockRobot robot = (MockRobot)ai.Robot; robot.Health = 3; robot.Head.Shot = true; ai.State = RobotAiState.Patrol; ai.Think(); Assert.AreEqual(RobotAiState.Disabled, ai.State); Assert.AreEqual(0, robot.Health); Assert.AreEqual(RobotAnimation.RagDoll, robot.PlayingAnimation); }
public void TestHoldUpRefuse() { RobotAi ai = new MockRobotAi(); MockRobot robot = (MockRobot)ai.Robot; MockPlayer player = (MockPlayer)ai.Player; robot.Head.Location = player.Disabler.Location = new MockLocation(); ai.State = RobotAiState.HeldUp; ai.MarkEnemiesRequested = true; ai.HasHeldUpDemandBeenMade = true; ai.Think(); Assert.AreEqual(RobotAiState.HeldUpRefuse, ai.State); Assert.AreEqual(RobotAnimation.CoweringRefuse, robot.PlayingAnimation); }
public void TestAlertCallHeadQuartersAfterTwoSeconds() { RobotAi ai = new MockRobotAi(); MockPlayer player = (MockPlayer)ai.Player; MockRobot robot = (MockRobot)ai.Robot; robot.DetectionLineOfSight = robot.CanSeePlayer = false; ai.TimeMarker = (DateTime.Now - TimeSpan.FromSeconds(2.1)); ai.State = RobotAiState.Alert; ai.Think(); Assert.AreEqual(RobotAiState.AlertCallHeadQuarters, ai.State); Assert.AreEqual(RobotAnimation.AlertCallHeadQuarters, robot.PlayingAnimation); }
public void TestHurtHit() { RobotAi ai = new MockRobotAi(); MockRobot robot = (MockRobot)ai.Robot; robot.Health = 3; robot.Shot = true; ai.State = RobotAiState.Patrol; ai.Think(); Assert.AreEqual(RobotAiState.Hurt, ai.State); Assert.AreEqual(2, robot.Health); Assert.AreEqual(RobotAnimation.HurtStagger, robot.PlayingAnimation); }
public void TestPatrolLookAroundRestartPatrol() { RobotAi ai = new MockRobotAi(); MockRobot robot = (MockRobot)ai.Robot; robot.PatrolEnd = new MockLocation(0, 0, 0); robot.Target = robot.Location = robot.PatrolStart = new MockLocation(100, 100, 100); ai.State = RobotAiState.PatrolLookAround; ai.TimeMarker = DateTime.Now - TimeSpan.FromMinutes(10); ai.Think(); Assert.AreEqual(RobotAiState.Patrol, ai.State); Assert.True(robot.ReachedTarget()); }
public void TestSuspicionAfter3SightingsCallHq() { RobotAi ai = new MockRobotAi(); MockRobot robot = (MockRobot)ai.Robot; MockPlayer player = (MockPlayer)ai.Player; robot.Head.Location = robot.Location = new MockLocation(0, 0, 0); player.Disabler.Location = player.Location = new MockLocation(39, 0, 0); for (int i = 0; i < 3; i++) { ai.PlayerLocations.Add(new PlayerLocation(DateTime.Now, player.Location, true, true)); } robot.CanSeePlayer = robot.CanHearPlayer = true; ai.State = RobotAiState.Patrol; ai.Think(); Assert.AreEqual(RobotAiState.Suspicion, ai.State); robot.CanSeePlayer = robot.CanHearPlayer = false; ai.Think(); Assert.AreEqual(RobotAiState.SuspicionCallHeadQuarters, ai.State); }
public void TestPatrolTargetEndReached() { RobotAi ai = new MockRobotAi(); MockRobot robot = (MockRobot)ai.Robot; robot.Target = robot.Location = robot.PatrolEnd = new MockLocation(0, 0, 0); robot.PatrolStart = new MockLocation(100, 100, 100); ai.State = RobotAiState.PatrolMarchToEnd; ai.Think(); Assert.AreEqual(RobotAiState.PatrolLookAround, ai.State); Assert.AreEqual(new MockLocation(0, 0, 0), robot.Target); Assert.True(robot.ReachedTarget()); }
public void TestHoldUp() { RobotAi ai = new MockRobotAi(); MockRobot robot = (MockRobot)ai.Robot; MockPlayer player = (MockPlayer)ai.Player; robot.Head.Location = player.Disabler.Location = new MockLocation(); ai.State = RobotAiState.Patrol; ai.Think(); Assert.AreEqual(RobotAiState.HeldUp, ai.State); Assert.AreEqual(RobotAnimation.CoweringStanding, robot.PlayingAnimation); Assert.False(robot.DetectionLineOfSight); Assert.False(robot.DetectionAudio); }
public void TestSuspicionFollowUpToShrugOff() { RobotAi ai = new MockRobotAi(); MockRobot robot = (MockRobot)ai.Robot; MockPlayer player = (MockPlayer)ai.Player; robot.Location = robot.Head.Location = robot.Target = new MockLocation(100, 100, 100); robot.PlayingAnimation = RobotAnimation.None; ai.State = RobotAiState.SuspicionLookAround; ai.Think(); Assert.AreEqual(RobotAiState.SuspicionShrugOff, ai.State); }
public void TestSuspicionShrugOffBackToPatrol() { RobotAi ai = new MockRobotAi(); MockRobot robot = (MockRobot)ai.Robot; MockPlayer player = (MockPlayer)ai.Player; robot.Location = robot.Head.Location = robot.Target = new MockLocation(100, 100, 100); robot.PlayingAnimation = RobotAnimation.None; ai.State = RobotAiState.SuspicionShrugOff; ai.Think(); Assert.AreEqual(RobotAiState.Patrol, ai.State); }
public void TestAlertFromPatrol() { RobotAi ai = new MockRobotAi(); MockPlayer player = (MockPlayer)ai.Player; MockRobot robot = (MockRobot)ai.Robot; // The Robot can see the player within 15m via Line of Sight robot.Head.Location = robot.Location = new MockLocation(0, 0, 0); player.Disabler.Location = player.Location = new MockLocation(14, 0, 0); robot.DetectionLineOfSight = robot.CanSeePlayer = true; ai.State = RobotAiState.Patrol; ai.Think(); Assert.AreEqual(RobotAiState.Alert, ai.State); }
public void TestHoldUpGetDown() { RobotAi ai = new MockRobotAi(); MockRobot robot = (MockRobot)ai.Robot; MockPlayer player = (MockPlayer)ai.Player; robot.Head.Location = player.Disabler.Location = new MockLocation(); ai.State = RobotAiState.HeldUp; ai.GetDownRequested = true; ai.Think(); Assert.AreEqual(RobotAiState.HeldUpGetDown, ai.State); Assert.AreEqual(RobotAnimation.CoweringOnGround, robot.PlayingAnimation); Assert.False(robot.DetectionLineOfSight); Assert.False(robot.DetectionAudio); }
public void TestDisableHit() { RobotAi ai = new MockRobotAi(); MockRobot robot = (MockRobot)ai.Robot; robot.Health = 1; robot.Shot = true; ai.State = RobotAiState.Patrol; ai.Think(); Assert.AreEqual(RobotAiState.Disabled, ai.State); Assert.AreEqual(0, robot.Health); Assert.AreEqual(RobotAnimation.RagDoll, robot.PlayingAnimation); Assert.False(robot.DetectionLineOfSight); Assert.False(robot.DetectionAudio); }
public void TestPatrolRobotWasHeardWithin50M() { RobotAi ai = new MockRobotAi(); MockRobot robot = (MockRobot)ai.Robot; MockPlayer player = (MockPlayer)ai.Player; robot.Head.Location = robot.Location = new MockLocation(0, 0, 0); player.Disabler.Location = player.Location = new MockLocation(39, 0, 0); robot.DetectionLineOfSight = robot.CanSeePlayer = false; robot.DetectionAudio = robot.CanHearPlayer = true; ai.State = RobotAiState.Patrol; ai.Think(); Assert.AreEqual(RobotAiState.Suspicion, ai.State); }
public void TestAttackingFired4BurstsShouldReposition() { RobotAi ai = new MockRobotAi(); MockPlayer player = (MockPlayer)ai.Player; MockRobot robot = (MockRobot)ai.Robot; MockLocation repositionTarget = new MockLocation(-999, -999, -999); robot.Location = new MockLocation(0, 0, 0, repositionTarget); ai.BurstsFired = 4; ai.State = RobotAiState.AlertAttack; ai.Think(); Assert.AreEqual(RobotAiState.AlertReposition, ai.State); Assert.True(robot.Target.Equals(repositionTarget)); }
public void TestAttackingPlayerMoves60MetersOutOfLineOfSightFollowUpTargetsLastLocation() { RobotAi ai = new MockRobotAi(); MockPlayer player = (MockPlayer)ai.Player; MockRobot robot = (MockRobot)ai.Robot; robot.Location = new MockLocation(0, 0, 0); player.Location = new MockLocation(61, 0, 0); var lastSeenPlayerLocation = new MockLocation(60, 0, 0); var lastHeardPlayerLocation = new MockLocation(40, 0, 0); ai.PlayerLocations.Add(new PlayerLocation(DateTime.Now, lastHeardPlayerLocation, false, true)); ai.PlayerLocations.Add(new PlayerLocation(DateTime.Now, lastSeenPlayerLocation, true, false)); robot.DetectionLineOfSight = robot.CanSeePlayer = true; ai.State = RobotAiState.AlertAttack; ai.Think(); Assert.AreEqual(RobotAiState.AlertFollowUp, ai.State); Assert.True(robot.Target.Equals(lastSeenPlayerLocation)); }
public void TestHoldUpMarkMaxThreeItems() { RobotAi ai = new MockRobotAi(); MockRobot robot = (MockRobot)ai.Robot; MockPlayer player = (MockPlayer)ai.Player; robot.Head.Location = player.Disabler.Location = new MockLocation(); ai.State = RobotAiState.HeldUp; ai.MarkItemsRequested = true; // Item within reach for (int i = 0; i < 10; i++) { player.Items.Add(new MockItem(robot.Location)); } ai.Think(); Assert.AreEqual(RobotAiState.HeldUpDemandMarkAmmo, ai.State); Assert.AreEqual(3, player.Items.Count(item => ((MockItem)item).HasBeenMarkedForPlayer)); }
public void TestHoldUpMarkThreeEnemyMaximum() { RobotAi ai = new MockRobotAi(); MockRobot robot = (MockRobot)ai.Robot; MockPlayer player = (MockPlayer)ai.Player; robot.Head.Location = player.Disabler.Location = new MockLocation(); ai.State = RobotAiState.HeldUp; ai.MarkEnemiesRequested = true; player.Robots.Add(robot); for (int i = 0; i < 3; i++) { player.Robots.Add(new MockRobot()); } ai.Think(); Assert.AreEqual(RobotAiState.HeldUpDemandMarkEnemies, ai.State); Assert.False(robot.HasBeenMarkedForPlayer); Assert.AreEqual(3, player.Robots.Count(r => ((MockRobot)r).HasBeenMarkedForPlayer)); }