Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Node : INode
- {
- public string Name { get; set; }
- public string Id { get; set; }
- }
- public class Stat : Node, IStat
- {
- public bool IsPrimaryStat { get; set; }
- public int Value { get; set; }
- }
- public class Player : Node, IPlayer
- {
- public IEnumerable<IStat> Stats { get; set; }
- public int Speed
- {
- get
- {
- var baseSpeed = 10;
- var agility = Stats.First(x => x.Name == "Dex").Value;
- return baseSpeed + agility;
- }
- }
- public int HP { get { return Stats.First(x => x.Name == "Hp").Value; } }
- public IEnumerable<IWeapon> Inventory { get; set; }
- public IWeapon Weapon { get; set; }
- public void Attack(IPlayer enemy)
- {
- var damage = Weapon.CalculateDamage(this);
- enemy.ReduceHealth(damage);
- }
- public void ReduceHealth(int damage)
- {
- var hpStat = Stats.First(x => x.Name == "Hp");
- hpStat.Value -= damage;
- if (hpStat.Value <= 0)
- {
- //trigger death;
- }
- }
- }
- public class Enemy : Player, IEnemy
- {
- }
- public class Weapon : Node, IWeapon
- {
- public int Damage { get; set; }
- public int Price { get; set; }
- public int SortOrder { get; set; }
- public Weapon(int damage, int price, int sortOrder)
- {
- Damage = damage;
- Price = price;
- SortOrder = sortOrder;
- }
- public int CalculateDamage(IPlayer attacker)
- {
- var baseDamage = CalculateBaseDamage(attacker);
- var customDamage = CalculateCustomDamage(attacker);
- return baseDamage + customDamage;
- }
- public virtual int CalculateCustomDamage(IPlayer attacker)
- {
- return 0;
- }
- public virtual int CalculateBaseDamage(IPlayer attacker)
- {
- var primaryStat = attacker.Stats.First(s => s.IsPrimaryStat);
- var damage = Damage * primaryStat.Value;
- return damage;
- }
- }
- public class Dagger : Weapon, IDagger
- {
- public Dagger(int damage, int price)
- : base(damage, price, 10)
- {
- }
- public override int CalculateCustomDamage(IPlayer attacker)
- {
- //Dagger pierce 20%
- var pierceDamage = CalculateBaseDamage(attacker) * 20 / 100;
- return pierceDamage;
- }
- }
- public class Staff : Weapon, IStaff
- {
- public Staff(int damage, int price)
- : base(damage, price, 20)
- {
- }
- public override int CalculateCustomDamage(IPlayer attacker)
- {
- return -5;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement