public static void WriteChat(D2D.WindowRenderTarget renderTarget, Starbase starbase, SharpDX.DirectWrite.Factory textFactory, TextFormat textFormat, float height, D2D.Brush brush)
        {
            renderTarget.Clear(new SharpDX.Mathematics.Interop.RawColor4(0f, 0f, 0f, 0f));

            lock (starbase.SyncMessages)
            {
                int number     = starbase.Messages.Count;
                int offset     = 0;
                int showNumber = number - 10 < 0 ? 0 : number - 10;
                int maxNumber  = number - showNumber < 10 ? number - showNumber : 10;

                if (number > 0)
                {
                    foreach (string message in starbase.Messages.GetRange(showNumber, maxNumber))
                    {
                        using (SharpDX.DirectWrite.TextLayout layout = new SharpDX.DirectWrite.TextLayout(textFactory, message, textFormat, 500, 500))
                            renderTarget.DrawTextLayout(new SharpDX.Mathematics.Interop.RawVector2()
                            {
                                X = 10, Y = height - 110 + offset
                            }, layout, brush, D2D.DrawTextOptions.Clip);

                        offset += 10;
                    }
                }
            }
        }
Beispiel #2
0
        private void MainWindow_Paint(object sender, PaintEventArgs e)
        {
            Vector position;
            Vector leftMargin;
            Vector rightMargin;

            if (second != lastSecond)
            {
                totalFps   = fps;
                lastSecond = second;
                fps        = 0;
            }

            if (initialize.Enabled)
            {
                return;
            }

            renderTarget.BeginDraw();

            renderTarget.Clear(new SharpDX.Mathematics.Interop.RawColor4(0, 0, 0, 0));

            UIMessage.WriteChat(renderTarget, starbase, textFactory, textFormat, ClientRectangle.Height, brushes.White);

            if (starbase.BaseMapHolder.Count == 0 || starbase.SelectedShip.CurrentMap == null)
            {
                renderTarget.EndDraw();
                return;
            }

            if (starbase.BaseMapHolder.Count > 0 && starbase.StarShipHolder.Count > 0 && firstCall == 0)
            {
                leftMargin  = starbase.SelectedShip.CurrentMap[starbase.SelectedShip.Name].Position - new Vector(width / 2, height / 2);
                rightMargin = leftMargin + new Vector(width, height);
                coordinates = new Coordinates(leftMargin, rightMargin);

                firstCall = 1;
            }

            coordinates.CheckPosition(width, height);

            int playerCount = 0;

            using (SharpDX.DirectWrite.TextLayout layout = new SharpDX.DirectWrite.TextLayout(textFactory, "Fps: " + totalFps.ToString(), textFormat, 500, 500))
                renderTarget.DrawTextLayout(new SharpDX.Mathematics.Interop.RawVector2()
                {
                    X = 5, Y = 70
                }, layout, brushes.White, D2D.DrawTextOptions.Clip);


            foreach (Player player in starbase.Connector.Player.UniverseGroup.Players)
            {
                using (Brush brush = new SolidBrush(player.Team.Color))
                {
                    using (SharpDX.DirectWrite.TextLayout layout = new SharpDX.DirectWrite.TextLayout(textFactory, "Name: " + player.Name, textFormat, 500, 500))
                        renderTarget.DrawTextLayout(new SharpDX.Mathematics.Interop.RawVector2()
                        {
                            X = 5, Y = 95 + playerCount * 40
                        }, layout, brushes.White, D2D.DrawTextOptions.Clip);
                    using (SharpDX.DirectWrite.TextLayout layout = new SharpDX.DirectWrite.TextLayout(textFactory, "Ping: " + player.Ping.ToString(), textFormat, 500, 500))
                        renderTarget.DrawTextLayout(new SharpDX.Mathematics.Interop.RawVector2()
                        {
                            X = 5, Y = 105 + playerCount * 40
                        }, layout, brushes.White, D2D.DrawTextOptions.Clip);
                    using (SharpDX.DirectWrite.TextLayout layout = new SharpDX.DirectWrite.TextLayout(textFactory, "ACT: " + player.AverageCommitTime, textFormat, 500, 500))
                        renderTarget.DrawTextLayout(new SharpDX.Mathematics.Interop.RawVector2()
                        {
                            X = 5, Y = 115 + playerCount * 40
                        }, layout, brushes.White, D2D.DrawTextOptions.Clip);
                }

                playerCount++;
            }

            foreach (CosmicUnit unit in starbase.SelectedShip.CurrentMap.Query(-5000, -5000, 5000, 5000))
            {
                position = coordinates.Translate(unit.Position);

                if (unit.Type == CosmicUnitKind.Ship || unit.Type == CosmicUnitKind.Sun || unit.Type == CosmicUnitKind.Unknown)
                {
                    using (SharpDX.DirectWrite.TextLayout layout = new SharpDX.DirectWrite.TextLayout(textFactory, unit.Name, textFormat, 500, 500))
                        renderTarget.DrawTextLayout(new SharpDX.Mathematics.Interop.RawVector2()
                        {
                            X = position.X - layout.Metrics.Width / 2f, Y = position.Y - layout.Metrics.Height / 2f
                        }, layout, brushes.White, D2D.DrawTextOptions.Clip);
                }

                if (position > 0)
                {
                    switch (unit.Type)
                    {
                    case CosmicUnitKind.Sun:
                        Vector vector = coordinates.Translate(unit.Position, unit.Radius);
                        float  radius = coordinates.TranslateRadius(unit.Radius);
                        UICircle.DrawCircle(renderTarget, radius, new SharpDX.Mathematics.Interop.RawVector2(vector.X, vector.Y), brushes.Yellow);

                        foreach (CosmicCorona corona in ((CosmicSun)unit).Coronas)
                        {
                            float coronaRadius = (float)(corona.Radius);
                            vector = coordinates.Translate(unit.Position, coronaRadius);
                            radius = coordinates.TranslateRadius(coronaRadius);
                            UICircle.DrawCircle(renderTarget, radius, new SharpDX.Mathematics.Interop.RawVector2(vector.X, vector.Y), brushes.Yellow);
                        }
                        break;

                    case CosmicUnitKind.Planet:
                        vector = coordinates.Translate(unit.Position, unit.Radius);
                        radius = coordinates.TranslateRadius(unit.Radius);
                        UICircle.DrawCircle(renderTarget, radius, new SharpDX.Mathematics.Interop.RawVector2(vector.X, vector.Y), brushes.Green);
                        break;

                    case CosmicUnitKind.Meteroid:
                        if (!((CosmicMeteroid)unit).Still && ((CosmicMeteroid)unit).Timeout > 0)
                        {
                            ((CosmicMeteroid)unit).Timeout--;
                            vector = coordinates.Translate(unit.Position, unit.Radius);
                            radius = coordinates.TranslateRadius(unit.Radius);
                            UICircle.DrawCircle(renderTarget, radius, new SharpDX.Mathematics.Interop.RawVector2(vector.X, vector.Y), brushes.DarkRed);
                        }
                        else
                        {
                            vector = coordinates.Translate(unit.Position, unit.Radius);
                            radius = coordinates.TranslateRadius(unit.Radius);
                            UICircle.DrawCircle(renderTarget, radius, new SharpDX.Mathematics.Interop.RawVector2(vector.X, vector.Y), brushes.DarkRed);
                        }
                        break;

                    case CosmicUnitKind.MissionTarget:
                        vector = coordinates.Translate(unit.Position, unit.Radius);
                        radius = coordinates.TranslateRadius(unit.Radius);

                        float dominationSize = coordinates.TranslateRadius(((CosmicMissionTarget)unit).DominationRadius);


                        UICircle.DrawCircle(renderTarget, radius, new SharpDX.Mathematics.Interop.RawVector2(vector.X, vector.Y), brushes.Gray);
                        renderTarget.DrawLine(new SharpDX.Mathematics.Interop.RawVector2(coordinates.Translate(unit.Position).X, coordinates.Translate(unit.Position).Y), new SharpDX.Mathematics.Interop.RawVector2(coordinates.Translate(unit.Position + ((CosmicMissionTarget)unit).Direction * 100).X, coordinates.Translate(unit.Position + ((CosmicMissionTarget)unit).Direction * 100).Y), brushes.GetCustomColorBrush(((CosmicMissionTarget)unit).Color, renderTarget));

                        using (SharpDX.DirectWrite.TextLayout layout = new SharpDX.DirectWrite.TextLayout(textFactory, ((CosmicMissionTarget)unit).Number.ToString(), textFormat, 500, 500))
                            renderTarget.DrawTextLayout(new SharpDX.Mathematics.Interop.RawVector2()
                            {
                                X = coordinates.Translate(unit.Position).X + 5f, Y = coordinates.Translate(unit.Position).Y - 5f
                            }, layout, brushes.GetCustomColorBrush(((CosmicMissionTarget)unit).Color, renderTarget), D2D.DrawTextOptions.Clip);

                        using (SharpDX.DirectWrite.TextLayout layout = new SharpDX.DirectWrite.TextLayout(textFactory, ((CosmicMissionTarget)unit).DominationTicks.ToString(), textFormat, 500, 500))
                            renderTarget.DrawTextLayout(new SharpDX.Mathematics.Interop.RawVector2()
                            {
                                X = coordinates.Translate(unit.Position).X + 10f, Y = coordinates.Translate(unit.Position).Y - 10f
                            }, layout, brushes.GetCustomColorBrush(((CosmicMissionTarget)unit).Color, renderTarget), D2D.DrawTextOptions.Clip);

                        break;

                    case CosmicUnitKind.Ship:
                        if (((CosmicShip)unit).Timeout > 0)
                        {
                            ((CosmicShip)unit).Timeout--;

                            vector = coordinates.Translate(unit.Position, unit.Radius);
                            radius = coordinates.TranslateRadius(unit.Radius);

                            UICircle.DrawCircle(renderTarget, radius, new SharpDX.Mathematics.Interop.RawVector2(vector.X, vector.Y), brushes.GetCustomColorBrush(((CosmicShip)unit).Team.Color, renderTarget));

                            Vector bar1 = position - new Vector(radius * 2 / 2, 0) - new Vector(0, radius * 2 / 2 + 15f);
                            Vector bar2 = position - new Vector(radius * 2 / 2, 0) - new Vector(0, radius * 2 / 2 + 22f);

                            renderTarget.FillRectangle(new SharpDX.Mathematics.Interop.RawRectangleF(bar1.X, bar1.Y, bar1.X + radius * 2, bar1.Y + 5), brushes.Gray);
                            renderTarget.FillRectangle(new SharpDX.Mathematics.Interop.RawRectangleF(bar1.X, bar1.Y, bar1.X + ((CosmicShip)unit).Hull / ((CosmicShip)unit).HullMax * radius * 2, bar1.Y + 5), brushes.Red);

                            renderTarget.FillRectangle(new SharpDX.Mathematics.Interop.RawRectangleF(bar2.X, bar2.Y, bar2.X + radius * 2, bar2.Y + 5), brushes.Gray);

                            if (((CosmicShip)unit).ShieldMax != 0)
                            {
                                renderTarget.FillRectangle(new SharpDX.Mathematics.Interop.RawRectangleF(bar2.X, bar2.Y, bar2.X + ((CosmicShip)unit).Shield / ((CosmicShip)unit).ShieldMax * radius * 2, bar2.Y + 5), brushes.Blue);
                            }
                        }
                        break;

                    case CosmicUnitKind.StarShip:
                        if (((CosmicStarship)unit).Timeout > 0)
                        {
                            ((CosmicStarship)unit).Timeout--;

                            vector = coordinates.Translate(unit.Position, unit.Radius);
                            radius = coordinates.TranslateRadius(unit.Radius);
                            UICircle.DrawCircle(renderTarget, radius, new SharpDX.Mathematics.Interop.RawVector2(vector.X, vector.Y), brushes.GetCustomColorBrush(((CosmicStarship)unit).Team.Color, renderTarget));


                            if (starbase.SelectedShip.Name == ((CosmicStarship)unit).Name)
                            {
                                renderTarget.FillRectangle(new SharpDX.Mathematics.Interop.RawRectangleF(5, 5, 35, 15), brushes.Gray);
                                renderTarget.FillRectangle(new SharpDX.Mathematics.Interop.RawRectangleF(5, 5, ((CosmicStarship)unit).Hull / ((CosmicStarship)unit).HullMax * 35, 15), brushes.Red);

                                renderTarget.FillRectangle(new SharpDX.Mathematics.Interop.RawRectangleF(5, 20, 35, 30), brushes.Gray);
                                renderTarget.FillRectangle(new SharpDX.Mathematics.Interop.RawRectangleF(5, 20, ((CosmicStarship)unit).Energy / ((CosmicStarship)unit).EnergyMax * 35, 30), brushes.Yellow);

                                UICircle.DrawCircle(renderTarget, radius, new SharpDX.Mathematics.Interop.RawVector2(vector.X, vector.Y), brushes.GetCustomColorBrush(((CosmicStarship)unit).Team.Color, renderTarget), 3);


                                if (((CosmicStarship)unit).WeaponProductionStatus < 1)
                                {
                                    renderTarget.FillRectangle(new SharpDX.Mathematics.Interop.RawRectangleF(5, 45, 10, 60), brushes.Yellow);
                                }
                                else
                                {
                                    renderTarget.FillRectangle(new SharpDX.Mathematics.Interop.RawRectangleF(5, 45, 10, 60), brushes.Green);
                                }

                                Vector bar1 = position - new Vector(radius * 2 / 2, 0) - new Vector(0, radius * 2 / 2 + 15f);
                                Vector bar2 = position - new Vector(radius * 2 / 2, 0) - new Vector(0, radius * 2 / 2 + 22f);

                                renderTarget.FillRectangle(new SharpDX.Mathematics.Interop.RawRectangleF(bar1.X, bar1.Y, bar1.X + radius * 2, bar1.Y + 5), brushes.Gray);
                                renderTarget.FillRectangle(new SharpDX.Mathematics.Interop.RawRectangleF(bar1.X, bar1.Y, bar1.X + ((CosmicStarship)unit).Hull / ((CosmicStarship)unit).HullMax * radius * 2, bar1.Y + 5), brushes.Red);

                                renderTarget.FillRectangle(new SharpDX.Mathematics.Interop.RawRectangleF(bar2.X, bar2.Y, bar2.X + radius * 2, bar2.Y + 5), brushes.Gray);

                                if (((CosmicStarship)unit).ShieldMax != 0)
                                {
                                    renderTarget.FillRectangle(new SharpDX.Mathematics.Interop.RawRectangleF(bar2.X, bar2.Y, bar2.X + ((CosmicStarship)unit).Shield / ((CosmicStarship)unit).ShieldMax * radius * 2, bar2.Y + 5), brushes.Blue);
                                }

                                Vector direction = unit.MoveVector / coordinates.Magnify;

                                direction.Length = radius * 2;
                                Vector constructVector = (direction).RotatedBy(90f);
                                constructVector.Length = radius;

                                renderTarget.DrawLine(new SharpDX.Mathematics.Interop.RawVector2((position + constructVector).X, (position + constructVector).Y), new SharpDX.Mathematics.Interop.RawVector2((position + direction).X, (position + direction).Y), brushes.GetCustomColorBrush(((CosmicStarship)unit).Team.Color, renderTarget));
                                renderTarget.DrawLine(new SharpDX.Mathematics.Interop.RawVector2((position - constructVector).X, (position - constructVector).Y), new SharpDX.Mathematics.Interop.RawVector2((position + direction).X, (position + direction).Y), brushes.GetCustomColorBrush(((CosmicStarship)unit).Team.Color, renderTarget));
                            }
                        }
                        break;

                    case CosmicUnitKind.Shot:
                        if (((CosmicShot)unit).Timeout > 0)
                        {
                            ((CosmicShot)unit).Timeout--;

                            vector = coordinates.Translate(unit.Position, unit.Radius);
                            radius = coordinates.TranslateRadius(unit.Radius);
                            UICircle.DrawCircle(renderTarget, radius, new SharpDX.Mathematics.Interop.RawVector2(vector.X, vector.Y), brushes.Gray);
                        }
                        break;

                    case CosmicUnitKind.Explosion:
                        if (((CosmicExplosion)unit).Timeout > 0)
                        {
                            ((CosmicExplosion)unit).Timeout--;

                            vector = coordinates.Translate(unit.Position, unit.Radius);
                            radius = coordinates.TranslateRadius(unit.Radius);
                            UICircle.DrawCircle(renderTarget, radius, new SharpDX.Mathematics.Interop.RawVector2(vector.X, vector.Y), brushes.Gray);
                        }
                        break;

                    default:
                        vector = coordinates.Translate(unit.Position, unit.Radius);
                        radius = coordinates.TranslateRadius(unit.Radius);
                        UICircle.DrawCircle(renderTarget, radius, new SharpDX.Mathematics.Interop.RawVector2(vector.X, vector.Y), brushes.Gray);
                        break;
                    }
                }
            }

            renderTarget.EndDraw();
        }