Add buff/debuff/heal/rust shaders for enemies and throwing glue jar immobilization
This commit is contained in:
@@ -84,6 +84,7 @@ public class EffectService
|
||||
return;
|
||||
|
||||
currentRoom.EnemiesInRoom.ForEach(e => e.HealthComponent.SetCurrentHealth(e.HealthComponent.MaximumHP.Value));
|
||||
currentRoom.EnemiesInRoom.ForEach(e => e.OnHealed());
|
||||
_player.HealthComponent.SetCurrentHealth(_player.HealthComponent.MaximumHP.Value);
|
||||
SfxDatabase.Instance.Play(SoundEffect.HealHP);
|
||||
}
|
||||
@@ -225,6 +226,11 @@ public class EffectService
|
||||
enemy.MoveEnemyToNewRoom(randomRoom);
|
||||
}
|
||||
|
||||
public void DisableEnemyMovement(IEnemy enemy)
|
||||
{
|
||||
enemy.SetEnemySpeedByMultiplier(0);
|
||||
}
|
||||
|
||||
public void CloneEnemy(IEnemy enemy)
|
||||
{
|
||||
var enemyPosition = new Vector3(enemy.GlobalPosition.X, 0f, enemy.GlobalPosition.Z);
|
||||
|
||||
@@ -116,35 +116,40 @@ public partial class ThrownItem : RigidBody3D, IThrownItem
|
||||
{
|
||||
case UsableItemTag.LowerTargetTo1HP:
|
||||
enemy.HealthComponent.SetCurrentHealth(1);
|
||||
SfxDatabase.Instance.Play(SoundEffect.DecreaseStat);
|
||||
enemy.OnDebuff();
|
||||
break;
|
||||
case UsableItemTag.DecreaseAllStats:
|
||||
enemy.AttackComponent.Reduce(usableItem.Stats.BonusAttack);
|
||||
enemy.DefenseComponent.Reduce(usableItem.Stats.BonusDefense);
|
||||
SfxDatabase.Instance.Play(SoundEffect.DecreaseStat);
|
||||
enemy.OnDebuff();
|
||||
break;
|
||||
case UsableItemTag.DecreaseAttack:
|
||||
enemy.AttackComponent.LowerMaximumAttack(usableItem.Stats.BonusAttack);
|
||||
SfxDatabase.Instance.Play(SoundEffect.DecreaseStat);
|
||||
enemy.OnDebuff();
|
||||
break;
|
||||
case UsableItemTag.DecreaseDefense:
|
||||
enemy.DefenseComponent.LowerMaximumDefense(usableItem.Stats.BonusDefense);
|
||||
SfxDatabase.Instance.Play(SoundEffect.DecreaseStat);
|
||||
enemy.OnDebuff();
|
||||
break;
|
||||
case UsableItemTag.IncreaseAttack:
|
||||
enemy.AttackComponent.RaiseMaximumAttack(usableItem.Stats.BonusAttack);
|
||||
SfxDatabase.Instance.Play(SoundEffect.IncreaseStat);
|
||||
enemy.OnBuff();
|
||||
break;
|
||||
case UsableItemTag.IncreaseDefense:
|
||||
enemy.DefenseComponent.RaiseMaximumDefense(usableItem.Stats.BonusDefense);
|
||||
SfxDatabase.Instance.Play(SoundEffect.IncreaseStat);
|
||||
enemy.OnBuff();
|
||||
break;
|
||||
case UsableItemTag.TeleportToRandomLocation:
|
||||
_effectService.TeleportToRandomRoom(enemy);
|
||||
SfxDatabase.Instance.Play(SoundEffect.TeleportToRandomRoom);
|
||||
break;
|
||||
case UsableItemTag.GlueAllEquipment:
|
||||
_effectService.DisableEnemyMovement(enemy);
|
||||
enemy.OnDebuff();
|
||||
break;
|
||||
case UsableItemTag.Clone:
|
||||
_effectService.CloneEnemy(enemy);
|
||||
enemy.OnBuff();
|
||||
break;
|
||||
default:
|
||||
var damageDealt = DamageCalculator.CalculateDamage(new AttackData(usableItem.ThrowDamage, ElementType.None), enemy.DefenseComponent.CurrentDefense.Value, enemy.ElementalResistanceSet);
|
||||
@@ -152,6 +157,20 @@ public partial class ThrownItem : RigidBody3D, IThrownItem
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (ItemThatIsThrown is BoxItem boxItem)
|
||||
{
|
||||
switch (boxItem.Stats.ItemTag)
|
||||
{
|
||||
case ItemTag.RestrictUnequip:
|
||||
_effectService.DisableEnemyMovement(enemy);
|
||||
enemy.OnDebuff();
|
||||
break;
|
||||
default:
|
||||
var damageDealt = DamageCalculator.CalculateDamage(new AttackData(boxItem.ThrowDamage, ElementType.None), enemy.DefenseComponent.CurrentDefense.Value, enemy.ElementalResistanceSet);
|
||||
enemy.HealthComponent.Damage(damageDealt, ElementType.None);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var damageDealt = DamageCalculator.CalculateDamage(new AttackData(ItemThatIsThrown.ThrowDamage, ElementType.None), enemy.DefenseComponent.CurrentDefense.Value, enemy.ElementalResistanceSet);
|
||||
|
||||
Reference in New Issue
Block a user