Exemple #1
0
        private void FourCollisionsButton_Click(object sender, EventArgs e)
        {
            CollisionAPI API = new CollisionAPI();
            // Create some obstacles, at 4 corners of a square
            List <CollisionShape> shapes = new List <CollisionShape>();

            CollisionSphere sphere = new CollisionSphere(new Vector3(0f, 0f, 2f), 1f);

            shapes.Add(sphere);
            API.AddCollisionShape(sphere, 1);

            CollisionCapsule capsule = new CollisionCapsule(new Vector3(10f, 0f, 0f),
                                                            new Vector3(10f, 0f, 4f),
                                                            1f);

            shapes.Add(capsule);
            API.AddCollisionShape(capsule, 2);

            // Now, an AABB
            CollisionAABB aabb = new CollisionAABB(new Vector3(9.5f, 9.5f, 0f),
                                                   new Vector3(10.5f, 10.5f, 4f));

            shapes.Add(aabb);
            API.AddCollisionShape(aabb, 3);

            CollisionOBB obb = new CollisionOBB(new Vector3(0f, 10f, 2),
                                                new Vector3[3] {
                new Vector3(1f, 0f, 0f),
                new Vector3(0f, 1f, 0f),
                new Vector3(0f, 0f, 1f)
            },
                                                new Vector3(1f, 1f, 1f));

            shapes.Add(obb);
            API.AddCollisionShape(obb, 4);

            FileStream   f      = new FileStream("C:\\Junk\\DumpSphereTree.txt", FileMode.Create, FileAccess.Write);
            StreamWriter writer = new StreamWriter(f);

            API.DumpSphereTree(writer);
            API.SphereTreeRoot.VerifySphereTree();

            // Now a moving object capsule in the center of the square
            CollisionCapsule moCap = new CollisionCapsule(new Vector3(5f, 5f, 0f),
                                                          new Vector3(5f, 5f, 4f),
                                                          1f);

            // Remember where the moving object started
            Vector3 start = moCap.center;

            // Move the moving object toward each of the obstacles
            foreach (CollisionShape s in shapes)
            {
                moCap.AddDisplacement(start - moCap.center);
                MoveToObject(writer, API, s, moCap);
            }

            writer.Close();
        }
Exemple #2
0
        private void RandomSpheresButton_Click(object sender, EventArgs e)
        {
            const int   iterations      = 20;
            const int   objects         = 10;
            const float coordRange      = 1000.0f;
            const float objectSizeRange = 20.0f;

            CollisionAPI API    = new CollisionAPI();
            Random       rand   = new Random((int)3141526);
            FileStream   f      = new FileStream("C:\\Junk\\RandomSphereTree.txt", FileMode.Create, FileAccess.Write);
            StreamWriter stream = new StreamWriter(f);

            // Create and delete many randomly-placed collision
            // objects, periodically verifying the sphere tree
            for (int i = 0; i < iterations; i++)
            {
                stream.Write("//////////////////////////////////////////////////////////////////////\n\n");
                stream.Write(string.Format("Creation Iteration {0}, adding {1} objects, object size range {2}, coordinate range {3}\n\n",
                                           i, objects, objectSizeRange, coordRange));
                GenerateRandomObjects(stream, API, rand, objects, 0, coordRange, objectSizeRange);
                stream.Write(string.Format("\n\nAfter iteration {0}:\n\n", i));
                API.DumpSphereTree(stream);
                stream.Flush();
                API.SphereTreeRoot.VerifySphereTree();
            }
            for (int i = 0; i < objects; i++)
            {
                stream.Write("\n\n//////////////////////////////////////////////////////////////////////\n\n");
                stream.Write(string.Format("Deleting shapes with handle {0}\n\n", i));
                API.RemoveCollisionShapesWithHandle(i);
                API.DumpSphereTree(stream);
                stream.Flush();
                API.SphereTreeRoot.VerifySphereTree();
            }
            stream.Close();
        }