public IEnumerable<FightStep> Execute(Game game, Character initiator, Character target) { Player player = initiator as Player; if (player == null) throw new ArgumentException("Only players can eat!"); player.EatItem(item); yield break; }
public void MarkKilled(Character dead) { if (dead.Name.Equals(rivalMonsterName)) { ++rivalKillCounter; } }
public void NotifyBattleSlotsUpdated(Character character) { if (OnBattleSlotUpdated != null) { OnBattleSlotUpdated(); //OnCharacterUpdated(character); } }
public IEnumerable<FightStep> Execute(Game game, Character initiator, Character target) { if (game.GetRandom(100) <= 75) { UINotifier.Get().NotifyFlee(initiator); } yield break; }
public DamageStep(Character target, int damage, bool crit, int hitPoints) { Target = target; Damage = damage; Crit = crit; DesiredHitPoints = hitPoints; currentHp = hitPoints - damage; damagePerStep = Math.Min(-1, Damage / TOTAL_STEPS); }
public IEnumerable<FightStep> Execute(Game game, Character initiator, Character target) { // Go through types that have actions and perform them all. if (Types.Contains(FeatType.NORMAL_DAMAGE)) { initiator.GetMainAttack().Execute(game, initiator, target); } // Apply any effect. if (EffectParams != null) { target.AddEffect(game.GetEffect(EffectParams)); } yield break; }
public void FillInfo(Character character) { this.character = character; if (character == null) return; isPlayerCharacter = character is Player; if (characterImage != null) { characterImage.Dispose(); characterImage = null; } characterImage = GetPictureForCharacter(character); nameLabel.Text = character.Name; nameLabel.Location = new Point((this.Width - nameLabel.Width)/2, nameLabel.Location.Y); setLevelAndExperience(character); DrawHealthBar(character.HitPoints, character.MaxHitPoints); Invalidate(); }
private void setLevelAndExperience(Character character) { if (isPlayerCharacter) { Player player = character as Player; levelLabel.Visible = true; levelLabel.Text = "Level " + player.Level; levelLabel.Location = new Point((panel3.Width - levelLabel.Width) / 2, levelLabel.Location.Y); panel3.Visible = true; panel2.Visible = true; drawProgressBar(player.ExperiencePoints, player.TotalXpForNextLevel(player.Level), player.TotalXpForNextLevel(player.Level - 1), Color.SkyBlue, experiencePointsBar, xpLabel); } else { panel3.Visible = false; panel2.Visible = false; } }
public Treasure(Game game, Player player) { Player = player; Loot = new Character(game, "Chest", "chest", 1, 0, 0, 0); LootItems = game.GetRandomLoot(); }
private void CharacterInfo_OnCharacterUpdated(Character c) { if (character != c || character == null) return; FillInfo(c); }
private Image GetPictureForCharacter(Character character) { if (character.IsDead()) { return Image.FromFile(character.BaseImageName + "_dead.png"); } else { Bitmap output = new Bitmap(100, 100); using (Graphics G = Graphics.FromImage(output)) { G.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None; G.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; G.DrawImage(Image.FromFile(character.BaseImageName + ".png"), 0, 0); if (character is Player) { Player player = character as Player; foreach (Item item in player.equipItems.Reverse()) { if (item == null) continue; G.DrawImage(Image.FromFile(item.GetEquipPictureName()), 0, 0); } if (player.BattleSlots[(int)BattleSlotType.LEFT_HAND].Item != null) { Image image = Image.FromFile(player.BattleSlots[(int)BattleSlotType.LEFT_HAND].Item.GetEquipPictureName()); image.RotateFlip(RotateFlipType.RotateNoneFlipX); G.DrawImage(image, 0, 0); } if (player.BattleSlots[(int)BattleSlotType.RIGHT_HAND].Item != null) { G.DrawImage(Image.FromFile(player.BattleSlots[(int)BattleSlotType.RIGHT_HAND].Item.GetEquipPictureName()), 0, 0); } } int effectHeight = 0; foreach (Effect effect in character.ActiveEffects) { Image image = Image.FromFile(effect.GetImageName()); SizeF textSize = G.MeasureString(effect.RemainingTurns.ToString(), EFFECT_FONT); int leftEdge = (character is Player ? 0 : output.Width - 25) - (int)textSize.Width; G.DrawImage(image, leftEdge, effectHeight); G.DrawString(effect.RemainingTurns.ToString(), EFFECT_FONT, Brushes.Black, new Point(leftEdge + 25, 25 - (int)textSize.Height)); } } return output; } }
public AttackStep(Character attacker) { Attacker = attacker; }
public void NotifyCharacterDamage(Character character, int damage, bool crit) { OnCharacterDamage?.Invoke(character, damage, crit); }
public HealStep(Character target, int increase, int hitPoints) { Target = target; Increase = increase; CurrentHitPoints = hitPoints; }
public void NotifyCharacterUpdated(Character character) { OnCharacterUpdated?.Invoke(character); }
public void NotifyFlee(Character character) { OnFlee?.Invoke(character); }
public void NotifyEquipItemsUpdated(Character character) { if (OnEquipItemsUpdated != null) { OnEquipItemsUpdated(); OnCharacterUpdated(character); } }
public IEnumerable<FightStep> Execute(Game game, Character initiator, Character target) { bool crit = false; if (initiator.IsDead()) throw new InvalidOperationException("Dead characters cannot attack!"); int roll = game.Roll(DiceRoll.D20(0)); int damage = 0; crit = false; if (roll >= stats.CritRangeStart) { roll = game.Roll(DiceRoll.D20(0)); if (roll + initiator.AttackModifier > target.ArmorClass) { crit = true; for (int i = 0; i < stats.CritModifier; ++i) { damage += Math.Max(game.Roll(stats.Damage), 1); } } else { damage = Math.Max(game.Roll(stats.Damage), 1); } } else if (roll + initiator.AttackModifier > target.ArmorClass) { damage = Math.Max(game.Roll(stats.Damage), 1); } // else miss if (damage > 0 && initiator is Player) { (initiator as Player).GainProficiency(target as Monster, weapon); } target.UpdateHitPoints(-damage); yield return new AttackStep(initiator); yield return new DamageStep(target, -damage, crit, target.HitPoints); }