private void DrawHotbarBlockSprites(GameTime gameTime) { var scale = new Point((int)(16 * Game.ScaleFactor * 2)); var origin = new Point((int)(Game.GraphicsDevice.Viewport.Width / 2 - Scale(HotbarBackgroundRect.Width / 2)), (int)(Game.GraphicsDevice.Viewport.Height - Scale(HotbarBackgroundRect.Height + 5))); origin.X += (int)Scale(3); origin.Y += (int)Scale(3); for (int i = 0; i < Game.Client.Inventory.Hotbar.Length; i++) { var item = Game.Client.Inventory.Hotbar[i]; if (item.Empty) { continue; } var provider = Game.ItemRepository.GetItemProvider(item.ID) as IBlockProvider; if (provider == null || provider.GetIconTexture((byte)item.Metadata) != null) { continue; } var position = origin + new Point((int)Scale(i * 20), 0); var rect = new Rectangle(position, scale); IconRenderer.RenderBlockIcon(Game, provider, (byte)item.Metadata, rect); } }
public void Draw(GameTime gameTime) { if (Game.Client.CurrentWindow != null) { // TODO: slot == -999 when outside of the window and -1 when inside the window, but not on an item SelectedSlot = -999; IItemProvider provider = null; var scale = new Point((int)(16 * Game.ScaleFactor * 2)); var mouse = Mouse.GetState().Position.ToVector2().ToPoint() - new Point((int)(8 * Game.ScaleFactor * 2)); var rect = new Rectangle(mouse, scale); if (!HeldItem.Empty) { provider = Game.ItemRepository.GetItemProvider(HeldItem.ID); } SpriteBatch.Begin(samplerState: SamplerState.PointClamp, blendState: BlendState.NonPremultiplied); SpriteBatch.Draw(Game.White1x1, new Rectangle(0, 0, Game.GraphicsDevice.Viewport.Width, Game.GraphicsDevice.Viewport.Height), new Color(Color.Black, 180)); switch (Game.Client.CurrentWindow.Type) { case -1: SpriteBatch.Draw(Inventory, new Vector2( Game.GraphicsDevice.Viewport.Width / 2 - Scale(InventoryWindowRect.Width / 2), Game.GraphicsDevice.Viewport.Height / 2 - Scale(InventoryWindowRect.Height / 2)), InventoryWindowRect, Color.White, 0, Vector2.Zero, Game.ScaleFactor * 2, SpriteEffects.None, 1); DrawInventoryWindow(RenderStage.Sprites); break; case 1: // Crafting bench SpriteBatch.Draw(Crafting, new Vector2( Game.GraphicsDevice.Viewport.Width / 2 - Scale(CraftingWindowRect.Width / 2), Game.GraphicsDevice.Viewport.Height / 2 - Scale(CraftingWindowRect.Height / 2)), CraftingWindowRect, Color.White, 0, Vector2.Zero, Game.ScaleFactor * 2, SpriteEffects.None, 1); DrawCraftingWindow(RenderStage.Sprites); break; } if (provider != null) { if (provider.GetIconTexture((byte)HeldItem.Metadata) != null) { IconRenderer.RenderItemIcon(SpriteBatch, Items, provider, (byte)HeldItem.Metadata, rect, Color.White); } } SpriteBatch.End(); switch (Game.Client.CurrentWindow.Type) { case -1: DrawInventoryWindow(RenderStage.Models); break; case 1: // Crafting bench DrawCraftingWindow(RenderStage.Models); break; } if (provider != null) { if (provider.GetIconTexture((byte)HeldItem.Metadata) == null && provider is IBlockProvider) { IconRenderer.RenderBlockIcon(Game, provider as IBlockProvider, (byte)HeldItem.Metadata, rect); } } SpriteBatch.Begin(samplerState: SamplerState.PointClamp, blendState: BlendState.NonPremultiplied); switch (Game.Client.CurrentWindow.Type) { case -1: DrawInventoryWindow(RenderStage.Text); break; case 1: // Crafting bench DrawCraftingWindow(RenderStage.Text); break; } if (provider != null) { if (HeldItem.Count > 1) { int offset = 10; if (HeldItem.Count >= 10) { offset -= 6; } mouse += new Point((int)Scale(offset), (int)Scale(5)); Font.DrawText(SpriteBatch, mouse.X, mouse.Y, HeldItem.Count.ToString(), Game.ScaleFactor); } } if (SelectedSlot >= 0) { var item = Game.Client.CurrentWindow[SelectedSlot]; if (!item.Empty) { var p = Game.ItemRepository.GetItemProvider(item.ID); var size = Font.MeasureText(p.DisplayName); mouse = Mouse.GetState().Position.ToVector2().ToPoint(); mouse += new Point(10, 10); SpriteBatch.Draw(Game.White1x1, new Rectangle(mouse, new Point(size.X + 10, size.Y + 15)), new Color(Color.Black, 200)); Font.DrawText(SpriteBatch, mouse.X + 5, mouse.Y, p.DisplayName); } } SpriteBatch.End(); } }
private void DrawWindowArea(IWindowArea area, int _x, int _y, Rectangle frame, RenderStage stage) { var mouse = Mouse.GetState().Position.ToVector2(); var scale = new Point((int)(16 * Game.ScaleFactor * 2)); var origin = new Point((int)( Game.GraphicsDevice.Viewport.Width / 2 - Scale(frame.Width / 2) + Scale(_x)), (int)(Game.GraphicsDevice.Viewport.Height / 2 - Scale(frame.Height / 2) + Scale(_y))); for (int i = 0; i < area.Length; i++) { var item = area[i]; int x = (int)((i % area.Width) * Scale(18)); int y = (int)((i / area.Width) * Scale(18)); if (area is CraftingWindowArea) { // yes I know this is a crappy hack, bite me if (i == 0) { if (area.Width == 2) { x = (int)Scale(144 - _x); y = (int)Scale(36 - _y); } else { x = (int)Scale(124 - _x); y = (int)Scale(35 - _y); } } else { i--; x = (int)((i % area.Width) * Scale(18)); y = (int)((i / area.Width) * Scale(18)); i++; } } var position = origin + new Point(x, y); var rect = new Rectangle(position, scale); if (stage == RenderStage.Sprites && rect.Contains(mouse)) { SelectedSlot = (short)(area.StartIndex + i); SpriteBatch.Draw(Game.White1x1, rect, new Color(Color.White, 150)); } if (item.Empty) { continue; } var provider = Game.ItemRepository.GetItemProvider(item.ID); var texture = provider.GetIconTexture((byte)item.Metadata); if (texture != null && stage == RenderStage.Sprites) { IconRenderer.RenderItemIcon(SpriteBatch, Items, provider, (byte)item.Metadata, rect, Color.White); } if (texture == null && stage == RenderStage.Models && provider is IBlockProvider) { IconRenderer.RenderBlockIcon(Game, provider as IBlockProvider, (byte)item.Metadata, rect); } if (stage == RenderStage.Text && item.Count > 1) { int offset = 10; if (item.Count >= 10) { offset -= 6; } position += new Point((int)Scale(offset), (int)Scale(5)); Font.DrawText(SpriteBatch, position.X, position.Y, item.Count.ToString(), Game.ScaleFactor); } } }