Esempio n. 1
0
            public override void render(Display display, RenderTarget rt, AddSpriteDelegate addSprite)
            {
                if (DataAccessor == null || !isVisible(DataAccessor.indicator()))
                {
                    return;
                }

                if (Gradient.Count == 0)
                {
                    addGradientColor(0f, Default.BarColor);
                }

                /*
                 * Vector2 position = PositionType == ValueType.Relative ? Position * display.RenderArea.Size : Position;
                 * Vector2 size = SizeType == ValueType.Relative ? Size * display.RenderArea.Size : Size;
                 * float borderSize = borderSizeType_ == ValueType.Relative ? borderSize_ * (size.X < size.Y ? size.X : size.Y) : borderSize_;
                 * float tileSpace = tileSpaceType_ == ValueType.Relative ? tileSpace_ * (size.X < size.Y ? size.X : size.Y) : tileSpace_;
                 *
                 * renderStyledBar_(addSprite, rt, position, size, rotation_, DataAccessor.min() < 0.0, tiles_, tileSpace, tileName_,
                 *  (float)DataAccessor.indicator(), Gradient, borderSize, borderColor_, backgroundColor_);
                 */

                base.render(display, rt, addSprite);

                Vector2 size      = RenderData.OuterSize;
                float   tileSpace = tileSpaceType_ == ValueType.Relative ? tileSpace_ * (size.X < size.Y ? size.X : size.Y) : tileSpace_;

                renderStyledBar_(addSprite, rt, RenderData.Position, RenderData.InnerSize, rotation_, DataAccessor.min() < 0.0, tiles_, tileSpace, tileName_,
                                 (float)DataAccessor.indicator(), Gradient, 0f, Color.Black, Color.Black);
            }
Esempio n. 2
0
            public override void render(Display display, RenderTarget rt, AddSpriteDelegate addSprite)
            {
                Color color   = Color;
                bool  visible = true;

                if (DataAccessor != null)
                {
                    visible = isVisible(DataAccessor.indicator());
                    getGradientColorLerp((float)DataAccessor.indicator(), Gradient, out color);
                }

                if (!visible || (!toggleShow_ && blink_))
                {
                    return;
                }

                //Vector2 size = SizeType == ValueType.Relative ? Size * display.RenderArea.Size : Size;
                base.render(display, rt, addSprite);

                icon_(addSprite, rt, iconName_,
                      //PositionType == ValueType.Relative ? Position * display.RenderArea.Size : Position,
                      RenderData.Position,
                      RenderData.InnerSize,
                      thicknessSizeType_ == ValueType.Relative ? thickness_ * RenderData.InnerSize.X : thickness_,
                      rotation_, color);
            }
Esempio n. 3
0
            protected static void renderSimpleBar(AddSpriteDelegate addSprite, RenderTarget rt, Vector2 position, Vector2 size,
                                                  float rotation, bool doubleSided, int tiles, float tileSpace, string tileName, float ratio, Dictionary <float, Color> gradient,
                                                  float borderSize, Color borderColor, Color backgroundColor)
            {
                Vector2 innerSize  = size - (borderSize * 2f);
                Vector2 rtPosition = position + rt.DisplayOffset;

                /*
                 * if (borderSize > 0f)
                 *  addSprite(new MySprite(SpriteType.TEXTURE, IconNameSquareSimple, rtPosition, size, borderColor, rotation: rotation));
                 * if (backgroundColor.A > 0 || borderSize > 0f)
                 *  addSprite(new MySprite(SpriteType.TEXTURE, IconNameSquareSimple, rtPosition, innerSize, backgroundColor, rotation: rotation));
                 */
                Vector2 barSize;
                Vector2 barPosition;

                if (doubleSided)
                {
                    barSize     = new Vector2(innerSize.X, innerSize.Y * ratio * 0.5f);
                    barPosition = new Vector2(0f, -barSize.Y * 0.5f);
                }
                else
                {
                    barSize     = new Vector2(innerSize.X, innerSize.Y * ratio);
                    barPosition = new Vector2(0f, (innerSize.Y * 0.5f) - barSize.Y * 0.5f);
                }

                barPosition.Rotate(rotation);

                Color color;

                getGradientColorLerp(ratio, gradient, out color);
                addSprite(new MySprite(SpriteType.TEXTURE, IconNameSquareSimple, barPosition + rtPosition, barSize, color, rotation: rotation));
            }
Esempio n. 4
0
            public override void render(Display display, RenderTarget rt, AddSpriteDelegate addSprite)
            {
                base.render(display, rt, addSprite);

                RenderDataBattery renderData = RenderData as RenderDataBattery;

                float positionX = renderData.Position.X + rt.DisplayOffset.X - (renderData.InnerSize.X * 0.5f) + (renderData.Size.X * 0.5f);
                float positionY = renderData.Position.Y + rt.DisplayOffset.Y - (renderData.InnerSize.Y * 0.5f) + (renderData.Size.Y * 0.5f);
                float offsetX   = renderData.Size.X;
                float offsetY   = renderData.Size.Y;

                // draw batteries
                for (int r = 0; r < renderData.Rows; r++)
                {
                    for (int c = 0; c < renderData.Cols; c++)
                    {
                        int index = (renderData.Cols * r) + c;
                        if (index >= renderData.Batteries.Count)
                        {
                            break;
                        }

                        IMyBatteryBlock battery  = renderData.Batteries[index];
                        Vector2         position = new Vector2(positionX + (offsetX * c), positionY + (offsetY * r));
                        drawSingleBattery(position, renderData.Scale,
                                          battery.CurrentStoredPower / battery.MaxStoredPower,
                                          (battery.CurrentInput / battery.MaxInput) - (battery.CurrentOutput / battery.MaxOutput),
                                          DataCollectorBase <IMyBatteryBlock> .isOn(battery),
                                          battery.ChargeMode, addSprite);
                    }
                }
            }
Esempio n. 5
0
            protected static void renderTiledBar(AddSpriteDelegate addSprite, RenderTarget rt, Vector2 position, Vector2 size,
                                                 float rotation, bool doubleSided, int tiles, float tileSpace, string tileName, float ratio, Dictionary <float, Color> gradient,
                                                 float borderSize, Color borderColor, Color backgroundColor)
            {
                Vector2 innerSize  = size - (borderSize * 2f);
                Vector2 rtPosition = position + rt.DisplayOffset;

                /*
                 * if (borderSize > 0f)
                 *  addSprite(new MySprite(SpriteType.TEXTURE, IconNameSquareSimple, rtPosition, size, borderColor, rotation: rotation));
                 * if (backgroundColor.A > 0 || borderSize > 0f)
                 *  addSprite(new MySprite(SpriteType.TEXTURE, IconNameSquareSimple, rtPosition, innerSize, backgroundColor, rotation: rotation));
                 */
                if (doubleSided)
                {
                    innerSize.Y *= 0.5f;
                }
                Vector2 tileSize = new Vector2(innerSize.X - (borderSize > 0f ? tileSpace * 2f : 0f),
                                               (innerSize.Y - (tileSpace * (tiles + (borderSize > 0f ? 1 : 0)))) / tiles);

                float yOffset = 0f;

                if (doubleSided)
                {
                    yOffset = -(tileSize.Y * 0.5f + tileSpace);
                }
                else
                {
                    yOffset = innerSize.Y * 0.5f - tileSize.Y * 0.5f - tileSpace;
                }

                float tileStep = tileSize.Y + tileSpace;

                float step = 1f / tiles;
                Color color;

                if (ratio >= 0f)
                {
                    for (int t = 0; t < Math.Round(ratio / step); t++)
                    {
                        Vector2 tilePosition = new Vector2(0f, -(t * tileStep) + yOffset);
                        tilePosition.Rotate(rotation);

                        getGradientColorLerp(t * step, gradient, out color);
                        addSprite(new MySprite(SpriteType.TEXTURE, tileName, tilePosition + rtPosition, tileSize, color, rotation: rotation));
                    }
                }
                else
                {
                    for (int t = 1; t <= -Math.Round(ratio / step); t++)
                    {
                        Vector2 tilePosition = new Vector2(0f, (t * tileStep) + yOffset);
                        tilePosition.Rotate(rotation);

                        getGradientColorLerp(-t * step, gradient, out color);
                        addSprite(new MySprite(SpriteType.TEXTURE, tileName, tilePosition + rtPosition, tileSize, color, rotation: rotation));
                    }
                }
            }
Esempio n. 6
0
            protected static void renderSegmentedBar(AddSpriteDelegate addSprite, RenderTarget rt, Vector2 position, Vector2 size,
                                                     float rotation, bool doubleSided, int tiles, float tileSpace, string tileName, float ratio, Dictionary <float, Color> gradient,
                                                     float borderSize, Color borderColor, Color backgroundColor)
            {
                Vector2 innerSize  = size - (borderSize * 2f);
                Vector2 rtPosition = position + rt.DisplayOffset;

                /*
                 * if (borderSize > 0f)
                 *  addSprite(new MySprite(SpriteType.TEXTURE, IconNameSquareSimple, rtPosition, size, borderColor, rotation: rotation));
                 * if (backgroundColor.A > 0 || borderSize > 0f)
                 *  addSprite(new MySprite(SpriteType.TEXTURE, IconNameSquareSimple, rtPosition, innerSize, backgroundColor, rotation: rotation));
                 */
                float startRatio      = ratio;
                float innerSizeOffset = 0f;

                if (doubleSided)
                {
                    startRatio      = ratio >= 0f ? ratio : 0f;
                    innerSizeOffset = -innerSize.Y * 0.25f;
                    innerSize.Y    *= 0.5f;
                }

                KeyValuePair <float, Color>[] colors = gradient.ToArray();
                for (int c = 0; c < colors.Length && startRatio > 0f; ++c)
                {
                    if (colors[c].Key > startRatio)
                    {
                        continue;
                    }

                    float curRatio = startRatio - colors[c].Key;

                    Vector2 barSize     = new Vector2(innerSize.X, innerSize.Y * curRatio);
                    Vector2 barPosition = new Vector2(0f, -(colors[c].Key * innerSize.Y) + ((innerSize.Y - barSize.Y) * 0.5f) + innerSizeOffset);
                    barPosition.Rotate(rotation);

                    addSprite(new MySprite(SpriteType.TEXTURE, IconNameSquareSimple, barPosition + rtPosition, barSize, colors[c].Value, rotation: rotation));
                    startRatio -= curRatio;
                }

                for (int d = 0; d < colors.Length && startRatio > ratio; d++)
                {
                    if (colors[d].Key >= 0f)
                    {
                        continue;
                    }

                    float curRatio = (colors[d].Key < ratio ? ratio : colors[d].Key) - startRatio;

                    Vector2 barSize     = new Vector2(innerSize.X, innerSize.Y * curRatio);
                    Vector2 barPosition = new Vector2(0f, -(startRatio * innerSize.Y) + ((innerSize.Y - barSize.Y) * 0.5f) + innerSizeOffset);
                    barPosition.Rotate(rotation);

                    addSprite(new MySprite(SpriteType.TEXTURE, IconNameSquareSimple, barPosition + rtPosition, barSize, colors[d].Value, rotation: rotation));
                    startRatio += curRatio;
                }
            }
Esempio n. 7
0
            protected static void renderEllipseBar(AddSpriteDelegate addSprite, RenderTarget rt, Vector2 position, Vector2 size,
                                                   float degreeStart, float degreeEnd, float blockThickness, float ratio,
                                                   Dictionary <float, Color> gradient, bool lerp, Color backgroundColor)
            {
                Vector2 rtPosition = position + rt.DisplayOffset;

                Vector2 halfSize  = size * 0.5f;
                float   range     = Math.Abs(degreeEnd - degreeStart);
                float   length    = (float)(Math.PI * Math.Sqrt(2f * (halfSize.X * halfSize.X + halfSize.Y * halfSize.Y)));
                float   thickness = Math.Max(size.X, size.Y) * ((blockThickness * 0.01f) * (range / 360f));
                float   step      = range / (length / thickness);
                float   max       = range * ratio;

                // render marker
                for (float c = 0, degree = degreeStart + step; degree < degreeEnd; degree += step, c += step)
                {
                    if (c >= max)
                    {
                        break;
                    }

                    float   t     = (degree / 180f) * (float)Math.PI + (degree < 0f ? (float)Math.PI * 2f : 0f);
                    Vector2 point = new Vector2(
                        -halfSize.X * (float)Math.Cos(t),
                        -halfSize.Y * (float)Math.Sin(t));

                    // axis vector
                    Vector2 axis;
                    if (degree >= 0f && degree < 180f)
                    {
                        axis = new Vector2(-1f, 0f);
                    }
                    else// if (degree >= 180f && degree < 360f)
                    {
                        axis = new Vector2(1f, 0f);
                    }

                    float delta = (float)Math.Acos(Vector2.Dot(Vector2.Normalize(point), axis));

                    Color color;
                    if (lerp)
                    {
                        getGradientColorLerp(c / range, gradient, out color);
                    }
                    else
                    {
                        getGradientColor(c / range, gradient, out color);
                    }

                    addSprite(new MySprite(SpriteType.TEXTURE, IconNameSquareSimple,
                                           (point * 0.5f) + rtPosition,
                                           new Vector2(point.Length(), thickness),
                                           color, rotation: delta));
                }

                addSprite(new MySprite(SpriteType.TEXTURE, IconNameCircle, rtPosition, size * 0.5f, backgroundColor));
                addSprite(new MySprite(SpriteType.TEXTURE, "CircleHollow", rtPosition, size * 1.06f, backgroundColor));
            }
Esempio n. 8
0
            void drawChargeModeIndicator(AddSpriteDelegate addSprite, Vector2 position, float size, float rotation, Color color)
            {
                addSprite(new MySprite(SpriteType.TEXTURE, "AH_BoreSight",
                                       new Vector2(position.X, position.Y - size * 0.2f),
                                       new Vector2(size, size), color, rotation: rotation));

                addSprite(new MySprite(SpriteType.TEXTURE, "AH_BoreSight",
                                       new Vector2(position.X, position.Y + size * 0.2f),
                                       new Vector2(size, size), color, rotation: rotation));
            }
Esempio n. 9
0
            protected static void renderTextLine(Display display, RenderTarget rt, AddSpriteDelegate addSprite,
                                                 string font, float fontSize, Vector2 position, Color fontColor, string textLine, TextAlignment alignment)
            {
                // fix font position
                Vector2  offset = new Vector2(rt.DisplayOffset.X, rt.DisplayOffset.Y - (0.61f * (fontSize * Default.CharHeight)));
                MySprite sprite = MySprite.CreateText(textLine, font, fontColor, fontSize, alignment);

                sprite.Position = position + offset;
                addSprite(sprite);
            }
Esempio n. 10
0
            public override void render(Display display, RenderTarget rt, AddSpriteDelegate addSprite)
            {
                base.render(display, rt, addSprite);
                RenderDataList renderData    = RenderData as RenderDataList;
                Vector2        iconPosition  = renderData.IconPosition;
                Vector2        barPosition   = renderData.BarPosition;
                float          textPositionY = renderData.TextPositionY;

                // render name
                for (int l = autoScrollLine_; l < (renderData.Lines + autoScrollLine_) && l < renderData.Container.Count; l++)
                {
                    var entry = renderData.Container[l];

                    // draw icon
                    if (iconShow_)
                    {
                        string iconType = $"{entry.type.TypeId}/{entry.type.SubtypeId}";
                        if (RenderTarget.spriteExist(iconType))
                        {
                            addSprite(new MySprite(SpriteType.TEXTURE, iconType, iconPosition + rt.DisplayOffset, renderData.IconSize, Color.White));
                        }
                        iconPosition.Y += renderData.LineHeight;
                    }

                    // draw bar
                    if (barShow_)
                    {
                        barRenderMethod_(addSprite, rt, barPosition, renderData.BarSize, (float)Math.PI * 0.5f, false, renderData.BarTiles,
                                         renderData.BarTileSpacing, IconNameSquareSimple, (float)entry.indicator, Gradient, 0f, Default.BarBorderColor, barBackground_);
                        barPosition.Y += renderData.LineHeight;
                    }

                    // draw text
                    if (textShow_)
                    {
                        renderTextLine(display, rt, addSprite, Template.Font, renderData.FontSize,
                                       new Vector2(renderData.TextLeftPositionX, textPositionY),
                                       getGradientColor((float)entry.indicator), entry.name, TextAlignment.LEFT);

                        if (textStyle_ != TextStyle.OnlyName)
                        {
                            renderTextLine(display, rt, addSprite, Template.Font, renderData.FontSize,
                                           new Vector2(renderData.TextRightPositionX, textPositionY),
                                           getGradientColor((float)entry.indicator), getRightText(entry), TextAlignment.RIGHT);
                        }

                        textPositionY += renderData.LineHeight;
                    }
                }
            }
Esempio n. 11
0
            public override void render(Display display, RenderTarget rt, AddSpriteDelegate addSprite)
            {
                if (!isVisible(DataAccessor.indicator()))
                {
                    return;
                }

                renderEllipseBar(addSprite, rt, renderData_.position, renderData_.size, minDegree_, maxDegree_,
                                 thickness_, renderData_.ratio, Gradient, colorLerp_, Template.BackgroundColor);

                if (icon_ != null)
                {
                    icon_(addSprite, rt, iconName_, renderData_.position, renderData_.iconSize, 1f, 0f, renderData_.iconColor);
                }
            }
Esempio n. 12
0
            public virtual void render(Display display, RenderTarget rt, AddSpriteDelegate addSprite)
            {
                // Render Background
                if (RenderData.BackgroundColor.A > 0 && RenderData.BackgroundIcon != null)
                {
                    RenderData.BackgroundIcon(addSprite, rt, RenderData.BackgroundIconName, RenderData.Position, RenderData.BackgroundSize,
                                              RenderData.BackgroundThickness, RenderData.BackgroundRotation, RenderData.BackgroundColor);
                }

                // Render border
                if (RenderData.BorderThickness > 0 && RenderData.BorderIcon != null)
                {
                    RenderData.BorderIcon(addSprite, rt, RenderData.BorderName, RenderData.Position, RenderData.OuterSize,
                                          RenderData.BorderThickness, RenderData.BorderRotation, RenderData.BorderColor);
                }
            }
Esempio n. 13
0
            public override void render(Display display, RenderTarget rt, AddSpriteDelegate addSprite)
            {
                RenderDataText renderData = RenderData as RenderDataText;

                if (!renderData.Visible)
                {
                    return;
                }

                for (int c = 0; c < renderData.Lines.Count; c++)
                {
                    renderTextLine(display, rt, addSprite, Font, renderData.FontSize,
                                   new Vector2(renderData.TextPosition.X, renderData.TextPosition.Y + (c * renderData.LineHeight)),
                                   renderData.FontColor, renderData.Lines[c], TextAlignment);
                }
            }
Esempio n. 14
0
                static void renderIconDelimiter(AddSpriteDelegate addSprite, RenderTarget rt, string name,
                                                Vector2 position, Vector2 size, float thickness, float rotation, Color color)
                {
                    Vector2 rtPosition = position + rt.DisplayOffset;

                    Vector2 posBar = new Vector2(rtPosition.X + size.Y * 0.5f, rtPosition.Y);

                    addSprite(new MySprite(SpriteType.TEXTURE, IconNameSquareSimple, posBar, new Vector2(size.X - size.Y, size.Y), color, rotation: rotation));

                    Vector2 posEndLeft = new Vector2(-size.X * 0.5f + size.Y * 0.5f, 0f);

                    posEndLeft.Rotate(rotation);
                    addSprite(new MySprite(SpriteType.TEXTURE, IconNameCircle, posEndLeft + rtPosition, new Vector2(size.Y, size.Y), color));

                    Vector2 posEndRight = new Vector2(size.X * 0.5f - size.Y * 0.5f, 0f);

                    posEndRight.Rotate(rotation);
                    addSprite(new MySprite(SpriteType.TEXTURE, IconNameCircle, posEndRight + rtPosition, new Vector2(size.Y, size.Y), color));
                }
Esempio n. 15
0
            public override void render(Display display, RenderTarget rt, AddSpriteDelegate addSprite)
            {
                if (DataAccessor == null || !isVisible(DataAccessor.indicator()))
                {
                    return;
                }

                if (Gradient.Count == 0)
                {
                    addGradientColor(0f, Default.BarColor);
                }

                //Vector2 position = PositionType == ValueType.Relative ? Position * display.RenderArea.Size : Position;
                //Vector2 size = SizeType == ValueType.Relative ? Size * display.RenderArea.Size : Size;

                base.render(display, rt, addSprite);

                // draw slider
                renderSlider(addSprite, rt, RenderData.Position, RenderData.InnerSize, DataAccessor.min() < 0.0,
                             (float)DataAccessor.indicator(), Gradient, sliderOrientation_, sliderWidth_, sliderColor_);
            }
Esempio n. 16
0
            public override void render(Display display, RenderTarget rt, AddSpriteDelegate addSprite)
            {
                // render info text
                string text      = "Size=" + rt.Size.X.ToString("0000.00") + ";" + rt.Size.Y.ToString("0000.00");
                var    fontSize  = display.measureLineInPixels(text, "debug", 1f);
                float  fontScale = Math.Min((rt.Size.X * 0.8f) / fontSize.X, (rt.Size.Y * 0.8f) / fontSize.Y);

                var font = MySprite.CreateText(text, "debug", Color.White, fontScale);

                font.Position = new Vector2(rt.Size.X * 0.5f, fontSize.Y * fontScale + 10.0f) + rt.DisplayOffset;
                addSprite(font);

                // render edges
                Vector2 blockSize = new Vector2(20f, 20f);

                addSprite(new MySprite(SpriteType.TEXTURE, IconNameSquareSimple, (rt.Size / 2f) + rt.DisplayOffset, blockSize, Color.White));
                addSprite(new MySprite(SpriteType.TEXTURE, IconNameSquareSimple, (blockSize / 2f) + rt.DisplayOffset, blockSize, Color.Red));
                addSprite(new MySprite(SpriteType.TEXTURE, IconNameSquareSimple, new Vector2(rt.Size.X - blockSize.X / 2f, blockSize.Y / 2f) + rt.DisplayOffset, blockSize, Color.Green));
                addSprite(new MySprite(SpriteType.TEXTURE, IconNameSquareSimple, new Vector2(blockSize.X / 2f, rt.Size.Y - blockSize.Y / 2f) + rt.DisplayOffset, blockSize, Color.Blue));
                addSprite(new MySprite(SpriteType.TEXTURE, IconNameSquareSimple, (rt.Size - (blockSize / 2f)) + rt.DisplayOffset, blockSize, Color.Yellow));
            }
Esempio n. 17
0
                static void renderIconBorderSimple(AddSpriteDelegate addSprite, RenderTarget rt, string name,
                                                   Vector2 position, Vector2 size, float thickness, float rotation, Color color)
                {
                    Vector2 rtPosition    = position + rt.DisplayOffset;
                    Vector2 halfSize      = size * 0.5f;
                    float   halfThickness = thickness * 0.5f;

                    // top
                    Vector2 pos = new Vector2(0f, -halfSize.Y + halfThickness);

                    pos.Rotate(rotation);
                    addSprite(new MySprite(SpriteType.TEXTURE, IconNameSquareSimple,
                                           pos + rtPosition,
                                           new Vector2(size.X, thickness),
                                           color, rotation: rotation));

                    // bottom
                    pos = new Vector2(0f, halfSize.Y - halfThickness);
                    pos.Rotate(rotation);
                    addSprite(new MySprite(SpriteType.TEXTURE, IconNameSquareSimple,
                                           pos + rtPosition,
                                           new Vector2(size.X, thickness),
                                           color, rotation: rotation));

                    // left
                    pos = new Vector2(-halfSize.X + halfThickness, 0f);
                    pos.Rotate(rotation);
                    addSprite(new MySprite(SpriteType.TEXTURE, IconNameSquareSimple,
                                           pos + rtPosition,
                                           new Vector2(thickness, size.Y),
                                           color, rotation: rotation));

                    // right
                    pos = new Vector2(halfSize.X - halfThickness, 0f);
                    pos.Rotate(rotation);
                    addSprite(new MySprite(SpriteType.TEXTURE, IconNameSquareSimple,
                                           pos + rtPosition,
                                           new Vector2(thickness, size.Y),
                                           color, rotation: rotation));
                }
Esempio n. 18
0
            void drawSingleBattery(Vector2 position, float scale, float capacity, float load, bool onoff, ChargeMode chargeMode, AddSpriteDelegate addSprite)
            {
                float borderSize     = 8f * scale;
                float capacityBorder = borderSize * 0.5f;

                Vector2 poleSize         = new Vector2(batterySize_.X * 0.5f, 10f) * scale;
                Vector2 backgroundSize   = new Vector2(batterySize_.X * scale, (batterySize_.Y * scale) - poleSize.Y);
                Vector2 InnerSectionSize = backgroundSize - borderSize;

                Color borderColor = onoff == false ? borderColors_[0] :
                                    (chargeMode == ChargeMode.Recharge ? borderColors_[3] :
                                     (chargeMode == ChargeMode.Discharge ? borderColors_[4] :
                                      (load <= 0f ? borderColors_[1] : borderColors_[2])));

                // draw plus pole
                addSprite(new MySprite(SpriteType.TEXTURE, IconNameSquareSimple,
                                       new Vector2(position.X, position.Y - backgroundSize.Y * 0.5f),
                                       poleSize, borderColor));

                // draw background
                addSprite(new MySprite(SpriteType.TEXTURE, IconNameSquareSimple,
                                       new Vector2(position.X, position.Y + poleSize.Y * 0.5f),
                                       backgroundSize, borderColor));

                // draw inner section
                addSprite(new MySprite(SpriteType.TEXTURE, IconNameSquareSimple,
                                       new Vector2(position.X, position.Y + poleSize.Y * 0.5f),
                                       InnerSectionSize, Template.BackgroundColor));

                // react on on/off state
                if (onoff == true)
                {
                    // draw capacity marker
                    Vector2 capacitySize = new Vector2(InnerSectionSize.X - capacityBorder * 2f,
                                                       (InnerSectionSize.Y - (capacityBorder * (capacitySegments_ + 1f))) / capacitySegments_);
                    float capacityYOffset   = capacitySize.Y + capacityBorder;
                    float capacityYPosition = position.Y + (poleSize.Y + InnerSectionSize.Y - capacitySize.Y) * 0.5f - capacityBorder;

                    for (int s = 0; s < 6; s++)
                    {
                        float lerp = (1f / capacitySegments_) * s;
                        if (capacity <= lerp)
                        {
                            break;
                        }

                        addSprite(new MySprite(SpriteType.TEXTURE, IconNameSquareSimple,
                                               new Vector2(position.X, capacityYPosition - (capacityYOffset * s)),
                                               capacitySize, Color.Lerp(barColors_[0], barColors_[1], lerp)));
                    }

                    if (chargeMode == ChargeMode.Recharge)
                    {
                        drawChargeModeIndicator(addSprite, new Vector2(position.X, position.Y + poleSize.Y * 0.5f),
                                                InnerSectionSize.X * 1.3f, (float)(Math.PI * 1.5), borderColor);
                    }
                    else if (chargeMode == ChargeMode.Discharge)
                    {
                        drawChargeModeIndicator(addSprite, new Vector2(position.X, position.Y + poleSize.Y * 0.5f),
                                                InnerSectionSize.X * 1.3f, (float)(Math.PI * 0.5), borderColor);
                    }
                }
                else
                {
                    addSprite(new MySprite(SpriteType.TEXTURE, "Cross",
                                           new Vector2(position.X, position.Y + poleSize.Y * 0.5f),
                                           new Vector2(InnerSectionSize.X, InnerSectionSize.X) * 0.9f,
                                           Color.Red));
                }
            }
Esempio n. 19
0
            protected void renderSlider(AddSpriteDelegate addSprite, RenderTarget rt, Vector2 position, Vector2 size, bool doubleSided,
                                        float ratio, Dictionary <float, Color> barGradient, SliderOrientation sliderOrientation, float sliderWidth, Color sliderColor)
            {
                ratio = !doubleSided ? ((ratio * 2f) - 1f) * 0.5f : ratio * 0.5f;

                bool    vertical   = sliderOrientation == SliderOrientation.Left || sliderOrientation == SliderOrientation.Right;
                float   rotation   = vertical ? 0f : (float)Math.PI * 0.5f;
                Vector2 rtPosition = position + rt.DisplayOffset;
                Vector2 sliderSize;
                Vector2 sliderPosition;
                Vector2 barPosition;
                Vector2 barSize;

                const float barHeightFactor    = 0.8f;
                const float sliderHeightFactor = 0.9f;

                if (vertical)
                {
                    sliderSize = new Vector2(size.X * sliderHeightFactor, sliderWidth * size.Y);
                    barSize    = new Vector2(size.X * barHeightFactor, size.Y - sliderSize.Y);

                    if (sliderOrientation == SliderOrientation.Left)
                    {
                        barPosition    = new Vector2(position.X + (size.X - barSize.X) * 0.5f, position.Y);
                        sliderPosition = new Vector2(rtPosition.X - (size.X - sliderSize.X) * 0.5f, rtPosition.Y - ratio * barSize.Y);
                    }
                    else
                    {
                        barPosition    = new Vector2(position.X - (size.X - barSize.X) * 0.5f, position.Y);
                        sliderPosition = new Vector2(rtPosition.X + (size.X - sliderSize.X) * 0.5f, rtPosition.Y - ratio * barSize.Y);
                    }
                }
                else
                {
                    sliderSize = new Vector2(sliderWidth * size.X, size.Y * sliderHeightFactor);
                    barSize    = new Vector2(size.Y * barHeightFactor, size.X - sliderSize.X);

                    if (sliderOrientation == SliderOrientation.Top)
                    {
                        barPosition    = new Vector2(position.X, position.Y + (size.Y - barSize.X) * 0.5f);
                        sliderPosition = new Vector2(rtPosition.X + ratio * barSize.Y, rtPosition.Y - (size.Y - sliderSize.Y) * 0.5f);
                    }
                    else
                    {
                        barPosition    = new Vector2(position.X, position.Y - (size.Y - barSize.X) * 0.5f);
                        sliderPosition = new Vector2(rtPosition.X + ratio * barSize.Y, rtPosition.Y + (size.Y - sliderSize.Y) * 0.5f);
                    }
                }

                if (doubleSided == true)
                {
                    Dictionary <float, Color> clamped = new Dictionary <float, Color>();
                    foreach (var pair in barGradient)
                    {
                        clamped.Add((pair.Key * 0.5f) + 0.5f, pair.Value);
                    }

                    renderSegmentedBar(addSprite, rt, barPosition, barSize, rotation, false, 0, 0f, "", 1f, clamped, 0f, Color.White, new Color(0, 0, 0, 0));
                }
                else
                {
                    renderSegmentedBar(addSprite, rt, barPosition, barSize, rotation, false, 0, 0f, "", 1f, barGradient, 0f, Color.White, new Color(0, 0, 0, 0));
                }

                // draw slider
                if (vertical)
                {
                    if (sliderOrientation == SliderOrientation.Left)
                    {
                        addSprite(new MySprite(SpriteType.TEXTURE, IconNameCircle,
                                               new Vector2(sliderPosition.X - sliderSize.X * 0.5f + sliderSize.Y * 0.5f, sliderPosition.Y),
                                               new Vector2(sliderSize.X), sliderColor));
                        addSprite(new MySprite(SpriteType.TEXTURE, "Triangle",
                                               new Vector2(sliderPosition.X + sliderSize.X * 0.5f - sliderSize.Y * 0.5f, sliderPosition.Y),
                                               new Vector2(sliderSize.Y, sliderSize.Y),
                                               sliderColor, rotation: (float)(Math.PI * 0.5f)));
                        addSprite(new MySprite(SpriteType.TEXTURE, IconNameSquareSimple,
                                               new Vector2(sliderPosition.X - sliderSize.Y * 0.25f, sliderPosition.Y),
                                               new Vector2(sliderSize.X - sliderSize.Y * 1.5f, sliderSize.Y),
                                               sliderColor));
                    }
                    else
                    {
                        addSprite(new MySprite(SpriteType.TEXTURE, IconNameCircle,
                                               new Vector2(sliderPosition.X + sliderSize.X * 0.5f - sliderSize.Y * 0.5f, sliderPosition.Y),
                                               new Vector2(sliderSize.X), sliderColor));
                        addSprite(new MySprite(SpriteType.TEXTURE, "Triangle",
                                               new Vector2(sliderPosition.X - sliderSize.X * 0.5f + sliderSize.Y * 0.5f, sliderPosition.Y),
                                               new Vector2(sliderSize.Y, sliderSize.Y),
                                               sliderColor, rotation: (float)(Math.PI * 1.5f)));
                        addSprite(new MySprite(SpriteType.TEXTURE, IconNameSquareSimple,
                                               new Vector2(sliderPosition.X + sliderSize.Y * 0.25f, sliderPosition.Y),
                                               new Vector2(sliderSize.X - sliderSize.Y * 1.5f, sliderSize.Y),
                                               sliderColor));
                    }
                }
                else
                {
                    if (sliderOrientation == SliderOrientation.Top)
                    {
                        addSprite(new MySprite(SpriteType.TEXTURE, IconNameCircle,
                                               new Vector2(sliderPosition.X, sliderPosition.Y - sliderSize.Y * 0.5f + sliderSize.X * 0.5f),
                                               new Vector2(sliderSize.X), sliderColor));
                        addSprite(new MySprite(SpriteType.TEXTURE, "Triangle",
                                               new Vector2(sliderPosition.X, sliderPosition.Y + sliderSize.Y * 0.5f - sliderSize.X * 0.5f),
                                               new Vector2(sliderSize.X, sliderSize.X),
                                               sliderColor, rotation: (float)(Math.PI)));
                        addSprite(new MySprite(SpriteType.TEXTURE, IconNameSquareSimple,
                                               new Vector2(sliderPosition.X, sliderPosition.Y - sliderSize.X * 0.25f),
                                               new Vector2(sliderSize.X, sliderSize.Y - sliderSize.X * 1.5f),
                                               sliderColor));
                    }
                    else
                    {
                        addSprite(new MySprite(SpriteType.TEXTURE, IconNameCircle,
                                               new Vector2(sliderPosition.X, sliderPosition.Y + sliderSize.Y * 0.5f - sliderSize.X * 0.5f),
                                               new Vector2(sliderSize.X), sliderColor));
                        addSprite(new MySprite(SpriteType.TEXTURE, "Triangle",
                                               new Vector2(sliderPosition.X, sliderPosition.Y - sliderSize.Y * 0.5f + sliderSize.X * 0.5f),
                                               new Vector2(sliderSize.X, sliderSize.X),
                                               sliderColor));
                        addSprite(new MySprite(SpriteType.TEXTURE, IconNameSquareSimple,
                                               new Vector2(sliderPosition.X, sliderPosition.Y + sliderSize.X * 0.25f),
                                               new Vector2(sliderSize.X, sliderSize.Y - sliderSize.X * 1.5f),
                                               sliderColor));
                    }
                }
            }
Esempio n. 20
0
 static void renderSEIcon(AddSpriteDelegate addSprite, RenderTarget rt, string name,
                          Vector2 position, Vector2 size, float thickness, float rotation, Color color)
 {
     addSprite(new MySprite(SpriteType.TEXTURE, name, position + rt.DisplayOffset, size, color, rotation: rotation));
 }