public override void RenderInteractiveElements(float deltaTime) { (inventory as InventoryBase).InvNetworkUtil.AcceptServerUpdates = !isLeftMouseDownStartedInsideElem; // Slot sizes double absSlotWidth = scaled(GuiElementPassiveItemSlot.unscaledSlotSize); double absItemstackSize = scaled(GuiElementPassiveItemSlot.unscaledItemSize); double offset = absSlotWidth / 2; int i = 0; foreach (var val in renderedSlots) { ElementBounds bounds = slotBounds[i]; // Don't need to render stuff completely outside, saves us many render calls (~down to 100 draw calls instead of 600 for creative inventory) if (bounds.PartiallyInside(Bounds.ParentBounds)) { ItemSlot slot = val.Value; int slotId = val.Key; if (((slot.Itemstack == null || AlwaysRenderIcon) && slot.BackgroundIcon != null) || slot.HexBackgroundColor != null) { string key = slot.BackgroundIcon + "-" + slot.HexBackgroundColor; api.Render.Render2DTexturePremultipliedAlpha(slotTextureIdsByBgIconAndColor[key], bounds); } else { api.Render.Render2DTexturePremultipliedAlpha(slotTexture.TextureId, bounds); } if (highlightSlotId == slotId || hoverSlotId == slotId || leftMouseDownDistributeSlotsBySlotid.ContainsKey(slotId)) { api.Render.Render2DTexturePremultipliedAlpha( highlightSlotTexture.TextureId, (int)(bounds.renderX - 2), (int)(bounds.renderY - 2), bounds.OuterWidthInt + 4, bounds.OuterHeightInt + 4 ); } if (slot.Itemstack == null) { i++; continue; } float dx = 0; float dy = 0; if (slotNotifiedZoomEffect.ContainsKey(slotId)) { dx = 4 * (float)api.World.Rand.NextDouble() - 2f; dy = 4 * (float)api.World.Rand.NextDouble() - 2f; } api.Render.PushScissor(scissorBounds[i], true); api.Render.RenderItemstackToGui( slot, slotBounds[i].renderX + offset + dy, slotBounds[i].renderY + offset + dx, 90, (float)(absItemstackSize), ColorUtil.WhiteArgb ); api.Render.PopScissor(); if (slot.DrawUnavailable) { api.Render.Render2DTexturePremultipliedAlpha(crossedOutTexture.TextureId, (int)(bounds.renderX), (int)(bounds.renderY), crossedOutTexture.Width, crossedOutTexture.Height, 250); } if (slotQuantityTextures[i].TextureId != 0) { api.Render.Render2DTexturePremultipliedAlpha(slotQuantityTextures[i].TextureId, slotBounds[i]); } } i++; } }
public override void RenderInteractiveElements(float deltaTime) { double absSlotWidth = scaled(GuiElementPassiveItemSlot.unscaledSlotSize); double absItemstackSize = scaled(GuiElementPassiveItemSlot.unscaledItemSize); double offset = absSlotWidth / 2; //double visibleStartY = InsideClipBounds?.absFixedY ?? 0; //double visibleEndY = visibleStartY + (InsideClipBounds?.OuterHeight ?? 0); int i = 0; foreach (var val in renderedSlots) { ElementBounds bounds = slotBounds[i]; double slotStartY = bounds.absFixedY; double slotEndY = slotStartY + bounds.OuterHeight; // The partially inside test is actually very expensive when done 5000+ times a frame, so we do a much quicker pretest here //if (InsideClipBounds != null && (slotEndY < visibleStartY || slotStartY > visibleEndY)) { i++; continue; } // Don't need to render stuff completely outside, saves us many render calls (~down to 100 draw calls instead of 600 for creative inventory) if (bounds.PartiallyInside(Bounds.ParentBounds)) { ItemSlot slot = val.Value; int slotId = val.Key; if (((slot.Itemstack == null || AlwaysRenderIcon) && slot.BackgroundIcon != null) || slot.HexBackgroundColor != null) { string key = slot.BackgroundIcon + "-" + slot.HexBackgroundColor; api.Render.Render2DTexturePremultipliedAlpha(slotTextureIdsByBgIconAndColor[key], bounds); } else { api.Render.Render2DTexturePremultipliedAlpha(slotTexture.TextureId, bounds); } if (highlightSlotId == slotId || hoverSlotId == slotId || distributeStacksPrevStackSizeBySlotId.ContainsKey(slotId)) { api.Render.Render2DTexturePremultipliedAlpha( highlightSlotTexture.TextureId, (int)(bounds.renderX - 2), (int)(bounds.renderY - 2), bounds.OuterWidthInt + 4, bounds.OuterHeightInt + 4 ); } if (slot.Itemstack == null) { i++; continue; } float dx = 0; float dy = 0; if (slotNotifiedZoomEffect.ContainsKey(slotId)) { dx = 4 * (float)api.World.Rand.NextDouble() - 2f; dy = 4 * (float)api.World.Rand.NextDouble() - 2f; } api.Render.PushScissor(scissorBounds[i], true); api.Render.RenderItemstackToGui( slot, slotBounds[i].renderX + offset + dy, slotBounds[i].renderY + offset + dx, 90, (float)(absItemstackSize), ColorUtil.WhiteArgb ); api.Render.PopScissor(); if (slot.DrawUnavailable) { api.Render.Render2DTexturePremultipliedAlpha(crossedOutTexture.TextureId, (int)(bounds.renderX), (int)(bounds.renderY), crossedOutTexture.Width, crossedOutTexture.Height, 250); } if (slotQuantityTextures[i].TextureId != 0) { api.Render.Render2DTexturePremultipliedAlpha(slotQuantityTextures[i].TextureId, slotBounds[i]); } } i++; } }