Ejemplo n.º 1
0
        public int AddSymet(Symet symet)
        {
            int tempID = GetWorldID();

            symet.WorldID = tempID;
            symets.Add(symet);

            return tempID;
        }
Ejemplo n.º 2
0
        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;
        }
Ejemplo n.º 3
0
        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;
        }
Ejemplo n.º 4
0
        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;
        }