Example #1
0
    public void TestUpdatePositionWithVelocity()
    {
        //Arrange
        var            pool           = new Pool(BoidsComponentIds.TotalComponents);
        FlockingSystem flockingSystem = new FlockingSystem();

        flockingSystem.PreserveExistingDirectionWeight = 1;
        flockingSystem.NormalVelocity = 7.6f;
        pool.CreateSystem(flockingSystem);

        Vector3 startingPosition  = new Vector3(10, 15, -3);
        Vector3 direction         = new Vector3(0.3f, -0.7f, 0.1f).normalized;
        float   velocityMagnitude = flockingSystem.NormalVelocity;
        int     numberOfUpdates   = 3;

        var boid = pool.CreateEntity().
                   AddPosition(startingPosition).
                   AddVelocity(direction, velocityMagnitude).
                   IsBoid(true);

        //Act
        for (int update = 0; update < numberOfUpdates; ++update)
        {
            flockingSystem.Execute();
        }

        //Assert
        Assert.That(Vector3.Distance(
                        boid.position.Position,
                        startingPosition + velocityMagnitude * direction * numberOfUpdates * flockingSystem.Deltatime),
                    Is.LessThanOrEqualTo(0.1f));
    }
Example #2
0
    public void TestPreserveExistingDirection()
    {
        //Arrange
        var            pool           = new Pool(BoidsComponentIds.TotalComponents);
        FlockingSystem flockingSystem = new FlockingSystem();

        flockingSystem.PreserveExistingDirectionWeight = 1;
        pool.CreateSystem(flockingSystem);

        var boid = pool.CreateEntity().
                   AddPosition(new Vector3(0, 0, 0)).
                   AddVelocity(new Vector3(0, 0, 1), 10).
                   IsBoid(true);

        //Act
        flockingSystem.Execute();
        flockingSystem.Execute();
        flockingSystem.Execute();

        //Assert
        Assert.That(
            boid.velocity.Direction, Is.EqualTo(new Vector3(0, 0, 1)));
    }
Example #3
0
    public void TestMaxDistanceToCenter()
    {
        //Arrange
        var            pool           = new Pool(BoidsComponentIds.TotalComponents);
        FlockingSystem flockingSystem = new FlockingSystem();

        flockingSystem.PreserveExistingDirectionWeight = 1;
        flockingSystem.MaxDistToCenterWeight           = 2;
        pool.CreateSystem(flockingSystem);

        Vector3 startingPosition  = new Vector3(50, 50, 50);
        Vector3 direction         = new Vector3(1f, 1f, 1f).normalized;
        float   velocityMagnitude = flockingSystem.NormalVelocity;
        int     numberOfUpdates   = 200;

        var boid = pool.CreateEntity().
                   AddPosition(startingPosition).
                   AddVelocity(direction, velocityMagnitude).
                   IsBoid(true);

        float[] distancesToCenter = new float[numberOfUpdates];

        //Act
        for (int update = 0; update < numberOfUpdates; ++update)
        {
            flockingSystem.Execute();
            distancesToCenter[update] = boid.position.Position.magnitude;
        }

        //Assert
        for (int update = 0; update < numberOfUpdates; ++update)
        {
            Assert.That(
                distancesToCenter[update], Is.LessThan(flockingSystem.MaxDistToCenter));
        }
    }