public Blow(Game game) : base(game) { BlackEngine.Physics.Objects.Circle circle = (BlackEngine.Physics.Objects.Circle)game.ball.physicalObject; trackBall = new BlackEngine.Physics.Objects.Circle( circle.r, circle.centerOfMass, circle.m, circle.restorationFactor ); }
private void AnT_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { double x = game.width * (e.X) / game.AnT.Width, y = game.height * (game.AnT.Height - e.Y) / game.AnT.Height; BlackEngine.Physics.Objects.Circle circle = (BlackEngine.Physics.Objects.Circle)game.ball.physicalObject; Vector2d v = circle.centerOfMass - new Point2d(x, y), v0 = v / v.Abs(); circle.forwardSpeed = v0 * 7; waitHandle.Set(); }
void Collision_BallBroked(BlackEngine.Physics.Objects.Circle circle) { lock (((System.Collections.ICollection)oblectLayerCollection).SyncRoot) foreach (var list in oblectLayerCollection) { foreach (var o in list.Value) { if (o.physicalObject == circle) { list.Value.Remove(o); world.Delete(circle); ObjectBroked(); return; } } } }
private void AnT_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { double x = game.width * (e.X) / game.AnT.Width, y = game.height * (game.AnT.Height - e.Y) / game.AnT.Height; BlackEngine.Physics.Objects.Circle circle = (BlackEngine.Physics.Objects.Circle)game.ball.physicalObject; Vector2d v = circle.centerOfMass - new Point2d(x, y), v0 = v / v.Abs(); trackBall.forwardSpeed = v0 * 7; List <Point2d> way = CalcWay(circle); game.ballWay.way = way; game.cue.m = new Point2d(x, y); }
private List <Point2d> CalcWay(BlackEngine.Physics.Objects.Circle circle) { List <Point2d> way = new List <Point2d>(); double dt = 0.02; trackBall.centerOfMass = circle.centerOfMass; trackBall.UpdateObject(dt); lock (((System.Collections.ICollection)game.field.world.dList).SyncRoot) { for (int i = 0; i < 40; i++) { foreach (var b in game.field.world.dList) { if (b != circle) { BlackEngine.Physics.Collision.Solve(b, trackBall); } } lock (((System.Collections.ICollection)game.field.world.sList).SyncRoot) foreach (var s in game.field.world.sList) { BlackEngine.Physics.Collision.Solve(trackBall, s); } trackBall.UpdateObject(dt); way.Add(trackBall.centerOfMass); } foreach (var b in game.field.world.dList) { b.forwardSpeed = new Vector2d(); } } return(way); }
public Ball(double r, Point2d centerOfMass, double m, Vector2d forwardSpeed = new Vector2d()) { circle = new Physics.Objects.Circle(r, centerOfMass, m, 1, forwardSpeed); graphic.SetColor(0.9f, 0.9f, 0.9f); }