public void GetHitBy(BasePlayerProjectile projectile, float dmgMultiplier = 1) { if (isHorde) { return; } var effectiveMultiplier = GetEffectiveMultiplier(projectile.DamageType); var dmgInflicted = effectiveMultiplier * projectile.DamageInflicted * dmgMultiplier; TakeDamage(dmgInflicted); var shouldBeHurt = true; switch (projectile.DamageType) { case DamageTypes.Frost: _frostDurationSeconds = projectile.StatusEffectSeconds * effectiveMultiplier; _frostDamagePerSecond = dmgInflicted * projectile.StatusDamageMultiplier; _burnDurationSeconds = 0; shouldBeHurt = false; break; case DamageTypes.Chemical: _poisonedDurationSeconds = projectile.StatusEffectSeconds * effectiveMultiplier; _poisonDamagePerSecond = dmgInflicted * projectile.StatusDamageMultiplier; shouldBeHurt = false; break; case DamageTypes.Electrical: _stunnedDurationSeconds = projectile.StatusEffectSeconds * effectiveMultiplier; break; case DamageTypes.Fire: _burnDurationSeconds = projectile.StatusEffectSeconds * effectiveMultiplier; _burnDamagePerSecond = dmgInflicted * projectile.StatusDamageMultiplier; _frostDurationSeconds = 0; break; } UpdateStatusEffect(justApplied: true); if (!IsDead && shouldBeHurt) { CurrentActionState = Action.Hurt; SpriteInstance.UpdateToCurrentAnimationFrame(); UpdateSpritesRelativeY(); } }
protected void UpdateAnimation() { if (SpriteInstance.CurrentChain == null || SpriteInstance.CurrentChain.Count == 1) { SpriteInstance.RelativeY = _spriteRelativeY; } else { SpriteInstance.UpdateToCurrentAnimationFrame(); if (SpriteInstance.UseAnimationRelativePosition) { SpriteInstance.RelativeX *= (SpriteInstance.FlipHorizontal ? -SpriteInstance.TextureScale : SpriteInstance.TextureScale); SpriteInstance.RelativeY *= (SpriteInstance.FlipVertical ? -SpriteInstance.TextureScale : SpriteInstance.TextureScale); } SpriteInstance.RelativeY += _spriteRelativeY; } }