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); }
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); }