private static void DrawIcon(
            MyHudMarkerRender renderer,
            string centerIconSprite,
            Vector2 screenPosition,
            Color markerColor,
            float sizeScale = 1f)
        {
            Vector2 vector2 = new Vector2(8f, 8f) * sizeScale;

            renderer.AddTexturedQuad(centerIconSprite, screenPosition, -Vector2.UnitY, markerColor, vector2.X, vector2.Y);
        }
        public MyGuiScreenHudSpace()
            : base()
        {
            RecreateControls(true);

            m_markerRender              = new MyHudMarkerRender(this);
            m_oreHudMarkerStyle         = m_markerRender.AllocateMarkerStyle(MyFontEnum.White, MyHudTexturesEnum.DirectionIndicator, MyHudTexturesEnum.Target_neutral, Color.White);
            m_gpsHudMarkerStyle         = m_markerRender.AllocateMarkerStyle(MyFontEnum.DarkBlue, MyHudTexturesEnum.DirectionIndicator, MyHudTexturesEnum.Target_me, MyHudConstants.GPS_COLOR);
            m_buttonPanelHudMarkerStyle = m_markerRender.AllocateMarkerStyle(MyFontEnum.DarkBlue, MyHudTexturesEnum.DirectionIndicator, MyHudTexturesEnum.Target_me, MyHudConstants.GPS_COLOR);

            m_tmpHudEntityParams = new MyHudEntityParams()
            {
                Text       = new StringBuilder(),
                FlagsEnum  = MyHudIndicatorFlagsEnum.SHOW_ALL,
                IconColor  = MyHudConstants.GPS_COLOR,
                OffsetText = true
            };
        }
        private static void DrawIcon(
            MyHudMarkerRender renderer,
            EnergySignatureType poiType,
            MyRelationsBetweenPlayerAndBlock relationship,
            Vector2 screenPosition,
            Color markerColor,
            float sizeScale = 1f)
        {
            string  empty     = string.Empty;
            Vector2 vector2_1 = new Vector2(12f, 12f);
            string  texture;

            switch (poiType)
            {
            case EnergySignatureType.Single:
                string iconForRelationship = EnergySignature.GetIconForRelationship(relationship);
                EnergySignature.DrawIcon(renderer, iconForRelationship, screenPosition, markerColor, sizeScale);
                return;

            case EnergySignatureType.Group:
                return;

            default:
                return;
            }

            if (!string.IsNullOrWhiteSpace(empty))
            {
                Vector2 vector2_2 = vector2_1 * sizeScale;
                renderer.AddTexturedQuad(empty, screenPosition, -Vector2.UnitY, markerColor, vector2_2.X, vector2_2.Y);
            }
            else
            {
                float num = 0.0053336f * sizeScale;
                renderer.AddTexturedQuad(texture, screenPosition, -Vector2.UnitY, markerColor, num, num);
            }
        }
        public void Draw(MyHudMarkerRender renderer, float alphaMultiplierMarker = 1f, float alphaMultiplierText = 1f, float scale = 1f, bool drawBox = true)
        {
            Vector2 projectedPoint2D = Vector2.Zero;
            bool    isBehind         = false;

            if (!EnergySignature.TryComputeScreenPoint(this.WorldPosition, out projectedPoint2D, out isBehind))
            {
                return;
            }



            Vector2 vector2_1   = new Vector2(screenWidth, screenHeight);
            Vector2 hudSize     = new Vector2(1f, screenHeight / screenWidth);
            Vector2 hudSizeHalf = hudSize / 2f;
            float   num1        = vector2_1.Y / 1080f;
            Vector2 vector2_2   = projectedPoint2D * hudSize;
            Color   white1      = Color.White;
            Color   fontColor   = Color.White;
            string  font        = "White";

            this.GetPOIColorAndFontInformation(out white1, out fontColor, out font);
            Vector2  upVector = vector2_2 - hudSizeHalf;
            Vector3D vector3D = Vector3D.Transform(this.WorldPosition, MyAPIGateway.Session.Camera.ViewMatrix);
            float    num2     = 0.04f;

            if ((double)vector2_2.X < (double)num2 || (double)vector2_2.X > (double)hudSize.X - (double)num2 || ((double)vector2_2.Y < (double)num2 || (double)vector2_2.Y > (double)hudSize.Y - (double)num2) || vector3D.Z > 0.0)
            {
                Vector2 vector2_3 = Vector2.Normalize(upVector);
                Vector2 position  = hudSizeHalf + hudSizeHalf * vector2_3 * 0.77f;
                upVector = position - hudSizeHalf;
                if ((double)upVector.LengthSquared() > 9.99999943962493E-11)
                {
                    upVector.Normalize();
                }
                else
                {
                    upVector = new Vector2(1f, 0.0f);
                }
                float num3 = 0.0053336f / num1 / num1;
                renderer.AddTexturedQuad("HudAtlas0.dds_DirectionIndicator", position, upVector, white1, num3, num3);
                vector2_2 = position - upVector * 0.006667f * 2f;
            }
            else
            {
                float num3 = scale * 0.006667f / num1 / num1;
                if (drawBox)
                {
                    renderer.AddTexturedQuad("HudAtlas0.dds_Target_neutral", vector2_2, -Vector2.UnitY, white1, num3, num3);
                }
            }
            float num4 = 0.03f;
            float num5 = 0.07f;
            float num6 = 0.15f;
            float num7 = upVector.Length();
            float val;
            float num8;
            int   num9;

            if ((double)num7 <= (double)num4)
            {
                val  = 1f;
                num8 = 1f;
                num9 = 0;
            }
            else if ((double)num7 > (double)num4 && (double)num7 < (double)num5)
            {
                float num3  = num6 - num4;
                float num10 = (float)(1.0 - ((double)num7 - (double)num4) / (double)num3);
                val = num10 * num10;
                float num11 = num5 - num4;
                float num12 = (float)(1.0 - ((double)num7 - (double)num4) / (double)num11);
                num8 = num12 * num12;
                num9 = 1;
            }
            else if ((double)num7 >= (double)num5 && (double)num7 < (double)num6)
            {
                float num3  = num6 - num4;
                float num10 = (float)(1.0 - ((double)num7 - (double)num4) / (double)num3);
                val = num10 * num10;
                float num11 = num6 - num5;
                float num12 = (float)(1.0 - ((double)num7 - (double)num5) / (double)num11);
                num8 = num12 * num12;
                num9 = 2;
            }
            else
            {
                val  = 0.0f;
                num8 = 0.0f;
                num9 = 2;
            }
            float num13 = MathHelper.Clamp((float)(((double)num7 - 0.200000002980232) / 0.5), 0.0f, 1f);
            float num14 = MyMath.Clamp(val, 0.0f, 1f);
            //if (MyHudMarkerRender.m_disableFading || MyHudMarkerRender.SignalDisplayMode == MyHudMarkerRender.SignalMode.FullDisplay || this.AlwaysVisible)
            {
                num14 = 1f;
                num8  = 1f;
                num13 = 1f;
                num9  = 0;
            }

            Vector2 vector2_4 = new Vector2(0.0f, (float)((double)scale * (double)num1 * 24.0) / (float)screenWidth);

            //if ((MyHudMarkerRender.SignalDisplayMode != MyHudMarkerRender.SignalMode.NoNames || this.POIType == EnergySignatureType.ButtonMarker || (MyHudMarkerRender.m_disableFading || this.AlwaysVisible)) && ((double)num14 > 1.40129846432482E-45 && this.Text.Length > 0))
            if ((double)num14 > 1.40129846432482E-45 && this.Text.Length > 0)
            {
                MyHudText myHudText = renderer.m_hudScreen.AllocateText();
                if (myHudText != null)
                {
                    fontColor.A = (byte)((double)byte.MaxValue * (double)alphaMultiplierText * (double)num14);
                    myHudText.Start(font, vector2_2 - vector2_4, fontColor, 0.7f / num1, MyGuiDrawAlignEnum.HORISONTAL_CENTER_AND_VERTICAL_CENTER);
                    myHudText.Append(this.Text);
                }
            }

            if (this.POIType != EnergySignatureType.Group)
            {
                byte a = white1.A;
                white1.A = (byte)((double)byte.MaxValue * (double)alphaMultiplierMarker * (double)num13);
                EnergySignature.DrawIcon(renderer, this.POIType, this.Relationship, vector2_2, white1, scale);
                white1.A = a;
                MyHudText myHudText1 = renderer.m_hudScreen.AllocateText();
                if (myHudText1 != null)
                {
                    StringBuilder stringBuilder = new StringBuilder();
                    MyHudMarkerRender.AppendDistance(stringBuilder, this.Distance);
                    fontColor.A = (byte)((double)alphaMultiplierText * (double)byte.MaxValue);
                    myHudText1.Start(font, vector2_2 + vector2_4 * (float)(0.699999988079071 + 0.300000011920929 * (double)num14), fontColor, (float)(0.5 + 0.200000002980232 * (double)num14) / num1, MyGuiDrawAlignEnum.HORISONTAL_CENTER_AND_VERTICAL_CENTER);
                    myHudText1.Append(stringBuilder);
                }
                if (string.IsNullOrEmpty(this.ContainerRemainingTime))
                {
                    return;
                }

                MyHudText myHudText2 = renderer.m_hudScreen.AllocateText();
                myHudText2.Start(font, vector2_2 + vector2_4 * (float)(1.60000002384186 + 0.300000011920929 * (double)num14), fontColor, (float)(0.5 + 0.200000002980232 * (double)num14) / num1, MyGuiDrawAlignEnum.HORISONTAL_CENTER_AND_VERTICAL_CENTER);
                myHudText2.Append(this.ContainerRemainingTime);
            }
            else
            {
                Dictionary <MyRelationsBetweenPlayerAndBlock, List <EnergySignature> > significantGroupPoIs = this.GetSignificantGroupPOIs();
                Vector2[] vector2Array1 = new Vector2[5]
                {
                    new Vector2(-6f, -4f),
                    new Vector2(6f, -4f),
                    new Vector2(-6f, 4f),
                    new Vector2(6f, 4f),
                    new Vector2(0.0f, 12f)
                };
                Vector2[] vector2Array2 = new Vector2[5]
                {
                    new Vector2(16f, -4f),
                    new Vector2(16f, 4f),
                    new Vector2(16f, 12f),
                    new Vector2(16f, 20f),
                    new Vector2(16f, 28f)
                };
                for (int index = 0; index < vector2Array1.Length; ++index)
                {
                    float num3 = num9 < 2 ? 1f : num8;
                    float y1   = vector2Array1[index].Y;
                    vector2Array1[index].X = (vector2Array1[index].X + 22f * num3) / (float)screenWidth;
                    vector2Array1[index].Y = y1 / 1080f / num1;

                    //can't support triplehead
                    //if (MyVideoSettingsManager.IsTripleHead())
                    //    vector2Array1[index].X /= 0.33f;
                    if ((double)vector2Array1[index].Y <= 1.40129846432482E-45)
                    {
                        vector2Array1[index].Y = y1 / 1080f;
                    }
                    float y2 = vector2Array2[index].Y;
                    vector2Array2[index].X = vector2Array2[index].X / (float)screenWidth / num1;
                    vector2Array2[index].Y = y2 / 1080f / num1;
                    //can't support triplehead
                    //if (MyVideoSettingsManager.IsTripleHead())
                    //    vector2Array2[index].X /= 0.33f;
                    if ((double)vector2Array2[index].Y <= 1.40129846432482E-45)
                    {
                        vector2Array2[index].Y = y2 / 1080f;
                    }
                }
                int index1 = 0;
                if (significantGroupPoIs.Count > 1)
                {
                    MyRelationsBetweenPlayerAndBlock[] betweenPlayerAndBlockArray = new MyRelationsBetweenPlayerAndBlock[4]
                    {
                        MyRelationsBetweenPlayerAndBlock.Owner,
                        MyRelationsBetweenPlayerAndBlock.FactionShare,
                        MyRelationsBetweenPlayerAndBlock.Neutral,
                        MyRelationsBetweenPlayerAndBlock.Enemies
                    };
                    foreach (MyRelationsBetweenPlayerAndBlock index2 in betweenPlayerAndBlockArray)
                    {
                        if (significantGroupPoIs.ContainsKey(index2))
                        {
                            List <EnergySignature> pointOfInterestList = significantGroupPoIs[index2];
                            if (pointOfInterestList.Count != 0)
                            {
                                EnergySignature poi = pointOfInterestList[0];
                                if (poi != null)
                                {
                                    this.GetColorAndFontForRelationship(index2, out white1, out fontColor, out font);
                                    float amount = num9 == 0 ? 1f : num8;
                                    if (num9 >= 2)
                                    {
                                        amount = 0.0f;
                                    }
                                    Vector2 vector2_3           = Vector2.Lerp(vector2Array1[index1], vector2Array2[index1], amount);
                                    string  iconForRelationship = EnergySignature.GetIconForRelationship(index2);
                                    white1.A = (byte)((double)alphaMultiplierMarker * (double)white1.A);
                                    EnergySignature.DrawIcon(renderer, iconForRelationship, vector2_2 + vector2_3, white1, 0.75f / num1);
                                    if (this.IsPoiAtHighAlert(poi))
                                    {
                                        Color white2 = Color.White;
                                        white2.A = (byte)((double)alphaMultiplierMarker * (double)byte.MaxValue);
                                        EnergySignature.DrawIcon(renderer, "Textures\\HUD\\marker_alert.dds", vector2_2 + vector2_3, white2, 0.75f / num1);
                                    }
                                    //if ((MyHudMarkerRender.SignalDisplayMode != MyHudMarkerRender.SignalMode.NoNames || MyHudMarkerRender.m_disableFading || this.AlwaysVisible) && poi.Text.Length > 0)
                                    if (poi.Text.Length > 0)
                                    {
                                        MyHudText myHudText = renderer.m_hudScreen.AllocateText();
                                        if (myHudText != null)
                                        {
                                            float num3 = 1f;
                                            if (num9 == 1)
                                            {
                                                num3 = num8;
                                            }
                                            else if (num9 > 1)
                                            {
                                                num3 = 0.0f;
                                            }
                                            fontColor.A = (byte)((double)byte.MaxValue * (double)alphaMultiplierText * (double)num3);
                                            Vector2 vector2_5 = new Vector2(8f / (float)screenWidth, 0.0f);
                                            vector2_5.X /= num1;
                                            myHudText.Start(font, vector2_2 + vector2_3 + vector2_5, fontColor, 0.55f / num1, MyGuiDrawAlignEnum.HORISONTAL_LEFT_AND_VERTICAL_CENTER);
                                            myHudText.Append(poi.Text);
                                        }
                                    }
                                    ++index1;
                                }
                            }
                        }
                    }
                }
                else
                {
                    using (Dictionary <MyRelationsBetweenPlayerAndBlock, List <EnergySignature> > .Enumerator enumerator = significantGroupPoIs.GetEnumerator())
                    {
label_86:
                        while (enumerator.MoveNext())
                        {
                            KeyValuePair <MyRelationsBetweenPlayerAndBlock, List <EnergySignature> > current = enumerator.Current;
                            MyRelationsBetweenPlayerAndBlock key = current.Key;
                            if (significantGroupPoIs.ContainsKey(key))
                            {
                                List <EnergySignature> pointOfInterestList = current.Value;
                                int index2 = 0;
                                while (true)
                                {
                                    if (index2 < 4 && index2 < pointOfInterestList.Count)
                                    {
                                        EnergySignature poi = pointOfInterestList[index2];
                                        if (poi != null)
                                        {
                                            this.GetColorAndFontForRelationship(key, out white1, out fontColor, out font);
                                            float amount = num9 == 0 ? 1f : num8;
                                            if (num9 >= 2)
                                            {
                                                amount = 0.0f;
                                            }
                                            Vector2 vector2_3        = Vector2.Lerp(vector2Array1[index1], vector2Array2[index1], amount);
                                            string  centerIconSprite = EnergySignature.GetIconForRelationship(key);
                                            white1.A = (byte)((double)alphaMultiplierMarker * (double)white1.A);
                                            EnergySignature.DrawIcon(renderer, centerIconSprite, vector2_2 + vector2_3, white1, 0.75f / num1);
                                            if (this.ShouldDrawHighAlertMark(poi))
                                            {
                                                Color white2 = Color.White;
                                                white2.A = (byte)((double)alphaMultiplierMarker * (double)byte.MaxValue);
                                                EnergySignature.DrawIcon(renderer, "Textures\\HUD\\marker_alert.dds", vector2_2 + vector2_3, white2, 0.75f / num1);
                                            }

                                            //if ((MyHudMarkerRender.SignalDisplayMode != MyHudMarkerRender.SignalMode.NoNames || MyHudMarkerRender.m_disableFading || this.AlwaysVisible) && poi.Text.Length > 0)
                                            if (poi.Text.Length > 0)
                                            {
                                                MyHudText myHudText = renderer.m_hudScreen.AllocateText();
                                                if (myHudText != null)
                                                {
                                                    float num3 = 1f;
                                                    if (num9 == 1)
                                                    {
                                                        num3 = num8;
                                                    }
                                                    else if (num9 > 1)
                                                    {
                                                        num3 = 0.0f;
                                                    }
                                                    fontColor.A = (byte)((double)byte.MaxValue * (double)alphaMultiplierText * (double)num3);
                                                    Vector2 vector2_5 = new Vector2(8f / (float)screenWidth, 0.0f);
                                                    vector2_5.X /= num1;
                                                    myHudText.Start(font, vector2_2 + vector2_3 + vector2_5, fontColor, 0.55f / num1, MyGuiDrawAlignEnum.HORISONTAL_LEFT_AND_VERTICAL_CENTER);
                                                    myHudText.Append(poi.Text);
                                                }
                                            }
                                            ++index1;
                                        }
                                        ++index2;
                                    }
                                    else
                                    {
                                        goto label_86;
                                    }
                                }
                            }
                        }
                    }
                }
                this.GetPOIColorAndFontInformation(out white1, out fontColor, out font);
                float amount1 = num9 == 0 ? 1f : num8;
                if (num9 >= 2)
                {
                    amount1 = 0.0f;
                }
                Vector2   vector2_6  = Vector2.Lerp(vector2Array1[4], vector2Array2[index1], amount1);
                Vector2   vector2_7  = Vector2.Lerp(Vector2.Zero, new Vector2(0.02222222f / num1, 1f / 270f / num1), amount1);
                MyHudText myHudText1 = renderer.m_hudScreen.AllocateText();
                if (myHudText1 == null)
                {
                    return;
                }
                StringBuilder stringBuilder = new StringBuilder();
                MyHudMarkerRender.AppendDistance(stringBuilder, this.Distance);
                fontColor.A = (byte)((double)alphaMultiplierText * (double)byte.MaxValue);
                myHudText1.Start(font, vector2_2 + vector2_6 + vector2_7, fontColor, (float)(0.5 + 0.200000002980232 * (double)num14) / num1, MyGuiDrawAlignEnum.HORISONTAL_CENTER_AND_VERTICAL_CENTER);
                myHudText1.Append(stringBuilder);
            }
        }