コード例 #1
0
 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
         );
 }
コード例 #2
0
        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();
        }
コード例 #3
0
 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;
                 }
             }
         }
 }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
ファイル: Ball.cs プロジェクト: Sumrix/Billiard
 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);
 }