Advertisement
Fidru

Untitled

Jun 18th, 2024
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.94 KB | None | 0 0
  1. public class Node : INode
  2.     {
  3.         public string Name { get; set; }
  4.         public string Id { get; set; }
  5.     }
  6.  
  7.     public class Stat : Node, IStat
  8.     {
  9.         public bool IsPrimaryStat { get; set; }
  10.         public int Value { get; set; }
  11.     }
  12.  
  13.     public class Player : Node, IPlayer
  14.     {
  15.         public IEnumerable<IStat> Stats { get; set; }
  16.  
  17.         public int Speed
  18.         {
  19.             get
  20.             {
  21.                 var baseSpeed = 10;
  22.                 var agility = Stats.First(x => x.Name == "Dex").Value;
  23.  
  24.                 return baseSpeed + agility;
  25.             }
  26.         }
  27.  
  28.         public int HP { get { return Stats.First(x => x.Name == "Hp").Value; } }
  29.  
  30.         public IEnumerable<IWeapon> Inventory { get; set; }
  31.         public IWeapon Weapon { get; set; }
  32.  
  33.         public void Attack(IPlayer enemy)
  34.         {
  35.             var damage = Weapon.CalculateDamage(this);
  36.  
  37.             enemy.ReduceHealth(damage);
  38.         }
  39.  
  40.         public void ReduceHealth(int damage)
  41.         {
  42.             var hpStat = Stats.First(x => x.Name == "Hp");
  43.  
  44.             hpStat.Value -= damage;
  45.  
  46.             if (hpStat.Value <= 0)
  47.             {
  48.                 //trigger death;
  49.             }
  50.         }
  51.     }
  52.  
  53.     public class Enemy : Player, IEnemy
  54.     {
  55.  
  56.     }
  57.  
  58.     public class Weapon : Node, IWeapon
  59.     {
  60.         public int Damage { get; set; }
  61.         public int Price { get; set; }
  62.         public int SortOrder { get; set; }
  63.  
  64.         public Weapon(int damage, int price, int sortOrder)
  65.         {
  66.             Damage = damage;
  67.             Price = price;
  68.             SortOrder = sortOrder;
  69.         }
  70.  
  71.         public int CalculateDamage(IPlayer attacker)
  72.         {
  73.             var baseDamage = CalculateBaseDamage(attacker);
  74.             var customDamage = CalculateCustomDamage(attacker);
  75.  
  76.             return baseDamage + customDamage;
  77.         }
  78.  
  79.         public virtual int CalculateCustomDamage(IPlayer attacker)
  80.         {
  81.             return 0;
  82.         }
  83.  
  84.         public virtual int CalculateBaseDamage(IPlayer attacker)
  85.         {
  86.             var primaryStat = attacker.Stats.First(s => s.IsPrimaryStat);
  87.             var damage = Damage * primaryStat.Value;
  88.  
  89.             return damage;
  90.         }
  91.     }
  92.  
  93.     public class Dagger : Weapon, IDagger
  94.     {
  95.         public Dagger(int damage, int price)
  96.             : base(damage, price, 10)
  97.  
  98.         {
  99.         }
  100.         public override int CalculateCustomDamage(IPlayer attacker)
  101.         {
  102.             //Dagger pierce 20%
  103.  
  104.             var pierceDamage = CalculateBaseDamage(attacker) * 20 / 100;
  105.  
  106.             return pierceDamage;
  107.         }
  108.     }
  109.  
  110.     public class Staff : Weapon, IStaff
  111.     {
  112.         public Staff(int damage, int price)
  113.             : base(damage, price, 20)
  114.         {
  115.         }
  116.  
  117.  
  118.         public override int CalculateCustomDamage(IPlayer attacker)
  119.         {
  120.             return -5;
  121.         }
  122.     }
  123. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement