public PhysicsObject()
 {
     Position = Vector2.zero;
         mass = 0;
         physicsObjectType = PhysicsObjectType.SMBH;
         finishSetup();
 }
 //constructor with values
 public PhysicsObject(Vector2 _position, ulong _mass, PhysicsObjectType _type, float startingAngle)
 {
     Position = _position;
         mass = _mass;
         physicsObjectType = _type;
         Angle = startingAngle;
         finishSetup();
 }
        /// <summary>
        /// 
        /// </summary>
        public void InitializePhysics(PhysicsObjectType type)
        {
            PositionComponent_cl positionComponent = ((PositionComponent_cl)mParentEntity.GetComponentOfType(typeof(PositionComponent_cl)));

            switch(type)
            {
                case PhysicsObjectType.RECTANGLE:
                    mPhysicsBody = BodyFactory.CreateBody(PhysicsManager_cl.Instance.PhysicsWorld);
                    mPhysicsFixture = FixtureFactory.AttachRectangle(mWidth, mHeight, 10, Vector2.Zero, mPhysicsBody);
                    mPhysicsBody.BodyType = mIsStatic ? BodyType.Static : BodyType.Dynamic;
                    mPhysicsFixture.Restitution = 0.0f;
                    mPhysicsFixture.Friction = 0.5f;

                    mPhysicsBody.AngularDamping = 1000.0f;

                    SetPosition(positionComponent.Position3D);
                    break;

                case PhysicsObjectType.CIRCLE:
                    mPhysicsBody = BodyFactory.CreateBody(PhysicsManager_cl.Instance.PhysicsWorld);
                    mPhysicsFixture = FixtureFactory.AttachCircle(mHeight / 2, 10, mPhysicsBody);
                    mPhysicsBody.BodyType = mIsStatic ? BodyType.Static : BodyType.Dynamic;
                    mPhysicsFixture.Restitution = 0.0f;
                    mPhysicsFixture.Friction = 0.5f;

                    SetPosition(positionComponent.Position3D);
                    break;

                case PhysicsObjectType.CAPSULE:
                    mPhysicsBody = BodyFactory.CreateBody(PhysicsManager_cl.Instance.PhysicsWorld);
                    mPhysicsFixture = FixtureFactory.AttachCircle(mHeight / 6, 100, mPhysicsBody);// .AttachRectangle(mWidth, mHeight, 10, Vector2.Zero, mPhysicsBody);
                    mPhysicsBody.BodyType = mIsStatic ? BodyType.Static : BodyType.Dynamic;
                    mPhysicsFixture.Restitution = 0.0f;
                    mPhysicsFixture.Friction = 0.5f;

                    //JointFactory.CreateFixedRevoluteJoint(PhysicsManager_cl.Instance.PhysicsWorld, mPhysicsBody, Vector2.Zero, Vector2.Zero);

                    mPhysicsObjectOffset = new Vector2(0, -2 * mHeight / 6);

                    mPhysicsBody.AngularDamping = 1000.0f;

                    SetPosition(positionComponent.Position3D);
                    break;

                case PhysicsObjectType.FROM_TEXTURE:
                    mIsTerrain = true;

                    CreatePolygonFromTexture(mCollisionTexture);

                    RenderableComponent_cl renderable = (RenderableComponent_cl)mParentEntity.GetComponentOfType(typeof(RenderableComponent_cl));
                    renderable.Sprite.Size = new Vector2(mPolygonTexture.Width, mPolygonTexture.Height) * mTextureToVerticesScale;

                    SetPosition(positionComponent.Position3D);
                    break;

                case PhysicsObjectType.PLAYER:
                    Vector2 fixtureOffset = new Vector2(0, -0.20f);
                    float fixtureDensity = 40.0f / (mWidth * mHeight); //we want a mass of 40kg

                    mPhysicsBody = BodyFactory.CreateBody(PhysicsManager_cl.Instance.PhysicsWorld);
                    mPhysicsFixture = FixtureFactory.AttachRectangle(mWidth, mHeight, fixtureDensity, fixtureOffset /2, mPhysicsBody);
                    mPhysicsBody.BodyType = mIsStatic ? BodyType.Static : BodyType.Dynamic;
                    mPhysicsFixture.Restitution = 0.0f;
                    mPhysicsFixture.Friction = 0.5f;

                    SunburnSprite_cl rectangleSprite = new SunburnSprite_cl();
                    rectangleSprite.InitSunburnStuff();
                    rectangleSprite.LoadContent("debugRectangle");
                    rectangleSprite.Rectangle = new FloatRectangle(0, 0, 1, 1);
                    rectangleSprite.Size = new Vector2(mWidth, mHeight);
                    mDebugShapeMap.Add(new Vector3(0, -0.1f, -0.1f), rectangleSprite);

                    mPhysicsBody.Inertia = 9999999999.0f; // resist rotation

                    SetPosition(positionComponent.Position3D);

                    /*Adding the falling sensor here */
                    mFallingFixture = FixtureFactory.AttachRectangle(mWidth, 1.0f, 0, new Vector2(0, -2.0f), mPhysicsBody);
                    mFallingFixture.IsSensor = true;

                    mFallingFixture.OnCollision += Fixture_OnCollision;
                    mFallingFixture.UserData = mParentEntity;

                    SunburnSprite_cl rectangleSprite2 = new SunburnSprite_cl();
                    rectangleSprite2.InitSunburnStuff();
                    rectangleSprite2.LoadContent("debugRectangle");
                    rectangleSprite2.Rectangle = new FloatRectangle(0, 0, 1, 1);
                    rectangleSprite2.Size = new Vector2(mWidth, 1.75f);
                    mDebugShapeMap.Add(new Vector3(0, -2.5f, -0.1f), rectangleSprite2);

                    /*focus camera to player */
                    mPlayerPosition = ((PositionComponent_cl)mParentEntity.GetComponentOfType(typeof(PositionComponent_cl)));
                    SunburnCameraComponent_cl camera = (SunburnCameraComponent_cl)CameraManager_cl.Instance.ActiveCamera;
                    camera.FocusOnPlayer(mPlayerPosition);

                    break;

                default:
                    break;
            }

            /************************************************************************
             * HACK:
             * Setting the physics rotation off of the position component's rotation.
             *
             * Larsson Burch - 2011/12/02 - 13:29
             ************************************************************************/
            mPhysicsBody.Rotation = -positionComponent.Rotation;
        }
 /// <summary>
 /// Constructor for deserialization.
 /// </summary>
 /// <param name="info">info is the serialization info to deserialize with</param>
 /// <param name="context">context is the context in which to deserialize...?</param>
 protected PhysicsComponent_cl(SerializationInfo info, StreamingContext context)
     : base(info, context)
 {
     mIsStatic = info.GetBoolean("IsStatic");
     mWidth = info.GetSingle("Width");
     mHeight = info.GetSingle("Height");
     mCollisionGroup = info.GetInt16("CollisionGroup");
     mCollisionTexture = info.GetString("CollisionTexture");
     mPhysicsType = (PhysicsObjectType)info.GetInt32("PhysicsType");
 }