示例#1
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);
                    }
                }
            }
示例#2
0
            public override void prepareRendering(Display display)
            {
                base.prepareRendering(display);

                RenderDataBattery    renderData = RenderData as RenderDataBattery;
                DataCollectorBattery dcBattery  = DataCollector as DataCollectorBattery;

                if (dcBattery == null)
                {
                    renderData.Batteries = new List <IMyBatteryBlock>();
                    return;
                }

                renderData.Batteries = dcBattery.Batteries;
                //renderData.renderSize = SizeType == ValueType.Relative ? Size * display.RenderArea.Size : Size;
                //renderData.renderPosition = PositionType == ValueType.Relative ? Position * display.RenderArea.Size : Position;

                // calculate rows and cols size
                Vector2 batterySize = batterySize_ + margin_;

                // full automatic
                if (rows_ <= 0 && cols_ <= 0)
                {
                    for (int curCols = renderData.Batteries.Count; curCols > 0; curCols--)
                    {
                        // padding == 2pixel
                        int     curRows  = (int)Math.Ceiling((double)renderData.Batteries.Count / curCols);
                        Vector2 curSize  = new Vector2(renderData.InnerSize.X / curCols, renderData.InnerSize.Y / curRows);
                        float   curScale = Math.Min(curSize.X / batterySize.X, curSize.Y / batterySize.Y);

                        if (curScale < renderData.Scale)
                        {
                            break;
                        }

                        renderData.Scale = curScale;
                        renderData.Size  = curSize;
                        renderData.Rows  = curRows;
                        renderData.Cols  = curCols;
                    }
                }
                else
                {
                    // calculate rows
                    if (rows_ <= 0)
                    {
                        renderData.Rows = (int)Math.Ceiling((double)renderData.Batteries.Count / cols_);
                    }
                    // calculate cols
                    else if (cols_ <= 0)
                    {
                        renderData.Cols = (int)Math.Ceiling((double)renderData.Batteries.Count / rows_);
                    }

                    renderData.Size  = new Vector2(renderData.InnerSize.X / renderData.Cols, renderData.InnerSize.Y / renderData.Rows);
                    renderData.Scale = Math.Min(renderData.Size.X / batterySize.X, renderData.Size.Y / batterySize.Y);
                }
            }