示例#1
0
        private void DrawHotbarItemSprites(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);
                if (provider.GetIconTexture((byte)item.Metadata) == null)
                {
                    continue;
                }
                var position = origin + new Point((int)Scale(i * 20), 0);
                var rect     = new Rectangle(position, scale);
                IconRenderer.RenderItemIcon(SpriteBatch, Items, provider,
                                            (byte)item.Metadata, rect, Color.White); // TODO: F**k, metadata was supposed to be a short
            }
        }
示例#2
0
        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 TakeIcon()
    {
        if (_icon != null)
        {
            return;
        }
        if (_characterClass < 0 && _actionCtrl != null)
        {
            string charID = _actionCtrl.Data.characterId;
            if (charID.StartsWith("mage"))
            {
                _characterClass = 0;
            }
            else if (charID.StartsWith("warrior"))
            {
                _characterClass = 1;
            }
            else if (charID.StartsWith("monk"))
            {
                _characterClass = 2;
            }
        }
        if (_characterClass < 0)
        {
            return;
        }
        _icon = RenderTexture.GetTemporary(128, 128, 32, RenderTextureFormat.ARGB32);
        string[] cameraPaths = new string[] { "Assets/Characters/Common/IconCamera_mage.prefab",
                                              "Assets/Characters/Common/IconCamera_warrior.prefab",
                                              "Assets/Characters/Common/IconCamera_monk.prefab" };
        GameObject go = InJoy.AssetBundles.AssetBundles.Load(cameraPaths[_characterClass], typeof(GameObject)) as GameObject;

        go = GameObject.Instantiate(go) as GameObject;
        go.transform.parent        = transform;
        go.transform.localPosition = Vector3.zero;
        go.transform.localRotation = Quaternion.identity;
        go.transform.localScale    = Vector3.one;

        Renderer[] renderers = gameObject.GetComponentsInChildren <Renderer>();
        int[]      layers    = new int[renderers.Length];
        for (int i = 0; i < renderers.Length; ++i)
        {
            layers[i] = renderers[i].gameObject.layer;
            if (renderers[i].gameObject.layer == LayerMask.NameToLayer("CHARACTER") ||
                renderers[i].gameObject.layer == LayerMask.NameToLayer("Default"))
            {
                renderers[i].gameObject.layer = LayerMask.NameToLayer("SCRIPT");
            }
        }

        IconRenderer iRenderer = go.GetComponent <IconRenderer>();

        iRenderer.Render(_icon);
        Destroy(go);

        for (int i = 0; i < renderers.Length; ++i)
        {
            renderers[i].gameObject.layer = layers[i];
        }
    }
示例#4
0
        public void renderWindow(BufferedDisplayDriver display, IconRenderer ir, FontRenderer fr)
        {
            for (int i = 0; i <= width; i++)
            {
                for (int i2 = 0; i2 <= height; i2++)
                {
                    display.setPixel(i + x, i2 + y, 63);
                }
            }
            for (int i = 0; i <= width; i++)
            {
                display.setPixel(i + x, y, 0);
                display.setPixel(i + x, y + 20, 0);
                display.setPixel(i + x, y + height, 0);
            }
            for (int i = 0; i <= height; i++)
            {
                display.setPixel(x, y + i, 0);
                display.setPixel(x + width, y + i, 0);
            }

            ir.renderIcon(x + width - 20, y, 'X', 2);
            ir.renderIcon(x + width - 40, y, 'M', 2);
            ir.renderIcon(x + width - 60, y, '_', 2);

            fr.renderString(x + 10, y + 12, "WINDOW");
        }
示例#5
0
    /// <summary>
    /// Creates new textures, assigns them to new sprites used by a new
    /// list of game piece options and then defers to <see cref="IconRenderer.RenderIcons(PieceIconSet.PieceIconEntry[], Color)"/>
    /// to build out thumbnails of the game pieces.
    /// </summary>
    /// <param name="color">The color that each game piece should be rendered with</param>
    private void RebuildGamePieceOptions(Color color)
    {
        pieceDropdown.ClearOptions();
        List <Dropdown.OptionData> piecesOptions = new List <Dropdown.OptionData>();

        GameObject   iconCameraObject = GameObject.Find("Icon Camera");
        IconRenderer iconRenderer     = iconCameraObject.GetComponent <IconRenderer>();

        iconRenderer.RenderIcons(filteredPieces, color);

        foreach (var piece in filteredPieces)
        {
            Sprite s = Sprite.Create(piece.texture, new Rect(0, 0, 256, 256), Vector2.zero);
            s.name = piece.modelName;

            Dropdown.OptionData data = new Dropdown.OptionData()
            {
                image = s,
                text  = piece.modelName
            };
            piecesOptions.Add(data);
        }
        pieceDropdown.AddOptions(piecesOptions);
        if (piecesOptions.Count > 0)
        {
            pieceDropdown.value = 0;
        }
    }
示例#6
0
    void Start()
    {
        _manager = this;
        database = _database;
#if !UNITY_EDITOR
        toucControl = true;
#endif
        if (!toucControl)
        {
            CrossPlatformInputManager.useHardwareInput();
        }
        else
        {
            CrossPlatformInputManager.useTouchInput();
        }

        UIHandler = _UIHandler;
        path      = Application.persistentDataPath;
        Debug.Log("Game started at " + path);
        mainThread = Thread.CurrentThread;
        Timer.start("Loading Materials");
        for (int i = 0; i <= Enum.GetValues(typeof(MyMaterial)).Length - 1; i++)
        {
            ((MyMaterial)i).loadMaterial();
        }
        Timer.endAndPrint("Loading Materials");
        halfMaxChunkCount       = (maxChunkCount / 2);
        chunkPrefab             = _chunkPrefab;
        chunks                  = new Chunk[maxChunkCount, 50, maxChunkCount];
        currentTerrainGenerator = new TerrainGenerator();


        //INITIATIONS
        ItemMeshCreator.init();
        IconRenderer.init();
        if (startGame)
        {
            //LOAD SAVE FILE
            save = SaveLoader.load(saveFileName);
            currentTerrainGenerator.initiateMap();
            //INITIALIZE PLAYER
            if (save.player == null)
            {
                save.player = new Player(spawnPoint);
            }
            save.player.init(playerPrefab);
            //INITIALIZE UI
            _UIHandler.init();
        }


        //START BACKGOUND THREAD
        if (startGame)
        {
            Thread thread = new Thread(Timer.doAsycTick);
            thread.IsBackground = true;
            thread.Start();
        }
    }
示例#7
0
        protected override void LoadRenderers()
        {
            _default = LoadRenderer <IconRenderer>(Skin, _basename);
            _hover   = LoadRenderer <IconRenderer>(Skin, _basename + "_hover");
            _pressed = LoadRenderer <IconRenderer>(Skin, _basename + "_pressed");

            _textRenderer = RenderManager.SpriteFonts[FontName];
        }
示例#8
0
        public void drawDesktop(IconRenderer ir, FontRenderer dfr)
        {
            ir.renderIcon(5, 20, 'C', 4);
            dfr.renderString(10, 65, "MY PC");

            ir.renderIcon(65, 20, 'N', 4);
            dfr.renderString(62, 65, "NOTEPAD");
        }
示例#9
0
 void Window_ClientSizeChanged(object sender, EventArgs e)
 {
     if (GraphicsDevice.Viewport.Width < 640 || GraphicsDevice.Viewport.Height < 480)
         ScaleFactor = 0.5f;
     else if (GraphicsDevice.Viewport.Width < 978 || GraphicsDevice.Viewport.Height < 720)
         ScaleFactor = 1.0f;
     else
         ScaleFactor = 1.5f;
     IconRenderer.PrepareEffects(this);
     UpdateCamera();
     CreateRenderTarget();
 }
示例#10
0
        public CommandPost(Vector3 position, Team team)
            : base(position)
        {
            startPosition = position;
            Team          = team;

            positionAnim = new Vector3Anim();

            // Setup physics body
            float   cubeSize = 1.5f; // blockSize * dims
            Vector3 size     = new Vector3(cubeSize * 9, cubeSize * 10, cubeSize * 7);

            PhysicsBody = new VoxelPhysicsBody(size, 2f, cubeSize);
            AddComponent(PhysicsBody);

            PhysicsBody.CanCollideWithSoft  = true;
            PhysicsBody.CanBePushedBySoft   = false;
            PhysicsBody.IsAffectedByGravity = true;
            PhysicsBody.CanBeSteppedOn      = false;

            if (!GlobalNetwork.IsServer)
            {
                // Setup renderer
                renderer = new VoxelRenderComponent();
                AddComponent(renderer);

                string modelPath = team == Team.A ? "Models/commandpost-red.aosm" : "Models/commandpost-blue.aosm";
                renderer.VoxelObject = AssetManager.LoadVoxelObject(modelPath, BufferUsageHint.StaticDraw);

                if (commandpostIconTex == null)
                {
                    commandpostIconTex = GLoader.LoadTexture("Textures/Gui/commandpost.png");
                }

                // Setup icon
                IconRenderer icon = new IconRenderer();
                AddComponent(icon);

                icon.Size   = new Vector2(16, 16);
                icon.Image  = new Image(commandpostIconTex, team == Team.A ? new Color(255, 0, 0, 128) : new Color(0, 0, 255, 128));
                icon.Offset = renderer.VoxelObject.UnitSize / 2f;
            }
        }
示例#11
0
        public static void renderWindow(BufferedDisplayDriver display, IconRenderer ir, FontRenderer fr)
        {
            if (isVisible)
            {
                for (int i = 0; i <= width; i++)
                {
                    for (int i2 = 0; i2 <= height; i2++)
                    {
                        display.setPixel(i + x, i2 + y, 41);
                    }
                }
                for (int i = 0; i <= width; i++)
                {
                    for (int i2 = 0; i2 <= 20; i2++)
                    {
                        display.setPixel(x + i, y + i2, 40);
                    }
                }
                for (int i = 0; i <= width; i++)
                {
                    display.setPixel(i + x, y, 25);
                    display.setPixel(i + x, y + 20, 25);
                    display.setPixel(i + x, y + height, 25);
                }
                for (int i = 0; i <= height; i++)
                {
                    display.setPixel(x, y + i, 25);
                    display.setPixel(x + width, y + i, 25);
                }

                ir.renderIcon(x + width - 20, y, 'X', 2);
                ir.renderIcon(x + width - 40, y, 'M', 2);
                ir.renderIcon(x + width - 60, y, '_', 2);

                fr.renderString(x + 10, y + 9, "NOTEPAD", 55, 2, 2);
            }
        }
示例#12
0
        public RenderVideo()
        {
            SetStyle(
                ControlStyles.Opaque | ControlStyles.UserPaint | ControlStyles.ResizeRedraw | ControlStyles.AllPaintingInWmPaint,
                true);

            var allocator = new AllocatorPresenter();

            _allocator            = allocator;
            _videoLayer           = new VideoRenderer(allocator);
            _osdLayer             = new OsdRenderer(allocator);
            _iconLayer            = new IconRenderer(allocator);
            _videoLayer.IsVisible = true;

            _allocator.Register(_videoLayer);
            _allocator.Register(_osdLayer);
            _allocator.Register(_iconLayer);

            _allocator.PresentCompleted += AllocatorPresenter_OnPresentCompleted;

            IsSyncSupported = true;
            VideoFilter     = VideoFilter.None;
            ScaleMode       = ScaleMode.FixedPixelSize;
        }
示例#13
0
        protected override void Initialize()
        {
            InputModules = new List<IGameplayModule>();
            GraphicalModules = new List<IGameplayModule>();

            base.Initialize(); // (calls LoadContent)

            Camera = new Camera(GraphicsDevice.Viewport.AspectRatio, 70.0f, 0.1f, 1000.0f);
            UpdateCamera();

            White1x1 = new Texture2D(GraphicsDevice, 1, 1);
            White1x1.SetData<Color>(new[] { Color.White });

            Audio = new AudioManager();
            Audio.LoadDefaultPacks(Content);

            SkyModule = new SkyModule(this);
            ChunkModule = new ChunkModule(this);
            DebugInfoModule = new DebugInfoModule(this, Pixel);
            ChatModule = new ChatModule(this, Pixel);
            var hud = new HUDModule(this, Pixel);
            var windowModule = new WindowModule(this, Pixel);

            GraphicalModules.Add(SkyModule);
            GraphicalModules.Add(ChunkModule);
            GraphicalModules.Add(new HighlightModule(this));
            GraphicalModules.Add(hud);
            GraphicalModules.Add(ChatModule);
            GraphicalModules.Add(windowModule);
            GraphicalModules.Add(DebugInfoModule);

            InputModules.Add(windowModule);
            InputModules.Add(DebugInfoModule);
            InputModules.Add(ChatModule);
            InputModules.Add(new HUDModule(this, Pixel));
            InputModules.Add(ControlModule = new PlayerControlModule(this));

            Client.PropertyChanged += HandleClientPropertyChanged;
            Client.Connect(EndPoint);

            BlockProvider.BlockRepository = BlockRepository;
            var itemRepository = new ItemRepository();
            itemRepository.DiscoverItemProviders();
            ItemRepository = itemRepository;
            BlockProvider.ItemRepository = ItemRepository;

            IconRenderer.CreateBlocks(this, BlockRepository);

            var centerX = GraphicsDevice.Viewport.Width / 2;
            var centerY = GraphicsDevice.Viewport.Height / 2;
            Mouse.SetPosition(centerX, centerY);

            MouseComponent.Scroll += OnMouseComponentScroll;
            MouseComponent.Move += OnMouseComponentMove;
            MouseComponent.ButtonDown += OnMouseComponentButtonDown;
            MouseComponent.ButtonUp += OnMouseComponentButtonUp;
            KeyboardComponent.KeyDown += OnKeyboardKeyDown;
            KeyboardComponent.KeyUp += OnKeyboardKeyUp;
            GamePadComponent.ButtonDown += OnGamePadButtonDown;
            GamePadComponent.ButtonUp += OnGamePadButtonUp;

            CreateRenderTarget();
            SpriteBatch = new SpriteBatch(GraphicsDevice);
            ThreadID = Thread.CurrentThread.ManagedThreadId;
        }
示例#14
0
 protected override void LoadRenderers()
 {
     _checkbox         = LoadRenderer <IconRenderer>(Skin, "checkbox_icon");
     _checkbox_checked = LoadRenderer <IconRenderer>(Skin, "checkbox_icon_checked");
 }
 public WorldObject(Vector3 position)
     : base(position)
 {
     Icon = new IconRenderer();
     AddComponent(Icon);
 }
示例#16
0
        public void draw(FontRenderer fr, FontRenderer dfr, Boolean startMenu, IconRenderer ir)
        {
            display.clearReal(63);

            for (int i = 0; i <= 120; i++)
            {
                for (int i2 = 0; i2 <= 15; i2++)
                {
                    display.setPixel(i, i2, 25);
                }
            }
            for (int i = 120; i <= 320; i++)
            {
                for (int i2 = 0; i2 <= 15; i2++)
                {
                    display.setPixel(i, i2, 43);
                }
            }

            drawDesktop(ir, dfr);

            if (startMenu)
            {
                for (int i = 0; i <= 120; i++)
                {
                    for (int i2 = 0; i2 <= 90; i2++)
                    {
                        display.setPixel(i, i2 + 15, 43);
                    }
                }
                for (int i = 0; i <= 85; i++)
                {
                    for (int i2 = 0; i2 <= 15; i2++)
                    {
                        display.setPixel(i + 25, i2 + 25, 25);
                    }
                }
                ir.renderIcon(10, 27, 'C', 1);
                fr.renderString(30, 30, "MY COMPUTER");

                for (int i = 0; i <= 85; i++)
                {
                    for (int i2 = 0; i2 <= 15; i2++)
                    {
                        display.setPixel(i + 25, i2 + 50, 25);
                    }
                }
                ir.renderIcon(10, 52, 'N', 1);
                fr.renderString(30, 55, "NOTEPAD");

                for (int i = 0; i <= 85; i++)
                {
                    for (int i2 = 0; i2 <= 15; i2++)
                    {
                        display.setPixel(i + 25, i2 + 80, 25);
                    }
                }
                ir.renderIcon(10, 82, 'P', 1);
                fr.renderString(30, 85, "REBOOT");
            }

            if (second != time.Second())
            {
                fps    = temp;
                temp   = 0;
                second = time.Second();
            }
            else
            {
                temp++;
            }

            fr.renderString(5, 5, "HELIX PYRO OS");
            fr.renderString(125, 5, time.Hour().ToString() + ":" + time.Minute().ToString() + ":" + time.Second().ToString() + "    " + fps.ToString());
        }
示例#17
0
        protected virtual bool[,] renderDialogEntry(IViewBoxModel view)
        {
            int i = 0;

            while (_isRendering && i++ < 10)
            {
                Thread.Sleep(5);
            }
            if (i >= 10)
            {
                return(cachedResult);
            }

            try
            {
                bool[,] m = cachedResult;
                lock (_synckLock)
                {
                    _isRendering = true;
                    if (HasChanged && Entry != null && view != null && view.ContentBox.Width > 0) // renew rendering result
                    {
                        bool[,] icon = emptyMatrix;
                        // get icon
                        if (IconRenderer != null)
                        {
                            icon = IconRenderer.RenderMatrix(view, Entry);
                        }

                        // calculate the space for the text to start
                        int padding_left = (icon != null && icon.GetLength(1) > 0) ? icon.GetLength(1) + IconTextSpace : 0;
                        // adapt the view
                        IViewBoxModel view2 = new DummyViewBox(view);
                        if (padding_left > 0)
                        {
                            var contentBox = view2.ContentBox;
                            contentBox.Width = contentBox.Width - padding_left;
                            view2.ContentBox = contentBox;
                        }

                        bool[,] text = emptyMatrix;

                        if (BrailleRenderer != null)
                        {
                            string title = Entry.Title;
                            if (Entry.Type == DialogEntryType.Group)
                            {
                                title = ll.GetTrans("grp.title.wrap", title);
                            }
                            text = BrailleRenderer.RenderMatrix(view2, title);
                        }

                        m = combineMatrices(icon, text, view);

                        // TODO: set content dimensions?
                    }
                    cachedResult = m;
                    HasChanged   = false;
                }
                return(m);
            }
            finally
            {
                _isRendering = false;
            }
        }
示例#18
0
        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);
                }
            }
        }
示例#19
0
        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 OnEnable()
 {
     iconRenderer = target as IconRenderer;
 }