public void TestSelectTarget()
        {
            Type[]      invalidTargets = GameService.AGENT_TYPES_ORDERED.Where(t => Game.Agents[t.Name].Allegiance == Allegiance.Enemy).ToArray();
            int         numTargets     = 10000;
            List <Type> targets        = new List <Type>(numTargets);

            NonPlayerAgent mastermind = (NonPlayerAgent)Game.Agents[nameof(Mastermind)];
            NonPlayerAgent drudge     = (NonPlayerAgent)Game.Agents[nameof(Drudge)];

            for (int i = 0; i < numTargets; i++)
            {
                mastermind.SelectTarget(Game.Agents);
                drudge.SelectTarget(Game.Agents);
                Agent.SelectTarget(Game.Agents);
                Assert.IsNotNull(Agent.Target);
                Assert.IsFalse(invalidTargets.Contains(Agent.Target.GetType()));
                Assert.AreNotSame(mastermind.Target, Agent.Target);
                Assert.AreNotSame(drudge.Target, Agent.Target);
                targets.Add(Agent.Target.GetType());
                Agent.Reset();
                mastermind.Reset();
                drudge.Reset();
            }

            // With enough trials, every valid target should have been selected at least once
            Assert.AreEqual(Game.Agents.OrderedList.Where(a => !invalidTargets.Contains(a.GetType())).Count(), targets.Distinct().Count());
        }
Example #2
0
 internal void RemoveNonPlayerAgent(NonPlayerAgent nonPlayerAgent)
 {
     _nonPlayerAgents.Remove(nonPlayerAgent);
     foreach (var behavior in nonPlayerAgent.Behaviors)
     {
         foreach (var command in behavior.Commands)
         {
             UnRegisterCommand(command);
         }
     }
 }
Example #3
0
        public static void TestBlockAction(Agent blocker, GameService game)
        {
            NonPlayerAgent target       = (NonPlayerAgent)game.Agents[nameof(Drudge)];
            NonPlayerAgent targetTarget = (NonPlayerAgent)game.Agents[nameof(Android)];

            blocker.IsActing = true;
            blocker.Target   = target;
            target.IsActing  = true;
            target.SelectTarget(game.Agents);

            foreach (Type agentType in GameService.AGENT_TYPES_ORDERED)
            {
                game.Agents[agentType.Name].ActIfAble();
            }

            Assert.IsTrue(target.IsBlocked);
            Assert.AreSame(blocker, target.Blocker);
            Assert.IsFalse(targetTarget.WasAttacked);
            Assert.IsTrue(target.Visitors.Contains(blocker.Codename));
        }