public void Execute(Entity entity, int index, [ReadOnly] ref AntSeed seed, [ReadOnly] ref MapSize mapSize)
            {
                for (int i = 0; i < seed.Count; i++)
                {
                    var minPos           = new float2(-5f, -5f) + mapSize.Value * 0.5f;
                    var maxPos           = new float2(5f, 5f) + mapSize.Value * 0.5f;
                    var holdingResources = new HoldingResources();
                    holdingResources.Value = false;

                    var translation = new Translation2D();
                    translation.Value = this.Random.NextFloat2(minPos, maxPos);

                    var rotation = new Rotation2D();
                    rotation.Value = this.Random.NextFloat() * PI * 2f;

                    var speed = new Velocity();
                    speed.Value = seed.InitialSpeed;

                    var stats = new AntStats();
                    stats.Steering          = seed.RandomSteering;
                    stats.Acceleration      = seed.Acceleration;
                    stats.WallSteerStrength = seed.WallSteerStrength;
                    stats.GoalSteerStrength = seed.GoalSteerStrength;
                    stats.Brightness        = this.Random.NextFloat(.75f, 1.25f);

                    var ant = this.Buffer.Instantiate(seed.AntPrefab);
                    this.Buffer.SetComponent(ant, holdingResources);
                    this.Buffer.SetComponent(ant, translation);
                    this.Buffer.SetComponent(ant, rotation);
                    this.Buffer.SetComponent(ant, speed);
                    this.Buffer.SetComponent(ant, stats);
                }

                this.Buffer.RemoveComponent <AntSeed>(entity);
            }
        public void Scene_FluentBuildTransformations_ShouldAdded()
        {
            var rotationCenterX = 10.0;
            var rotationCenterY = 15.0;
            var rotationAngle   = Math.PI / 2;

            var shapes1 = CreateShapes();
            var shapes2 = CreateShapes();

            //Old syntax: method to method
            var translation1   = new Translation2D(rotationCenterX, rotationCenterY);
            var rotation       = new Rotation2D(rotationAngle);
            var translation2   = new Translation2D(-rotationCenterX, -rotationCenterY);
            var transformation = Transformation2D.Compose(translation1, rotation, translation2);

            for (int i = 0; i < shapes1.Count; i++)
            {
                shapes1[i].Apply(transformation);
                shapes1[i].DoTransform();
            }

            //New syntax: fluent builder
            shapes2.Translate(rotationCenterX, rotationCenterY).Rotate(rotationAngle).Translate(-rotationCenterX, -rotationCenterY).DoTransform();

            shapes1.Shapes.Should().BeEquivalentTo(shapes2.Shapes);
        }
            public void Execute(Entity entity, int index, [ReadOnly] ref ColonySeed colonySeed, [ReadOnly] ref MapSize mapSize)
            {
                var colonyPosition    = new float2(1f, 1f) * mapSize.Value * .5f;
                var colonyTranslation = new Translation2D();

                colonyTranslation.Value = colonyPosition;
                var colonyScale = new NonUniformScale();

                colonyScale.Value = new float3(4f, 4f, .1f) / mapSize.Value;

                var colony = this.Buffer.Instantiate(colonySeed.ColonyPrefab);

                this.Buffer.SetComponent(colony, colonyTranslation);
                this.Buffer.SetComponent(colony, colonyScale);

                this.Buffer.RemoveComponent <ColonySeed>(entity);
            }
            public void Execute(Entity entity, int index, [ReadOnly] ref ResourceSeed seed, [ReadOnly] ref MapSize mapSize)
            {
                float resourceAngle     = this.Random.NextFloat() * 2f * PI;
                var   offsetX           = cos(resourceAngle) * mapSize.Value * .475f;
                var   offsetY           = sin(resourceAngle) * mapSize.Value * .475f;
                var   resourcePosition  = new float2(1f, 1f) * mapSize.Value * .5f + new float2(offsetX, offsetY);
                var   colonyTranslation = new Translation2D();

                colonyTranslation.Value = resourcePosition;
                var colonyScale = new NonUniformScale();

                colonyScale.Value = new float3(4f, 4f, .1f) / mapSize.Value;

                var colony = this.Buffer.Instantiate(seed.ResourcePrefab);

                this.Buffer.SetComponent(colony, colonyTranslation);
                this.Buffer.SetComponent(colony, colonyScale);

                this.Buffer.RemoveComponent <ResourceSeed>(entity);
            }
Exemple #5
0
            public void Execute(Entity entity, int index, [ReadOnly] ref ObstacleSeed obstacleSeed, [ReadOnly] ref MapSize mapSize)
            {
                for (int i = 1; i <= obstacleSeed.RingCount; i++)
                {
                    float ringRadius    = (i / (obstacleSeed.RingCount + 1f)) * (mapSize.Value * 0.5f);
                    float circumference = ringRadius * 2f * PI;
                    int   maxCount      = (int)ceil(circumference / (2f * obstacleSeed.Radius) * 2f);
                    int   offset        = this.Random.NextInt(0, maxCount);
                    int   holeCount     = this.Random.NextInt(1, 3);

                    for (int j = 0; j < maxCount; j++)
                    {
                        float t = (float)j / maxCount;
                        if ((t * holeCount) % 1f < obstacleSeed.ObstaclesPerRing)
                        {
                            float angle = (j + offset) / (float)maxCount * (2f * PI);

                            var x = mapSize.Value * .5f + cos(angle) * ringRadius;
                            var y = mapSize.Value * .5f + sin(angle) * ringRadius;

                            Obstacle obstacle = new Obstacle();
                            obstacle.radius = obstacleSeed.Radius;
                            var translation = new Translation2D();
                            translation.Value = new float2(x, y);
                            var nonUniformScale = new NonUniformScale();
                            nonUniformScale.Value = new float3(obstacleSeed.Radius * 2f, obstacleSeed.Radius * 2f, 1f) / mapSize.Value;

                            var obstacleEntity = this.Buffer.Instantiate(obstacleSeed.ObstaclePrefab);
                            this.Buffer.SetComponent(obstacleEntity, obstacle);
                            this.Buffer.SetComponent(obstacleEntity, translation);
                            this.Buffer.SetComponent(obstacleEntity, nonUniformScale);
                        }
                    }
                }

                this.Buffer.RemoveComponent <ObstacleSeed>(entity);
            }