private void AddEvade()
        {
            Debug.Log("Adding Evade");

            var seek = new SteeringBuilder(new Vector2(128, 128))
                       .SetPhysicalParams(_params)
                       .AddBehavior(new Seek())
                       .UseDefaultRenderer(_defaultTexture)
                       .AddCollider(12f)
                       .Build();


            var evade = new Evade();

            var entity = new SteeringBuilder(new Vector2(512, 512), seek)
                         .SetPhysicalParams(_params)
                         // .AddNestedBehavior(new Flee(), evade)
                         .AddBehavior(evade)
                         .UseDefaultRenderer(_defaultTexture)
                         .AddCollider(12f)
                         .Build();

            Core.Scene.AddEntity(seek);
            Core.Scene.AddEntity(entity);
        }
        private void AddPursuit()
        {
            Debug.Log("Adding Pursuit");

            var seek = new SteeringBuilder(new Vector2(128, 128))
                       .SetPhysicalParams(_params)
                       .AddBehavior(new Seek())
                       .UseDefaultRenderer(_defaultTexture)
                       .AddCollider(12f)
                       .Build();

            SteeringEntity pursuiter = null;

            var evade = new SteeringBuilder(new Vector2(128, 128), pursuiter)
                        .SetPhysicalParams(_params)
                        .AddBehavior(new Evade())
                        .UseDefaultRenderer(_defaultTexture)
                        .AddCollider(12f)
                        .Build();

            pursuiter = new SteeringBuilder(new Vector2(512, 512), seek)
                        .SetPhysicalParams(_params)
                        .AddBehavior(new Pursuit())
                        .UseDefaultRenderer(_defaultTexture)
                        .AddCollider(12f)
                        .Build();

            Core.Scene.AddEntity(seek);
            // Core.Scene.AddEntity(evade);
            Core.Scene.AddEntity(pursuiter);
        }
        private void AddArrival()
        {
            Debug.Log("Adding Arrival");

            var entity = new SteeringBuilder(new Vector2(512, 512))
                         .SetPhysicalParams(_params)
                         .AddBehavior(new Arrival(128f), args => (args.Target.Position - args.Entity.Position).Length() > 5f)
                         .UseDefaultRenderer(_defaultTexture)
                         .AddCollider(12f)
                         .Build();

            Core.Scene.AddEntity(entity);
        }
        private void AddPathFollowing()
        {
            Debug.Log("Adding Path Following");

            var entity = new SteeringBuilder(new Vector2(512, 512), _pathBuilder)
                         .SetPhysicalParams(_params)
                         .AddBehavior(new PathFollowing(new Seek(), PathFollowingMode))
                         .AddBehavior(new CollisionAvoidance(100f, 800f))
                         .UseDefaultRenderer(_defaultTexture)
                         .AddCollider(12f)
                         .Build();

            Core.Scene.AddEntity(entity);
        }
        private void AddQueue()
        {
            Debug.Log("Adding Queue");

            var entity = new SteeringBuilder(new Vector2(512, 512))
                         .SetPhysicalParams(_params)
                         .AddBehavior(new Seek())
                         .AddBehavior(new CollisionAvoidance(64f, 32f))
                         .AddBehavior(new Queue(e => GetNeighborAhead(e, _maxQueueAhead, _maxQueueRadius), _maxQueueRadius))
                         .AddBehavior(new Separation(separation => CheckNearestFunc(separation), 30f, 240f))
                         .UseDefaultRenderer(_defaultTexture)
                         .AddCollider(12f)
                         .Build();

            Core.Scene.AddEntity(entity);
        }
        private void AddWander(int count = 1)
        {
            Debug.Log("Adding Wander x" + count);

            for (int i = 0; i < count; i++)
            {
                var entity = new SteeringBuilder(new Vector2(500, 400) + Random.RNG.NextVector2(-100, 100))
                             .SetPhysicalParams(_params)
                             .AddBehavior(new Wander(6, 8, 0, 0.5f))
                             .UseDefaultRenderer(_defaultTexture)
                             .AddCollider(12f)
                             .Build();

                Core.Scene.AddEntity(entity);
            }
        }
        private void AddSeek()
        {
            Debug.Log("Adding Seek");

            var entity = new SteeringBuilder(new Vector2(512, 512))
                         .SetPhysicalParams(_params)
                         .AddBehavior(new Seek(), (args) =>
            {
                var length = (args.Target.Position -
                              (args.Entity.Position + args.Entity.Velocity * args.Entity.Mass)).Length();
                return(length > 5f);
            })
                         .UseDefaultRenderer(_defaultTexture)
                         .AddCollider(12f)
                         .Build();

            Core.Scene.AddEntity(entity);
        }
        private void AddLeaderFollowing()
        {
            Debug.Log("Adding Leader Following");

            // The Leader itself
            var leader = new SteeringBuilder(new Vector2(512, 512))
                         .SetPhysicalParams(_params)
                         .AddBehavior(new Arrival(64f))
                         .UseDefaultRenderer(_defaultTexture)
                         .AddCollider(12f)
                         .Build();


            var leaderFollowingBehavior1 = new LeaderFollowing(leader, 64f, 30);
            var leaderFollowingBehavior2 = new LeaderFollowing(leader, 64f, 30);
            var leaderFollowingBehavior3 = new LeaderFollowing(leader, 64f, 30);

            // If IsOnLeaderSight => Evade(leader) -> Arrive -> Separation
            var entity = new SteeringBuilder(new Vector2(128, 128), leader)
                         .SetPhysicalParams(_params)
                         .AddNestedBehavior(new Arrival(64f), leaderFollowingBehavior1)
                         .AddBehavior(leaderFollowingBehavior1)
                         .AddBehavior(new Evade(), args => IsOnLeaderSight(leader, args.Entity,
                                                                           GetLeaderAhead(leader, leaderFollowingBehavior1.LeaderBehindDist),
                                                                           leaderFollowingBehavior1.LeaderSightRadius))
                         .AddBehavior(new Separation(CheckNearestFunc, 50f, 12f)
            {
                IsAdditive = true
            })
                         .UseDefaultRenderer(_defaultTexture)
                         .AddCollider(12f)
                         .Build();

            var entity2 = new SteeringBuilder(new Vector2(256, 128), leader)
                          .SetPhysicalParams(_params)
                          .AddNestedBehavior(new Arrival(64f), leaderFollowingBehavior2)
                          .AddBehavior(leaderFollowingBehavior2)
                          .AddBehavior(new Evade(), args => IsOnLeaderSight(leader, args.Entity, GetLeaderAhead(leader, leaderFollowingBehavior2.LeaderBehindDist), leaderFollowingBehavior2.LeaderSightRadius))
                          .AddBehavior(new Separation(CheckNearestFunc, 50f, 12f)
            {
                IsAdditive = true
            })
                          .UseDefaultRenderer(_defaultTexture)
                          .AddCollider(12f)
                          .Build();

            var entity3 = new SteeringBuilder(new Vector2(256, 256), leader)
                          .SetPhysicalParams(_params)
                          .AddNestedBehavior(new Arrival(64f), leaderFollowingBehavior3)
                          .AddBehavior(leaderFollowingBehavior3)
                          .AddBehavior(new Evade(), args => IsOnLeaderSight(leader, args.Entity, GetLeaderAhead(leader, leaderFollowingBehavior3.LeaderBehindDist), leaderFollowingBehavior3.LeaderSightRadius))
                          .AddBehavior(new Separation(CheckNearestFunc, 50f, 12f)
            {
                IsAdditive = true
            })
                          .UseDefaultRenderer(_defaultTexture)
                          .AddCollider(12f)
                          .Build();

            Core.Scene.AddEntity(leader);
            Core.Scene.AddEntity(entity);
            Core.Scene.AddEntity(entity2);
            Core.Scene.AddEntity(entity3);
        }