public int AddSymet(Symet symet) { int tempID = GetWorldID(); symet.WorldID = tempID; symets.Add(symet); return tempID; }
public Symet BuildDNA() { Symet symet; Dictionary<int, Arm> arms = new Dictionary<int, Arm>(); Dictionary<int, Segment> segments; List<Vector2> bodyVertices = new List<Vector2>(); List<Vector2> segmentVertices; double parentFaceAngle; Vector2 vertice; // Build the body vertice = new Vector2(0, -1 * bodySize); bodyVertices.Add(vertice); for (int i = 1; i < Convert.ToInt32(bodyShape); i++) { vertice = new Vector2(0, -1 * bodySize); vertice = Vector2.Transform(vertice, Matrix.CreateRotationZ(Convert.ToSingle(((2 * Math.PI) / Convert.ToInt32(bodyShape) * i)))); bodyVertices.Add(vertice); } // Build the arms for (int i = 0; i < Convert.ToInt32(bodyShape); i++) { Arm tempArm; // Build the segments segments = new Dictionary<int, Segment>(); foreach (Chromosome chromosome in chromosomes.Values) { if (!chromosome.Active) continue; // Build the vertices and add segment segmentVertices = new List<Vector2>(); // Build the vertices. Ones attached to the main body are a special case if (chromosome.ParentID == 0) { parentFaceAngle = GetAngle(bodyVertices[i], bodyVertices[i < Convert.ToInt32(bodyShape) - 1 ? i + 1 : 0]); segmentVertices.Add(bodyVertices[i]); foreach (VectorP instruction in chromosome.Instructions) { // Get the cartesian coordinates of the instructions using the parent face as a base segmentVertices.Add(instruction.GetCartesian(parentFaceAngle) + bodyVertices[i]); } segmentVertices.Add(bodyVertices[i < Convert.ToInt32(bodyShape) - 1 ? i + 1 : 0]); } else { parentFaceAngle = GetAngle(segments[chromosome.ParentID].Vertices[chromosome.ParentFace - 1], segments[chromosome.ParentID].Vertices[chromosome.ParentFace]); segmentVertices.Add(segments[chromosome.ParentID].Vertices[chromosome.ParentFace - 1]); foreach (VectorP instruction in chromosome.Instructions) { // Get the cartesian coordinates of the instructions using the parent face as a base segmentVertices.Add(instruction.GetCartesian(parentFaceAngle) + segments[chromosome.ParentID].Vertices[chromosome.ParentFace - 1]); } segmentVertices.Add(segments[chromosome.ParentID].Vertices[chromosome.ParentFace]); } if (chromosome.ParentID != 0) segments[chromosome.ParentID].Faces[chromosome.ParentFace] = chromosome.ID; segments.Add(chromosome.ID, new Segment( segmentVertices, chromosome.ID, chromosome.ParentID, chromosome.ParentFace, chromosome.Type)); } tempArm = new Arm(segments); arms.Add(i, tempArm); } symet = new Symet(bodyVertices, arms, this); return symet; }
public int TestInitialize() { editor = new Editor(); physics = new Physics(); worldIDCounter = 0; DNA dna1; DNA dna2; // Test symet creation code dna1 = new DNA(Shape.Triangle, 5.0f, SegmentType.Defend, .6f); dna2 = new DNA(Shape.Square, 7.0f, SegmentType.Photo, 2.34f); List<VectorP> instructions1 = new List<VectorP>(); List<VectorP> instructions2 = new List<VectorP>(); List<VectorP> instructions3 = new List<VectorP>(); symets = new List<Symet>(); instructions1.Add(new VectorP(1.2, 5)); instructions1.Add(new VectorP(.7, 6)); instructions1.Add(new VectorP(.3, 8)); instructions2.Add(new VectorP(.9, 5)); instructions2.Add(new VectorP(.6, 15)); instructions3.Add(new VectorP(1.1, 10)); instructions3.Add(new VectorP(1.7, 10)); instructions3.Add(new VectorP(1.1, 14)); instructions3.Add(new VectorP(.8, 14)); instructions3.Add(new VectorP(1.0, 10)); dna1.CreateChromosome(instructions1, 0, 1, SegmentType.Movement, new Vector2(3, -2)); dna1.CreateChromosome(instructions1, 1, 1, SegmentType.Attack, new Vector2(5, 4)); dna1.CreateChromosome(instructions1, 1, 3, SegmentType.Movement, new Vector2(0, 0)); dna1.CreateChromosome(instructions2, 2, 2, SegmentType.Attack, new Vector2()); dna1.CreateChromosome(instructions2, 3, 2, SegmentType.Attack, new Vector2()); //dna1.CreateChromosome(instructions3, 1, 2, SegmentType.Defend, new Vector2()); dna2.CreateChromosome(instructions1, 0, 1, SegmentType.Movement, new Vector2(-2, 1)); dna2.CreateChromosome(instructions1, 1, 1, SegmentType.Photo, new Vector2(2, -5)); dna2.CreateChromosome(instructions1, 1, 3, SegmentType.Movement, new Vector2(1, 4)); dna2.CreateChromosome(instructions2, 2, 2, SegmentType.Defend, new Vector2(-5, 3)); dna2.CreateChromosome(instructions2, 3, 2, SegmentType.Defend, new Vector2(6, 6)); dna2.CreateChromosome(instructions3, 1, 2, SegmentType.Defend, new Vector2()); Symet symet = new Symet(); for (int i = 0; i < 10; i++) { symet = dna1.BuildDNA(); symet.Position = new Vector2(50 + i * 100, 50); AddSymet(symet); } for (int i = 0; i < 10; i++) { symet = dna2.BuildDNA(); symet.Position = new Vector2(50 + i * 100, 100); AddSymet(symet); } for (int i = 0; i < 10; i++) { symet = dna1.BuildDNA(); symet.Position = new Vector2(50 + i * 100, 150); AddSymet(symet); } for (int i = 0; i < 10; i++) { symet = dna2.BuildDNA(); symet.Position = new Vector2(50 + i * 100, 200); AddSymet(symet); } for (int i = 0; i < 10; i++) { symet = dna1.BuildDNA(); symet.Position = new Vector2(50 + i * 100, 250); AddSymet(symet); } for (int i = 0; i < 10; i++) { symet = dna2.BuildDNA(); symet.Position = new Vector2(50 + i * 100, 300); AddSymet(symet); } for (int i = 0; i < 10; i++) { symet = dna1.BuildDNA(); symet.Position = new Vector2(50 + i * 100, 350); AddSymet(symet); } for (int i = 0; i < 10; i++) { symet = dna2.BuildDNA(); symet.Position = new Vector2(50 + i * 100, 400); AddSymet(symet); } for (int i = 0; i < 10; i++) { symet = dna1.BuildDNA(); symet.Position = new Vector2(50 + i * 100, 450); AddSymet(symet); } for (int i = 0; i < 10; i++) { symet = dna2.BuildDNA(); symet.Position = new Vector2(50 + i * 100, 500); AddSymet(symet); } for (int i = 0; i < 10; i++) { symet = dna1.BuildDNA(); symet.Position = new Vector2(50 + i * 100, 550); AddSymet(symet); } for (int i = 0; i < 10; i++) { symet = dna2.BuildDNA(); symet.Position = new Vector2(50 + i * 100, 600); AddSymet(symet); } for (int i = 0; i < 10; i++) { symet = dna1.BuildDNA(); symet.Position = new Vector2(50 + i * 100, 650); AddSymet(symet); } return 1; }
private List<Collisions> GetCollisions(Symet symet1, Symet symet2) { List<Collisions> collisions = new List<Collisions>(); List<SegmentShape> shapes1 = symet1.CollidableShapes; List<SegmentShape> shapes2 = symet2.CollidableShapes; for (int i = 0; i < shapes1.Count; i++) { for (int j = 0; j < shapes2.Count; j++) { if (PrimitiveShape.TestCollision(shapes1[i].shape, shapes2[j].shape)) { collisions.Add(new Collisions(shapes1[i], shapes2[j])); } } } return collisions; }