private PhysicObject SpawnPrimitive(Vector3 pos,Matrix ori) { int prim = random.Next(3); PhysicObject physicObj; float a = 1.0f + (float)random.NextDouble() * 1.0f; float b = a + (float)random.NextDouble() * 0.5f; float c = 2.0f / a / b; switch (prim) { case 0: physicObj = new BoxObject(this, boxModel, new Vector3(a, b, c), ori, pos); break; case 1: physicObj = new SphereObject(this, sphereModel, 0.5f, ori, pos); break; case 2: physicObj = new CapsuleObject(this, capsuleModel, 0.5f,1f, ori, pos); break; default: physicObj = new SphereObject(this, sphereModel, (float)random.Next(5, 15), ori, pos); break; } return physicObj; }
private void CreateScene0() { // Newton was here BoxObject holder = new BoxObject(this, boxModel, new Vector3(5, 1, 1), Matrix.Identity, new Vector3(-10, -5, 5)); holder.PhysicsBody.Immovable = true; this.Components.Add(holder); for (int i = 0; i < 5; i++) { SphereObject obj = new SphereObject(this, sphereModel, 0.5f, Matrix.Identity, new Vector3(-12 + i, -8, 5)); obj.PhysicsBody.CollisionSkin.SetMaterialProperties(0, new MaterialProperties(1.0f, 0.2f, 0.2f)); obj.PhysicsBody.AllowFreezing = false; ConstraintMaxDistance maxDist1 = new ConstraintMaxDistance(holder.PhysicsBody, new Vector3(-2 + i, -0.5f, 0.5f), obj.PhysicsBody, Vector3.Up * 0.5f, 3f); ConstraintMaxDistance maxDist2 = new ConstraintMaxDistance(holder.PhysicsBody, new Vector3(-2 + i, -0.5f, -0.5f), obj.PhysicsBody, Vector3.Up * 0.5f, 3f); maxDist1.EnableConstraint(); maxDist2.EnableConstraint(); this.Components.Add(obj); if (i == 4) obj.PhysicsBody.MoveTo(new Vector3(-6, -6, 5), Matrix.Identity); if (i == 3) obj.PhysicsBody.MoveTo(new Vector3(-7, -6, 5), Matrix.Identity); } }