protected override void LoadContent() { arch = Content.Load <Model>("arch"); sphere = Content.Load <Model>("sphere"); Vector2 archPosition = new Vector2(0f, -1f); Body3D arch3D = Body3DFactory.CreateBody3D( arch, world3D.World2D, GraphicsDevice, archPosition, BodyType.Static, basicEffectParams: effectParams); world3D.AddBody3D(arch3D); Vector2 spherePosition = new Vector2(0f, 5f); Body3D sphere3D = Body3DFactory.CreateBody3D( sphere, world3D.World2D, GraphicsDevice, spherePosition, basicEffectParams: effectParams); sphere3D.Body2D.SetRestitution(0.8f); sphere3D.Body2D.ApplyAngularImpulse(14f); world3D.AddBody3D(sphere3D); }
private void AddRamp(bool typeA, Vector2 position) { Body3D ramp = _creator.CreateBody3D(typeA ? _rampAModel : _rampBModel, position, BodyType.Static); ramp.Body2D.SetCollisionCategories(Category.Cat31); Demo.World3D.AddBody3D(ramp); }
public override void Construct() { Demo.Window.Title = "Friction Demo"; Demo.Camera3D.Position = new Vector3(-46.62277f, 105.9008f, 79.68979f); Demo.Camera3D.Target = new Vector3(-46.25956f, 105.3427f, 78.94375f); ConstructGround(23); Body3D body3D = Body3DFactory.CreateBody3D( _leftBlock, Demo.World3D.World2D, Demo.GraphicsDevice, new Vector2(-59.15f, 5.9f), BodyType.Static); body3D.Body2D.SetCollisionCategories(Category.Cat31); Demo.World3D.AddBody3D(body3D); body3D = Body3DFactory.CreateBody3D( _rightBlock, Demo.World3D.World2D, Demo.GraphicsDevice, new Vector2(59.15f, 5.9f), BodyType.Static); body3D.Body2D.SetCollisionCategories(Category.Cat31); Demo.World3D.AddBody3D(body3D); ConstructRamps(); }
private void ConstructEnvironment() { int groundLength = 51; ConstructGround(groundLength); Body3D blockLeft = Body3DFactory.CreateBody3D( Demo.Content.Load <Model>("Models/groundBlockLongLeft"), Demo.World3D.World2D, Demo.GraphicsDevice, new Vector2(-129.15f, 5.9f), BodyType.Static); Demo.World3D.AddBody3D(blockLeft); Body3D blockRight = Body3DFactory.CreateBody3D( Demo.Content.Load <Model>("Models/groundBlockLongRight"), Demo.World3D.World2D, Demo.GraphicsDevice, new Vector2(129.15f, 5.9f), BodyType.Static); Demo.World3D.AddBody3D(blockRight); _backgroundWall = Demo.Content.Load <Model>("Models/Decorations/goldWall"); for (int i = -groundLength / 3; i < groundLength / 3; i++) { Demo.World3D.AddBackdrop3D(new Backdrop3D(_backgroundWall, new Vector3(i * 15f, 0f, -15f))); } }
private void CreateChassis(World world, Vector2 pivot) { { PolygonShape shape = new PolygonShape(1f) { Vertices = PolygonTools.CreateRectangle(2.5f, 1f) }; _body = Demo.Content.Load <Model>("Models/TheoDesign/bodyOrganic"); _chassis = world.CreateBody(); _chassis.BodyType = BodyType.Dynamic; _chassis.Position = pivot + _position; Fixture fixture = _chassis.CreateFixture(shape); fixture.CollisionGroup = -1; _mainBody3D = new Body3D(_body, _chassis); Demo.World3D.AddBody3D(_mainBody3D); } { CircleShape shape = new CircleShape(1.6f, 1f); _engine = Demo.Content.Load <Model>("Models/TheoDesign/engineLargeTwistedEnds"); _wheel = world.CreateBody(); _wheel.BodyType = BodyType.Dynamic; _wheel.Position = pivot + _position; Fixture fixture = _wheel.CreateFixture(shape); fixture.CollisionGroup = -1; Demo.World3D.AddBody3D(new Body3D(_engine, _wheel)); } { _motorJoint = new RevoluteJoint(_wheel, _chassis, _wheel.GetLocalPoint(_chassis.Position), Vector2.Zero) { CollideConnected = false, MotorSpeed = _motorSpeed, MaxMotorTorque = MAX_MOTOR_TORQUE, MotorEnabled = true }; world.Add(_motorJoint); } }
private void AddBall(float restitution, float positionZ, float positionX, Category collisionCategory) { Body body = new Body(); body.CreateCircle(1f, 1f); body.SetRestitution(restitution); body.SetCollidesWith(collisionCategory); Body3D body3D = Body3DFactory.CreateBody3D(_ballModel, Demo.World3D.World2D, body, new Vector2(positionX, 5f)); body3D.PositionZ = positionZ; body3D.Body2D.ApplyLinearImpulse(Vector2.One * 10f); body3D.Body2D.ApplyAngularImpulse(-40f); Demo.World3D.AddBody3D(body3D); }
/// <summary> /// Vrátí objekt typu <see cref="Body3D"/>. Tvar pro dvourozměrnou fyzikální simulaci je dán parametrem body. /// </summary> /// <param name="model">Trojrozměrný model.</param> /// <param name="world2D">Dvourozměrný svět, do kterého má být těleso zařazeno.</param> /// <param name="body">Dvourozměrné těleso.</param> /// <param name="position">Výchozí pozice objektu v dvourozměrném světě.</param> /// <param name="bodyType">Typ simulovaného tělesa (statické, kinematické nebo dynamické).</param> /// <param name="basicEffectParams">Parametry pro třídu <see cref="BasicEffect"/>.</param> /// <returns>Objekt typu <see cref="Body3D"/>.</returns> public static Body3D CreateBody3D( Model model, World world2D, Body body, Vector2 position = new Vector2(), BodyType bodyType = BodyCreator.DEFAULT_BODY_TYPE, BasicEffectParams basicEffectParams = null) { body.Position = position; body.BodyType = bodyType; world2D.Add(body); Body3D body3D = new Body3D(model, body) { BasicEffectParams = basicEffectParams }; return(body3D); }
private void AddCube(float friction, float positionZ, float positionX, Category collisionCategory) { Body body = new Body(); body.CreateRectangle(2f, 2f, 1f, Vector2.Zero); body.SetFriction(friction); body.SetCollidesWith(collisionCategory); Body3D body3D = Body3DFactory.CreateBody3D( _cubeModel, Demo.World3D.World2D, body, new Vector2(positionX, 100f)); body3D.PositionZ = positionZ; Demo.World3D.AddBody3D(body3D); }
protected override void LoadContent() { ground = Content.Load <Model>("ground"); cilinder = Content.Load <Model>("cilinder"); Vector2 groundPosition = new Vector2(0f, -1f); Body3D ground3D = Body3DFactory.CreateBody3D( ground, world3D.World2D, GraphicsDevice, groundPosition, BodyType.Static); world3D.AddBody3D(ground3D); Vector2 cilinderPosition = new Vector2(0f, 5f); Body3D cilinder3D = Body3DFactory.CreateBody3D( cilinder, world3D.World2D, GraphicsDevice, cilinderPosition); world3D.AddBody3D(cilinder3D); }
public override void Construct() { Demo.Window.Title = "Restitution Demo"; Demo.Camera3D.Position = new Vector3(22.12281f, 0.4714419f, 5.708819f); Demo.Camera3D.Target = new Vector3(21.21403f, 0.5188365f, 5.294256f); ConstructGround(); Body3D leftBlock = Body3DFactory.CreateBody3D( Demo.Content.Load <Model>("Models/groundBlockLongLeft"), Demo.World3D.World2D, Demo.GraphicsDevice, new Vector2(-24.15f, 5.9f), BodyType.Static); leftBlock.Body2D.SetCollisionCategories(Category.Cat31); Demo.World3D.AddBody3D(leftBlock); Body3D rightBlock = Body3DFactory.CreateBody3D( Demo.Content.Load <Model>("Models/groundBlockLongRight"), Demo.World3D.World2D, Demo.GraphicsDevice, new Vector2(24.15f, 5.9f), BodyType.Static); rightBlock.Body2D.SetCollisionCategories(Category.Cat31); Demo.World3D.AddBody3D(rightBlock); AddBall(0.70f, -6f, -6f, Category.Cat31); AddBall(0.75f, -4f, -4f, Category.Cat31); AddBall(0.80f, -2f, -2f, Category.Cat31); AddBall(0.85f, 0f, 0f, Category.Cat31); AddBall(0.90f, 2f, 2f, Category.Cat31); AddBall(0.95f, 4f, 4f, Category.Cat31); AddBall(1.00f, 6f, 6f, Category.Cat31); }
/// <summary> /// Vrátí objekt typu <see cref="Body3D"/>. Tvar odpovídající dvourozměrné reprezentaci pro fyzikální simulaci /// je nalezen podle ortogonální projekce zadaného trojrozměrného modelu. /// </summary> /// <param name="model">Trojrozměrný model.</param> /// <param name="world2D">Dvourozměrný svět, do kterého má být těleso zařazeno.</param> /// <param name="graphicsDevice">Grafické zařízení.</param> /// <param name="position">Výchozí pozice objektu ve dvojrozměrném světě.</param> /// <param name="bodyType">Typ simulovaného tělesa (statické, kinematické nebo dynamické).</param> /// <param name="orthographicModelSize">Velikost modelu pro renderování. Pokud tento parametr není zadán, /// vypočítá se.</param> /// <param name="triangulationAlgorithm">Algoritmus pro rozdělení tvaru na množství menších konvexních /// polygonů.</param> /// <param name="basicEffectParams">Parametry pro třídu <see cref="BasicEffect"/>.</param> /// <returns>Objekt typu <see cref="Body3D"/>.</returns> public static Body3D CreateBody3D( Model model, World world2D, GraphicsDevice graphicsDevice, Vector2 position = new Vector2(), BodyType bodyType = BodyCreator.DEFAULT_BODY_TYPE, Vector2 orthographicModelSize = new Vector2(), TriangulationAlgorithm triangulationAlgorithm = BodyCreator.DEFAULT_TRIANGULATION_ALGORITHM, BasicEffectParams basicEffectParams = null) { using (Texture2D orthoRender = BitmapRenderer.RenderOrthographic(graphicsDevice, model, BitmapRenderer.DEFAULT_BITMAP_SCALE, orthographicModelSize)) { Body body2D = BodyCreator.CreatePolygonBody(orthoRender, world2D, position, bodyType, 1f, 0f, 1f, triangulationAlgorithm); Body3D body3D = new Body3D(model, body2D) { BasicEffectParams = basicEffectParams }; return(body3D); } }
public override void Construct() { Demo.Window.Title = "Game Scene Demo"; Demo.Camera3D.Position = new Vector3(17f, 9f, 19f); Vector2 defaultPositionShift = new Vector2(-100f, 5f); Demo.Camera3D.Target = new Vector3(defaultPositionShift.X, defaultPositionShift.Y, 18f); _positionStart = Demo.Camera3D.Target; ConstructBusStop(); ConstructBackground(); PolygonShape shape = new PolygonShape(1f) { Vertices = PolygonTools.CreateRoundedRectangle(25f, 6.45566f, 1.5f, 1.5f, 4) }; _chassis3D = Body3DFactory.CreateBody3D( _bodyModel, Demo.World3D.World2D, Demo.GraphicsDevice, defaultPositionShift, BodyType.Dynamic, new Vector2(25f, 6.45566f)); Demo.World3D.AddBody3D(_chassis3D); #region Přední náprava Vector2 frontPosition = new Vector2(6.996475f, -2.9f) + defaultPositionShift; Vector2 axis = new Vector2(0f, 1.2f); _frontWheels = new Body(); _frontWheels.CreateCircle(1.3163165f, 1f); _frontWheels3D = Body3DFactory.CreateBody3D( _frontWheelsModel, Demo.World3D.World2D, _frontWheels, frontPosition); _springFront = new WheelJoint(_chassis3D.Body2D, _frontWheels, frontPosition, axis, true) { MotorSpeed = 0f, MaxMotorTorque = 10f, MotorEnabled = false, Frequency = 4f, DampingRatio = 0.7f }; Demo.World3D.World2D.Add(_springFront); Demo.World3D.AddBody3D(_frontWheels3D); #endregion Přední náprava #region Zadní náprava Vector2 backPosition = new Vector2(-5.973385f, -2.9f) + defaultPositionShift; _backWheels = new Body(); _backWheels.CreateCircle(1.364622f, 1f); _backWheels3D = Body3DFactory.CreateBody3D( _backWheelsModel, Demo.World3D.World2D, _backWheels, backPosition); _springBack = new WheelJoint(_chassis3D.Body2D, _backWheels, backPosition, axis, true) { MotorSpeed = DEFAULT_MOTOR_SPEED, MaxMotorTorque = MAX_MOTOR_TORQUE, MotorEnabled = true, Frequency = 4f, DampingRatio = 0.7f }; Demo.World3D.World2D.Add(_springBack); Demo.World3D.AddBody3D(_backWheels3D); #endregion Zadní náprava #region Rampa _ramp3D = Body3DFactory.CreateBody3D( _rampModel, Demo.World3D.World2D, Demo.GraphicsDevice, new Vector2(0f, 5f)); Demo.World3D.AddBody3D(_ramp3D); #endregion Rampa }
public override void Construct() { Demo.Window.Title = "Path Demo"; Demo.Camera3D.Position = new Vector3(16.36052f, 7.006462f, 1.119595f); Demo.Camera3D.Target = new Vector3(15.43861f, 6.659885f, 0.9464932f); HiddenBody = Demo.World3D.World2D.CreateBody(Vector2.Zero); Path bridgePath = new Path(); bridgePath.Add(new Vector2(-17, 5)); bridgePath.Add(new Vector2(17, 5)); bridgePath.Closed = false; Model plankModel = Demo.Content.Load <Model>("Models/bridge"); PolygonShape shape = new PolygonShape(PolygonTools.CreateRectangle(0.125f, 0.5f), 20f); List <Body> bodies = PathManager.EvenlyDistributeShapesAlongPath(Demo.World3D.World2D, bridgePath, shape, BodyType.Dynamic, 34); JointFactory.CreateRevoluteJoint( Demo.World3D.World2D, HiddenBody, bodies[0], new Vector2(0f, 0.5f)); JointFactory.CreateRevoluteJoint( Demo.World3D.World2D, HiddenBody, bodies[bodies.Count - 1], new Vector2(0f, -0.5f)); PathManager.AttachBodiesWithRevoluteJoint( Demo.World3D.World2D, bodies, new Vector2(0f, 0.5f), new Vector2(0f, -0.5f), false, true); foreach (Body b in bodies) { Demo.World3D.AddBody3D(new Body3D(plankModel, b)); } Body body = new Body(); body.CreateCircle(1f, 1f); body.SetRestitution(0.7f); Body3D body3D = Body3DFactory.CreateBody3D( Demo.Content.Load <Model>("Models/Primitives/goldBall"), Demo.World3D.World2D, body, new Vector2(8f, 8f)); Demo.World3D.AddBody3D(body3D); body.ApplyAngularImpulse(5f); }