private gxtGeom CreatePlatformGeom(gxtPolygon polygon, Vector2 position) { gxtGeom platGeom = new gxtGeom(polygon, true); gxtRigidBody platBody = new gxtRigidBody(); platBody.MotionType = gxtRigidyBodyMotion.FIXED; platBody.CanSleep = false; platBody.Awake = true; platGeom.RigidBody = platBody; gxtPhysicsMaterial mat = new gxtPhysicsMaterial(0.6f, 0.3f); platGeom.CollisionGroups = world.PhysicsWorld.GetCollisionGroup("traversable_world_geometry"); platGeom.CollidesWithGroups = world.PhysicsWorld.GetCollisionGroup("player"); platGeom.Material = mat; platGeom.SetPosition(new Vector2(0.0f, 8.5f)); world.AddGeom(platGeom); return platGeom; }
public static float GetCombinedRestitution(gxtPhysicsMaterial mat0, gxtPhysicsMaterial mat1) { return gxtMath.Sqrt(mat0.restitution * mat1.restitution); }
private void InitGeoms() { gxtPhysicsMaterial material = new gxtPhysicsMaterial(0.7f, 0.2f); gxtPhysicsMaterial fMaterial = new gxtPhysicsMaterial(0.3f, 0.01f); gxtPhysicsMaterial cMaterial = new gxtPhysicsMaterial(0.01f, 0.5f); gxtPhysicsMaterial dMaterial = new gxtPhysicsMaterial(0.25f, 0.55f); geomA = new gxtGeom(); geomA.CollisionEnabled = true; geomA.CollidesWithGroups = gxtCollisionGroup.ALL; geomA.CollisionGroups = gxtCollisionGroup.ALL; geomA.CollisionResponseEnabled = true; geomA.RigidBody = null; geomA.Tag = null; //gxtPolygon worldPolyA = gxtGeometry.CreateRectanglePolygon(5.5f, 4.15f); //gxtPolygon worldPolyA = gxtGeometry.CreateRectanglePolygon(5.35f, 3.0f); gxtPolygon worldPolyA = gxtGeometry.CreateCirclePolygon(2.65f, 5); geomA.Polygon = worldPolyA; geomA.SetPosition(new Vector2(0, 0)); //geomA.OnCollision += OnCollision; geomA.OnSeperation += OnSeperation; geomA.Material = material; world.PhysicsWorld.Gravity = new Vector2(0.0f, 9.8f); // A and B will be attached to the came rigid body geomB = new gxtGeom(); geomB.CollisionEnabled = true; geomB.CollidesWithGroups = gxtCollisionGroup.ALL; geomB.CollisionGroups = gxtCollisionGroup.ALL; geomB.CollisionResponseEnabled = true; geomB.RigidBody = null; geomB.Tag = null; //gxtPolygon worldPolyB = gxtGeometry.CreateRectanglePolygon(2.35f, 3.3f); gxtPolygon worldPolyB = gxtGeometry.CreateRectanglePolygon(2.35f, 5); geomB.SetupFromLocalPolygon(worldPolyB, new Vector2(0.0f, -4.0f), 0.0f); geomB.SetPosition(new Vector2(0, 0)); geomB.Material = material; geomC = new gxtGeom(); geomC.CollisionEnabled = true; geomC.CollidesWithGroups = gxtCollisionGroup.ALL; geomC.CollisionGroups = gxtCollisionGroup.ALL; geomC.CollisionResponseEnabled = true; geomC.RigidBody = null; geomC.OnCollision += OnOneWayPlatformCollision; geomC.Tag = null; gxtPolygon worldPolyC = gxtGeometry.CreateRectanglePolygon(7.5f, 1.35f); geomC.Polygon = worldPolyC; geomC.SetPosition(new Vector2(4.5f, 5.25f)); geomC.Material = cMaterial; geomD = new gxtGeom(); geomD.CollisionEnabled = true; geomD.CollidesWithGroups = gxtCollisionGroup.ALL; geomD.CollisionGroups = gxtCollisionGroup.ALL; geomD.CollisionResponseEnabled = true; geomD.RigidBody = null; geomD.Tag = null; gxtPolygon worldPolyD = gxtGeometry.CreateRectanglePolygon(3.0f, 3.0f); geomD.Polygon = worldPolyD; geomD.Material = dMaterial; //geomD.SetPosition(new Vector2(400, 0)); /* geomE = new gxtGeom(); geomE.CollisionEnabled = true; geomE.CollidesWithGroups = gxtCollisionGroup.ALL; geomE.CollisionGroups = gxtCollisionGroup.ALL; geomE.CollisionResponseEnabled = true; geomE.RigidBody = null; geomE.Tag = null; gxtPolygon worldPolyE; Vector2[] tri = new Vector2[3]; tri[0] = new Vector2(-400, -300); tri[1] = new Vector2(400, -75); tri[2] = new Vector2(400, -300); worldPolyE = new gxtPolygon(tri); geomE.Polygon = worldPolyE; geomE.SetPosition(new Vector2(0, 0)); */ geomF = new gxtGeom(); geomF.CollisionEnabled = true; geomF.CollidesWithGroups = gxtCollisionGroup.ALL; geomF.CollisionGroups = gxtCollisionGroup.ALL; geomF.CollisionResponseEnabled = true; geomF.RigidBody = null; geomF.Tag = null; //geomF.Polygon = gxtGeometry.CreateCirclePolygon(2.0f, 12); geomF.Polygon = gxtGeometry.CreateRectanglePolygon(3.0f, 4.5f); //geomF.Polygon = gxtGeometry.CreateRectanglePolygon(4.35f, 4); geomF.SetPosition(new Vector2(-5.5f, -3.15f)); geomF.OnCollision += OnCollision; geomF.Material = fMaterial; floorG = new gxtGeom(); floorG.CollisionEnabled = true; floorG.CollidesWithGroups = gxtCollisionGroup.ALL; floorG.CollisionGroups = gxtCollisionGroup.ALL; floorG.CollisionResponseEnabled = true; floorG.RigidBody = null; floorG.Tag = null; floorG.Polygon = gxtGeometry.CreateRectanglePolygon(30, 2.5f); floorG.SetPosition(new Vector2(0.0f, 10.25f)); floorG.Material = material; world.AddGeom(geomA); world.AddGeom(floorG); //world.AddGeom(geomB); world.AddGeom(geomC); world.AddGeom(geomD); /* world.AddGeom(geomE); */ world.AddGeom(geomF); }
public static float GetCombinedFriction(gxtPhysicsMaterial mat0, gxtPhysicsMaterial mat1) { return gxtMath.Sqrt(mat0.friction * mat1.friction); }