Interacting with bodies

Topics: Developer Forum
Aug 31, 2011 at 2:40 AM
Edited Aug 31, 2011 at 2:51 AM

Hi,

This might be more appropriate to post in the box2d forums, but I'm not sure the folks there would understand my situation.

Basically, in Farseer 2.1.3, to get the geom at a touch point you did:

                        var touchedGeom = PhysicsSimulator.Collide(point);

How do I do this in 3.3? World does not seem to contain a Collide method.

I'm trying to convert this 2.1.3 code to 3.3, if anyone could post the new way to do it, that would be awesome! Mainly I'm looking to pick up and move objects.

        private FixedLinearSpring touchSpring;
       
        private void HandleInput()
        {
            TouchCollection currentTouchCollection = TouchPanel.GetState();
                   
            foreach (TouchLocation location in currentTouchCollection)
            {
                Vector2 point;
               
                switch (location.State)
                {
                    case TouchLocationState.Pressed:
                     
                        if (touchSpring != null)
                        {
                            return;
                        }
                       
                        point = ConvertUnits.ToSimUnits(location.Position);
                       
                        var touchedGeom = PhysicsSimulator.Collide(point);
                       
                        if (touchedGeom != null)
                        {
                            touchSpring = SpringFactory.Instance.CreateFixedLinearSpring(
                                 PhysicsSimulator,
                                 touchedGeom.Body,
                                 touchedGeom.Body.GetLocalPosition(point),
                                 point,
                                 100,
                                 50);
                        }
                   
                        break;
                   
                    case TouchLocationState.Moved:
                   
                        if (touchSpring != null)
                        {
                            point = ConvertUnits.ToSimUnits(location.Position);
                       
                            touchSpring.WorldAttachPoint = point;
                        }
                   
                        break;
                   
                    case TouchLocationState.Released:
                   
                        if (touchSpring != null && !touchSpring.IsDisposed)
                        {
                            touchSpring.Dispose();
                            touchSpring = null;
                        }
                   
                        break;
                }   
            }           
        }