Esempio n. 1
0
        public virtual void Draw()
        {
            var backgroundColor = new Color(50, 50, 50, 200);

            RendererManager.DrawFilledRectangle(new RectangleF(this.position.X, this.position.Y, this.buttonSize.X, this.buttonSize.Y), this.IsMouseUnderButton() ? backgroundColor.SetAlpha(255) : backgroundColor);
            RendererManager.DrawText(this.name, this.textPosition, Color.DeepSkyBlue, "Arial", this.textSize);
        }
Esempio n. 2
0
        protected override void Draw()
        {
            base.Draw();

            //abilities
            var startPosition = new Vector2(
                (this.Position.X + this.Size.X) - this.MenuStyle.TextureHeroSize.X - 4,
                this.Position.Y + ((this.Size.Y - this.MenuStyle.TextureHeroSize.Y) / 2.2f));

            foreach (var ability in this.heroes.Reverse())
            {
                RendererManager.DrawFilledRectangle(
                    new RectangleF(
                        startPosition.X - 1.5f,
                        startPosition.Y - 1.5f,
                        this.MenuStyle.TextureHeroSize.X + 3,
                        this.MenuStyle.TextureHeroSize.Y + 3),
                    Color.Zero,
                    ability.Value ? Color.LightGreen : Color.Red,
                    0);

                RendererManager.DrawTexture(
                    ability.Key,
                    new RectangleF(startPosition.X, startPosition.Y, this.MenuStyle.TextureHeroSize.X, this.MenuStyle.TextureHeroSize.Y),
                    TextureType.Unit);

                startPosition -= new Vector2(this.MenuStyle.TextureHeroSize.X + 4, 0);
            }
        }
Esempio n. 3
0
        private static void OnDraw()
        {
            if (!GameManager.IsInGame || !sideMessages.Any())
            {
                return;
            }

            if (LastTick != null)
            {
                for (var i = 0; i < sideMessages.Count; i++)
                {
                    var message = sideMessages.ElementAt(i).Value;
                    if (!message.Visible)
                    {
                        continue;
                    }

                    var span = TickCount - message.CreateTick;
                    if (span < message.EnterTime)
                    {
                        message.SetX(RendererManager.ScreenSize.X - (message.Size.X - 1) * span / message.EnterTime);
                    }
                    else if (span < message.EnterTime + message.StayTime)
                    {
                        message.SetX(RendererManager.ScreenSize.X - message.Size.X + 1);
                    }
                    else if (span < message.EnterTime + message.StayTime + message.ExitTime)
                    {
                        message.SetX(RendererManager.ScreenSize.X - (message.Size.X - 1) * (message.EnterTime + message.StayTime + message.ExitTime - span) / message.ExitTime);
                    }
                    else
                    {
                        message.DestroyMessage();
                    }
                }

                for (var i = 0; i < sideMessages.Count; i++)
                {
                    var message = sideMessages.ElementAt(i).Value;
                    if (!message.Visible)
                    {
                        continue;
                    }

                    //Drawing.DrawRect(message.MessagePosition, message.Size, message.BackgroundColor);
                    //Drawing.DrawRect(message.MessagePosition, message.Size, message.BackgroundOutlineColor, true);

                    RendererManager.DrawFilledRectangle(new RectangleF(message.MessagePosition.X, message.MessagePosition.Y, message.Size.X, message.Size.Y), message.BackgroundColor, message.BackgroundColor, 0);
                    RendererManager.DrawRectangle(new RectangleF(message.MessagePosition.X, message.MessagePosition.Y, message.Size.X, message.Size.Y), message.BackgroundOutlineColor, 1);

                    foreach (var component in message.components)
                    {
                        component.Value.Draw();
                    }
                }
            }

            LastTick = (int?)TickCount;
        }
        private void OnRendererManagerDraw()
        {
            var color = new Color(BloodseekerRuptureMenu.RedItem, BloodseekerRuptureMenu.GreenItem, BloodseekerRuptureMenu.BlueItem, BloodseekerRuptureMenu.AlphaItem);

            var screenSize = RendererManager.ScreenSize;

            RendererManager.DrawFilledRectangle(new RectangleF(0, 0, screenSize.X, screenSize.Y), Color.Zero, color, 0);
        }
Esempio n. 5
0
        protected override void Draw()
        {
            base.Draw();

            //rectangle
            RendererManager.DrawFilledRectangle(
                new RectangleF(
                    (this.Position.X + this.Size.X) - this.MenuStyle.TextureArrowSize - this.MenuStyle.RightIndent,
                    this.Position.Y + ((this.Size.Y - this.MenuStyle.TextureArrowSize) / 2.2f),
                    this.MenuStyle.TextureArrowSize,
                    this.MenuStyle.TextureArrowSize),
                this.IsEnabled ? Color.White : this.MenuStyle.BackgroundColor,
                new Color(50, 50, 50, 255),
                2);
        }
        private void OnDraw()
        {
            if (this.TimeLapse?.CanBeCasted() != true)
            {
                return;
            }

            var hero       = this.Owner.Hero;
            var hpPosition = hero.HealthBarPosition;

            if (hpPosition.IsZero)
            {
                return;
            }

            var time   = GameManager.RawGameTime;
            var health = hero.Health;
            var values = this.healthTime.OrderBy(x => x.Key).ToList();

            var restore = values.Find(x => x.Key + 5f > time).Value;

            if (restore <= health)
            {
                return;
            }

            var restorePercentage = restore / hero.MaximumHealth;
            var healthBarSize     = hero.HealthBarSize;
            var start             = hpPosition + new Vector2(0, healthBarSize.Y * 0.7f) + this.killSteal.AdditionalOverlayPosition;
            var size = (healthBarSize * new Vector2(restorePercentage, 0.3f)) + this.killSteal.AdditionalOverlayPosition;

            RendererManager.DrawFilledRectangle(new RectangleF(start.X, start.Y, size.X, size.Y), Color.DarkOliveGreen);
            RendererManager.DrawRectangle(new RectangleF(start.X - 1, start.Y - 1, size.X + 1, size.Y + 1), Color.Black);

            var restoreEarly = values.Find(x => x.Key + 4f > time).Value;

            if (restoreEarly < restore)
            {
                var losePercentage = (restore - restoreEarly) / hero.MaximumHealth;
                var size2          = (healthBarSize * new Vector2(losePercentage, 0.3f)) + this.killSteal.AdditionalOverlayPosition;
                var start2         = hpPosition + new Vector2(Math.Max(size.X - size2.X, 0), healthBarSize.Y * 0.7f)
                                     + this.killSteal.AdditionalOverlayPosition;

                RendererManager.DrawFilledRectangle(new RectangleF(start2.X, start2.Y, size2.X, size2.Y), Color.LightGreen);
                RendererManager.DrawRectangle(new RectangleF(start2.X - 1, start2.Y - 1, size2.X + 1, size2.Y + 1), Color.Black);
            }
        }
Esempio n. 7
0
        protected virtual void Draw()
        {
            //background
            RendererManager.DrawLine(
                this.Position + new Vector2(0, this.Size.Y / 2),
                this.Position + new Vector2(this.Size.X, this.Size.Y / 2),
                this.MenuStyle.BackgroundColor,
                this.Size.Y);

            var pct = Math.Min(GameManager.RawGameTime - this.hooverTime, 0.3f) / 0.3f;

            int       alpha;
            const int MinAlpha = 170;

            if (this.isHoovered || (this is Menu menu && !menu.IsCollapsed))
            {
                alpha = (int)((pct * (255 - MinAlpha)) + MinAlpha);

                //tooltip
                if (!string.IsNullOrEmpty(this.Tooltip))
                {
                    var tooltipTextSize = RendererManager.MeasureText(this.Tooltip, this.MenuStyle.Font, this.MenuStyle.TooltipTextSize);

                    RendererManager.DrawFilledRectangle(
                        new RectangleF(
                            this.Position.X + this.Size.X + this.MenuStyle.LeftIndent,
                            this.Position.Y + (tooltipTextSize.Y / 4f),
                            tooltipTextSize.X + this.MenuStyle.LeftIndent + this.MenuStyle.RightIndent,
                            tooltipTextSize.Y),
                        new Color(5, 5, 5, 200),
                        new Color(50, 50, 50, 255),
                        1);

                    RendererManager.DrawText(
                        this.Tooltip,
                        new RectangleF(
                            this.Position.X + this.Size.X + (this.MenuStyle.LeftIndent * 2),
                            this.Position.Y + (tooltipTextSize.Y / 4f),
                            tooltipTextSize.X,
                            this.Size.Y),
                        Color.White,
                        FontFlags.Left,
                        this.MenuStyle.TooltipTextSize);
                }
            }
Esempio n. 8
0
        private void DrawTownPortalScroll(Hero hero, Vector2 position, Vector2 size, float mana)
        {
            var tp = hero.Inventory.TownPortalScroll;

            if (tp != null)
            {
                RendererManager.DrawTexture(tp.Name, new RectangleF(position.X, position.Y, size.X, size.Y), TextureType.RoundAbility, true);

                var manaCost   = tp.ManaCost;
                var enoughMana = mana >= manaCost;

                var cooldown = Math.Ceiling(tp.Cooldown);
                if (cooldown > 0 || !enoughMana)
                {
                    RendererManager.DrawFilledRectangle(new RectangleF(position.X, position.Y, size.X, size.Y), Color.Zero, enoughMana ? new Color(40, 40, 40, 180) : new Color(25, 25, 130, 190), 0);
                }
                else
                {
                    RendererManager.DrawFilledRectangle(new RectangleF(position.X, position.Y, size.X, size.Y), Color.Zero, new Color(0, 0, 0, 100), 0);
                }

                if (cooldown > 0)
                {
                    var cooldownText = Math.Min(cooldown, 99).ToString(CultureInfo.InvariantCulture);
                    var cooldownSize = cooldown > 9 ? size.Y * 0.65f : size.Y * 0.7f;
                    var textSize     = RendererManager.MeasureText(cooldownText, cooldownSize);
                    var pos          = position + new Vector2(size.X / 2 - textSize.X / 2, size.Y / 2 - textSize.Y / 2);

                    RendererManager.DrawText(cooldownText, pos, Color.WhiteSmoke, cooldownSize);
                }

                if (!enoughMana && cooldown <= 0)
                {
                    var manaCostText = Math.Min(Math.Ceiling(manaCost - mana), 99).ToString(CultureInfo.InvariantCulture);
                    var manaCostSize = size.Y * 0.65f;
                    var textSize     = RendererManager.MeasureText(manaCostText, manaCostSize);
                    var pos          = position + new Vector2(size.X / 2 - textSize.X / 2, size.Y / 2 - textSize.Y / 2);

                    RendererManager.DrawText(manaCostText, pos, Color.LightBlue, manaCostSize);
                }
            }
        }
Esempio n. 9
0
        private void RendererManagerOnDraw()
        {
            if (ColorScreen)
            {
                var color = new Color(
                    SpiritBreakerChargeMenu.RedItem.Value,
                    SpiritBreakerChargeMenu.GreenItem.Value,
                    SpiritBreakerChargeMenu.BlueItem.Value,
                    SpiritBreakerChargeMenu.AlphaItem.Value);

                var screenSize = RendererManager.ScreenSize;
                RendererManager.DrawFilledRectangle(new RectangleF(0, 0, screenSize.X, screenSize.Y), Color.Zero, color, 0);
            }

            if (OnMinimap)
            {
                var startPos = startChargePosition.WorldToMinimap();
                var endPos   = endChargePosition.WorldToMinimap();
                RendererManager.DrawLine(startPos, endPos, Color.WhiteSmoke, 1);
                RendererManager.DrawTexture(@"mini_heroes\npc_dota_hero_spirit_breaker.png", new RectangleF(startPos.X - 11, startPos.Y - 13, 24, 24));
            }
        }
Esempio n. 10
0
        protected override void ManaBar(float mana, float maximumMana, float manaPerc, Vector2 hpBarPosition, float manaBarSizeY)
        {
            if (!ManaBarMenu.ManaBarItem)
            {
                return;
            }

            var manaBarPosition = ManaBarUtils.ManaBarPosition(hpBarPosition);
            var pos             = ManaBarUtils.ManaBarBackPosition(manaBarPosition);
            var size            = new Vector2(HUDInfo.HpBarSizeX - 1, manaBarSizeY + 3);
            var size2           = new Vector2(ManaBarUtils.ManaBarSizeX(manaPerc), manaBarSizeY);

            RendererManager.DrawFilledRectangle(new RectangleF(pos.X, pos.Y, size.X, size.Y), Color.Zero, Color.Black, 0);
            RendererManager.DrawTexture("Divine.BeAware.Resources.Textures.ui_manabar.png", new RectangleF(manaBarPosition.X, manaBarPosition.Y, size2.X, size2.Y));

            if (ManaBarMenu.ManaBarValueItem)
            {
                var manaText    = $"{ (int)mana }/{ (int)maximumMana }";
                var sizeText    = 12.5f * HUDInfo.RatioPercentage;
                var measureText = RendererManager.MeasureText(manaText, sizeText);

                RendererManager.DrawText(manaText, ManaBarUtils.ManaBarValuePosition(manaBarPosition, measureText.X), Color.WhiteSmoke, sizeText);
            }
        }
Esempio n. 11
0
        protected override void OverlaySpells(IEnumerable <Ability> spells, Vector2 position, HeroId heroId, float mana, Vector2 extraSize)
        {
            foreach (var spell in spells)
            {
                if (spell.IsHidden)
                {
                    continue;
                }

                if (spell.IsInAbilityPhase)
                {
                    RendererManager.DrawTexture("Divine.BeAware.Resources.Textures.spell_phase.png", new RectangleF(position.X, position.Y, extraSize.X, extraSize.Y));
                }

                var level      = spell.Level;
                var manaCast   = spell.ManaCost;
                var enoughMana = mana >= manaCast;
                var cooldown   = spell.Cooldown;

                if (cooldown > 0 || !enoughMana || level <= 0)
                {
                    var color = level <= 0 ? new Color(10, 10, 10, 210) : (enoughMana ? new Color(40, 40, 40, 180) : new Color(25, 25, 130, 190));
                    RendererManager.DrawFilledRectangle(new RectangleF(position.X + 1, position.Y, extraSize.X - 1, extraSize.Y), color, color, 0);
                }

                var notinvospell = heroId != HeroId.npc_dota_hero_invoker || (spell.AbilitySlot != AbilitySlot.Slot_4 && spell.AbilitySlot != AbilitySlot.Slot_5);
                if (notinvospell)
                {
                    var levelText = level.ToString();
                    var textSize  = RendererManager.MeasureText(levelText, extraSize.X / 2);

                    RendererManager.DrawFilledRectangle(new RectangleF(position.X + 1, position.Y, textSize.X + 2, textSize.Y + 1), Color.Zero, new Color(0, 0, 0, 220), 0);
                    RendererManager.DrawText(levelText, new Vector2(position.X + 1, position.Y), new Color(168, 168, 168), extraSize.X / 2);
                }

                if (cooldown > 0)
                {
                    var cooldownText = (cooldown > 1 ? Math.Min(Math.Ceiling(cooldown), 99) : Math.Round(cooldown, 1)).ToString();
                    var cooldownSize = extraSize.X / 2 + 3;
                    var textSize     = RendererManager.MeasureText(cooldownText, cooldownSize);

                    RendererManager.DrawText(cooldownText, position + new Vector2(extraSize.X / 2 - textSize.X / 2, (extraSize.Y / 2) - (textSize.Y / 2)), Color.WhiteSmoke, cooldownSize);
                }

                if (!enoughMana && cooldown <= 0)
                {
                    var manaText = Math.Min(Math.Ceiling(manaCast - mana), 999).ToString(CultureInfo.InvariantCulture);
                    var textSize = RendererManager.MeasureText(manaText, extraSize.X / 2 + 1);

                    Vector2 pos;
                    if (!notinvospell)
                    {
                        pos = position + new Vector2(extraSize.X / 2 - textSize.X / 2, (float)((extraSize.Y / 1.5) - (textSize.Y / 2)));
                    }
                    else
                    {
                        pos = position + new Vector2((float)(extraSize.X / 1.5 - textSize.X / 2), (float)((extraSize.Y / 1.5) - (textSize.Y / 2)));
                    }

                    RendererManager.DrawText(manaText, pos, Color.LightBlue, extraSize.X / 2 + 1);
                }

                RendererManager.DrawRectangle(new RectangleF(position.X, position.Y, extraSize.X + 1, extraSize.Y), Color.Black, 1);

                position += new Vector2(extraSize.X, 0);
            }
        }
Esempio n. 12
0
        protected override void EmemyItemPanel()
        {
            if (EmemyItemPanelMenu.EmemyItemPanelItem)
            {
                var size  = EmemyItemPanelMenu.SizeItem.Value;
                var sizeX = 20 + size * 0.4f;
                var sizeY = sizeX / 1.30f;

                var panelPosition = new Vector2(EmemyItemPanelMenu.PositionXItem, EmemyItemPanelMenu.PositionYItem);
                var panelSize     = new Vector2(sizeX * 7.31f, 5 * (sizeY + 2) + 2);
                PanelMove.Size = new Vector2(panelSize.X + 9, panelSize.Y + 9);

                RendererManager.DrawTexture("Divine.BeAware.Resources.Textures.item_panel.png", new RectangleF(panelPosition.X - 2, panelPosition.Y, panelSize.X, panelSize.Y));

                var itemPosition = panelPosition;

                foreach (var hero in Heroes)
                {
                    itemPosition += new Vector2(0, 2);

                    RendererManager.DrawTexture(hero.Name, new RectangleF(itemPosition.X, itemPosition.Y, sizeX * 1.36f, sizeY), TextureType.Unit, true);

                    var mana        = hero.Mana;
                    var maximumMana = hero.MaximumMana;

                    DrawTownPortalScroll(hero, itemPosition + new Vector2(sizeX * 0.85f, sizeY * 0.35f), new Vector2(sizeY * 0.65f), mana);

                    itemPosition += new Vector2(sizeX * 1.4f, 0);

                    foreach (var item in hero.Inventory.MainItems)
                    {
                        var itemSize = new Vector2(sizeX, sizeY);
                        RendererManager.DrawTexture(item.Name, new RectangleF(itemPosition.X, itemPosition.Y, itemSize.X, itemSize.Y), TextureType.Item, true);

                        var manaCost   = item.ManaCost;
                        var enoughMana = mana >= manaCost;
                        var cooldown   = Math.Ceiling(item.CooldownInFog);
                        if (cooldown > 0 || !enoughMana)
                        {
                            RendererManager.DrawFilledRectangle(new RectangleF(itemPosition.X, itemPosition.Y, itemSize.X, itemSize.Y), Color.Zero, enoughMana ? new Color(40, 40, 40, 180) : new Color(25, 25, 130, 190), 0);
                        }
                        else
                        {
                            RendererManager.DrawFilledRectangle(new RectangleF(itemPosition.X, itemPosition.Y, itemSize.X, itemSize.Y), Color.Zero, new Color(0, 0, 0, 100), 0);
                        }


                        if (cooldown > 0)
                        {
                            var cooldownText = Math.Min(cooldown, 99).ToString(CultureInfo.InvariantCulture);
                            var cooldownSize = itemSize.Y - 1;
                            var textSize     = RendererManager.MeasureText(cooldownText, cooldownSize);
                            var pos          = itemPosition + new Vector2(itemSize.X / 2 - textSize.X / 2, (itemSize.Y / 2) - (textSize.Y / 2));

                            RendererManager.DrawText(cooldownText, pos, Color.WhiteSmoke, cooldownSize);
                        }

                        if (!enoughMana && cooldown <= 0)
                        {
                            var manaCostText = Math.Min(Math.Ceiling(manaCost - mana), 999).ToString(CultureInfo.InvariantCulture);
                            var textSize     = RendererManager.MeasureText(manaCostText, itemSize.Y - 1);
                            var pos          = itemPosition + new Vector2(itemSize.X / 2 - textSize.X / 2, (itemSize.Y / 2) - (textSize.Y / 2));

                            RendererManager.DrawText(manaCostText, pos, Color.LightBlue, itemSize.Y - 1);
                        }

                        var itemId = item.Id;
                        if ((item.IsRequiringCharges || itemId == AbilityId.item_bottle || itemId == AbilityId.item_ward_dispenser || itemId == AbilityId.item_ward_observer || itemId == AbilityId.item_ward_sentry) && cooldown <= 0)
                        {
                            var currentCharges = item.CurrentCharges.ToString();
                            var tSize          = itemSize.Y / 2;
                            var textSize       = RendererManager.MeasureText(currentCharges, tSize);
                            var tPos           = itemPosition + new Vector2(itemSize.X - textSize.X - 1, itemSize.Y - textSize.Y);

                            RendererManager.DrawFilledRectangle(new RectangleF(tPos.X - 1, tPos.Y, textSize.X + 1, textSize.Y), Color.Zero, new Color(0, 0, 0, 220), 0);
                            RendererManager.DrawText(currentCharges, tPos, new Color(168, 168, 168), tSize);

                            var secondcharges = item.SecondaryCharges;
                            if (secondcharges > 0)
                            {
                                tPos           = itemPosition + new Vector2(2, itemSize.Y - textSize.Y);
                                currentCharges = secondcharges.ToString();
                                tSize          = itemSize.Y - 1;
                                var textSize1 = RendererManager.MeasureText(currentCharges, tSize);

                                RendererManager.DrawFilledRectangle(new RectangleF(tPos.X - 1, tPos.Y, textSize.X + 1, textSize.Y + 1), Color.Zero, new Color(0, 0, 0, 220), 0);
                                RendererManager.DrawText(currentCharges, tPos, new Color(168, 168, 168), tSize);
                            }
                        }

                        itemPosition += new Vector2(sizeX - 1, 0);
                    }

                    itemPosition = new Vector2(panelPosition.X, sizeY + itemPosition.Y);
                }

                if (PanelMove.ActivateMove)
                {
                    var text     = PanelMove.Time.ToString();
                    var sizeText = RendererManager.MeasureText(text, panelSize.Y);

                    RendererManager.DrawText(text, panelPosition - new Vector2((sizeText.X * 0.5f) - (panelSize.X / 2), 0), new Color(255, 255, 255, 50), panelSize.X / 2);
                    RendererManager.DrawRectangle(new RectangleF(panelPosition.X - 5, panelPosition.Y - 5, PanelMove.Size.X, PanelMove.Size.Y), Color.WhiteSmoke, 1);
                }
            }
        }
Esempio n. 13
0
        private void DrawMap()
        {
            try
            {
                var       center    = GameManager.MousePosition;
                const int CellCount = 40;
                for (var i = 0; i < CellCount; ++i)
                {
                    for (var j = 0; j < CellCount; ++j)
                    {
                        Vector2 p;
                        p.X = (this.pathfinder.NavMesh.CellSize * (i - (CellCount / 2))) + center.X;
                        p.Y = (this.pathfinder.NavMesh.CellSize * (j - (CellCount / 2))) + center.Y;
                        Color color;

                        var isFlying = this.owner.Hero.MoveCapability == MoveCapability.Fly ||
                                       (this.owner.Hero.UnitState & UnitState.Flying) != 0;
                        var flag = this.pathfinder.NavMesh.GetCellFlags(p);
                        if (!isFlying && (flag & MapMeshCellFlags.Walkable) != 0)
                        {
                            color = (flag & MapMeshCellFlags.Tree) != 0 ? SharpDX.Color.Purple : SharpDX.Color.Green;
                            if ((flag & MapMeshCellFlags.GridFlagObstacle) != 0)
                            {
                                color = Color.Pink;
                            }
                        }
                        else if (isFlying && (flag & MapMeshCellFlags.MovementBlocker) == 0)
                        {
                            color = Color.Green;
                        }
                        else
                        {
                            color = Color.Red;
                        }

                        RendererManager.DrawFilledRectangle(new RectangleF(i * 10, 50 + ((CellCount - j - 1) * 10), 9, 9), color);
                    }
                }

                this.pathfinder.NavMesh.GetCellPosition(this.owner.Hero.Position - center, out var heroX, out var heroY);
                heroX += CellCount / 2;
                heroY += CellCount / 2;

                if (heroX >= 0 && heroX < CellCount && heroY >= 0 && heroY < CellCount)
                {
                    RendererManager.DrawFilledRectangle(new RectangleF(heroX * 10, 50 + ((CellCount - heroY - 1) * 10), 9, 9), Color.Blue);
                }

                //this.pathfinder.NavMesh.GetCellPosition(GameManager.MousePosition - center, out var mouseX, out var mouseY);
                //mouseX += CellCount / 2;
                //mouseY += CellCount / 2;

                //if (mouseX >= 0 && mouseX < CellCount && mouseY >= 0 && mouseY < CellCount)
                //{
                //    Drawing.DrawRect(
                //        new Vector2(mouseX * 10, 50 + ((CellCount - mouseY - 1) * 10)),
                //        new Vector2(9),
                //        SharpDX.Color.White,
                //        false);
                //}
            }
            catch (Exception e)
            {
                Logger.Warn(e.ToString());
            }
        }
Esempio n. 14
0
        private void DrawAbilities()
        {
            var abilities = this.abilityBuilder.Abilities;
            var maxLevel  = abilities.Max(x => x.LearnLevel);

            var build = new Dictionary <uint, LearnableAbility>();

            for (var i = 1u; i < maxLevel; i++)
            {
                var currentLevelAbilities = abilities.Where(
                    x => x.LearnLevel == i && this.abilityBuilder.IsLearnable(
                        x,
                        i,
                        i,
                        (uint)build.Count(z => z.Value.Ability == x.Ability)))
                                            .ToList();

                if (currentLevelAbilities.Count == 0)
                {
                    continue;
                }

                var ability = this.abilitiesType.Selected == BuildType.WinRate
                                  ? currentLevelAbilities.OrderByDescending(x => x.WinRate).ThenByDescending(x => x.PickRate).First()
                                  : currentLevelAbilities.OrderByDescending(x => x.PickRate).First();

                build.Add(i, ability);
            }

            var ratio           = Hud.Info.ScreenRatio;
            var xStart          = Hud.Info.ScreenSize.X * 0.35f;
            var yStart          = Hud.Info.ScreenSize.Y * 0.55f;
            var uniqueAbilities = build.Values.GroupBy(x => x.Ability).Select(x => x.First()).OrderBy(x => x.Ability.AbilitySlot).ToList();
            var positions       = new Dictionary <Ability, float>();

            RendererManager.DrawFilledRectangle(
                new RectangleF(xStart - 2, yStart, ((build.Count + 1) * 48 * ratio) + 2, uniqueAbilities.Count * 40 * ratio),
                new Color(75, 75, 75, 175));

            for (var i = 0; i < uniqueAbilities.Count; i++)
            {
                //Drawing.DrawRect(
                //    new Vector2(xStart, yStart + (i * 40 * ratio)),
                //    new Vector2(45 * ratio, 40 * ratio),
                //    uniqueAbilities[i].Texture);
                positions.Add(uniqueAbilities[i].Ability, yStart + (i * 40 * ratio));
                RendererManager.DrawFilledRectangle(
                    new RectangleF(xStart - 2, (yStart - 2) + (i * 40 * ratio), (build.Count + 1) * 48 * ratio, 2),
                    Color.Silver);
            }

            RendererManager.DrawFilledRectangle(
                new RectangleF(xStart - 2, (yStart - 2) + (uniqueAbilities.Count * 40 * ratio), (build.Count + 1) * 48 * ratio, 2),
                Color.Silver);

            for (var i = 1u; i <= build.Count; i++)
            {
                var size = RendererManager.MeasureText(i.ToString(), "Arial", 35 * ratio);

                RendererManager.DrawFilledRectangle(
                    new RectangleF((xStart - 2) + (i * 48 * ratio), yStart - 2, 2, uniqueAbilities.Count * 40 * ratio),
                    Color.Silver);

                if (!build.TryGetValue(i, out var buildAbility))
                {
                    continue;
                }

                RendererManager.DrawText(
                    i.ToString(),
                    new Vector2(
                        xStart + (45 * ratio) + ((i - 1) * 48 * ratio) + (((48 * ratio) - size.X) / 2),
                        positions[buildAbility.Ability]),
                    Color.White,
                    "Arial",
                    35 * ratio);
            }

            RendererManager.DrawFilledRectangle(
                new RectangleF((xStart - 2) + ((build.Count + 1) * 48 * ratio), yStart - 2, 2, (uniqueAbilities.Count * 40 * ratio) + 2),
                Color.Silver);

            RendererManager.DrawFilledRectangle(
                new RectangleF(xStart - 2, yStart - 2, 2, (uniqueAbilities.Count * 40 * ratio) + 2),
                Color.Silver);
        }
Esempio n. 15
0
        public SuicideDamage(TechiesCrappahilationPaid main)
        {
            _main = main;
            var suicide = main.MenuManager.VisualSubMenu.CreateMenu("Suicide");

            ShowSuicideDamage = suicide.CreateSwitcher("Show suicide damage on heroes", true);
            SuicideType       = suicide.CreateSwitcher("Suicide Draw type" /*, new StringList("text", "icon")*/);
            var settings = suicide.CreateMenu("Settings");

            PositionX = settings.CreateSlider("extra position x", 0, -100, 100);
            PositionY = settings.CreateSlider("extra position y", 0, -100, 100);
            TextSize  = settings.CreateSlider("text size", 13, 5, 25);

            PlayerPositions = new Dictionary <Hero, Vector2>();

            RendererManager.Draw += () =>
            {
                foreach (var enemy in TargetManager.Targets)
                {
                    if (enemy != null && enemy.IsValid)
                    {
                        if (PlayerPositions.ContainsKey(enemy))
                        {
                            PlayerPositions[enemy] = CustomHUDInfo.GetHpBarPosition(enemy);
                        }
                        else
                        {
                            PlayerPositions.Add(enemy, CustomHUDInfo.GetHpBarPosition(enemy));
                        }
                    }
                }
            };

            RendererManager.Draw += () =>
            {
                if (!ShowSuicideDamage.Value)
                {
                    return;
                }
                foreach (var g in PlayerPositions.ToList())
                {
                    var enemy = g.Key;
                    if (!_main.Updater.BombDamageManager.DamageDictionary.ContainsKey(enemy.HeroId) ||
                        !enemy.IsVisible || !enemy.IsAlive)
                    {
                        continue;
                    }
                    var pos = g.Value;
//                    var w2s = Drawing.WorldToScreen(pos);
                    if (pos.IsZero)
                    {
                        continue;
                    }
                    var drawPos = pos;
                    // if (SuicideType.Value.SelectedIndex == 0)
                    if (SuicideType.Value)
                    {
                        var damage = Math
                                     .Round(_main.Updater.BombDamageManager.DamageDictionary[enemy.HeroId].HealthAfterSuicide, 1)
                                     .ToString(CultureInfo.InvariantCulture);
                        var size = RendererManager.MeasureText(damage, TextSize);
                        drawPos.X -= size.X + 5;
                        RendererManager.DrawFilledRectangle(
                            new RectangleF(drawPos.X - 1 + PositionX, drawPos.Y + PositionY, size.X, size.Y),
                            Color.Black,
                            Color.Black, 1);
                        RendererManager.DrawText(damage, drawPos + new Vector2(PositionX, PositionY), Color.White,
                                                 TextSize);
                    }
                    else
                    {
                        var willDie = _main.Updater.BombDamageManager.DamageDictionary[enemy.HeroId].HeroWillDieSuicide;
                        var rect    = new RectangleF(drawPos.X - 26 + PositionX, drawPos.Y + PositionY, TextSize * 2 - 2,
                                                     TextSize * 2 - 2);
                        RendererManager.DrawTexture($"{AbilityId.techies_suicide}_icon", rect);
                        var clr = willDie ? Color.LimeGreen : Color.Red;
                        RendererManager.DrawFilledRectangle(rect,
                                                            new SharpDX.Color((float)clr.R, clr.G, clr.B, 35),
                                                            willDie ? Color.LimeGreen : Color.Red, 0.5f);
                    }
                }
            };
        }
Esempio n. 16
0
        public void DrawManaBar(
            Rectangle9 hpBar,
            int mpPositionY,
            int mpSizeY,
            bool showMpRestore,
            bool showMpAmount,
            int manaTextSize)
        {
            try
            {
                var mana    = this.unit.Mana;
                var maxMana = this.unit.MaximumMana;

                var mpBar = new RectangleF(
                    hpBar.BottomLeft.X,
                    hpBar.BottomLeft.Y + mpPositionY,
                    hpBar.Size.Width * (mana / maxMana),
                    hpBar.Size.Height + mpSizeY);

                var borderBar = new RectangleF(
                    mpBar.X - this.borderSize,
                    mpBar.Y - this.borderSize,
                    hpBar.Width + (this.borderSize * 2),
                    mpBar.Height + (this.borderSize * 2));

                RendererManager.DrawFilledRectangle(borderBar, this.borderColor);
                RendererManager.DrawFilledRectangle(mpBar, this.manaColor);

                if (showMpRestore)
                {
                    var restore = 0f;

                    foreach (var ability in this.manaRestore)
                    {
                        if (!ability.IsValid || !ability.CanBeCasted(false))
                        {
                            continue;
                        }

                        if (ability is EnchantedMango mango)
                        {
                            restore += ability.GetManaRestore(this.unit) * mango.Charges;
                        }
                        else
                        {
                            restore += ability.GetManaRestore(this.unit);
                        }
                    }

                    restore = Math.Min(restore, maxMana - mana);

                    if (restore > 0)
                    {
                        var restoreBar = new RectangleF(
                            mpBar.TopRight.X,
                            mpBar.TopRight.Y,
                            hpBar.Width * (restore / maxMana),
                            mpBar.Height);
                        RendererManager.DrawFilledRectangle(restoreBar, this.manaRestoreColor);
                    }
                }

                if (showMpAmount)
                {
                    RendererManager.DrawText(
                        mana.ToString("N0"),
                        borderBar,
                        Color.White,
                        FontFlags.Center | FontFlags.VerticalCenter,
                        manaTextSize);
                }
            }
            catch (InvalidOperationException)
            {
                //ignore
            }
            catch (Exception e)
            {
                Logger.Error(e);
            }
        }
Esempio n. 17
0
        private void RenderManagerOnDraw()
        {
            var mousePos = GetMousePosition;

            foreach (var bomb in _main.Updater.BombManager.RemoteMines.Where(x =>
                                                                             x.Owner.IsValid && x.Owner.IsAlive && x.Stacker.IsActive))
            {
                if (_main.MenuManager.StackDontDrawSolo && bomb.Stacker.Counter == 1)
                {
                    continue;
                }
                var topPos = CustomHUDInfo.GetHpBarPosition(bomb.Owner);
                if (topPos.IsZero)
                {
                    continue;
                }
                var size                = new Vector2(CustomHUDInfo.HpBarSizeX, CustomHUDInfo.HpBarSizeY);
                var text                = bomb.Stacker.Counter.ToString();
                var textSize            = RendererManager.MeasureText(text, 30);
                var textPos             = topPos + new Vector2(size.X / 2 - textSize.X / 2, -size.Y * 2);
                var extraRectangleSizeX = 50;
                var extraRectangleSizeY = textSize.Y / 2;
                var rectWidth           = textSize.X + extraRectangleSizeX * 2;
                var boxSize             = new Vector2(rectWidth / 5);
                var rectangle           = new RectangleF(textPos.X - extraRectangleSizeX, textPos.Y - extraRectangleSizeY,
                                                         rectWidth + 2, textSize.Y + boxSize.X);

                if (IsIn(rectangle, mousePos))
                {
                    RendererManager.DrawFilledRectangle(rectangle, Color.White, new SharpDX.Color(200, 10, 10, 10), 1);
                    RendererManager.DrawText(text, new Vector2(rectangle.X + rectangle.Width / 2 - textSize.X / 2, rectangle.Y),

                                             bomb.UnderTrueSight ? Color.OrangeRed : Color.White, 30);

                    var count = 0;
                    foreach (var target in TargetManager.Targets.GroupBy(x => x.HeroId).ToList())
                    {
                        var boxPos  = new Vector2(rectangle.X + count++ *boxSize.X, rectangle.Y + textSize.Y);
                        var boxRect = new RectangleF(boxPos.X + 1, boxPos.Y - 1, boxSize.X, boxSize.Y);
                        RendererManager.DrawTexture(target.Key, new RectangleF(boxPos.X, boxPos.Y, boxSize.X, boxSize.Y), UnitTextureType.MiniUnit);
                        if (bomb.Stacker.DetonateDict.TryGetValue(target.Key, out var isEnable))
                        {
                            RendererManager.DrawRectangle(boxRect, isEnable ? Color.Green : Color.OrangeRed, 1);
                        }
                        else
                        {
                            bomb.Stacker.DetonateDict.Add(target.Key, true);
                        }

                        if (IsIn(boxRect, mousePos))
                        {
                            if (IsButtonClicked)
                            {
                                IsButtonClicked = false;
                                bomb.Stacker.DetonateDict[target.Key] = !bomb.Stacker.DetonateDict[target.Key];
                            }
                        }
                        else
                        {
                            RendererManager.DrawFilledRectangle(boxRect, Color.White, new SharpDX.Color(100, 50, 50, 50), 0);
                        }
                    }
                }
                else
                {
                    RendererManager.DrawText(text, textPos, bomb.UnderTrueSight ? Color.OrangeRed : Color.White, 30);
                }
            }
        }
Esempio n. 18
0
        private void OnDraw()
        {
            try
            {
                var heroPosition = this.position.Value;

                foreach (var unit in this.units)
                {
                    if (!unit.IsValid)
                    {
                        continue;
                    }

                    RendererManager.DrawTexture(unit.TextureName, new RectangleF(heroPosition.X, heroPosition.Y, this.heroSize.X, this.heroSize.Y), TextureType.Unit);

                    var borderPosition = new Rectangle9(
                        heroPosition.X + this.heroSize.X + 1,
                        heroPosition.Y,
                        this.itemSize.X,
                        this.itemSize.Y);

                    for (var i = 0; i < 7; i++)
                    {
                        RendererManager.DrawTexture("o9k.inventory_item_bg", borderPosition + new Vector2((this.itemSize.X + 1) * i, 0));
                    }

                    foreach (var ability in unit.Abilities.OrderBy(x => x.Id == AbilityId.item_tpscroll))
                    {
                        if (ability.Id == AbilityId.item_tpscroll)
                        {
                            var tpPosition = new Rectangle9(
                                heroPosition + new Vector2(this.heroSize.X * 0.65f, this.heroSize.Y * 0.4f),
                                this.itemSize.X * 0.6f,
                                this.itemSize.X * 0.6f);

                            RendererManager.DrawTexture("o9k.outline", tpPosition + 1);
                            RendererManager.DrawTexture(ability.TextureName, tpPosition, TextureType.RoundAbility);

                            if (this.showCooldown)
                            {
                                var cooldown = ability.RemainingCooldown;
                                if (cooldown > 0)
                                {
                                    RendererManager.DrawTexture("o9k.inventory_tp_cd_bg", tpPosition);
                                    RendererManager.DrawText(
                                        Math.Ceiling(cooldown).ToString("N0"),
                                        tpPosition,
                                        Color.White,
                                        FontFlags.Center | FontFlags.VerticalCenter,
                                        this.size * 0.35f);
                                }
                            }

                            continue;
                        }

                        if (!ability.IsItem || !ability.IsUsable)
                        {
                            continue;
                        }

                        var itemPosition = borderPosition - 4;

                        RendererManager.DrawTexture(ability.TextureName, itemPosition, TextureType.Ability);

                        if (this.showCharges && ability.IsDisplayingCharges)
                        {
                            var chargesText     = ability.BaseItem.CurrentCharges.ToString("N0");
                            var chargesSize     = RendererManager.MeasureText(chargesText, this.size * 0.35f);
                            var chargesPosition = itemPosition.SinkToBottomRight(chargesSize.X * 1.1f, chargesSize.Y * 0.8f);

                            RendererManager.DrawFilledRectangle(chargesPosition, Color.Black);
                            RendererManager.DrawText(chargesText, chargesPosition, Color.White, FontFlags.Left, this.size * 0.35f);
                        }

                        if (this.showCooldown)
                        {
                            var cooldown = ability.RemainingCooldown;
                            if (cooldown > 0)
                            {
                                RendererManager.DrawTexture("o9k.inventory_item_cd_bg", itemPosition);
                                RendererManager.DrawText(
                                    Math.Ceiling(cooldown).ToString("N0"),
                                    itemPosition,
                                    Color.White,
                                    FontFlags.Center | FontFlags.VerticalCenter,
                                    this.size * 0.7f);
                            }
                        }

                        borderPosition += new Vector2(this.itemSize.X + 1, 0);
                    }

                    heroPosition += new Vector2(0, this.size + 1);
                }
            }
            catch (InvalidOperationException)
            {
                //ignore
            }
            catch (Exception e)
            {
                Logger.Error(e);
            }
        }
Esempio n. 19
0
        private void OnDraw()
        {
            try
            {
                foreach (var unitPair in this.unitDamage)
                {
                    var unit = unitPair.Key;
                    if (!unit.IsValid)
                    {
                        continue;
                    }

                    var hpBarPosition = unit.Unit.HealthBarPosition;
                    if (hpBarPosition.IsZero)
                    {
                        continue;
                    }

                    var damage       = unitPair.Value;
                    var hpBarSize    = unit.Unit.HealthBarSize;
                    var attackDamage = damage.AutoAttackDamage;
                    var health       = unit.Unit.Health;

                    if (this.menu.AttacksEnabled)
                    {
                        var attackDamagePct = attackDamage / unit.Unit.MaximumHealth;

                        Color color;
                        if (attackDamage > health)
                        {
                            color = unit.IsAlly ? Color.LawnGreen : Color.OrangeRed;
                        }
                        else
                        {
                            color = unit.IsAlly ? Color.DarkGreen : Color.DarkRed;
                        }

                        var bar = new Rectangle9(
                            hpBarPosition + new Vector2(this.menu.AttacksX, this.menu.AttacksY),
                            hpBarSize + new Vector2(this.menu.AttacksSizeX, this.menu.AttacksSizeY));

                        bar.Width *= Math.Min(attackDamagePct, unit.Unit.HealthPercentageBase);
                        RendererManager.DrawFilledRectangle(bar, color);
                    }

                    if (this.menu.AbilitiesEnabled)
                    {
                        var fullDamage = damage.AbilityDamage.Sum(x => x.Value);
                        if (fullDamage + attackDamage < health)
                        {
                            continue;
                        }

                        if (fullDamage > health)
                        {
                            var totalDamage   = 0;
                            var drawAbilities = new List <string>();

                            foreach (var damagePair in damage.AbilityDamage)
                            {
                                totalDamage += damagePair.Value;
                                drawAbilities.Add(damagePair.Key.Name);

                                if (totalDamage > health)
                                {
                                    break;
                                }
                            }

                            var count = drawAbilities.Count;
                            if (count > 0)
                            {
                                var barSize       = new Vector2(this.menu.AbilitiesSize * count, this.menu.AbilitiesSize);
                                var startPosition = hpBarPosition + new Vector2((hpBarSize.X / 2f) - (barSize.X / 2f), -35)
                                                    + new Vector2(this.menu.AbilitiesX, this.menu.AbilitiesY);

                                RendererManager.DrawRectangle(
                                    new RectangleF(startPosition.X, startPosition.Y, barSize.X, barSize.Y),
                                    Color.Green,
                                    5);

                                foreach (var ability in drawAbilities)
                                {
                                    RendererManager.DrawTexture(ability, new RectangleF(startPosition.X, startPosition.Y, barSize.Y, barSize.Y), TextureType.Ability);
                                    startPosition += new Vector2(barSize.Y, 0);
                                }
                            }
                        }
                        else
                        {
                            var count = damage.AbilityDamage.Count;
                            if (count > 0)
                            {
                                var barSize       = new Vector2(this.menu.AbilitiesSize * count, this.menu.AbilitiesSize);
                                var startPosition = hpBarPosition + new Vector2((hpBarSize.X / 2f) - (barSize.X / 2f), -35)
                                                    + new Vector2(this.menu.AbilitiesX, this.menu.AbilitiesY);

                                RendererManager.DrawRectangle(
                                    new RectangleF(startPosition.X, startPosition.Y, barSize.X, barSize.Y),
                                    Color.Orange,
                                    5);

                                foreach (var ability in damage.AbilityDamage.Select(x => x.Key))
                                {
                                    RendererManager.DrawTexture(ability.Name, new RectangleF(startPosition.X, startPosition.Y, barSize.Y, barSize.Y));
                                    startPosition += new Vector2(barSize.Y, 0);
                                }
                            }
                        }
                    }
                }
            }
            catch (InvalidOperationException)
            {
                // ignore
            }
            catch (Exception e)
            {
                Logger.Error(e);
            }
        }
Esempio n. 20
0
        private void DrawTalents()
        {
            var ratio  = Hud.Info.ScreenRatio;
            var xStart = Hud.Info.ScreenSize.X * 0.6f;
            var yStart = Hud.Info.ScreenSize.Y * 0.3f;

            var groups  = this.abilityBuilder.Talents.GroupBy(x => x.LearnLevel).ToList();
            var talents = new Dictionary <uint, string>();

            var nameSize = new Vector2();

            foreach (var group in groups)
            {
                var ability = this.talentsType.Selected == BuildType.WinRate
                                  ? group.OrderByDescending(x => x.WinRate).First()
                                  : group.OrderByDescending(x => x.PickRate).First();

                var measure = RendererManager.MeasureText(ability.DisplayName, "Arial", 35 * ratio);
                if (measure.X > nameSize.X)
                {
                    nameSize = measure;
                }

                talents.Add(group.Key, ability.DisplayName);
            }

            var levelSize = RendererManager.MeasureText(talents.ElementAt(0).Key.ToString(), "Arial", 35 * ratio);

            RendererManager.DrawFilledRectangle(
                new RectangleF(xStart, yStart, nameSize.X + levelSize.X + 24, talents.Count * 40 * ratio),
                new Color(75, 75, 75, 175));

            for (var i = 0; i < talents.Count; i++)
            {
                RendererManager.DrawText(
                    talents.ElementAt(i).Key.ToString(),
                    new Vector2(xStart + 2, yStart + (i * 40 * ratio)),
                    Color.White,
                    "Arial",
                    35 * ratio);

                var size = RendererManager.MeasureText(talents.ElementAt(i).Key.ToString(), "Arial", 35 * ratio);

                RendererManager.DrawText(
                    talents.ElementAt(i).Value,
                    new Vector2(xStart + size.X + 10 + 2, yStart + (i * 40 * ratio)),
                    Color.White,
                    "Arial",
                    35 * ratio);

                RendererManager.DrawFilledRectangle(
                    new RectangleF(xStart - 2, (yStart - 2) + (i * 40 * ratio), nameSize.X + levelSize.X + 24, 2),
                    Color.Silver);
            }

            RendererManager.DrawFilledRectangle(
                new RectangleF(xStart - 2, yStart - 2, 2, (talents.Count * 40 * ratio) + 2),
                Color.Silver);

            RendererManager.DrawFilledRectangle(
                new RectangleF((xStart - 2) + levelSize.X + 8, yStart - 2, 2, (talents.Count * 40 * ratio) + 2),
                Color.Silver);

            RendererManager.DrawFilledRectangle(
                new RectangleF((xStart - 2) + nameSize.X + levelSize.X + 24, yStart - 2, 2, (talents.Count * 40 * ratio) + 2),
                Color.Silver);

            RendererManager.DrawFilledRectangle(
                new RectangleF(xStart - 2, (yStart - 2) + (talents.Count * 40 * ratio), nameSize.X + levelSize.X + 24, 2),
                Color.Silver);
        }
Esempio n. 21
0
        public void DrawHealthBar(
            Rectangle9 hpBar,
            int hpPositionY,
            int hpSizeY,
            bool showHpRestore,
            bool showHpAmount,
            int hpTextSize)
        {
            try
            {
                var hp = this.unit.Health;

                if (showHpRestore)
                {
                    var maxHp   = this.unit.MaximumHealth;
                    var restore = 0f;

                    var faerieAdded = false;

                    foreach (var ability in this.healthRestore)
                    {
                        if (!ability.IsValid || !ability.CanBeCasted(false))
                        {
                            continue;
                        }

                        if (ability.Id == AbilityId.item_faerie_fire)
                        {
                            // dont stack faerie hp restore cuz they have cooldown

                            if (faerieAdded)
                            {
                                continue;
                            }

                            faerieAdded = true;
                        }

                        restore += ability.GetHealthRestore(this.unit);
                    }

                    restore = Math.Min(restore, maxHp - hp);

                    if (restore > 0)
                    {
                        var restoreBar = new RectangleF(
                            hpBar.TopLeft.X + ((hpBar.Width * (hp / maxHp)) + 1),
                            hpBar.TopLeft.Y + hpPositionY,
                            hpBar.Width * (restore / maxHp),
                            hpBar.Height + hpSizeY);

                        //var borderBar = new RectangleF(
                        //    restoreBar.X - this.borderSize,
                        //    restoreBar.Y - this.borderSize,
                        //    restoreBar.Width + this.borderSize * 2,
                        //    restoreBar.Height + this.borderSize * 2);

                        //renderer.DrawFilledRectangle(borderBar, this.borderColor);

                        RendererManager.DrawFilledRectangle(restoreBar, this.healthRestoreColor);
                    }
                }

                if (showHpAmount)
                {
                    RendererManager.DrawText(
                        hp.ToString("N0"),
                        new RectangleF(hpBar.X - (hpBar.Width / 2), hpBar.Y - (hpBar.Height / 2), hpBar.Width * 2, hpBar.Height * 2),
                        Color.White,
                        FontFlags.Center | FontFlags.VerticalCenter,
                        hpTextSize);
                }
            }
            catch (InvalidOperationException)
            {
                //ignore
            }
            catch (Exception e)
            {
                Logger.Error(e);
            }
        }
Esempio n. 22
0
        protected override void OverlaySpells(IEnumerable <Ability> spells, Vector2 position, HeroId heroId, float mana, Vector2 extraSize)
        {
            foreach (var spell in spells)
            {
                if (spell.IsHidden)
                {
                    continue;
                }

                if (spell.IsInAbilityPhase)
                {
                    RendererManager.DrawTexture("Divine.BeAware.Resources.Textures.spell_phase.png", new RectangleF(position.X, position.Y, extraSize.X, extraSize.Y));
                }

                var level        = spell.Level;
                var manaCast     = spell.ManaCost;
                var isEnoughMana = mana >= manaCast;
                var cooldown     = spell.Cooldown;
                var isCooldown   = cooldown > 0;
                var isLevel      = level > 0;

                var extraRange = new Vector2(level > 4 ? (level - 4) * 5.5f : 0, 0);

                if (isCooldown || !isEnoughMana || !isLevel)
                {
                    if (isLevel)
                    {
                        extraRange.Y = 13;
                    }

                    var color = !isLevel ? new Color(100, 10, 10, 190) : (isEnoughMana ? new Color(40, 40, 40, 180) : new Color(25, 25, 130, 190));
                    RendererManager.DrawFilledRectangle(new RectangleF(position.X + 1, position.Y, extraSize.X - 1, extraSize.Y), color, color, 0);
                }

                var notinvospell = heroId != HeroId.npc_dota_hero_invoker || (spell.AbilitySlot != AbilitySlot.Slot_4 && spell.AbilitySlot != AbilitySlot.Slot_5);
                if (notinvospell)
                {
                    for (var lvl = 1; lvl <= level; lvl++)
                    {
                        var rect = new RectangleF(position.X + (extraSize.X * 0.212f * lvl) - extraSize.X * 0.08f, position.Y + 3, extraSize.X * 0.115f, extraSize.X * 0.115f);
                        RendererManager.DrawFilledRectangle(rect, Color.Zero, new Color(255, 255, 0), 0);
                    }
                }

                if (isCooldown)
                {
                    var cooldownText = (cooldown > 1 ? Math.Min(Math.Ceiling(cooldown), 99) : Math.Round(cooldown, 1)).ToString();
                    var cooldownSize = extraSize.X / 2 + 3;
                    var textSize     = RendererManager.MeasureText(cooldownText, cooldownSize);

                    var pos = position + new Vector2(extraSize.X / 2 - textSize.X / 2, (extraSize.Y / 2) - (textSize.Y / 2) + (extraRange.Y - 2));
                    RendererManager.DrawText(cooldownText, pos, Color.WhiteSmoke, cooldownSize);
                }

                if (!isEnoughMana && !isCooldown)
                {
                    var manaText = Math.Min(Math.Ceiling(manaCast - mana), 999).ToString(CultureInfo.InvariantCulture);
                    var textSize = RendererManager.MeasureText(manaText, extraSize.X / 2 + 1);

                    Vector2 pos;
                    if (!notinvospell)
                    {
                        pos = position + new Vector2(extraSize.X / 2 - textSize.X / 2, (extraSize.Y / 2) - (textSize.Y / 2) + (extraRange.Y - 2));
                    }
                    else
                    {
                        pos = position + new Vector2(extraSize.X / 2 - textSize.X / 2, (extraSize.Y / 2) - (textSize.Y / 2) + (extraRange.Y - 2));
                    }

                    RendererManager.DrawText(manaText, pos, Color.LightBlue, extraSize.X / 2 + 1);
                }

                RendererManager.DrawRectangle(new RectangleF(position.X, position.Y, extraSize.X + 1 + extraRange.X, extraSize.Y + extraRange.Y), Color.Black, 1);

                position += new Vector2(extraSize.X + extraRange.X, 0);
            }
        }