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()}"); }
public void ShieldSwordDecoratorTest() { VehicleDecorator carDecorator = new ShieldDecorator(new Car()); carDecorator = new SwordDecorator(carDecorator); Assert.AreEqual(8, carDecorator.GetDef()); Assert.AreEqual(8, carDecorator.GetAtt()); }
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); }
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; } }
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); } }
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; } }
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)); }