Exemple #1
0
        public static void Main(string[] args)
        {
            System.Console.WriteLine("Hello World!");

            var characterInfo = new CharacterInfo();

            characterInfo.Input             = new Brawler.Input.Packets.ControllerState();
            characterInfo.Input.AttackStick = new Brawler.Input.Packets.AnalogStick();
            characterInfo.Input.MoveStick   = new Brawler.Input.Packets.AnalogStick();

            characterInfo.Current  = new Brawler.Simulation.PlayerInfo();
            characterInfo.Previous = new Brawler.Simulation.PlayerInfo();

            var dictionary = new TreeDictionary();

            var builder = new BlackboardTreeBuilder <CharacterInfo>(
                new TreeBuilder(),
                dictionary);

            var plan = builder
                       .Selector()
                       .Begin()
                       //.Success()
                       .Failed()
                       .Success()
                       .Success()
                       .End();

            var compiled = builder.Build();
            //var compiled = BuildSM (builder);

            var walker = new NodeWalker(compiled);

            walker.Restart();
            walker.ComputeStep();
            System.Console.WriteLine("walker.IsComplete : " + walker.IsComplete);
            System.Console.WriteLine("walker.Outcome : " + walker.Outcome);
            walker.ComputeStep();
            System.Console.WriteLine("walker.IsComplete : " + walker.IsComplete);
            System.Console.WriteLine("walker.Outcome : " + walker.Outcome);
            walker.ComputeStep();
            System.Console.WriteLine("walker.IsComplete : " + walker.IsComplete);
            System.Console.WriteLine("walker.Outcome : " + walker.Outcome);
            walker.ComputeStep();
            System.Console.WriteLine("walker.IsComplete : " + walker.IsComplete);
            System.Console.WriteLine("walker.Outcome : " + walker.Outcome);
            walker.ComputeStep();
            System.Console.WriteLine("walker.IsComplete : " + walker.IsComplete);
            System.Console.WriteLine("walker.Outcome : " + walker.Outcome);
            walker.ComputeStep();
            System.Console.WriteLine("walker.IsComplete : " + walker.IsComplete);
            System.Console.WriteLine("walker.Outcome : " + walker.Outcome);
            //Test1 (characterInfo, walker);

            //Test2 (characterInfo, walker, timer, MAX_TIMES);
        }
Exemple #2
0
        public void TestCase()
        {
            const bool EXPECTED = false;

            var board      = new TransistentBlackboard <CharacterInfo>(() => new CharacterInfo());
            var dictionary = new TreeDictionary();
            var builder    = new BlackboardTreeBuilder <Enemy>(new TreeBuilder(), dictionary);
            var plan       = builder
                             .Success();

            var compiled = plan.Build();

            var walker = new NodeWalker(compiled);

            walker.Restart();
            walker.ComputeAllSteps();
            Assert.AreEqual(EXPECTED, board.Context.IsLeader);
            Assert.IsTrue(walker.IsComplete);
            Assert.AreEqual(Result.SUCCESS, walker.Outcome);
        }
Exemple #3
0
        public void EnemyAI()
        {
            var dictionary = new TreeDictionary();
            var builder    = new BlackboardTreeBuilder <Enemy>(new TreeBuilder(), dictionary);

            builder
            .Sequence()
            .Begin()
            .Selector()
            .Begin()
            .IsTrue((e) => e.HasTarget())
            .Selector()
            .Begin()
            .Action((e) => e.SelectTarget())
            .End()
            .End()
            .Selector()
            .Begin()
            .IsTrue((e) => e.WithinDistance())
            .Selector()
            .Begin()
            .Action((e) => e.MoveTowards())
            .End()
            .End()
            .End()
            .Action((e) => e.HitTarget())
            .End()
            .BuildAndRegisterAs <BaseEnemyAI>();

            var topBuilder = new BlackboardTreeBuilder <EnemySituation>(new TreeBuilder(), dictionary);
            var tree       = topBuilder
                             .UseStub <BaseEnemyAI, Enemy>()
                             .Build();

            var walker = new NodeWalker(tree);

            walker.AddBlackboard <EnemySituation>(new Blackboard <EnemySituation> {
                Context = new EnemySituation()
            });
            walker.AddDependentBlackboard <EnemySituation, Enemy>((es) => { return(es.Individual); });
        }
Exemple #4
0
        public static void Main(string[] args)
        {
            // build empty tree
            var store = new TreeDictionary();

            var minorBuilder = new BlackboardTreeBuilder <Enemy>(new TreeBuilder(), store);

            // gererate a behavior tree as a stub for later reuse
            minorBuilder
            .Sequence()
            .Begin()
            .Selector()
            .Begin()
            .IsTrue((e) => e.WithinDistance())
            .Step((e) => e.MoveTowards())
            .End()
            .Sequence()
            .Begin()
            .IsTrue((e) => e.WithinDistance())
            .Step((e) => e.HitTarget())
            .End()
            .End()
            .BuildAndRegisterAs <BaseEnemyAI> ();

            var playerOne = new Player {
                HealthPoints = 10, X = 10
            };
            var ogre      = new Enemy();
            var locator   = new MockPlayerLocator(playerOne);
            var situation = new Simulation {
                Individual = ogre, Locator = locator, Current = playerOne
            };

            var upperTree = new BlackboardTreeBuilder <Simulation>(new TreeBuilder(), store);

            upperTree
            .Sequence()
            .Begin()
            .Selector()
            .Begin()
            .IsTrue((e) => e.Individual.HasTarget())
            .Step((e) => {
                bool result = e.Locator.Find(out e.Individual.Target);
                return((result) ? Result.SUCCESS : Result.FAILED);
            }
                  )
            .End()
            .UseStub <BaseEnemyAI, Enemy> ()
            .IsTrue((e) => e.Current.HealthPoints <= 0)
            .End();

            var linker = new BlackboardLinker();

            linker.AddDependency <Simulation, Enemy>((es) => es.Individual);

            var board = new Blackboard <Simulation> {
                Context = situation
            };

            linker.AddParameter <Simulation>(new StaticParameter <Simulation>(board));

            // generate tree as a stub for an BaseEnemyAI implementation
            var finalTree = upperTree.Build();

            var walker = new NodeWalker(finalTree, linker);

            Result outcome = Result.INCOMPLETE;

            while (!(outcome == Result.SUCCESS || outcome == Result.UNEXCEPTED_ERROR))
            {
                walker.Restart();
                walker.ComputeAllSteps();
                outcome = walker.Outcome;
                Console.WriteLine("Ogre X:{0}, Player [HP :{1}] X:{2}", ogre.X, playerOne.HealthPoints, playerOne.X);
            }

            Console.WriteLine("PLAYER IS DEAD");
        }
Exemple #5
0
		static Tree BuildSM (BlackboardTreeBuilder<CharacterInfo> builder)
		{
			var plan = builder.Parallel ().Begin ()// local information
			// is moving 
			.Selector ().Begin ().Sequence ().Begin ().IsTrue (c => 
			{
				return c.Input.MoveStick.X == 0.0;
			}).IsTrue (c => 
			{
				return c.Input.MoveStick.Y == 0.0;
			}).Set (c => 
			{
				c.Current.IsMoving = false;
			}).End ().Set (c => 
			{
				c.Current.IsMoving = true;
			}).End ()//					// is guard up
			//					.Sequence()
			//					.Begin ()
			//						.Set((c) => { c.Current.IsGuardUp = true; })
			//						.Selector ()
			//						.Begin ()
			//							.IsTrue((c) => {return c.Input.AttackStick.X == 0.0;})
			//							.IsTrue((c) => {return c.Input.AttackStick.Y == 0.0;})
			//							.Set((c) => { c.Current.IsGuardUp = false; })
			//						.End()
			//					.End()
			// is facing enemy						
			// nearest enemy gap
			//					// MOVE ANIMATION
			//					.Sequence()
			//					.Begin()
			//						.IsTrue((c) => { return c.Current.IsMoving ; })
			//						.Selector()
			//						.Begin()					
			//							// Stepping			
			//							.Sequence()
			//							.Begin()
			//								.IsTrue((c) => { return c.Current.IsFacingEnemy ; })
			//								.IsTrue((c) => { return c.Current.IsGuardUp ; })
			//								.Selector()
			//								.Begin()							
			//									.Sequence()
			//									.Begin ()
			//										.IsTrue((c) => { return c.Current.NearestEnemyGap <= 2.0f; })							
			//										.Selector()
			//										.Begin()
			////											// RaiseStepping	
			////											.Sequence()
			////											.Begin()
			////												.IsTrue((c) => {return c.Input.MoveStick.X > 0.0f;})
			////												.IsTrue((c) => {return c.Input.MoveStick.Y == 0.0f;})
			////												.Set ((c) => c.Current.LocomotionState = MoveAnimation.StepForward)
			////											.End ()	
			////
			////											.Sequence()
			////											.Begin()
			////												.IsTrue((c) => {return c.Input.MoveStick.X < 0.0f;})
			////												.IsTrue((c) => {return c.Input.MoveStick.Y == 0.0f;})
			////												.Set ((c) => c.Current.LocomotionState = MoveAnimation.StepForward)
			////											.End ()	
			////
			////											.Sequence()
			////											.Begin()
			////												.IsTrue((c) => {return c.Input.MoveStick.Y > 0.0f;})
			////												.IsTrue((c) => {return c.Input.MoveStick.X == 0.0f;})
			////												.Set ((c) => c.Current.LocomotionState = MoveAnimation.SidestepUp)
			////											.End ()	
			////
			////											.Sequence()
			////											.Begin()
			////												.IsTrue((c) => {return c.Input.MoveStick.Y < 0.0f;})
			////												.IsTrue((c) => {return c.Input.MoveStick.X == 0.0f;})
			////												.Set ((c) => c.Current.LocomotionState = MoveAnimation.SidestepDown)
			////											.End ()
			//										.End()
			//									.End()	
			//									// forward slide / set crease 
			//									.Sequence()
			//									.Begin()
			//										.IsTrue((c) => { return c.Current.NearestEnemyGap <= 3.0f;} )
			//										.Set ((c) => c.Current.LocomotionState = MoveAnimation.SlideForward)
			//									.End()
			//								.End()
			//							.End ()
			//							.Sequence ()
			//							.Begin()
			//								.Selector ()
			//									.Begin ()
			//										// if the distance is greater than 3 feet
			//										.IsTrue((c) => { return c.Current.NearestEnemyGap > 3.0f;} )	
			//										// OR is guard down
			//										.IsFalse((c) => { return c.Current.IsGuardUp ; })
			//									.End ()
			//								.End()
			//								// Raise Run / Walk
			//								.Selector()
			//								.Begin()
			////									.Sequence()
			////									.Begin()
			////										.IsTrue((c) => {return c.Input.MoveStick.X > 0.5f;})
			////										.IsTrue((c) => {return c.Input.MoveStick.Y == 0.0f;})
			////										.Set ((c) => c.Current.LocomotionState = MoveAnimation.RunForward)
			////									.End ()	
			////
			////									.Sequence()
			////									.Begin()
			////										.IsTrue((c) => {return c.Input.MoveStick.X > 0.0f;})
			////										.IsTrue((c) => {return c.Input.MoveStick.Y == 0.0f;})
			////										.Set ((c) => c.Current.LocomotionState = MoveAnimation.WalkForward)
			////									.End ()
			////
			////									.Sequence()
			////									.Begin()
			////										.IsTrue((c) => {return c.Input.MoveStick.X < 0.0f;})
			////										.IsTrue((c) => {return c.Input.MoveStick.Y == 0.0f;})
			////										.Set ((c) => c.Current.LocomotionState = MoveAnimation.WalkBack)
			////									.End ()	
			////									
			////									.Sequence()
			////									.Begin()
			////										.IsTrue((c) => {return c.Input.MoveStick.Y > 0.0f;})
			////										.IsTrue((c) => {return c.Input.MoveStick.X == 0.0f;})
			////										.Set ((c) => c.Current.LocomotionState = MoveAnimation.WalkUp)
			////									.End ()	
			////									
			////									.Sequence()
			////									.Begin()
			////										.IsTrue((c) => {return c.Input.MoveStick.Y < 0.0f;})
			////										.IsTrue((c) => {return c.Input.MoveStick.X == 0.0f;})
			////										.Set ((c) => c.Current.LocomotionState = MoveAnimation.WalkDown)
			////									.End ()
			//								.End()
			//							.End()
			//							// default
			//							.Set((c) => c.Current.LocomotionState = MoveAnimation.Idle)
			//						.End()
			//					.End()
			// HAND ANIMATION
			//					.Selector()
			//					.Begin ()
			//						// throwing punch
			//
			//						// idle default 
			//						.Set((c) => c.Current.HandsState = HandsAnimation.Idle)
			//					.End ()
			//					 //full body override
			//					.Selector()
			//					.Begin ()
			//						// idle default 
			//						.Set((c) => c.Current.OverrideState = BodyAnimation.Default)
			//					.End ()
			.End ();
			var compiled = plan.Build ();
			return compiled;
		}
Exemple #6
0
		public static void Main (string[] args)
		{
			System.Console.WriteLine ("Hello World!");

			var characterInfo = new CharacterInfo();

			characterInfo.Input = new Brawler.Input.Packets.ControllerState();
			characterInfo.Input.AttackStick = new Brawler.Input.Packets.AnalogStick();
			characterInfo.Input.MoveStick = new Brawler.Input.Packets.AnalogStick();

			characterInfo.Current = new Brawler.Simulation.PlayerInfo();
			characterInfo.Previous = new Brawler.Simulation.PlayerInfo();

			var dictionary = new TreeDictionary();

			var builder = new BlackboardTreeBuilder<CharacterInfo>(
				new TreeBuilder(),
				dictionary);

			var plan = builder
					.Selector()
					.Begin ()
						//.Success()
						.Failed ()
						.Success()
						.Success()
					.End ();
					
			var compiled = builder.Build();
			//var compiled = BuildSM (builder);
		
			var walker = new NodeWalker(compiled);
			walker.Restart ();
			walker.ComputeStep();
			System.Console.WriteLine ("walker.IsComplete : " + walker.IsComplete);
			System.Console.WriteLine ("walker.Outcome : " + walker.Outcome);
			walker.ComputeStep();
			System.Console.WriteLine ("walker.IsComplete : " + walker.IsComplete);
			System.Console.WriteLine ("walker.Outcome : " + walker.Outcome);
			walker.ComputeStep();
			System.Console.WriteLine ("walker.IsComplete : " + walker.IsComplete);
			System.Console.WriteLine ("walker.Outcome : " + walker.Outcome);
			walker.ComputeStep();
			System.Console.WriteLine ("walker.IsComplete : " + walker.IsComplete);
			System.Console.WriteLine ("walker.Outcome : " + walker.Outcome);
			walker.ComputeStep();
			System.Console.WriteLine ("walker.IsComplete : " + walker.IsComplete);
			System.Console.WriteLine ("walker.Outcome : " + walker.Outcome);
			walker.ComputeStep();
			System.Console.WriteLine ("walker.IsComplete : " + walker.IsComplete);
			System.Console.WriteLine ("walker.Outcome : " + walker.Outcome);
			//Test1 (characterInfo, walker);

			//Test2 (characterInfo, walker, timer, MAX_TIMES);
		}
Exemple #7
0
		public static void Main (string[] args)
		{
			// build empty tree
			var store = new TreeDictionary();

			var minorBuilder = new BlackboardTreeBuilder<Enemy>(new TreeBuilder(), store);

			// gererate a behavior tree as a stub for later reuse
			minorBuilder
				.Sequence ()
				.Begin ()
					.Selector ()
					.Begin ()
						.IsTrue ((e) => e.WithinDistance ())
						.Step ((e) => e.MoveTowards ())
					.End ()
					.Sequence ()
					.Begin ()
						.IsTrue ((e) => e.WithinDistance ())
						.Step ((e) => e.HitTarget ())
					.End ()
				.End ()
				.BuildAndRegisterAs<BaseEnemyAI> ();

			var playerOne = new Player{ HealthPoints = 10, X = 10};
			var ogre = new Enemy ();
			var locator = new MockPlayerLocator(playerOne);
			var situation = new Simulation{Individual=ogre, Locator=locator, Current = playerOne };

			var upperTree = new BlackboardTreeBuilder<Simulation>(new TreeBuilder(), store); 
			upperTree
				.Sequence ()
				.Begin ()
					.Selector ()
					.Begin ()
					.IsTrue ((e) => e.Individual.HasTarget ())
					.Step ((e) =>  { 											
						bool result = e.Locator.Find (out e.Individual.Target);
						return (result) ? Result.SUCCESS : Result.FAILED;
					}
					)
				.End ()
				.UseStub<BaseEnemyAI, Enemy> ()
				.IsTrue((e) => e.Current.HealthPoints <= 0)
				.End ();

			var linker = new BlackboardLinker ();
			linker.AddDependency<Simulation, Enemy>((es) => es.Individual);

			var board = new Blackboard<Simulation>{Context = situation};
			linker.AddParameter<Simulation>(new StaticParameter<Simulation>(board));

			// generate tree as a stub for an BaseEnemyAI implementation
			var finalTree = upperTree.Build();

			var walker = new NodeWalker(finalTree, linker);

			Result outcome = Result.INCOMPLETE;
			while (!(outcome == Result.SUCCESS || outcome == Result.UNEXCEPTED_ERROR))
			{
				walker.Restart ();
				walker.ComputeAllSteps ();
				outcome  = walker.Outcome;
				Console.WriteLine ("Ogre X:{0}, Player [HP :{1}] X:{2}", ogre.X, playerOne.HealthPoints, playerOne.X);
			}	

			Console.WriteLine ("PLAYER IS DEAD");
		}
Exemple #8
0
        static Tree BuildSM(BlackboardTreeBuilder <CharacterInfo> builder)
        {
            var plan = builder.Parallel().Begin() // local information
                                                  // is moving
                       .Selector().Begin().Sequence().Begin().IsTrue(c =>
            {
                return(c.Input.MoveStick.X == 0.0);
            }).IsTrue(c =>
            {
                return(c.Input.MoveStick.Y == 0.0);
            }).Set(c =>
            {
                c.Current.IsMoving = false;
            }).End().Set(c =>
            {
                c.Current.IsMoving = true;
            }).End()   //					// is guard up
                       //					.Sequence()
                       //					.Begin ()
                       //						.Set((c) => { c.Current.IsGuardUp = true; })
                       //						.Selector ()
                       //						.Begin ()
                       //							.IsTrue((c) => {return c.Input.AttackStick.X == 0.0;})
                       //							.IsTrue((c) => {return c.Input.AttackStick.Y == 0.0;})
                       //							.Set((c) => { c.Current.IsGuardUp = false; })
                       //						.End()
                       //					.End()
                       // is facing enemy
                       // nearest enemy gap
                       //					// MOVE ANIMATION
                       //					.Sequence()
                       //					.Begin()
                       //						.IsTrue((c) => { return c.Current.IsMoving ; })
                       //						.Selector()
                       //						.Begin()
                       //							// Stepping
                       //							.Sequence()
                       //							.Begin()
                       //								.IsTrue((c) => { return c.Current.IsFacingEnemy ; })
                       //								.IsTrue((c) => { return c.Current.IsGuardUp ; })
                       //								.Selector()
                       //								.Begin()
                       //									.Sequence()
                       //									.Begin ()
                       //										.IsTrue((c) => { return c.Current.NearestEnemyGap <= 2.0f; })
                       //										.Selector()
                       //										.Begin()
                       ////											// RaiseStepping
                       ////											.Sequence()
                       ////											.Begin()
                       ////												.IsTrue((c) => {return c.Input.MoveStick.X > 0.0f;})
                       ////												.IsTrue((c) => {return c.Input.MoveStick.Y == 0.0f;})
                       ////												.Set ((c) => c.Current.LocomotionState = MoveAnimation.StepForward)
                       ////											.End ()
                       ////
                       ////											.Sequence()
                       ////											.Begin()
                       ////												.IsTrue((c) => {return c.Input.MoveStick.X < 0.0f;})
                       ////												.IsTrue((c) => {return c.Input.MoveStick.Y == 0.0f;})
                       ////												.Set ((c) => c.Current.LocomotionState = MoveAnimation.StepForward)
                       ////											.End ()
                       ////
                       ////											.Sequence()
                       ////											.Begin()
                       ////												.IsTrue((c) => {return c.Input.MoveStick.Y > 0.0f;})
                       ////												.IsTrue((c) => {return c.Input.MoveStick.X == 0.0f;})
                       ////												.Set ((c) => c.Current.LocomotionState = MoveAnimation.SidestepUp)
                       ////											.End ()
                       ////
                       ////											.Sequence()
                       ////											.Begin()
                       ////												.IsTrue((c) => {return c.Input.MoveStick.Y < 0.0f;})
                       ////												.IsTrue((c) => {return c.Input.MoveStick.X == 0.0f;})
                       ////												.Set ((c) => c.Current.LocomotionState = MoveAnimation.SidestepDown)
                       ////											.End ()
                       //										.End()
                       //									.End()
                       //									// forward slide / set crease
                       //									.Sequence()
                       //									.Begin()
                       //										.IsTrue((c) => { return c.Current.NearestEnemyGap <= 3.0f;} )
                       //										.Set ((c) => c.Current.LocomotionState = MoveAnimation.SlideForward)
                       //									.End()
                       //								.End()
                       //							.End ()
                       //							.Sequence ()
                       //							.Begin()
                       //								.Selector ()
                       //									.Begin ()
                       //										// if the distance is greater than 3 feet
                       //										.IsTrue((c) => { return c.Current.NearestEnemyGap > 3.0f;} )
                       //										// OR is guard down
                       //										.IsFalse((c) => { return c.Current.IsGuardUp ; })
                       //									.End ()
                       //								.End()
                       //								// Raise Run / Walk
                       //								.Selector()
                       //								.Begin()
                       ////									.Sequence()
                       ////									.Begin()
                       ////										.IsTrue((c) => {return c.Input.MoveStick.X > 0.5f;})
                       ////										.IsTrue((c) => {return c.Input.MoveStick.Y == 0.0f;})
                       ////										.Set ((c) => c.Current.LocomotionState = MoveAnimation.RunForward)
                       ////									.End ()
                       ////
                       ////									.Sequence()
                       ////									.Begin()
                       ////										.IsTrue((c) => {return c.Input.MoveStick.X > 0.0f;})
                       ////										.IsTrue((c) => {return c.Input.MoveStick.Y == 0.0f;})
                       ////										.Set ((c) => c.Current.LocomotionState = MoveAnimation.WalkForward)
                       ////									.End ()
                       ////
                       ////									.Sequence()
                       ////									.Begin()
                       ////										.IsTrue((c) => {return c.Input.MoveStick.X < 0.0f;})
                       ////										.IsTrue((c) => {return c.Input.MoveStick.Y == 0.0f;})
                       ////										.Set ((c) => c.Current.LocomotionState = MoveAnimation.WalkBack)
                       ////									.End ()
                       ////
                       ////									.Sequence()
                       ////									.Begin()
                       ////										.IsTrue((c) => {return c.Input.MoveStick.Y > 0.0f;})
                       ////										.IsTrue((c) => {return c.Input.MoveStick.X == 0.0f;})
                       ////										.Set ((c) => c.Current.LocomotionState = MoveAnimation.WalkUp)
                       ////									.End ()
                       ////
                       ////									.Sequence()
                       ////									.Begin()
                       ////										.IsTrue((c) => {return c.Input.MoveStick.Y < 0.0f;})
                       ////										.IsTrue((c) => {return c.Input.MoveStick.X == 0.0f;})
                       ////										.Set ((c) => c.Current.LocomotionState = MoveAnimation.WalkDown)
                       ////									.End ()
                       //								.End()
                       //							.End()
                       //							// default
                       //							.Set((c) => c.Current.LocomotionState = MoveAnimation.Idle)
                       //						.End()
                       //					.End()
                       // HAND ANIMATION
                       //					.Selector()
                       //					.Begin ()
                       //						// throwing punch
                       //
                       //						// idle default
                       //						.Set((c) => c.Current.HandsState = HandsAnimation.Idle)
                       //					.End ()
                       //					 //full body override
                       //					.Selector()
                       //					.Begin ()
                       //						// idle default
                       //						.Set((c) => c.Current.OverrideState = BodyAnimation.Default)
                       //					.End ()
                       .End();
            var compiled = plan.Build();

            return(compiled);
        }