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; }
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; }
public Damage(Character character, Character enemy) { Character = character; Enemy = enemy; }
public float Calculate(Character character, Character enemy) { return DamageFunc(character, enemy); }
public Stats(Character owner, Dictionary<string, float> levelUpModifiers) { Owner = owner; LevelUpModifiers = levelUpModifiers; }
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; }
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; }