Beispiel #1
0
 public Bullet(Character owner, SpriteAsset bulletAsset, Vector2 direction, Func<Collision, bool> hitMask) :
     base(bulletAsset.Width, bulletAsset.Height, true)
 {
     this.owner = owner;
     CurrentSprite = bulletAsset;
     this.direction = direction;
     this.hitMask = hitMask;
 }
Beispiel #2
0
        public FloatingText(Character owner, string text, Color color, float scale) : base(scale, color)
        {
            this.owner = owner;
            Name =
                $"{owner.Name}_floatingtext_{Guid.NewGuid()}";
            Order = owner.Order;
            Text = text;
            xPadding = (float) new Random((int) DateTime.Now.Ticks).NextDouble()*3;

            startingX = owner.X;
            startingY = owner.Y;

            IgnoreCamera = false;
        }
Beispiel #3
0
 public Damage(Character character, Character enemy)
 {
     Character = character;
     Enemy = enemy;
 }
Beispiel #4
0
 public float Calculate(Character character, Character enemy)
 {
     return DamageFunc(character, enemy);
 }
Beispiel #5
0
 public Stats(Character owner, Dictionary<string, float> levelUpModifiers)
 {
     Owner = owner;
     LevelUpModifiers = levelUpModifiers;
 }
Beispiel #6
0
        protected virtual float GetDamage(Character enemy, Damage damage)
        {
            LevelCheck(); // could happen that the player kills the enemy before he fully spawn (before Start "starts")
            enemy.LevelCheck();
            var dmg = damage.Calculate(this, enemy);

            LastHitCharacter = enemy;
            Stats.Hp -= dmg;

            var floatingText = new FloatingText(this, "-" + (int) dmg, Color.White, 0.4f + dmg/300f);
            Engine.SpawnObject(
                floatingText.Name, floatingText
                );

            // bounce back only if the damage is from a ranged enemy
            if (damage.KnockBack > 0f)
                BounceBack(damage);

            AudioSource.Volume = 0.65f;
            AudioSource.Play(((AudioAsset) Engine.GetAsset("sound_damage")).Clip);

            TookDamage(dmg);
            return Stats.Hp;
        }
Beispiel #7
0
        public virtual bool DoDamage(Character enemy, Damage damage = null)
        {
            if (damage == null)
            {
                // simple (closecombat usually) damage
                damage = new Damage(this, enemy) {DamageFunc = (ch0, ch1) => ch1.Stats.Attack};
            }

            enemy.GetDamage(this, damage);
            if (!enemy.IsAlive)
                Stats.Xp += enemy.Stats.XpReward;
            return enemy.IsAlive;
        }