Fix attacks by player and enemy
This commit is contained in:
@@ -17,6 +17,8 @@ namespace GameJamDungeon
|
||||
|
||||
public void ApplyCentralImpulseToPlayer(Vector3 velocity);
|
||||
|
||||
public void TakeDamage(double damage, ElementType elementType, bool isCriticalHit = false);
|
||||
|
||||
public void LevelUp();
|
||||
|
||||
event Player.InventoryButtonPressedEventHandler InventoryButtonPressed;
|
||||
@@ -185,19 +187,22 @@ namespace GameJamDungeon
|
||||
Hitbox.AreaEntered += Hitbox_AreaEntered;
|
||||
}
|
||||
|
||||
private void Hitbox_AreaEntered(Area3D area)
|
||||
{
|
||||
var enemy = Hitbox.GetParent<IEnemy>();
|
||||
enemy.TakeDamage((PlayerStatResource.CurrentAttack + PlayerStatResource.BonusAttack) * PlayerData.Inventory.EquippedWeapon.Value.WeaponStats.ElementalDamageBonus,
|
||||
PlayerData.Inventory.EquippedWeapon.Value.WeaponStats.WeaponElement,
|
||||
ignoreElementalResistance: PlayerData.Inventory.EquippedWeapon.Value.WeaponStats.WeaponTags.Contains(WeaponTag.IgnoreAffinity));
|
||||
}
|
||||
|
||||
public void OnReady()
|
||||
{
|
||||
SetPhysicsProcess(true);
|
||||
}
|
||||
|
||||
public void TakeDamage(double damage, ElementType elementType, bool isCriticalHit = false)
|
||||
{
|
||||
if (PlayerData.CurrentHP.Value > 0)
|
||||
{
|
||||
damage = CalculateDefenseResistance(damage);
|
||||
if (isCriticalHit)
|
||||
damage *= 2;
|
||||
PlayerData.SetCurrentHP(PlayerData.CurrentHP.Value - (int)damage);
|
||||
}
|
||||
}
|
||||
|
||||
public void LevelUp()
|
||||
{
|
||||
var nextLevel = PlayerData.CurrentLevel.Value + 1;
|
||||
@@ -342,5 +347,22 @@ namespace GameJamDungeon
|
||||
if (PlayerData.CurrentExp.Value >= PlayerData.ExpToNextLevel.Value)
|
||||
LevelUp();
|
||||
}
|
||||
|
||||
private double CalculateDefenseResistance(double incomingDamage)
|
||||
{
|
||||
return Mathf.Max(incomingDamage - (PlayerData.CurrentDefense.Value + PlayerData.BonusDefense), 0.0);
|
||||
}
|
||||
|
||||
private void Hitbox_AreaEntered(Area3D area)
|
||||
{
|
||||
var target = area.GetOwner();
|
||||
if (target is IEnemy enemy)
|
||||
{
|
||||
enemy.TakeDamage(
|
||||
(PlayerStatResource.CurrentAttack + PlayerStatResource.BonusAttack + PlayerData.Inventory.EquippedWeapon.Value.WeaponStats.Damage) * PlayerData.Inventory.EquippedWeapon.Value.WeaponStats.ElementalDamageBonus,
|
||||
PlayerData.Inventory.EquippedWeapon.Value.WeaponStats.WeaponElement,
|
||||
ignoreElementalResistance: PlayerData.Inventory.EquippedWeapon.Value.WeaponStats.WeaponTags.Contains(WeaponTag.IgnoreAffinity));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -355,8 +355,8 @@ _defaultArmor = ExtResource("4_bj1ma")
|
||||
[node name="Hitbox" type="Area3D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, -1)
|
||||
collision_layer = 16
|
||||
collision_mask = 16
|
||||
collision_layer = 2048
|
||||
collision_mask = 2048
|
||||
script = ExtResource("2_lb3qc")
|
||||
|
||||
[node name="HitboxCollision" type="CollisionShape3D" parent="Hitbox"]
|
||||
|
||||
Reference in New Issue
Block a user