Exemplo n.º 1
0
        public void AddDefense(Vehicle car, Defense defense)
        {
            var carDecorator = new VehicleDecorator(car);

            switch (defense)
            {
            case Defense.Armor:
                carDecorator = new ArmorDecorator(carDecorator);
                break;

            case Defense.Gloves:
                carDecorator = new GlovesDecorator(carDecorator);
                break;

            case Defense.Helmet:
                carDecorator = new HelmetDecorator(carDecorator);
                break;

            case Defense.Shield:
                carDecorator = new ShieldDecorator(carDecorator);
                break;
            }

            Console.WriteLine($"Def: {carDecorator.GetDef()}");
        }
Exemplo n.º 2
0
        public void ShieldSwordDecoratorTest()
        {
            VehicleDecorator carDecorator = new ShieldDecorator(new Car());

            carDecorator = new SwordDecorator(carDecorator);

            Assert.AreEqual(8, carDecorator.GetDef());
            Assert.AreEqual(8, carDecorator.GetAtt());
        }
Exemplo n.º 3
0
        public static void DecoratorUsage()
        {
            VehicleDecorator carDecorator = new ShieldDecorator(new Car());

            System.Console.WriteLine($"Att: {carDecorator.GetAtt()}, Def: {carDecorator.GetDef()}");
            carDecorator = new SwordDecorator(carDecorator);
            System.Console.WriteLine($"Att: {carDecorator.GetAtt()}, Def: {carDecorator.GetDef()}");
            carDecorator = new ArmorDecorator(carDecorator);
            carDecorator = new BowDecorator(carDecorator);
            System.Console.WriteLine($"Att: {carDecorator.GetAtt()}, Def: {carDecorator.GetDef()}");
        }
        public IFighter CreateFighter(int lives, int attack, int defense, IEnumerable <string> options)
        {
            IFighter fighter = new Fighter(lives, attack, defense);

            foreach (var option in options)
            {
                switch (option)
                {
                case DOUBLE_HANDED:
                    fighter = new DoubleHandedDecorator(fighter);
                    break;

                case MINION:
                    fighter = new MinionDecorator(fighter, fighter.Lives / 2, fighter.AttackValue / 2);
                    break;

                case POISON:
                    fighter = new PoisonDecorator(fighter, 10);
                    break;

                case SHIELD:
                    fighter = new ShieldDecorator(fighter, 3);
                    break;

                case SHOTGUN:
                    fighter = new ShotgunDecorator(fighter);
                    break;

                case STRENGTHEN:
                    fighter = new StrengthenDecorator(fighter);
                    break;
                }
            }

            return(fighter);
        }
Exemplo n.º 5
0
        public void PaintTopInGame(ClipState clipState)
        {
            if (Hud.Render.UiHidden)
            {
                return;
            }
            if (clipState != ClipState.BeforeClip)
            {
                return;
            }

            // hp

            var uiRect = Hud.Render.GetUiElement("Root.NormalLayer.game_dialog_backgroundScreenPC.game_progressBar_healthBall").Rectangle;

            HealthPCTDecorator.Paint(uiRect.Left + uiRect.Width * 0.13f, uiRect.Top + uiRect.Height * 0.05f, uiRect.Width * 0.8f, uiRect.Height * 0.15f, HorizontalAlign.Center);
            HealthDecorator.Paint(uiRect.Left + uiRect.Width * 0.13f, uiRect.Top + uiRect.Height * 0.26f, uiRect.Width * 0.8f, uiRect.Height * 0.15f, HorizontalAlign.Center);

            if (Hud.Game.Me.Defense.CurrentEffectiveHealingPercent != 0)
            {
                (Hud.Game.Me.Defense.CurrentEffectiveHealingPercent > 0 ? HealingPosDecorator : HealingNegDecorator).Paint(uiRect.Left + uiRect.Width * 0.2f, uiRect.Top + uiRect.Height * 0.42f, uiRect.Width * 0.8f, uiRect.Height * 0.1f, HorizontalAlign.Center);
                (Hud.Game.Me.Defense.CurrentEffectiveHealingPercent > 0 ? HealingPosdetailsDecorator : HealingNegdetailsDecorator).Paint(uiRect.Left + uiRect.Width * 0.2f, uiRect.Top + uiRect.Height * 0.52f, uiRect.Width * 0.8f, uiRect.Height * 0.1f, HorizontalAlign.Center);
            }

            if (Hud.Game.Me.Defense.CurShield > 0)
            {
                ShieldDecorator.Paint(uiRect.Left + uiRect.Width * 0.13f, uiRect.Top + uiRect.Height * 0.75f, uiRect.Width * 0.63f, uiRect.Height * 0.12f, HorizontalAlign.Right);
            }

            // resource

            uiRect = Hud.Render.GetUiElement("Root.NormalLayer.game_dialog_backgroundScreenPC.game_progressBar_manaBall").Rectangle;

            switch (Hud.Game.Me.HeroClassDefinition.HeroClass)
            {
            case HeroClass.Wizard:
                ArcanePCTDecorator.Paint(uiRect.Left, uiRect.Top + uiRect.Height * 0.05f, uiRect.Width, uiRect.Height * 0.15f, HorizontalAlign.Center);
                ArcaneValueDecorator.Paint(uiRect.Left, uiRect.Top + uiRect.Height * 0.30f, uiRect.Width, uiRect.Height * 0.15f, HorizontalAlign.Center);
                ArcaneRegenDecorator.Paint(uiRect.Left, uiRect.Top + uiRect.Height * 0.55f, uiRect.Width, uiRect.Height * 0.15f, HorizontalAlign.Center);
                break;

            case HeroClass.WitchDoctor:
                ManaPCTDecorator.Paint(uiRect.Left, uiRect.Top + uiRect.Height * 0.05f, uiRect.Width, uiRect.Height * 0.15f, HorizontalAlign.Center);
                ManaValueDecorator.Paint(uiRect.Left, uiRect.Top + uiRect.Height * 0.30f, uiRect.Width, uiRect.Height * 0.15f, HorizontalAlign.Center);
                ManaRegenDecorator.Paint(uiRect.Left, uiRect.Top + uiRect.Height * 0.55f, uiRect.Width, uiRect.Height * 0.15f, HorizontalAlign.Center);
                break;

            case HeroClass.Necromancer:
                EssencePCTDecorator.Paint(uiRect.Left, uiRect.Top + uiRect.Height * 0.05f, uiRect.Width, uiRect.Height * 0.15f, HorizontalAlign.Center);
                EssenceValueDecorator.Paint(uiRect.Left, uiRect.Top + uiRect.Height * 0.30f, uiRect.Width, uiRect.Height * 0.15f, HorizontalAlign.Center);
                EssenceRegenDecorator.Paint(uiRect.Left, uiRect.Top + uiRect.Height * 0.55f, uiRect.Width, uiRect.Height * 0.15f, HorizontalAlign.Center);
                break;

            case HeroClass.DemonHunter:
                HatredPCTDecorator.Paint(uiRect.Left, uiRect.Top + uiRect.Height * 0.05f, uiRect.Width * 0.62f, uiRect.Height * 0.23f, HorizontalAlign.Center);
                HatredValueDecorator.Paint(uiRect.Left, uiRect.Top + uiRect.Height * 0.30f, uiRect.Width * 0.5f, uiRect.Height * 0.15f, HorizontalAlign.Center);
                DisciplinePCTDecorator.Paint(uiRect.Left + uiRect.Width * 0.5f, uiRect.Top + uiRect.Height * 0.05f, uiRect.Width * 0.35f, uiRect.Height * 0.23f, HorizontalAlign.Center);
                DisciplineValueDecorator.Paint(uiRect.Left + uiRect.Width * 0.5f, uiRect.Top + uiRect.Height * 0.30f, uiRect.Width * 0.45f, uiRect.Height * 0.15f, HorizontalAlign.Center);
                HatredRegenDecorator.Paint(uiRect.Left, uiRect.Top + uiRect.Height * 0.55f, uiRect.Width * 0.55f, uiRect.Height * 0.23f, HorizontalAlign.Center);
                DisciplineRegenDecorator.Paint(uiRect.Left + uiRect.Width * 0.5f, uiRect.Top + uiRect.Height * 0.55f, uiRect.Width * 0.35f, uiRect.Height * 0.23f, HorizontalAlign.Center);
                break;

            case HeroClass.Barbarian:
                FuryPCTDecorator.Paint(uiRect.Left, uiRect.Top + uiRect.Height * 0.05f, uiRect.Width, uiRect.Height * 0.15f, HorizontalAlign.Center);
                FuryValueDecorator.Paint(uiRect.Left, uiRect.Top + uiRect.Height * 0.30f, uiRect.Width, uiRect.Height * 0.15f, HorizontalAlign.Center);
                FuryRegenDecorator.Paint(uiRect.Left, uiRect.Top + uiRect.Height * 0.55f, uiRect.Width, uiRect.Height * 0.15f, HorizontalAlign.Center);
                break;

            case HeroClass.Crusader:
                WrathPCTDecorator.Paint(uiRect.Left, uiRect.Top + uiRect.Height * 0.05f, uiRect.Width, uiRect.Height * 0.15f, HorizontalAlign.Center);
                WrathValueDecorator.Paint(uiRect.Left, uiRect.Top + uiRect.Height * 0.30f, uiRect.Width, uiRect.Height * 0.15f, HorizontalAlign.Center);
                WrathRegenDecorator.Paint(uiRect.Left, uiRect.Top + uiRect.Height * 0.55f, uiRect.Width, uiRect.Height * 0.15f, HorizontalAlign.Center);
                break;

            case HeroClass.Monk:
                SpiritPCTDecorator.Paint(uiRect.Left, uiRect.Top + uiRect.Height * 0.05f, uiRect.Width, uiRect.Height * 0.15f, HorizontalAlign.Center);
                SpiritValueDecorator.Paint(uiRect.Left, uiRect.Top + uiRect.Height * 0.30f, uiRect.Width, uiRect.Height * 0.15f, HorizontalAlign.Center);
                SpiritRegenDecorator.Paint(uiRect.Left, uiRect.Top + uiRect.Height * 0.55f, uiRect.Width, uiRect.Height * 0.15f, HorizontalAlign.Center);
                break;
            }
        }
Exemplo n.º 6
0
        public void PaintTopInGame(ClipState clipState)
        {
            var  hedPlugin = Hud.GetPlugin <HotEnablerDisablerPlugin>();
            bool GoOn      = hedPlugin.CanIRun(Hud.Game.Me, this.GetType().Name);

            if (!GoOn)
            {
                return;
            }

            if (Hud.Render.UiHidden)
            {
                return;
            }
            if (clipState != ClipState.BeforeClip)
            {
                return;
            }

            CustomLifeWarningDecorator.BackgroundBrush.Opacity = opacity;

            var percentLife = Hud.Game.Me.Defense.HealthPct;

            if (percentLife < (float)lifePercentage && percentLife > 25f)
            {
                if (opacity < 1.0f)
                {
                    opacity += 0.04f;
                }
                CustomLifeWarningDecorator.Paint(0f, 0f, (float)maxX, (float)maxY, HorizontalAlign.Center);
            }
            else
            {
                if (opacity > 0.0f)
                {
                    opacity -= 0.04f;
                    CustomLifeWarningDecorator.Paint(0f, 0f, (float)maxX, (float)maxY, HorizontalAlign.Center);
                }
            }


            var   uiRect       = Hud.Render.GetUiElement("Root.NormalLayer.game_dialog_backgroundScreenPC.game_progressBar_healthBall").Rectangle;
            var   CircleCenter = Hud.Window.CreateScreenCoordinate(uiRect.Left + (uiRect.Width / 2.15f), uiRect.Bottom - (uiRect.Height / 1.41f));
            float CircleRadius = 55f;

            //ShieldBrush.DrawEllipse(uiRect.Left + (uiRect.Width/2), uiRect.Bottom - (uiRect.Height/2), 60, 60); // test circle
            //ShieldDecorator.Paint(CircleCenter.X, CircleCenter.Y, 50f, 50f, HorizontalAlign.Left); // center

            int ShieldPer19 = (int)Math.Round((Hud.Game.Me.Defense.CurShield / Hud.Game.Me.Defense.HealthMax) * 19);

            var glowTexture = Hud.Texture.GetTexture(1981524232);

            var ShieldPylon = Hud.Game.Me.Powers.GetBuff(266254);

            if (ShieldPylon == null || !ShieldPylon.Active)
            {
                SPTL = String.Empty;
            }
            else
            {
                int ShieldPylonTimeLeft = (int)ShieldPylon.TimeLeftSeconds[0];
                ShieldPer19 = 19;
                if (Hud.Game.Me.Defense.CurShield == 0f)
                {
                    if (ShieldPylonTimeLeft < 10)
                    {
                        SPTL = Environment.NewLine + " " + ShieldPylonTimeLeft.ToString();
                    }
                    else
                    {
                        SPTL = Environment.NewLine + ShieldPylonTimeLeft.ToString();
                    }
                    InfiniteShieldDecorator.Paint(uiRect.Left + uiRect.Width * 0.2f, uiRect.Top + uiRect.Height * 0.66f, uiRect.Width * 0.63f, uiRect.Height * 0.12f, HorizontalAlign.Center);
                }
            }

            for (int i = 1; i <= ShieldPer19 && i < _steps.Count; i++)
            {
                float Angle    = _steps[i];
                var   PointOne = PointOnCircle(CircleRadius, Angle, CircleCenter.X, CircleCenter.Y);
                glowTexture.Draw(PointOne.Item1 - 15, PointOne.Item2, 50f, 50f, opacityMultiplier: 0.5f);
                ShieldDecorator.Paint(PointOne.Item1, PointOne.Item2, 50f, 50f, HorizontalAlign.Left);
            }
        }
Exemplo n.º 7
0
        public override void PaintTopInGame(ClipState clipState)
        {
            if (Hud.Render.UiHidden)
            {
                return;
            }
            if (clipState != ClipState.BeforeClip)
            {
                return;
            }

            var uiRect = Hud.Render.GetUiElement("Root.NormalLayer.game_dialog_backgroundScreenPC.game_progressBar_healthBall").Rectangle;

            var glowTexture = Hud.Texture.GetTexture(1981524232);

            glowTexture.Draw(uiRect.Left + uiRect.Width * 0.6f - uiRect.Height * 0.4f, uiRect.Top + uiRect.Height * 0.32f - uiRect.Height * 0.4f, uiRect.Height * 0.8f, uiRect.Height * 0.8f, opacityMultiplier: 0.7f);

            HealthDecorator.Paint(uiRect.Left + uiRect.Width * 0.2f, uiRect.Top + uiRect.Height * 0.26f, uiRect.Width * 0.8f, uiRect.Height * 0.15f, HorizontalAlign.Center);

            if (Hud.Game.Me.Defense.CurrentEffectiveHealingPercent != 0)
            {
                (Hud.Game.Me.Defense.CurrentEffectiveHealingPercent > 0 ? HealingPosDecorator : HealingNegDecorator).Paint(uiRect.Left + uiRect.Width * 0.2f, uiRect.Top + uiRect.Height * 0.42f, uiRect.Width * 0.8f, uiRect.Height * 0.1f, HorizontalAlign.Center);
            }

            if (Hud.Game.Me.Defense.CurShield > 0)
            {
                ShieldDecorator.Paint(uiRect.Left + uiRect.Width * 0.2f, uiRect.Top + uiRect.Height * 0.66f, uiRect.Width * 0.63f, uiRect.Height * 0.12f, HorizontalAlign.Right);
            }

            uiRect = Hud.Render.GetUiElement("Root.NormalLayer.game_dialog_backgroundScreenPC.game_progressBar_manaBall").Rectangle;

            switch (Hud.Game.Me.HeroClassDefinition.HeroClass)
            {
            case HeroClass.Wizard:
                ArcaneValueDecorator.Paint(uiRect.Left, uiRect.Top + uiRect.Height * 0.30f, uiRect.Width, uiRect.Height * 0.15f, HorizontalAlign.Center);
                ArcaneRegenDecorator.Paint(uiRect.Left, uiRect.Top + uiRect.Height * 0.43f, uiRect.Width, uiRect.Height * 0.15f, HorizontalAlign.Center);
                break;

            case HeroClass.WitchDoctor:
                ManaValueDecorator.Paint(uiRect.Left, uiRect.Top + uiRect.Height * 0.30f, uiRect.Width, uiRect.Height * 0.15f, HorizontalAlign.Center);
                ManaRegenDecorator.Paint(uiRect.Left, uiRect.Top + uiRect.Height * 0.43f, uiRect.Width, uiRect.Height * 0.15f, HorizontalAlign.Center);
                break;

            case HeroClass.Barbarian:
                FuryValueDecorator.Paint(uiRect.Left, uiRect.Top + uiRect.Height * 0.30f, uiRect.Width, uiRect.Height * 0.15f, HorizontalAlign.Center);
                FuryRegenDecorator.Paint(uiRect.Left, uiRect.Top + uiRect.Height * 0.43f, uiRect.Width, uiRect.Height * 0.15f, HorizontalAlign.Center);
                break;

            case HeroClass.DemonHunter:
                HatredValueDecorator.Paint(uiRect.Left, uiRect.Top + uiRect.Height * 0.30f, uiRect.Width * 0.5f, uiRect.Height * 0.15f, HorizontalAlign.Center);
                DisciplineValueDecorator.Paint(uiRect.Left + uiRect.Width * 0.5f, uiRect.Top + uiRect.Height * 0.30f, uiRect.Width * 0.5f, uiRect.Height * 0.15f, HorizontalAlign.Center);
                HatredRegenDecorator.Paint(uiRect.Left, uiRect.Top + uiRect.Height * 0.43f, uiRect.Width * 0.5f, uiRect.Height * 0.15f, HorizontalAlign.Center);
                DisciplineRegenDecorator.Paint(uiRect.Left + uiRect.Width * 0.5f, uiRect.Top + uiRect.Height * 0.43f, uiRect.Width * 0.5f, uiRect.Height * 0.15f, HorizontalAlign.Center);
                break;

            case HeroClass.Crusader:
                WrathValueDecorator.Paint(uiRect.Left, uiRect.Top + uiRect.Height * 0.30f, uiRect.Width, uiRect.Height * 0.15f, HorizontalAlign.Center);
                WrathRegenDecorator.Paint(uiRect.Left, uiRect.Top + uiRect.Height * 0.43f, uiRect.Width, uiRect.Height * 0.15f, HorizontalAlign.Center);
                break;

            case HeroClass.Monk:
                SpiritValueDecorator.Paint(uiRect.Left, uiRect.Top + uiRect.Height * 0.30f, uiRect.Width, uiRect.Height * 0.15f, HorizontalAlign.Center);
                SpiritRegenDecorator.Paint(uiRect.Left, uiRect.Top + uiRect.Height * 0.43f, uiRect.Width, uiRect.Height * 0.15f, HorizontalAlign.Center);
                break;
            }
        }
Exemplo n.º 8
0
        public ActionResult DoSpecialAction(int position, IArmy myArmy, IArmy enemyArmy, Random random = null)
        {
            if (random == null)
            {
                random = new Random();
            }

            double probability = random.NextDouble();

            //для улучшения сгенерированная вероятность должна принадлежать промежутку [0, ImprovementHeavyUnitProbability)
            if (probability >= ImprovementHeavyUnitProbability)
            {
                return(ActionResult.Empty);
            }

            int[] availibleForImprovement = GetAvailibleForImprovement(position, myArmy).ToArray();

            if (availibleForImprovement.Length == 0)
            {
                return(ActionResult.Empty);
            }

            int index  = availibleForImprovement[random.Next(0, availibleForImprovement.Length)];
            int action = random.Next(0, 4);

            IHeavyInfantry unit = myArmy.GetUnit(index) as IHeavyInfantry;

            switch (action)
            {
            case 0:
                if (unit.ContainsImprovement(typeof(HelmetDecorator)))
                {
                    return(ActionResult.Empty);
                }
                unit = new HelmetDecorator(unit);
                myArmy.ReplaceUnit(unit, index);
                break;

            case 1:
                if (unit.ContainsImprovement(typeof(HorseDecorator)))
                {
                    return(ActionResult.Empty);
                }
                unit = new HorseDecorator(unit);
                myArmy.ReplaceUnit(unit, index);
                break;

            case 2:
                if (unit.ContainsImprovement(typeof(ShieldDecorator)))
                {
                    return(ActionResult.Empty);
                }
                unit = new ShieldDecorator(unit);
                myArmy.ReplaceUnit(unit, index);
                break;

            case 3:
                if (unit.ContainsImprovement(typeof(SwordDecorator)))
                {
                    return(ActionResult.Empty);
                }
                unit = new SwordDecorator(unit);
                myArmy.ReplaceUnit(unit, index);
                break;

            default:
                return(ActionResult.Empty);
            }
            return(new ActionResult(this, unit, ActionResultType.Improvement));
        }