using System; using System.Collections.Generic; using System.Linq; using System.Text; using Azimuth; using Annulus; using Annulus.SweptCollisionDetection; using Blacklight.Core; namespace Lodestone.TestBed.Demos { public class SquareBounce : Demo { Universe universe = new Universe(); List entities = new List(); public override void Initialize() { universe.Settings.Gravity = new Vector(0, -500); var platform = new SimplePolygon(new Vector[] { new Vector(-1000, 10), new Vector(-1000, -10), new Vector( 1000, -10), new Vector( 1000, 10), }); entities.Add(Entity.BuildFromPolygon(platform)); var box = new SimplePolygon(new Vector[] { new Vector(-10, -10), new Vector( 10, -10), new Vector( 10, 10), new Vector(-10, 10), }); var boxEntity = Entity.BuildFromPolygon(box); boxEntity.PhysicsBody.SetMotion(0, new Annulus.SweptCollisionDetection.Motion { InitialPosition = new Vector(0, 1000), }); boxEntity.PhysicsBody.Mass = 10; boxEntity.PhysicsBody.MomentOfInertiaRatio = 1; entities.Add(boxEntity); entities.ForEach(entity => { universe.AddBody(entity.PhysicsBody); }); } public override void Shutdown() { } public override void Step(Scalar timeStep) { universe.Step(timeStep); } public override Scene Draw() { var returnMe = new Scene(); var cel = new Cel(); returnMe.Cels.Add(cel); foreach (var entity in entities) { var transform = entity.PhysicsBody.TransformAt(0); var drawable = entity.DrawPrimitive; cel.AddEntity(new Blacklight.Core.Entity { drawable = drawable, modelToWorld = transform, }); } return returnMe; } public override string Description { get { return "This demo shows a diamond bouncing on a box."; } } } }