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"); }