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); } } }
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); } }