コード例 #1
0
ファイル: Rocket.cs プロジェクト: JKamue/SpaceFlight
        public void Draw(Graphics g, ProjectedPositionCalculator ppCalc, RectangleF screen)
        {
            if (Math.Abs(_angle.Degree - targetAngle.Degree) > 0.1)
            {
                var aCalc2 = new AngularCalculator((float)targetAngle.Degree * -1, Location);
                DrawRocketAtAngle(g, ppCalc, aCalc2, 100);
            }

            var aCalc = new AngularCalculator((float)_angle.Degree * -1, Location);

            DrawRocketAtAngle(g, ppCalc, aCalc);

            if (_engineRunning)
            {
                DrawFlames(g, ppCalc, aCalc);
            }
        }
コード例 #2
0
ファイル: Rocket.cs プロジェクト: JKamue/SpaceFlight
        private void DrawFlames(Graphics g, ProjectedPositionCalculator ppCalc, AngularCalculator aCalc)
        {
            foreach (var thrustArea in _rocketInf.ThrustAreas)
            {
                var width = (thrustArea.Stop.X - Math.Abs(thrustArea.Start.X));

                var points = new List <PointF>
                {
                    ppCalc.ProjectPoint(aCalc.Turn(new PointD((decimal)Location.X + (decimal)thrustArea.Start.X, (decimal)Location.Y + (decimal)thrustArea.Stop.Y))),
                    ppCalc.ProjectPoint(aCalc.Turn(new PointD((decimal)Location.X + (decimal)thrustArea.Stop.X, (decimal)Location.Y + (decimal)thrustArea.Stop.Y))),
                    ppCalc.ProjectPoint(aCalc.Turn(new PointD((decimal)Location.X + (decimal)width / 2, (decimal)Location.Y + (decimal)thrustArea.Stop.Y - Math.Abs((decimal)thrustArea.Stop.X - (decimal)thrustArea.Start.X) * (decimal)_thrustPercentage * (decimal)GetRandomNumber(3.5, 6))))
                };


                g.FillPolygon(new SolidBrush(Color.OrangeRed), points.ToArray());
            }
        }
コード例 #3
0
        private void DrawAllObjects(ProjectedPositionCalculator ppCalc)
        {
            foreach (var planet in _objects.Terrains)
            {
                planet.DrawSimple(_graphicsBuffer.Graphics, ppCalc);
            }

            var mainObject = _objects.MainObject;
            var loc        = mainObject.Location;
            var point1     = ppCalc.ProjectPoint(loc);
            var aCalc      = new AngularCalculator((float)mainObject._angle.Degree, point1);
            var point2     = aCalc.Turn(new PointF(point1.X, point1.Y - 10));
            var point3     = aCalc.Turn(new PointF(point1.X + 5, point1.Y + 5));
            var point4     = aCalc.Turn(new PointF(point1.X - 5, point1.Y + 5));
            var polygon    = new List <PointF> {
                point2, point3, point4
            };

            _graphicsBuffer.Graphics.FillPolygon(new SolidBrush(Color.LightGray), polygon.ToArray());
        }
コード例 #4
0
ファイル: RocketSprite.cs プロジェクト: JKamue/SpaceFlight
 private static PointF TurnAndProject(decimal x, decimal y, ProjectedPositionCalculator p, AngularCalculator aCalc)
 {
     return(p.ProjectPoint(aCalc.Turn(x, y)));
 }
コード例 #5
0
ファイル: RocketSprite.cs プロジェクト: JKamue/SpaceFlight
 private static PointF TurnAndProject(float x, float y, ProjectedPositionCalculator p, AngularCalculator aCalc)
 {
     return(p.ProjectPoint(aCalc.Turn(new PointF(x, y))));
 }
コード例 #6
0
ファイル: RocketSprite.cs プロジェクト: JKamue/SpaceFlight
        public RectangleF GetBounds(PointF pos, AngularCalculator aCalc)
        {
            var points = GetBoundPointsList(pos, aCalc);

            return(BoundsCalculator.CalculateBounds(points));
        }
コード例 #7
0
ファイル: RocketSprite.cs プロジェクト: JKamue/SpaceFlight
        public List <RocketSpritePiece> CalculatePolygons(PointF pos, ProjectedPositionCalculator ppCalc, AngularCalculator aCalc)
        {
            var spritePieces = new List <RocketSpritePiece>();

            foreach (var spritePiece in _spritePieces)
            {
                var calculatedSpritePieces = new List <PointF>();
                foreach (var spritePiecePoint in spritePiece.Points)
                {
                    var x = (decimal)pos.X + (decimal)spritePiecePoint.X;
                    var y = (decimal)pos.Y + (decimal)spritePiecePoint.Y;
                    calculatedSpritePieces.Add(TurnAndProject(x, y, ppCalc, aCalc));
                }
                spritePieces.Add(new RocketSpritePiece(calculatedSpritePieces, spritePiece.Brush));
            }

            return(spritePieces);
        }
コード例 #8
0
ファイル: Rocket.cs プロジェクト: JKamue/SpaceFlight
        private void DrawRocketAtAngle(Graphics g, ProjectedPositionCalculator ppCalc, AngularCalculator aCalc,
                                       int alpha = 255)
        {
            var spritePieces2 =
                _sprite.CalculatePolygons(Location, ppCalc, aCalc);

            foreach (var piece in spritePieces2)
            {
                var brush = new SolidBrush(Color.FromArgb(alpha, piece.Brush.Color.R, piece.Brush.Color.G, piece.Brush.Color.B));
                g.FillPolygon(brush, piece.Points.ToArray());
            }
        }