Persuader

This commit is contained in:
2026-02-10 18:42:46 -08:00
parent 92b4e8662f
commit 5451f0b31f
6 changed files with 700 additions and 15 deletions

View File

@@ -95,6 +95,8 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
[Node] private Projectile FireReactor { get; set; } = default!;
[Node] private Projectile AirReactor { get; set; } = default!;
[Node] private Projectile WaterReactor { get; set; } = default!;
[Node] private Projectile PersuaderBullet { get; set; } = default!;
[Node] private Sprite2D PersuaderCrosshair { get; set; } = default!;
#endregion
@@ -280,6 +282,9 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
VTComponent.RaiseMaximumVT(equipable.BonusVT, false);
EquipmentComponent.Equip(equipable);
if (equipable is Weapon weapon && weapon.WeaponTag == WeaponTag.KineticProjectile)
PersuaderCrosshair.Show();
}
public void Unequip(EquipableItem equipable)
@@ -288,6 +293,9 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
VTComponent.SetMaximumVT(VTComponent.MaximumVT.Value - equipable.BonusVT);
EquipmentComponent.Unequip(equipable);
if (equipable is Weapon weapon && weapon.WeaponTag == WeaponTag.KineticProjectile)
PersuaderCrosshair.Hide();
}
private static Vector3 GlobalInputVector
@@ -324,7 +332,7 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
private void Attack()
{
var weapon = EquipmentComponent.EquippedWeapon.Value as Weapon;
if (weapon.WeaponTag == WeaponTag.ElementalProjectile)
if (weapon.WeaponTag == WeaponTag.ElementalProjectile || weapon.WeaponTag == WeaponTag.KineticProjectile)
{
HandleProjectile(weapon);
return;
@@ -349,19 +357,24 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
if (ammo == null || ammo.Count <= 0)
return;
if (weapon.WeaponTag != WeaponTag.ElementalProjectile)
return;
if (weapon.WeaponTag == WeaponTag.ElementalProjectile)
{
var fired = false;
if (ammo.AmmoElement == ElementType.Igneous)
fired = FireReactor.Fire();
if (ammo.AmmoElement == ElementType.Aeolic)
fired = AirReactor.Fire();
if (ammo.AmmoElement == ElementType.Hydric)
fired = WaterReactor.Fire();
var fired = false;
if (ammo.AmmoElement == ElementType.Igneous)
fired = FireReactor.Fire();
if (ammo.AmmoElement == ElementType.Aeolic)
fired = AirReactor.Fire();
if (ammo.AmmoElement == ElementType.Hydric)
fired = WaterReactor.Fire();
if (!fired)
return;
if (!fired)
return;
}
else if (weapon.WeaponTag == WeaponTag.KineticProjectile)
{
var fired = false;
fired = PersuaderBullet.Fire();
}
ammo.SetCount(ammo.Count - 1);
if (ammo.Count <= 0)