Exemplo n.º 1
0
        public override void Start()
        {
            simulation = this.GetSimulation();
            simulation.Gravity = new Vector3(0, -9, 0);

            cubeRigidBody = cube.Get<RigidbodyComponent>();
            cubeRigidBody.CanSleep = false;
            sphereRigidBody = sphere.Get<RigidbodyComponent>();
            sphereRigidBody.CanSleep = false;

            // Create the UI
            constraintNameBlock = new TextBlock
            {
                Font = Font,
                TextSize = 55,
                TextColor = Color.White,
            };
            constraintNameBlock.SetCanvasPinOrigin(new Vector3(0.5f, 0.5f, 0));
            constraintNameBlock.SetCanvasRelativePosition(new Vector3(0.5f, 0.83f, 0));

            Entity.Get<UIComponent>().Page = new UIPage
            {
                RootElement = new Canvas
                {
                    Children = 
                    { 
                        constraintNameBlock, 
                        CreateButton("Next", Font, 1), 
                        CreateButton("Previous", Font, -1) 
                    }
                }
            };

            // Create and initialize constraint
            PhysicsSampleList.Add(CreatePoint2PointConstraint);
            PhysicsSampleList.Add(CreateHingeConstraint);
            PhysicsSampleList.Add(CreateGearConstraint);
            PhysicsSampleList.Add(CreateSliderConstraint);
            PhysicsSampleList.Add(CreateConeTwistConstraint);
            PhysicsSampleList.Add(CreateGeneric6DoFConstraint);

            PhysicsSampleList[constraintIndex]();

            //Add a script for the slider constraint, to apply an impulse on collision
            cubeRigidBody.ProcessCollisions = true;
            Script.AddTask(async () =>
            {
                while (Game.IsRunning)
                {
                    var collision = await cubeRigidBody.NewCollision();
                    if (!(currentConstraint is SliderConstraint)) continue;
                    if (collision.ColliderA != sphereRigidBody && collision.ColliderB != sphereRigidBody) continue;
                    sphereRigidBody.LinearVelocity = Vector3.Zero; //clear any existing velocity
                    sphereRigidBody.ApplyImpulse(new Vector3(-25, 0, 0)); //fire impulse
                }
            });
        }